{"version":3,"sources":["webpack:///./node_modules/twilio-video/es5/util/sdp/trackmatcher/mid.js","webpack:///./node_modules/twilio-video/es5/signaling/v2/networkqualitysignaling.js","webpack:///./node_modules/twilio-video/es5/media/track/remotemediatrack.js","webpack:///./node_modules/twilio-video/es5/stats/localvideotrackstats.js","webpack:///./node_modules/@twilio/webrtc/lib/util/index.js","webpack:///./node_modules/twilio-video/es5/media/track/mediatrack.js","webpack:///./node_modules/twilio-video/es5/media/track/localaudiotrackpublication.js","webpack:///./node_modules/twilio-video/es5/iceserversource/constant.js","webpack:///./node_modules/@twilio/webrtc/lib/rtcicecandidate.js","webpack:///./node_modules/backoff/index.js","webpack:///./node_modules/@twilio/webrtc/lib/mediastreamtrack.js","webpack:///./node_modules/twilio-video/es5/media/track/remotevideotrack.js","webpack:///./node_modules/twilio-video/es5/util/asyncvar.js","webpack:///./node_modules/twilio-video/es5/signaling/participant.js","webpack:///./node_modules/twilio-video/es5/twilioconnection.js","webpack:///./node_modules/@twilio/webrtc/lib/rtcpeerconnection/chrome.js","webpack:///./node_modules/twilio-video/es5/queueingeventemitter.js","webpack:///./node_modules/twilio-video/es5/ecs.js","webpack:///./node_modules/@twilio/webrtc/lib/rtcpeerconnection/index.js","webpack:///./node_modules/twilio-video/es5/signaling/index.js","webpack:///./node_modules/twilio-video/es5/stats/senderreport.js","webpack:///./node_modules/precond/lib/checks.js","webpack:///./node_modules/backoff/lib/strategy/fibonacci.js","webpack:///./node_modules/@twilio/webrtc/lib/rtcsessiondescription/index.js","webpack:///./node_modules/twilio-video/es5/signaling/remoteparticipant.js","webpack:///./node_modules/twilio-video/es5/stats/sum.js","webpack:///./node_modules/twilio-video/es5/signaling/track.js","webpack:///./node_modules/twilio-video/es5/stats/peerconnectionreportfactory.js","webpack:///./node_modules/twilio-video/es5/stats/peerconnectionreport.js","webpack:///./node_modules/twilio-video/es5/transceiver.js","webpack:///./node_modules/backoff/lib/backoff.js","webpack:///./node_modules/twilio-video/es5/signaling/v2/cancelableroomsignalingpromise.js","webpack:///./node_modules/twilio-video/es5/media/track/localvideotrackpublication.js","webpack:///./node_modules/twilio-video/es5/iceserversource/nts.js","webpack:///./node_modules/twilio-video/es5/signaling/room.js","webpack:///./node_modules/util/util.js","webpack:///./node_modules/twilio-video/es5/localparticipant.js","webpack:///./node_modules/twilio-video/es5/createlocaltrack.js","webpack:///./node_modules/twilio-video/es5/media/track/index.js","webpack:///./node_modules/twilio-video/es5/stats/networkqualitybandwidthstats.js","webpack:///./node_modules/twilio-video/es5/stats/senderreportfactory.js","webpack:///./src/components/appointment-status/user.vue?d087","webpack:///src/components/appointment-status/user.vue","webpack:///./src/components/appointment-status/user.vue?2c97","webpack:///./src/components/appointment-status/user.vue","webpack:///./node_modules/twilio-video/es5/util/validate.js","webpack:///./node_modules/twilio-video/es5/media/track/sender.js","webpack:///./node_modules/inherits/inherits_browser.js","webpack:///./node_modules/twilio-video/es5/signaling/v2/localparticipant.js","webpack:///./node_modules/twilio-video/es5/data/sender.js","webpack:///./node_modules/backoff/lib/function_call.js","webpack:///./node_modules/twilio-video/es5/createlocaltracks.js","webpack:///./node_modules/twilio-video/es5/util/sdp/issue8329.js","webpack:///./node_modules/twilio-video/es5/media/track/es5/localdatatrack.js","webpack:///./node_modules/twilio-video/es5/util/twilioerror.js","webpack:///./src/components/appointment-detail/index.vue?e8f7","webpack:///./node_modules/twilio-video/es5/stats/icereport.js","webpack:///./node_modules/twilio-video/es5/util/log.js","webpack:///./node_modules/twilio-video/es5/webaudio/detectsilence.js","webpack:///./node_modules/twilio-video/es5/participant.js","webpack:///./node_modules/twilio-video/es5/signaling/v2/iceconnectionmonitor.js","webpack:///./node_modules/twilio-video/es5/signaling/v2/twilioconnectiontransport.js","webpack:///./node_modules/@twilio/webrtc/lib/rtcrtpsender.js","webpack:///./node_modules/twilio-video/es5/stats/receiverreportfactory.js","webpack:///./node_modules/twilio-video/es5/signaling/v2/trackprioritysignaling.js","webpack:///./node_modules/twilio-video/es5/data/transceiver.js","webpack:///./node_modules/twilio-video/es5/media/track/es5/index.js","webpack:///./node_modules/twilio-video/es5/data/transport.js","webpack:///./node_modules/twilio-video/es5/media/track/remotedatatrack.js","webpack:///./node_modules/twilio-video/es5/util/sdp/trackmatcher/ordered.js","webpack:///./node_modules/twilio-video/es5/signaling/remotetrackpublication.js","webpack:///./node_modules/twilio-video/es5/stats/networkqualityvideostats.js","webpack:///./node_modules/twilio-video/es5/signaling/v2/localtrackpublication.js","webpack:///./node_modules/twilio-video/es5/util/timeout.js","webpack:///./node_modules/twilio-video/es5/stats/icereportfactory.js","webpack:///./src/components/twilio-video/index.vue?6fa1","webpack:///src/components/twilio-video/index.vue","webpack:///./src/components/twilio-video/index.vue?244a","webpack:///./src/components/twilio-video/index.vue?5960","webpack:///./node_modules/twilio-video/es5/media/track/localmediatrack.js","webpack:///./node_modules/twilio-video/es5/stats/senderorreceiverreportfactory.js","webpack:///./node_modules/twilio-video/es5/stats/remotevideotrackstats.js","webpack:///./src/components/appointment-detail/index.vue?5f47","webpack:///src/components/appointment-detail/index.vue","webpack:///./src/components/appointment-detail/index.vue?62db","webpack:///./src/components/appointment-detail/index.vue?4515","webpack:///./node_modules/twilio-video/es5/webaudio/workaround180748.js","webpack:///./node_modules/twilio-video/es5/media/track/localdatatrackpublication.js","webpack:///./node_modules/twilio-video/es5/signaling/v2/peerconnection.js","webpack:///./node_modules/precond/lib/errors.js","webpack:///./node_modules/twilio-video/es5/signaling/v2/recording.js","webpack:///./node_modules/twilio-video/es5/statemachine.js","webpack:///./node_modules/twilio-video/es5/media/track/es5/localaudiotrack.js","webpack:///./node_modules/twilio-video/es5/util/index.js","webpack:///./node_modules/twilio-video/es5/stats/networkqualitymediastats.js","webpack:///./node_modules/twilio-video/es5/request.js","webpack:///./node_modules/@twilio/webrtc/lib/util/sdp.js","webpack:///./src/components/popup-modal/index.vue?54d1","webpack:///src/components/popup-modal/index.vue","webpack:///./src/components/popup-modal/index.vue?27b3","webpack:///./src/components/popup-modal/index.vue","webpack:///./node_modules/twilio-video/es5/stats/remotetrackstats.js","webpack:///./node_modules/twilio-video/es5/media/track/localaudiotrack.js","webpack:///./node_modules/twilio-video/es5/stats/networkqualityaudiostats.js","webpack:///./node_modules/backoff/lib/strategy/strategy.js","webpack:///./node_modules/twilio-video/es5/stats/networkqualityrecvstats.js","webpack:///./node_modules/twilio-video/es5/data/receiver.js","webpack:///./node_modules/twilio-video/es5/signaling/v2/dominantspeakersignaling.js","webpack:///./node_modules/@twilio/webrtc/lib/rtcpeerconnection/firefox.js","webpack:///./node_modules/twilio-video/es5/eventemitter.js","webpack:///./node_modules/twilio-video/es5/media/track/localtrackpublication.js","webpack:///./node_modules/@twilio/webrtc/lib/rtcsessiondescription/chrome.js","webpack:///./node_modules/@twilio/webrtc/lib/rtcsessiondescription/firefox.js","webpack:///./node_modules/twilio-video/es5/signaling/v2/trackswitchoffsignaling.js","webpack:///./node_modules/twilio-video/es5/util/filter.js","webpack:///./node_modules/twilio-video/es5/media/track/remotedatatrackpublication.js","webpack:///./node_modules/twilio-video/es5/networkqualityconfiguration.js","webpack:///./node_modules/twilio-video/es5/encodingparameters.js","webpack:///./node_modules/twilio-video/es5/signaling/v2/networkqualitymonitor.js","webpack:///./node_modules/twilio-video/es5/util/sdp/simulcast.js","webpack:///./node_modules/@twilio/webrtc/lib/mediastream.js","webpack:///./node_modules/twilio-video/es5/stats/networkqualitylatencystats.js","webpack:///./node_modules/twilio-video/src/xmlhttprequest.js","webpack:///./node_modules/@twilio/webrtc/lib/util/latch.js","webpack:///./node_modules/twilio-video/es5/stats/localaudiotrackstats.js","webpack:///./node_modules/@twilio/webrtc/lib/rtcpeerconnection/safari.js","webpack:///./node_modules/twilio-video/es5/util/insightspublisher/null.js","webpack:///./node_modules/twilio-video/es5/util/cancelablepromise.js","webpack:///./node_modules/twilio-video/es5/signaling/localtrackpublication.js","webpack:///./src/components/twilio-video/index.vue?4c89","webpack:///./node_modules/twilio-video/es5/util/insightspublisher/index.js","webpack:///./node_modules/twilio-video/es5/media/track/trackpublication.js","webpack:///./node_modules/twilio-video/es5/util/sdp/trackmatcher/identity.js","webpack:///./node_modules/twilio-video/es5/util/support.js","webpack:///./node_modules/twilio-video/es5/media/track/transceiver.js","webpack:///./node_modules/twilio-video/es5/signaling/v2/icebox.js","webpack:///./node_modules/twilio-video/es5/media/track/localvideotrack.js","webpack:///./node_modules/twilio-video/src/ws.js","webpack:///./node_modules/twilio-video/es5/signaling/v2/index.js","webpack:///./node_modules/twilio-video/es5/signaling/recording.js","webpack:///./node_modules/twilio-video/es5/media/track/audiotrack.js","webpack:///./node_modules/twilio-video/es5/signaling/v2/remotetrackpublication.js","webpack:///./node_modules/twilio-video/es5/util/constants.js","webpack:///./node_modules/twilio-video/es5/stats/remoteaudiotrackstats.js","webpack:///./node_modules/precond/index.js","webpack:///./node_modules/twilio-video/es5/stats/localtrackstats.js","webpack:///./node_modules/twilio-video/es5/media/track/localdatatrack.js","webpack:///./node_modules/twilio-video/es5/stats/trackstats.js","webpack:///./node_modules/twilio-video/es5/signaling/v2/room.js","webpack:///./node_modules/twilio-video/es5/remoteparticipant.js","webpack:///./node_modules/util/support/isBufferBrowser.js","webpack:///./node_modules/@twilio/webrtc/lib/getusermedia.js","webpack:///./node_modules/twilio-video/es5/media/track/es5/localvideotrack.js","webpack:///./node_modules/@twilio/webrtc/lib/index.js","webpack:///./node_modules/twilio-video/es5/stats/networkqualityfractionloststats.js","webpack:///./node_modules/twilio-video/es5/stats/receiverreport.js","webpack:///./node_modules/twilio-video/es5/index.js","webpack:///./node_modules/twilio-video/es5/signaling/localparticipant.js","webpack:///./node_modules/twilio-video/es5/signaling/v2/remoteparticipant.js","webpack:///./node_modules/twilio-video/es5/signaling/v2/peerconnectionmanager.js","webpack:///./node_modules/twilio-video/es5/stats/average.js","webpack:///./node_modules/twilio-video/es5/stats/networkqualitysendorrecvstats.js","webpack:///./node_modules/twilio-video/es5/util/twilio-video-errors.js","webpack:///./node_modules/twilio-video/es5/media/track/remoteaudiotrack.js","webpack:///./node_modules/twilio-video/es5/stats/networkqualitystats.js","webpack:///./node_modules/twilio-video/es5/media/track/remotevideotrackpublication.js","webpack:///./node_modules/twilio-video/es5/util/timeoutpromise.js","webpack:///./node_modules/twilio-video/es5/stats/networkqualitysendstats.js","webpack:///./node_modules/twilio-video/es5/media/track/receiver.js","webpack:///./node_modules/@twilio/webrtc/lib/getstats.js","webpack:///./node_modules/twilio-video/es5/stats/senderorreceiverreport.js","webpack:///./node_modules/twilio-video/es5/media/track/remoteaudiotrackpublication.js","webpack:///./node_modules/@twilio/webrtc/lib/util/eventtarget.js","webpack:///./node_modules/backoff/lib/strategy/exponential.js","webpack:///./node_modules/twilio-video/es5/media/track/videotrack.js","webpack:///./node_modules/twilio-video/es5/util/sdp/index.js","webpack:///./node_modules/twilio-video/es5/connect.js","webpack:///./node_modules/twilio-video/es5/media/track/remotetrackpublication.js","webpack:///./node_modules/twilio-video/es5/room.js","webpack:///./node_modules/events/events.js","webpack:///./node_modules/twilio-video/es5/stats/statsreport.js","webpack:///./node_modules/twilio-video/es5/cancelableroompromise.js","webpack:///./node_modules/twilio-video/es5/webaudio/audiocontext.js"],"names":["_createClass","defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","Constructor","protoProps","staticProps","prototype","_classCallCheck","instance","TypeError","getMediaSections","MIDTrackMatcher","this","_midsToTrackIds","value","Map","event","get","transceiver","mid","sdp","sections","reduce","midsToTrackIds","section","midMatches","match","trackIdMatches","trackId","set","module","exports","_typeof","Symbol","iterator","obj","constructor","_possibleConstructorReturn","self","call","ReferenceError","_inherits","subClass","superClass","create","setPrototypeOf","__proto__","_require","EventEmitter","AsyncVar","NetworkQualitySignaling","_EventEmitter","mediaSignalingTransport","networkQualityConfiguration","_this","getPrototypeOf","_level","_levels","_remoteLevels","_mediaSignalingTransport","_networkQualityInputs","_networkQualityReportLevels","reportLevel","local","remoteReportLevel","remote","on","message","type","_handleNetworkQualityMessage","_sendNetworkQualityInputs","_this2","updated","level","Math","min","audio","send","recv","video","remotes","levels","oldObj","sid","emit","setTimeout","_this3","take","then","networkQualityInputs","publish","createNetworkQualityInputsMessage","put","networkQualityReportLevels","assign","_get","object","property","receiver","Function","desc","getOwnPropertyDescriptor","undefined","parent","getter","_toConsumableArray","arr","Array","isArray","arr2","from","E","typeErrors","trackPriority","mixinRemoteMediaTrack","AudioOrVideoTrack","_AudioOrVideoTrack","RemoteMediaTrack","mediaTrackReceiver","isEnabled","setPriority","options","_isEnabled","_isSwitchedOff","_priority","_setPriority","isSwitchedOff","priority","priorityValues","concat","values","includes","INVALID_VALUE","el","result","mediaStreamTrack","enabled","_attachments","size","LocalTrackStats","LocalVideoTrackStats","_LocalTrackStats","statsReport","captureDimensions","frameWidthInput","frameHeightInput","width","height","dimensions","frameWidthSent","frameHeightSent","captureFrameRate","frameRateInput","frameRate","frameRateSent","defer","deferred","promise","Promise","resolve","reject","delegateMethod","source","wrapper","methodName","error","apply","arguments","delegateMethods","difference","list1","list2","Set","forEach","item","has","add","flatMap","list","mapFn","listArray","flattened","mapped","getUserAgent","navigator","userAgent","guessBrowser","test","guessBrowserVersion","prefix","chrome","firefox","safari","regex","RegExp","versions","split","map","Number","major","isNaN","minor","interceptEvent","currentListener","newListener","removeEventListener","addEventListener","legacyPromise","onSuccess","onFailure","makeUUID","replace","c","r","random","v","toString","proxyProperties","getOwnPropertyNames","propertyName","proxyProperty","slice","dispatchEvent","MediaStream","Track","MediaTrack","_Track","mediaTrackTransceiver","id","kind","isStarted","_dummyEl","_isStarted","_MediaStream","track","_initialize","_log","debug","oncanplay","_createElement","onended","_end","muted","_start","bind","_attach","delete","_detachElement","_selectElement","mediaStream","srcObject","getTracks","removeTrack","addTrack","autoplay","playsInline","selector","document","querySelector","Error","createElement","els","_getAllAttachedElements","_detachElements","elements","push","LocalTrackPublication","LocalAudioTrackPublication","_LocalTrackPublicatio","signaling","unpublish","_instanceId","trackSid","instances","ConstantIceServerSource","iceServers","_instance","_iceServers","status","RTCIceCandidate","mozRTCIceCandidate","Backoff","ExponentialBackoffStrategy","FibonacciBackoffStrategy","FunctionCall","FibonacciStrategy","ExponentialStrategy","fibonacci","exponential","fn","vargs","callback","args","MediaStreamTrack","VideoTrack","RemoteMediaVideoTrack","RemoteVideoTrack","_RemoteMediaVideoTrac","_deferreds","_hasValue","_value","shift","StateMachine","NetworkQualityStats","states","connecting","connected","reconnecting","disconnected","ParticipantSignaling","_StateMachine","_enqueuedPriorityUpdates","_identity","_networkQualityLevel","_networkQualityStats","_sid","_trackPrioritySignaling","identity","tracks","state","preempt","networkQualityLevel","networkQualityLevels","sendTrackPriorityUpdate","trackPrioritySignaling","buildLogLevels","Log","Timeout","nInstances","closed","open","DEFAULT_MAX_CONSECUTIVE_MISSED_HEARTBEATS","DEFAULT_MAX_REQUESTED_HEARTBEAT_TIMEOUT","DEFAULT_WELCOME_TIMEOUT","HEARTBEAT_TIMEOUT_OFFSET","WS_CLOSE_NORMAL","WS_CLOSE_WELCOME_TIMEOUT","WS_CLOSE_HEARTBEATS_MISSED","WS_CLOSE_HELLO_FAILED","WS_CLOSE_SEND_FAILED","toplevel","global","window","WebSocket","TwilioConnection","serverUrl","maxConsecutiveMissedHeartbeats","requestedHeartbeatTimeout","welcomeTimeout","logLevels","logLevel","log","_consecutiveHeartbeatsMissed","_heartbeatTimeout","_messageQueue","_options","_sendHeartbeatTimeout","_welcomeTimeout","_ws","_connect","url","_ref","code","reason","clear","splice","warn","transition","readyState","CLOSING","CLOSED","close","ws","_close","data","JSON","parse","_handleBad","_handleHeartbeat","_handleMessage","_handleWelcome","_sendHello","_handleWelcomeTimeout","_ref2","reset","_ref3","body","_ref4","negotiatedTimeout","heartbeatTimeout","_handleHeartbeatTimeout","_send","_sendHeartbeat","OPEN","stringify","timeout","_this4","sendOrEnqueue","_sendOrEnqueue","ChromeRTCSessionDescription","EventTarget","inherits","Latch","RTCRtpSenderShim","sdpUtils","util","ChromeRTCPeerConnection","configuration","constraints","newConfiguration","iceTransportPolicy","iceTransports","sdpFormat","getSdpFormat","sdpSemantics","peerConnection","RTCPeerConnection","_appliedTracksToSSRCs","_localStream","_peerConnection","_pendingLocalOffer","_pendingRemoteOffer","_rolledBackTracksToSSRCs","_sdpFormat","_senders","_signalingStateLatch","_tracksToSSRCs","localDescription","remoteDescription","signalingState","shimDataChannel","channel","ontrack","addStream","setDescription","description","setPendingLocalOffer","offer","clearPendingLocalOffer","pendingLocalOffer","pendingRemoteOffer","intermediateState","setLocalDescription","setRemoteAnswer","raise","previousSignalingState","unwrap","Event","answer","setRemoteDescription","lower","_description","RTCSessionDescription","needsMaxPacketLifeTimeShim","RTCDataChannel","shimDataChannelInit","dataChannelDict","maxRetransmitTime","maxPacketLifeTime","dataChannel","maxRetransmits","updateTrackIdsToSSRCs","tracksToSSRCs","updateUnifiedPlanTrackIdsToSSRCs","updatePlanBTrackIdsToSSRCs","sender","removeStream","getSenders","e","addIceCandidate","candidate","when","createAnswer","createOffer","createDataChannel","label","QueueingEventEmitter","_queuedEvents","_","queuedEvent","dequeue","queue","request","createTwilioError","ConfigurationAcquireFailedError","CONFIG_URL","getConfiguration","token","configUrl","postData","headers","toQueryString","post","responseText","parseJsonTextFromECS","errorText","jsonText","json","params","keys","encodeURIComponent","join","RoomSignaling","opening","closing","Signaling","localParticipant","iceServerSource","encodingParameters","preferredCodecs","connect","cancel","bracket","_open","releaseLockCompletely","average","SenderOrReceiverReport","sum","SenderReport","_SenderOrReceiverRepo","bitrate","rtt","olderStats","newerStats","newerRemoteStats","secondsElapsed","timestamp","deltaBytesSent","bytesSent","roundTripTime","reports","report","errors","failCheck","ExceptionConstructor","callee","messageFormat","formatArgs","format","captureStackTrace","failArgumentCheck","IllegalArgumentError","failStateCheck","IllegalStateError","typeOf","s","typeCheck","expect","checkArgument","checkState","checkIsDef","checkIsDefAndNotNull","checkIsString","checkIsArray","checkIsNumber","checkIsBoolean","checkIsFunction","checkIsObject","BackoffStrategy","backoffDelay_","nextBackoffDelay_","getInitialDelay","next_","backoffDelay","getMaxDelay","reset_","RemoteParticipantSignaling","_ParticipantSignaling","xs","y","x","TrackSignaling","name","_error","_trackTransceiver","enable","trackTransceiver","_slicedToArray","sliceIterator","_arr","_n","_d","_e","_s","_i","next","done","err","IceReportFactory","PeerConnectionReport","ReceiverReportFactory","SenderReportFactory","PeerConnectionReportFactory","pc","ice","lastReport","updatePromise","mozRTCPeerConnection","updateFirefox","updateChrome","audioSenderReportFactories","videoSenderReportFactories","audioReceiverReportFactories","videoReceiverReportFactories","factory","filter","getSenderOrReceiverReports","sendersOrReceivers","all","senderOrReceiver","getStats","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","stats","return","pairs","getOrCreateSenderOrReceiverReportFactory","SenderOrReceiverReportFactory","sendersOrReceiversByMediaType","mediaType","trackStats","trackIdentifier","senderOrReceiverFactory","getSenderReportFactoriesByMediaType","getReceiverReportFactoriesByMediaType","getOrCreateSenderReportFactory","getOrCreateReceiverReportFactory","getSenderReportFactoryIdsByMediaType","getReceiverReportFactoryIdsByMediaType","updateSenderReports","senderReportFactoryIdsToDeleteByMediaType","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_step2","_iterator2","isRemote","senderReportFactoryIdsToDelete","senderReportFactory","remoteInboundStats","remoteId","updateReceiverReports","receiverReportFactoryIdsToDeleteByMediaType","_iteratorNormalCompletion3","_didIteratorError3","_iteratorError3","_step3","_iterator3","receiverReportFactoryIdsToDelete","receiverReportFactory","deleteSenderOrReceiverReportFactories","senderOrReceiverReportFactoriesByMediaType","senderOrReceiverReportFactoryIdsByMediaType","_loop","senderOrReceiverReportFactories","senderOrReceiverReportFactoryIds","senderOrReceiverReportFactoryId","updateIceReport","selectedCandidatePair","_iteratorNormalCompletion4","_didIteratorError4","_iteratorError4","_step4","_iterator4","selectedCandidatePairId","_iteratorNormalCompletion5","_didIteratorError5","_iteratorError5","_step5","_iterator5","_stats","nominated","selected","senders","getTransceivers","currentDirection","receivers","senderReports","receiverReports","pcReport","senderReportFactoriesByMediaType","receiverReportFactoriesByMediaType","ReceiverReport","summarize","TrackTransceiver","events","precond","backoffStrategy","backoffStrategy_","maxNumberOfRetry_","backoffNumber_","timeoutID_","handlers","backoff","onBackoff_","failAfter","maxNumberOfRetry","clearTimeout","CancelablePromise","DefaultPeerConnectionManager","DefaultRoomV2","DefaultTransport","SignalingConnectionDisconnectedError","SignalingIncomingMessageInvalidError","_require2","createCancelableRoomSignalingPromise","wsServer","PeerConnectionManager","RoomV2","Transport","transport","peerConnectionManager","trackSenders","trackV2","setConfiguration","setTrackSenders","cancelationError","isCanceled","createAndOffer","transportOptions","wsServerInsights","InsightsPublisher","NullInsightsPublisher","bandwidthProfile","automaticSubscription","dominantSpeaker","environment","networkQuality","iceServerSourceStatus","insights","realm","once","initialState","localParticipantState","participant","setSignalingRegion","signaling_region","roomSignaling","disconnect","catch","LocalVideoTrackPublication","constants","ECS","TimeoutPromise","version","NTSIceServerSource","abortOnTimeout","defaultTTL","ICE_SERVERS_DEFAULT_TTL","DEFAULT_ENVIRONMENT","DEFAULT_REALM","ICE_SERVERS_TIMEOUT_MS","defaultIceServers","DEFAULT_ICE_SERVERS","ecsServer","ECS_SERVER","createLog","_abortOnTimeout","_currentPoll","_defaultIceServers","_defaultTTL","_ecsServer","_getConfiguration","_nextPoll","_status","_stopped","_timeout","_token","info","poll","parseECSConfig","client","config","nts","getOrNull","warning","ice_servers","ttl","service","sdk_version","alreadyStopped","configWithTimeout","race","iceServersAndTTL","isTimedOut","floor","stop","ECS_TIMEOUT","DefaultRecordingSignaling","DefaultTimeout","MediaConnectionError","MediaDTLSTransportFailedError","RecordingSignaling","sessionTimeout","_disconnect","_reconnectingError","_mediaConnectionIsReconnecting","_sessionTimeout","dominantSpeakerSid","participants","recording","connectionState","iceConnectionState","maybeUpdateState","stateChanged","removeListener","signalingConnectionState","newState","start","getOwnPropertyDescriptors","descriptors","formatRegExp","f","isString","objects","inspect","len","str","String","isNull","isObject","deprecate","msg","process","noDeprecation","warned","deprecated","throwDeprecation","traceDeprecation","console","trace","debugEnviron","debugs","opts","ctx","seen","stylize","stylizeNoColor","depth","colors","isBoolean","showHidden","_extend","isUndefined","customInspect","stylizeWithColor","formatValue","styleType","style","styles","arrayToHash","array","hash","val","idx","recurseTimes","isFunction","ret","primitive","formatPrimitive","visibleKeys","isError","indexOf","formatError","isRegExp","isDate","Date","output","base","braces","n","toUTCString","formatArray","formatProperty","pop","reduceToSingleString","simple","isNumber","l","hasOwnProperty","line","substr","prev","cur","numLinesEst","ar","arg","isNullOrUndefined","isSymbol","re","objectToString","d","isPrimitive","o","pad","debuglog","NODE_DEBUG","toUpperCase","pid","isBuffer","months","time","getHours","getMinutes","getSeconds","getDate","getMonth","prop","origin","kCustomPromisifiedSymbol","callbackifyOnRejected","cb","newReason","callbackify","original","callbackified","maybeCb","nextTick","rej","promisify","promiseResolve","promiseReject","custom","asLocalTrack","asLocalTrackPublication","trackClass","_require3","_require4","validateLocalTrack","_require5","LocalAudioTrack","LocalDataTrack","LocalVideoTrack","LocalDataTrackPublication","Participant","LocalParticipant","_Participant","localTracks","shouldStopLocalTracks","tracksToStop","localTrack","_LocalAudioTrack","_LocalDataTrack","_LocalVideoTrack","_MediaStreamTrack","_LocalAudioTrackPublication","_LocalDataTrackPublication","_LocalVideoTrackPublication","_tracksToStop","signalingRegion","_handleTrackSignalingEvents","addedTrack","_addLocalTrack","_signaling","_trackSender","removedTrack","localTrackDisabled","localTrackEnabled","localTrackStopped","_tracks","PRIORITY_STANDARD","_getOrCreateLocalTrackPublication","trackSignaling","getPublication","disable","localTrackPublication","getTrackPublication","publication","unpublishTrack","_removeTrack","_addTrackPublication","localTrackOrMediaStreamTrack","trackPublication","addedLocalTrack","_addTrack","INVALID_TYPE","publishTrack","setNetworkQualityConfiguration","maxAudioBitrate","maxVideoBitrate","setParameters","publishFailed","_removeTrackPublication","unpublishedTracks","unpublishedTrack","trackPublications","find","defaultCreateLocalTracks","DEFAULT_LOG_LEVEL","createLocalTrack","createLocalTracks","createOptions","createLocalAudioTrack","createLocalVideoTrack","valueToJSON","NetworkQualityBandwidthStats","_ref$actual","actual","_ref$available","available","_ref$level","initialStats","lastStats","of","render","_vm","_h","$createElement","_c","_self","class","badgeClass","_v","badgeDisplay","staticRenderFns","component","isNonArrayObject","subscriptionMode","trackSwitchOffMode","validateBandwidthProfile","validateObject","validateRenderDimensions","renderDimensions","propChecks","MediaTrackTransceiver","MediaTrackSender","_MediaTrackTransceive","clone","ctor","superCtor","super_","TempCtor","LocalParticipantSignaling","LocalTrackPublicationV2","isDeepEqual","LocalParticipantV2","_LocalParticipantSign","_bandwidthProfile","_bandwidthProfileRevision","_encodingParameters","_removeListeners","_LocalTrackPublicationV2","_publishedRevision","_revision","_signalingRegion","bandwidthProfileRevision","revision","didUpdate","update","published","publicationState","localTrackPublicationV2","trackSender","updatedPriority","_removeListener","getState","DataTrackTransceiver","DataTrackSender","_DataTrackTransceiver","maxRetransmtis","ordered","_clones","_dataChannels","_addClone","_removeClone","function_","arguments_","callback_","lastResult_","numRetries_","backoff_","strategy_","failAfter_","retryPredicate_","DEFAULT_RETRY_PREDICATE_","state_","State_","PENDING","RUNNING","COMPLETED","ABORTED","isPending","isRunning","isCompleted","isAborted","setStrategy","strategy","retryIf","retryPredicate","getLastResult","getNumRetries","abort","doCallback_","backoffFactory","doCall_","handleBackoff_","isRetry","eventArgs","handleFunctionCallback_","number","delay","getUserMedia","workaround180748","createLocalTrackCalls","isAudioVideoAbsent","logComponentName","localTrackOptions","localTrackNameOptions","mediaStreamConstraints","workaroundWebKitBug180748","mediaStreamPromise","mediaStreamTracks","getAudioTracks","getVideoTracks","createPtToCodecName","workaround","descriptionInit","sdpWorkaround","mediaSections","session","mediaSectionWorkaround","mediaSection","ptToCodecName","deleteDuplicateRtxPts","codecNameToPts","createCodecNameToPts","rtxPts","invalidRtxPts","rtxPtToAssociatedPt","createRtxPtToAssociatedPt","associatedPtToRtxPt","createAssociatedPtToRtxPt","unassociatedRtxPts","knownCodecNames","unassociatedPts","codecName","pts","pt","rtxPt","deleteFmtpAttributesForRtxPt","addFmtpAttributeForRtxPt","deleteRtpmapAttributesForRtxPt","rtpmapRegex","rtpmap","fmtpmapRegex","fmtpPattern","matches","parseInt","associatedPtToRtxPts","pair","pattern","endsWith","LocalDataTrackClass","TwilioError","_Error","IceReport","availableSend","deltaBytesReceived","bytesReceived","availableOutgoingBitrate","currentRoundTripTime","deprecationWarningsByComponentConstructor","getDeprecationWarnings","componentConstructor","deprecationWarnings","moduleName","REQUIRED_ARGUMENT","validateLogLevels","_component","_logLevels","_warnings","getLevelByName","logSpec","LOG_LEVEL_VALUES","levelName","toISOString","logFn","DEBUG","deprecationWarning","INFO","WARN","ERROR","customMessage","validateLogLevel","OFF","LOG_LEVELS_SET","LOG_LEVEL_NAMES","detectSilence","audioContext","stream","createMediaStreamSource","analyser","createAnalyser","fftSize","samples","Uint8Array","timeoutDidFire","doDetectSilence","getByteTimeDomainData","some","sample","isSilent","RemoteAudioTrack","RemoteAudioTrackPublication","RemoteDataTrack","RemoteDataTrackPublication","RemoteVideoTrackPublication","indexed","indexTracksById","audioTracks","dataTracks","videoTracks","_RemoteAudioTrack","_RemoteAudioTrackPublication","_RemoteDataTrack","_RemoteDataTrackPublication","_RemoteVideoTrack","_RemoteVideoTrackPublication","_audioTracks","_dataTracks","_trackEventReemitters","_trackPublicationEventReemitters","_trackSignalingUpdatedEventCallbacks","_videoTracks","networkQualityStats","reemitTrackEvents","reemitSignalingStateChangedEvents","tracksByKind","trackPublicationsByKind","reemitTrackPublicationEvents","trackPublicationClass","participantSignaling","trackSignalingAdded","trackSignalingRemoved","RemoteTrackPublication","isSubscribed","trackSignalingSubscribed","trackSignalingUnsubscribed","setTrackTransceiver","RemoteTrack","newPriority","updateSubscriberTrackPriority","_Array$from$find","entries","_Array$from$find2","reemitters","reemitter","indexedTracks","indexedAudioTracks","keyValue","indexedVideoTracks","indexedDataTracks","trackEventReemitters","_getTrackEvents","eventPair","trackEvent","participantEvent","publicationEventReemitters","_getTrackPublicationEvents","publicationEvent","_len","_key","ICE_ACTIVITY_CHECK_PERIOD_MS","ICE_INACTIVITY_THRESHOLD_MS","IceConnectionMonitor","activityCheckPeriodMs","inactivityThresholdMs","_activityCheckPeriodMs","_inactivityThresholdMs","_lastActiveStats","_timer","stat","activePairStat","round","getTime","onIceConnectionInactive","setInterval","_getIceConnectionStats","iceStats","_lastActivity","clearInterval","packageInfo","DefaultBackoff","reconnectBackoffConfig","createBandwidthProfilePayload","createMediaSignalingPayload","createSubscribePayload","RoomCompletedError","SignalingConnectionError","RSP_VERSION","SDK_NAME","SDK_VERSION","syncing","TwilioConnectionTransport","accessToken","trackSwitchOff","eventPublisherOptions","gateway","EventPublisher","_accessToken","_automaticSubscription","_dominantSpeaker","_eventPublisher","_iceServerSourceStatus","_localParticipant","_name","_networkQuality","_peerConnectionManager","_sessionTimer","_sessionTimeoutMS","_reconnectBackoff","_session","_trackPriority","_trackSwitchOff","_twilioConnection","_updatesReceived","_updatesToSend","_userAgent","_wsServer","setupEventListeners","peer_connections","getStates","publisher","user_agent","bandwidth_profile","media_signaling","subscribe","sendMessage","_sendConnectOrSyncOrDisconnectMessage","groupName","eventName","payload","reducePeerConnections","peerConnections","peerConnectionsById","reduced","reduceUpdates","updates","createOrResetTwilioConnection","handleMessage","reconnectTimer","_getReconnectTimer","startConnect","twilioConnection","_setSession","session_timeout","_clearReconnectTimer","_defineProperty","TrackPrioritySignaling","publishOrSubscribe","_TrackTransceiver","DataTransport","_dataChannel","_publish","dataTrackReceiver","reliable","matched","unmatched","_match","mAndM","_update","ids","removedMatchedIds","msid","OrderedTrackMatcher","RemoteTrackPublicationSignaling","_TrackSignaling","setSid","NetworkQualityMediaStats","NetworkQualityVideoStats","_NetworkQualityMediaS","mediaLevels","LocalTrackPublicationSignaling","autoStart","_delay","_fn","isSet","staticClass","isDoctor","attrs","directives","rawName","expression","timerDisplay","started","loading","startText","waitingText","showHidePreview","showHidePreviewButton","_t","ref","slot","dismissError","mixinLocalMediaTrack","LocalMediaTrack","mediaTrackSender","_didCallEnd","isStopped","RemoteTrackStats","RemoteVideoTrackStats","_RemoteTrackStats","frameWidthReceived","frameHeightReceived","frameRateReceived","isPatient","appointmentId","consultationId","dateDisplay","timeDisplay","participantNameDisplay","appointmentParticipant","doctorClinicHospitalName","patientGender","patientAge","domProps","patientMailingAddress","isAppointment","appointmentType","appointmentStatus","appointmentRemarksParsed","retry","AudioContextFactory","holder","getOrCreate","doWorkaround","isSilentPromise","release","DefaultMediaStream","DefaultRTCIceCandidate","DefaultRTCPeerConnection","DefaultRTCSessionDescription","getStatistics","DEFAULT_ICE_GATHERING_TIMEOUT_MS","DEFAULT_SESSION_TIMEOUT_SEC","iceRestartBackoffConfig","createCodecMapForMediaSection","revertSimulcastForNonVP8MediaSections","setBitrateParameters","setCodecPreferences","setSimulcast","unifiedPlanAddOrRewriteNewTrackIds","unifiedPlanAddOrRewriteTrackIds","unifiedPlanFilterLocalCodecs","_require6","MediaClientLocalDescFailedError","MediaClientRemoteDescFailedError","_require7","isChromeScreenShareTrack","oncePerTick","IceBox","DefaultIceConnectionMonitor","DataTrackReceiver","MediaTrackReceiver","IdentityTrackMatcher","workaroundIssue8329","guess","isChrome","isFirefox","isSafari","isRTCRtpSenderParamsSupported","RTCRtpSender","getParameters","updating","PeerConnectionV2","enableDscp","dummyAudioMediaStreamTrack","offerOptions","isUnifiedPlan","localMediaStream","chromeSpecificConstraints","optional","googDscp","_appliedTrackIdsToAttributes","_dataTrackReceivers","_descriptionRevision","_didGenerateLocalCandidates","_enableDscp","_isChromeScreenShareTrack","_iceGatheringFailed","_iceGatheringTimeout","_handleIceGatheringTimeout","_iceRestartBackoff","_isIceConnectionInactive","_isIceLite","_isIceRestartBackoffInProgress","_isRestartingIce","_isUnifiedPlan","_isRTCRtpSenderParamsSupported","_lastIceConnectionState","_lastStableDescriptionRevision","_localCandidates","_localCodecs","_localCandidatesRevision","_localDescriptionWithoutSimulcast","_localDescription","_localMediaStream","_localUfrag","_remoteCodecMaps","_rtpSenders","_iceConnectionMonitor","_mediaTrackReceivers","_needsAnswer","_negotiationRole","_offerOptions","_preferredAudioCodecs","_preferredVideoCodecs","_shouldApplySimulcast","codecSettings","codec","toLowerCase","simulcast","_queuedDescription","_iceReconnectTimeout","_recycledTransceivers","_replaceTrackPromises","_remoteCandidates","_setBitrateParameters","_setCodecPreferences","_setSimulcast","_revertSimulcastForNonVP8MediaSections","_RTCIceCandidate","_RTCPeerConnection","_RTCSessionDescription","_shouldOffer","_shouldRestartIce","_trackIdsToAttributes","_trackMatcher","updateEncodingParameters","_handleConnectionStateChange","_handleDataChannelEvent","_handleIceCandidateEvent","_handleIceConnectionStateChange","_handleIceGatheringStateChange","_handleSignalingStateChange","_handleTrackEvent","_initiateIceRestart","dataTrackSender","removeDataTrackSender","candidates","_addIceCandidate","takeRecycledTransceiver","oldTrackId","replaceTrack","direction","finally","addTransceiver","ufrag","getUfrag","setUfrag","_addIceCandidates","_setRemoteDescription","updatedSdp","_setLocalDescription","_checkIceBox","_updateDescription","_maybeReoffer","_this5","_this6","_answer","didReoffer","_offer","peerConnectionState","complete","_this7","isIceConnectedOrComplete","_initiateIceRestartBackoff","iceGatheringState","_this8","signaledTrackId","trackReceiver","shouldReoffer","shouldOffer","sendersOfKind","isSenderOfKind","hasDataTrack","hasApplicationMediaSection","needsApplicationMediaSection","_this9","iceRestart","transceivers","activeTransceivers","stopped","assignedTransceivers","sdp1","unassignedTransceivers","newTrackIdsByKind","_ref5","_ref6","sdp2","_this10","_this11","_addOrRewriteLocalTrackIds","negotiationCompleted","_this12","filterOutMediaStreamIds","sdpWithoutSimulcastForNonVP8MediaSections","_rollbackAndApplyOffer","_this13","_handleGlare","iceState","addDataChannel","_addOrUpdateTransceiver","addSender","_this14","tryTransition","removeDataChannel","removeSender","period","setDelay","_this15","_updateIce","_this16","response","rewriteTrackIds","rewriteTrackId","pcv2","remoteAudioTrackStats","remoteVideoTrackStats","bundlePolicy","rtcpMuxPolicy","shouldRecycleTransceiver","_ref7","recycledTransceivers","localCodec","remoteCodecMap","updateLocalCodecs","codecMap","updateRemoteCodecMaps","updateRecycledTransceivers","_pcv2$_encodingParame","maxBitrates","maxBitrate","removeMaxBitrate","setMaxBitrate","encodings","networkPriority","encoding","RecordingV2","_RecordingSignaling","lock","transformStates","_lock","_reachableStates","reachable","_state","_states","_whenDeferreds","isLocked","transitionFunction","releaseLock","hasLock","takeLock","isValidTransition","oldLock","takeLockSync","preemptionKey","nameOrKey","makeLock","_whenPromise","createUnreachableError","graph","to","newGraph","reachableFrom","node","newStates","here","there","LocalAudioTrackClass","capitalize","word","deprecateEvents","emitter","warningsShown","filterObject","filterValue","filtered","promiseFromEvents","operation","eventEmitter","successEvent","failureEvent","path","step","_target","val1","val2","every","val1Keys","sort","val2Keys","default","media","webrtc","m","hidePrivateProperties","startsWith","hideProperty","hidePrivateAndCertainPublicPropertiesInClass","klass","_klass","_class","hidePublicProperties","arrayToJSON","setToJSON","mapToJSON","objectToJSON","createRSPPayload","transform","createBandwidthProfileVideoPayload","bandwidthProfileVideo","payloadProp","createRenderDimensionsPayload","transports","active_speaker","network_quality","track_priority","track_switch_off","createDimensionsPayload","PRIORITY_HIGH","PRIORITY_LOW","propConversions","_ref6$payloadProp","_ref6$transform","rules","withJitter","jitter","rand","inRange","num","max","NetworkQualitySendStats","NetworkQualityRecvStats","_ref$sendStats","sendStats","_ref$recvStats","recvStats","XHR","XMLHttpRequest","method","xhr","headerName","withCredentials","onreadystatechange","setRequestHeader","isSdpSemanticsSupported","checkIfSdpSemanticsIsSupported","chromeSdpFormat","getChromeDefaultSdpFormat","getChromeSdpFormat","getSafariSdpFormat","RTCRtpTransceiver","getMatches","lines","results","getTrackIds","getPlanBTrackIds","getUnifiedPlanTrackIds","getPlanBSSRCs","kindPattern","directionPattern","getMediaSectionSSRCs","getUnifiedPlanSSRCs","msidAttrRegExp","matchingMediaSections","getTrackIdsToSSRCs","getSSRCs","getPlanBTrackIdsToSSRCs","getUnifiedPlanTrackIdsToSSRCs","trackIdsToSSRCs","newTrackIdsToSSRCs","newSSRCsToOldSSRCs","ssrcs","oldSSRCs","newSSRCs","oldSSRC","newSSRC","replacement","sizeClass","title","hide","TrackStats","_TrackStats","packetsReceived","AudioTrack","LocalMediaAudioTrack","_LocalMediaAudioTrack","NetworkQualityAudioStats","isDef","initialDelay","maxDelay","initialDelay_","maxDelay_","randomisationFactor","randomisationFactor_","randomisationMultiple","randomizedDelay","NetworkQualitySendOrRecvStats","_NetworkQualitySendOr","sendOrRecvStats","binaryType","DominantSpeakerSignaling","_loudestParticipantSid","_setLoudestParticipantSid","loudestParticipantSid","FirefoxRTCSessionDescription","updateTracksToSSRCs","needsWorkaroundForBug1480277","FirefoxRTCPeerConnection","_initiallyNegotiatedDtlsRole","_isClosed","_rollingBack","overwriteWithInitiallyNegotiatedDtlsRole","dispatchEventToSelf","rollback","onceRolledBack","saveInitiallyNegotiatedDtlsRole","dtlsRole","active","passive","idp","TrackPublication","_TrackPublication","_reemitTrackEvent","isTrackEnabled","_unpublish","descriptionInitDict","mozRTCSessionDescription","TrackSwitchOffSignaling","_setTrackSwitchOffUpdates","off","tracksSwitchedOff","tracksSwitchedOn","Filter","getKey","a","getValue","isLessThanOrEqualTo","b","_getKey","_getValue","_isLessThanOrEqualTo","_map","entry","_RemoteTrackPublicati","DEFAULT_NQ_LEVEL_LOCAL","DEFAULT_NQ_LEVEL_REMOTE","MAX_NQ_LEVEL","NetworkQualityConfigurationImpl","localOrRemote","EncodingParametersImpl","shouldEmitChanged","maxKindBitrate","NetworkQualityMonitor","manager","_factories","WeakMap","_manager","_reports","remoteLevels","monitor","pcv2s","_peerConnections","pcs","factories","reportsOrNullPromises","reportsOrNull","reportOrNull","createSSRC","ssrcMax","TrackAttributes","streamId","cName","isSimulcastEnabled","primarySSRCs","rtxPairs","simulcastSSRCs","ssrc","primarySSRC","isSimSSRC","excludeRtx","rtxPair","reverse","simSSRCs","attrLines","rtxPairLines","simGroupLines","getSimulcastSSRCs","simGroupPattern","getSSRCAttribute","attribute","getSSRCRtxPairs","rtxPairPattern","createSSRCAttributeTuples","planb","createPlanBSSRCAttributeTuples","unified","createUnifiedPlanSSRCAttributeTuples","_flatMap","_flatMap2","createTrackIdsToAttributes","ssrcAttrTuples","tuple","trackAttributes","addSSRC","setSimulcastInMediaSection","trackIdsToAttributes","newTrackIdsToAttributes","newTrackIds","trackIds","trackIdsToAdd","trackIdsToIgnore","trackAttributesToAdd","addSimulcastSSRCs","relevantTrackIds","relevantTrackAttributes","relevantSdpLines","toSdpLines","sectionLines","xGoogleFlagConference","NetworkQualityLatencyStats","_ref$jitter","_ref$rtt","high","low","whenDeferreds","createUnreachableStateError","LocalAudioTrackStats","audioLevel","audioInputLevel","SafariRTCPeerConnection","_audioTransceiver","_videoTransceiver","hasReceiversForTracksOfKind","offerToReceiveAudio","offerToReceiveVideo","_connected","onCreate","onCancel","_isCancelable","_isCanceled","_onCancel","_promise","_updatedPriority","setError","MAX_RECONNECT_ATTEMPTS","RECONNECT_INTERVAL_MS","sdkName","sdkVersion","createGateway","maxReconnectAttempts","reconnectIntervalMs","_connectTimestamp","_eventQueue","_readyToConnect","_reconnectAttemptsLeft","_WebSocket","roomSid","participantSid","maybeReconnect","reconnect","publishOrEnqueue","group","now","handleConnectResponse","connectRequest","connectInterval","timeToWait","trackName","isRTCPeerConnectionSupported","webkitRTCPeerConnection","isGetUserMediaSupported","mediaDevices","webkitGetUserMedia","mozGetUserMedia","isNonChromiumEdge","browser","runtime","isSupported","_filter","_ufrag","toMap","oldIceState","oldCandidates","LocalMediaVideoTrack","_LocalMediaVideoTrack","defaultCreateCancelableRoomSignalingPromise","SignalingV2","_Signaling","_createCancelableRoomSignalingPromise","_MediaTrack","RemoteTrackPublicationV2","article","DEFAULT_REGION","WS_SERVER","region","PUBLISH_MAX_ATTEMPTS","PUBLISH_BACKOFF_JITTER","PUBLISH_BACKOFF_MS","urls","X_TWILIO_ACCESSTOKEN","RangeError","factor","MODE_COLLABORATION","MODE_GRID","MODE_PRESENTATION","MODE_DISABLED","MODE_DETECTED","MODE_PREDICTED","RemoteAudioTrackStats","audioOutputLevel","packetsSent","DefaultDataTrackSender","packetsLost","RemoteParticipantV2","StatsReport","STATS_PUBLISH_INTERVAL_MS","_RoomSignaling","statsPublishIntervalMs","setBandwidthProfile","setIceReconnectTimeout","_dominantSpeakerSignaling","_DominantSpeakerSignaling","_dominantSpeakerSignalingPromise","_disconnectedParticipantSids","_NetworkQualityMonitor","_NetworkQualitySignaling","_lastBandwidthProfileRevision","_networkQualityMonitor","_networkQualityMonitorPromise","_networkQualityConfiguration","_published","_RemoteParticipantV2","_subscribed","_subscribedRevision","_subscriptionFailures","_trackPriorityPromise","_trackSwitchOffPromise","_trackSwitchOffSignaling","_TrackPrioritySignaling","_TrackSwitchOffSignaling","_transport","_trackReceiverDeferreds","mediaRegion","media_region","handleLocalParticipantEvents","handlePeerConnectionEvents","handleTransportEvents","periodicallyPublishStats","trackReceivers","getTrackReceivers","_getOrCreateTrackReceiverDeferred","didDisconnect","_teardownDominantSpeakerSignaling","_teardownNetworkQualityMonitor","_deleteTrackReceiverDeferred","trackSidsToTrackSignalings","participantState","_getTrackReceiver","connectParticipant","setTrackPrioritySignaling","_maybeAddBandwidthProfile","_getState","roomState","subscribed","trackState","subscribedTrackSids","participantsToKeep","_getOrCreateRemoteParticipant","handleSubscriptions","_setupDataTransportBackedDominantSpeakerSignaling","_setupDataTransportBackedNetworkQualityMonitor","_setupTrackPrioritySignaling","_setupTrackSwitchOffMonitor","_teardownTrackPrioritySignaling","trackPriorityPromise","toDataTransport","trackSwitchOffSignaling","tracksOff","tracksOn","setSwitchedOff","_teardownTrackSwitchOff","trackSwitchOffPromise","_setupTrackSwitchOff","dominantSpeakerSignalingPromise","dominantSpeakerSignaling","_setDominantSpeakerSignaling","networkQualityMonitorPromise","networkQualitySignaling","networkQualityMonitor","_setNetworkQualityMonitor","setDominantSpeaker","setNetworkQualityLevel","responses","localAudioTrackStats","filterAndAddLocalTrackSids","localVideoTrackStats","filterAndAddRemoteTrackSids","filterAndAddTrackSids","idToSid","trackStat","roomV2","localTrackStats","remoteTrackStats","localParticipantUpdated","_publishNewLocalParticipantState","renegotiate","_publishPeerConnectionState","_addTrackReceiver","intervalMs","interval","publishEvent","audioTrackStats","peerConnectionId","videoTrackStats","activeIceCandidatePair","replaceNullsWithDefaults","onStateChanged","room","_getTrackSidsToTrackSignalings","subscribeFailed","availableIncomingBitrate","consentRequestsSent","lastPacketReceivedTimestamp","lastPacketSentTimestamp","readable","requestsReceived","requestsSent","responsesReceived","responsesSent","retransmissionsReceived","retransmissionsSent","totalRoundTripTime","transportId","localCandidate","candidateType","deleted","ip","port","protocol","relayProtocol","remoteCandidate","RemoteParticipant","_unsubscribeTracks","remoteTrack","addedPublication","_unsubscribe","unsubscribedTrack","removedPublication","copy","fill","readUInt8","_getUserMedia","LocalVideoTrackClass","WebRTC","NetworkQualityFractionLostStats","_ref$fractionLost","fractionLost","deltaPacketsLost","deltaPacketsReceived","phonyFractionLost","summaries","summary","Video","_publicationsToTrackSenders","_trackSendersToPublications","_createLocalTrackPublicationSignaling","didDelete","_RemoteParticipantSig","getTrackReceiver","_ret","_RemoteTrackPublicationV2","tracksToKeep","_getOrCreateTrack","_QueueingEventEmitter","audioContextFactory","_audioContextFactory","_closedPeerConnectionIds","_configuration","_configurationDeferred","_connectionState","_dummyAudioTrackSender","createDummyAudioMediaStreamTrack","_iceConnectionState","_iceServerSource","_dataTrackSenders","_lastConnectionState","_mediaTrackSenders","_preferredCodecs","_PeerConnectionV2","peerConnectionStates","peerConnectionIds","_PeerConnectionV","updateConnectionState","updateIceConnectionState","addDataTrackSender","addMediaTrackSender","_getOrCreate","dataTrackSenders","mediaTrackSenders","changes","getTrackSenderChanges","applyTrackSenderChanges","synced","_closeAbsentPeerConnections","mediaStreamDestination","createMediaStreamDestination","remove","removeMediaTrackSender","isApplicationSectionNegotiated","getDataTrackSenderChanges","dataTrackSendersToAdd","dataTrackSendersToRemove","getMediaTrackSenderChanges","mediaTrackSendersToAdd","mediaTrackSendersToRemove","toRank","new","checking","completed","failed","fromRank","createFromRank","summarizeIceOrPeerConnectionStates","state1","state2","pcm","_ref$bandwidth","bandwidth","_ref$latency","latency","TwilioErrorByCode","AccessTokenInvalidError","_TwilioError","AccessTokenHeaderInvalidError","_TwilioError2","AccessTokenIssuerInvalidError","_TwilioError3","AccessTokenExpiredError","_TwilioError4","AccessTokenNotYetValidError","_TwilioError5","AccessTokenGrantsInvalidError","_TwilioError6","AccessTokenSignatureInvalidError","_TwilioError7","_TwilioError8","_TwilioError9","SignalingConnectionTimeoutError","_TwilioError10","_TwilioError11","SignalingOutgoingMessageInvalidError","_TwilioError12","RoomNameInvalidError","_TwilioError13","RoomNameTooLongError","_TwilioError14","RoomNameCharsInvalidError","_TwilioError15","RoomCreateFailedError","_TwilioError16","RoomConnectFailedError","_TwilioError17","RoomMaxParticipantsExceededError","_TwilioError18","RoomNotFoundError","_TwilioError19","RoomMaxParticipantsOutOfRangeError","_TwilioError20","RoomTypeInvalidError","_TwilioError21","RoomTimeoutOutOfRangeError","_TwilioError22","RoomStatusCallbackMethodInvalidError","_TwilioError23","RoomStatusCallbackInvalidError","_TwilioError24","RoomStatusInvalidError","_TwilioError25","RoomRoomExistsError","_TwilioError26","RoomInvalidParametersError","_TwilioError27","RoomMediaRegionInvalidError","_TwilioError28","RoomMediaRegionUnavailableError","_TwilioError29","RoomSubscriptionOperationNotSupportedError","_TwilioError30","_TwilioError31","ParticipantIdentityInvalidError","_TwilioError32","ParticipantIdentityTooLongError","_TwilioError33","ParticipantIdentityCharsInvalidError","_TwilioError34","ParticipantMaxTracksExceededError","_TwilioError35","ParticipantNotFoundError","_TwilioError36","ParticipantDuplicateIdentityError","_TwilioError37","TrackInvalidError","_TwilioError38","TrackNameInvalidError","_TwilioError39","TrackNameTooLongError","_TwilioError40","TrackNameCharsInvalidError","_TwilioError41","TrackNameIsDuplicatedError","_TwilioError42","TrackServerTrackCapacityReachedError","_TwilioError43","_TwilioError44","MediaServerLocalDescFailedError","_TwilioError45","_TwilioError46","MediaServerRemoteDescFailedError","_TwilioError47","MediaNoSupportedCodecError","_TwilioError48","_TwilioError49","_TwilioError50","_TwilioError51","ConfigurationAcquireTurnFailedError","_TwilioError52","RemoteMediaAudioTrack","_RemoteMediaAudioTrac","initialTimeout","timedOut","timer","_deferred","_isTimedOut","_timedOut","_promise2","guessVersion","chromeMajorVersion","CHROME_LEGACY_MAX_AUDIO_LEVEL","_getStats","localAudioTracks","localVideoTracks","remoteAudioTracks","remoteVideoTracks","statsResponse","trackStatsPromises","triple","statsArrayName","getTrackStats","getActiveIceCandidatePairStats","activeIceCandidatePairStatsReport","testForChrome","testForSafari","standardizeChromeOrSafariActiveIceCandidatePairStats","testForFirefox","standardizeFirefoxActiveIceCandidatePairStats","activeCandidatePairStats","activeLocalCandidateStats","localCandidateId","activeRemoteCandidateStats","remoteCandidateId","standardizedCandidateStatsKeys","standardizedLocalCandidateStatsKeys","standatdizedLocalCandidateStatsReport","keyInfo","standardizedRemoteCandidateStatsReport","ffKeys","candidateTypes","host","peerreflexive","relayed","serverreflexive","getSendersOrReceivers","getStreams","chromeOrSafariGetTrackStats","firefoxGetTrackStats","standardizeChromeLegacyStats","standardizeChromeOrSafariStats","standardizeFirefoxStats","ssrcReport","standardizedStats","names","inbound","outbound","remoteSource","first","second","third","getStatValue","mimeType","frameWidth","frameHeight","framesPerSecond","_eventEmitter","addListener","factor_","DEFAULT_FACTOR","onloadedmetadata","dimensionsChanged","videoWidth","videoHeight","onresize","DIMENSIONS_CHANGED","dummyEl","elem","ptToFixedBitrateAudioCodecName","0","8","RTCP_BITRATE","createBLine","modifier","createMidToMediaSectionMap","midsToMediaSections","getMidForMediaSection","getPayloadTypesInMediaSection","rtpmapPattern","getFmtpAttributesForPt","fmtpRegex","nvPair","_nvPair$split","_nvPair$split2","mLine","getReorderedPayloadTypes","preferredPayloadTypes","remainingCodecs","remainingPayloadTypes","setBitrateInMediaSection","bLine","bLinePattern","bLineMatched","maxBitrateMatched","Infinity","setPayloadTypesInMediaSection","payloadTypes","otherLines","preferredAudioCodecs","preferredVideoCodecs","newSection","pcmaPayloadTypes","pcmuPayloadTypes","fixedBitratePayloadTypes","vp8PayloadTypes","hasVP8PayloadType","payloadType","unifiedPlanGetMatchingLocalPayloadTypes","remoteCodec","remotePt","localCodecsToPts","localSection","remoteSection","matchingLocalPts","remoteFmtpAttrs","matchinglocalPt","localPt","localFmtpAttrs","attr","unifiedPlanFilterCodecsInLocalMediaSection","remoteMidsToMediaSections","localMid","remotePtToCodecs","localPts","localRtxPts","fmtpAttrs","apt","ptMatches","orderedLocalPts","localSdp","remoteSdp","localMediaSections","localSession","localSdpWithoutSimulcast","remoteMidToMediaSections","localMidToMediaSectionsWithoutSimulcast","remotePayloadTypes","isVP8ThePreferredCodec","activeMidsToTrackIds","trackIdsByKind","newMidsToTrackIds","newMids","attributes","_attributes$split","_attributes$split2","trackIdToRewrite","msidRegex","createCancelableRoomPromise","Room","safariVersion","connectCalls","didPrintSafariWarning","didPrintDscpTaggingWarning","isSafariWithoutVP8Support","safariMajorVersion","safariMinorVersion","shouldPrintDscpTaggingWarning","dscpTagging","abortOnIceServersTimeout","iceServersTimeout","ntsIceServerSourceOptions","normalizeVideoCodecSettings","cancelableRoomPromise","getLocalTracks","createLocalParticipant","createRoomSignaling","createRoom","localParticipantSignaling","createLocalParticipantSignaling","roomSignalingParams","handleLocalTracks","nameOrSettings","settings","_track","publishPriority","_setEnabled","_setSwitchedOff","_participants","isRecording","handleRecordingEvents","handleSignalingEvents","rewriteLocalTrackIds","getSender","eventListeners","eventOrPair","reemit","unshift","ReflectOwnKeys","R","Reflect","ReflectApply","ProcessEmitWarning","ownKeys","getOwnPropertySymbols","NumberIsNaN","init","_events","_eventsCount","_maxListeners","defaultMaxListeners","$getMaxListeners","that","_addListener","listener","prepend","existing","w","count","onceWrapper","fired","wrapFn","_onceWrap","wrapped","_listeners","evlistener","unwrapListeners","arrayClone","listenerCount","spliceOne","index","setMaxListeners","getMaxListeners","doError","er","context","handler","listeners","prependListener","prependOnceListener","position","originalListener","removeAllListeners","rawListeners","eventNames","cancelableRoomSignalingPromise","getCancelableRoomSignalingPromise","NativeAudioContext","AudioContext","webkitAudioContext","_AudioContext","_audioContext","_holders"],"mappings":"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","file":"js/chunk-1fb1b592.08d0cb54.js","sourcesContent":["'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar getMediaSections = require('../').getMediaSections;\n\n/**\n * An {@link MIDTrackMatcher} matches an RTCTrackEvent with a MediaStreamTrack\n * ID based on the MID of the underlying RTCRtpTransceiver.\n */\n\nvar MIDTrackMatcher = function () {\n /**\n * Construct an {@link MIDTrackMatcher}.\n */\n function MIDTrackMatcher() {\n _classCallCheck(this, MIDTrackMatcher);\n\n Object.defineProperties(this, {\n _midsToTrackIds: {\n value: new Map(),\n writable: true\n }\n });\n }\n\n /**\n * Match a given MediaStreamTrack with its ID.\n * @param {RTCTrackEvent} event\n * @returns {?Track.ID}\n */\n\n\n _createClass(MIDTrackMatcher, [{\n key: 'match',\n value: function match(event) {\n return this._midsToTrackIds.get(event.transceiver.mid) || null;\n }\n\n /**\n * Update the {@link MIDTrackMatcher} with a new SDP.\n * @param {string} sdp\n */\n\n }, {\n key: 'update',\n value: function update(sdp) {\n var sections = getMediaSections(sdp, '(audio|video)');\n this._midsToTrackIds = sections.reduce(function (midsToTrackIds, section) {\n var midMatches = section.match(/^a=mid:(.+)$/m) || [];\n var trackIdMatches = section.match(/^a=msid:.+ (.+)$/m) || [];\n var mid = midMatches[1];\n var trackId = trackIdMatches[1];\n return mid && trackId ? midsToTrackIds.set(mid, trackId) : midsToTrackIds;\n }, this._midsToTrackIds);\n }\n }]);\n\n return MIDTrackMatcher;\n}();\n\nmodule.exports = MIDTrackMatcher;","'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _require = require('events'),\n EventEmitter = _require.EventEmitter;\n\nvar AsyncVar = require('../../util/asyncvar');\n\n/**\n * @interface MediaSignalingTransport\n * @property {function(object): boolean} send\n * @emits MediaSignalingTransport#message\n */\n\n/**\n * The {@link MediaSignalingTransport} received a message.\n * @event MediaSignalingTransport#message\n * @param {object} message\n */\n\n/**\n * @interface LatencyStats\n * @property {number} jitter\n * @property {number} rtt\n * @property {number} level\n */\n\n/**\n * @interface FractionLostStats\n * @property {number} fractionLost\n * @property {number} level\n */\n\n/**\n * @interface BandwidthStats\n * @property {number} actual\n * @property {number} available\n * @property {number} level\n */\n\n/**\n * @interface SendOrRecvStats\n * @property {BandwidthStats} bandwidth\n * @property {FractionLostStats} fractionLost\n * @property {LatencyStats} latency\n */\n\n/**\n * @interface MediaLevels\n * @property {number} send\n * @property {SendOrRecvStats} sendStats\n * @property {number} recv\n * @property {SendOrRecvStats} recvStats\n */\n\n/**\n * @interface NetworkQualityLevels\n * @property {number} level\n * @property {MediaLevels} audio\n * @property {MediaLevels} video\n */\n\n/**\n * @typedef {PeerConnectionSummary} NetworkQualityInputs\n */\n\n/**\n * @classdesc The {@link NetworkQualitySignaling} class allows submitting\n * {@link NetworkQualityInputs} for computing {@link NetworkQualityLevel}. It\n * does so by sending and receiving messages over a\n * {@link MediaSignalingTransport}. The exact transport used depends on the\n * topology of the {@link Room} that {@link NetworkQualitySignaling} is being\n * used within: for P2P Rooms, we re-use the {@link TransportV2}; and for\n * Group Rooms, we use a {@link DataTransport}.\n * @emits NetworkQualitySignaling#updated\n */\n\nvar NetworkQualitySignaling = function (_EventEmitter) {\n _inherits(NetworkQualitySignaling, _EventEmitter);\n\n /**\n * Construct a {@link NetworkQualitySignaling}.\n * @param {MediaSignalingTransport} mediaSignalingTransport\n * @param {NetworkQualityConfigurationImpl} networkQualityConfiguration\n */\n function NetworkQualitySignaling(mediaSignalingTransport, networkQualityConfiguration) {\n _classCallCheck(this, NetworkQualitySignaling);\n\n var _this = _possibleConstructorReturn(this, (NetworkQualitySignaling.__proto__ || Object.getPrototypeOf(NetworkQualitySignaling)).call(this));\n\n Object.defineProperties(_this, {\n _level: {\n value: null,\n writable: true\n },\n _levels: {\n value: null,\n writable: true\n },\n _remoteLevels: {\n value: new Map(),\n writable: true\n },\n _mediaSignalingTransport: {\n value: mediaSignalingTransport\n },\n _networkQualityInputs: {\n value: new AsyncVar()\n },\n _networkQualityReportLevels: {\n get: function get() {\n return {\n reportLevel: networkQualityConfiguration.local,\n remoteReportLevel: networkQualityConfiguration.remote\n };\n }\n }\n });\n\n mediaSignalingTransport.on('message', function (message) {\n switch (message.type) {\n case 'network_quality':\n _this._handleNetworkQualityMessage(message);\n break;\n default:\n break;\n }\n });\n\n _this._sendNetworkQualityInputs();\n return _this;\n }\n\n /**\n * Get the current {@link NetworkQualityLevel}, if any.\n * @returns {?NetworkQualityLevel} level - initially null\n */\n\n\n _createClass(NetworkQualitySignaling, [{\n key: '_handleNetworkQualityMessage',\n\n\n /**\n * Check to see if the {@link NetworkQualityLevel} is new, and raise an\n * event if necessary.\n * @private\n * @param {object} message\n * @returns {void}\n */\n value: function _handleNetworkQualityMessage(message) {\n var _this2 = this;\n\n var updated = false;\n var level = null;\n var local = message ? message.local : null;\n if (typeof local === 'number') {\n // NOTE(mroberts): In prod, we plan to only send the level.\n level = local;\n this._levels = null;\n } else if ((typeof local === 'undefined' ? 'undefined' : _typeof(local)) === 'object' && local) {\n // NOTE(mroberts): In dev, we plan to send the decomposed levels. An early\n // VMS version does not compute `level` for us, so we fallback to taking\n // the minimum ourselves.\n this._levels = local;\n level = typeof local.level === 'number' ? local.level : Math.min(local.audio.send, local.audio.recv, local.video.send, local.video.recv);\n }\n if (level !== null && this.level !== level) {\n this._level = level;\n updated = true;\n }\n this._remoteLevels = message && message.remotes ? message.remotes.reduce(function (levels, obj) {\n var oldObj = _this2._remoteLevels.get(obj.sid) || {};\n if (oldObj.level !== obj.level) {\n updated = true;\n }\n return levels.set(obj.sid, obj);\n }, new Map()) : this._remoteLevels;\n\n if (updated) {\n this.emit('updated');\n }\n setTimeout(function () {\n return _this2._sendNetworkQualityInputs();\n }, 1000);\n }\n\n /**\n * Start sending {@link NetworkQualityInputs}.\n * @private\n * @returns {Promise}\n */\n\n }, {\n key: '_sendNetworkQualityInputs',\n value: function _sendNetworkQualityInputs() {\n var _this3 = this;\n\n return this._networkQualityInputs.take().then(function (networkQualityInputs) {\n _this3._mediaSignalingTransport.publish(createNetworkQualityInputsMessage(networkQualityInputs, _this3._networkQualityReportLevels));\n });\n }\n\n /**\n * Put {@link NetworkQualityInputs} to be used for computing\n * {@link NetworkQualityLevel}.\n * @param {NetworkQualityInputs} networkQualityInputs\n * @returns {void}\n */\n\n }, {\n key: 'put',\n value: function put(networkQualityInputs) {\n this._networkQualityInputs.put(networkQualityInputs);\n }\n }, {\n key: 'level',\n get: function get() {\n return this._level;\n }\n\n /**\n * Get the current {@link NetworkQualityLevels}, if any.\n * @returns {?NetworkQualityLevels} levels - initially null\n */\n\n }, {\n key: 'levels',\n get: function get() {\n return this._levels;\n }\n\n /**\n * Get the current {@link NetworkQualityLevels} of remote participants, if any.\n * @returns {Map} remoteLevels\n */\n\n }, {\n key: 'remoteLevels',\n get: function get() {\n return this._remoteLevels;\n }\n }]);\n\n return NetworkQualitySignaling;\n}(EventEmitter);\n\n/**\n * The {@link NetworkQualityLevel} changed.\n * @event NetworkQualitySignaling#updated\n */\n\n/**\n * @typedef {object} NetworkQualityReportLevels\n * @param {number} reportLevel\n * @param {number} remoteReportLevel\n */\n\n/**\n * @param {NetworkQualityInputs} networkQualityInputs\n * @param {NetworkQualityReportLevels} networkQualityReportLevels\n * @returns {object} message\n */\n\n\nfunction createNetworkQualityInputsMessage(networkQualityInputs, networkQualityReportLevels) {\n return Object.assign({ type: 'network_quality' }, networkQualityInputs, networkQualityReportLevels);\n}\n\nmodule.exports = NetworkQualitySignaling;","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _require = require('../../util/constants'),\n E = _require.typeErrors,\n trackPriority = _require.trackPriority;\n\nfunction mixinRemoteMediaTrack(AudioOrVideoTrack) {\n /**\n * A {@link RemoteMediaTrack} represents a {@link MediaTrack} published to a\n * {@link Room} by a {@link RemoteParticipant}.\n * @property {boolean} isEnabled - Whether the {@link RemoteMediaTrack} is enabled\n * @property {boolean} isSwitchedOff - Whether the {@link RemoteMediaTrack} is switched off\n * @property {Track.SID} sid - The SID assigned to the {@link RemoteMediaTrack}\n * @property {?Track.Priority} priority - The subscribe priority of the {@link RemoteMediaTrack}\n * @emits RemoteMediaTrack#disabled\n * @emits RemoteMediaTrack#enabled\n * @emits RemoteMediaTrack#switchedOff\n * @emits RemoteMediaTrack#switchedOn\n */\n return function (_AudioOrVideoTrack) {\n _inherits(RemoteMediaTrack, _AudioOrVideoTrack);\n\n /**\n * Construct a {@link RemoteMediaTrack}.\n * @param {Track.SID} sid\n * @param {MediaTrackReceiver} mediaTrackReceiver\n * @param {boolean} isEnabled\n * @param {function(?Track.Priority): void} setPriority - Set or clear the subscribe\n * {@link Track.Priority} of the {@link RemoteMediaTrack}\n * @param {{log: Log, name: ?string}} options\n */\n function RemoteMediaTrack(sid, mediaTrackReceiver, isEnabled, setPriority, options) {\n _classCallCheck(this, RemoteMediaTrack);\n\n var _this = _possibleConstructorReturn(this, (RemoteMediaTrack.__proto__ || Object.getPrototypeOf(RemoteMediaTrack)).call(this, mediaTrackReceiver, options));\n\n Object.defineProperties(_this, {\n _isEnabled: {\n value: isEnabled,\n writable: true\n },\n _isSwitchedOff: {\n value: false,\n writable: true\n },\n _priority: {\n value: null,\n writable: true\n },\n _setPriority: {\n value: setPriority\n },\n isEnabled: {\n enumerable: true,\n get: function get() {\n return this._isEnabled;\n }\n },\n isSwitchedOff: {\n enumerable: true,\n get: function get() {\n return this._isSwitchedOff;\n }\n },\n priority: {\n enumerable: true,\n get: function get() {\n return this._priority;\n }\n },\n sid: {\n enumerable: true,\n value: sid\n }\n });\n return _this;\n }\n\n /**\n * Update the subscribe {@link Track.Priority} of the {@link RemoteMediaTrack}.\n * @param {?Track.Priority} priority - the new subscribe {@link Track.Priority};\n * If null, then the subscribe {@link Track.Priority} is cleared, which\n * means the {@link Track.Priority} set by the publisher is now the effective priority.\n * @returns {this}\n * @throws {RangeError}\n */\n\n\n _createClass(RemoteMediaTrack, [{\n key: 'setPriority',\n value: function setPriority(priority) {\n var priorityValues = [null].concat(_toConsumableArray(Object.values(trackPriority)));\n if (!priorityValues.includes(priority)) {\n // eslint-disable-next-line new-cap\n throw E.INVALID_VALUE('priority', priorityValues);\n }\n if (this._priority !== priority) {\n this._priority = priority;\n this._setPriority(priority);\n }\n return this;\n }\n\n /**\n * @private\n * @param {boolean} isEnabled\n */\n\n }, {\n key: '_setEnabled',\n value: function _setEnabled(isEnabled) {\n if (this._isEnabled !== isEnabled) {\n this._isEnabled = isEnabled;\n this.emit(this._isEnabled ? 'enabled' : 'disabled', this);\n }\n }\n\n /**\n * @private\n * @param {boolean} isSwitchedOff\n */\n\n }, {\n key: '_setSwitchedOff',\n value: function _setSwitchedOff(isSwitchedOff) {\n if (this._isSwitchedOff !== isSwitchedOff) {\n this._isSwitchedOff = isSwitchedOff;\n this.emit(isSwitchedOff ? 'switchedOff' : 'switchedOn', this);\n }\n }\n }, {\n key: 'attach',\n value: function attach(el) {\n var result = _get(RemoteMediaTrack.prototype.__proto__ || Object.getPrototypeOf(RemoteMediaTrack.prototype), 'attach', this).call(this, el);\n if (this.mediaStreamTrack.enabled !== true) {\n // NOTE(mpatwardhan): we disable mediaStreamTrack when there\n // are no attchments to it (see notes below). Now that there\n // are attachments reenable the track.\n this.mediaStreamTrack.enabled = true;\n }\n return result;\n }\n }, {\n key: 'detach',\n value: function detach(el) {\n var result = _get(RemoteMediaTrack.prototype.__proto__ || Object.getPrototypeOf(RemoteMediaTrack.prototype), 'detach', this).call(this, el);\n if (this._attachments.size === 0) {\n // NOTE(mpatwardhan): chrome continues playing webrtc audio\n // track even after audio element is removed from the DOM.\n // https://bugs.chromium.org/p/chromium/issues/detail?id=749928\n // to workaround: here disable the track when\n // there are no elements attached to it.\n this.mediaStreamTrack.enabled = false;\n }\n return result;\n }\n }]);\n\n return RemoteMediaTrack;\n }(AudioOrVideoTrack);\n}\n\n/**\n * A {@link RemoteMediaTrack} was disabled.\n * @param {RemoteMediaTrack} track - The {@link RemoteMediaTrack} that was\n * disabled\n * @event RemoteMediaTrack#disabled\n */\n\n/**\n * A {@link RemoteMediaTrack} was enabled.\n * @param {RemoteMediaTrack} track - The {@link RemoteMediaTrack} that was\n * enabled\n * @event RemoteMediaTrack#enabled\n */\n\n/**\n * A {@link RemoteMediaTrack} was switched off.\n * @param {RemoteMediaTrack} track - The {@link RemoteMediaTrack} that was\n * switched off\n * @event RemoteMediaTrack#switchedOff\n */\n\n/**\n * A {@link RemoteMediaTrack} was switched on.\n * @param {RemoteMediaTrack} track - The {@link RemoteMediaTrack} that was\n * switched on\n * @event RemoteMediaTrack#switchedOn\n */\n\nmodule.exports = mixinRemoteMediaTrack;","'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar LocalTrackStats = require('./localtrackstats');\n\n/**\n * Statistics for a {@link LocalVideoTrack}.\n * @extends LocalTrackStats\n * @property {?VideoTrack#Dimensions} captureDimensions - Video capture resolution\n * @property {?VideoTrack#Dimensions} dimensions - Video encoding resolution\n * @property {?number} captureFrameRate - Video capture frame rate\n * @property {?number} frameRate - Video encoding frame rate\n */\n\nvar LocalVideoTrackStats = function (_LocalTrackStats) {\n _inherits(LocalVideoTrackStats, _LocalTrackStats);\n\n /**\n * @param {string} trackId - {@link LocalVideoTrack} ID\n * @param {StandardizedTrackStatsReport} statsReport\n */\n function LocalVideoTrackStats(trackId, statsReport) {\n _classCallCheck(this, LocalVideoTrackStats);\n\n var _this = _possibleConstructorReturn(this, (LocalVideoTrackStats.__proto__ || Object.getPrototypeOf(LocalVideoTrackStats)).call(this, trackId, statsReport));\n\n var captureDimensions = null;\n if (typeof statsReport.frameWidthInput === 'number' && typeof statsReport.frameHeightInput === 'number') {\n captureDimensions = {};\n\n Object.defineProperties(captureDimensions, {\n width: {\n value: statsReport.frameWidthInput,\n enumerable: true\n },\n height: {\n value: statsReport.frameHeightInput,\n enumerable: true\n }\n });\n }\n\n var dimensions = null;\n if (typeof statsReport.frameWidthSent === 'number' && typeof statsReport.frameHeightSent === 'number') {\n dimensions = {};\n\n Object.defineProperties(dimensions, {\n width: {\n value: statsReport.frameWidthSent,\n enumerable: true\n },\n height: {\n value: statsReport.frameHeightSent,\n enumerable: true\n }\n });\n }\n\n Object.defineProperties(_this, {\n captureDimensions: {\n value: captureDimensions,\n enumerable: true\n },\n dimensions: {\n value: dimensions,\n enumerable: true\n },\n captureFrameRate: {\n value: typeof statsReport.frameRateInput === 'number' ? statsReport.frameRateInput : null,\n enumerable: true\n },\n frameRate: {\n value: typeof statsReport.frameRateSent === 'number' ? statsReport.frameRateSent : null,\n enumerable: true\n }\n });\n return _this;\n }\n\n return LocalVideoTrackStats;\n}(LocalTrackStats);\n\nmodule.exports = LocalVideoTrackStats;","'use strict';\n\n/**\n * Create a {@link Deferred}.\n * @returns {Deferred}\n */\nfunction defer() {\n var deferred = {};\n deferred.promise = new Promise(function(resolve, reject) {\n deferred.resolve = resolve;\n deferred.reject = reject;\n });\n return deferred;\n}\n\n/**\n * Copy a method from a `source` prototype onto a `wrapper` prototype. Invoking\n * the method on the `wrapper` prototype will invoke the corresponding method\n * on an instance accessed by `target`.\n * @param {object} source\n * @param {object} wrapper\n * @param {string} target\n * @param {string} methodName\n * @returns {undefined}\n */\nfunction delegateMethod(source, wrapper, target, methodName) {\n if (methodName in wrapper) {\n // Skip any methods already set.\n return;\n } else if (methodName.match(/^on[a-z]+$/)) {\n // Skip EventHandlers (these are handled in the constructor).\n return;\n }\n\n var type;\n try {\n type = typeof source[methodName];\n } catch (error) {\n // NOTE(mroberts): Attempting to check the type of non-function members\n // on the prototype throws an error for some types.\n }\n\n if (type !== 'function') {\n // Skip non-function members.\n return;\n }\n\n /* eslint no-loop-func:0 */\n wrapper[methodName] = function() {\n return this[target][methodName].apply(this[target], arguments);\n };\n}\n\n/**\n * Copy methods from a `source` prototype onto a `wrapper` prototype. Invoking\n * the methods on the `wrapper` prototype will invoke the corresponding method\n * on an instance accessed by `target`.\n * @param {object} source\n * @param {object} wrapper\n * @param {string} target\n * @returns {undefined}\n */\nfunction delegateMethods(source, wrapper, target) {\n for (var methodName in source) {\n delegateMethod(source, wrapper, target, methodName);\n }\n}\n\n/**\n * Finds the items in list1 that are not in list2.\n * @param {Array<*>|Map<*>|Set<*>} list1\n * @param {Array<*>|Map<*>|Set<*>} list2\n * @returns {Set}\n */\nfunction difference(list1, list2) {\n list1 = Array.isArray(list1) ? new Set(list1) : new Set(list1.values());\n list2 = Array.isArray(list2) ? new Set(list2) : new Set(list2.values());\n\n var difference = new Set();\n\n list1.forEach(function(item) {\n if (!list2.has(item)) {\n difference.add(item);\n }\n });\n\n return difference;\n}\n\n/**\n * Map a list to an array of arrays, and return the flattened result.\n * @param {Array<*>|Set<*>|Map<*>} list\n * @param {function(*): Array<*>} mapFn\n * @returns Array<*>\n */\nfunction flatMap(list, mapFn) {\n var listArray = list instanceof Map || list instanceof Set\n ? Array.from(list.values())\n : list;\n\n return listArray.reduce(function(flattened, item) {\n var mapped = mapFn(item);\n return flattened.concat(mapped);\n }, []);\n}\n\n/**\n * Get the browser's user agent, if available.\n * @returns {?string}\n */\nfunction getUserAgent() {\n return typeof navigator !== 'undefined' && typeof navigator.userAgent === 'string'\n ? navigator.userAgent\n : null;\n}\n\n/**\n * Guess the browser.\n * @param {string} [userAgent=navigator.userAgent]\n * @returns {?string} browser - \"chrome\", \"firefox\", \"safari\", or null\n */\nfunction guessBrowser(userAgent) {\n if (typeof userAgent === 'undefined') {\n userAgent = getUserAgent();\n }\n if (/Chrome|CriOS/.test(userAgent)) {\n return 'chrome';\n }\n if (/Firefox|FxiOS/.test(userAgent)) {\n return 'firefox';\n }\n if (/Safari/.test(userAgent)) {\n return 'safari';\n }\n return null;\n}\n\n/**\n * Guess the browser version.\n * @param {string} [userAgent=navigator.userAgent]\n * @returns {?{major: number, minor: number}}\n */\nfunction guessBrowserVersion(userAgent) {\n if (typeof userAgent === 'undefined') {\n userAgent = getUserAgent();\n }\n var prefix = {\n chrome: 'Chrome|CriOS',\n firefox: 'Firefox|FxiOS',\n safari: 'Version'\n }[guessBrowser(userAgent)];\n\n if (!prefix) {\n return null;\n }\n var regex = new RegExp('(' + prefix + ')/([^\\\\s]+)');\n var match = (userAgent.match(regex) || [])[2];\n\n if (!match) {\n return null;\n }\n var versions = match.split('.').map(Number);\n return {\n major: isNaN(versions[0]) ? null : versions[0],\n minor: isNaN(versions[1]) ? null : versions[1]\n };\n}\n\n/**\n * Intercept an event that might otherwise be proxied on an EventTarget.\n * @param {EventTarget} target\n * @param {string} type\n * @returns {void}\n */\nfunction interceptEvent(target, type) {\n var currentListener = null;\n Object.defineProperty(target, 'on' + type, {\n get: function() {\n return currentListener;\n },\n set: function(newListener) {\n if (currentListener) {\n this.removeEventListener(type, currentListener);\n }\n\n if (typeof newListener === 'function') {\n currentListener = newListener;\n this.addEventListener(type, currentListener);\n } else {\n currentListener = null;\n }\n }\n });\n}\n\n/**\n * This is a function for turning a Promise into the kind referenced in the\n * Legacy Interface Extensions section of the WebRTC spec.\n * @param {Promise<*>} promise\n * @param {function<*>} onSuccess\n * @param {function} onFailure\n * @returns {Promise}\n */\nfunction legacyPromise(promise, onSuccess, onFailure) {\n if (onSuccess) {\n return promise.then(function(result) {\n onSuccess(result);\n }, function(error) {\n onFailure(error);\n });\n }\n return promise;\n}\n\n/**\n * Make a unique ID.\n * @return {string}\n */\nfunction makeUUID() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = Math.random() * 16 | 0;\n var v = c === 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n}\n\n/**\n * For each property name on the `source` prototype, add getters and/or setters\n * to `wrapper` that proxy to `target`.\n * @param {object} source\n * @param {object} wrapper\n * @param {string} target\n * @returns {undefined}\n */\nfunction proxyProperties(source, wrapper, target) {\n Object.getOwnPropertyNames(source).forEach(function(propertyName) {\n proxyProperty(source, wrapper, target, propertyName);\n });\n}\n\n/**\n * For the property name on the `source` prototype, add a getter and/or setter\n * to `wrapper` that proxies to `target`.\n * @param {object} source\n * @param {object} wrapper\n * @param {string} target\n * @param {string} propertyName\n * @returns {undefined}\n */\nfunction proxyProperty(source, wrapper, target, propertyName) {\n if (propertyName in wrapper) {\n // Skip any properties already set.\n return;\n } else if (propertyName.match(/^on[a-z]+$/)) {\n Object.defineProperty(wrapper, propertyName, {\n value: null,\n writable: true\n });\n\n target.addEventListener(propertyName.slice(2), function() {\n wrapper.dispatchEvent.apply(wrapper, arguments);\n });\n\n return;\n }\n\n Object.defineProperty(wrapper, propertyName, {\n enumerable: true,\n get: function() {\n return target[propertyName];\n }\n });\n}\n\n/**\n * @typedef {object} Deferred\n * @property {Promise} promise\n * @property {function} reject\n * @property {function} resolve\n */\n\nexports.defer = defer;\nexports.delegateMethods = delegateMethods;\nexports.difference = difference;\nexports.flatMap = flatMap;\nexports.guessBrowser = guessBrowser;\nexports.guessBrowserVersion = guessBrowserVersion;\nexports.interceptEvent = interceptEvent;\nexports.legacyPromise = legacyPromise;\nexports.makeUUID = makeUUID;\nexports.proxyProperties = proxyProperties;\n","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar MediaStream = require('@twilio/webrtc').MediaStream;\nvar Track = require('./');\n\n/**\n * A {@link MediaTrack} represents audio or video that can be sent to or\n * received from a {@link Room}.\n * @extends Track\n * @property {Track.ID} id - This {@link Track}'s ID\n * @property {boolean} isStarted - Whether or not the {@link MediaTrack} has\n * started\n * @property {boolean} isEnabled - Whether or not the {@link MediaTrack} is\n * enabled (i.e., whether it is paused or muted)\n * @property {Track.Kind} kind - The kind of the underlying\n * MediaStreamTrack, \"audio\" or \"video\"\n * @property {MediaStreamTrack} mediaStreamTrack - The underlying\n * MediaStreamTrack\n * @emits MediaTrack#disabled\n * @emits MediaTrack#enabled\n * @emits MediaTrack#started\n */\n\nvar MediaTrack = function (_Track) {\n _inherits(MediaTrack, _Track);\n\n /**\n * Construct a {@link MediaTrack}.\n * @param {MediaTrackTransceiver} mediaTrackTransceiver\n * @param {{log: Log}} options\n */\n function MediaTrack(mediaTrackTransceiver, options) {\n _classCallCheck(this, MediaTrack);\n\n var _this = _possibleConstructorReturn(this, (MediaTrack.__proto__ || Object.getPrototypeOf(MediaTrack)).call(this, mediaTrackTransceiver.id, mediaTrackTransceiver.kind, options));\n\n var isStarted = false;\n\n options = Object.assign({\n MediaStream: MediaStream\n }, options);\n\n /* istanbul ignore next */\n Object.defineProperties(_this, {\n _attachments: {\n value: new Set()\n },\n _dummyEl: {\n value: null,\n writable: true\n },\n _isStarted: {\n get: function get() {\n return isStarted;\n },\n set: function set(_isStarted) {\n isStarted = _isStarted;\n }\n },\n _MediaStream: {\n value: options.MediaStream\n },\n isStarted: {\n enumerable: true,\n get: function get() {\n return isStarted;\n }\n },\n mediaStreamTrack: {\n enumerable: true,\n value: mediaTrackTransceiver.track\n }\n });\n\n _this._initialize();\n return _this;\n }\n\n /**\n * @private\n */\n\n\n _createClass(MediaTrack, [{\n key: '_start',\n value: function _start() {\n this._log.debug('Started');\n this._isStarted = true;\n if (this._dummyEl) {\n this._dummyEl.oncanplay = null;\n }\n // eslint-disable-next-line no-use-before-define\n this.emit('started', this);\n }\n\n /**\n * @private\n */\n\n }, {\n key: '_initialize',\n value: function _initialize() {\n var self = this;\n\n this._log.debug('Initializing');\n this._dummyEl = this._createElement();\n\n this.mediaStreamTrack.addEventListener('ended', function onended() {\n self._end();\n self.mediaStreamTrack.removeEventListener('ended', onended);\n });\n\n if (this._dummyEl) {\n this._dummyEl.muted = true;\n this._dummyEl.oncanplay = this._start.bind(this, this._dummyEl);\n this._attach(this._dummyEl);\n this._attachments.delete(this._dummyEl);\n }\n }\n\n /**\n * @private\n */\n\n }, {\n key: '_end',\n value: function _end() {\n this._log.debug('Ended');\n if (this._dummyEl) {\n this._detachElement(this._dummyEl);\n this._dummyEl.oncanplay = null;\n }\n }\n }, {\n key: 'attach',\n value: function attach(el) {\n if (typeof el === 'string') {\n el = this._selectElement(el);\n } else if (!el) {\n el = this._createElement();\n }\n this._log.debug('Attempting to attach to element:', el);\n el = this._attach(el);\n\n return el;\n }\n\n /**\n * @private\n */\n\n }, {\n key: '_attach',\n value: function _attach(el) {\n var mediaStream = el.srcObject;\n if (!(mediaStream instanceof this._MediaStream)) {\n mediaStream = new this._MediaStream();\n }\n\n var getTracks = this.mediaStreamTrack.kind === 'audio' ? 'getAudioTracks' : 'getVideoTracks';\n\n mediaStream[getTracks]().forEach(function (mediaStreamTrack) {\n mediaStream.removeTrack(mediaStreamTrack);\n });\n mediaStream.addTrack(this.mediaStreamTrack);\n\n // NOTE(mpatwardhan): resetting `srcObject` here, causes flicker (JSDK-2641), but it lets us\n // to sidestep the a chrome bug: https://bugs.chromium.org/p/chromium/issues/detail?id=1052353\n //\n el.srcObject = mediaStream;\n el.autoplay = true;\n el.playsInline = true;\n\n if (!this._attachments.has(el)) {\n this._attachments.add(el);\n }\n\n return el;\n }\n\n /**\n * @private\n */\n\n }, {\n key: '_selectElement',\n value: function _selectElement(selector) {\n var el = document.querySelector(selector);\n\n if (!el) {\n throw new Error('Selector matched no element: ' + selector);\n }\n\n return el;\n }\n\n /**\n * @private\n */\n\n }, {\n key: '_createElement',\n value: function _createElement() {\n return typeof document !== 'undefined' ? document.createElement(this.kind) : null;\n }\n }, {\n key: 'detach',\n value: function detach(el) {\n var els = void 0;\n\n if (typeof el === 'string') {\n els = [this._selectElement(el)];\n } else if (!el) {\n els = this._getAllAttachedElements();\n } else {\n els = [el];\n }\n\n this._log.debug('Attempting to detach from elements:', els);\n this._detachElements(els);\n return el ? els[0] : els;\n }\n\n /**\n * @private\n */\n\n }, {\n key: '_detachElements',\n value: function _detachElements(elements) {\n return elements.map(this._detachElement.bind(this));\n }\n\n /**\n * @private\n */\n\n }, {\n key: '_detachElement',\n value: function _detachElement(el) {\n if (!this._attachments.has(el)) {\n return el;\n }\n\n var mediaStream = el.srcObject;\n if (mediaStream instanceof this._MediaStream) {\n mediaStream.removeTrack(this.mediaStreamTrack);\n }\n\n this._attachments.delete(el);\n return el;\n }\n\n /**\n * @private\n */\n\n }, {\n key: '_getAllAttachedElements',\n value: function _getAllAttachedElements() {\n var els = [];\n\n this._attachments.forEach(function (el) {\n els.push(el);\n });\n\n return els;\n }\n }]);\n\n return MediaTrack;\n}(Track);\n\nmodule.exports = MediaTrack;","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar LocalTrackPublication = require('./localtrackpublication');\n\n/**\n * A {@link LocalAudioTrackPublication} is a {@link LocalAudioTrack} that has\n * been published to a {@link Room}.\n * @extends LocalTrackPublication\n * @property {Track.Kind} kind - \"audio\"\n * @property {LocalAudioTrack} track - the {@link LocalAudioTrack}\n */\n\nvar LocalAudioTrackPublication = function (_LocalTrackPublicatio) {\n _inherits(LocalAudioTrackPublication, _LocalTrackPublicatio);\n\n /**\n * Construct a {@link LocalAudioTrackPublication}.\n * @param {LocalTrackPublicationSignaling} signaling - The corresponding\n * {@link LocalTrackPublicationSignaling}\n * @param {LocalAudioTrack} track - the {@link LocalAudioTrack}\n * @param {function(LocalTrackPublication): void} unpublish - The callback\n * that unpublishes the {@link LocalTrackPublication}\n * @param {TrackPublicationOptions} options - {@link LocalTrackPublication} options\n */\n function LocalAudioTrackPublication(signaling, track, unpublish, options) {\n _classCallCheck(this, LocalAudioTrackPublication);\n\n return _possibleConstructorReturn(this, (LocalAudioTrackPublication.__proto__ || Object.getPrototypeOf(LocalAudioTrackPublication)).call(this, signaling, track, unpublish, options));\n }\n\n _createClass(LocalAudioTrackPublication, [{\n key: 'toString',\n value: function toString() {\n return '[LocalAudioTrackPublication #' + this._instanceId + ': ' + this.trackSid + ']';\n }\n }]);\n\n return LocalAudioTrackPublication;\n}(LocalTrackPublication);\n\nmodule.exports = LocalAudioTrackPublication;","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar EventEmitter = require('events').EventEmitter;\n\nvar instances = 0;\n\n/**\n * A {@link ConstantIceServerSource} only ever returns a single set of ICE\n * servers. It is useful for providing a hard-coded set of ICE servers.\n * @extends EventEmitter\n * @implements {IceServerSource}\n */\n\nvar ConstantIceServerSource = function (_EventEmitter) {\n _inherits(ConstantIceServerSource, _EventEmitter);\n\n /**\n * Construct a {@link ConstantIceServerSource}.\n * @param {Array} iceServers\n */\n function ConstantIceServerSource(iceServers) {\n _classCallCheck(this, ConstantIceServerSource);\n\n var _this = _possibleConstructorReturn(this, (ConstantIceServerSource.__proto__ || Object.getPrototypeOf(ConstantIceServerSource)).call(this));\n\n Object.defineProperties(_this, {\n _instance: {\n value: ++instances\n },\n _iceServers: {\n enumerable: true,\n value: iceServers,\n writable: true\n },\n _isStarted: {\n value: false,\n writable: true\n },\n isStarted: {\n enumerable: true,\n get: function get() {\n return this._isStarted;\n }\n },\n status: {\n enumerable: true,\n value: 'overrode'\n }\n });\n return _this;\n }\n\n _createClass(ConstantIceServerSource, [{\n key: 'start',\n value: function start() {\n this._isStarted = true;\n return Promise.resolve(this._iceServers);\n }\n }, {\n key: 'stop',\n value: function stop() {\n this._isStarted = false;\n }\n }, {\n key: 'toString',\n value: function toString() {\n return '[ConstantIceServerSource #' + this._instance + ']';\n }\n }]);\n\n return ConstantIceServerSource;\n}(EventEmitter);\n\nmodule.exports = ConstantIceServerSource;","/* global mozRTCIceCandidate, RTCIceCandidate */\n'use strict';\n\nif (typeof RTCIceCandidate !== 'undefined') {\n module.exports = RTCIceCandidate;\n} else if (typeof mozRTCIceCandidate !== 'undefined') {\n module.exports = mozRTCIceCandidate;\n} else {\n module.exports = function RTCIceCandidate() {\n throw new Error('WebRTC is unsupported');\n };\n}\n","// Copyright (c) 2012 Mathieu Turcotte\n// Licensed under the MIT license.\n\nvar Backoff = require('./lib/backoff');\nvar ExponentialBackoffStrategy = require('./lib/strategy/exponential');\nvar FibonacciBackoffStrategy = require('./lib/strategy/fibonacci');\nvar FunctionCall = require('./lib/function_call.js');\n\nmodule.exports.Backoff = Backoff;\nmodule.exports.FunctionCall = FunctionCall;\nmodule.exports.FibonacciStrategy = FibonacciBackoffStrategy;\nmodule.exports.ExponentialStrategy = ExponentialBackoffStrategy;\n\n// Constructs a Fibonacci backoff.\nmodule.exports.fibonacci = function(options) {\n return new Backoff(new FibonacciBackoffStrategy(options));\n};\n\n// Constructs an exponential backoff.\nmodule.exports.exponential = function(options) {\n return new Backoff(new ExponentialBackoffStrategy(options));\n};\n\n// Constructs a FunctionCall for the given function and arguments.\nmodule.exports.call = function(fn, vargs, callback) {\n var args = Array.prototype.slice.call(arguments);\n fn = args[0];\n vargs = args.slice(1, args.length - 1);\n callback = args[args.length - 1];\n return new FunctionCall(fn, vargs, callback);\n};\n","/* global MediaStreamTrack */\n'use strict';\n\nif (typeof MediaStreamTrack !== 'undefined') {\n module.exports = MediaStreamTrack;\n} else {\n module.exports = function MediaStreamTrack() {\n throw new Error('WebRTC is not supported in this browser');\n };\n}\n","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar mixinRemoteMediaTrack = require('./remotemediatrack');\nvar VideoTrack = require('./videotrack');\n\nvar RemoteMediaVideoTrack = mixinRemoteMediaTrack(VideoTrack);\n\n/**\n * A {@link RemoteVideoTrack} represents a {@link VideoTrack} published to a\n * {@link Room} by a {@link RemoteParticipant}.\n * @extends VideoTrack\n * @property {boolean} isEnabled - Whether the {@link RemoteVideoTrack} is enabled\n * @property {boolean} isSwitchedOff - Whether the {@link RemoteVideoTrack} is switched off\n * @property {Track.SID} sid - The {@link RemoteVideoTrack}'s SID\n * @property {?Track.Priority} priority - The subscribe priority of the {@link RemoteVideoTrack}\n * @emits RemoteVideoTrack#dimensionsChanged\n * @emits RemoteVideoTrack#disabled\n * @emits RemoteVideoTrack#enabled\n * @emits RemoteVideoTrack#started\n * @emits RemoteVideoTrack#switchedOff\n * @emits RemoteVideoTrack#switchedOn\n */\n\nvar RemoteVideoTrack = function (_RemoteMediaVideoTrac) {\n _inherits(RemoteVideoTrack, _RemoteMediaVideoTrac);\n\n /**\n * Construct a {@link RemoteVideoTrack}.\n * @param {Track.SID} sid - The {@link RemoteVideoTrack}'s SID\n * @param {MediaTrackReceiver} mediaTrackReceiver - A video MediaStreamTrack container\n * @param {boolean} isEnabled - whether the {@link RemoteVideoTrack} is enabled\n * @param {function(?Track.Priority): void} setPriority - Set or clear the subscribe\n * {@link Track.Priority} of the {@link RemoteVideoTrack}\n * @param {{log: Log}} options - The {@link RemoteTrack} options\n */\n function RemoteVideoTrack(sid, mediaTrackReceiver, isEnabled, setPriority, options) {\n _classCallCheck(this, RemoteVideoTrack);\n\n return _possibleConstructorReturn(this, (RemoteVideoTrack.__proto__ || Object.getPrototypeOf(RemoteVideoTrack)).call(this, sid, mediaTrackReceiver, isEnabled, setPriority, options));\n }\n\n _createClass(RemoteVideoTrack, [{\n key: 'toString',\n value: function toString() {\n return '[RemoteVideoTrack #' + this._instanceId + ': ' + this.sid + ']';\n }\n\n /**\n * Update the subscribe {@link Track.Priority} of the {@link RemoteVideoTrack}.\n * @param {?Track.Priority} priority - the new subscribe {@link Track.Priority};\n * If null, then the subscribe {@link Track.Priority} is cleared, which\n * means the {@link Track.Priority} set by the publisher is now the effective priority.\n * @returns {this}\n * @throws {RangeError}\n */\n\n }, {\n key: 'setPriority',\n value: function setPriority(priority) {\n return _get(RemoteVideoTrack.prototype.__proto__ || Object.getPrototypeOf(RemoteVideoTrack.prototype), 'setPriority', this).call(this, priority);\n }\n }]);\n\n return RemoteVideoTrack;\n}(RemoteMediaVideoTrack);\n\n/**\n * The {@link RemoteVideoTrack}'s dimensions changed.\n * @param {RemoteVideoTrack} track - The {@link RemoteVideoTrack} whose\n * dimensions changed\n * @event RemoteVideoTrack#dimensionsChanged\n */\n\n/**\n * The {@link RemoteVideoTrack} was disabled, i.e. \"paused\".\n * @param {RemoteVideoTrack} track - The {@link RemoteVideoTrack} that was\n * disabled\n * @event RemoteVideoTrack#disabled\n */\n\n/**\n * The {@link RemoteVideoTrack} was enabled, i.e. \"resumed\".\n * @param {RemoteVideoTrack} track - The {@link RemoteVideoTrack} that was\n * enabled\n * @event RemoteVideoTrack#enabled\n */\n\n/**\n * The {@link RemoteVideoTrack} started. This means there is enough video data\n * to begin playback.\n * @param {RemoteVideoTrack} track - The {@link RemoteVideoTrack} that started\n * @event RemoteVideoTrack#started\n */\n\n/**\n * A {@link RemoteVideoTrack} was switched off.\n * @param {RemoteVideoTrack} track - The {@link RemoteVideoTrack} that was\n * switched off\n * @event RemoteVideoTrack#switchedOff\n */\n\n/**\n * A {@link RemoteVideoTrack} was switched on.\n * @param {RemoteVideoTrack} track - The {@link RemoteVideoTrack} that was\n * switched on\n * @event RemoteVideoTrack#switchedOn\n */\n\nmodule.exports = RemoteVideoTrack;","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar _require = require('./'),\n defer = _require.defer;\n\n/**\n * An {@link AsyncVar} is an \"asynchronous variable\" which may or may not\n * contain a value of some type T. You can put a value into the {@link AsyncVar}\n * with {@link AsyncVar#put}. Callers can take a value out of the\n * {@link AsyncVar} by queueing up with {@link AsyncVar#take}. N calls to\n * {@link AsyncVar#take} require N calls to {@link AsyncVar#put} to resolve, and\n * they resolve in order.\n */\n\n\nvar AsyncVar = function () {\n /**\n * Construct an {@link AsyncVar}.\n */\n function AsyncVar() {\n _classCallCheck(this, AsyncVar);\n\n Object.defineProperties(this, {\n _deferreds: {\n value: []\n },\n _hasValue: {\n value: false,\n writable: true\n },\n _value: {\n value: null,\n writable: true\n }\n });\n }\n\n /**\n * Put a value into the {@link AsyncVar}.\n * @param {T} value\n * @returns {this}\n */\n\n\n _createClass(AsyncVar, [{\n key: 'put',\n value: function put(value) {\n this._hasValue = true;\n this._value = value;\n var deferred = this._deferreds.shift();\n if (deferred) {\n deferred.resolve(value);\n }\n return this;\n }\n\n /**\n * Take the value out of the {@link AsyncVar}.\n * @returns {Promise}\n */\n\n }, {\n key: 'take',\n value: function take() {\n var _this = this;\n\n if (this._hasValue && !this._deferreds.length) {\n this._hasValue = false;\n return Promise.resolve(this._value);\n }\n var deferred = defer();\n this._deferreds.push(deferred);\n return deferred.promise.then(function (value) {\n _this._hasValue = false;\n return value;\n });\n }\n }]);\n\n return AsyncVar;\n}();\n\nmodule.exports = AsyncVar;","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar StateMachine = require('../statemachine');\nvar NetworkQualityStats = require('../stats/networkqualitystats');\n\n/*\nParticipantSignaling States\n----------------------\n\n +------------+ +-----------+ +--------------+\n | | | | | |\n | connecting |---->| connected |---->| disconnected |\n | | | | | |\n +------------+ +-----------+ +--------------+\n | ^ ^\n | | +--------------+ |\n | |--| | |\n |--->| reconnecting |--|\n | |\n +--------------+\n*/\n\nvar states = {\n connecting: ['connected'],\n connected: ['disconnected', 'reconnecting'],\n reconnecting: ['connected', 'disconnected'],\n disconnected: []\n};\n\n/**\n * A {@link Participant} implementation\n * @extends StateMachine\n * @property {?string} identity\n * @property {?Participant.SID} sid\n * @property {string} state - \"connecting\", \"connected\", or \"disconnected\"\n * @property {Map} tracks\n * @emits ParticipantSignaling#networkQualityLevelChanged\n * @emits ParticipantSignaling#trackAdded\n * @emits ParticipantSignaling#trackRemoved\n */\n\nvar ParticipantSignaling = function (_StateMachine) {\n _inherits(ParticipantSignaling, _StateMachine);\n\n /**\n * Construct a {@link ParticipantSignaling}.\n */\n function ParticipantSignaling() {\n _classCallCheck(this, ParticipantSignaling);\n\n var _this = _possibleConstructorReturn(this, (ParticipantSignaling.__proto__ || Object.getPrototypeOf(ParticipantSignaling)).call(this, 'connecting', states));\n\n Object.defineProperties(_this, {\n _enqueuedPriorityUpdates: {\n value: new Map()\n },\n _identity: {\n writable: true,\n value: null\n },\n _networkQualityLevel: {\n value: null,\n writable: true\n },\n _networkQualityStats: {\n value: null,\n writable: true\n },\n _sid: {\n writable: true,\n value: null\n },\n _trackPrioritySignaling: {\n value: null,\n writable: true\n },\n identity: {\n enumerable: true,\n get: function get() {\n return this._identity;\n }\n },\n sid: {\n enumerable: true,\n get: function get() {\n return this._sid;\n }\n },\n tracks: {\n enumerable: true,\n value: new Map()\n }\n });\n return _this;\n }\n\n /**\n * Get the current {@link NetworkQualityLevel}, if any.\n * @returns {?NetworkQualityLevel} networkQualityLevel - initially null\n */\n\n\n _createClass(ParticipantSignaling, [{\n key: 'addTrack',\n\n\n /**\n * Add the {@link TrackSignaling}, MediaStreamTrack, or\n * {@link DataTrackSender} to the {@link ParticipantSignaling}.\n * @param {TrackSignaling|DataTrackSender|MediaTrackSender} track\n * @returns {this}\n * @fires ParticipantSignaling#trackAdded\n */\n value: function addTrack(track) {\n this.tracks.set(track.id || track.sid, track);\n this.emit('trackAdded', track);\n return this;\n }\n\n /**\n * Disconnect the {@link ParticipantSignaling}.\n * @returns {boolean}\n */\n\n }, {\n key: 'disconnect',\n value: function disconnect() {\n if (this.state !== 'disconnected') {\n this.preempt('disconnected');\n return true;\n }\n return false;\n }\n\n /**\n * Remove the {@link TrackSignaling}, MediaStreamTrack, or\n * {@link DataTrackSender} from the {@link ParticipantSignaling}.\n * @param {TrackSignaling|DataTrackSender|MediaTrackSender} track\n * @returns {?TrackSignaling}\n * @fires ParticipantSignaling#trackRemoved\n */\n\n }, {\n key: 'removeTrack',\n value: function removeTrack(track) {\n var signaling = this.tracks.get(track.id || track.sid);\n this.tracks.delete(track.id || track.sid);\n if (signaling) {\n this.emit('trackRemoved', track);\n }\n return signaling || null;\n }\n\n /**\n * @param {NetworkQualityLevel} networkQualityLevel\n * @param {?NetworkQualityLevels} [networkQualityLevels=null]\n * @returns {void}\n */\n\n }, {\n key: 'setNetworkQualityLevel',\n value: function setNetworkQualityLevel(networkQualityLevel, networkQualityLevels) {\n if (this._networkQualityLevel !== networkQualityLevel) {\n this._networkQualityLevel = networkQualityLevel;\n this._networkQualityStats = networkQualityLevels && (networkQualityLevels.audio || networkQualityLevels.video) ? new NetworkQualityStats(networkQualityLevels) : null;\n this.emit('networkQualityLevelChanged');\n }\n }\n\n /**\n * updates the subscriber priority for the given track.\n * @param {Track.SID} trackSid\n * @param {?Track.Priority} priority\n * @returns {void}\n */\n\n }, {\n key: 'updateSubscriberTrackPriority',\n value: function updateSubscriberTrackPriority(trackSid, priority) {\n // note the most recent priority update for the track.\n this._enqueuedPriorityUpdates.set(trackSid, priority);\n if (this._trackPrioritySignaling) {\n this._trackPrioritySignaling.sendTrackPriorityUpdate(trackSid, 'subscribe', priority);\n }\n }\n\n /**\n * Set the {@link TrackPrioritySignaling}.\n * @param {TrackPrioritySignaling} trackPrioritySignaling\n * @returns {this}\n */\n\n }, {\n key: 'setTrackPrioritySignaling',\n value: function setTrackPrioritySignaling(trackPrioritySignaling) {\n var _this2 = this;\n\n this._trackPrioritySignaling = trackPrioritySignaling;\n if (trackPrioritySignaling) {\n this._enqueuedPriorityUpdates.forEach(function (priority, trackSid) {\n _this2._trackPrioritySignaling.sendTrackPriorityUpdate(trackSid, 'subscribe', priority);\n });\n // NOTE(mpatwardhan)- we intentionally do not clear _enqueuedPriorityUpdates,\n // this cache will be used to re-send the priorities in case of VMS-FailOver.\n }\n return this;\n }\n\n /**\n * Connect the {@link ParticipantSignaling}.\n * @param {Participant.SID} sid\n * @param {string} identity\n * @returns {boolean}\n */\n\n }, {\n key: 'connect',\n value: function connect(sid, identity) {\n if (this.state === 'connecting' || this.state === 'reconnecting') {\n if (!this._sid) {\n this._sid = sid;\n }\n if (!this._identity) {\n this._identity = identity;\n }\n this.preempt('connected');\n return true;\n }\n return false;\n }\n\n /**\n * Transition to \"reconnecting\" state.\n * @returns {boolean}\n */\n\n }, {\n key: 'reconnecting',\n value: function reconnecting() {\n if (this.state === 'connecting' || this.state === 'connected') {\n this.preempt('reconnecting');\n return true;\n }\n return false;\n }\n }, {\n key: 'networkQualityLevel',\n get: function get() {\n return this._networkQualityLevel;\n }\n\n /**\n * Get the current {@link NetworkQualityStats}\n * @returns {?NetworkQualityStats} networkQualityStats - initially null\n */\n\n }, {\n key: 'networkQualityStats',\n get: function get() {\n return this._networkQualityStats;\n }\n }]);\n\n return ParticipantSignaling;\n}(StateMachine);\n\n/**\n * @event ParticipantSignaling#event:networkQualityLevelChanged\n */\n\n/**\n * {@link TrackSignaling} was added to the {@link ParticipantSignaling}.\n * @event ParticipantSignaling#trackAdded\n * @param {TrackSignaling} track\n */\n\n/**\n * {@link TrackSignaling} was removed from the {@link ParticipantSignaling}.\n * @event ParticipantSignaling#trackRemoved\n * @param {TrackSignaling} track\n */\n\nmodule.exports = ParticipantSignaling;","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar StateMachine = require('./statemachine');\n\nvar _require = require('./util'),\n buildLogLevels = _require.buildLogLevels,\n makeUUID = _require.makeUUID;\n\nvar Log = require('./util/log');\nvar Timeout = require('./util/timeout');\n\nvar nInstances = 0;\n\n/*\n TwilioConnection states\n -----------------------\n\n +--------------+ +----------+\n | connecting | ----> | closed |\n +--------------+ +----------+\n | ^\n v |\n +--------+ |\n | open | ---------------\n +--------+\n */\n\nvar states = {\n closed: [],\n connecting: ['closed', 'open'],\n open: ['closed']\n};\n\nvar DEFAULT_MAX_CONSECUTIVE_MISSED_HEARTBEATS = 3;\nvar DEFAULT_MAX_REQUESTED_HEARTBEAT_TIMEOUT = 5000;\nvar DEFAULT_WELCOME_TIMEOUT = 5000;\nvar HEARTBEAT_TIMEOUT_OFFSET = 100;\nvar WS_CLOSE_NORMAL = 1000;\nvar WS_CLOSE_WELCOME_TIMEOUT = 3000;\nvar WS_CLOSE_HEARTBEATS_MISSED = 3001;\nvar WS_CLOSE_HELLO_FAILED = 3002;\nvar WS_CLOSE_SEND_FAILED = 3003;\n\nvar toplevel = global.window || global;\nvar WebSocket = toplevel.WebSocket ? toplevel.WebSocket : require('ws');\n\n/**\n * A {@link TwilioConnection} represents a WebSocket connection\n * to a Twilio Connections Messaging Protocol (TCMP) server.\n * @fires TwilioConnection#close\n * @fires TwilioConnection#error\n * @fires TwilioConnection#message\n * @fires TwilioConnection#open\n */\n\nvar TwilioConnection = function (_StateMachine) {\n _inherits(TwilioConnection, _StateMachine);\n\n /**\n * Construct a {@link TwilioConnection}.\n * @param {string} serverUrl - TCMP server url\n * @param {TwilioConnectionOptions} options - {@link TwilioConnection} options\n */\n function TwilioConnection(serverUrl, options) {\n _classCallCheck(this, TwilioConnection);\n\n var _this = _possibleConstructorReturn(this, (TwilioConnection.__proto__ || Object.getPrototypeOf(TwilioConnection)).call(this, 'connecting', states));\n\n options = Object.assign({\n maxConsecutiveMissedHeartbeats: DEFAULT_MAX_CONSECUTIVE_MISSED_HEARTBEATS,\n requestedHeartbeatTimeout: DEFAULT_MAX_REQUESTED_HEARTBEAT_TIMEOUT,\n welcomeTimeout: DEFAULT_WELCOME_TIMEOUT,\n Log: Log,\n WebSocket: WebSocket\n }, options);\n\n var logLevels = buildLogLevels(options.logLevel);\n var log = new options.Log('default', _this, logLevels);\n\n Object.defineProperties(_this, {\n _consecutiveHeartbeatsMissed: {\n value: 0,\n writable: true\n },\n _heartbeatTimeout: {\n value: null,\n writable: true\n },\n _instanceId: {\n value: ++nInstances\n },\n _log: {\n value: log\n },\n _messageQueue: {\n value: []\n },\n _options: {\n value: options\n },\n _sendHeartbeatTimeout: {\n value: null,\n writable: true\n },\n _welcomeTimeout: {\n value: null,\n writable: true\n },\n _ws: {\n value: null,\n writable: true\n }\n });\n\n _this.on('stateChanged', function (state, error) {\n return {\n closed: function closed() {\n return _this.emit('close', error);\n },\n open: function open() {\n return _this.emit('open');\n }\n }[state]();\n });\n\n _this._connect(serverUrl);\n return _this;\n }\n\n _createClass(TwilioConnection, [{\n key: 'toString',\n value: function toString() {\n return '[TwilioConnection #' + this._instanceId + ': ' + this._ws.url + ']';\n }\n\n /**\n * The number of consecutive \"hearbeat\" messages missed.\n * @property {number}\n */\n\n }, {\n key: '_close',\n\n\n /**\n * Close the {@link TwilioConnection}.\n * @param {{code: number, reason: string}} event\n * @private\n */\n value: function _close(_ref) {\n var code = _ref.code,\n reason = _ref.reason;\n\n if (this.state === 'closed') {\n return;\n }\n if (this._welcomeTimeout) {\n this._welcomeTimeout.clear();\n }\n if (this._heartbeatTimeout) {\n this._heartbeatTimeout.clear();\n }\n if (this._sendHeartbeatTimeout) {\n this._sendHeartbeatTimeout.clear();\n }\n this._messageQueue.splice(0);\n\n var log = this._log;\n if (code === WS_CLOSE_NORMAL) {\n log.debug('Closed');\n } else {\n log.warn('Closed: ' + code + ' - ' + reason);\n }\n\n this.transition('closed', null, code !== WS_CLOSE_NORMAL ? new Error('WebSocket Error ' + code + ': ' + reason) : null);\n\n var readyState = this._ws.readyState;\n var WebSocket = this._options.WebSocket;\n\n if (readyState !== WebSocket.CLOSING && readyState !== WebSocket.CLOSED) {\n this._ws.close(code, reason);\n }\n }\n\n /**\n * Connect to the TCMP server.\n * @param {string} serverUrl\n * @private\n */\n\n }, {\n key: '_connect',\n value: function _connect(serverUrl) {\n var _this2 = this;\n\n this._ws = new this._options.WebSocket(serverUrl);\n var log = this._log;\n var ws = this._ws;\n\n log.debug('Created a new WebSocket:', ws);\n ws.addEventListener('close', function (event) {\n return _this2._close(event);\n });\n\n ws.addEventListener('message', function (message) {\n log.debug('Incoming: ' + message.data);\n try {\n message = JSON.parse(message.data);\n } catch (error) {\n _this2.emit('error', error);\n return;\n }\n switch (message.type) {\n case 'bad':\n _this2._handleBad(message);\n break;\n case 'bye':\n // Do nothing.\n break;\n case 'heartbeat':\n _this2._handleHeartbeat();\n break;\n case 'msg':\n _this2._handleMessage(message);\n break;\n case 'welcome':\n _this2._handleWelcome(message);\n break;\n default:\n _this2._log.debug('Unknown message type: ' + message.type);\n _this2.emit('error', new Error('Unknown message type: ' + message.type));\n break;\n }\n });\n\n ws.addEventListener('open', function () {\n log.debug('WebSocket opened:', ws);\n _this2._sendHello();\n var welcomeTimeout = _this2._options.welcomeTimeout;\n\n _this2._welcomeTimeout = new Timeout(function () {\n return _this2._handleWelcomeTimeout();\n }, welcomeTimeout);\n });\n }\n\n /**\n * Handle an incoming \"bad\" message.\n * @param {{reason: string}} message\n * @private\n */\n\n }, {\n key: '_handleBad',\n value: function _handleBad(_ref2) {\n var reason = _ref2.reason;\n\n var log = this._log;\n if (this.state === 'connecting') {\n log.warn('Closing: ' + WS_CLOSE_HELLO_FAILED + ' - ' + reason);\n this._close({ code: WS_CLOSE_HELLO_FAILED, reason: reason });\n return;\n }\n log.debug('Error: ' + reason);\n this.emit('error', new Error(reason));\n }\n\n /**\n * Handle an incoming \"heartbeat\" message.\n * @private\n */\n\n }, {\n key: '_handleHeartbeat',\n value: function _handleHeartbeat() {\n if (this.state !== 'open') {\n return;\n }\n this._consecutiveHeartbeatsMissed = 0;\n this._heartbeatTimeout.reset();\n }\n\n /**\n * Handle a missed \"heartbeat\" message.\n * @private\n */\n\n }, {\n key: '_handleHeartbeatTimeout',\n value: function _handleHeartbeatTimeout() {\n if (this.state !== 'open') {\n return;\n }\n this._consecutiveHeartbeatsMissed++;\n var log = this._log;\n var maxConsecutiveMissedHeartbeats = this._options.maxConsecutiveMissedHeartbeats;\n\n\n log.debug('Consecutive heartbeats missed: ' + this._consecutiveHeartbeatsMissed);\n if (this._consecutiveHeartbeatsMissed < maxConsecutiveMissedHeartbeats) {\n this._heartbeatTimeout.reset();\n return;\n }\n\n var reason = 'Missed ' + maxConsecutiveMissedHeartbeats + ' \"heartbeat\" messages';\n log.warn('Closing: ' + WS_CLOSE_HEARTBEATS_MISSED + ' - ' + reason);\n this._close({ code: WS_CLOSE_HEARTBEATS_MISSED, reason: reason });\n }\n\n /**\n * Handle an incoming \"msg\" message.\n * @param {{body: object}} message\n * @private\n */\n\n }, {\n key: '_handleMessage',\n value: function _handleMessage(_ref3) {\n var body = _ref3.body;\n\n if (this.state !== 'open') {\n return;\n }\n this.emit('message', body);\n }\n\n /**\n * Handle an incoming \"welcome\" message.\n * @param {{ negotiatedTimeout: number }} message\n * @private\n */\n\n }, {\n key: '_handleWelcome',\n value: function _handleWelcome(_ref4) {\n var _this3 = this;\n\n var negotiatedTimeout = _ref4.negotiatedTimeout;\n\n if (this.state !== 'connecting') {\n return;\n }\n var heartbeatTimeout = negotiatedTimeout + HEARTBEAT_TIMEOUT_OFFSET;\n this._welcomeTimeout.clear();\n this._heartbeatTimeout = new Timeout(function () {\n return _this3._handleHeartbeatTimeout();\n }, heartbeatTimeout);\n this._messageQueue.splice(0).forEach(function (message) {\n return _this3._send(message);\n });\n this._sendHeartbeatTimeout = new Timeout(function () {\n return _this3._sendHeartbeat();\n }, negotiatedTimeout);\n this.transition('open');\n }\n\n /**\n * Handle a missed \"welcome\" message.\n * @private\n */\n\n }, {\n key: '_handleWelcomeTimeout',\n value: function _handleWelcomeTimeout() {\n if (this.state !== 'connecting') {\n return;\n }\n var reason = '\"welcome\" message timeout expired';\n this._log.warn('Closing: ' + WS_CLOSE_WELCOME_TIMEOUT + ' - ' + reason);\n this._close({ code: WS_CLOSE_WELCOME_TIMEOUT, reason: reason });\n }\n\n /**\n * Send a message to the TCMP server.\n * @param {*} message\n * @private\n */\n\n }, {\n key: '_send',\n value: function _send(message) {\n var readyState = this._ws.readyState;\n var WebSocket = this._options.WebSocket;\n\n if (readyState === WebSocket.OPEN) {\n var data = JSON.stringify(message);\n this._log.debug('Outgoing: ' + data);\n try {\n this._ws.send(data);\n } catch (error) {\n var reason = 'Failed to send message';\n this._log.warn('Closing: ' + WS_CLOSE_SEND_FAILED + ' - ' + reason);\n this._close({ code: WS_CLOSE_SEND_FAILED, reason: reason });\n }\n }\n }\n\n /**\n * Send a \"heartbeat\" message.\n * @private\n */\n\n }, {\n key: '_sendHeartbeat',\n value: function _sendHeartbeat() {\n if (this.state === 'closed') {\n return;\n }\n this._send({ type: 'heartbeat' });\n this._sendHeartbeatTimeout.reset();\n }\n\n /**\n * Send a \"hello\" message.\n * @private\n */\n\n }, {\n key: '_sendHello',\n value: function _sendHello() {\n var requestedHeartbeatTimeout = this._options.requestedHeartbeatTimeout;\n\n this._send({\n id: makeUUID(),\n timeout: requestedHeartbeatTimeout,\n type: 'hello'\n });\n }\n\n /**\n * Send or enqueue a message.\n * @param {*} message\n * @private\n */\n\n }, {\n key: '_sendOrEnqueue',\n value: function _sendOrEnqueue(message) {\n var _this4 = this;\n\n if (this.state === 'closed') {\n return;\n }\n var sendOrEnqueue = this.state === 'open' ? function (message) {\n return _this4._send(message);\n } : function (message) {\n return _this4._messageQueue.push(message);\n };\n\n sendOrEnqueue(message);\n }\n\n /**\n * Close the {@link TwilioConnection}.\n * @returns {void}\n */\n\n }, {\n key: 'close',\n value: function close() {\n if (this.state === 'closed') {\n return;\n }\n this._sendOrEnqueue({ type: 'bye' });\n this._ws.close(WS_CLOSE_NORMAL);\n }\n\n /**\n * Send a \"msg\" message.\n * @param {*} body\n * @returns {void}\n */\n\n }, {\n key: 'sendMessage',\n value: function sendMessage(body) {\n this._sendOrEnqueue({ body: body, type: 'msg' });\n }\n }, {\n key: 'consecutiveHeartbeatsMissed',\n get: function get() {\n return this._consecutiveHeartbeatsMissed;\n }\n }]);\n\n return TwilioConnection;\n}(StateMachine);\n\n/**\n * A {@link TwilioConnection} was closed.\n * @event TwilioConnection#close\n * @param {?Error} error - If closed by the client, then this is null\n */\n\n/**\n * A {@link TwilioConnection} received an error from the TCMP server.\n * @event TwilioConnection#error\n * @param {Error} error - The TCMP server error\n */\n\n/**\n * A {@link TwilioConnection} received a message from the TCMP server.\n * @event TwilioConnection#message\n * @param {*} body - Message body\n */\n\n/**\n * A {@link TwilioConnection} completed a hello/welcome handshake with the TCMP server.\n * @event TwilioConnection#open\n */\n\n/**\n * {@link TwilioConnection} options\n * @typedef {object} TwilioConnectionOptions\n * @property {LogLevel} [logLevel=warn] - Log level of the {@link TwilioConnection}\n * @property {number} [maxConsecutiveMissedHeartbeats=5] - Max. number of consecutive \"heartbeat\" messages that can be missed\n * @property {number} [requestedHeartbeatTimeout=5000] - \"heartbeat\" timeout (ms) requested by the {@link TwilioConnection}\n * @property {number} [welcomeTimeout=5000] - Time (ms) to wait for the \"welcome\" message after sending the \"hello\" message\n */\n\nmodule.exports = TwilioConnection;","/* globals RTCDataChannel, RTCPeerConnection, RTCSessionDescription */\n'use strict';\n\nvar ChromeRTCSessionDescription = require('../rtcsessiondescription/chrome');\nvar EventTarget = require('../util/eventtarget');\nvar inherits = require('util').inherits;\nvar Latch = require('../util/latch');\nvar MediaStream = require('../mediastream');\nvar RTCRtpSenderShim = require('../rtcrtpsender');\nvar sdpUtils = require('../util/sdp');\nvar util = require('../util');\n\n// NOTE(mroberts): This class wraps Chrome's RTCPeerConnection implementation.\n// It provides some functionality not currently present in Chrome, namely the\n// abilities to\n//\n// 1. Rollback, per the workaround suggested here:\n// https://bugs.chromium.org/p/webrtc/issues/detail?id=5738#c3\n//\n// 2. Listen for track events, per the adapter.js workaround.\n//\n// 3. Set iceTransportPolicy.\n//\nfunction ChromeRTCPeerConnection(configuration, constraints) {\n if (!(this instanceof ChromeRTCPeerConnection)) {\n return new ChromeRTCPeerConnection(configuration, constraints);\n }\n\n EventTarget.call(this);\n\n configuration = configuration || {};\n var newConfiguration = Object.assign(configuration.iceTransportPolicy\n ? { iceTransports: configuration.iceTransportPolicy }\n : {}, configuration);\n\n util.interceptEvent(this, 'datachannel');\n util.interceptEvent(this, 'signalingstatechange');\n\n var sdpFormat = sdpUtils.getSdpFormat(newConfiguration.sdpSemantics);\n var peerConnection = new RTCPeerConnection(newConfiguration, constraints);\n\n Object.defineProperties(this, {\n _appliedTracksToSSRCs: {\n value: new Map(),\n writable: true\n },\n _localStream: {\n value: new MediaStream()\n },\n _peerConnection: {\n value: peerConnection\n },\n _pendingLocalOffer: {\n value: null,\n writable: true\n },\n _pendingRemoteOffer: {\n value: null,\n writable: true\n },\n _rolledBackTracksToSSRCs: {\n value: new Map(),\n writable: true\n },\n _sdpFormat: {\n value: sdpFormat\n },\n _senders: {\n value: new Map()\n },\n _signalingStateLatch: {\n value: new Latch()\n },\n _tracksToSSRCs: {\n value: new Map(),\n writable: true\n },\n localDescription: {\n enumerable: true,\n get: function() {\n return this._pendingLocalOffer ? this._pendingLocalOffer : peerConnection.localDescription;\n }\n },\n remoteDescription: {\n enumerable: true,\n get: function() {\n return this._pendingRemoteOffer ? this._pendingRemoteOffer : peerConnection.remoteDescription;\n }\n },\n signalingState: {\n enumerable: true,\n get: function() {\n if (this._pendingLocalOffer) {\n return 'have-local-offer';\n } else if (this._pendingRemoteOffer) {\n return 'have-remote-offer';\n }\n return peerConnection.signalingState;\n }\n }\n });\n\n var self = this;\n\n peerConnection.addEventListener('datachannel', function ondatachannel(event) {\n shimDataChannel(event.channel);\n self.dispatchEvent(event);\n });\n\n peerConnection.addEventListener('signalingstatechange', function onsignalingstatechange() {\n if (peerConnection.signalingState === 'stable') {\n self._appliedTracksToSSRCs = new Map(self._tracksToSSRCs);\n }\n if (!self._pendingLocalOffer && !self._pendingRemoteOffer) {\n self.dispatchEvent.apply(self, arguments);\n }\n });\n\n peerConnection.ontrack = function ontrack() {\n // NOTE(mroberts): adapter.js's \"track\" event shim only kicks off if we set\n // the ontrack property of the RTCPeerConnection.\n };\n\n if (typeof RTCPeerConnection.prototype.addTrack !== 'function') {\n peerConnection.addStream(this._localStream);\n }\n util.proxyProperties(RTCPeerConnection.prototype, this, peerConnection);\n}\n\ninherits(ChromeRTCPeerConnection, EventTarget);\n\nif (typeof RTCPeerConnection.prototype.addTrack !== 'function') {\n // NOTE(mmalavalli): This shim supports our limited case of adding\n // all MediaStreamTracks to one MediaStream. It has been implemented this\n // keeping in mind that this is to be maintained only until \"addTrack\" is\n // supported natively in Chrome.\n ChromeRTCPeerConnection.prototype.addTrack = function addTrack() {\n var args = [].slice.call(arguments);\n var track = args[0];\n if (this._peerConnection.signalingState === 'closed') {\n throw new Error('Cannot add MediaStreamTrack [' + track.id + ', '\n + track.kind + ']: RTCPeerConnection is closed');\n }\n\n var sender = this._senders.get(track);\n if (sender && sender.track) {\n throw new Error('Cannot add MediaStreamTrack [' + track.id + ', '\n + track.kind + ']: RTCPeerConnection already has it');\n }\n this._peerConnection.removeStream(this._localStream);\n this._localStream.addTrack(track);\n this._peerConnection.addStream(this._localStream);\n\n sender = new RTCRtpSenderShim(track);\n this._senders.set(track, sender);\n return sender;\n };\n\n // NOTE(mmalavalli): This shim supports our limited case of removing\n // MediaStreamTracks from one MediaStream. It has been implemented this\n // keeping in mind that this is to be maintained only until \"removeTrack\" is\n // supported natively in Chrome.\n ChromeRTCPeerConnection.prototype.removeTrack = function removeTrack(sender) {\n if (this._peerConnection.signalingState === 'closed') {\n throw new Error('Cannot remove MediaStreamTrack: RTCPeerConnection is closed');\n }\n\n var track = sender.track;\n if (!track) {\n return;\n }\n sender = this._senders.get(track);\n if (sender && sender.track) {\n sender.track = null;\n this._peerConnection.removeStream(this._localStream);\n this._localStream.removeTrack(track);\n this._peerConnection.addStream(this._localStream);\n }\n };\n\n ChromeRTCPeerConnection.prototype.getSenders = function getSenders() {\n return Array.from(this._senders.values());\n };\n} else {\n ChromeRTCPeerConnection.prototype.removeTrack = function removeTrack(sender) {\n if (this._peerConnection.signalingState === 'closed') {\n throw new Error('Cannot remove MediaStreamTrack: RTCPeerConnection is closed');\n }\n try {\n this._peerConnection.removeTrack(sender);\n } catch (e) {\n // NOTE(mhuynh): Do nothing. In Chrome, will throw if a 'sender was not\n // created by this peer connection'. This behavior does not seem to be\n // spec compliant, so a temporary shim is introduced. A bug has been filed,\n // and is tracked here:\n // https://bugs.chromium.org/p/chromium/issues/detail?id=860853\n }\n };\n}\n\nChromeRTCPeerConnection.prototype.addIceCandidate = function addIceCandidate(candidate) {\n var args = [].slice.call(arguments);\n var promise;\n var self = this;\n\n if (this.signalingState === 'have-remote-offer') {\n // NOTE(mroberts): Because the ChromeRTCPeerConnection simulates the\n // \"have-remote-offer\" signalingStates, we only want to invoke the true\n // addIceCandidates method when the remote description has been applied.\n promise = this._signalingStateLatch.when('low').then(function signalingStatesResolved() {\n return self._peerConnection.addIceCandidate(candidate);\n });\n } else {\n promise = this._peerConnection.addIceCandidate(candidate);\n }\n\n return args.length > 1\n ? util.legacyPromise(promise, args[1], args[2])\n : promise;\n};\n\n// NOTE(mroberts): The WebRTC spec does not specify that close should throw an\n// Error; however, in Chrome it does. We workaround this by checking the\n// signalingState manually.\nChromeRTCPeerConnection.prototype.close = function close() {\n if (this.signalingState !== 'closed') {\n this._pendingLocalOffer = null;\n this._pendingRemoteOffer = null;\n this._peerConnection.close();\n }\n};\n\n// NOTE(mroberts): Because we workaround Chrome's lack of rollback support by\n// \"faking\" setRemoteDescription, we cannot create an answer until we actually\n// apply the remote description. This means, once you call createAnswer, you\n// can no longer rollback. This is acceptable for our use case because we will\n// apply the newly-created answer almost immediately; however, this may be\n// unacceptable for other use cases.\nChromeRTCPeerConnection.prototype.createAnswer = function createAnswer() {\n var args = [].slice.call(arguments);\n var promise;\n var self = this;\n\n if (this._pendingRemoteOffer) {\n promise = this._peerConnection.setRemoteDescription(this._pendingRemoteOffer).then(function setRemoteDescriptionSucceeded() {\n // NOTE(mroberts): The signalingStates between the ChromeRTCPeerConnection\n // and the underlying RTCPeerConnection implementation have converged. We\n // can unblock any pending calls to addIceCandidate now.\n self._signalingStateLatch.lower();\n return self._peerConnection.createAnswer();\n }).then(function createAnswerSucceeded(answer) {\n self._pendingRemoteOffer = null;\n\n // NOTE(mmalavalli): If createAnswer() is called immediately after rolling back, then we no\n // longer need to retain the rolled back tracks to SSRCs Map.\n self._rolledBackTracksToSSRCs.clear();\n\n return new ChromeRTCSessionDescription({\n type: 'answer',\n sdp: updateTrackIdsToSSRCs(self._sdpFormat, self._tracksToSSRCs, answer.sdp)\n });\n }, function setRemoteDescriptionOrCreateAnswerFailed(error) {\n self._pendingRemoteOffer = null;\n throw error;\n });\n } else {\n promise = this._peerConnection.createAnswer().then(function(answer) {\n // NOTE(mmalavalli): If createAnswer() is called immediately after rolling back, then we no\n // longer need to retain the rolled back tracks to SSRCs Map.\n self._rolledBackTracksToSSRCs.clear();\n\n return new ChromeRTCSessionDescription({\n type: 'answer',\n sdp: updateTrackIdsToSSRCs(self._sdpFormat, self._tracksToSSRCs, answer.sdp)\n });\n });\n }\n\n return args.length > 1\n ? util.legacyPromise(promise, args[0], args[1])\n : promise;\n};\n\nChromeRTCPeerConnection.prototype.createOffer = function createOffer() {\n var args = [].slice.call(arguments);\n var options = (args.length > 1 ? args[2] : args[0]) || {};\n var self = this;\n\n var promise = this._peerConnection.createOffer(options).then(function(offer) {\n // NOTE(mmalavalli): If createOffer() is called immediately after rolling back, then we no\n // longer need to retain the rolled back tracks to SSRCs Map.\n self._rolledBackTracksToSSRCs.clear();\n\n return new ChromeRTCSessionDescription({\n type: offer.type,\n sdp: updateTrackIdsToSSRCs(self._sdpFormat, self._tracksToSSRCs, offer.sdp)\n });\n });\n\n return args.length > 1\n ? util.legacyPromise(promise, args[0], args[1])\n : promise;\n};\n\nChromeRTCPeerConnection.prototype.createDataChannel = function createDataChannel(label, dataChannelDict) {\n dataChannelDict = shimDataChannelInit(dataChannelDict);\n var dataChannel = this._peerConnection.createDataChannel(label, dataChannelDict);\n shimDataChannel(dataChannel);\n return dataChannel;\n};\n\nChromeRTCPeerConnection.prototype.setLocalDescription = function setLocalDescription() {\n var args = [].slice.call(arguments);\n var description = args[0];\n\n // NOTE(mmalavalli): If setLocalDescription() is called immediately after rolling back,\n // then we need to restore the rolled back tracks to SSRCs Map.\n if (this._rolledBackTracksToSSRCs.size > 0) {\n this._tracksToSSRCs = new Map(this._rolledBackTracksToSSRCs);\n this._rolledBackTracksToSSRCs.clear();\n }\n\n var promise = setDescription(this, true, description);\n return args.length > 1\n ? util.legacyPromise(promise, args[1], args[2])\n : promise;\n};\n\nChromeRTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() {\n var args = [].slice.call(arguments);\n var description = args[0];\n\n // NOTE(mmalavalli): If setRemoteDescription() is called immediately after rolling back,\n // then we no longer need to retain the rolled back tracks to SSRCs Map.\n this._rolledBackTracksToSSRCs.clear();\n\n var promise = setDescription(this, false, description);\n return args.length > 1\n ? util.legacyPromise(promise, args[1], args[2])\n : promise;\n};\n\nutil.delegateMethods(\n RTCPeerConnection.prototype,\n ChromeRTCPeerConnection.prototype,\n '_peerConnection');\n\n// NOTE(mroberts): We workaround Chrome's lack of rollback support, per the\n// workaround suggested here: https://bugs.chromium.org/p/webrtc/issues/detail?id=5738#c3\n// Namely, we \"fake\" setting the local or remote description and instead buffer\n// it. If we receive or create an answer, then we will actually apply the\n// description. Until we receive or create an answer, we will be able to\n// \"rollback\" by simply discarding the buffer description.\nfunction setDescription(peerConnection, local, description) {\n function setPendingLocalOffer(offer) {\n if (local) {\n peerConnection._pendingLocalOffer = offer;\n } else {\n peerConnection._pendingRemoteOffer = offer;\n }\n }\n\n function clearPendingLocalOffer() {\n if (local) {\n peerConnection._pendingLocalOffer = null;\n } else {\n peerConnection._pendingRemoteOffer = null;\n }\n }\n\n var pendingLocalOffer = local ? peerConnection._pendingLocalOffer : peerConnection._pendingRemoteOffer;\n var pendingRemoteOffer = local ? peerConnection._pendingRemoteOffer : peerConnection._pendingLocalOffer;\n var intermediateState = local ? 'have-local-offer' : 'have-remote-offer';\n var setLocalDescription = local ? 'setLocalDescription' : 'setRemoteDescription';\n var promise;\n\n if (!local && pendingRemoteOffer && description.type === 'answer') {\n promise = setRemoteAnswer(peerConnection, description);\n } else if (description.type === 'offer') {\n if (peerConnection.signalingState !== intermediateState && peerConnection.signalingState !== 'stable') {\n // NOTE(mroberts): Error message copied from Firefox.\n return Promise.reject(new Error('Cannot set ' + (local ? 'local' : 'remote') +\n ' offer in state ' + peerConnection.signalingState));\n }\n\n // We need to save this local offer in case of a rollback. We also need to\n // check to see if the signalingState between the ChromeRTCPeerConnection\n // and the underlying RTCPeerConnection implementation are about to diverge.\n // If so, we need to ensure subsequent calls to addIceCandidate will block.\n if (!pendingLocalOffer && peerConnection._signalingStateLatch.state === 'low') {\n peerConnection._signalingStateLatch.raise();\n }\n var previousSignalingState = peerConnection.signalingState;\n setPendingLocalOffer(unwrap(description));\n promise = Promise.resolve();\n\n // Only dispatch a signalingstatechange event if we transitioned.\n if (peerConnection.signalingState !== previousSignalingState) {\n promise.then(function dispatchSignalingStateChangeEvent() {\n peerConnection.dispatchEvent(new Event('signalingstatechange'));\n });\n }\n\n } else if (description.type === 'rollback') {\n if (peerConnection.signalingState !== intermediateState) {\n // NOTE(mroberts): Error message copied from Firefox.\n promise = Promise.reject(new Error('Cannot rollback ' +\n (local ? 'local' : 'remote') + ' description in ' + peerConnection.signalingState));\n } else {\n // Reset the pending offer.\n clearPendingLocalOffer();\n\n // NOTE(mmalavalli): We store the rolled back tracks to SSRCs Map here in case\n // setLocalDescription() is called immediately after a rollback (without calling\n // createOffer() or createAnswer()), in which case this roll back is not due to a\n // glare scenario and this Map should be restored.\n peerConnection._rolledBackTracksToSSRCs = new Map(peerConnection._tracksToSSRCs);\n peerConnection._tracksToSSRCs = new Map(peerConnection._appliedTracksToSSRCs);\n\n promise = Promise.resolve();\n promise.then(function dispatchSignalingStateChangeEvent() {\n peerConnection.dispatchEvent(new Event('signalingstatechange'));\n });\n }\n }\n\n return promise || peerConnection._peerConnection[setLocalDescription](unwrap(description));\n}\n\nfunction setRemoteAnswer(peerConnection, answer) {\n // Apply the pending local offer.\n var pendingLocalOffer = peerConnection._pendingLocalOffer;\n return peerConnection._peerConnection.setLocalDescription(pendingLocalOffer).then(function setLocalOfferSucceeded() {\n peerConnection._pendingLocalOffer = null;\n return peerConnection.setRemoteDescription(answer);\n }).then(function setRemoteAnswerSucceeded() {\n // NOTE(mroberts): The signalingStates between the ChromeRTCPeerConnection\n // and the underlying RTCPeerConnection implementation have converged. We\n // can unblock any pending calls to addIceCandidate now.\n peerConnection._signalingStateLatch.lower();\n });\n}\n\nfunction unwrap(description) {\n if (description instanceof ChromeRTCSessionDescription) {\n if (description._description) {\n return description._description;\n }\n }\n return new RTCSessionDescription(description);\n}\n\n/**\n * Check whether or not we need to apply our maxPacketLifeTime shim. We are\n * pretty conservative: we'll only apply it if the legacy maxRetransmitTime\n * property is available _and_ the standard maxPacketLifeTime property is _not_\n * available (the thinking being that Chrome will land the standards-compliant\n * property).\n * @returns {boolean}\n */\nfunction needsMaxPacketLifeTimeShim() {\n return 'maxRetransmitTime' in RTCDataChannel.prototype\n && !('maxPacketLifeTime' in RTCDataChannel.prototype);\n}\n\n/**\n * Shim an RTCDataChannelInit dictionary (if necessary). This function returns\n * a copy of the original RTCDataChannelInit.\n * @param {RTCDataChannelInit} dataChannelDict\n * @returns {RTCDataChannelInit}\n */\nfunction shimDataChannelInit(dataChannelDict) {\n dataChannelDict = Object.assign({}, dataChannelDict);\n if (needsMaxPacketLifeTimeShim() && 'maxPacketLifeTime' in dataChannelDict) {\n dataChannelDict.maxRetransmitTime = dataChannelDict.maxPacketLifeTime;\n }\n return dataChannelDict;\n}\n\n/**\n * Shim an RTCDataChannel (if necessary). This function mutates the\n * RTCDataChannel.\n * @param {RTCDataChannel} dataChannel\n * @returns {RTCDataChannel}\n */\nfunction shimDataChannel(dataChannel) {\n Object.defineProperty(dataChannel, 'maxRetransmits', {\n value: dataChannel.maxRetransmits === 65535\n ? null\n : dataChannel.maxRetransmits\n });\n if (needsMaxPacketLifeTimeShim()) {\n // NOTE(mroberts): We can rename `maxRetransmitTime` to `maxPacketLifeTime`.\n //\n // https://bugs.chromium.org/p/chromium/issues/detail?id=696681\n //\n Object.defineProperty(dataChannel, 'maxPacketLifeTime', {\n value: dataChannel.maxRetransmitTime === 65535\n ? null\n : dataChannel.maxRetransmitTime\n });\n }\n return dataChannel;\n}\n\n/**\n * Update the mappings from MediaStreamTrack IDs to SSRCs as indicated by both\n * the Map from MediaStreamTrack IDs to SSRCs and the SDP itself. This method\n * ensures that SSRCs never change once announced.\n * @param {'planb'|'unified'} sdpFormat\n * @param {Map>} tracksToSSRCs\n * @param {string} sdp - an SDP whose format is determined by `sdpSemantics`\n * @returns {string} updatedSdp - updated SDP\n */\nfunction updateTrackIdsToSSRCs(sdpFormat, tracksToSSRCs, sdp) {\n return sdpFormat === 'unified'\n ? sdpUtils.updateUnifiedPlanTrackIdsToSSRCs(tracksToSSRCs, sdp)\n : sdpUtils.updatePlanBTrackIdsToSSRCs(tracksToSSRCs, sdp);\n}\n\nmodule.exports = ChromeRTCPeerConnection;\n","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar EventEmitter = require('events').EventEmitter;\n\n/**\n * A {@link QueueingEventEmitter} can queue events until a listener has been\n * added.\n * @extends EventEmitter\n */\n\nvar QueueingEventEmitter = function (_EventEmitter) {\n _inherits(QueueingEventEmitter, _EventEmitter);\n\n /**\n * Construct a {@link QueueingEventEmitter}\n */\n function QueueingEventEmitter() {\n _classCallCheck(this, QueueingEventEmitter);\n\n var _this = _possibleConstructorReturn(this, (QueueingEventEmitter.__proto__ || Object.getPrototypeOf(QueueingEventEmitter)).call(this));\n\n Object.defineProperties(_this, {\n _queuedEvents: {\n value: new Map()\n }\n });\n return _this;\n }\n\n /**\n * Emit any queued events.\n * @returns {boolean} true if every event had listeners, false otherwise\n */ /**\n * Emit any queued events matching the event name.\n * @param {string} event\n * @returns {boolean} true if every event had listeners, false otherwise\n */\n\n\n _createClass(QueueingEventEmitter, [{\n key: 'dequeue',\n value: function dequeue(event) {\n var _this2 = this;\n\n var result = true;\n if (!event) {\n this._queuedEvents.forEach(function (_, queuedEvent) {\n result = this.dequeue(queuedEvent) && result;\n }, this);\n return result;\n }\n var queue = this._queuedEvents.get(event) || [];\n this._queuedEvents.delete(event);\n return queue.reduce(function (result, args) {\n return _this2.emit.apply(_this2, _toConsumableArray([event].concat(args))) && result;\n }, result);\n }\n\n /**\n * If the event has listeners, emit the event; otherwise, queue the event.\n * @param {string} event\n * @param {...*} args\n * @returns {boolean} true if the event had listeners, false if the event was queued\n */\n\n }, {\n key: 'queue',\n value: function queue() {\n var args = [].slice.call(arguments);\n if (this.emit.apply(this, _toConsumableArray(args))) {\n return true;\n }\n var event = args[0];\n if (!this._queuedEvents.has(event)) {\n this._queuedEvents.set(event, []);\n }\n this._queuedEvents.get(event).push(args.slice(1));\n return false;\n }\n }]);\n\n return QueueingEventEmitter;\n}(EventEmitter);\n\nmodule.exports = QueueingEventEmitter;","'use strict';\n\nvar request = require('./request');\nvar createTwilioError = require('./util/twilio-video-errors').createTwilioError;\nvar ConfigurationAcquireFailedError = require('./util/twilio-video-errors').ConfigurationAcquireFailedError;\n\nvar CONFIG_URL = 'https://ecs.us1.twilio.com/v1/Configuration';\n\n/**\n * Request a configuration setting for the specified JWT.\n * @param {String} token - A JWT String representing a valid AccessToken.\n * @param {?ECS.getConfigurationOptions} [options]\n * @returns {Promise} configuration - An unformatted map of\n * configuration settings specific to the specified service.\n * @throws {TwilioError}\n*/ /**\n * @typedef {Object} ECS.getConfigurationOptions\n * @property {?Object} [body] - A valid JSON payload to send to the\n * ECS endpoint.\n * @property {?String} [configUrl='https://ecs.us1.twilio.com/v1/Configuration'] - A\n * custom URL to POST ECS configuration requests to.\n */\nfunction getConfiguration(token, options) {\n if (!token) {\n throw new Error('token is a required argument.');\n }\n\n options = Object.assign({\n configUrl: CONFIG_URL\n }, options);\n\n var postData = {\n url: options.configUrl,\n headers: {\n 'X-Twilio-Token': token,\n 'Content-Type': 'application/x-www-form-urlencoded'\n }\n };\n\n if (options.body) {\n postData.body = toQueryString(options.body);\n }\n\n return request.post(postData).then(function (responseText) {\n return parseJsonTextFromECS(responseText);\n }, function (errorText) {\n var error = parseJsonTextFromECS(errorText);\n throw createTwilioError(error.code, error.message);\n });\n}\n\nfunction parseJsonTextFromECS(jsonText) {\n var json = null;\n try {\n json = JSON.parse(jsonText);\n } catch (error) {\n throw new ConfigurationAcquireFailedError();\n }\n return json;\n}\n\nfunction toQueryString(params) {\n return Object.keys(params || {}).map(function (key) {\n return encodeURIComponent(key) + '=' + encodeURIComponent(params[key]);\n }).join('&');\n}\n\nmodule.exports.getConfiguration = getConfiguration;","'use strict';\n\nif (typeof RTCPeerConnection !== 'undefined') {\n var guessBrowser = require('../util').guessBrowser;\n switch (guessBrowser()) {\n case 'chrome':\n module.exports = require('./chrome');\n break;\n case 'firefox':\n module.exports = require('./firefox');\n break;\n case 'safari':\n module.exports = require('./safari');\n break;\n default:\n module.exports = RTCPeerConnection;\n }\n}\n","/* eslint consistent-return:0 */\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ParticipantSignaling = require('./participant');\nvar RoomSignaling = require('./room');\nvar StateMachine = require('../statemachine');\n\n/*\nSignaling States\n----------------\n\n +---------+\n | |\n | opening |\n +--->| |\n | +---------+\n +--------+ | | +------+\n | |<--+ +-->| |\n | closed |<----------| open |\n | |<--+ +-->| |\n +--------+ | | +------+\n +---------+ |\n | |<--+\n | closing |\n | |\n +---------+\n\n*/\n\nvar states = {\n closed: ['opening'],\n opening: ['closed', 'open'],\n open: ['closed', 'closing'],\n closing: ['closed', 'open']\n};\n\n/**\n * @extends StateMachine\n * @property {string} state - one of \"closed\", \"opening\", \"open\", or \"closing\"\n */\n\nvar Signaling = function (_StateMachine) {\n _inherits(Signaling, _StateMachine);\n\n /**\n * Construct {@link Signaling}.\n */\n function Signaling() {\n _classCallCheck(this, Signaling);\n\n return _possibleConstructorReturn(this, (Signaling.__proto__ || Object.getPrototypeOf(Signaling)).call(this, 'closed', states));\n }\n\n /**\n * @private\n */\n // NOTE(mroberts): This is a dummy implementation suitable for testing.\n\n\n _createClass(Signaling, [{\n key: '_close',\n value: function _close(key) {\n this.transition('closing', key);\n this.transition('closed', key);\n return Promise.resolve(this);\n }\n\n /**\n * @private\n */\n // NOTE(mroberts): This is a dummy implementation suitable for testing.\n\n }, {\n key: '_connect',\n value: function _connect(localParticipant, token, iceServerSource, encodingParameters, preferredCodecs, options) {\n localParticipant.connect('PA00000000000000000000000000000000', 'test');\n var sid = 'RM00000000000000000000000000000000';\n var promise = Promise.resolve(new RoomSignaling(localParticipant, sid, options));\n promise.cancel = function cancel() {};\n return promise;\n }\n\n /**\n * @private\n */\n // NOTE(mroberts): This is a dummy implementation suitable for testing.\n\n }, {\n key: '_open',\n value: function _open(key) {\n this.transition('opening', key);\n this.transition('open', key);\n return Promise.resolve(this);\n }\n\n /**\n * Close the {@link Signaling}.\n * @returns {Promise}\n */\n\n }, {\n key: 'close',\n value: function close() {\n var _this2 = this;\n\n return this.bracket('close', function (key) {\n switch (_this2.state) {\n case 'closed':\n return _this2;\n case 'open':\n return _this2._close(key);\n default:\n throw new Error('Unexpected Signaling state \"' + _this2.state + '\"');\n }\n });\n }\n\n /**\n * Connect to a {@link RoomSignaling}.\n * @param {ParticipantSignaling} localParticipant\n * @param {string} token\n * @param {IceServerSource} iceServerSource\n * @param {EncodingParametersImpl} encodingParameters\n * @param {PreferredCodecs} preferredCodecs\n * @param {object} options\n * @returns {Promise>}\n */\n\n }, {\n key: 'connect',\n value: function connect(localParticipant, token, iceServerSource, encodingParameters, preferredCodecs, options) {\n var self = this;\n return this.bracket('connect', function transition(key) {\n switch (self.state) {\n case 'closed':\n return self._open(key).then(transition.bind(null, key));\n case 'open':\n // NOTE(mroberts): We don't need to hold the lock in _connect. Instead,\n // we just need to ensure the Signaling remains open.\n self.releaseLockCompletely(key);\n return self._connect(localParticipant, token, iceServerSource, encodingParameters, preferredCodecs, options);\n default:\n throw new Error('Unexpected Signaling state \"' + self.state + '\"');\n }\n });\n }\n\n /**\n * Create a local {@link ParticipantSignaling}.\n * @returns {ParticipantSignaling}\n */\n\n }, {\n key: 'createLocalParticipantSignaling',\n value: function createLocalParticipantSignaling() {\n return new ParticipantSignaling();\n }\n\n /**\n * Open the {@link Signaling}.\n * @returns {Promise}\n */\n\n }, {\n key: 'open',\n value: function open() {\n var _this3 = this;\n\n return this.bracket('open', function (key) {\n switch (_this3.state) {\n case 'closed':\n return _this3._open(key);\n case 'open':\n return _this3;\n default:\n throw new Error('Unexpected Signaling state \"' + _this3.state + '\"');\n }\n });\n }\n }]);\n\n return Signaling;\n}(StateMachine);\n\nmodule.exports = Signaling;","/* eslint no-undefined:0 */\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar average = require('./average');\nvar SenderOrReceiverReport = require('./senderorreceiverreport');\nvar sum = require('./sum');\n\n/**\n * @interface SenderSummary\n * @property {number} bitrate\n * @property {number} [rtt] - s (undefined in Chrome)\n */\n\n/**\n * @extends SenderOrReceiverReport\n * @property {number} [rtt] - s (undefined in Chrome)\n */\n\nvar SenderReport = function (_SenderOrReceiverRepo) {\n _inherits(SenderReport, _SenderOrReceiverRepo);\n\n /**\n * Construct a {@link SenderReport}.\n * @param {StatsId} id\n * @param {TrackId} trackId\n * @param {number} bitrate - bps\n * @param {number} [rtt] - s\n */\n function SenderReport(id, trackId, bitrate, rtt) {\n _classCallCheck(this, SenderReport);\n\n var _this = _possibleConstructorReturn(this, (SenderReport.__proto__ || Object.getPrototypeOf(SenderReport)).call(this, id, trackId, bitrate));\n\n Object.defineProperties(_this, {\n rtt: {\n enumerable: true,\n value: rtt\n }\n });\n return _this;\n }\n\n /**\n * Create a {@link SenderReport}.\n * @param {string} trackId\n * @param {RTCStats} olderStats\n * @param {RTCStats} newerStats\n * @param {RTCRemoteInboundRtpStreamStats} [newerRemoteStats]\n * @returns {SenderReport}\n */\n\n\n _createClass(SenderReport, null, [{\n key: 'of',\n value: function of(trackId, olderStats, newerStats, newerRemoteStats) {\n if (olderStats.id !== newerStats.id) {\n throw new Error('RTCStats IDs must match');\n }\n var secondsElapsed = (newerStats.timestamp - olderStats.timestamp) / 1000;\n var deltaBytesSent = newerStats.bytesSent - olderStats.bytesSent;\n var bitrate = secondsElapsed > 0 ? deltaBytesSent / secondsElapsed * 8 : 0;\n var rtt = newerRemoteStats && typeof newerRemoteStats.roundTripTime === 'number' ? newerRemoteStats.roundTripTime / 1000 : undefined;\n return new SenderReport(olderStats.id, trackId, bitrate, rtt);\n }\n\n /**\n * Summarize {@link SenderReport}s by summing and averaging their values.\n * @param {Array} reports\n * @returns {SenderSummary}\n */\n\n }, {\n key: 'summarize',\n value: function summarize(reports) {\n var bitrate = sum(reports.map(function (report) {\n return report.bitrate;\n }));\n var rtt = average(reports.map(function (report) {\n return report.rtt;\n }));\n return {\n bitrate: bitrate,\n rtt: rtt\n };\n }\n }]);\n\n return SenderReport;\n}(SenderOrReceiverReport);\n\nmodule.exports = SenderReport;","/*\n * Copyright (c) 2012 Mathieu Turcotte\n * Licensed under the MIT license.\n */\n\nvar util = require('util');\n\nvar errors = module.exports = require('./errors');\n\nfunction failCheck(ExceptionConstructor, callee, messageFormat, formatArgs) {\n messageFormat = messageFormat || '';\n var message = util.format.apply(this, [messageFormat].concat(formatArgs));\n var error = new ExceptionConstructor(message);\n Error.captureStackTrace(error, callee);\n throw error;\n}\n\nfunction failArgumentCheck(callee, message, formatArgs) {\n failCheck(errors.IllegalArgumentError, callee, message, formatArgs);\n}\n\nfunction failStateCheck(callee, message, formatArgs) {\n failCheck(errors.IllegalStateError, callee, message, formatArgs);\n}\n\nmodule.exports.checkArgument = function(value, message) {\n if (!value) {\n failArgumentCheck(arguments.callee, message,\n Array.prototype.slice.call(arguments, 2));\n }\n};\n\nmodule.exports.checkState = function(value, message) {\n if (!value) {\n failStateCheck(arguments.callee, message,\n Array.prototype.slice.call(arguments, 2));\n }\n};\n\nmodule.exports.checkIsDef = function(value, message) {\n if (value !== undefined) {\n return value;\n }\n\n failArgumentCheck(arguments.callee, message ||\n 'Expected value to be defined but was undefined.',\n Array.prototype.slice.call(arguments, 2));\n};\n\nmodule.exports.checkIsDefAndNotNull = function(value, message) {\n // Note that undefined == null.\n if (value != null) {\n return value;\n }\n\n failArgumentCheck(arguments.callee, message ||\n 'Expected value to be defined and not null but got \"' +\n typeOf(value) + '\".', Array.prototype.slice.call(arguments, 2));\n};\n\n// Fixed version of the typeOf operator which returns 'null' for null values\n// and 'array' for arrays.\nfunction typeOf(value) {\n var s = typeof value;\n if (s == 'object') {\n if (!value) {\n return 'null';\n } else if (value instanceof Array) {\n return 'array';\n }\n }\n return s;\n}\n\nfunction typeCheck(expect) {\n return function(value, message) {\n var type = typeOf(value);\n\n if (type == expect) {\n return value;\n }\n\n failArgumentCheck(arguments.callee, message ||\n 'Expected \"' + expect + '\" but got \"' + type + '\".',\n Array.prototype.slice.call(arguments, 2));\n };\n}\n\nmodule.exports.checkIsString = typeCheck('string');\nmodule.exports.checkIsArray = typeCheck('array');\nmodule.exports.checkIsNumber = typeCheck('number');\nmodule.exports.checkIsBoolean = typeCheck('boolean');\nmodule.exports.checkIsFunction = typeCheck('function');\nmodule.exports.checkIsObject = typeCheck('object');\n","// Copyright (c) 2012 Mathieu Turcotte\n// Licensed under the MIT license.\n\nvar util = require('util');\n\nvar BackoffStrategy = require('./strategy');\n\n// Fibonacci backoff strategy.\nfunction FibonacciBackoffStrategy(options) {\n BackoffStrategy.call(this, options);\n this.backoffDelay_ = 0;\n this.nextBackoffDelay_ = this.getInitialDelay();\n}\nutil.inherits(FibonacciBackoffStrategy, BackoffStrategy);\n\nFibonacciBackoffStrategy.prototype.next_ = function() {\n var backoffDelay = Math.min(this.nextBackoffDelay_, this.getMaxDelay());\n this.nextBackoffDelay_ += this.backoffDelay_;\n this.backoffDelay_ = backoffDelay;\n return backoffDelay;\n};\n\nFibonacciBackoffStrategy.prototype.reset_ = function() {\n this.nextBackoffDelay_ = this.getInitialDelay();\n this.backoffDelay_ = 0;\n};\n\nmodule.exports = FibonacciBackoffStrategy;\n","'use strict';\n\nvar guessBrowser = require('../util').guessBrowser;\n\nswitch (guessBrowser()) {\n case 'chrome':\n module.exports = require('./chrome');\n break;\n case 'firefox':\n module.exports = require('./firefox');\n break;\n default:\n if (typeof RTCSessionDescription === 'undefined') {\n break;\n }\n module.exports = RTCSessionDescription;\n}\n","'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ParticipantSignaling = require('./participant');\n\n/**\n * A {@link Participant} implementation\n * @extends ParticipantSignaling\n * @property {string} identity\n * @property {Participant.SID} sid\n */\n\nvar RemoteParticipantSignaling = function (_ParticipantSignaling) {\n _inherits(RemoteParticipantSignaling, _ParticipantSignaling);\n\n /**\n * Construct a {@link RemoteParticipantSignaling}.\n * @param {Participant.SID} sid\n * @param {string} identity\n */\n function RemoteParticipantSignaling(sid, identity) {\n _classCallCheck(this, RemoteParticipantSignaling);\n\n var _this = _possibleConstructorReturn(this, (RemoteParticipantSignaling.__proto__ || Object.getPrototypeOf(RemoteParticipantSignaling)).call(this));\n\n _this.connect(sid, identity);\n return _this;\n }\n\n return RemoteParticipantSignaling;\n}(ParticipantSignaling);\n\nmodule.exports = RemoteParticipantSignaling;","'use strict';\n\n/**\n * @param {Array} xs\n * @returns {number}\n */\n\nfunction sum(xs) {\n return xs.reduce(function (y, x) {\n return typeof x === 'number' ? x + y : y;\n }, 0);\n}\n\nmodule.exports = sum;","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _require = require('events'),\n EventEmitter = _require.EventEmitter;\n\n/**\n * A {@link Track} implementation\n * @extends EventEmitter\n * @property {Track.Kind} kind\n * @property {string} name\n */\n\n\nvar TrackSignaling = function (_EventEmitter) {\n _inherits(TrackSignaling, _EventEmitter);\n\n /**\n * Construct a {@link TrackSignaling}.\n * @param {string} name\n * @param {Track.Kind} kind\n * @param {boolean} isEnabled\n * @param {Track.Priority} priority\n */\n function TrackSignaling(name, kind, isEnabled, priority) {\n _classCallCheck(this, TrackSignaling);\n\n var _this = _possibleConstructorReturn(this, (TrackSignaling.__proto__ || Object.getPrototypeOf(TrackSignaling)).call(this));\n\n var sid = null;\n Object.defineProperties(_this, {\n _error: {\n value: null,\n writable: true\n },\n _isEnabled: {\n value: isEnabled,\n writable: true\n },\n _priority: {\n value: priority,\n writable: true\n },\n _trackTransceiver: {\n value: null,\n writable: true\n },\n _sid: {\n get: function get() {\n return sid;\n },\n set: function set(_sid) {\n if (sid === null) {\n sid = _sid;\n }\n }\n },\n kind: {\n enumerable: true,\n value: kind\n },\n name: {\n enumerable: true,\n value: name\n }\n });\n return _this;\n }\n\n /**\n * Non-null if publication or subscription failed.\n * @property {?Error} error\n */\n\n\n _createClass(TrackSignaling, [{\n key: 'disable',\n\n\n /**\n * Disable the {@link TrackSignaling} if it is not already disabled.\n * @return {this}\n */\n value: function disable() {\n return this.enable(false);\n }\n\n /**\n * Enable (or disable) the {@link TrackSignaling} if it is not already enabled\n * (or disabled).\n * @param {boolean} [enabled=true]\n * @return {this}\n */\n\n }, {\n key: 'enable',\n value: function enable(enabled) {\n enabled = typeof enabled === 'boolean' ? enabled : true;\n if (this.isEnabled !== enabled) {\n this._isEnabled = enabled;\n this.emit('updated');\n }\n return this;\n }\n\n /**\n * Set the {@link TrackTransceiver} on the {@link TrackSignaling}.\n * @param {TrackTransceiver} trackTransceiver\n * @returns {this}\n */\n\n }, {\n key: 'setTrackTransceiver',\n value: function setTrackTransceiver(trackTransceiver) {\n trackTransceiver = trackTransceiver || null;\n if (this.trackTransceiver !== trackTransceiver) {\n this._trackTransceiver = trackTransceiver;\n this.emit('updated');\n }\n return this;\n }\n\n /**\n * Set the SID on the {@link TrackSignaling} once.\n * @param {string} sid\n * @returns {this}\n */\n\n }, {\n key: 'setSid',\n value: function setSid(sid) {\n if (this.sid === null) {\n this._sid = sid;\n this.emit('updated');\n }\n return this;\n }\n }, {\n key: 'error',\n get: function get() {\n return this._error;\n }\n\n /**\n * Whether the {@link TrackSignaling} is enabled.\n * @property {boolean}\n */\n\n }, {\n key: 'isEnabled',\n get: function get() {\n return this._isEnabled;\n }\n\n /**\n * The {@link TrackSignaling}'s priority.\n * @property {Track.Priority}\n */\n\n }, {\n key: 'priority',\n get: function get() {\n return this._priority;\n }\n\n /**\n * The {@link TrackSignaling}'s {@link Track.SID}.\n * @property {Track.SID}\n */\n\n }, {\n key: 'sid',\n get: function get() {\n return this._sid;\n }\n\n /**\n * The {@link TrackSignaling}'s {@link TrackTransceiver}.\n * @property {TrackTransceiver}\n */\n\n }, {\n key: 'trackTransceiver',\n get: function get() {\n return this._trackTransceiver;\n }\n }]);\n\n return TrackSignaling;\n}(EventEmitter);\n\n/**\n * Emitted whenever the {@link TrackSignaling} is updated\n * @event TrackSignaling#updated\n */\n\nmodule.exports = TrackSignaling;","'use strict';\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar IceReportFactory = require('./icereportfactory');\nvar PeerConnectionReport = require('./peerconnectionreport');\nvar ReceiverReportFactory = require('./receiverreportfactory');\nvar SenderReportFactory = require('./senderreportfactory');\n\n/**\n * @typedef {string} TrackId\n */\n\n/**\n * @typedef {string} StatsId\n */\n\n/**\n * @interface SenderReportFactoriesByMediaType\n * @property {Map} audio\n * @property {Map} video\n */\n\n/**\n * @interface ReceiverReportFactoriesByMediaType\n * @property {Map} audio\n * @property {Map} video\n */\n\n/**\n * @interface SenderAndReceiverReportFactories\n * @property {Map} send\n * @property {Map} recv\n */\n\n/**\n * @interface {StatsIdsByMediaType}\n * @property {Set} audio\n * @property {Set} video\n */\n\n/**\n * @property {RTCPeerConnection} pc\n * @property {IceReportFactory} iceReportFactory\n * @property {SenderAndReceiverReportFactories} audio\n * @property {SenderAndReceiverReportFactories} video\n * @property {?PeerConnectionReport} lastReport\n */\n\nvar PeerConnectionReportFactory = function () {\n /**\n * Construct a {@link PeerConnectionReportFactory}.\n * @param {RTCPeerConnection} pc\n */\n function PeerConnectionReportFactory(pc) {\n _classCallCheck(this, PeerConnectionReportFactory);\n\n Object.defineProperties(this, {\n pc: {\n enumerable: true,\n value: pc\n },\n ice: {\n enumerable: true,\n value: new IceReportFactory()\n },\n audio: {\n enumerable: true,\n value: {\n send: new Map(),\n recv: new Map()\n }\n },\n video: {\n enumerable: true,\n value: {\n send: new Map(),\n recv: new Map()\n }\n },\n lastReport: {\n enumerable: true,\n value: null,\n writable: true\n }\n });\n }\n\n /**\n * Create a {@link PeerConnectionReport}.\n * @returns {Promise}\n */\n\n\n _createClass(PeerConnectionReportFactory, [{\n key: 'next',\n value: function next() {\n var _this = this;\n\n var updatePromise = typeof mozRTCPeerConnection !== 'undefined' ? updateFirefox(this) : updateChrome(this);\n\n return updatePromise.then(function () {\n var audioSenderReportFactories = [].concat(_toConsumableArray(_this.audio.send.values()));\n var videoSenderReportFactories = [].concat(_toConsumableArray(_this.video.send.values()));\n var audioReceiverReportFactories = [].concat(_toConsumableArray(_this.audio.recv.values()));\n var videoReceiverReportFactories = [].concat(_toConsumableArray(_this.video.recv.values()));\n\n var report = new PeerConnectionReport(_this.ice.lastReport, {\n send: audioSenderReportFactories.map(function (factory) {\n return factory.lastReport;\n }).filter(function (report) {\n return report;\n }),\n recv: audioReceiverReportFactories.map(function (factory) {\n return factory.lastReport;\n }).filter(function (report) {\n return report;\n })\n }, {\n send: videoSenderReportFactories.map(function (factory) {\n return factory.lastReport;\n }).filter(function (report) {\n return report;\n }),\n recv: videoReceiverReportFactories.map(function (factory) {\n return factory.lastReport;\n }).filter(function (report) {\n return report;\n })\n });\n\n _this.lastReport = report;\n\n return report;\n });\n }\n }]);\n\n return PeerConnectionReportFactory;\n}();\n\n/**\n * Construct a Map from MediaStreamTrack Ids to RTCStatsReports.\n * @param {Array|Array} sendersOrReceivers - each\n * RTCRtpSender should have a non-null track\n * @returns {Promise>}\n */\n\n\nfunction getSenderOrReceiverReports(sendersOrReceivers) {\n return Promise.all(sendersOrReceivers.map(function (senderOrReceiver) {\n var trackId = senderOrReceiver.track.id;\n return senderOrReceiver.getStats().then(function (report) {\n // NOTE(mroberts): We have to rewrite Ids due to this bug:\n //\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1463430\n //\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = report.values()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var stats = _step.value;\n\n if (stats.type === 'inbound-rtp') {\n stats.id = trackId + '-' + stats.id;\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n return [trackId, report];\n });\n })).then(function (pairs) {\n return new Map(pairs);\n });\n}\n\n/**\n * @param {SenderReportFactory.constructor} SenderReportFactory\n * @param {SenderReportFactoriesByMediaType} sendersByMediaType\n * @param {RTCStatsReport} report\n * @param {RTCStats} stats\n * @param {TrackId} [trackId]\n * @returns {?SenderReportFactory}\n */ /**\n * @param {ReceiverReportFactory.constructor} ReceiverReportFactory\n * @param {ReceiverReportFactoriesByMediaType} receiversByMediaType\n * @param {RTCStatsReport} report\n * @param {RTCStats} stats\n * @param {TrackId} [trackId]\n * @returns {?ReceiverReportFactory}\n */\nfunction getOrCreateSenderOrReceiverReportFactory(SenderOrReceiverReportFactory, sendersOrReceiversByMediaType, report, stats, trackId) {\n var sendersOrReceivers = sendersOrReceiversByMediaType[stats.mediaType];\n if (!trackId) {\n var trackStats = report.get(stats.trackId);\n if (trackStats) {\n trackId = trackStats.trackIdentifier;\n }\n }\n if (sendersOrReceivers && trackId) {\n if (sendersOrReceivers.has(stats.id)) {\n return sendersOrReceivers.get(stats.id);\n }\n var senderOrReceiverFactory = new SenderOrReceiverReportFactory(trackId, stats);\n sendersOrReceivers.set(stats.id, senderOrReceiverFactory);\n }\n return null;\n}\n\n/**\n * @param {PeerConnectionReportFactory} factory\n * @returns {SenderReportFactoriesByMediaType}\n */\nfunction getSenderReportFactoriesByMediaType(factory) {\n return { audio: factory.audio.send, video: factory.video.send };\n}\n\n/**\n * @param {PeerConnectionReportFactory} factory\n * @returns {ReceiverReportFactoriesByMediaType}\n */\nfunction getReceiverReportFactoriesByMediaType(factory) {\n return { audio: factory.audio.recv, video: factory.video.recv };\n}\n\n/**\n * @param {PeerConnectionReportFactory} factory\n * @param {RTCStatsReport} report\n * @param {RTCStats} stats\n * @param {TrackId} [trackId]\n * @returns {?SenderReportFactory}\n */\nfunction getOrCreateSenderReportFactory(factory, report, stats, trackId) {\n return getOrCreateSenderOrReceiverReportFactory(SenderReportFactory, getSenderReportFactoriesByMediaType(factory), report, stats, trackId);\n}\n\n/**\n * @param {PeerConnectionReportFactory} factory\n * @param {RTCStatsReport} report\n * @param {RTCStats} stats\n * @param {TrackId} [trackId]\n * @returns {?ReceiverReportFactory}\n */\nfunction getOrCreateReceiverReportFactory(factory, report, stats, trackId) {\n return getOrCreateSenderOrReceiverReportFactory(ReceiverReportFactory, getReceiverReportFactoriesByMediaType(factory), report, stats, trackId);\n}\n\n/**\n * @param {PeerConnectionReportFactory} factory\n * @retuns {StatsIdsByMediaType}\n */\nfunction getSenderReportFactoryIdsByMediaType(factory) {\n return {\n audio: new Set(factory.audio.send.keys()),\n video: new Set(factory.video.send.keys())\n };\n}\n\n/**\n * @param {PeerConnectionReportFactory} factory\n * @retuns {StatsIdsByMediaType}\n */\nfunction getReceiverReportFactoryIdsByMediaType(factory) {\n return {\n audio: new Set(factory.audio.recv.keys()),\n video: new Set(factory.video.recv.keys())\n };\n}\n\n/**\n * @param {PeerConnectionReportFactory} factory\n * @param {RTCStatsReport} report\n * @param {StatsIdsByMediaType} senderReportFactoryIdsToDeleteByMediaType\n * @param {TrackId} [trackId]\n * @returns {void}\n */\nfunction updateSenderReports(factory, report, senderReportFactoryIdsToDeleteByMediaType, trackId) {\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = report.values()[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var stats = _step2.value;\n\n if (stats.type === 'outbound-rtp' && !stats.isRemote) {\n if (typeof mozRTCPeerConnection === 'undefined' && !stats.trackId) {\n continue;\n }\n var senderReportFactoryIdsToDelete = senderReportFactoryIdsToDeleteByMediaType[stats.mediaType];\n if (senderReportFactoryIdsToDelete) {\n senderReportFactoryIdsToDelete.delete(stats.id);\n }\n var senderReportFactory = getOrCreateSenderReportFactory(factory, report, stats, trackId);\n if (senderReportFactory) {\n var remoteInboundStats = report.get(stats.remoteId);\n senderReportFactory.next(trackId || senderReportFactory.trackId, stats, remoteInboundStats);\n }\n }\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n}\n\n/**\n * @param {PeerConnectionReportFactory} factory\n * @param {RTCStatsReport} report\n * @param {StatsIdsByMediaType} receiverReportFactoryIdsToDeleteByMediaType\n * @param {TrackId} [trackId]\n * @returns {void}\n */\nfunction updateReceiverReports(factory, report, receiverReportFactoryIdsToDeleteByMediaType, trackId) {\n var _iteratorNormalCompletion3 = true;\n var _didIteratorError3 = false;\n var _iteratorError3 = undefined;\n\n try {\n for (var _iterator3 = report.values()[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n var stats = _step3.value;\n\n if (stats.type === 'inbound-rtp' && !stats.isRemote) {\n var receiverReportFactoryIdsToDelete = receiverReportFactoryIdsToDeleteByMediaType[stats.mediaType];\n if (receiverReportFactoryIdsToDelete) {\n receiverReportFactoryIdsToDelete.delete(stats.id);\n }\n var receiverReportFactory = getOrCreateReceiverReportFactory(factory, report, stats, trackId);\n if (receiverReportFactory) {\n receiverReportFactory.next(trackId || receiverReportFactory.trackId, stats);\n }\n }\n }\n } catch (err) {\n _didIteratorError3 = true;\n _iteratorError3 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion3 && _iterator3.return) {\n _iterator3.return();\n }\n } finally {\n if (_didIteratorError3) {\n throw _iteratorError3;\n }\n }\n }\n}\n\n/**\n * @param {SenderReportFactoriesByMediaType|ReceiverReportFactoriesByMediaType} senderOrReceiverReportFactoriesByMediaType\n * @param {StatsIdsByMediaType} senderOrReceiverReportFactoryIdsByMediaType\n * @returns {void}\n */\nfunction deleteSenderOrReceiverReportFactories(senderOrReceiverReportFactoriesByMediaType, senderOrReceiverReportFactoryIdsByMediaType) {\n var _loop = function _loop(mediaType) {\n var senderOrReceiverReportFactories = senderOrReceiverReportFactoriesByMediaType[mediaType];\n var senderOrReceiverReportFactoryIds = senderOrReceiverReportFactoryIdsByMediaType[mediaType];\n senderOrReceiverReportFactoryIds.forEach(function (senderOrReceiverReportFactoryId) {\n return senderOrReceiverReportFactories.delete(senderOrReceiverReportFactoryId);\n });\n };\n\n for (var mediaType in senderOrReceiverReportFactoryIdsByMediaType) {\n _loop(mediaType);\n }\n}\n\n/**\n * @param {IceReportFactory} ice\n * @param {RTCStatsReport} report\n * @returns {void}\n */\nfunction updateIceReport(ice, report) {\n var selectedCandidatePair = void 0;\n var _iteratorNormalCompletion4 = true;\n var _didIteratorError4 = false;\n var _iteratorError4 = undefined;\n\n try {\n for (var _iterator4 = report.values()[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n var stats = _step4.value;\n\n if (stats.type === 'transport') {\n selectedCandidatePair = report.get(stats.selectedCandidatePairId);\n }\n }\n } catch (err) {\n _didIteratorError4 = true;\n _iteratorError4 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion4 && _iterator4.return) {\n _iterator4.return();\n }\n } finally {\n if (_didIteratorError4) {\n throw _iteratorError4;\n }\n }\n }\n\n if (selectedCandidatePair) {\n ice.next(selectedCandidatePair);\n return;\n }\n var _iteratorNormalCompletion5 = true;\n var _didIteratorError5 = false;\n var _iteratorError5 = undefined;\n\n try {\n for (var _iterator5 = report.values()[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {\n var _stats = _step5.value;\n\n if (_stats.type === 'candidate-pair' && _stats.nominated && ('selected' in _stats ? _stats.selected : true)) {\n ice.next(_stats);\n }\n }\n } catch (err) {\n _didIteratorError5 = true;\n _iteratorError5 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion5 && _iterator5.return) {\n _iterator5.return();\n }\n } finally {\n if (_didIteratorError5) {\n throw _iteratorError5;\n }\n }\n }\n}\n\n/**\n * @param {PeerConnectionReportFactory} factory\n * @returns {PeerConnectionReport}\n */\nfunction updateFirefox(factory) {\n var senders = factory.pc.getTransceivers().filter(function (transceiver) {\n return transceiver.currentDirection && transceiver.currentDirection.match(/send/) && transceiver.sender.track;\n }).map(function (transceiver) {\n return transceiver.sender;\n });\n\n var receivers = factory.pc.getTransceivers().filter(function (transceiver) {\n return transceiver.currentDirection && transceiver.currentDirection.match(/recv/);\n }).map(function (transceiver) {\n return transceiver.receiver;\n });\n\n return Promise.all([getSenderOrReceiverReports(senders), getSenderOrReceiverReports(receivers), factory.pc.getStats()]).then(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 3),\n senderReports = _ref2[0],\n receiverReports = _ref2[1],\n pcReport = _ref2[2];\n\n var senderReportFactoriesByMediaType = getSenderReportFactoriesByMediaType(factory);\n var senderReportFactoryIdsToDeleteByMediaType = getSenderReportFactoryIdsByMediaType(factory);\n senderReports.forEach(function (report, trackId) {\n return updateSenderReports(factory, report, senderReportFactoryIdsToDeleteByMediaType, trackId);\n });\n deleteSenderOrReceiverReportFactories(senderReportFactoriesByMediaType, senderReportFactoryIdsToDeleteByMediaType);\n\n var receiverReportFactoriesByMediaType = getReceiverReportFactoriesByMediaType(factory);\n var receiverReportFactoryIdsToDeleteByMediaType = getReceiverReportFactoryIdsByMediaType(factory);\n receiverReports.forEach(function (report, trackId) {\n return updateReceiverReports(factory, report, receiverReportFactoryIdsToDeleteByMediaType, trackId);\n });\n deleteSenderOrReceiverReportFactories(receiverReportFactoriesByMediaType, receiverReportFactoryIdsToDeleteByMediaType);\n\n updateIceReport(factory.ice, pcReport);\n });\n}\n\n/**\n * @param {PeerConnectionReportFactory} factory\n * @returns {PeerConnectionReport}\n */\nfunction updateChrome(factory) {\n return factory.pc.getStats().then(function (report) {\n var senderReportFactoriesByMediaType = getSenderReportFactoriesByMediaType(factory);\n var senderReportFactoryIdsToDeleteByMediaType = getSenderReportFactoryIdsByMediaType(factory);\n updateSenderReports(factory, report, senderReportFactoryIdsToDeleteByMediaType);\n deleteSenderOrReceiverReportFactories(senderReportFactoriesByMediaType, senderReportFactoryIdsToDeleteByMediaType);\n\n var receiverReportFactoriesByMediaType = getReceiverReportFactoriesByMediaType(factory);\n var receiverReportFactoryIdsToDeleteByMediaType = getReceiverReportFactoryIdsByMediaType(factory);\n updateReceiverReports(factory, report, receiverReportFactoryIdsToDeleteByMediaType);\n deleteSenderOrReceiverReportFactories(receiverReportFactoriesByMediaType, receiverReportFactoryIdsToDeleteByMediaType);\n\n updateIceReport(factory.ice, report);\n });\n}\n\nmodule.exports = PeerConnectionReportFactory;","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar ReceiverReport = require('./receiverreport');\nvar SenderReport = require('./senderreport');\n\n/**\n * @interface SenderAndReceiverReports\n * @property {Array} send\n * @property {Array} recv\n */\n\n/**\n * @interface SenderAndReceiverSummary\n * @property {SenderSummary} send\n * @property {ReceiverSummary} recv\n */\n\n/**\n * @interface PeerConnectionSummary\n * @property {IceReport} ice\n * @property {SenderSummary} send\n * @property {ReceiverSummary} recv\n * @property {SenderAndReceiverSummary} audio\n * @property {SenderAndReceiverSummary} video\n */\n\n/**\n * @property {IceReport} ice\n * @roperty {SenderAndReceiverReports} audio\n * @roperty {SenderAndReceiverReports} video\n */\n\nvar PeerConnectionReport = function () {\n /**\n * Construct a {@link PeerConnectionReport}.\n * @param {IceReport} ice\n * @param {SenderAndReceiverReports} audio\n * @param {SenderAndReceiverReports} video\n */\n function PeerConnectionReport(ice, audio, video) {\n _classCallCheck(this, PeerConnectionReport);\n\n Object.defineProperties(this, {\n ice: {\n enumerable: true,\n value: ice\n },\n audio: {\n enumerable: true,\n value: audio\n },\n video: {\n enumerable: true,\n value: video\n }\n });\n }\n\n /**\n * Summarize the {@link PeerConnectionReport} by summarizing its\n * {@link SenderReport}s and {@link ReceiverReport}s.\n * @returns {PeerConnectionSummary}\n */\n\n\n _createClass(PeerConnectionReport, [{\n key: 'summarize',\n value: function summarize() {\n var senderReports = this.audio.send.concat(this.video.send);\n var send = SenderReport.summarize(senderReports);\n\n var receiverReports = this.audio.recv.concat(this.video.recv);\n var recv = ReceiverReport.summarize(receiverReports);\n\n return {\n ice: this.ice,\n send: send,\n recv: recv,\n audio: {\n send: SenderReport.summarize(this.audio.send),\n recv: ReceiverReport.summarize(this.audio.recv)\n },\n video: {\n send: SenderReport.summarize(this.video.send),\n recv: ReceiverReport.summarize(this.video.recv)\n }\n };\n }\n }]);\n\n return PeerConnectionReport;\n}();\n\nmodule.exports = PeerConnectionReport;","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar EventEmitter = require('events').EventEmitter;\n\n/**\n * A {@link TrackTransceiver} represents either one or more local RTCRtpSenders\n * or RTCDataChannels, or a single RTCRtpReceiver or remote RTCDataChannel.\n * @extends EventEmitter\n * @property {Track.ID} id\n * @property {Track.kind} kind\n */\n\nvar TrackTransceiver = function (_EventEmitter) {\n _inherits(TrackTransceiver, _EventEmitter);\n\n /**\n * Construct a {@link TrackTransceiver}.\n * @param {Track.ID} id\n * @param {Track.kind} kind\n */\n function TrackTransceiver(id, kind) {\n _classCallCheck(this, TrackTransceiver);\n\n var _this = _possibleConstructorReturn(this, (TrackTransceiver.__proto__ || Object.getPrototypeOf(TrackTransceiver)).call(this));\n\n Object.defineProperties(_this, {\n id: {\n enumerable: true,\n value: id\n },\n kind: {\n enumerable: true,\n value: kind\n }\n });\n return _this;\n }\n\n /**\n * Stop the {@link TrackTransceiver}.\n * #emits TrackTransceiver#stopped\n * @returns {void}\n */\n\n\n _createClass(TrackTransceiver, [{\n key: 'stop',\n value: function stop() {\n this.emit('stopped');\n }\n }]);\n\n return TrackTransceiver;\n}(EventEmitter);\n\n/**\n * The {@link TrackTransceiver} was stopped.\n * @event TrackTransceiver#stopped\n */\n\nmodule.exports = TrackTransceiver;","// Copyright (c) 2012 Mathieu Turcotte\n// Licensed under the MIT license.\n\nvar events = require('events');\nvar precond = require('precond');\nvar util = require('util');\n\n// A class to hold the state of a backoff operation. Accepts a backoff strategy\n// to generate the backoff delays.\nfunction Backoff(backoffStrategy) {\n events.EventEmitter.call(this);\n\n this.backoffStrategy_ = backoffStrategy;\n this.maxNumberOfRetry_ = -1;\n this.backoffNumber_ = 0;\n this.backoffDelay_ = 0;\n this.timeoutID_ = -1;\n\n this.handlers = {\n backoff: this.onBackoff_.bind(this)\n };\n}\nutil.inherits(Backoff, events.EventEmitter);\n\n// Sets a limit, greater than 0, on the maximum number of backoffs. A 'fail'\n// event will be emitted when the limit is reached.\nBackoff.prototype.failAfter = function(maxNumberOfRetry) {\n precond.checkArgument(maxNumberOfRetry > 0,\n 'Expected a maximum number of retry greater than 0 but got %s.',\n maxNumberOfRetry);\n\n this.maxNumberOfRetry_ = maxNumberOfRetry;\n};\n\n// Starts a backoff operation. Accepts an optional parameter to let the\n// listeners know why the backoff operation was started.\nBackoff.prototype.backoff = function(err) {\n precond.checkState(this.timeoutID_ === -1, 'Backoff in progress.');\n\n if (this.backoffNumber_ === this.maxNumberOfRetry_) {\n this.emit('fail', err);\n this.reset();\n } else {\n this.backoffDelay_ = this.backoffStrategy_.next();\n this.timeoutID_ = setTimeout(this.handlers.backoff, this.backoffDelay_);\n this.emit('backoff', this.backoffNumber_, this.backoffDelay_, err);\n }\n};\n\n// Handles the backoff timeout completion.\nBackoff.prototype.onBackoff_ = function() {\n this.timeoutID_ = -1;\n this.emit('ready', this.backoffNumber_, this.backoffDelay_);\n this.backoffNumber_++;\n};\n\n// Stops any backoff operation and resets the backoff delay to its inital value.\nBackoff.prototype.reset = function() {\n this.backoffNumber_ = 0;\n this.backoffStrategy_.reset();\n clearTimeout(this.timeoutID_);\n this.timeoutID_ = -1;\n};\n\nmodule.exports = Backoff;\n","'use strict';\n\nvar CancelablePromise = require('../../util/cancelablepromise');\nvar DefaultPeerConnectionManager = require('./peerconnectionmanager');\nvar DefaultRoomV2 = require('./room');\nvar DefaultTransport = require('./twilioconnectiontransport');\n\nvar _require = require('../../util/twilio-video-errors'),\n SignalingConnectionDisconnectedError = _require.SignalingConnectionDisconnectedError,\n SignalingIncomingMessageInvalidError = _require.SignalingIncomingMessageInvalidError;\n\nvar _require2 = require('../../util'),\n flatMap = _require2.flatMap;\n\nfunction createCancelableRoomSignalingPromise(token, wsServer, localParticipant, iceServerSource, encodingParameters, preferredCodecs, options) {\n options = Object.assign({\n PeerConnectionManager: DefaultPeerConnectionManager,\n RoomV2: DefaultRoomV2,\n Transport: DefaultTransport\n }, options);\n\n var transport = void 0;\n\n var PeerConnectionManager = options.PeerConnectionManager;\n var RoomV2 = options.RoomV2;\n\n var peerConnectionManager = new PeerConnectionManager(iceServerSource, encodingParameters, preferredCodecs, options);\n\n var trackSenders = flatMap(localParticipant.tracks, function (trackV2) {\n return [trackV2.trackTransceiver];\n });\n\n peerConnectionManager.setConfiguration(options);\n peerConnectionManager.setTrackSenders(trackSenders);\n\n var cancelationError = new Error('Canceled');\n\n return new CancelablePromise(function onCreate(resolve, reject, isCanceled) {\n peerConnectionManager.createAndOffer().then(function createAndOfferSucceeded() {\n // NOTE(mmalavalli): PeerConnectionManager#createAndOffer() queues the\n // initial offer in the event queue for the 'description' event. So,\n // we are dequeueing to prevent the spurious 'update' message sent by\n // the client after connecting to a room.\n peerConnectionManager.dequeue('description');\n\n return new Promise(function (resolve, reject) {\n if (isCanceled()) {\n reject(cancelationError);\n return;\n }\n\n var transportOptions = typeof options.wsServerInsights === 'string' ? { wsServerInsights: options.wsServerInsights } : {};\n\n if (options.InsightsPublisher) {\n transportOptions.InsightsPublisher = options.InsightsPublisher;\n }\n\n if (options.NullInsightsPublisher) {\n transportOptions.NullInsightsPublisher = options.NullInsightsPublisher;\n }\n\n if (options.bandwidthProfile) {\n transportOptions.bandwidthProfile = options.bandwidthProfile;\n }\n\n transportOptions = Object.assign({\n automaticSubscription: options.automaticSubscription,\n dominantSpeaker: options.dominantSpeaker,\n environment: options.environment,\n logLevel: options.logLevel,\n networkQuality: options.networkQuality,\n iceServerSourceStatus: iceServerSource.status,\n insights: options.insights,\n realm: options.realm,\n sdpSemantics: options.sdpSemantics\n }, transportOptions);\n\n var Transport = options.Transport;\n transport = new Transport(options.name, token, localParticipant, peerConnectionManager, wsServer, transportOptions);\n\n transport.once('connected', function connected(initialState) {\n if (isCanceled()) {\n reject(cancelationError);\n return;\n }\n var localParticipantState = initialState.participant;\n if (!localParticipantState) {\n reject(new SignalingIncomingMessageInvalidError());\n return;\n }\n\n localParticipant.setSignalingRegion(initialState.options.signaling_region);\n resolve(new RoomV2(localParticipant, initialState, transport, peerConnectionManager, options));\n });\n\n transport.once('stateChanged', function stateChanged(state, error) {\n if (state === 'disconnected') {\n error = error || new SignalingConnectionDisconnectedError();\n transport = null;\n reject(error);\n }\n });\n });\n }).then(function createRoomSignalingSucceeded(roomSignaling) {\n if (isCanceled()) {\n peerConnectionManager.close();\n roomSignaling.disconnect();\n reject(cancelationError);\n return;\n }\n resolve(roomSignaling);\n }).catch(function onError(error) {\n if (transport) {\n transport.disconnect();\n transport = null;\n }\n peerConnectionManager.close();\n reject(error);\n });\n }, function onCancel() {\n if (transport) {\n transport.disconnect();\n transport = null;\n }\n });\n}\n\nmodule.exports = createCancelableRoomSignalingPromise;","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar LocalTrackPublication = require('./localtrackpublication');\n\n/**\n * A {@link LocalVideoTrackPublication} is a {@link LocalVideoTrack} that has\n * been published to a {@link Room}.\n * @extends LocalTrackPublication\n * @property {Track.Kind} kind - \"video\"\n * @property {LocalVideoTrack} track - the {@link LocalVideoTrack}\n */\n\nvar LocalVideoTrackPublication = function (_LocalTrackPublicatio) {\n _inherits(LocalVideoTrackPublication, _LocalTrackPublicatio);\n\n /**\n * Construct a {@link LocalVideoTrackPublication}.\n * @param {LocalTrackPublicationSignaling} signaling - The corresponding\n * {@link LocalTrackPublicationSignaling}\n * @param {LocalVideoTrack} track - the {@link LocalVideoTrack}\n * @param {function(LocalTrackPublication): void} unpublish - The callback\n * that unpublishes the {@link LocalTrackPublication}\n * @param {TrackPublicationOptions} options - {@link LocalTrackPublication} options\n */\n function LocalVideoTrackPublication(signaling, track, unpublish, options) {\n _classCallCheck(this, LocalVideoTrackPublication);\n\n return _possibleConstructorReturn(this, (LocalVideoTrackPublication.__proto__ || Object.getPrototypeOf(LocalVideoTrackPublication)).call(this, signaling, track, unpublish, options));\n }\n\n _createClass(LocalVideoTrackPublication, [{\n key: 'toString',\n value: function toString() {\n return '[LocalVideoTrackPublication #' + this._instanceId + ': ' + this.trackSid + ']';\n }\n }]);\n\n return LocalVideoTrackPublication;\n}(LocalTrackPublication);\n\nmodule.exports = LocalVideoTrackPublication;","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar constants = require('../util/constants');\nvar ECS = require('../ecs');\nvar EventEmitter = require('events').EventEmitter;\nvar Log = require('../util/log');\nvar TimeoutPromise = require('../util/timeoutpromise');\nvar util = require('../util');\n\nvar _require = require('../util/twilio-video-errors'),\n ConfigurationAcquireFailedError = _require.ConfigurationAcquireFailedError;\n\nvar version = require('../../package.json').version;\n\nvar instances = 0;\n\n/**\n * @typedef {ECS.getConfigurationOptions} NTSIceServerSourceOptions\n * @property {Array} [defaultIceServers]\n * @property {number} [defaultTTL]\n * @property {string} [ecsServer]\n * @property {string} [environment=\"prod\"]\n * @property {function(string, ECS.getConfigurationOptions): Promise} [getConfiguration]\n * @property {string} [realm=\"us1\"]\n * @property {Log} [log]\n * @property {number} [timeout]\n */\n\n/**\n * A Network Traversal Service (NTS)-backed implementation of\n * {@link IceServerSource}; useful for getting fresh TURN servers from Twilio.\n * @extends EventEmitter\n * @implements {IceServerSource}\n */\n\nvar NTSIceServerSource = function (_EventEmitter) {\n _inherits(NTSIceServerSource, _EventEmitter);\n\n /**\n * Construct an {@link NTSIceServerSource}.\n * @param {string} token - Access Token\n * @param {NTSIceServerSourceOptions} [options]\n */\n function NTSIceServerSource(token, options) {\n _classCallCheck(this, NTSIceServerSource);\n\n var _this = _possibleConstructorReturn(this, (NTSIceServerSource.__proto__ || Object.getPrototypeOf(NTSIceServerSource)).call(this));\n\n options = Object.assign({\n abortOnTimeout: false,\n defaultTTL: constants.ICE_SERVERS_DEFAULT_TTL,\n environment: constants.DEFAULT_ENVIRONMENT,\n getConfiguration: ECS.getConfiguration,\n realm: constants.DEFAULT_REALM,\n timeout: constants.ICE_SERVERS_TIMEOUT_MS\n }, options);\n\n /* eslint-disable new-cap */\n var defaultIceServers = constants.DEFAULT_ICE_SERVERS(options.environment);\n var ecsServer = options.ecsServer || constants.ECS_SERVER(options.environment, options.realm);\n /* eslint-enable new-cap */\n\n var log = options.log ? options.log.createLog('default', _this) : new Log('default', _this, util.buildLogLevels('off'));\n\n Object.defineProperties(_this, {\n _abortOnTimeout: {\n value: options.abortOnTimeout\n },\n // This Promise represents the current invocation of `poll`. `start` sets it\n // and `stop` clears it out.\n _currentPoll: {\n value: null,\n writable: true\n },\n // In the event that ECS or NTS fail to return ICE servers in a timely\n // manner, NTSIceServerSource falls back to these servers.\n _defaultIceServers: {\n value: defaultIceServers\n },\n _defaultTTL: {\n value: options.defaultTTL\n },\n // This is the ECS server NTSIceServerSource communicates with.\n _ecsServer: {\n value: ecsServer\n },\n _getConfiguration: {\n value: options.getConfiguration\n },\n _instance: {\n value: ++instances\n },\n // This timer ID represents the next invocation of `poll`.\n _nextPoll: {\n value: null,\n writable: true\n },\n _log: {\n value: log\n },\n _status: {\n value: null,\n writable: true\n },\n // This Deferred remains unresolved until `stop` is called. We use it to\n // short-circuit in `poll`.\n _stopped: {\n value: util.defer(),\n writable: true\n },\n // This value configures the amount of time NTSIceServerSource will wait\n // when fetching ICE servers.\n _timeout: {\n value: options.timeout\n },\n // This is the Access Token NTSIceServerSource makes requests to ECS with.\n _token: {\n value: token\n }\n });\n\n _this._log.info('Created a new NTSIceServerSource');\n _this._log.debug('ECS server:', _this._ecsServer);\n return _this;\n }\n\n _createClass(NTSIceServerSource, [{\n key: 'start',\n value: function start() {\n if (!this.isStarted) {\n this._log.info('Starting');\n this._currentPoll = poll(this);\n } else {\n this._log.warn('Already started');\n }\n return this._currentPoll;\n }\n }, {\n key: 'stop',\n value: function stop() {\n if (!this.isStarted) {\n this._log.warn('Already stopped');\n return;\n }\n this._log.info('Stopping');\n this._currentPoll = null;\n clearTimeout(this._nextPoll);\n this._stopped.resolve();\n this._stopped = util.defer();\n this._log.debug('Stopped');\n }\n }, {\n key: 'toString',\n value: function toString() {\n return '[NTSIceServerSource #' + this._instance + ']';\n }\n }, {\n key: 'isStarted',\n get: function get() {\n return !!this._currentPoll;\n }\n }, {\n key: 'status',\n get: function get() {\n return this._status;\n }\n }]);\n\n return NTSIceServerSource;\n}(EventEmitter);\n\n/**\n * Parse an ECS configuration value, log any warnings, and return a tuple of\n * ICE servers and TTL.\n * @param {NTSIceServerSource} client\n * @param {object} config\n * @returns {Array|Number>} iceServersAndTTL\n * @throws {Error}\n */\n\n\nfunction parseECSConfig(client, config) {\n var nts = util.getOrNull(config, 'video.network_traversal_service');\n if (!nts) {\n throw new Error('network_traversal_service not available');\n } else if (nts.warning) {\n client._log.warn(nts.warning);\n }\n\n var iceServers = nts.ice_servers;\n if (!iceServers) {\n throw new Error('ice_servers not available');\n }\n client._log.info('Got ICE servers: ' + JSON.stringify(iceServers));\n\n var ttl = nts.ttl || client._defaultTTL;\n return [iceServers, ttl];\n}\n\n/**\n * Get ICE servers and their TTL.\n * @private\n * @param {NTSIceServerSource} nts\n * @returns {Promise>} iceServers\n */\nfunction poll(client) {\n // We race `getConfiguration` against the `_stopped` Promise so that, when\n // `stop` is called on the NTSIceServerSource, we can immediately proceed\n // without waiting on `getConfiguration`.\n client._log.debug('Getting ECS configuration');\n\n var options = {\n configUrl: client._ecsServer + '/v2/Configuration',\n body: {\n service: 'video',\n /* eslint-disable camelcase */\n sdk_version: version\n /* eslint-enable camelcase */\n }\n };\n\n var alreadyStopped = new Error('Already stopped');\n var config = client._getConfiguration(client._token, options);\n var configWithTimeout = new TimeoutPromise(config, client._timeout);\n\n return Promise.race([configWithTimeout, client._stopped.promise]).then(function (config) {\n if (!config) {\n throw alreadyStopped;\n }\n var iceServersAndTTL = parseECSConfig(client, config);\n client._status = 'success';\n return iceServersAndTTL;\n }).catch(function (error) {\n client._status = 'failure';\n if (!client.isStarted) {\n throw alreadyStopped;\n } else if (configWithTimeout.isTimedOut) {\n if (client._abortOnTimeout) {\n client._log.warn('Getting ICE servers took too long');\n throw new ConfigurationAcquireFailedError();\n }\n client._log.warn('Getting ICE servers took too long (using defaults)');\n } else {\n // NOTE(mroberts): Stop if we get an Access Token error (2xxxx)\n if (error.code && Math.floor(error.code / 10000) === 2) {\n client.stop();\n }\n client._log.warn('Failed to get ICE servers (using defaults):', error);\n }\n return [client._defaultIceServers, client._defaultTTL];\n }).then(function (iceServersAndTTL) {\n var iceServers = iceServersAndTTL[0];\n var ttl = iceServersAndTTL[1];\n\n if (client.isStarted) {\n client._log.info('Getting ICE servers again in ' + ttl + ' seconds');\n client._nextPoll = setTimeout(function nextPoll() {\n if (client.isStarted) {\n client._currentPoll = poll(client);\n }\n }, (ttl - constants.ECS_TIMEOUT) * 1000);\n }\n\n client._iceServers = iceServers;\n try {\n client.emit('iceServers', iceServers);\n } catch (error) {\n // Do nothing.\n }\n return iceServers;\n });\n}\n\nmodule.exports = NTSIceServerSource;","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar DefaultRecordingSignaling = require('./recording');\nvar StateMachine = require('../statemachine');\nvar DefaultTimeout = require('../util/timeout');\n\nvar _require = require('../util/twilio-video-errors'),\n MediaConnectionError = _require.MediaConnectionError,\n MediaDTLSTransportFailedError = _require.MediaDTLSTransportFailedError,\n SignalingConnectionDisconnectedError = _require.SignalingConnectionDisconnectedError;\n\n/*\nRoomSignaling States\n-----------------------\n\n +-----------+ +--------------+\n | | | |\n | connected |---->| disconnected |\n | | | |\n +-----------+ +--------------+\n | ^ ^\n | | |\n | | +--------------+\n | +---| |\n | | reconnecting |\n +----->| |\n +--------------+\n\n*/\n\nvar states = {\n connected: ['reconnecting', 'disconnected'],\n reconnecting: ['connected', 'disconnected'],\n disconnected: []\n};\n\n/**\n * A {@link Room} implementation\n * @extends StateMachine\n * @property {RTCPeerConnectionState} connectionState\n * @property {?Participant.SID} dominantSpeakerSid\n * @property {ParticipantSignaling} localParticipant\n * @property {RTCIceConnectionState} iceConnectionState\n * @property {string} name\n * @property {Map} participants\n * @property {RecordingSignaling} recording\n * @property {Room.SID} sid\n * @property {string} state - \"connected\", \"reconnecting\", or \"disconnected\"\n * @property {string} signalingConnectionState - \"connected\",\n * \"reconnecting\", or \"disconnected\"\n * @emits RoomSignaling#connectionStateChanged\n * @emits RoomSignaling#dominantSpeakerChanged\n * @emits RoomSignaling#iceConnectionStateChanged\n * @emits RoomSignaling#signalingConnectionStateChanged\n */\n\nvar RoomSignaling = function (_StateMachine) {\n _inherits(RoomSignaling, _StateMachine);\n\n /**\n * Construct a {@link RoomSignaling}.\n * @param {ParticipantSignaling} localParticipant\n * @param {Room.SID} sid\n * @param {string} name\n * @param {object} options\n */\n function RoomSignaling(localParticipant, sid, name, options) {\n _classCallCheck(this, RoomSignaling);\n\n options = Object.assign({\n RecordingSignaling: DefaultRecordingSignaling,\n Timeout: DefaultTimeout\n }, options);\n\n var _this = _possibleConstructorReturn(this, (RoomSignaling.__proto__ || Object.getPrototypeOf(RoomSignaling)).call(this, 'connected', states));\n\n var RecordingSignaling = options.RecordingSignaling;\n\n var sessionTimeout = new options.Timeout(function () {\n _this._disconnect(_this._reconnectingError);\n }, options.sessionTimeout, false);\n\n Object.defineProperties(_this, {\n _mediaConnectionIsReconnecting: {\n writable: true,\n value: false\n },\n _options: {\n value: options\n },\n _reconnectingError: {\n value: null,\n writable: true\n },\n _sessionTimeout: {\n value: sessionTimeout\n },\n dominantSpeakerSid: {\n enumerable: true,\n value: null,\n writable: true\n },\n localParticipant: {\n enumerable: true,\n value: localParticipant\n },\n name: {\n enumerable: true,\n value: name\n },\n participants: {\n enumerable: true,\n value: new Map()\n },\n recording: {\n enumerable: true,\n value: new RecordingSignaling()\n },\n sid: {\n enumerable: true,\n value: sid\n }\n });\n\n _this.on('connectionStateChanged', function () {\n if (_this.connectionState === 'failed' && !['disconnected', 'failed'].includes(_this.iceConnectionState)) {\n _this._disconnect(new MediaDTLSTransportFailedError());\n }\n });\n\n _this.on('iceConnectionStateChanged', function () {\n return maybeUpdateState(_this);\n });\n _this.on('signalingConnectionStateChanged', function () {\n return maybeUpdateState(_this);\n });\n\n // NOTE(mmalavalli): In case \"iceConnectionState\" is already failed, update\n // the RoomSignaling state. setTimeout() ensures that the state is updated\n // after RoomV2's constructor is fully executed, thereby making \"signalingConnectionState\"\n // available here.\n setTimeout(function () {\n return maybeUpdateState(_this);\n });\n return _this;\n }\n\n /**\n * Disconnect, possibly with an Error.\n * @private\n * @param {Error} [error]\n * @returns {boolean}\n */\n\n\n _createClass(RoomSignaling, [{\n key: '_disconnect',\n value: function _disconnect(error) {\n if (this.state !== 'disconnected') {\n this.preempt('disconnected', null, [error]);\n return true;\n }\n return false;\n }\n\n /**\n * Connect {@link RemoteParticipantSignaling} to the {@link RoomSignaling}.\n * @param {RemoteParticipantSignaling} participant\n * @returns {boolean}\n */\n\n }, {\n key: 'connectParticipant',\n value: function connectParticipant(participant) {\n var self = this;\n\n if (participant.state === 'disconnected') {\n return false;\n }\n\n if (this.participants.has(participant.sid)) {\n return false;\n }\n\n this.participants.set(participant.sid, participant);\n\n participant.on('stateChanged', function stateChanged(state) {\n if (state === 'disconnected') {\n participant.removeListener('stateChanged', stateChanged);\n self.participants.delete(participant.sid);\n self.emit('participantDisconnected', participant);\n }\n });\n\n this.emit('participantConnected', participant);\n\n return true;\n }\n\n /**\n * Disconnect.\n * @returns {boolean}\n */\n\n }, {\n key: 'disconnect',\n value: function disconnect() {\n return this._disconnect();\n }\n\n /**\n * Set (or unset) the Dominant Speaker.\n * @param {?Participant.SID} dominantSpeakerSid\n * @returns {void}\n */\n\n }, {\n key: 'setDominantSpeaker',\n value: function setDominantSpeaker(dominantSpeakerSid) {\n this.dominantSpeakerSid = dominantSpeakerSid;\n this.emit('dominantSpeakerChanged');\n }\n }]);\n\n return RoomSignaling;\n}(StateMachine);\n\n/**\n * @event RoomSignaling#event:connectionStateChanged\n */\n\n/**\n * @event RoomSignaling#event:dominantSpeakerChanged\n */\n\n/**\n * {@link RemoteParticipantSignaling} connected to the {@link RoomSignaling}.\n * @event RoomSignaling#event:participantConnected\n * @param {RemoteParticipantSignaling} participantSignaling\n */\n\n/**\n * {@link RemoteParticipantSignaling} disconnected from the {@link RoomSignaling}.\n * @event RoomSignaling#event:participantDisconnected\n * @param {RemoteParticipantSignaling} participantSignaling\n */\n\n/**\n * @event RoomSignaling#event:iceConnectionStateChanged\n */\n\n/**\n * @event RoomSignaling#event:signalingConnectionStateChanged\n */\n\n/**\n * Maybe update the {@link RoomSignaling} state.\n * @param {RoomSignaling} roomSignaling\n */\n\n\nfunction maybeUpdateState(roomSignaling) {\n if (roomSignaling.state === 'disconnected' || roomSignaling.signalingConnectionState === 'disconnected') {\n roomSignaling._sessionTimeout.clear();\n return;\n }\n\n var newState = void 0;\n\n if (roomSignaling.signalingConnectionState === 'reconnecting') {\n newState = roomSignaling.signalingConnectionState;\n } else if (roomSignaling.iceConnectionState === 'failed') {\n roomSignaling._mediaConnectionIsReconnecting = true;\n newState = 'reconnecting';\n } else if (roomSignaling.iceConnectionState === 'new' || roomSignaling.iceConnectionState === 'checking') {\n newState = roomSignaling._mediaConnectionIsReconnecting ? 'reconnecting' : 'connected';\n } else {\n roomSignaling._mediaConnectionIsReconnecting = false;\n roomSignaling._reconnectingError = null;\n roomSignaling._sessionTimeout.clear();\n newState = 'connected';\n }\n\n if (newState === roomSignaling.state) {\n return;\n }\n\n if (newState === 'reconnecting') {\n roomSignaling._reconnectingError = roomSignaling.signalingConnectionState === 'reconnecting' ? new SignalingConnectionDisconnectedError() : new MediaConnectionError();\n roomSignaling._sessionTimeout.start();\n roomSignaling.preempt(newState, null, [roomSignaling._reconnectingError]);\n } else {\n roomSignaling.preempt(newState);\n }\n}\n\nmodule.exports = RoomSignaling;","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n function getOwnPropertyDescriptors(obj) {\n var keys = Object.keys(obj);\n var descriptors = {};\n for (var i = 0; i < keys.length; i++) {\n descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n }\n return descriptors;\n };\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n if (typeof process !== 'undefined' && process.noDeprecation === true) {\n return fn;\n }\n\n // Allow for deprecating things in the process of starting up.\n if (typeof process === 'undefined') {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n if (isUndefined(debugEnviron))\n debugEnviron = process.env.NODE_DEBUG || '';\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n if (typeof original !== 'function')\n throw new TypeError('The \"original\" argument must be of type Function');\n\n if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n var fn = original[kCustomPromisifiedSymbol];\n if (typeof fn !== 'function') {\n throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n }\n Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return fn;\n }\n\n function fn() {\n var promiseResolve, promiseReject;\n var promise = new Promise(function (resolve, reject) {\n promiseResolve = resolve;\n promiseReject = reject;\n });\n\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n args.push(function (err, value) {\n if (err) {\n promiseReject(err);\n } else {\n promiseResolve(value);\n }\n });\n\n try {\n original.apply(this, args);\n } catch (err) {\n promiseReject(err);\n }\n\n return promise;\n }\n\n Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return Object.defineProperties(\n fn,\n getOwnPropertyDescriptors(original)\n );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n // Because `null` is a special error value in callbacks which means \"no error\n // occurred\", we error-wrap so the callback consumer can distinguish between\n // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n if (!reason) {\n var newReason = new Error('Promise was rejected with a falsy value');\n newReason.reason = reason;\n reason = newReason;\n }\n return cb(reason);\n}\n\nfunction callbackify(original) {\n if (typeof original !== 'function') {\n throw new TypeError('The \"original\" argument must be of type Function');\n }\n\n // We DO NOT return the promise as it gives the user a false sense that\n // the promise is actually somehow related to the callback's execution\n // and that the callback throwing will reject the promise.\n function callbackified() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n\n var maybeCb = args.pop();\n if (typeof maybeCb !== 'function') {\n throw new TypeError('The last argument must be of type Function');\n }\n var self = this;\n var cb = function() {\n return maybeCb.apply(self, arguments);\n };\n // In true node style we process the callback on `nextTick` with all the\n // implications (stack, `uncaughtException`, `async_hooks`)\n original.apply(this, args)\n .then(function(ret) { process.nextTick(cb, null, ret) },\n function(rej) { process.nextTick(callbackifyOnRejected, rej, cb) });\n }\n\n Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n Object.defineProperties(callbackified,\n getOwnPropertyDescriptors(original));\n return callbackified;\n}\nexports.callbackify = callbackify;\n","'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _require = require('@twilio/webrtc'),\n MediaStreamTrack = _require.MediaStreamTrack;\n\nvar _require2 = require('./util'),\n asLocalTrack = _require2.asLocalTrack,\n asLocalTrackPublication = _require2.asLocalTrackPublication,\n trackClass = _require2.trackClass;\n\nvar _require3 = require('./util/constants'),\n E = _require3.typeErrors,\n trackPriority = _require3.trackPriority;\n\nvar _require4 = require('./util/validate'),\n validateLocalTrack = _require4.validateLocalTrack;\n\nvar _require5 = require('./media/track/es5'),\n LocalAudioTrack = _require5.LocalAudioTrack,\n LocalDataTrack = _require5.LocalDataTrack,\n LocalVideoTrack = _require5.LocalVideoTrack;\n\nvar LocalAudioTrackPublication = require('./media/track/localaudiotrackpublication');\nvar LocalDataTrackPublication = require('./media/track/localdatatrackpublication');\nvar LocalVideoTrackPublication = require('./media/track/localvideotrackpublication');\nvar Participant = require('./participant');\n\n/**\n * A {@link LocalParticipant} represents the local {@link Participant} in a\n * {@link Room}.\n * @extends Participant\n * @property {Map} audioTracks -\n * The {@link LocalParticipant}'s {@link LocalAudioTrackPublication}s\n * @property {Map} dataTracks -\n * The {@link LocalParticipant}'s {@link LocalDataTrackPublication}s\n * @property {Map} tracks -\n * The {@link LocalParticipant}'s {@link LocalTrackPublication}s\n * @property {Map} videoTracks -\n * The {@link LocalParticipant}'s {@link LocalVideoTrackPublication}s\n * @property {string} signalingRegion - The geographical region of the\n * signaling edge the {@link LocalParticipant} is connected to.\n *\n * @emits RemoteParticipant#reconnected\n * @emits RemoteParticipant#reconnecting\n * @emits LocalParticipant#trackDimensionsChanged\n * @emits LocalParticipant#trackDisabled\n * @emits LocalParticipant#trackEnabled\n * @emits LocalParticipant#trackPublicationFailed\n * @emits LocalParticipant#trackPublished\n * @emits LocalParticipant#trackStarted\n * @emits LocalParticipant#trackStopped\n */\n\nvar LocalParticipant = function (_Participant) {\n _inherits(LocalParticipant, _Participant);\n\n /**\n * Construct a {@link LocalParticipant}.\n * @param {ParticipantSignaling} signaling\n * @param {Array} localTracks\n * @param {Object} options\n */\n function LocalParticipant(signaling, localTracks, options) {\n _classCallCheck(this, LocalParticipant);\n\n options = Object.assign({\n LocalAudioTrack: LocalAudioTrack,\n LocalVideoTrack: LocalVideoTrack,\n LocalDataTrack: LocalDataTrack,\n MediaStreamTrack: MediaStreamTrack,\n LocalAudioTrackPublication: LocalAudioTrackPublication,\n LocalVideoTrackPublication: LocalVideoTrackPublication,\n LocalDataTrackPublication: LocalDataTrackPublication,\n shouldStopLocalTracks: false,\n tracks: localTracks\n }, options);\n\n var tracksToStop = options.shouldStopLocalTracks ? new Set(localTracks.filter(function (localTrack) {\n return localTrack.kind !== 'data';\n })) : new Set();\n\n var _this = _possibleConstructorReturn(this, (LocalParticipant.__proto__ || Object.getPrototypeOf(LocalParticipant)).call(this, signaling, options));\n\n Object.defineProperties(_this, {\n _LocalAudioTrack: {\n value: options.LocalAudioTrack\n },\n _LocalDataTrack: {\n value: options.LocalDataTrack\n },\n _LocalVideoTrack: {\n value: options.LocalVideoTrack\n },\n _MediaStreamTrack: {\n value: options.MediaStreamTrack\n },\n _LocalAudioTrackPublication: {\n value: options.LocalAudioTrackPublication\n },\n _LocalDataTrackPublication: {\n value: options.LocalDataTrackPublication\n },\n _LocalVideoTrackPublication: {\n value: options.LocalVideoTrackPublication\n },\n _tracksToStop: {\n value: tracksToStop\n },\n signalingRegion: {\n enumerable: true,\n get: function get() {\n return signaling.signalingRegion;\n }\n }\n });\n\n _this._handleTrackSignalingEvents();\n return _this;\n }\n\n /**\n * @private\n * @param {LocalTrack} track\n * @param {Track.ID} id\n * @param {Track.Priority} priority\n * @returns {?LocalTrack}\n */\n\n\n _createClass(LocalParticipant, [{\n key: '_addTrack',\n value: function _addTrack(track, id, priority) {\n var addedTrack = _get(LocalParticipant.prototype.__proto__ || Object.getPrototypeOf(LocalParticipant.prototype), '_addTrack', this).call(this, track, id);\n if (addedTrack && this.state !== 'disconnected') {\n this._addLocalTrack(track, priority);\n }\n return addedTrack;\n }\n\n /**\n * @private\n * @param {LocalTrack} track\n * @param {Track.Priority} priority\n * @returns {void}\n */\n\n }, {\n key: '_addLocalTrack',\n value: function _addLocalTrack(track, priority) {\n this._signaling.addTrack(track._trackSender, track.name, priority);\n this._log.info('Added a new ' + trackClass(track, true) + ':', track.id);\n this._log.debug(trackClass(track, true) + ':', track);\n }\n\n /**\n * @private\n * @param {LocalTrack} track\n * @param {Track.ID} id\n * @returns {?LocalTrack}\n */\n\n }, {\n key: '_removeTrack',\n value: function _removeTrack(track, id) {\n var removedTrack = _get(LocalParticipant.prototype.__proto__ || Object.getPrototypeOf(LocalParticipant.prototype), '_removeTrack', this).call(this, track, id);\n if (removedTrack && this.state !== 'disconnected') {\n this._signaling.removeTrack(track._trackSender);\n this._log.info('Removed a ' + trackClass(track, true) + ':', track.id);\n this._log.debug(trackClass(track, true) + ':', track);\n }\n return removedTrack;\n }\n\n /**\n * Get the {@link LocalTrack} events to re-emit.\n * @private\n * @returns {Array>} events\n */\n\n }, {\n key: '_getTrackEvents',\n value: function _getTrackEvents() {\n return _get(LocalParticipant.prototype.__proto__ || Object.getPrototypeOf(LocalParticipant.prototype), '_getTrackEvents', this).call(this).concat([['disabled', 'trackDisabled'], ['enabled', 'trackEnabled'], ['stopped', 'trackStopped']]);\n }\n }, {\n key: 'toString',\n value: function toString() {\n return '[LocalParticipant #' + this._instanceId + (this.sid ? ': ' + this.sid : '') + ']';\n }\n\n /**\n * @private\n */\n\n }, {\n key: '_handleTrackSignalingEvents',\n value: function _handleTrackSignalingEvents() {\n var _this2 = this;\n\n var log = this._log;\n\n if (this.state === 'disconnected') {\n return;\n }\n\n var signaling = this._signaling;\n\n function localTrackDisabled(localTrack) {\n var trackSignaling = signaling.getPublication(localTrack._trackSender);\n if (trackSignaling) {\n trackSignaling.disable();\n log.debug('Disabled the ' + trackClass(localTrack, true) + ':', localTrack.id);\n }\n }\n\n function localTrackEnabled(localTrack) {\n var trackSignaling = signaling.getPublication(localTrack._trackSender);\n if (trackSignaling) {\n trackSignaling.enable();\n log.debug('Enabled the ' + trackClass(localTrack, true) + ':', localTrack.id);\n }\n }\n\n function localTrackStopped(localTrack) {\n // NOTE(mroberts): We shouldn't need to check for `stop`, since DataTracks\n // do not emit \"stopped\".\n var trackSignaling = signaling.getPublication(localTrack._trackSender);\n if (trackSignaling) {\n trackSignaling.stop();\n }\n }\n\n this.on('trackDisabled', localTrackDisabled);\n this.on('trackEnabled', localTrackEnabled);\n this.on('trackStopped', localTrackStopped);\n\n this._tracks.forEach(function (track) {\n _this2._addLocalTrack(track, trackPriority.PRIORITY_STANDARD);\n _this2._getOrCreateLocalTrackPublication(track).catch(function (error) {\n // Just log a warning for now.\n log.warn('Failed to get or create LocalTrackPublication for ' + track + ':', error);\n });\n });\n\n var self = this;\n signaling.on('stateChanged', function stateChanged(state) {\n log.debug('Transitioned to state:', state);\n if (state === 'disconnected') {\n log.debug('Removing LocalTrack event listeners');\n signaling.removeListener('stateChanged', stateChanged);\n self.removeListener('trackDisabled', localTrackDisabled);\n self.removeListener('trackEnabled', localTrackEnabled);\n self.removeListener('trackStopped', localTrackStopped);\n self._tracks.forEach(localTrackStopped);\n\n log.info('LocalParticipant disconnected. Stopping ' + self._tracksToStop.size + ' automatically-acquired LocalTracks');\n self._tracksToStop.forEach(function (track) {\n track.stop();\n });\n } else if (state === 'connected') {\n // NOTE(mmalavalli): Any transition to \"connected\" here is a result of\n // successful signaling reconnection, and not a first-time establishment\n // of the signaling connection.\n log.info('reconnected');\n\n // NOTE(mpatwardhan): `stateChanged` can get emitted with StateMachine locked.\n // Do not signal public events synchronously with lock held.\n setTimeout(function () {\n return self.emit('reconnected');\n }, 0);\n }\n });\n }\n\n /**\n * @private\n * @param {LocalTrack} localTrack\n * @returns {Promise}\n */\n\n }, {\n key: '_getOrCreateLocalTrackPublication',\n value: function _getOrCreateLocalTrackPublication(localTrack) {\n var localTrackPublication = getTrackPublication(this.tracks, localTrack);\n if (localTrackPublication) {\n return Promise.resolve(localTrackPublication);\n }\n\n var log = this._log;\n var self = this;\n\n var trackSignaling = this._signaling.getPublication(localTrack._trackSender);\n if (!trackSignaling) {\n return Promise.reject(new Error('Unexpected error: The ' + localTrack + ' cannot be published'));\n }\n\n function unpublish(publication) {\n self.unpublishTrack(publication.track);\n }\n\n return new Promise(function (resolve, reject) {\n function updated() {\n var error = trackSignaling.error;\n if (error) {\n trackSignaling.removeListener('updated', updated);\n log.warn('Failed to publish the ' + trackClass(localTrack, true) + ': ' + error.message);\n self._removeTrack(localTrack, localTrack.id);\n setTimeout(function () {\n self.emit('trackPublicationFailed', error, localTrack);\n });\n reject(error);\n return;\n }\n\n if (!self._tracks.has(localTrack.id)) {\n trackSignaling.removeListener('updated', updated);\n reject(new Error('The ' + localTrack + ' was unpublished'));\n return;\n }\n\n var sid = trackSignaling.sid;\n if (!sid) {\n return;\n }\n\n trackSignaling.removeListener('updated', updated);\n\n var options = {\n log: log,\n LocalAudioTrackPublication: self._LocalAudioTrackPublication,\n LocalDataTrackPublication: self._LocalDataTrackPublication,\n LocalVideoTrackPublication: self._LocalVideoTrackPublication\n };\n\n localTrackPublication = getTrackPublication(self.tracks, localTrack);\n\n if (!localTrackPublication) {\n localTrackPublication = asLocalTrackPublication(localTrack, trackSignaling, unpublish, options);\n self._addTrackPublication(localTrackPublication);\n }\n\n if (self._signaling.state === 'connected') {\n setTimeout(function () {\n self.emit('trackPublished', localTrackPublication);\n });\n }\n resolve(localTrackPublication);\n }\n\n trackSignaling.on('updated', updated);\n });\n }\n\n /**\n * Publishes a {@link LocalTrack} to the {@link Room}.\n * @param {LocalTrack} localTrack - The {@link LocalTrack} to publish\n * @param {LocalTrackPublishOptions} [options] - The {@link LocalTrackPublishOptions}\n * for publishing the {@link LocalTrack}\n * @returns {Promise} - Resolves with the corresponding\n * {@link LocalTrackPublication} if successful\n * @throws {TypeError}\n * @throws {RangeError}\n * @example\n * var Video = require('twilio-video');\n *\n * Video.connect(token, {\n * name: 'my-cool-room',\n * audio: true\n * }).then(function(room) {\n * return Video.createLocalVideoTrack({\n * name: 'camera'\n * }).then(function(localVideoTrack) {\n * return room.localParticipant.publishTrack(localVideoTrack, {\n * priority: 'high'\n * });\n * });\n * }).then(function(publication) {\n * console.log('The LocalTrack \"' + publication.trackName\n * + '\" was successfully published with priority \"'\n * * publication.priority + '\"');\n * });\n */ /**\n * Publishes a MediaStreamTrack to the {@link Room}.\n * @param {MediaStreamTrack} mediaStreamTrack - The MediaStreamTrack\n * to publish; if a corresponding {@link LocalAudioTrack} or\n * {@link LocalVideoTrack} has not yet been published, this method will\n * construct one\n * @param {MediaStreamTrackPublishOptions} [options] - The options for publishing\n * the MediaStreamTrack\n * @returns {Promise} - Resolves with the corresponding\n * {@link LocalTrackPublication} if successful\n * @throws {TypeError}\n * @throws {RangeError}\n * @example\n * var Video = require('twilio-video');\n *\n * Video.connect(token, {\n * name: 'my-cool-room',\n * audio: true\n * }).then(function(room) {\n * return navigator.mediaDevices.getUserMedia({\n * video: true\n * }).then(function(mediaStream) {\n * var mediaStreamTrack = mediaStream.getTracks()[0];\n * return room.localParticipant.publishTrack(mediaStreamTrack, {\n * name: 'camera',\n * priority: 'high'\n * });\n * });\n * }).then(function(publication) {\n * console.log('The LocalTrack \"' + publication.trackName\n * + '\" was successfully published with priority \"'\n * * publication.priority + '\"');\n * });\n */\n\n }, {\n key: 'publishTrack',\n value: function publishTrack(localTrackOrMediaStreamTrack, options) {\n var trackPublication = getTrackPublication(this.tracks, localTrackOrMediaStreamTrack);\n if (trackPublication) {\n return Promise.resolve(trackPublication);\n }\n\n options = Object.assign({\n log: this._log,\n priority: trackPriority.PRIORITY_STANDARD,\n LocalAudioTrack: this._LocalAudioTrack,\n LocalDataTrack: this._LocalDataTrack,\n LocalVideoTrack: this._LocalVideoTrack,\n MediaStreamTrack: this._MediaStreamTrack\n }, options);\n\n var localTrack = void 0;\n try {\n localTrack = asLocalTrack(localTrackOrMediaStreamTrack, options);\n } catch (error) {\n return Promise.reject(error);\n }\n\n var priorityValues = Object.values(trackPriority);\n if (!priorityValues.includes(options.priority)) {\n // eslint-disable-next-line new-cap\n return Promise.reject(E.INVALID_VALUE('LocalTrackPublishOptions.priority', priorityValues));\n }\n\n var addedLocalTrack = this._addTrack(localTrack, localTrack.id, options.priority) || this._tracks.get(localTrack.id);\n\n return this._getOrCreateLocalTrackPublication(addedLocalTrack);\n }\n\n /**\n * Publishes multiple {@link LocalTrack}s to the {@link Room}.\n * @param {Array} tracks - The {@link LocalTrack}s\n * to publish; for any MediaStreamTracks provided, if a corresponding\n * {@link LocalAudioTrack} or {@link LocalVideoTrack} has not yet been\n * published, this method will construct one\n * @returns {Promise>} - The resulting\n * {@link LocalTrackPublication}s\n * @throws {TypeError}\n */\n\n }, {\n key: 'publishTracks',\n value: function publishTracks(tracks) {\n if (!Array.isArray(tracks)) {\n // eslint-disable-next-line new-cap\n throw E.INVALID_TYPE('tracks', 'Array of LocalAudioTrack, LocalVideoTrack, LocalDataTrack, or MediaStreamTrack');\n }\n return Promise.all(tracks.map(this.publishTrack, this));\n }\n }, {\n key: 'setBandwidthProfile',\n value: function setBandwidthProfile() {\n this._log.warn('setBandwidthProfile is not implemented yet and may be available in future versions of twilio-video.js');\n }\n\n /**\n * Sets the {@link NetworkQualityVerbosity} for the {@link LocalParticipant} and\n * {@link RemoteParticipant}s. It does nothing if Network Quality is not enabled\n * while calling {@link connect}.\n * @param {NetworkQualityConfiguration} networkQualityConfiguration - The new\n * {@link NetworkQualityConfiguration}; If either or both of the local and\n * remote {@link NetworkQualityVerbosity} values are absent, then the corresponding\n * existing values are retained\n * @returns {this}\n * @example\n * // Update verbosity levels for both LocalParticipant and RemoteParticipants\n * localParticipant.setNetworkQualityConfiguration({\n * local: 1,\n * remote: 2\n * });\n * @example\n * // Update verbosity level for only the LocalParticipant\n * localParticipant.setNetworkQualityConfiguration({\n * local: 1\n * });\n * @example\n * // Update verbosity level for only the RemoteParticipants\n * localParticipant.setNetworkQualityConfiguration({\n * remote: 2\n * });\n */\n\n }, {\n key: 'setNetworkQualityConfiguration',\n value: function setNetworkQualityConfiguration(networkQualityConfiguration) {\n if ((typeof networkQualityConfiguration === 'undefined' ? 'undefined' : _typeof(networkQualityConfiguration)) !== 'object' || networkQualityConfiguration === null) {\n // eslint-disable-next-line new-cap\n throw E.INVALID_TYPE('networkQualityConfiguration', 'NetworkQualityConfiguration');\n }\n ['local', 'remote'].forEach(function (prop) {\n if (prop in networkQualityConfiguration && (typeof networkQualityConfiguration[prop] !== 'number' || isNaN(networkQualityConfiguration[prop]))) {\n // eslint-disable-next-line new-cap\n throw E.INVALID_TYPE('networkQualityConfiguration.' + prop, 'number');\n }\n });\n this._signaling.setNetworkQualityConfiguration(networkQualityConfiguration);\n return this;\n }\n\n /**\n * Set the {@link LocalParticipant}'s {@link EncodingParameters}.\n * @param {?EncodingParameters} [encodingParameters] - The new\n * {@link EncodingParameters}; If null, then the bitrate limits are removed;\n * If not specified, then the existing bitrate limits are preserved\n * @returns {this}\n * @throws {TypeError}\n */\n\n }, {\n key: 'setParameters',\n value: function setParameters(encodingParameters) {\n if (typeof encodingParameters !== 'undefined' && (typeof encodingParameters === 'undefined' ? 'undefined' : _typeof(encodingParameters)) !== 'object') {\n // eslint-disable-next-line new-cap\n throw E.INVALID_TYPE('encodingParameters', 'EncodingParameters, null or undefined');\n }\n\n if (encodingParameters) {\n ['maxAudioBitrate', 'maxVideoBitrate'].forEach(function (prop) {\n if (typeof encodingParameters[prop] !== 'undefined' && typeof encodingParameters[prop] !== 'number' && encodingParameters[prop] !== null) {\n // eslint-disable-next-line new-cap\n throw E.INVALID_TYPE('encodingParameters.' + prop, 'number, null or undefined');\n }\n });\n } else if (encodingParameters === null) {\n encodingParameters = { maxAudioBitrate: null, maxVideoBitrate: null };\n }\n\n this._signaling.setParameters(encodingParameters);\n return this;\n }\n\n /**\n * Stops publishing a {@link LocalTrack} to the {@link Room}.\n * @param {LocalTrack|MediaStreamTrack} track - The {@link LocalTrack}\n * to stop publishing; if a MediaStreamTrack is provided, this method\n * looks up the corresponding {@link LocalAudioTrack} or\n * {@link LocalVideoTrack} to stop publishing\n * @returns {?LocalTrackPublication} - The corresponding\n * {@link LocalTrackPublication} if the {@link LocalTrack} was previously\n * published, null otherwise\n * @throws {TypeError}\n */\n\n }, {\n key: 'unpublishTrack',\n value: function unpublishTrack(track) {\n validateLocalTrack(track, {\n LocalAudioTrack: this._LocalAudioTrack,\n LocalDataTrack: this._LocalDataTrack,\n LocalVideoTrack: this._LocalVideoTrack,\n MediaStreamTrack: this._MediaStreamTrack\n });\n\n var localTrack = this._tracks.get(track.id);\n if (!localTrack) {\n return null;\n }\n\n var trackSignaling = this._signaling.getPublication(localTrack._trackSender);\n trackSignaling.publishFailed(new Error('The ' + localTrack + ' was unpublished'));\n\n localTrack = this._removeTrack(localTrack, localTrack.id);\n if (!localTrack) {\n return null;\n }\n\n var localTrackPublication = getTrackPublication(this.tracks, localTrack);\n if (localTrackPublication) {\n this._removeTrackPublication(localTrackPublication);\n }\n return localTrackPublication;\n }\n\n /**\n * Stops publishing multiple {@link LocalTrack}s to the {@link Room}.\n * @param {Array} tracks - The {@link LocalTrack}s\n * to stop publishing; for any MediaStreamTracks provided, this method looks\n * up the corresponding {@link LocalAudioTrack} or {@link LocalVideoTrack} to\n * stop publishing\n * @returns {Array} - The corresponding\n * {@link LocalTrackPublication}s that were successfully unpublished\n * @throws {TypeError}\n */\n\n }, {\n key: 'unpublishTracks',\n value: function unpublishTracks(tracks) {\n var _this3 = this;\n\n if (!Array.isArray(tracks)) {\n // eslint-disable-next-line new-cap\n throw E.INVALID_TYPE('tracks', 'Array of LocalAudioTrack, LocalVideoTrack, LocalDataTrack, or MediaStreamTrack');\n }\n\n return tracks.reduce(function (unpublishedTracks, track) {\n var unpublishedTrack = _this3.unpublishTrack(track);\n return unpublishedTrack ? unpublishedTracks.concat(unpublishedTrack) : unpublishedTracks;\n }, []);\n }\n }]);\n\n return LocalParticipant;\n}(Participant);\n\n/**\n * The {@link LocalParticipant} has reconnected to the {@link Room} after a signaling connection disruption.\n * @event LocalParticipant#reconnected\n */\n\n/**\n * The {@link LocalParticipant} is reconnecting to the {@link Room} after a signaling connection disruption.\n * @event LocalParticipant#reconnecting\n */\n\n/**\n * One of the {@link LocalParticipant}'s {@link LocalVideoTrack}'s dimensions changed.\n * @param {LocalVideoTrack} track - The {@link LocalVideoTrack} whose dimensions changed\n * @event LocalParticipant#trackDimensionsChanged\n */\n\n/**\n * A {@link LocalTrack} was disabled by the {@link LocalParticipant}.\n * @param {LocalTrack} track - The {@link LocalTrack} that was disabled\n * @event LocalParticipant#trackDisabled\n */\n\n/**\n * A {@link LocalTrack} was enabled by the {@link LocalParticipant}.\n * @param {LocalTrack} track - The {@link LocalTrack} that was enabled\n * @event LocalParticipant#trackEnabled\n */\n\n/**\n * A {@link LocalTrack} failed to publish. Check the error message for more\n * information.\n * @param {TwilioError} error - A {@link TwilioError} explaining why publication\n * failed\n * @param {LocalTrack} localTrack - The {@link LocalTrack} that failed to\n * publish\n * @event LocalParticipant#trackPublicationFailed\n */\n\n/**\n * A {@link LocalTrack} was successfully published.\n * @param {LocalTrackPublication} publication - The resulting\n * {@link LocalTrackPublication} for the published {@link LocalTrack}\n * @event LocalParticipant#trackPublished\n */\n\n/**\n * One of the {@link LocalParticipant}'s {@link LocalTrack}s started.\n * @param {LocalTrack} track - The {@link LocalTrack} that started\n * @event LocalParticipant#trackStarted\n */\n\n/**\n * One of the {@link LocalParticipant}'s {@link LocalTrack}s stopped, either\n * because {@link LocalTrack#stop} was called or because the underlying\n * MediaStreamTrack ended).\n * @param {LocalTrack} track - The {@link LocalTrack} that stopped\n * @event LocalParticipant#trackStopped\n */\n\n/**\n * Outgoing media encoding parameters.\n * @typedef {object} EncodingParameters\n * @property {?number} [maxAudioBitrate] - Max outgoing audio bitrate (bps);\n * If not specified, retains the existing bitrate limit; A null or a\n * 0 value removes any previously set bitrate limit; This value is set\n * as a hint for variable bitrate codecs, but will not take effect for fixed bitrate\n * codecs; Based on our tests, Chrome, Firefox and Safari support a bitrate range of\n * 12000 bps to 256000 bps for Opus codec; This parameter has no effect on iSAC, PCMU\n * and PCMA codecs\n * @property {?number} [maxVideoBitrate] - Max outgoing video bitrate (bps);\n * If not specified, retains the existing bitrate limit; A null or\n * a 0 value removes any previously set bitrate limit; This value is\n * set as a hint for variable bitrate codecs, but will not take effect for fixed\n * bitrate codecs; Based on our tests, Chrome, Firefox and Safari all seem to support\n * an average bitrate range of 20000 bps (20 kbps) to 8000000 bps (8 mbps) for a\n * 720p VideoTrack.\n * Note: this limit is not applied for screen share tracks published on Chrome.\n */\n\n/**\n * Options for publishing a {@link LocalTrack}.\n * @typedef {object} LocalTrackPublishOptions\n * @property {Track.Priority} [priority='standard'] - The priority with which the {@link LocalTrack}\n * is to be published; In Group or Small Group Rooms, the appropriate bandwidth is\n * allocated to the {@link LocalTrack} based on its {@link Track.Priority}; It has no\n * effect in Peer-to-Peer Rooms; It defaults to \"standard\" when not provided\n */\n\n/**\n * Options for publishing a {@link MediaStreamTrack}.\n * @typedef {LocalTrackOptions} MediaStreamTrackPublishOptions\n * @property {Track.Priority} [priority='standard'] - The priority with which the {@link LocalTrack}\n * is to be published; In Group or Small Group Rooms, the appropriate bandwidth is\n * allocated to the {@link LocalTrack} based on its {@link Track.Priority}; It has no\n * effect in Peer-to-Peer Rooms; It defaults to \"standard\" when not provided\n */\n\n/**\n * @private\n * @param {Map} trackPublications\n * @param {LocalTrack|MediaStreamTrack} track\n * @returns {?LocalTrackPublication} trackPublication\n */\n\n\nfunction getTrackPublication(trackPublications, track) {\n return Array.from(trackPublications.values()).find(function (trackPublication) {\n return trackPublication.track === track || trackPublication.track.mediaStreamTrack === track;\n }) || null;\n}\n\nmodule.exports = LocalParticipant;","'use strict';\n\nvar defaultCreateLocalTracks = require('./createlocaltracks');\nvar DEFAULT_LOG_LEVEL = require('./util/constants').DEFAULT_LOG_LEVEL;\n\n/**\n * Request a {@link LocalAudioTrack} or {@link LocalVideoTrack}.\n * @param {Track.Kind} kind - \"audio\" or \"video\"\n * @param {CreateLocalTrackOptions} [options]\n * @returns {Promise}\n * @private\n */\nfunction createLocalTrack(kind, options) {\n options = Object.assign({\n createLocalTracks: defaultCreateLocalTracks,\n logLevel: DEFAULT_LOG_LEVEL\n }, options);\n\n var createOptions = {};\n createOptions.logLevel = options.logLevel;\n delete options.logLevel;\n\n var createLocalTracks = options.createLocalTracks;\n delete options.createLocalTracks;\n createOptions[kind] = Object.keys(options).length > 0 ? options : true;\n\n return createLocalTracks(createOptions).then(function (localTracks) {\n return localTracks[0];\n });\n}\n\n/**\n * Request a {@link LocalAudioTrack}.\n * @alias module:twilio-video.createLocalAudioTrack\n * @param {CreateLocalTrackOptions} [options] - Options for requesting a {@link LocalAudioTrack}\n * @returns {Promise}\n * @example\n * var Video = require('twilio-video');\n *\n * // Connect to the Room with just video\n * Video.connect('my-token', {\n * name: 'my-cool-room',\n * video: true\n * }).then(function(room) {\n * // Add audio after connecting to the Room\n * Video.createLocalAudioTrack().then(function(localTrack) {\n * room.localParticipant.publishTrack(localTrack);\n * });\n * });\n * @example\n * var Video = require('twilio-video');\n *\n * // Request the default LocalAudioTrack with a custom name\n * Video.createLocalAudioTrack({ name: 'microphone' }).then(function(localTrack) {\n * console.log(localTrack.name); // 'microphone'\n * });\n */\nfunction createLocalAudioTrack(options) {\n return createLocalTrack('audio', options);\n}\n\n/**\n * Request a {@link LocalVideoTrack}.\n * @alias module:twilio-video.createLocalVideoTrack\n * @param {CreateLocalTrackOptions} [options] - Options for requesting a {@link LocalVideoTrack}\n * @returns {Promise}\n * @example\n * var Video = require('twilio-video');\n *\n * // Connect to the Room with just audio\n * Video.connect('my-token', {\n * name: 'my-cool-room',\n * audio: true\n * }).then(function(room) {\n * // Add video after connecting to the Room\n * Video.createLocalVideoTrack().then(function(localTrack) {\n * room.localParticipant.publishTrack(localTrack);\n * });\n * });\n * @example\n * var Video = require('twilio-video');\n *\n * // Request the default LocalVideoTrack with a custom name\n * Video.createLocalVideoTrack({ name: 'camera' }).then(function(localTrack) {\n * console.log(localTrack.name); // 'camera'\n * });\n */\nfunction createLocalVideoTrack(options) {\n return createLocalTrack('video', options);\n}\n\n/**\n * Create {@link LocalTrack} options. Apart from the properties listed here, you can\n * also specify any of the MediaTrackConstraints\n * properties.\n * @typedef {MediaTrackConstraints} CreateLocalTrackOptions\n * @property {LogLevel|LogLevels} logLevel\n * @property {string} [name] - The {@link LocalTrack}'s name; by default,\n * it is set to the {@link LocalTrack}'s ID.\n * @property {boolean} [workaroundWebKitBug180748=false] - Only valid for\n * {@link LocalAudioTrack}s; setting this attempts to workaround WebKit Bug\n * 180748, where, in Safari, getUserMedia may return a silent audio\n * MediaStreamTrack.\n */\n\nmodule.exports = {\n audio: createLocalAudioTrack,\n video: createLocalVideoTrack\n};","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar EventEmitter = require('../../eventemitter');\n\nvar _require = require('../../util'),\n buildLogLevels = _require.buildLogLevels,\n valueToJSON = _require.valueToJSON;\n\nvar DEFAULT_LOG_LEVEL = require('../../util/constants').DEFAULT_LOG_LEVEL;\nvar Log = require('../../util/log');\n\nvar nInstances = 0;\n\n/**\n * A {@link Track} represents a stream of audio, video, or data.\n * @extends EventEmitter\n * @property {Track.Kind} kind - The {@link Track}'s kind\n * @property {string} name - The {@link Track}'s name\n */\n\nvar Track = function (_EventEmitter) {\n _inherits(Track, _EventEmitter);\n\n /**\n * Construct a {@link Track}.\n * @param {Track.ID} id - The {@link Track}'s ID\n * @param {Track.Kind} kind - The {@link Track}'s kind\n * @param {{ log: Log, name: ?string }} options\n */\n function Track(id, kind, options) {\n _classCallCheck(this, Track);\n\n options = Object.assign({\n name: id,\n log: null,\n logLevel: DEFAULT_LOG_LEVEL\n }, options);\n\n var _this = _possibleConstructorReturn(this, (Track.__proto__ || Object.getPrototypeOf(Track)).call(this));\n\n var name = String(options.name);\n\n var logLevels = buildLogLevels(options.logLevel);\n var log = options.log ? options.log.createLog('media', _this) : new Log('media', _this, logLevels);\n\n Object.defineProperties(_this, {\n _instanceId: {\n value: ++nInstances\n },\n _log: {\n value: log\n },\n kind: {\n enumerable: true,\n value: kind\n },\n name: {\n enumerable: true,\n value: name\n }\n });\n return _this;\n }\n\n _createClass(Track, [{\n key: 'toJSON',\n value: function toJSON() {\n return valueToJSON(this);\n }\n }]);\n\n return Track;\n}(EventEmitter);\n\n/**\n * The {@link Track} ID is a string identifier for the {@link Track}.\n * @typedef {string} Track.ID\n */\n\n/**\n * The {@link Track} kind is either \"audio\", \"video\", or \"data\".\n * @typedef {string} Track.Kind\n */\n\n/**\n * The {@link Track}'s priority can be \"low\", \"standard\", or \"high\".\n * @typedef {string} Track.Priority\n */\n\n/**\n * The {@link Track} SID is a unique string identifier for the {@link Track}\n * that is published to a {@link Room}.\n * @typedef {string} Track.SID\n */\n\n/**\n * A {@link DataTrack} is a {@link LocalDataTrack} or {@link RemoteDataTrack}.\n * @typedef {LocalDataTrack|RemoteDataTrack} DataTrack\n */\n\n/**\n * A {@link LocalTrack} is a {@link LocalAudioTrack}, {@link LocalVideoTrack},\n * or {@link LocalDataTrack}.\n * @typedef {LocalAudioTrack|LocalVideoTrack|LocalDataTrack} LocalTrack\n */\n\n/**\n * {@link LocalTrack} options\n * @typedef {object} LocalTrackOptions\n * @property {LogLevel|LogLevels} logLevel - Log level for 'media' modules\n * @property {string} [name] - The {@link LocalTrack}'s name; by default,\n * it is set to the {@link LocalTrack}'s ID.\n */\n\n/**\n * A {@link RemoteTrack} is a {@link RemoteAudioTrack},\n * {@link RemoteVideoTrack}, or {@link RemoteDataTrack}.\n * @typedef {RemoteAudioTrack|RemoteVideoTrack|RemoteDataTrack} RemoteTrack\n */\n\nmodule.exports = Track;","'use strict';\n\n/**\n * Bandwidth network quality statistics.\n * @property {?number} actual - actual bandwidth, in bytes\n * @property {?number} available - available bandwidth, in bytes\n * @property {?NetworkQualityLevel} level - {@link NetworkQualityLevel} for bandwidth\n */\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar NetworkQualityBandwidthStats =\n/**\n * Construct a {@link NetworkQualityBandwidthStats}.\n * @param {BandwidthStats} bandwidthStats\n */\nfunction NetworkQualityBandwidthStats(_ref) {\n var _ref$actual = _ref.actual,\n actual = _ref$actual === undefined ? null : _ref$actual,\n _ref$available = _ref.available,\n available = _ref$available === undefined ? null : _ref$available,\n _ref$level = _ref.level,\n level = _ref$level === undefined ? null : _ref$level;\n\n _classCallCheck(this, NetworkQualityBandwidthStats);\n\n Object.defineProperties(this, {\n actual: {\n value: actual,\n enumerable: true\n },\n available: {\n value: available,\n enumerable: true\n },\n level: {\n value: level,\n enumerable: true\n }\n });\n};\n\nmodule.exports = NetworkQualityBandwidthStats;","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar SenderOrReceiverReportFactory = require('./senderorreceiverreportfactory');\nvar SenderReport = require('./senderreport');\n\n/**\n * @extends {SenderOrReceiverReportFactory}\n * @property {?SenderReport} lastReport\n */\n\nvar SenderReportFactory = function (_SenderOrReceiverRepo) {\n _inherits(SenderReportFactory, _SenderOrReceiverRepo);\n\n /**\n * Construct a {@link SenderReportFactory}.\n * @param {TrackId} trackId\n * @param {RTCStats} initialStats\n */\n function SenderReportFactory(trackId, initialStats) {\n _classCallCheck(this, SenderReportFactory);\n\n var _this = _possibleConstructorReturn(this, (SenderReportFactory.__proto__ || Object.getPrototypeOf(SenderReportFactory)).call(this, initialStats.id, trackId, initialStats));\n\n Object.defineProperties(_this, {\n lastReport: {\n enumerable: true,\n value: null,\n writable: true\n }\n });\n return _this;\n }\n\n /**\n * @param {TrackId} trackId\n * @param {RTCStats} newerStats\n * @param {RTCRemoteInboundRtpStreamStats} [newerRemoteStats]\n * @returns {SenderReport}\n */\n\n\n _createClass(SenderReportFactory, [{\n key: 'next',\n value: function next(trackId, newerStats, newerRemoteStats) {\n var olderStats = this.lastStats;\n this.lastStats = newerStats;\n this.trackId = trackId;\n var report = SenderReport.of(trackId, olderStats, newerStats, newerRemoteStats);\n this.lastReport = report;\n return report;\n }\n }]);\n\n return SenderReportFactory;\n}(SenderOrReceiverReportFactory);\n\nmodule.exports = SenderReportFactory;","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',{class:[\n'badge',\n_vm.badgeClass\n]},[_vm._v(\"\\n \"+_vm._s(_vm.badgeDisplay)+\"\\n\")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./user.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./user.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./user.vue?vue&type=template&id=1a39fbc9&\"\nimport script from \"./user.vue?vue&type=script&lang=js&\"\nexport * from \"./user.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _require = require('./'),\n isNonArrayObject = _require.isNonArrayObject;\n\nvar _require2 = require('./constants'),\n E = _require2.typeErrors,\n subscriptionMode = _require2.subscriptionMode,\n trackPriority = _require2.trackPriority,\n trackSwitchOffMode = _require2.trackSwitchOffMode;\n\n/**\n * Validate the {@link BandwidthProfileOptions} object.\n * @param {BandwidthProfileOptions} bandwidthProfile\n * @returns {?Error} - null if valid, Error if not.\n */\n\n\nfunction validateBandwidthProfile(bandwidthProfile) {\n var error = validateObject(bandwidthProfile, 'options.bandwidthProfile');\n if (!bandwidthProfile || error) {\n return error;\n }\n error = validateObject(bandwidthProfile.video, 'options.bandwidthProfile.video', [{ prop: 'dominantSpeakerPriority', values: Object.values(trackPriority) }, { prop: 'maxSubscriptionBitrate', type: 'number' }, { prop: 'maxTracks', type: 'number' }, { prop: 'mode', values: Object.values(subscriptionMode) }, { prop: 'trackSwitchOffMode', values: Object.values(trackSwitchOffMode) }]);\n return error || (bandwidthProfile.video ? validateRenderDimensions(bandwidthProfile.video.renderDimensions) : null);\n}\n\n/**\n * Throw if the given track is not a {@link LocalAudioTrack}, a\n * {@link LocalVideoTrack} or a MediaStreamTrack.\n * @param {*} track\n * @param {object} options\n */\nfunction validateLocalTrack(track, options) {\n if (!(track instanceof options.LocalAudioTrack || track instanceof options.LocalDataTrack || track instanceof options.LocalVideoTrack || track instanceof options.MediaStreamTrack)) {\n /* eslint new-cap:0 */\n throw E.INVALID_TYPE('track', 'LocalAudioTrack, LocalVideoTrack, LocalDataTrack, or MediaStreamTrack');\n }\n}\n\n/**\n * Validate an object. An object is valid if it is undefined or a non-null, non-array\n * object whose properties satisfy the specified data-type or value-range requirements.\n * @param {object} object - the object to be validated\n * @param {string} name - the object name to be used to build the error message, if invalid\n * @param {Array} [propChecks] - optional data-type or value-range requirements\n * for the object's properties\n * @returns {?Error} - null if object is valid, Error if not\n */\nfunction validateObject(object, name) {\n var propChecks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n\n // NOTE(mmalavalli): We determine that an undefined object is valid because this\n // means the parent object does not contain this object as a property, which is\n // a valid scenario.\n if (typeof object === 'undefined') {\n return null;\n }\n // NOTE(mmalavalli): We determine that if the object is null, or an Array, or\n // any other non-object type, then it is invalid.\n if (object === null || !isNonArrayObject(object)) {\n return E.INVALID_TYPE(name, 'object');\n }\n // NOTE(mmalavalli): We determine that the object is invalid if at least one of\n // its properties does not satisfy its data-type or value-range requirement.\n return propChecks.reduce(function (error, _ref) {\n var prop = _ref.prop,\n type = _ref.type,\n values = _ref.values;\n\n if (error || !(prop in object)) {\n return error;\n }\n var value = object[prop];\n if (type && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) !== type) {\n return E.INVALID_TYPE(name + '.' + prop, type);\n }\n if (type === 'number' && isNaN(value)) {\n return E.INVALID_TYPE(name + '.' + prop, type);\n }\n if (Array.isArray(values) && !values.includes(value)) {\n return E.INVALID_VALUE(name + '.' + prop, values);\n }\n return error;\n }, null);\n}\n\n/**\n * Validate the {@link VideoRenderDimensions} object.\n * @param {VideoRenderDimensions} renderDimensions\n * @returns {?Error} - null if valid, Error if not.\n */\nfunction validateRenderDimensions(renderDimensions) {\n var name = 'options.bandwidthProfile.video.renderDimensions';\n var error = validateObject(renderDimensions, name);\n return renderDimensions ? error || Object.values(trackPriority).reduce(function (error, prop) {\n return error || validateObject(renderDimensions[prop], name + '.' + prop, [{ prop: 'height', type: 'number' }, { prop: 'width', type: 'number' }]);\n }, null) : error;\n}\n\nexports.validateBandwidthProfile = validateBandwidthProfile;\nexports.validateLocalTrack = validateLocalTrack;\nexports.validateObject = validateObject;","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar MediaTrackTransceiver = require('./transceiver');\n\n/**\n * A {@link MediaTrackSender} represents one or more local RTCRtpSenders.\n * @extends MediaTrackTransceiver\n */\n\nvar MediaTrackSender = function (_MediaTrackTransceive) {\n _inherits(MediaTrackSender, _MediaTrackTransceive);\n\n /**\n * Construct a {@link MediaTrackSender}.\n * @param {MediaStreamTrack} mediaStreamTrack\n */\n function MediaTrackSender(mediaStreamTrack) {\n _classCallCheck(this, MediaTrackSender);\n\n var _this = _possibleConstructorReturn(this, (MediaTrackSender.__proto__ || Object.getPrototypeOf(MediaTrackSender)).call(this, mediaStreamTrack.id, mediaStreamTrack));\n\n Object.defineProperties(_this, {\n _senders: {\n value: new Set()\n }\n });\n return _this;\n }\n\n /**\n * Return a new {@link MediaTrackSender} containing a clone of the underlying\n * MediaStreamTrack. No RTCRtpSenders are copied.\n * @returns {MediaTrackSender}\n */\n\n\n _createClass(MediaTrackSender, [{\n key: 'clone',\n value: function clone() {\n return new MediaTrackSender(this.track.clone());\n }\n\n /**\n * Add an RTCRtpSender.\n * @param {RTCRtpSender} sender\n * @returns {this}\n */\n\n }, {\n key: 'addSender',\n value: function addSender(sender) {\n this._senders.add(sender);\n return this;\n }\n\n /**\n * Remove an RTCRtpSender.\n * @param {RTCRtpSender} sender\n * @returns {this}\n */\n\n }, {\n key: 'removeSender',\n value: function removeSender(sender) {\n this._senders.delete(sender);\n return this;\n }\n }]);\n\n return MediaTrackSender;\n}(MediaTrackTransceiver);\n\nmodule.exports = MediaTrackSender;","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n}\n","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar LocalParticipantSignaling = require('../localparticipant');\nvar LocalTrackPublicationV2 = require('./localtrackpublication');\n\nvar _require = require('../../util'),\n isDeepEqual = _require.isDeepEqual;\n\n/**\n * @extends ParticipantSignaling\n * @property {BandwidthProfileOptions} bandwidthProfile\n * @property {NetworkQualityConfigurationImpl} networkQualityConfiguration\n * @property {number} revision\n * @emits LocalParticipantV2#updated\n */\n\n\nvar LocalParticipantV2 = function (_LocalParticipantSign) {\n _inherits(LocalParticipantV2, _LocalParticipantSign);\n\n /**\n * Construct a {@link LocalParticipantV2}.\n * @param {EncodingParametersImpl} encodingParameters\n * @param {NetworkQualityConfigurationImpl} networkQualityConfiguration\n * @param {object} [options]\n */\n function LocalParticipantV2(encodingParameters, networkQualityConfiguration, options) {\n _classCallCheck(this, LocalParticipantV2);\n\n options = Object.assign({\n LocalTrackPublicationV2: LocalTrackPublicationV2\n }, options);\n\n var _this = _possibleConstructorReturn(this, (LocalParticipantV2.__proto__ || Object.getPrototypeOf(LocalParticipantV2)).call(this));\n\n Object.defineProperties(_this, {\n _bandwidthProfile: {\n value: null,\n writable: true\n },\n _bandwidthProfileRevision: {\n value: 0,\n writable: true\n },\n _encodingParameters: {\n value: encodingParameters\n },\n _removeListeners: {\n value: new Map()\n },\n _LocalTrackPublicationV2: {\n value: options.LocalTrackPublicationV2\n },\n _publishedRevision: {\n writable: true,\n value: 0\n },\n _revision: {\n writable: true,\n value: 1\n },\n _signalingRegion: {\n value: null,\n writable: true\n },\n bandwidthProfile: {\n enumerable: true,\n get: function get() {\n return this._bandwidthProfile;\n }\n },\n bandwidthProfileRevision: {\n enumerable: true,\n get: function get() {\n return this._bandwidthProfileRevision;\n }\n },\n networkQualityConfiguration: {\n enumerable: true,\n value: networkQualityConfiguration\n },\n revision: {\n enumerable: true,\n get: function get() {\n return this._revision;\n }\n },\n signalingRegion: {\n enumerable: true,\n get: function get() {\n return this._signalingRegion;\n }\n }\n });\n return _this;\n }\n\n /**\n * Set the signalingRegion.\n * @param {string} signalingRegion.\n */\n\n\n _createClass(LocalParticipantV2, [{\n key: 'setSignalingRegion',\n value: function setSignalingRegion(signalingRegion) {\n if (!this._signalingRegion) {\n this._signalingRegion = signalingRegion;\n }\n }\n\n /**\n * Update the {@link BandwidthProfileOptions}.\n * @param {BandwidthProfileOptions} bandwidthProfile\n */\n\n }, {\n key: 'setBandwidthProfile',\n value: function setBandwidthProfile(bandwidthProfile) {\n if (!isDeepEqual(this._bandwidthProfile, bandwidthProfile)) {\n // NOTE(mmalavalli): Object.assign() copies the values of only\n // the top level properties. In order to deep copy the object, we\n // stringify and parse the object.\n this._bandwidthProfile = JSON.parse(JSON.stringify(bandwidthProfile));\n this._bandwidthProfileRevision++;\n this.didUpdate();\n }\n }\n\n /**\n * Set the {@link EncodingParameters}.\n * @param {?EncodingParameters} encodingParameters\n * @returns {this}\n */\n\n }, {\n key: 'setParameters',\n value: function setParameters(encodingParameters) {\n this._encodingParameters.update(encodingParameters);\n return this;\n }\n\n /**\n * Update the {@link LocalParticipantV2} with the new state.\n * @param {Published} published\n * @returns {this}\n */\n\n }, {\n key: 'update',\n value: function update(published) {\n if (this._publishedRevision >= published.revision) {\n return this;\n }\n\n this._publishedRevision = published.revision;\n\n published.tracks.forEach(function (publicationState) {\n var localTrackPublicationV2 = this.tracks.get(publicationState.id);\n if (localTrackPublicationV2) {\n localTrackPublicationV2.update(publicationState);\n }\n }, this);\n\n return this;\n }\n\n /**\n * @protected\n * @param {DataTrackSender|MediaTrackSender} trackSender\n * @param {string} name\n * @param {Track.Priority} priority\n * @returns {LocalTrackPublicationV2}\n */\n\n }, {\n key: '_createLocalTrackPublicationSignaling',\n value: function _createLocalTrackPublicationSignaling(trackSender, name, priority) {\n return new this._LocalTrackPublicationV2(trackSender, name, priority);\n }\n\n /**\n * Add a {@link LocalTrackPublicationV2} for the given {@link DataTrackSender}\n * or {@link MediaTrackSender} to the {@link LocalParticipantV2}.\n * @param {DataTrackSender|MediaTrackSender} trackSender\n * @param {string} name\n * @param {Track.Priority} priority\n * @returns {this}\n */\n\n }, {\n key: 'addTrack',\n value: function addTrack(trackSender, name, priority) {\n var _this2 = this;\n\n _get(LocalParticipantV2.prototype.__proto__ || Object.getPrototypeOf(LocalParticipantV2.prototype), 'addTrack', this).call(this, trackSender, name, priority);\n var publication = this.getPublication(trackSender);\n\n var isEnabled = publication.isEnabled,\n updatedPriority = publication.updatedPriority;\n\n\n var updated = function updated() {\n // NOTE(mmalavalli): The LocalParticipantV2's state is only published if\n // the \"updated\" event is emitted due to LocalTrackPublicationV2's\n // .isEnabled or .updatedPriority being changed. We do not publish if it is fired due to the\n // LocalTrackPublicationV2's .sid being set.\n if (isEnabled !== publication.isEnabled || updatedPriority !== publication.updatedPriority) {\n _this2.didUpdate();\n isEnabled = publication.isEnabled;\n updatedPriority = publication.updatedPriority;\n }\n };\n\n publication.on('updated', updated);\n\n this._removeListener(publication);\n this._removeListeners.set(publication, function () {\n return publication.removeListener('updated', updated);\n });\n\n this.didUpdate();\n\n return this;\n }\n\n /**\n * @private\n * @param {LocalTrackPublicationV2} publication\n * @returns {void}\n */\n\n }, {\n key: '_removeListener',\n value: function _removeListener(publication) {\n var removeListener = this._removeListeners.get(publication);\n if (removeListener) {\n removeListener();\n }\n }\n\n /**\n * Get the current state of the {@link LocalParticipantV2}.\n * @returns {object}\n */\n\n }, {\n key: 'getState',\n value: function getState() {\n return {\n revision: this.revision,\n tracks: Array.from(this.tracks.values()).map(function (track) {\n return track.getState();\n })\n };\n }\n\n /**\n * Increment the revision for the {@link LocalParticipantV2}.\n * @private\n * @returns {void}\n */\n\n }, {\n key: 'didUpdate',\n value: function didUpdate() {\n this._revision++;\n this.emit('updated');\n }\n\n /**\n * Remove the {@link LocalTrackPublicationV2} for the given {@link DataTrackSender}\n * or {@link MediaTrackSender} from the {@link LocalParticipantV2}.\n * @param {DataTrackSender|MediaTrackSender} trackSender\n * @returns {?LocalTrackPublicationV2}\n */\n\n }, {\n key: 'removeTrack',\n value: function removeTrack(trackSender) {\n var publication = _get(LocalParticipantV2.prototype.__proto__ || Object.getPrototypeOf(LocalParticipantV2.prototype), 'removeTrack', this).call(this, trackSender);\n if (publication) {\n this._removeListener(publication);\n this.didUpdate();\n }\n return publication;\n }\n\n /**\n * Updates the verbosity of network quality information.\n * @param {NetworkQualityConfiguration} networkQualityConfiguration\n * @returns {void}\n */\n\n }, {\n key: 'setNetworkQualityConfiguration',\n value: function setNetworkQualityConfiguration(networkQualityConfiguration) {\n this.networkQualityConfiguration.update(networkQualityConfiguration);\n }\n }]);\n\n return LocalParticipantV2;\n}(LocalParticipantSignaling);\n\n/**\n * @interface Published\n * @property {number} revision\n * @property {Array} tracks\n */\n\n/**\n * @typedef {CreatedTrack|ReadyTrack|FailedTrack} PublishedTrack\n */\n\n/**\n * @interface CreatedTrack\n * @property {Track.ID} id\n * @property {string} state - \"created\"\n */\n\n/**\n * @interface ReadyTrack\n * @property {Track.ID} id\n * @property {Track.SID} sid\n * @property {string} state - \"ready\"\n */\n\n/**\n * @interface FailedTrack\n * @property {Track.ID} id\n * @property {TrackError} error\n * @property {string} state - \"failed\"\n */\n\n/**\n * @interface TrackError\n * @property {number} code\n * @property {string} message\n */\n\n/**\n * @event LocalParticipantV2#updated\n */\n\nmodule.exports = LocalParticipantV2;","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar DataTrackTransceiver = require('./transceiver');\nvar makeUUID = require('../util').makeUUID;\n\n/**\n * A {@link DataTrackSender} represents a {@link DataTrackTransceiver} over\n * which data can be sent. Internally, it uses a collection of RTCDataChannels\n * to send data.\n * @extends DataTrackTransceiver\n */\n\nvar DataTrackSender = function (_DataTrackTransceiver) {\n _inherits(DataTrackSender, _DataTrackTransceiver);\n\n /**\n * Construct a {@link DataTrackSender}.\n * @param {?number} maxPacketLifeTime\n * @param {?number} maxRetransmits\n * @param {boolean} ordered\n */\n function DataTrackSender(maxPacketLifeTime, maxRetransmtis, ordered) {\n _classCallCheck(this, DataTrackSender);\n\n var _this = _possibleConstructorReturn(this, (DataTrackSender.__proto__ || Object.getPrototypeOf(DataTrackSender)).call(this, makeUUID(), maxPacketLifeTime, maxRetransmtis, ordered));\n\n Object.defineProperties(_this, {\n _clones: {\n value: new Set()\n },\n _dataChannels: {\n value: new Set()\n }\n });\n return _this;\n }\n\n /**\n * Add a cloned {@link DataTrackSender}.\n * @private\n * @returns {void}\n */\n\n\n _createClass(DataTrackSender, [{\n key: '_addClone',\n value: function _addClone(clone) {\n this._clones.add(clone);\n }\n\n /**\n * Remove a cloned {@link DataTrackSender}.\n * @private\n * @returns {void}\n */\n\n }, {\n key: '_removeClone',\n value: function _removeClone(clone) {\n this._clones.delete(clone);\n }\n\n /**\n * Add an RTCDataChannel to the {@link DataTrackSender}.\n * @param {RTCDataChannel} dataChannel\n * @returns {this}\n */\n\n }, {\n key: 'addDataChannel',\n value: function addDataChannel(dataChannel) {\n this._dataChannels.add(dataChannel);\n return this;\n }\n\n /**\n * Return a new {@link DataTrackSender}. Any message sent over this\n * {@link DataTrackSender} will also be sent over the clone. Whenever this\n * {@link DataTrackSender} is stopped, so to will the clone.\n * @returns {DataTrackSender}\n */\n\n }, {\n key: 'clone',\n value: function clone() {\n var _this2 = this;\n\n var clone = new DataTrackSender(this.maxPacketLifeTime, this.maxRetransmits, this.ordered);\n this._addClone(clone);\n clone.once('stopped', function () {\n return _this2._removeClone(clone);\n });\n return clone;\n }\n\n /**\n * Remove an RTCDataChannel from the {@link DataTrackSender}.\n * @param {RTCDataChannel} dataChannel\n * @returns {this}\n */\n\n }, {\n key: 'removeDataChannel',\n value: function removeDataChannel(dataChannel) {\n this._dataChannels.delete(dataChannel);\n return this;\n }\n\n /**\n * Send data over the {@link DataTrackSender}. Internally, this calls\n * send over each of the underlying RTCDataChannels.\n * @param {string|Blob|ArrayBuffer|ArrayBufferView} data\n * @returns {this}\n */\n\n }, {\n key: 'send',\n value: function send(data) {\n this._dataChannels.forEach(function (dataChannel) {\n try {\n dataChannel.send(data);\n } catch (error) {\n // Do nothing.\n }\n });\n this._clones.forEach(function (clone) {\n try {\n clone.send(data);\n } catch (error) {\n // Do nothing.\n }\n });\n return this;\n }\n }, {\n key: 'stop',\n value: function stop() {\n this._dataChannels.forEach(function (dataChannel) {\n return dataChannel.close();\n });\n this._clones.forEach(function (clone) {\n return clone.stop();\n });\n _get(DataTrackSender.prototype.__proto__ || Object.getPrototypeOf(DataTrackSender.prototype), 'stop', this).call(this);\n }\n }]);\n\n return DataTrackSender;\n}(DataTrackTransceiver);\n\nmodule.exports = DataTrackSender;","// Copyright (c) 2012 Mathieu Turcotte\n// Licensed under the MIT license.\n\nvar events = require('events');\nvar precond = require('precond');\nvar util = require('util');\n\nvar Backoff = require('./backoff');\nvar FibonacciBackoffStrategy = require('./strategy/fibonacci');\n\n// Wraps a function to be called in a backoff loop.\nfunction FunctionCall(fn, args, callback) {\n events.EventEmitter.call(this);\n\n precond.checkIsFunction(fn, 'Expected fn to be a function.');\n precond.checkIsArray(args, 'Expected args to be an array.');\n precond.checkIsFunction(callback, 'Expected callback to be a function.');\n\n this.function_ = fn;\n this.arguments_ = args;\n this.callback_ = callback;\n this.lastResult_ = [];\n this.numRetries_ = 0;\n\n this.backoff_ = null;\n this.strategy_ = null;\n this.failAfter_ = -1;\n this.retryPredicate_ = FunctionCall.DEFAULT_RETRY_PREDICATE_;\n\n this.state_ = FunctionCall.State_.PENDING;\n}\nutil.inherits(FunctionCall, events.EventEmitter);\n\n// States in which the call can be.\nFunctionCall.State_ = {\n // Call isn't started yet.\n PENDING: 0,\n // Call is in progress.\n RUNNING: 1,\n // Call completed successfully which means that either the wrapped function\n // returned successfully or the maximal number of backoffs was reached.\n COMPLETED: 2,\n // The call was aborted.\n ABORTED: 3\n};\n\n// The default retry predicate which considers any error as retriable.\nFunctionCall.DEFAULT_RETRY_PREDICATE_ = function(err) {\n return true;\n};\n\n// Checks whether the call is pending.\nFunctionCall.prototype.isPending = function() {\n return this.state_ == FunctionCall.State_.PENDING;\n};\n\n// Checks whether the call is in progress.\nFunctionCall.prototype.isRunning = function() {\n return this.state_ == FunctionCall.State_.RUNNING;\n};\n\n// Checks whether the call is completed.\nFunctionCall.prototype.isCompleted = function() {\n return this.state_ == FunctionCall.State_.COMPLETED;\n};\n\n// Checks whether the call is aborted.\nFunctionCall.prototype.isAborted = function() {\n return this.state_ == FunctionCall.State_.ABORTED;\n};\n\n// Sets the backoff strategy to use. Can only be called before the call is\n// started otherwise an exception will be thrown.\nFunctionCall.prototype.setStrategy = function(strategy) {\n precond.checkState(this.isPending(), 'FunctionCall in progress.');\n this.strategy_ = strategy;\n return this; // Return this for chaining.\n};\n\n// Sets the predicate which will be used to determine whether the errors\n// returned from the wrapped function should be retried or not, e.g. a\n// network error would be retriable while a type error would stop the\n// function call.\nFunctionCall.prototype.retryIf = function(retryPredicate) {\n precond.checkState(this.isPending(), 'FunctionCall in progress.');\n this.retryPredicate_ = retryPredicate;\n return this;\n};\n\n// Returns all intermediary results returned by the wrapped function since\n// the initial call.\nFunctionCall.prototype.getLastResult = function() {\n return this.lastResult_.concat();\n};\n\n// Returns the number of times the wrapped function call was retried.\nFunctionCall.prototype.getNumRetries = function() {\n return this.numRetries_;\n};\n\n// Sets the backoff limit.\nFunctionCall.prototype.failAfter = function(maxNumberOfRetry) {\n precond.checkState(this.isPending(), 'FunctionCall in progress.');\n this.failAfter_ = maxNumberOfRetry;\n return this; // Return this for chaining.\n};\n\n// Aborts the call.\nFunctionCall.prototype.abort = function() {\n if (this.isCompleted() || this.isAborted()) {\n return;\n }\n\n if (this.isRunning()) {\n this.backoff_.reset();\n }\n\n this.state_ = FunctionCall.State_.ABORTED;\n this.lastResult_ = [new Error('Backoff aborted.')];\n this.emit('abort');\n this.doCallback_();\n};\n\n// Initiates the call to the wrapped function. Accepts an optional factory\n// function used to create the backoff instance; used when testing.\nFunctionCall.prototype.start = function(backoffFactory) {\n precond.checkState(!this.isAborted(), 'FunctionCall is aborted.');\n precond.checkState(this.isPending(), 'FunctionCall already started.');\n\n var strategy = this.strategy_ || new FibonacciBackoffStrategy();\n\n this.backoff_ = backoffFactory ?\n backoffFactory(strategy) :\n new Backoff(strategy);\n\n this.backoff_.on('ready', this.doCall_.bind(this, true /* isRetry */));\n this.backoff_.on('fail', this.doCallback_.bind(this));\n this.backoff_.on('backoff', this.handleBackoff_.bind(this));\n\n if (this.failAfter_ > 0) {\n this.backoff_.failAfter(this.failAfter_);\n }\n\n this.state_ = FunctionCall.State_.RUNNING;\n this.doCall_(false /* isRetry */);\n};\n\n// Calls the wrapped function.\nFunctionCall.prototype.doCall_ = function(isRetry) {\n if (isRetry) {\n this.numRetries_++;\n }\n var eventArgs = ['call'].concat(this.arguments_);\n events.EventEmitter.prototype.emit.apply(this, eventArgs);\n var callback = this.handleFunctionCallback_.bind(this);\n this.function_.apply(null, this.arguments_.concat(callback));\n};\n\n// Calls the wrapped function's callback with the last result returned by the\n// wrapped function.\nFunctionCall.prototype.doCallback_ = function() {\n this.callback_.apply(null, this.lastResult_);\n};\n\n// Handles wrapped function's completion. This method acts as a replacement\n// for the original callback function.\nFunctionCall.prototype.handleFunctionCallback_ = function() {\n if (this.isAborted()) {\n return;\n }\n\n var args = Array.prototype.slice.call(arguments);\n this.lastResult_ = args; // Save last callback arguments.\n events.EventEmitter.prototype.emit.apply(this, ['callback'].concat(args));\n\n var err = args[0];\n if (err && this.retryPredicate_(err)) {\n this.backoff_.backoff(err);\n } else {\n this.state_ = FunctionCall.State_.COMPLETED;\n this.doCallback_();\n }\n};\n\n// Handles the backoff event by reemitting it.\nFunctionCall.prototype.handleBackoff_ = function(number, delay, err) {\n this.emit('backoff', number, delay, err);\n};\n\nmodule.exports = FunctionCall;\n","'use strict';\n\nvar asLocalTrack = require('./util').asLocalTrack;\nvar buildLogLevels = require('./util').buildLogLevels;\nvar getUserMedia = require('@twilio/webrtc').getUserMedia;\n\nvar _require = require('./media/track/es5'),\n LocalAudioTrack = _require.LocalAudioTrack,\n LocalDataTrack = _require.LocalDataTrack,\n LocalVideoTrack = _require.LocalVideoTrack;\n\nvar MediaStreamTrack = require('@twilio/webrtc').MediaStreamTrack;\nvar Log = require('./util/log');\nvar DEFAULT_LOG_LEVEL = require('./util/constants').DEFAULT_LOG_LEVEL;\nvar workaround180748 = require('./webaudio/workaround180748');\n\n// This is used to make out which createLocalTracks() call a particular Log\n// statement belongs to. Each call to createLocalTracks() increments this\n// counter.\nvar createLocalTrackCalls = 0;\n\n/**\n * Request {@link LocalTrack}s. By default, it requests a\n * {@link LocalAudioTrack} and a {@link LocalVideoTrack}.\n * @alias module:twilio-video.createLocalTracks\n * @param {CreateLocalTracksOptions} [options]\n * @returns {Promise>}\n * @example\n * var Video = require('twilio-video');\n * // Request audio and video tracks\n * Video.createLocalTracks().then(function(localTracks) {\n * var localMediaContainer = document.getElementById('local-media-container-id');\n * localTracks.forEach(function(track) {\n * localMediaContainer.appendChild(track.attach());\n * });\n * });\n * @example\n * var Video = require('twilio-video');\n * // Request just the default audio track\n * Video.createLocalTracks({ audio: true }).then(function(localTracks) {\n * return Video.connect('my-token', {\n * name: 'my-cool-room',\n * tracks: localTracks\n * });\n * });\n * @example\n * var Video = require('twilio-video');\n * // Request the audio and video tracks with custom names\n * Video.createLocalTracks({\n * audio: { name: 'microphone' },\n * video: { name: 'camera' }\n * }).then(function(localTracks) {\n * localTracks.forEach(function(localTrack) {\n * console.log(localTrack.name);\n * });\n * });\n */\nfunction createLocalTracks(options) {\n var isAudioVideoAbsent = !(options && ('audio' in options || 'video' in options));\n\n options = Object.assign({\n audio: isAudioVideoAbsent,\n getUserMedia: getUserMedia,\n logLevel: DEFAULT_LOG_LEVEL,\n LocalAudioTrack: LocalAudioTrack,\n LocalDataTrack: LocalDataTrack,\n LocalVideoTrack: LocalVideoTrack,\n MediaStreamTrack: MediaStreamTrack,\n Log: Log,\n video: isAudioVideoAbsent\n }, options);\n\n var logComponentName = '[createLocalTracks #' + ++createLocalTrackCalls + ']';\n var logLevels = buildLogLevels(options.logLevel);\n var log = new options.Log('default', logComponentName, logLevels);\n\n // NOTE(mmalavalli): The Room \"name\" in \"options\" was being used\n // as the LocalTrack name in asLocalTrack(). So we pass a copy of\n // \"options\" without the \"name\".\n var localTrackOptions = Object.assign({ log: log }, options);\n delete localTrackOptions.name;\n\n if (options.audio === false && options.video === false) {\n log.info('Neither audio nor video requested, so returning empty LocalTracks');\n return Promise.resolve([]);\n }\n\n if (options.tracks) {\n log.info('Adding user-provided LocalTracks');\n log.debug('LocalTracks:', options.tracks);\n return Promise.resolve(options.tracks);\n }\n\n var localTrackNameOptions = {\n audio: options.audio && options.audio.name ? { name: options.audio.name } : {},\n video: options.video && options.video.name ? { name: options.video.name } : {}\n };\n\n if (options.audio) {\n delete options.audio.name;\n }\n if (options.video) {\n delete options.video.name;\n }\n\n var mediaStreamConstraints = {\n audio: options.audio,\n video: options.video\n };\n\n var workaroundWebKitBug180748 = options.audio && options.audio.workaroundWebKitBug180748;\n\n var mediaStreamPromise = workaroundWebKitBug180748 ? workaround180748(log, options.getUserMedia, mediaStreamConstraints) : options.getUserMedia(mediaStreamConstraints);\n\n return mediaStreamPromise.then(function (mediaStream) {\n var mediaStreamTracks = mediaStream.getAudioTracks().concat(mediaStream.getVideoTracks());\n\n log.info('Call to getUserMedia successful; got MediaStreamTracks:', mediaStreamTracks);\n\n return mediaStreamTracks.map(function (mediaStreamTrack) {\n return asLocalTrack(mediaStreamTrack, Object.assign(localTrackNameOptions[mediaStreamTrack.kind], localTrackOptions));\n });\n }, function (error) {\n log.warn('Call to getUserMedia failed:', error);\n throw error;\n });\n}\n\n/**\n * {@link createLocalTracks} options\n * @typedef {object} CreateLocalTracksOptions\n * @property {boolean|CreateLocalTrackOptions} [audio=true] - Whether or not to\n * get local audio with getUserMedia when tracks\n * are not provided.\n * @property {LogLevel|LogLevels} [logLevel='warn'] - Set the log verbosity\n * of logging to console. Passing a {@link LogLevel} string will use the same\n * level for all components. Pass a {@link LogLevels} to set specific log\n * levels.\n * @property {boolean|CreateLocalTrackOptions} [video=true] - Whether or not to\n * get local video with getUserMedia when tracks\n * are not provided.\n */\n\nmodule.exports = createLocalTracks;","'use strict';\n\nvar RTCSessionDescription = require('@twilio/webrtc').RTCSessionDescription;\n\nvar createPtToCodecName = require('./').createPtToCodecName;\nvar getMediaSections = require('./').getMediaSections;\n\n/**\n * An RTX payload type\n * @typedef {PT} RtxPT\n */\n\n/**\n * A non-RTX payload type\n * @typedef {PT} NonRtxPT\n */\n\n/**\n * A Set with at least one element\n * @typedef {Set} NonEmptySet\n */\n\n/**\n * Apply the workaround for Issue 8329 to an RTCSessionDescriptionInit.\n * @param {RTCSessionDescriptionInit} description\n * @returns {RTCSessionDescription} newDescription\n */\nfunction workaround(description) {\n var descriptionInit = { type: description.type };\n if (description.type !== 'rollback') {\n descriptionInit.sdp = sdpWorkaround(description.sdp);\n }\n return new RTCSessionDescription(descriptionInit);\n}\n\n/**\n * @param {string} sdp\n * @returns {string} newSdp\n */\nfunction sdpWorkaround(sdp) {\n var mediaSections = getMediaSections(sdp);\n var session = sdp.split('\\r\\nm=')[0];\n return [session].concat(mediaSections.map(mediaSectionWorkaround)).join('\\r\\n');\n}\n\n/**\n * @param {string} mediaSection\n * @returns {string} newMediaSection\n */\nfunction mediaSectionWorkaround(mediaSection) {\n var ptToCodecName = createPtToCodecName(mediaSection);\n mediaSection = deleteDuplicateRtxPts(mediaSection, ptToCodecName);\n var codecNameToPts = createCodecNameToPts(ptToCodecName);\n var rtxPts = codecNameToPts.get('rtx') || new Set();\n\n var invalidRtxPts = new Set();\n var rtxPtToAssociatedPt = createRtxPtToAssociatedPt(mediaSection, ptToCodecName, rtxPts, invalidRtxPts);\n var associatedPtToRtxPt = createAssociatedPtToRtxPt(rtxPtToAssociatedPt, invalidRtxPts);\n\n var unassociatedRtxPts = Array.from(invalidRtxPts);\n\n // NOTE(mroberts): We normalize to lowercase.\n var knownCodecNames = ['h264', 'vp8', 'vp9'];\n var unassociatedPts = knownCodecNames.reduce(function (unassociatedPts, codecName) {\n var pts = codecNameToPts.get(codecName) || new Set();\n return Array.from(pts).reduce(function (unassociatedPts, pt) {\n return associatedPtToRtxPt.has(pt) ? unassociatedPts : unassociatedPts.add(pt);\n }, unassociatedPts);\n }, new Set());\n\n unassociatedPts.forEach(function (pt) {\n if (unassociatedRtxPts.length) {\n var rtxPt = unassociatedRtxPts.shift();\n mediaSection = deleteFmtpAttributesForRtxPt(mediaSection, rtxPt);\n mediaSection = addFmtpAttributeForRtxPt(mediaSection, rtxPt, pt);\n }\n });\n\n unassociatedRtxPts.forEach(function (rtxPt) {\n mediaSection = deleteFmtpAttributesForRtxPt(mediaSection, rtxPt);\n mediaSection = deleteRtpmapAttributesForRtxPt(mediaSection, rtxPt);\n });\n\n return mediaSection;\n}\n\n/**\n * @param {string} mediaSection\n * @param {Map} ptToCodecName\n * @returns {string} newMediaSection\n */\nfunction deleteDuplicateRtxPts(mediaSection, ptToCodecName) {\n // NOTE(syerrapragada): In some cases Chrome produces an offer/answer\n // with duplicate \"rtx\" payload mapping in media section. When applied,\n // Chrome rejects the SDP. We workaround this by deleting duplicate\n // \"rtx\" mappings found in SDP.\n return Array.from(ptToCodecName.keys()).reduce(function (section, pt) {\n var rtpmapRegex = new RegExp('^a=rtpmap:' + pt + ' rtx.+$', 'gm');\n return (section.match(rtpmapRegex) || []).slice(ptToCodecName.get(pt) === 'rtx' ? 1 : 0).reduce(function (section, rtpmap) {\n var rtpmapRegex = new RegExp('\\r\\n' + rtpmap);\n var fmtpmapRegex = new RegExp('\\r\\na=fmtp:' + pt + ' apt=[0-9]+');\n return section.replace(rtpmapRegex, '').replace(fmtpmapRegex, '');\n }, section);\n }, mediaSection);\n}\n\n/**\n * @param {Map} ptToCodecName\n * @returns {Map>} codecNameToPts\n */\nfunction createCodecNameToPts(ptToCodecName) {\n var codecNameToPts = new Map();\n ptToCodecName.forEach(function (codecName, pt) {\n var pts = codecNameToPts.get(codecName) || new Set();\n return codecNameToPts.set(codecName, pts.add(pt));\n });\n return codecNameToPts;\n}\n\n/**\n * @param {string} mediaSection\n * @param {Map} ptToCodecName\n * @param {Set} rtxPts\n * @param {Set} invalidRtxPts\n * @returns {Map} rtxPtToAssociatedPt\n */\nfunction createRtxPtToAssociatedPt(mediaSection, ptToCodecName, rtxPts, invalidRtxPts) {\n return Array.from(rtxPts).reduce(function (rtxPtToAssociatedPt, rtxPt) {\n var fmtpPattern = new RegExp('a=fmtp:' + rtxPt + ' apt=(\\\\d+)');\n var matches = mediaSection.match(fmtpPattern);\n if (!matches) {\n invalidRtxPts.add(rtxPt);\n return rtxPtToAssociatedPt;\n }\n\n var pt = Number.parseInt(matches[1]);\n if (!ptToCodecName.has(pt)) {\n // This is Issue 8329.\n invalidRtxPts.add(rtxPt);\n return rtxPtToAssociatedPt;\n }\n\n var codecName = ptToCodecName.get(pt);\n if (codecName === 'rtx') {\n // Strange\n invalidRtxPts.add(rtxPt);\n return rtxPtToAssociatedPt;\n }\n\n return rtxPtToAssociatedPt.set(rtxPt, pt);\n }, new Map());\n}\n\n/**\n * @param {string} mediaSection\n * @param {Map} rtxPtToAssociatedPt\n * @param {Set} invalidRtxPts\n * @returns {Map} associatedPtToRtxPt\n */\nfunction createAssociatedPtToRtxPt(rtxPtToAssociatedPt, invalidRtxPts) {\n // First, we construct a Map>.\n var associatedPtToRtxPts = Array.from(rtxPtToAssociatedPt).reduce(function (associatedPtToRtxPts, pair) {\n var rtxPt = pair[0];\n var pt = pair[1];\n var rtxPts = associatedPtToRtxPts.get(pt) || new Set();\n return associatedPtToRtxPts.set(pt, rtxPts.add(rtxPt));\n }, new Map());\n\n // Then, we filter down to a Map. Any RtxPTs that map to the\n // same NonRtxPT are removed and added to invalidRtxPts.\n return Array.from(associatedPtToRtxPts).reduce(function (associatedPtToRtxPt, pair) {\n var pt = pair[0];\n var rtxPts = Array.from(pair[1]);\n if (rtxPts.length > 1) {\n rtxPts.forEach(function (rtxPt) {\n invalidRtxPts.add(rtxPt);\n });\n return associatedPtToRtxPt;\n }\n return associatedPtToRtxPt.set(pt, rtxPts[0]);\n }, new Map());\n}\n\n/**\n * @param {string} mediaSection\n * @param {RtxPT} rtxPt\n * @returns {string} newMediaSection\n */\nfunction deleteFmtpAttributesForRtxPt(mediaSection, rtxPt) {\n var pattern = new RegExp('a=fmtp:' + rtxPt + '.*\\r\\n', 'gm');\n return mediaSection.replace(pattern, '');\n}\n\n/**\n * @param {string} mediaSection\n * @param {RtxPT} rtxPt\n * @returns {string} newMediaSection\n */\nfunction deleteRtpmapAttributesForRtxPt(mediaSection, rtxPt) {\n var pattern = new RegExp('a=rtpmap:' + rtxPt + '.*\\r\\n', 'gm');\n return mediaSection.replace(pattern, '');\n}\n\n/**\n * @param {string} mediaSection\n * @param {RtxPT} rtxPt\n * @param {NonRtxPT} pt\n * @returns {string} newMediaSection\n */\nfunction addFmtpAttributeForRtxPt(mediaSection, rtxPt, pt) {\n return mediaSection.endsWith('\\r\\n') ? mediaSection + 'a=fmtp:' + rtxPt + ' apt=' + pt + '\\r\\n' : mediaSection + '\\r\\na=fmtp:' + rtxPt + ' apt=' + pt;\n}\n\nmodule.exports = workaround;","// eslint-disable-next-line no-warning-comments\n// TODO(mroberts): Remove this when we go to the next major version. This is\n// only in place so that we can support ES6 classes without requiring `new`.\n'use strict';\n\nvar _require = require('util'),\n inherits = _require.inherits;\n\nvar LocalDataTrackClass = require('../localdatatrack');\n\nfunction LocalDataTrack(options) {\n var track = new LocalDataTrackClass(options);\n Object.setPrototypeOf(track, LocalDataTrack.prototype);\n return track;\n}\n\ninherits(LocalDataTrack, LocalDataTrackClass);\n\nmodule.exports = LocalDataTrack;","'use strict';\n\n/**\n * @extends Error\n * @property {number} code - Error code\n */\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar TwilioError = function (_Error) {\n _inherits(TwilioError, _Error);\n\n /**\n * Creates a new {@link TwilioError}\n * @param {number} code - Error code\n * @param {string} [message] - Error message\n * @param {string} [fileName] - Name of the script file where error was generated\n * @param {number} [lineNumber] - Line number of the script file where error was generated\n */\n function TwilioError(code) {\n var _ref;\n\n _classCallCheck(this, TwilioError);\n\n var args = [].slice.call(arguments, 1);\n\n var _this = _possibleConstructorReturn(this, (_ref = TwilioError.__proto__ || Object.getPrototypeOf(TwilioError)).call.apply(_ref, [this].concat(_toConsumableArray(args))));\n\n var error = Error.apply(_this, args);\n error.name = 'TwilioError';\n\n Object.defineProperty(_this, 'code', {\n value: code,\n enumerable: true\n });\n\n Object.getOwnPropertyNames(error).forEach(function (prop) {\n Object.defineProperty(this, prop, {\n value: error[prop],\n enumerable: true\n });\n }, _this);\n return _this;\n }\n\n /**\n * Returns human readable string describing the error.\n * @returns {string}\n */\n\n\n _createClass(TwilioError, [{\n key: 'toString',\n value: function toString() {\n var message = this.message ? ': ' + this.message : '';\n return this.name + ' ' + this.code + message;\n }\n }]);\n\n return TwilioError;\n}(Error);\n\nmodule.exports = TwilioError;","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=style&index=0&lang=css&\"","'use strict';\n\n/**\n * @property {number} [availableSend] - bps (undefined in Firefox)\n * @property {number} recv - bps\n * @property {number} [rtt] - s (undefined in Firefox)\n * @property {number} send - bps\n */\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar IceReport = function () {\n /**\n * Construct an {@link IceReport}.\n * @param {number} send - bps\n * @param {number} recv - bps\n * @param {number} [rtt] - s\n * @param {number} [availableSend] - bps\n */\n function IceReport(send, recv, availableSend, rtt) {\n _classCallCheck(this, IceReport);\n\n Object.defineProperties(this, {\n availableSend: {\n enumerable: true,\n value: availableSend\n },\n recv: {\n enumerable: true,\n value: recv\n },\n rtt: {\n enumerable: true,\n value: rtt\n },\n send: {\n enumerable: true,\n value: send\n }\n });\n }\n\n /**\n * @param {RTCStats} olderStats\n * @param {RTCStats} newerStats\n * @returns {IceReport}\n */\n\n\n _createClass(IceReport, null, [{\n key: 'of',\n value: function of(olderStats, newerStats) {\n var secondsElapsed = (newerStats.timestamp - olderStats.timestamp) / 1000;\n var deltaBytesSent = newerStats.bytesSent - olderStats.bytesSent;\n var deltaBytesReceived = newerStats.bytesReceived - olderStats.bytesReceived;\n var send = secondsElapsed > 0 ? deltaBytesSent / secondsElapsed * 8 : 0;\n var recv = secondsElapsed > 0 ? deltaBytesReceived / secondsElapsed * 8 : 0;\n var availableSend = newerStats.availableOutgoingBitrate,\n rtt = newerStats.currentRoundTripTime;\n\n return new IceReport(send, recv, availableSend, rtt);\n }\n }]);\n\n return IceReport;\n}();\n\nmodule.exports = IceReport;","/* eslint new-cap:0, no-console:0 */\n'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar constants = require('./constants');\nvar DEFAULT_LOG_LEVEL = constants.DEFAULT_LOG_LEVEL;\nvar E = require('./constants').typeErrors;\n\nvar deprecationWarningsByComponentConstructor = void 0;\n\nfunction getDeprecationWarnings(componentConstructor) {\n deprecationWarningsByComponentConstructor = deprecationWarningsByComponentConstructor || new Map();\n if (deprecationWarningsByComponentConstructor.has(componentConstructor)) {\n return deprecationWarningsByComponentConstructor.get(componentConstructor);\n }\n var deprecationWarnings = new Set();\n deprecationWarningsByComponentConstructor.set(componentConstructor, deprecationWarnings);\n return deprecationWarnings;\n}\n\n/**\n * Selectively outputs messages to console.log based on specified minimum module\n * specific log levels.\n *\n * NOTE: The values in the logLevels object passed to the constructor is changed\n * by subsequent calls to {@link Log#setLevels}.\n */\n\nvar Log = function () {\n /**\n * Construct a new {@link Log} object.\n * @param {String} moduleName - Name of the logging module (webrtc/media/signaling)\n * @param {object} component - Component owning this instance of {@link Log}\n * @param {LogLevels} logLevels - Logging levels. See {@link LogLevels}\n */\n function Log(moduleName, component, logLevels) {\n _classCallCheck(this, Log);\n\n if (typeof moduleName !== 'string') {\n throw E.INVALID_TYPE('moduleName', 'string');\n }\n\n if (!component) {\n throw E.REQUIRED_ARGUMENT('component');\n }\n\n if ((typeof logLevels === 'undefined' ? 'undefined' : _typeof(logLevels)) !== 'object') {\n logLevels = {};\n }\n\n validateLogLevels(logLevels);\n\n /* istanbul ignore next */\n Object.defineProperties(this, {\n _component: {\n value: component\n },\n _logLevels: {\n value: logLevels\n },\n _warnings: {\n value: new Set()\n },\n logLevel: {\n get: function get() {\n return Log.getLevelByName(logLevels[moduleName] || DEFAULT_LOG_LEVEL);\n }\n },\n name: { get: component.toString.bind(component) }\n });\n }\n\n /**\n * Get the log level (number) by its name (string)\n * @param {String} name - Name of the log level\n * @returns {Number} Requested log level\n * @throws {TwilioError} INVALID_LOG_LEVEL (32056)\n * @public\n */\n\n\n _createClass(Log, [{\n key: 'createLog',\n\n\n /**\n * Create a child {@link Log} instance with this._logLevels\n * @param moduleName - Name of the logging module\n * @param component - Component owning this instance of {@link Log}\n * @returns {Log} this\n */\n value: function createLog(moduleName, component) {\n return new Log(moduleName, component, this._logLevels);\n }\n\n /**\n * Set new log levels.\n * This changes the levels for all its ancestors,\n * siblings, and children and descendants instances of {@link Log}.\n * @param {LogLevels} levels - New log levels\n * @throws {TwilioError} INVALID_ARGUMENT\n * @returns {Log} this\n */\n\n }, {\n key: 'setLevels',\n value: function setLevels(levels) {\n validateLogLevels(levels);\n Object.assign(this._logLevels, levels);\n return this;\n }\n\n /**\n * Log a message using the console method appropriate for the specified logLevel\n * @param {Number} logLevel - Log level of the message being logged\n * @param {String} message - Message(s) to log\n * @returns {Log} This instance of {@link Log}\n * @public\n */\n\n }, {\n key: 'log',\n value: function log(logLevel, message) {\n var logSpec = Log._levels[logLevel];\n // eslint-disable-next-line no-use-before-define\n if (!logSpec) {\n throw E.INVALID_VALUE('logLevel', LOG_LEVEL_VALUES);\n }\n\n if (this.logLevel <= logLevel) {\n var levelName = logSpec.name;\n var prefix = new Date().toISOString().split('T').concat(['|', levelName, 'in', this.name + ':']);\n logSpec.logFn.apply(console, prefix.concat(message));\n }\n\n return this;\n }\n\n /**\n * Log a debug message using console.log\n * @param {...String} messages - Message(s) to pass to console.log\n * @returns {Log} This instance of {@link Log}\n * @public\n */\n\n }, {\n key: 'debug',\n value: function debug() {\n return this.log(Log.DEBUG, [].slice.call(arguments));\n }\n\n /**\n * Log a deprecation warning. Deprecation warnings are logged as warnings and\n * they are only ever logged once.\n * @param {String} deprecationWarning - The deprecation warning\n * @returns {Log} This instance of {@link Log}\n * @public\n */\n\n }, {\n key: 'deprecated',\n value: function deprecated(deprecationWarning) {\n var deprecationWarnings = getDeprecationWarnings(this._component.constructor);\n if (deprecationWarnings.has(deprecationWarning)) {\n return this;\n }\n deprecationWarnings.add(deprecationWarning);\n return this.warn(deprecationWarning);\n }\n\n /**\n * Log an info message using console.info\n * @param {...String} messages - Message(s) to pass to console.info\n * @returns {Log} This instance of {@link Log}\n * @public\n */\n\n }, {\n key: 'info',\n value: function info() {\n return this.log(Log.INFO, [].slice.call(arguments));\n }\n\n /**\n * Log a warn message using console.warn\n * @param {...String} messages - Message(s) to pass to console.warn\n * @returns {Log} This instance of {@link Log}\n * @public\n */\n\n }, {\n key: 'warn',\n value: function warn() {\n return this.log(Log.WARN, [].slice.call(arguments));\n }\n\n /**\n * Log a warning once.\n * @param {String} warning\n * @returns {Log} This instance of {@link Log}\n * @public\n */\n\n }, {\n key: 'warnOnce',\n value: function warnOnce(warning) {\n if (this._warnings.has(warning)) {\n return this;\n }\n this._warnings.add(warning);\n return this.warn(warning);\n }\n\n /**\n * Log an error message using console.error\n * @param {...String} messages - Message(s) to pass to console.error\n * @returns {Log} This instance of {@link Log}\n * @public\n */\n\n }, {\n key: 'error',\n value: function error() {\n return this.log(Log.ERROR, [].slice.call(arguments));\n }\n\n /**\n * Log an error message using console.error and throw an exception\n * @param {TwilioError} error - Error to throw\n * @param {String} customMessage - Custom message for the error\n * @public\n */\n\n }, {\n key: 'throw',\n value: function _throw(error, customMessage) {\n if (error.clone) {\n error = error.clone(customMessage);\n }\n\n this.log(Log.ERROR, error);\n throw error;\n }\n }], [{\n key: 'getLevelByName',\n value: function getLevelByName(name) {\n if (!isNaN(name)) {\n return parseInt(name, 10);\n }\n name = name.toUpperCase();\n validateLogLevel(name);\n return Log[name];\n }\n }]);\n\n return Log;\n}();\n\n// Singleton Constants\n/* eslint key-spacing:0 */\n/* istanbul ignore next */\n\n\nObject.defineProperties(Log, {\n DEBUG: { value: 0 },\n INFO: { value: 1 },\n WARN: { value: 2 },\n ERROR: { value: 3 },\n OFF: { value: 4 },\n _levels: {\n value: [{ name: 'DEBUG', logFn: console.log }, { name: 'INFO', logFn: console.info }, { name: 'WARN', logFn: console.warn }, { name: 'ERROR', logFn: console.error }, { name: 'OFF', logFn: function noop() {} }]\n }\n});\n\nvar LOG_LEVELS_SET = {};\nvar LOG_LEVEL_VALUES = [];\n\nvar LOG_LEVEL_NAMES = Log._levels.map(function (level, i) {\n LOG_LEVELS_SET[level.name] = true;\n LOG_LEVEL_VALUES.push(i);\n return level.name;\n});\n\nfunction validateLogLevel(level) {\n if (!(level in LOG_LEVELS_SET)) {\n throw E.INVALID_VALUE('level', LOG_LEVEL_NAMES);\n }\n}\n\nfunction validateLogLevels(levels) {\n Object.keys(levels).forEach(function (moduleName) {\n validateLogLevel(levels[moduleName].toUpperCase());\n });\n}\n\nmodule.exports = Log;","'use strict';\n\n/**\n * Return a Promise that resolves after `timeout` milliseconds.\n * @param {?number} [timeout=0]\n * @returns {Promise}\n */\n\nfunction delay(timeout) {\n timeout = typeof timeout === 'number' ? timeout : 0;\n return new Promise(function (resolve) {\n return setTimeout(resolve, timeout);\n });\n}\n\n/**\n * Attempt to detect silence. The Promise returned by this function returns\n * false as soon as audio is detected or true after `timeout` milliseconds.\n * @param {AudioContext} audioContext\n * @param {MediaStream} stream\n * @param {?number} [timeout=250]\n * @returns {Promise}\n */\nfunction detectSilence(audioContext, stream, timeout) {\n timeout = typeof timeout === 'number' ? timeout : 250;\n\n var source = audioContext.createMediaStreamSource(stream);\n var analyser = audioContext.createAnalyser();\n analyser.fftSize = 2048;\n source.connect(analyser);\n\n var samples = new Uint8Array(analyser.fftSize);\n\n var timeoutDidFire = false;\n setTimeout(function () {\n timeoutDidFire = true;\n }, timeout);\n\n /**\n * We can't use async/await yet, so I need to factor this out.\n * @returns {Promise}\n */\n function doDetectSilence() {\n if (timeoutDidFire) {\n return Promise.resolve(true);\n }\n analyser.getByteTimeDomainData(samples);\n return samples.some(function (sample) {\n return sample;\n }) ? Promise.resolve(false) : delay().then(doDetectSilence);\n }\n\n return doDetectSilence().then(function (isSilent) {\n source.disconnect();\n return isSilent;\n }, function (error) {\n source.disconnect();\n throw error;\n });\n}\n\nmodule.exports = detectSilence;","'use strict';\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar EventEmitter = require('./eventemitter');\nvar RemoteAudioTrack = require('./media/track/remoteaudiotrack');\nvar RemoteAudioTrackPublication = require('./media/track/remoteaudiotrackpublication');\nvar RemoteDataTrack = require('./media/track/remotedatatrack');\nvar RemoteDataTrackPublication = require('./media/track/remotedatatrackpublication');\nvar RemoteVideoTrack = require('./media/track/remotevideotrack');\nvar RemoteVideoTrackPublication = require('./media/track/remotevideotrackpublication');\nvar util = require('./util');\n\nvar nInstances = 0;\n\n/**\n * {@link NetworkQualityLevel} is a value from 0–5, inclusive, representing the\n * quality of a network connection.\n * @typedef {number} NetworkQualityLevel\n */\n\n/**\n * @extends EventEmitter\n * @property {Map} audioTracks -\n * The {@link Participant}'s {@link AudioTrackPublication}s\n * @property {Map} dataTracks -\n * The {@link Participant}'s {@link DataTrackPublication}s.\n * @property {Participant.Identity} identity - The identity of the {@link Participant}\n * @property {?NetworkQualityLevel} networkQualityLevel - The\n * {@link Participant}'s current {@link NetworkQualityLevel}, if any\n * @property {?NetworkQualityStats} networkQualityStats - The\n * {@link Participant}'s current {@link NetworkQualityStats}, if any\n * @property {Participant.SID} sid - The {@link Participant}'s SID\n * @property {string} state - \"connected\", \"disconnected\" or \"reconnecting\"\n * @property {Map} tracks -\n * The {@link Participant}'s {@link TrackPublication}s\n * @property {Map} videoTracks -\n * The {@link Participant}'s {@link VideoTrackPublication}s\n * @emits Participant#disconnected\n * @emits Participant#networkQualityLevelChanged\n * @emits Participant#reconnected\n * @emits Participant#reconnecting\n * @emits Participant#trackDimensionsChanged\n * @emits Participant#trackStarted\n */\n\nvar Participant = function (_EventEmitter) {\n _inherits(Participant, _EventEmitter);\n\n /**\n * Construct a {@link Participant}.\n * @param {ParticipantSignaling} signaling\n * @param {object} [options]\n */\n function Participant(signaling, options) {\n _classCallCheck(this, Participant);\n\n var _this = _possibleConstructorReturn(this, (Participant.__proto__ || Object.getPrototypeOf(Participant)).call(this));\n\n options = Object.assign({\n RemoteAudioTrack: RemoteAudioTrack,\n RemoteAudioTrackPublication: RemoteAudioTrackPublication,\n RemoteDataTrack: RemoteDataTrack,\n RemoteDataTrackPublication: RemoteDataTrackPublication,\n RemoteVideoTrack: RemoteVideoTrack,\n RemoteVideoTrackPublication: RemoteVideoTrackPublication,\n tracks: []\n }, options);\n\n var indexed = indexTracksById(options.tracks);\n var log = options.log.createLog('default', _this);\n var audioTracks = new Map(indexed.audioTracks);\n var dataTracks = new Map(indexed.dataTracks);\n var tracks = new Map(indexed.tracks);\n var videoTracks = new Map(indexed.videoTracks);\n\n Object.defineProperties(_this, {\n _RemoteAudioTrack: {\n value: options.RemoteAudioTrack\n },\n _RemoteAudioTrackPublication: {\n value: options.RemoteAudioTrackPublication\n },\n _RemoteDataTrack: {\n value: options.RemoteDataTrack\n },\n _RemoteDataTrackPublication: {\n value: options.RemoteDataTrackPublication\n },\n _RemoteVideoTrack: {\n value: options.RemoteVideoTrack\n },\n _RemoteVideoTrackPublication: {\n value: options.RemoteVideoTrackPublication\n },\n _audioTracks: {\n value: audioTracks\n },\n _dataTracks: {\n value: dataTracks\n },\n _instanceId: {\n value: ++nInstances\n },\n _log: {\n value: log\n },\n _signaling: {\n value: signaling\n },\n _tracks: {\n value: tracks\n },\n _trackEventReemitters: {\n value: new Map()\n },\n _trackPublicationEventReemitters: {\n value: new Map()\n },\n _trackSignalingUpdatedEventCallbacks: {\n value: new Map()\n },\n _videoTracks: {\n value: videoTracks\n },\n audioTracks: {\n enumerable: true,\n value: new Map()\n },\n dataTracks: {\n enumerable: true,\n value: new Map()\n },\n identity: {\n enumerable: true,\n get: function get() {\n return signaling.identity;\n }\n },\n networkQualityLevel: {\n enumerable: true,\n get: function get() {\n return signaling.networkQualityLevel;\n }\n },\n networkQualityStats: {\n enumerable: true,\n get: function get() {\n return signaling.networkQualityStats;\n }\n },\n sid: {\n enumerable: true,\n get: function get() {\n return signaling.sid;\n }\n },\n state: {\n enumerable: true,\n get: function get() {\n return signaling.state;\n }\n },\n tracks: {\n enumerable: true,\n value: new Map()\n },\n videoTracks: {\n enumerable: true,\n value: new Map()\n }\n });\n\n _this._tracks.forEach(reemitTrackEvents.bind(null, _this));\n signaling.on('networkQualityLevelChanged', function () {\n return _this.emit('networkQualityLevelChanged', _this.networkQualityLevel, _this.networkQualityStats && (_this.networkQualityStats.audio || _this.networkQualityStats.video) ? _this.networkQualityStats : null);\n });\n reemitSignalingStateChangedEvents(_this, signaling);\n log.info('Created a new Participant' + (_this.identity ? ': ' + _this.identity : ''));\n return _this;\n }\n\n /**\n * Get the {@link RemoteTrack} events to re-emit.\n * @private\n * @returns {Array>} events\n */\n\n\n _createClass(Participant, [{\n key: '_getTrackEvents',\n value: function _getTrackEvents() {\n return [['dimensionsChanged', 'trackDimensionsChanged'], ['message', 'trackMessage'], ['started', 'trackStarted']];\n }\n\n /**\n * @private\n */\n\n }, {\n key: '_getTrackPublicationEvents',\n value: function _getTrackPublicationEvents() {\n return [];\n }\n }, {\n key: 'toString',\n value: function toString() {\n return '[Participant #' + this._instanceId + ': ' + this.sid + ']';\n }\n\n /**\n * @private\n * @param {RemoteTrack} track\n * @param {Track.ID} id\n * @returns {?RemoteTrack}\n */\n\n }, {\n key: '_addTrack',\n value: function _addTrack(track, id) {\n var log = this._log;\n if (this._tracks.has(id)) {\n return null;\n }\n this._tracks.set(id, track);\n\n var tracksByKind = {\n audio: this._audioTracks,\n video: this._videoTracks,\n data: this._dataTracks\n }[track.kind];\n tracksByKind.set(id, track);\n reemitTrackEvents(this, track, id);\n\n log.info('Added a new ' + util.trackClass(track) + ':', id);\n log.debug(util.trackClass(track) + ':', track);\n\n return track;\n }\n\n /**\n * @private\n * @param {RemoteTrackPublication} publication\n * @returns {?RemoteTrackPublication}\n */\n\n }, {\n key: '_addTrackPublication',\n value: function _addTrackPublication(publication) {\n var log = this._log;\n if (this.tracks.has(publication.trackSid)) {\n return null;\n }\n this.tracks.set(publication.trackSid, publication);\n\n var trackPublicationsByKind = {\n audio: this.audioTracks,\n data: this.dataTracks,\n video: this.videoTracks\n }[publication.kind];\n trackPublicationsByKind.set(publication.trackSid, publication);\n reemitTrackPublicationEvents(this, publication);\n\n log.info('Added a new ' + util.trackPublicationClass(publication) + ':', publication.trackSid);\n log.debug(util.trackPublicationClass(publication) + ':', publication);\n return publication;\n }\n\n /**\n * @private\n */\n\n }, {\n key: '_handleTrackSignalingEvents',\n value: function _handleTrackSignalingEvents() {\n var log = this._log;\n var self = this;\n\n if (this.state === 'disconnected') {\n return;\n }\n\n var RemoteAudioTrack = this._RemoteAudioTrack;\n var RemoteAudioTrackPublication = this._RemoteAudioTrackPublication;\n var RemoteVideoTrack = this._RemoteVideoTrack;\n var RemoteVideoTrackPublication = this._RemoteVideoTrackPublication;\n var RemoteDataTrack = this._RemoteDataTrack;\n var RemoteDataTrackPublication = this._RemoteDataTrackPublication;\n var participantSignaling = this._signaling;\n\n function trackSignalingAdded(signaling) {\n var RemoteTrackPublication = {\n audio: RemoteAudioTrackPublication,\n data: RemoteDataTrackPublication,\n video: RemoteVideoTrackPublication\n }[signaling.kind];\n\n var publication = new RemoteTrackPublication(signaling, { log: log });\n self._addTrackPublication(publication);\n\n var isSubscribed = signaling.isSubscribed;\n if (isSubscribed) {\n trackSignalingSubscribed(signaling);\n }\n\n self._trackSignalingUpdatedEventCallbacks.set(signaling.sid, function () {\n if (isSubscribed !== signaling.isSubscribed) {\n isSubscribed = signaling.isSubscribed;\n if (isSubscribed) {\n trackSignalingSubscribed(signaling);\n return;\n }\n trackSignalingUnsubscribed(signaling);\n }\n });\n signaling.on('updated', self._trackSignalingUpdatedEventCallbacks.get(signaling.sid));\n }\n\n function trackSignalingRemoved(signaling) {\n if (signaling.isSubscribed) {\n signaling.setTrackTransceiver(null);\n }\n var updated = self._trackSignalingUpdatedEventCallbacks.get(signaling.sid);\n if (updated) {\n signaling.removeListener('updated', updated);\n self._trackSignalingUpdatedEventCallbacks.delete(signaling.sid);\n }\n var publication = self.tracks.get(signaling.sid);\n if (publication) {\n self._removeTrackPublication(publication);\n }\n }\n\n function trackSignalingSubscribed(signaling) {\n var isEnabled = signaling.isEnabled,\n name = signaling.name,\n kind = signaling.kind,\n sid = signaling.sid,\n trackTransceiver = signaling.trackTransceiver;\n\n var RemoteTrack = {\n audio: RemoteAudioTrack,\n video: RemoteVideoTrack,\n data: RemoteDataTrack\n }[kind];\n\n var publication = self.tracks.get(sid);\n\n // NOTE(mroberts): It should never be the case that the TrackSignaling and\n // MediaStreamTrack or DataTrackReceiver kinds disagree; however, just in\n // case, we handle it here.\n if (!RemoteTrack || kind !== trackTransceiver.kind) {\n return;\n }\n\n var options = { log: log, name: name };\n var setPriority = function setPriority(newPriority) {\n return participantSignaling.updateSubscriberTrackPriority(sid, newPriority);\n };\n var track = kind === 'data' ? new RemoteTrack(sid, trackTransceiver, options) : new RemoteTrack(sid, trackTransceiver, isEnabled, setPriority, options);\n\n self._addTrack(track, publication, trackTransceiver.id);\n }\n\n function trackSignalingUnsubscribed(signaling) {\n var _Array$from$find = Array.from(self._tracks.entries()).find(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n track = _ref2[1];\n\n return track.sid === signaling.sid;\n }),\n _Array$from$find2 = _slicedToArray(_Array$from$find, 2),\n id = _Array$from$find2[0],\n track = _Array$from$find2[1];\n\n var publication = self.tracks.get(signaling.sid);\n if (track) {\n self._removeTrack(track, publication, id);\n }\n }\n\n participantSignaling.on('trackAdded', trackSignalingAdded);\n participantSignaling.on('trackRemoved', trackSignalingRemoved);\n\n participantSignaling.tracks.forEach(trackSignalingAdded);\n\n participantSignaling.on('stateChanged', function stateChanged(state) {\n if (state === 'disconnected') {\n log.debug('Removing event listeners');\n participantSignaling.removeListener('stateChanged', stateChanged);\n participantSignaling.removeListener('trackAdded', trackSignalingAdded);\n participantSignaling.removeListener('trackRemoved', trackSignalingRemoved);\n } else if (state === 'connected') {\n // NOTE(mmalavalli): Any transition to \"connected\" here is a result of\n // successful signaling reconnection, and not a first-time establishment\n // of the signaling connection.\n log.info('reconnected');\n\n // NOTE(mpatwardhan): `stateChanged` can get emitted with StateMachine locked.\n // Do not signal public events synchronously with lock held.\n setTimeout(function () {\n return self.emit('reconnected');\n }, 0);\n }\n });\n }\n\n /**\n * @private\n * @param {RemoteTrack} track\n * @param {Track.ID} id\n * @returns {?RemoteTrack}\n */\n\n }, {\n key: '_removeTrack',\n value: function _removeTrack(track, id) {\n if (!this._tracks.has(id)) {\n return null;\n }\n this._tracks.delete(id);\n\n var tracksByKind = {\n audio: this._audioTracks,\n video: this._videoTracks,\n data: this._dataTracks\n }[track.kind];\n tracksByKind.delete(id);\n\n var reemitters = this._trackEventReemitters.get(id) || new Map();\n reemitters.forEach(function (reemitter, event) {\n track.removeListener(event, reemitter);\n });\n\n var log = this._log;\n log.info('Removed a ' + util.trackClass(track) + ':', id);\n log.debug(util.trackClass(track) + ':', track);\n return track;\n }\n\n /**\n * @private\n * @param {RemoteTrackPublication} publication\n * @returns {?RemoteTrackPublication}\n */\n\n }, {\n key: '_removeTrackPublication',\n value: function _removeTrackPublication(publication) {\n publication = this.tracks.get(publication.trackSid);\n if (!publication) {\n return null;\n }\n this.tracks.delete(publication.trackSid);\n\n var trackPublicationsByKind = {\n audio: this.audioTracks,\n data: this.dataTracks,\n video: this.videoTracks\n }[publication.kind];\n trackPublicationsByKind.delete(publication.trackSid);\n\n var reemitters = this._trackPublicationEventReemitters.get(publication.trackSid) || new Map();\n reemitters.forEach(function (reemitter, event) {\n publication.removeListener(event, reemitter);\n });\n\n var log = this._log;\n log.info('Removed a ' + util.trackPublicationClass(publication) + ':', publication.trackSid);\n log.debug(util.trackPublicationClass(publication) + ':', publication);\n return publication;\n }\n }, {\n key: 'toJSON',\n value: function toJSON() {\n return util.valueToJSON(this);\n }\n }]);\n\n return Participant;\n}(EventEmitter);\n\n/**\n * A {@link Participant.SID} is a 34-character string starting with \"PA\"\n * that uniquely identifies a {@link Participant}.\n * @type string\n * @typedef Participant.SID\n */\n\n/**\n * A {@link Participant.Identity} is a string that identifies a\n * {@link Participant}. You can think of it like a name.\n * @typedef {string} Participant.Identity\n */\n\n/**\n * The {@link Participant} has disconnected.\n * @param {Participant} participant - The {@link Participant} that disconnected.\n * @event Participant#disconnected\n */\n\n/**\n * The {@link Participant}'s {@link NetworkQualityLevel} changed.\n * @param {NetworkQualityLevel} networkQualityLevel - The new\n * {@link NetworkQualityLevel}\n * @param {?NetworkQualityStats} networkQualityStats - The {@link NetworkQualityStats}\n * based on which {@link NetworkQualityLevel} is calculated, if any\n * @event Participant#networkQualityLevelChanged\n */\n\n/**\n * The {@link Participant} has reconnected to the {@link Room} after a signaling connection disruption.\n * @event Participant#reconnected\n */\n\n/**\n * The {@link Participant} is reconnecting to the {@link Room} after a signaling connection disruption.\n * @event Participant#reconnecting\n */\n\n/**\n * One of the {@link Participant}'s {@link VideoTrack}'s dimensions changed.\n * @param {VideoTrack} track - The {@link VideoTrack} whose dimensions changed\n * @event Participant#trackDimensionsChanged\n */\n\n/**\n * One of the {@link Participant}'s {@link Track}s started.\n * @param {Track} track - The {@link Track} that started\n * @event Participant#trackStarted\n */\n\n/**\n * Indexed {@link Track}s by {@link Track.ID}.\n * @typedef {object} IndexedTracks\n * @property {Array<{0: Track.ID, 1: AudioTrack}>} audioTracks - Indexed\n * {@link AudioTrack}s\n * @property {Array<{0: Track.ID, 1: DataTrack}>} dataTracks - Indexed\n * {@link DataTrack}s\n * @property {Array<{0: Track.ID, 1: Track}>} tracks - Indexed {@link Track}s\n * @property {Array<{0: Track.ID, 1: VideoTrack}>} videoTracks - Indexed\n * {@link VideoTrack}s\n * @private\n */\n\n/**\n * Index tracks by {@link Track.ID}.\n * @param {Array} tracks\n * @returns {IndexedTracks}\n * @private\n */\n\n\nfunction indexTracksById(tracks) {\n var indexedTracks = tracks.map(function (track) {\n return [track.id, track];\n });\n var indexedAudioTracks = indexedTracks.filter(function (keyValue) {\n return keyValue[1].kind === 'audio';\n });\n var indexedVideoTracks = indexedTracks.filter(function (keyValue) {\n return keyValue[1].kind === 'video';\n });\n var indexedDataTracks = indexedTracks.filter(function (keyValue) {\n return keyValue[1].kind === 'data';\n });\n\n return {\n audioTracks: indexedAudioTracks,\n dataTracks: indexedDataTracks,\n tracks: indexedTracks,\n videoTracks: indexedVideoTracks\n };\n}\n\n/**\n * Re-emit {@link ParticipantSignaling} 'stateChanged' events.\n * @param {Participant} participant\n * @param {ParticipantSignaling} signaling\n * @private\n */\nfunction reemitSignalingStateChangedEvents(participant, signaling) {\n var log = participant._log;\n\n if (participant.state === 'disconnected') {\n return;\n }\n\n // Reemit state transition events from the ParticipantSignaling.\n signaling.on('stateChanged', function stateChanged(state) {\n log.debug('Transitioned to state:', state);\n participant.emit(state, participant);\n if (state === 'disconnected') {\n log.debug('Removing Track event reemitters');\n signaling.removeListener('stateChanged', stateChanged);\n\n signaling.tracks.forEach(function (trackSignaling) {\n var track = participant._tracks.get(trackSignaling.id);\n var reemitters = participant._trackEventReemitters.get(trackSignaling.id);\n if (track && reemitters) {\n reemitters.forEach(function (reemitter, event) {\n track.removeListener(event, reemitter);\n });\n }\n });\n participant._trackEventReemitters.clear();\n\n participant.tracks.forEach(function (publication) {\n participant._trackPublicationEventReemitters.get(publication.trackSid).forEach(function (reemitter, event) {\n publication.removeListener(event, reemitter);\n });\n });\n participant._trackPublicationEventReemitters.clear();\n }\n });\n}\n\n/**\n * Re-emit {@link Track} events.\n * @param {Participant} participant\n * @param {Track} track\n * @param {Track.ID} id\n * @private\n */\nfunction reemitTrackEvents(participant, track, id) {\n var trackEventReemitters = new Map();\n\n if (participant.state === 'disconnected') {\n return;\n }\n\n participant._getTrackEvents().forEach(function (eventPair) {\n var trackEvent = eventPair[0];\n var participantEvent = eventPair[1];\n\n trackEventReemitters.set(trackEvent, function () {\n var args = [participantEvent].concat([].slice.call(arguments));\n return participant.emit.apply(participant, _toConsumableArray(args));\n });\n\n track.on(trackEvent, trackEventReemitters.get(trackEvent));\n });\n\n participant._trackEventReemitters.set(id, trackEventReemitters);\n}\n\n/**\n * Re-emit {@link TrackPublication} events.\n * @private\n * @param {Participant} participant\n * @param {TrackPublication} publication\n */\nfunction reemitTrackPublicationEvents(participant, publication) {\n var publicationEventReemitters = new Map();\n\n if (participant.state === 'disconnected') {\n return;\n }\n\n participant._getTrackPublicationEvents().forEach(function (_ref3) {\n var _ref4 = _slicedToArray(_ref3, 2),\n publicationEvent = _ref4[0],\n participantEvent = _ref4[1];\n\n publicationEventReemitters.set(publicationEvent, function () {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n participant.emit.apply(participant, [participantEvent].concat(args, [publication]));\n });\n publication.on(publicationEvent, publicationEventReemitters.get(publicationEvent));\n });\n\n participant._trackPublicationEventReemitters.set(publication.trackSid, publicationEventReemitters);\n}\n\nmodule.exports = Participant;","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar _require = require('../../util/constants'),\n ICE_ACTIVITY_CHECK_PERIOD_MS = _require.ICE_ACTIVITY_CHECK_PERIOD_MS,\n ICE_INACTIVITY_THRESHOLD_MS = _require.ICE_INACTIVITY_THRESHOLD_MS;\n\n/**\n * Monitors a {@link RTCPeerConnection}'s stats and notifies\n * caller when inactivity is detected.\n */\n\n\nvar IceConnectionMonitor = function () {\n /**\n * Construct an {@link IceConnectionMonitor}.\n * @param {RTCPeerConnection} peerConnection\n * @param {object} [options]\n */\n function IceConnectionMonitor(peerConnection, options) {\n _classCallCheck(this, IceConnectionMonitor);\n\n options = Object.assign({\n activityCheckPeriodMs: ICE_ACTIVITY_CHECK_PERIOD_MS,\n inactivityThresholdMs: ICE_INACTIVITY_THRESHOLD_MS\n }, options);\n\n Object.defineProperties(this, {\n _activityCheckPeriodMs: {\n value: options.activityCheckPeriodMs\n },\n _inactivityThresholdMs: {\n value: options.inactivityThresholdMs\n },\n _lastActiveStats: {\n value: null,\n writable: true\n },\n _peerConnection: {\n value: peerConnection\n },\n _timer: {\n value: null,\n writable: true\n }\n });\n }\n\n /**\n * Get ICE connection stats, and extract received and send bytes.\n * @returns Promise\n */\n\n\n _createClass(IceConnectionMonitor, [{\n key: '_getIceConnectionStats',\n value: function _getIceConnectionStats() {\n return this._peerConnection.getStats().then(function (stats) {\n return Array.from(stats.values()).find(function (stat) {\n return stat.type === 'candidate-pair' && stat.nominated;\n });\n }).then(function (activePairStat) {\n // NOTE(mpatwardhan): sometimes (JSDK-2667) after getting disconnected while switching network\n // we may not find active pair. Treat this as 0 bytesReceived so that we count it towards inactivity.\n return activePairStat || {\n bytesReceived: 0,\n timestamp: Math.round(new Date().getTime())\n };\n }).catch(function () {\n return null;\n });\n }\n\n /**\n * Start monitoring the ICE connection.\n * Monitors bytes received on active ice connection pair,\n * invokes onIceConnectionInactive when inactivity is detected.\n * @param {function} onIceConnectionInactive\n */\n\n }, {\n key: 'start',\n value: function start(onIceConnectionInactive) {\n var _this = this;\n\n this.stop();\n this._timer = setInterval(function () {\n _this._getIceConnectionStats().then(function (iceStats) {\n if (!iceStats) {\n return;\n }\n\n if (!_this._lastActivity || _this._lastActivity.bytesReceived !== iceStats.bytesReceived) {\n _this._lastActivity = iceStats;\n }\n\n if (iceStats.timestamp - _this._lastActivity.timestamp >= _this._inactivityThresholdMs) {\n onIceConnectionInactive();\n }\n });\n }, this._activityCheckPeriodMs);\n }\n\n /**\n * Stop monitoring the ICE connection state.\n * @returns {void}\n */\n\n }, {\n key: 'stop',\n value: function stop() {\n if (this._timer !== null) {\n clearInterval(this._timer);\n this._timer = null;\n this._lastActivity = null;\n }\n }\n }]);\n\n return IceConnectionMonitor;\n}();\n\nmodule.exports = IceConnectionMonitor;","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _require = require('@twilio/webrtc/lib/util/sdp'),\n getSdpFormat = _require.getSdpFormat;\n\nvar packageInfo = require('../../../package.json');\nvar InsightsPublisher = require('../../util/insightspublisher');\nvar NullInsightsPublisher = require('../../util/insightspublisher/null');\nvar StateMachine = require('../../statemachine');\nvar TwilioConnection = require('../../twilioconnection');\nvar DefaultBackoff = require('backoff');\n\nvar _require2 = require('../../util/constants'),\n reconnectBackoffConfig = _require2.reconnectBackoffConfig;\n\nvar Timeout = require('../../util/timeout');\n\nvar _require3 = require('../../util'),\n createBandwidthProfilePayload = _require3.createBandwidthProfilePayload,\n createMediaSignalingPayload = _require3.createMediaSignalingPayload,\n createSubscribePayload = _require3.createSubscribePayload,\n getUserAgent = _require3.getUserAgent;\n\nvar _require4 = require('../../util/twilio-video-errors'),\n createTwilioError = _require4.createTwilioError,\n RoomCompletedError = _require4.RoomCompletedError,\n SignalingConnectionError = _require4.SignalingConnectionError;\n\nvar RSP_VERSION = 2;\nvar SDK_NAME = packageInfo.name + '.js';\nvar SDK_VERSION = packageInfo.version;\n\n/*\nTwilioConnectionTransport States\n----------------\n\n +-----------+\n | |\n | syncing |---------+\n | | |\n +-----------+ |\n ^ | |\n | | |\n | v v\n +------------+ +-----------+ +--------------+\n | | | | | |\n | connecting |--->| connected |--->| disconnected |\n | | | | | |\n +------------+ +-----------+ +--------------+\n | ^\n | |\n | |\n +------------------------------+\n\n*/\n\nvar states = {\n connecting: ['connected', 'disconnected'],\n connected: ['disconnected', 'syncing'],\n syncing: ['connected', 'disconnected'],\n disconnected: []\n};\n\n/**\n * A {@link TwilioConnectionTransport} supports sending and receiving Room Signaling Protocol\n * (RSP) messages. It also supports RSP requests, such as Sync and Disconnect.\n * @extends StateMachine\n * @emits TwilioConnectionTransport#connected\n * @emits TwilioConnectionTransport#message\n */\n\nvar TwilioConnectionTransport = function (_StateMachine) {\n _inherits(TwilioConnectionTransport, _StateMachine);\n\n /**\n * Construct a {@link TwilioConnectionTransport}.\n * @param {?string} name\n * @param {string} accessToken\n * @param {ParticipantSignaling} localParticipant\n * @param {PeerConnectionManager} peerConnectionManager\n * @param {string} wsServer\n * @param {object} [options]\n */\n function TwilioConnectionTransport(name, accessToken, localParticipant, peerConnectionManager, wsServer, options) {\n _classCallCheck(this, TwilioConnectionTransport);\n\n options = Object.assign({\n Backoff: DefaultBackoff,\n InsightsPublisher: InsightsPublisher,\n NullInsightsPublisher: NullInsightsPublisher,\n TwilioConnection: TwilioConnection,\n sdpFormat: getSdpFormat(options.sdpSemantics),\n trackPriority: true,\n trackSwitchOff: true,\n userAgent: getUserAgent()\n }, options);\n\n var _this = _possibleConstructorReturn(this, (TwilioConnectionTransport.__proto__ || Object.getPrototypeOf(TwilioConnectionTransport)).call(this, 'connecting', states));\n\n var eventPublisherOptions = {};\n if (options.wsServerInsights) {\n eventPublisherOptions.gateway = options.wsServerInsights;\n }\n\n var EventPublisher = options.insights ? options.InsightsPublisher : options.NullInsightsPublisher;\n Object.defineProperties(_this, {\n _accessToken: {\n value: accessToken\n },\n _automaticSubscription: {\n value: options.automaticSubscription\n },\n _bandwidthProfile: {\n value: options.bandwidthProfile\n },\n _dominantSpeaker: {\n value: options.dominantSpeaker\n },\n _eventPublisher: {\n value: new EventPublisher(accessToken, SDK_NAME, SDK_VERSION, options.environment, options.realm, eventPublisherOptions)\n },\n _iceServerSourceStatus: {\n value: options.iceServerSourceStatus\n },\n _localParticipant: {\n value: localParticipant\n },\n _name: {\n value: name\n },\n _networkQuality: {\n value: options.networkQuality\n },\n _options: {\n value: options\n },\n _peerConnectionManager: {\n value: peerConnectionManager\n },\n _sessionTimer: {\n value: null,\n writable: true\n },\n _sessionTimeoutMS: {\n value: 0, // initially 0, set only after 1st successful connection.\n writable: true\n },\n _reconnectBackoff: {\n value: options.Backoff.exponential(reconnectBackoffConfig)\n },\n _session: {\n value: null,\n writable: true\n },\n _trackPriority: {\n value: options.trackPriority\n },\n _trackSwitchOff: {\n value: options.trackSwitchOff\n },\n _twilioConnection: {\n value: null,\n writable: true\n },\n _updatesReceived: {\n value: []\n },\n _updatesToSend: {\n value: []\n },\n _userAgent: {\n value: options.userAgent\n },\n _wsServer: {\n value: wsServer\n }\n });\n setupEventListeners(_this);\n\n _this.once('connected', function (_ref) {\n var sid = _ref.sid,\n participant = _ref.participant;\n\n _this._eventPublisher.connect(sid, participant.sid);\n });\n return _this;\n }\n\n /**\n * Send a Connect, Sync or Disconnect RSP message.\n * @private\n */\n\n\n _createClass(TwilioConnectionTransport, [{\n key: '_sendConnectOrSyncOrDisconnectMessage',\n value: function _sendConnectOrSyncOrDisconnectMessage() {\n if (this.state === 'connected') {\n return;\n }\n\n if (this.state === 'disconnected') {\n this._twilioConnection.sendMessage({\n session: this._session,\n type: 'disconnect',\n version: RSP_VERSION\n });\n return;\n }\n\n var type = {\n connecting: 'connect',\n syncing: 'sync'\n }[this.state];\n\n var message = {\n name: this._name,\n participant: this._localParticipant.getState(),\n peer_connections: this._peerConnectionManager.getStates(),\n type: type,\n version: RSP_VERSION\n };\n\n if (message.type === 'connect') {\n message.ice_servers = this._iceServerSourceStatus;\n\n message.publisher = {\n name: SDK_NAME,\n sdk_version: SDK_VERSION,\n user_agent: this._userAgent\n };\n\n if (this._bandwidthProfile) {\n message.bandwidth_profile = createBandwidthProfilePayload(this._bandwidthProfile);\n }\n\n message.media_signaling = createMediaSignalingPayload(this._dominantSpeaker, this._networkQuality, this._trackPriority, this._trackSwitchOff);\n\n message.subscribe = createSubscribePayload(this._automaticSubscription);\n\n var sdpFormat = this._options.sdpFormat;\n if (sdpFormat) {\n message.format = sdpFormat;\n }\n message.token = this._accessToken;\n } else if (message.type === 'sync') {\n message.session = this._session;\n message.token = this._accessToken;\n } else if (message.type === 'update') {\n message.session = this._session;\n }\n this._twilioConnection.sendMessage(message);\n }\n\n /**\n * Disconnect the {@link TwilioConnectionTransport}. Returns true if calling the method resulted\n * in disconnection.\n * @param {TwilioError} [error]\n * @returns {boolean}\n */\n\n }, {\n key: 'disconnect',\n value: function disconnect(error) {\n if (this.state !== 'disconnected') {\n this.preempt('disconnected', null, [error]);\n this._sendConnectOrSyncOrDisconnectMessage();\n this._twilioConnection.close();\n this._eventPublisher.disconnect();\n return true;\n }\n return false;\n }\n\n /**\n * Publish an RSP Update. Returns true if calling the method resulted in\n * publishing (or eventually publishing) the update.\n * @param {object} update\n * @returns {boolean}\n */\n\n }, {\n key: 'publish',\n value: function publish(update) {\n switch (this.state) {\n case 'connected':\n this._twilioConnection.sendMessage(Object.assign({\n session: this._session,\n type: 'update',\n version: RSP_VERSION\n }, update));\n return true;\n case 'connecting':\n case 'syncing':\n this._updatesToSend.push(update);\n return true;\n case 'disconnected':\n default:\n return false;\n }\n }\n\n /**\n * Publish (or queue) an event to the Insights gateway.\n * @param {string} groupName - Event group name\n * @param {string} eventName - Event name\n * @param {object} payload - Event payload\n * @returns {boolean} true if queued or published, false if disconnected from the Insights gateway\n */\n\n }, {\n key: 'publishEvent',\n value: function publishEvent(groupName, eventName, payload) {\n return this._eventPublisher.publish(groupName, eventName, payload);\n }\n\n /**\n * Sync the {@link TwilioConnectionTransport}. Returns true if calling the method resulted in\n * syncing.\n * @returns {boolean}\n */\n\n }, {\n key: 'sync',\n value: function sync() {\n if (this.state === 'connected') {\n this.preempt('syncing');\n this._sendConnectOrSyncOrDisconnectMessage();\n return true;\n }\n return false;\n }\n\n /**\n * @returns {void}\n */\n\n }, {\n key: '_setSession',\n value: function _setSession(session, sessionTimeout) {\n this._session = session;\n this._sessionTimeoutMS = sessionTimeout * 1000;\n }\n\n /**\n * Determines if we should attempt reconnect.\n * returns a Promise to wait on before attempting to\n * reconnect. returns null if its not okay to reconnect.\n * @private\n * @returns {Promise}\n */\n\n }, {\n key: '_getReconnectTimer',\n value: function _getReconnectTimer() {\n var _this2 = this;\n\n if (this._sessionTimeoutMS === 0) {\n // this means either we have never connected.\n // or we timed out while trying to reconnect\n // In either case we do not want to reconnect.\n return null;\n }\n\n // start session timer\n if (!this._sessionTimer) {\n this._sessionTimer = new Timeout(function () {\n // ensure that _clearReconnectTimer wasn't\n // called while we were waiting.\n if (_this2._sessionTimer) {\n // do not allow any more reconnect attempts.\n _this2._sessionTimeoutMS = 0;\n }\n }, this._sessionTimeoutMS);\n }\n\n // return promise that waits with exponential backoff.\n return new Promise(function (resolve) {\n _this2._reconnectBackoff.once('ready', resolve);\n _this2._reconnectBackoff.backoff();\n });\n }\n\n /**\n * clears the session reconnect timer.\n *\n * @private\n * @returns {void}\n */\n\n }, {\n key: '_clearReconnectTimer',\n value: function _clearReconnectTimer() {\n this._reconnectBackoff.reset();\n if (this._sessionTimer) {\n this._sessionTimer.clear();\n this._sessionTimer = null;\n }\n }\n }]);\n\n return TwilioConnectionTransport;\n}(StateMachine);\n\n/**\n * @event TwilioConnectionTransport#connected\n * @param {object} initialState\n */\n\n/**\n * @event TwilioConnectionTransport#message\n * @param {object} state\n */\n\nfunction reducePeerConnections(peerConnections) {\n return Array.from(peerConnections.reduce(function (peerConnectionsById, update) {\n var reduced = peerConnectionsById.get(update.id) || update;\n\n // First, reduce the top-level `description` property.\n if (!reduced.description && update.description) {\n reduced.description = update.description;\n } else if (reduced.description && update.description) {\n if (update.description.revision > reduced.description.revision) {\n reduced.description = update.description;\n }\n }\n\n // Then, reduce the top-level `ice` property.\n if (!reduced.ice && update.ice) {\n reduced.ice = update.ice;\n } else if (reduced.ice && update.ice) {\n if (update.ice.revision > reduced.ice.revision) {\n reduced.ice = update.ice;\n }\n }\n\n // Finally, update the map.\n peerConnectionsById.set(reduced.id, reduced);\n return peerConnectionsById;\n }, new Map()).values());\n}\n\nfunction reduceUpdates(updates) {\n return updates.reduce(function (reduced, update) {\n // First, reduce the top-level `participant` property.\n if (!reduced.participant && update.participant) {\n reduced.participant = update.participant;\n } else if (reduced.participant && update.participant) {\n if (update.participant.revision > reduced.participant.revision) {\n reduced.participant = update.participant;\n }\n }\n\n // Then, reduce the top-level `peer_connections` property.\n /* eslint camelcase:0 */\n if (!reduced.peer_connections && update.peer_connections) {\n reduced.peer_connections = reducePeerConnections(update.peer_connections);\n } else if (reduced.peer_connections && update.peer_connections) {\n reduced.peer_connections = reducePeerConnections(reduced.peer_connections.concat(update.peer_connections));\n }\n return reduced;\n }, {});\n}\n\nfunction setupEventListeners(transport) {\n function connect() {\n transport._sendConnectOrSyncOrDisconnectMessage();\n }\n\n function createOrResetTwilioConnection() {\n if (transport._twilioConnection) {\n transport._twilioConnection.removeListener('message', handleMessage);\n }\n var _options = transport._options,\n _wsServer = transport._wsServer;\n var TwilioConnection = transport._options.TwilioConnection;\n\n transport._twilioConnection = new TwilioConnection(_wsServer, _options);\n return transport._twilioConnection;\n }\n\n function disconnect(error) {\n if (transport.state === 'disconnected') {\n return;\n }\n if (!error) {\n transport.disconnect();\n return;\n }\n\n var reconnectTimer = transport._getReconnectTimer();\n if (!reconnectTimer) {\n transport.disconnect(new SignalingConnectionError());\n return;\n }\n\n if (transport.state === 'connected') {\n transport.preempt('syncing');\n }\n\n reconnectTimer.then(startConnect);\n }\n\n function startConnect() {\n if (transport.state === 'disconnected') {\n return;\n }\n var twilioConnection = createOrResetTwilioConnection();\n twilioConnection.once('close', disconnect);\n twilioConnection.on('message', handleMessage);\n twilioConnection.once('open', connect);\n }\n\n function handleMessage(message) {\n if (transport.state === 'disconnected') {\n return;\n }\n if (message.type === 'error') {\n transport.disconnect(createTwilioError(message.code, message.message));\n return;\n }\n switch (transport.state) {\n case 'connected':\n switch (message.type) {\n case 'connected':\n case 'synced':\n case 'update':\n transport.emit('message', message);\n return;\n case 'disconnected':\n transport.disconnect(message.status === 'completed' ? new RoomCompletedError() : null);\n return;\n default:\n // Do nothing.\n return;\n }\n case 'connecting':\n switch (message.type) {\n case 'connected':\n transport._setSession(message.session, message.options.session_timeout);\n transport.emit('connected', message);\n transport.preempt('connected');\n return;\n case 'synced':\n case 'update':\n transport._updatesReceived.push(message);\n return;\n case 'disconnected':\n transport.disconnect(message.status === 'completed' ? new RoomCompletedError() : null);\n return;\n default:\n // Do nothing.\n return;\n }\n case 'syncing':\n switch (message.type) {\n case 'connected':\n case 'update':\n transport._updatesReceived.push(message);\n return;\n case 'synced':\n transport._clearReconnectTimer();\n transport.emit('message', message);\n transport.preempt('connected');\n return;\n case 'disconnected':\n transport.disconnect(message.status === 'completed' ? new RoomCompletedError() : null);\n return;\n default:\n // Do nothing.\n return;\n }\n default:\n // Impossible\n return;\n }\n }\n\n transport.on('stateChanged', function stateChanged(state) {\n switch (state) {\n case 'connected':\n {\n var updates = transport._updatesToSend.splice(0);\n if (updates.length) {\n transport.publish(reduceUpdates(updates));\n }\n transport._updatesReceived.splice(0).forEach(function (update) {\n return transport.emit('message', update);\n });\n return;\n }\n case 'disconnected':\n transport._twilioConnection.removeListener('message', handleMessage);\n transport.removeListener('stateChanged', stateChanged);\n return;\n case 'syncing':\n // Do nothing.\n return;\n default:\n // Impossible\n return;\n }\n });\n\n startConnect();\n}\n\nmodule.exports = TwilioConnectionTransport;","'use strict';\n\n/**\n * RTCRtpSender shim.\n * @param {MediaStreamTrack} track\n * @property {MediaStreamTrack} track\n */\nfunction RTCRtpSenderShim(track) {\n Object.defineProperties(this, {\n track: {\n enumerable: true,\n value: track,\n writable: true\n }\n });\n}\n\n// NOTE(mmalavalli): Because of the way we will be using this shim, there\n// are a couple of use cases that will not be covered:\n//\n// /* Case 1 */\n// const sender = pc.addTrack(track);\n// assert.equal(sender.track, track);\n// pc.removeTrack(sender);\n// assert.equal(sender.track, null); /* Error */\n//\n// /* Case 2 */\n// const sender = pc.addTrack(track);\n// const senders1 = new Set(pc.getSenders());\n// assert(senders1.has(sender));\n// pc.removeTrack(track);\n// const senders2 = new Set(pc.getSenders());\n// assert(senders2.has(sender)); /* Error */\n//\n// For now, since we only use senders for passing them to RTCPeerConnection#removeTrack(),\n// we will omit handling these use cases for now, and revisit them when we start\n// using the RTCRtpSender APIs.\n\nmodule.exports = RTCRtpSenderShim;\n","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ReceiverReport = require('./receiverreport');\nvar SenderOrReceiverReportFactory = require('./senderorreceiverreportfactory');\n\n/**\n * @extends SenderOrReceiverReportFactory\n * @param {?ReceiverReport} lastReport\n */\n\nvar ReceiverReportFactory = function (_SenderOrReceiverRepo) {\n _inherits(ReceiverReportFactory, _SenderOrReceiverRepo);\n\n /**\n * Construct a {@link ReceiverReportFactory}.\n * @param {TrackId} trackId\n * @param {RTCStats} initialStats\n */\n function ReceiverReportFactory(trackId, initialStats) {\n _classCallCheck(this, ReceiverReportFactory);\n\n var _this = _possibleConstructorReturn(this, (ReceiverReportFactory.__proto__ || Object.getPrototypeOf(ReceiverReportFactory)).call(this, initialStats.id, trackId, initialStats));\n\n Object.defineProperties(_this, {\n lastReport: {\n enumerable: true,\n value: null,\n writable: true\n }\n });\n return _this;\n }\n\n /**\n * Create a {@link ReceiverReport}.\n * @param {TrackId} trackId\n * @param {RTCStats} newerStats\n * @returns {ReceiverReport}\n */\n\n\n _createClass(ReceiverReportFactory, [{\n key: 'next',\n value: function next(trackId, newerStats) {\n var olderStats = this.lastStats;\n this.lastStats = newerStats;\n this.trackId = trackId;\n var report = ReceiverReport.of(trackId, olderStats, newerStats);\n this.lastReport = report;\n return report;\n }\n }]);\n\n return ReceiverReportFactory;\n}(SenderOrReceiverReportFactory);\n\nmodule.exports = ReceiverReportFactory;","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar TrackPrioritySignaling = function () {\n /**\n * Construct a {@link TrackPrioritySignaling}.\n * @param {MediaSignalingTransport} mediaSignalingTransport\n */\n function TrackPrioritySignaling(mediaSignalingTransport) {\n _classCallCheck(this, TrackPrioritySignaling);\n\n Object.defineProperties(this, {\n _mediaSignalingTransport: {\n value: mediaSignalingTransport\n }\n });\n }\n\n /**\n * @param {Track.SID} trackSid\n * @param {'publish'|'subscribe'} publishOrSubscribe\n * @param {Track.Priority} priority\n */\n\n\n _createClass(TrackPrioritySignaling, [{\n key: 'sendTrackPriorityUpdate',\n value: function sendTrackPriorityUpdate(trackSid, publishOrSubscribe, priority) {\n this._mediaSignalingTransport.publish(_defineProperty({\n type: 'track_priority',\n track: trackSid\n }, publishOrSubscribe, priority));\n }\n }]);\n\n return TrackPrioritySignaling;\n}();\n\nmodule.exports = TrackPrioritySignaling;","'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar TrackTransceiver = require('../transceiver');\n\n/**\n * A {@link DataTrackTransceiver} represents either one or more local\n * RTCDataChannels or a single remote RTCDataChannel. It can be used to send or\n * receive data.\n * @extends TrackTransceiver\n * @property {string} id\n * @property {string} kind - \"data\"\n * @property {?number} maxPacketLifeTime\n * @property {?number} maxRetransmits\n * @property {boolean} ordered\n */\n\nvar DataTrackTransceiver = function (_TrackTransceiver) {\n _inherits(DataTrackTransceiver, _TrackTransceiver);\n\n /**\n * Construct a {@link DataTrackTransceiver}.\n * @param {string} id\n * @param {?number} maxPacketLifeTime\n * @param {?number} maxRetransmits\n * @param {boolean} ordered\n */\n function DataTrackTransceiver(id, maxPacketLifeTime, maxRetransmits, ordered) {\n _classCallCheck(this, DataTrackTransceiver);\n\n var _this = _possibleConstructorReturn(this, (DataTrackTransceiver.__proto__ || Object.getPrototypeOf(DataTrackTransceiver)).call(this, id, 'data'));\n\n Object.defineProperties(_this, {\n maxPacketLifeTime: {\n enumerable: true,\n value: maxPacketLifeTime\n },\n maxRetransmits: {\n enumerable: true,\n value: maxRetransmits\n },\n ordered: {\n enumerable: true,\n value: ordered\n }\n });\n return _this;\n }\n\n return DataTrackTransceiver;\n}(TrackTransceiver);\n\nmodule.exports = DataTrackTransceiver;","'use strict';\n\nmodule.exports = {\n LocalAudioTrack: require('./localaudiotrack'),\n LocalVideoTrack: require('./localvideotrack'),\n LocalDataTrack: require('./localdatatrack')\n};","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _require = require('events'),\n EventEmitter = _require.EventEmitter;\n\n/**\n * @classdesc A {@link DataTransport} implements {@link MediaSignalingTransport}\n * in terms of an RTCDataChannel.\n * @extends EventEmitter\n * @implements MediaSignalingTransport\n * @emits DataTransport#message\n */\n\n\nvar DataTransport = function (_EventEmitter) {\n _inherits(DataTransport, _EventEmitter);\n\n /**\n * Construct a {@link DataTransport}.\n * @param {RTCDataChannel} dataChannel\n */\n function DataTransport(dataChannel) {\n _classCallCheck(this, DataTransport);\n\n var _this = _possibleConstructorReturn(this, (DataTransport.__proto__ || Object.getPrototypeOf(DataTransport)).call(this));\n\n Object.defineProperties(_this, {\n _dataChannel: {\n value: dataChannel\n },\n _messageQueue: {\n value: []\n }\n });\n\n dataChannel.addEventListener('open', function () {\n _this._messageQueue.splice(0).forEach(function (message) {\n return _this._publish(message);\n });\n });\n\n dataChannel.addEventListener('message', function (_ref) {\n var data = _ref.data;\n\n try {\n var message = JSON.parse(data);\n _this.emit('message', message);\n } catch (error) {\n // Do nothing.\n }\n });\n\n _this.publish({ type: 'ready' });\n return _this;\n }\n\n /**\n * @param message\n * @private\n */\n\n\n _createClass(DataTransport, [{\n key: '_publish',\n value: function _publish(message) {\n var data = JSON.stringify(message);\n try {\n this._dataChannel.send(data);\n } catch (error) {\n // Do nothing.\n }\n }\n\n /**\n * Publish a message. Returns true if calling the method resulted in\n * publishing (or eventually publishing) the update.\n * @param {object} message\n * @returns {boolean}\n */\n\n }, {\n key: 'publish',\n value: function publish(message) {\n var dataChannel = this._dataChannel;\n if (dataChannel.readyState === 'closing' || dataChannel.readyState === 'closed') {\n return false;\n }\n if (dataChannel.readyState === 'connecting') {\n this._messageQueue.push(message);\n return true;\n }\n this._publish(message);\n return true;\n }\n }]);\n\n return DataTransport;\n}(EventEmitter);\n\n/**\n * The {@link DataTransport} received a message.\n * @event DataTransport#message\n * @param {object} message\n */\n\nmodule.exports = DataTransport;","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Track = require('./');\n\nvar _require = require('../../util/constants'),\n E = _require.typeErrors,\n trackPriority = _require.trackPriority;\n\n/**\n * A {@link RemoteDataTrack} represents data published to a {@link Room} by a\n * {@link RemoteParticipant}.\n * @extends Track\n * @property {boolean} isEnabled - true\n * @property {boolean} isSubscribed - Whether the {@link RemoteDataTrack} is\n * subscribed to\n * @property {boolean} isSwitchedOff - Whether the {@link RemoteDataTrack} is\n * switched off\n * @property {Track.Kind} kind - \"data\"\n * @property {?number} maxPacketLifeTime - If non-null, this represents a time\n * limit (in milliseconds) during which data will be transmitted or\n * retransmitted if not acknowledged on the underlying RTCDataChannel.\n * @property {?number} maxRetransmits - If non-null, this represents the number\n * of times the data will be retransmitted if not successfully received on the\n * underlying RTCDataChannel.\n * @property {boolean} ordered - true if data on the {@link RemoteDataTrack} can\n * be received out-of-order.\n * @property {?Track.Priority} priority - The subscribe priority of the {@link RemoteDataTrack}\n * @property {boolean} reliable - This is true if both\n * maxPacketLifeTime and maxRetransmits are set to\n * null. In other words, if this is true, there is no bound on packet lifetime\n * or the number of retransmits that will be attempted, ensuring \"reliable\"\n * transmission.\n * @property {Track.SID} sid - The SID assigned to the {@link RemoteDataTrack}\n * @emits RemoteDataTrack#message\n * @emits RemoteDataTrack#switchedOff\n * @emits RemoteDataTrack#switchedOn\n */\n\n\nvar RemoteDataTrack = function (_Track) {\n _inherits(RemoteDataTrack, _Track);\n\n /**\n * Construct a {@link RemoteDataTrack} from a {@link DataTrackReceiver}.\n * @param {Track.SID} sid\n * @param {DataTrackReceiver} dataTrackReceiver\n * @param {{log: Log, name: ?string}} options\n */\n function RemoteDataTrack(sid, dataTrackReceiver, options) {\n _classCallCheck(this, RemoteDataTrack);\n\n var _this = _possibleConstructorReturn(this, (RemoteDataTrack.__proto__ || Object.getPrototypeOf(RemoteDataTrack)).call(this, dataTrackReceiver.id, 'data', options));\n\n Object.defineProperties(_this, {\n _isSwitchedOff: {\n value: false,\n writable: true\n },\n _priority: {\n value: null,\n writable: true\n },\n isEnabled: {\n enumerable: true,\n value: true\n },\n isSwitchedOff: {\n enumerable: true,\n get: function get() {\n return this._isSwitchedOff;\n }\n },\n maxPacketLifeTime: {\n enumerable: true,\n value: dataTrackReceiver.maxPacketLifeTime\n },\n maxRetransmits: {\n enumerable: true,\n value: dataTrackReceiver.maxRetransmits\n },\n ordered: {\n enumerable: true,\n value: dataTrackReceiver.ordered\n },\n priority: {\n enumerable: true,\n get: function get() {\n return this._priority;\n }\n },\n reliable: {\n enumerable: true,\n value: dataTrackReceiver.maxPacketLifeTime === null && dataTrackReceiver.maxRetransmits === null\n },\n sid: {\n enumerable: true,\n value: sid\n }\n });\n\n dataTrackReceiver.on('message', function (data) {\n _this.emit('message', data, _this);\n });\n return _this;\n }\n\n /**\n * Update the subscriber {@link Track.Priority} of the {@link RemoteDataTrack}.\n * @param {?Track.Priority} priority - the new {@link Track.priority};\n * Currently setPriority has no effect on data tracks.\n * @returns {this}\n * @throws {RangeError}\n */\n\n\n _createClass(RemoteDataTrack, [{\n key: 'setPriority',\n value: function setPriority(priority) {\n var priorityValues = [null].concat(_toConsumableArray(Object.values(trackPriority)));\n if (!priorityValues.includes(priority)) {\n // eslint-disable-next-line new-cap\n throw E.INVALID_VALUE('priority', priorityValues);\n }\n\n // Note: priority has no real effect on the data tracks.\n this._priority = priority;\n return this;\n }\n\n /**\n * @private\n */\n\n }, {\n key: '_setEnabled',\n value: function _setEnabled() {}\n // Do nothing.\n\n\n /**\n * @private\n * @param {boolean} isSwitchedOff\n */\n\n }, {\n key: '_setSwitchedOff',\n value: function _setSwitchedOff(isSwitchedOff) {\n if (this._isSwitchedOff !== isSwitchedOff) {\n this._isSwitchedOff = isSwitchedOff;\n this.emit(isSwitchedOff ? 'switchedOff' : 'switchedOn', this);\n }\n }\n }]);\n\n return RemoteDataTrack;\n}(Track);\n\n/**\n * A message was received over the {@link RemoteDataTrack}.\n * @event RemoteDataTrack#message\n * @param {string|ArrayBuffer} data\n * @param {RemoteDataTrack} track - The {@link RemoteDataTrack} that received\n * the message\n */\n\n/**\n * A {@link RemoteDataTrack} was switched off.\n * @param {RemoteDataTrack} track - The {@link RemoteDataTrack} that was\n * switched off\n * @event RemoteDataTrack#switchedOff\n */\n\n/**\n * A {@link RemoteDataTrack} was switched on.\n * @param {RemoteDataTrack} track - The {@link RemoteDataTrack} that was\n * switched on\n * @event RemoteDataTrack#switchedOn\n */\n\nmodule.exports = RemoteDataTrack;","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar util = require('../../');\nvar getMediaSections = require('../').getMediaSections;\n\n// NOTE(mroberts): OrderedTrackMatcher is meant to solve the problem identified in\n//\n// https://bugs.webkit.org/show_bug.cgi?id=174519\n//\n// Namely that, without MIDs, we cannot \"correctly\" identify MediaStreamTracks\n// in Safari's current WebRTC implementation. So, this module tries to hack\n// around this by making a possibly dangerous assumption: \"track\" events will\n// be raised for MediaStreamTracks of a particular kind in the same order that\n// those kinds' MSIDs appear in the SDP. By calling `update` with an\n// RTCPeerConnection's `remoteDescription` and then invoking `match`, we ought\n// to be able to dequeue MediaStreamTrack IDs in the correct order to be\n// assigned to \"track\" events.\n\n/**\n * @interface MatchedAndUnmatched\n * @property {Set} matched\n * @property {Set} unmatched\n */\n\n/**\n * Create a new instance of {@link MatchedAndUnmatched}.\n * @returns {MatchedAndUnmatched}\n */\nfunction create() {\n return {\n matched: new Set(),\n unmatched: new Set()\n };\n}\n\n/**\n * Attempt to match a MediaStreamTrack ID.\n * @param {MatchedAndUnmatched} mAndM\n * @returns {?Track.ID} id\n */\nfunction _match(mAndM) {\n var unmatched = Array.from(mAndM.unmatched);\n if (!unmatched.length) {\n return null;\n }\n var id = unmatched[0];\n mAndM.matched.add(id);\n mAndM.unmatched.delete(id);\n return id;\n}\n\n/**\n * Update a {@link MatchedAndUnmatched}'s MediaStreamTrack IDs.\n * @param {MatchedAndUnmatched} mAndM\n * @param {Set} ids\n * @returns {void}\n */\nfunction _update(mAndM, ids) {\n ids = new Set(ids);\n var removedMatchedIds = util.difference(mAndM.matched, ids);\n removedMatchedIds.forEach(mAndM.matched.delete, mAndM.matched);\n mAndM.unmatched = util.difference(ids, mAndM.matched);\n}\n\n/**\n * Parse MediaStreamTrack IDs of a particular kind from an SDP.\n * @param {string} kind\n * @param {string} sdp\n * @returns {Set} ids\n */\nfunction parse(kind, sdp) {\n var mediaSections = getMediaSections(sdp, kind);\n var pattern = 'msid: ?(.+) +(.+) ?$';\n return new Set(util.flatMap(mediaSections, function (mediaSection) {\n return mediaSection.match(new RegExp(pattern, 'mg')) || [];\n }).map(function (msid) {\n return msid.match(new RegExp(pattern))[2];\n }));\n}\n\n/**\n * A {@link OrderedTrackMatcher} is used to match RTCTrackEvents.\n * @property {MatchedAndUnmatched} audio\n * @property {MatchedAndUnmatched} video\n */\n\nvar OrderedTrackMatcher = function () {\n function OrderedTrackMatcher() {\n _classCallCheck(this, OrderedTrackMatcher);\n\n if (!(this instanceof OrderedTrackMatcher)) {\n return new OrderedTrackMatcher();\n }\n Object.defineProperties(this, {\n audio: {\n enumerable: true,\n value: create()\n },\n video: {\n enumerable: true,\n value: create()\n }\n });\n }\n\n /**\n * Attempt to match a new MediaStreamTrack ID.\n * @param {RTCTrackEvent} event\n * @returns {?Track.ID} id\n */\n\n\n _createClass(OrderedTrackMatcher, [{\n key: 'match',\n value: function match(event) {\n return _match(this[event.track.kind]);\n }\n\n /**\n * Update the {@link OrderedTrackMatcher} with a new SDP.\n * @param {string} sdp\n * @returns {void}\n */\n\n }, {\n key: 'update',\n value: function update(sdp) {\n ['audio', 'video'].forEach(function (kind) {\n _update(this[kind], parse(kind, sdp));\n }, this);\n }\n }]);\n\n return OrderedTrackMatcher;\n}();\n\nmodule.exports = OrderedTrackMatcher;","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar TrackSignaling = require('./track');\n\n/**\n * A {@link RemoteTrackPublication} implementation\n * @extends TrackSignaling\n */\n\nvar RemoteTrackPublicationSignaling = function (_TrackSignaling) {\n _inherits(RemoteTrackPublicationSignaling, _TrackSignaling);\n\n /**\n * Construct a {@link RemoteTrackPublicationSignaling}.\n * @param {Track.SID} sid\n * @param {string} name\n * @param {Track.Kind} kind\n * @param {boolean} isEnabled\n * @param {Track.Priority} priority\n */\n function RemoteTrackPublicationSignaling(sid, name, kind, isEnabled, priority) {\n _classCallCheck(this, RemoteTrackPublicationSignaling);\n\n var _this = _possibleConstructorReturn(this, (RemoteTrackPublicationSignaling.__proto__ || Object.getPrototypeOf(RemoteTrackPublicationSignaling)).call(this, name, kind, isEnabled, priority));\n\n Object.defineProperties(_this, {\n _isSwitchedOff: {\n value: false,\n writable: true\n }\n });\n _this.setSid(sid);\n return _this;\n }\n\n /**\n * Whether the {@link RemoteTrackPublicationSignaling} is subscribed to.\n * @property {boolean}\n */\n\n\n _createClass(RemoteTrackPublicationSignaling, [{\n key: 'subscribeFailed',\n\n\n /**\n * @param {Error} error\n * @returns {this}\n */\n value: function subscribeFailed(error) {\n if (!this.error) {\n this._error = error;\n this.emit('updated');\n }\n return this;\n }\n\n /**\n * Update the publish {@link Track.Priority}.\n * @param {Track.Priority} priority\n * @returns {this}\n */\n\n }, {\n key: 'setPriority',\n value: function setPriority(priority) {\n if (this._priority !== priority) {\n this._priority = priority;\n this.emit('updated');\n }\n return this;\n }\n\n /**\n * Updates track switch on/off state.\n * @param {boolean} isSwitchedOff\n * @returns {this}\n */\n\n }, {\n key: 'setSwitchedOff',\n value: function setSwitchedOff(isSwitchedOff) {\n if (this._isSwitchedOff !== isSwitchedOff) {\n this._isSwitchedOff = isSwitchedOff;\n this.emit('updated');\n }\n return this;\n }\n }, {\n key: 'isSubscribed',\n get: function get() {\n return !!this.trackTransceiver;\n }\n\n /**\n * Whether the {@link RemoteTrackPublicationSignaling} is switched off.\n * @property {boolean}\n */\n\n }, {\n key: 'isSwitchedOff',\n get: function get() {\n return this._isSwitchedOff;\n }\n }]);\n\n return RemoteTrackPublicationSignaling;\n}(TrackSignaling);\n\nmodule.exports = RemoteTrackPublicationSignaling;","'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar NetworkQualityMediaStats = require('./networkqualitymediastats');\n\n/**\n * {@link NetworkQualityMediaStats} for a {@link Participant}'s video.\n */\n\nvar NetworkQualityVideoStats = function (_NetworkQualityMediaS) {\n _inherits(NetworkQualityVideoStats, _NetworkQualityMediaS);\n\n /**\n * Construct a {@link NetworkQualityVideoStats}.\n * @param {MediaLevels} mediaLevels\n */\n function NetworkQualityVideoStats(mediaLevels) {\n _classCallCheck(this, NetworkQualityVideoStats);\n\n return _possibleConstructorReturn(this, (NetworkQualityVideoStats.__proto__ || Object.getPrototypeOf(NetworkQualityVideoStats)).call(this, mediaLevels));\n }\n\n return NetworkQualityVideoStats;\n}(NetworkQualityMediaStats);\n\nmodule.exports = NetworkQualityVideoStats;","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar LocalTrackPublicationSignaling = require('../localtrackpublication');\nvar createTwilioError = require('../../util/twilio-video-errors').createTwilioError;\n\n/**\n * @extends LocalTrackPublicationSignaling\n */\n\nvar LocalTrackPublicationV2 = function (_LocalTrackPublicatio) {\n _inherits(LocalTrackPublicationV2, _LocalTrackPublicatio);\n\n /**\n * Construct a {@link LocalTrackPublicationV2}.\n * @param {DataTrackSender|MediaTrackSender} trackSender\n * @param {string} name\n * @param {Track.Priority} priority\n */\n function LocalTrackPublicationV2(trackSender, name, priority) {\n _classCallCheck(this, LocalTrackPublicationV2);\n\n return _possibleConstructorReturn(this, (LocalTrackPublicationV2.__proto__ || Object.getPrototypeOf(LocalTrackPublicationV2)).call(this, trackSender, name, priority));\n }\n\n /**\n * Get the {@link LocalTrackPublicationV2#Representation} of a given {@link TrackSignaling}.\n * @returns {LocalTrackPublicationV2#Representation} - without the SID\n */\n\n\n _createClass(LocalTrackPublicationV2, [{\n key: 'getState',\n value: function getState() {\n return {\n enabled: this.isEnabled,\n id: this.id,\n kind: this.kind,\n name: this.name,\n priority: this.updatedPriority\n };\n }\n\n /**\n * Compare the {@link LocalTrackPublicationV2} to a {@link LocalTrackPublicationV2#Representation} of itself\n * and perform any updates necessary.\n * @param {PublishedTrack} track\n * @returns {this}\n * @fires TrackSignaling#updated\n */\n\n }, {\n key: 'update',\n value: function update(track) {\n switch (track.state) {\n case 'ready':\n this.setSid(track.sid);\n break;\n case 'failed':\n {\n var error = track.error;\n this.publishFailed(createTwilioError(error.code, error.message));\n break;\n }\n default:\n // 'created'\n break;\n }\n return this;\n }\n }]);\n\n return LocalTrackPublicationV2;\n}(LocalTrackPublicationSignaling);\n\n/**\n * The Room Signaling Protocol (RSP) representation of a {@link LocalTrackPublicationV2}.\n * @typedef {object} LocalTrackPublicationV2#Representation\n * @property {boolean} enabled\n * @property {Track.ID} id\n * @property {Track.Kind} kind\n * @property {string} name\n * @priority {Track.Priority} priority\n * @property {Track.SID} sid\n */\n\nmodule.exports = LocalTrackPublicationV2;","'use strict';\n\n/**\n * A {@link Timeout} represents a resettable and clearable timeout.\n */\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Timeout = function () {\n /**\n * Construct a {@link Timeout}.\n * @param {function} fn - Function to call\n * @param {number} delay - Delay in milliseconds\n * @param {boolean} [autoStart=true] - If true, then start the {@link Timeout}.\n */\n function Timeout(fn, delay) {\n var autoStart = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n\n _classCallCheck(this, Timeout);\n\n Object.defineProperties(this, {\n _delay: {\n value: delay,\n writable: true\n },\n _fn: {\n value: fn\n },\n _timeout: {\n value: null,\n writable: true\n }\n });\n\n if (autoStart) {\n this.start();\n }\n }\n\n /**\n * The {@link Timeout} delay in milliseconds.\n * @property {number}\n */\n\n\n _createClass(Timeout, [{\n key: 'setDelay',\n\n\n /**\n * Update the {@link Timeout} delay.\n * @param {number} delay\n * @returns {void}\n */\n value: function setDelay(delay) {\n this._delay = delay;\n }\n\n /**\n * Start the {@link Timeout}, if not already started.\n * @returns {void}\n */\n\n }, {\n key: 'start',\n value: function start() {\n var _this = this;\n\n if (!this.isSet) {\n this._timeout = setTimeout(function () {\n var fn = _this._fn;\n _this.clear();\n fn();\n }, this._delay);\n }\n }\n\n /**\n * Clear the {@link Timeout}.\n * @returns {void}\n */\n\n }, {\n key: 'clear',\n value: function clear() {\n clearTimeout(this._timeout);\n this._timeout = null;\n }\n\n /**\n * Reset the {@link Timeout}.\n * @returns {void}\n */\n\n }, {\n key: 'reset',\n value: function reset() {\n this.clear();\n this.start();\n }\n }, {\n key: 'delay',\n get: function get() {\n return this._delay;\n }\n\n /**\n * Whether the {@link Timeout} is set.\n * @property {boolean}\n */\n\n }, {\n key: 'isSet',\n get: function get() {\n return !!this._timeout;\n }\n }]);\n\n return Timeout;\n}();\n\nmodule.exports = Timeout;","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar IceReport = require('./icereport');\n\n/**\n * @property {IceReport} lastReport\n * @property {?RTCStats} lastStats\n */\n\nvar IceReportFactory = function () {\n /**\n * Construct an {@link IceReportFactory}.\n */\n function IceReportFactory() {\n _classCallCheck(this, IceReportFactory);\n\n Object.defineProperties(this, {\n lastReport: {\n enumerable: true,\n value: new IceReport(0, 0),\n writable: true\n },\n lastStats: {\n enumerable: true,\n value: null,\n writable: true\n }\n });\n }\n\n /**\n * Create an {@link IceReport}.\n * @param {RTCStats} newerStats;\n * @returns {IceReport}\n */\n\n\n _createClass(IceReportFactory, [{\n key: 'next',\n value: function next(newerStats) {\n var olderStats = this.lastStats;\n this.lastStats = newerStats;\n if (olderStats) {\n var report = olderStats.id === newerStats.id ? IceReport.of(olderStats, newerStats) : new IceReport(0, 0);\n this.lastReport = report;\n }\n return this.lastReport;\n }\n }]);\n\n return IceReportFactory;\n}();\n\nmodule.exports = IceReportFactory;","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"twilio-video-call\"},[_c('div',{staticClass:\"video-call-wrapper\"},[_c('div',{staticClass:\"video-call-container\"},[_c('div',{staticClass:\"video-call-display\",class:{ 'doctor': _vm.isDoctor },attrs:{\"id\":\"remoteTrack\"}}),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.isPreviewShown),expression:\"isPreviewShown\"}],staticClass:\"video-call-thumb-wrapper\",attrs:{\"id\":\"localTrack\"}}),_c('div',{staticClass:\"video-timer-view\"},[_vm._v(\"\\n \"+_vm._s(_vm.timerDisplay)+\"\\n \")])]),(!_vm.started || _vm.loading)?_c('div',{staticClass:\"overlay-video-loading\"},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.started),expression:\"!started\"}]},[_vm._v(\"\\n \"+_vm._s(_vm.startText)+\"\\n \")]),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.started && _vm.loading),expression:\"started && loading\"}]},[_vm._v(\"\\n \"+_vm._s(_vm.waitingText)+\"\\n \")])]):_vm._e(),(_vm.isEnded)?_c('div',{staticClass:\"overlay-video-loading\"},[_c('div',[_vm._v(\"Video call session ended.\")])]):_vm._e()]),(!_vm.isDoctor)?_c('div',{staticClass:\"video-log-wrapper\"},[(_vm.started && !_vm.loading)?[_c('button',{staticClass:\"btn btn-info mb-2\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.showHidePreview}},[_vm._v(_vm._s(_vm.showHidePreviewButton))])]:_vm._e(),_vm._t(\"default\")],2):_vm._e(),_c('popup-modal',{ref:\"popupErrorVideo\",attrs:{\"hasCloseButton\":false,\"title\":\"Failed Starting Video Call Session\"}},[_c('template',{slot:\"content\"},[_c('p',[_vm._v(\"\\n Unable to access Camera or Microphone.\\n \")]),_c('p',[_vm._v(\"\\n This video calling feature requires Camera and Microphone permissions, so please allow the Camera and Microphone permission when prompted.\\n \")]),_c('p',[_vm._v(\"\\n If you are using iOS device, please consider using Safari browser to try again.\\n \")])]),_c('template',{slot:\"footer\"},[_c('button',{staticClass:\"btn btn-secondary\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.dismissError}},[_vm._v(\"Okay\")])])],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./index.vue?vue&type=template&id=286b19a0&\"\nimport script from \"./index.vue?vue&type=script&lang=js&\"\nexport * from \"./index.vue?vue&type=script&lang=js&\"\nimport style0 from \"./index.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar MediaTrackSender = require('./sender');\n\nfunction mixinLocalMediaTrack(AudioOrVideoTrack) {\n /**\n * A {@link LocalMediaTrack} represents audio or video that your\n * {@link LocalParticipant} is sending to a {@link Room}. As such, it can be\n * enabled and disabled with {@link LocalMediaTrack#enable} and\n * {@link LocalMediaTrack#disable} or stopped completely with\n * {@link LocalMediaTrack#stop}.\n * @emits LocalMediaTrack#stopped\n */\n return function (_AudioOrVideoTrack) {\n _inherits(LocalMediaTrack, _AudioOrVideoTrack);\n\n /**\n * Construct a {@link LocalMediaTrack} from a MediaStreamTrack.\n * @param {MediaStreamTrack} mediaStreamTrack - The underlying MediaStreamTrack\n * @param {LocalTrackOptions} [options] - {@link LocalTrack} options\n */\n function LocalMediaTrack(mediaStreamTrack, options) {\n _classCallCheck(this, LocalMediaTrack);\n\n options = Object.assign({}, options);\n\n var mediaTrackSender = new MediaTrackSender(mediaStreamTrack);\n\n var _this = _possibleConstructorReturn(this, (LocalMediaTrack.__proto__ || Object.getPrototypeOf(LocalMediaTrack)).call(this, mediaTrackSender, options));\n\n Object.defineProperties(_this, {\n _didCallEnd: {\n value: false,\n writable: true\n },\n _trackSender: {\n value: mediaTrackSender\n },\n id: {\n enumerable: true,\n value: mediaStreamTrack.id\n },\n isEnabled: {\n enumerable: true,\n get: function get() {\n return mediaStreamTrack.enabled;\n }\n },\n isStopped: {\n enumerable: true,\n get: function get() {\n return mediaStreamTrack.readyState === 'ended';\n }\n }\n });\n return _this;\n }\n\n /**\n * @private\n */\n\n\n _createClass(LocalMediaTrack, [{\n key: '_end',\n value: function _end() {\n if (this._didCallEnd) {\n return;\n }\n _get(LocalMediaTrack.prototype.__proto__ || Object.getPrototypeOf(LocalMediaTrack.prototype), '_end', this).call(this);\n this._didCallEnd = true;\n this.emit('stopped', this);\n }\n }, {\n key: 'enable',\n value: function enable(enabled) {\n enabled = typeof enabled === 'boolean' ? enabled : true;\n if (enabled !== this.mediaStreamTrack.enabled) {\n this._log.info((enabled ? 'En' : 'Dis') + 'abling');\n this.mediaStreamTrack.enabled = enabled;\n this.emit(enabled ? 'enabled' : 'disabled', this);\n }\n return this;\n }\n }, {\n key: 'disable',\n value: function disable() {\n return this.enable(false);\n }\n }, {\n key: 'stop',\n value: function stop() {\n this._log.info('Stopping');\n this.mediaStreamTrack.stop();\n this._end();\n return this;\n }\n }]);\n\n return LocalMediaTrack;\n }(AudioOrVideoTrack);\n}\n\nmodule.exports = mixinLocalMediaTrack;","'use strict';\n\n/**\n * @property {StatsId} id\n * @property {TrackId} trackId\n * @property {RTCStats} lastStats\n */\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar SenderOrReceiverReportFactory =\n/**\n * @param {StatsId} id\n * @param {TrackId} trackId\n * @param {RTCStats} initialStats\n */\nfunction SenderOrReceiverReportFactory(id, trackId, initialStats) {\n _classCallCheck(this, SenderOrReceiverReportFactory);\n\n Object.defineProperties(this, {\n id: {\n enumerable: true,\n value: id,\n writable: true\n },\n trackId: {\n enumerable: true,\n value: trackId,\n writable: true\n },\n lastStats: {\n enumerable: true,\n value: initialStats,\n writable: true\n }\n });\n};\n\nmodule.exports = SenderOrReceiverReportFactory;","'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar RemoteTrackStats = require('./remotetrackstats');\n\n/**\n * Statistics for a {@link VideoTrack}.\n * @extends RemoteTrackStats\n * @property {?VideoTrack#Dimensions} dimensions - Received video resolution\n * @property {?number} frameRate - Received video frame rate\n */\n\nvar RemoteVideoTrackStats = function (_RemoteTrackStats) {\n _inherits(RemoteVideoTrackStats, _RemoteTrackStats);\n\n /**\n * @param {string} trackId - {@link VideoTrack} ID\n * @param {StandardizedTrackStatsReport} statsReport\n */\n function RemoteVideoTrackStats(trackId, statsReport) {\n _classCallCheck(this, RemoteVideoTrackStats);\n\n var _this = _possibleConstructorReturn(this, (RemoteVideoTrackStats.__proto__ || Object.getPrototypeOf(RemoteVideoTrackStats)).call(this, trackId, statsReport));\n\n var dimensions = null;\n if (typeof statsReport.frameWidthReceived === 'number' && typeof statsReport.frameHeightReceived === 'number') {\n dimensions = {};\n\n Object.defineProperties(dimensions, {\n width: {\n value: statsReport.frameWidthReceived,\n enumerable: true\n },\n height: {\n value: statsReport.frameHeightReceived,\n enumerable: true\n }\n });\n }\n\n Object.defineProperties(_this, {\n dimensions: {\n value: dimensions,\n enumerable: true\n },\n frameRate: {\n value: typeof statsReport.frameRateReceived === 'number' ? statsReport.frameRateReceived : null,\n enumerable: true\n }\n });\n return _this;\n }\n\n return RemoteVideoTrackStats;\n}(RemoteTrackStats);\n\nmodule.exports = RemoteVideoTrackStats;","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"appointment-detail\"},[(_vm.isAppointment)?[_c('div',{staticClass:\"appointment-detail-row\"},[_c('div',{staticClass:\"appointment-detail-title\",class:{ 'patient-appointment-detail-title': _vm.isPatient }},[_c('b',[_vm._v(\"Appointment ID\")])]),_c('div',{staticClass:\"appointment-detail-content\"},[_vm._v(\"\\n \"+_vm._s(_vm.appointmentId)+\"\\n \")])])]:_vm._e(),(_vm.isConsultation)?[_c('div',{staticClass:\"appointment-detail-row\"},[_c('div',{staticClass:\"appointment-detail-title\",class:{ 'patient-appointment-detail-title': _vm.isPatient }},[_c('b',[_vm._v(\"Consultation ID\")])]),_c('div',{staticClass:\"appointment-detail-content\"},[_vm._v(\"\\n \"+_vm._s(_vm.consultationId)+\"\\n \")])])]:_vm._e(),_c('div',{staticClass:\"appointment-detail-row\"},[_c('div',{staticClass:\"appointment-detail-title\",class:{ 'patient-appointment-detail-title': _vm.isPatient }},[_c('b',[_vm._v(\"Date\")])]),_c('div',{staticClass:\"appointment-detail-content\"},[_vm._v(\"\\n \"+_vm._s(_vm.dateDisplay)+\"\\n \")])]),_c('div',{staticClass:\"appointment-detail-row\"},[_c('div',{staticClass:\"appointment-detail-title\",class:{ 'patient-appointment-detail-title': _vm.isPatient }},[_c('b',[_vm._v(\"Time\")])]),_c('div',{staticClass:\"appointment-detail-content\"},[_vm._v(\"\\n \"+_vm._s(_vm.timeDisplay)+\"\\n \")])]),_c('div',{staticClass:\"appointment-detail-row\"},[_c('div',{staticClass:\"appointment-detail-title\",class:{ 'patient-appointment-detail-title': _vm.isPatient }},[_c('b',[_vm._v(_vm._s(_vm.participantNameDisplay))])]),_c('div',{staticClass:\"appointment-detail-content\"},[_vm._v(\"\\n \"+_vm._s(_vm.appointmentParticipant ? _vm.appointmentParticipant : '-')+\"\\n \")])]),(_vm.isPatient)?_c('div',{staticClass:\"appointment-detail-row\"},[_c('div',{staticClass:\"appointment-detail-title\",class:{ 'patient-appointment-detail-title': _vm.isPatient }},[_c('b',[_vm._v(\"Doctor's Hospital or Clinic Affiliation\")])]),_c('div',{staticClass:\"appointment-detail-content\"},[_vm._v(\"\\n \"+_vm._s(_vm.doctorClinicHospitalName ? _vm.doctorClinicHospitalName : '-')+\"\\n \")])]):_vm._e(),(_vm.isDoctor)?[_c('div',{staticClass:\"appointment-detail-row\"},[_c('div',{staticClass:\"appointment-detail-title\",class:{ 'patient-appointment-detail-title': _vm.isPatient }},[_c('b',[_vm._v(\"Patient Gender\")])]),_c('div',{staticClass:\"appointment-detail-content\"},[_vm._v(\"\\n \"+_vm._s(_vm.patientGender ? _vm.patientGender : \"Not Specified\")+\"\\n \")])]),_c('div',{staticClass:\"appointment-detail-row\"},[_c('div',{staticClass:\"appointment-detail-title\",class:{ 'patient-appointment-detail-title': _vm.isPatient }},[_c('b',[_vm._v(\"Patient Age\")])]),_c('div',{staticClass:\"appointment-detail-content\"},[_vm._v(\"\\n \"+_vm._s(_vm.patientAge > -1 ? (_vm.patientAge + \" Years Old\"): \"Not Specified\")+\"\\n \")])])]:_vm._e(),(_vm.shouldShowPatientMailingAddress)?[_c('div',{staticClass:\"appointment-detail-row\"},[_c('div',{staticClass:\"appointment-detail-title\",class:{ 'patient-appointment-detail-title': _vm.isPatient }},[_c('b',[_vm._v(\"Mailing Address\")])]),_c('div',{staticClass:\"appointment-detail-content\",domProps:{\"innerHTML\":_vm._s(_vm.patientMailingAddress)}})])]:_vm._e(),(_vm.isPatient && _vm.isAppointment)?[_c('div',{staticClass:\"appointment-detail-row\"},[_c('div',{staticClass:\"appointment-detail-title\",class:{ 'patient-appointment-detail-title': _vm.isPatient }},[_c('b',[_vm._v(\"Status\")])]),_c('div',{staticClass:\"appointment-detail-content\"},[(_vm.appointmentType === 1)?_c('user-appointment-status',{attrs:{\"statusId\":_vm.appointmentStatus}}):_vm._e()],1)])]:_vm._e(),(_vm.hasRemarks)?[_c('div',{staticClass:\"appointment-detail-row\"},[_c('div',{staticClass:\"appointment-detail-title\",class:{ 'patient-appointment-detail-title': _vm.isPatient }},[_c('b',[_vm._v(\"Remarks\")])]),_c('div',{staticClass:\"appointment-detail-content\"},[(_vm.appointmentRemarksParsed.length === 0)?_c('p',[_vm._v(\"-\")]):_c('p',{domProps:{\"innerHTML\":_vm._s(_vm.appointmentRemarksParsed)}})])])]:_vm._e()],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./index.vue?vue&type=template&id=4f05b674&\"\nimport script from \"./index.vue?vue&type=script&lang=js&\"\nexport * from \"./index.vue?vue&type=script&lang=js&\"\nimport style0 from \"./index.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","'use strict';\n\nvar detectSilence = require('./detectsilence');\n\n/**\n * This function attempts to workaround WebKit Bug 180748. It does so by\n *\n * 1. Calling `getUserMedia`, and\n * 2. Checking to see if the resulting MediaStream is silent.\n * 3. If so, repeat Step 1; otherwise, return the MediaStream.\n *\n * The function only repeats up to `n` times, and it only waits `timeout`\n * milliseconds when detecting silence. Assuming `getUserMedia` is\n * instantaneous, in the best case, this function returns a Promise that\n * resolves immediately; in the worst case, this function returns a Promise that\n * resolves in `n` * `timeout` milliseconds.\n *\n * @param {Log} log\n * @param {function(MediaStreamConstraints): Promise} getUserMedia\n * @param {MediaStreamConstraints} constraints\n * @param {number} [n=3]\n * @param {number} [timeout=250]\n * @returns Promise\n */\nfunction workaround(log, getUserMedia, constraints, n, timeout) {\n n = typeof n === 'number' ? n : 3;\n var retry = 0;\n\n // NOTE(mroberts): We have to delay require-ing AudioContextFactory, because\n // it exports a default instance whose constructor calls Object.assign.\n var AudioContextFactory = require('./audiocontext');\n var holder = {};\n var audioContext = AudioContextFactory.getOrCreate(holder);\n\n /**\n * We can't use async/await yet, so I need to factor this out.\n * @returns {Promise}\n */\n function doWorkaround() {\n return getUserMedia(constraints).then(function (stream) {\n var isSilentPromise = constraints.audio ? detectSilence(audioContext, stream, timeout).catch(function () {\n return true;\n }) : Promise.resolve(false);\n return isSilentPromise.then(function (isSilent) {\n if (!isSilent) {\n log.info('Got a non-silent audio MediaStreamTrack; returning it.');\n return stream;\n } else if (n <= 0) {\n log.warn('Got a silent audio MediaStreamTrack. Normally we would try \\\nto get a new one, but we\\'ve run out of retries; returning it anyway.');\n return stream;\n }\n log.warn('Got a silent audio MediaStreamTrack. Stopping all MediaStreamTracks and calling getUserMedia again. This is retry #' + ++retry + '.');\n stream.getTracks().forEach(function (track) {\n return track.stop();\n });\n n--;\n return doWorkaround();\n });\n });\n }\n\n return doWorkaround().then(function (stream) {\n AudioContextFactory.release(holder);\n return stream;\n }, function (error) {\n AudioContextFactory.release(holder);\n throw error;\n });\n}\n\nmodule.exports = workaround;","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar LocalTrackPublication = require('./localtrackpublication');\n\n/**\n * A {@link LocalDataTrackPublication} is a {@link LocalDataTrack} that has been\n * published to a {@link Room}.\n * @extends LocalTrackPublication\n * @property {Track.Kind} kind - \"data\"\n * @property {LocalDataTrack} track - the {@link LocalDataTrack}\n */\n\nvar LocalDataTrackPublication = function (_LocalTrackPublicatio) {\n _inherits(LocalDataTrackPublication, _LocalTrackPublicatio);\n\n /**\n * Construct a {@link LocalDataTrackPublication}.\n * @param {LocalTrackPublicationSignaling} signaling - The corresponding\n * {@link LocalTrackPublicationSignaling}\n * @param {LocalDataTrack} track - the {@link LocalDataTrack}\n * @param {function(LocalTrackPublication): void} unpublish - The callback\n * that unpublishes the {@link LocalTrackPublication}\n * @param {TrackPublicationOptions} options - {@link LocalTrackPublication} options\n */\n function LocalDataTrackPublication(signaling, track, unpublish, options) {\n _classCallCheck(this, LocalDataTrackPublication);\n\n return _possibleConstructorReturn(this, (LocalDataTrackPublication.__proto__ || Object.getPrototypeOf(LocalDataTrackPublication)).call(this, signaling, track, unpublish, options));\n }\n\n _createClass(LocalDataTrackPublication, [{\n key: 'toString',\n value: function toString() {\n return '[LocalDataTrackPublication #' + this._instanceId + ': ' + this.trackSid + ']';\n }\n }]);\n\n return LocalDataTrackPublication;\n}(LocalTrackPublication);\n\nmodule.exports = LocalDataTrackPublication;","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar DefaultBackoff = require('backoff');\n\nvar _require = require('@twilio/webrtc'),\n DefaultMediaStream = _require.MediaStream,\n DefaultRTCIceCandidate = _require.RTCIceCandidate,\n DefaultRTCPeerConnection = _require.RTCPeerConnection,\n DefaultRTCSessionDescription = _require.RTCSessionDescription,\n getStatistics = _require.getStats;\n\nvar _require2 = require('@twilio/webrtc/lib/util'),\n guessBrowser = _require2.guessBrowser;\n\nvar _require3 = require('@twilio/webrtc/lib/util/sdp'),\n getSdpFormat = _require3.getSdpFormat;\n\nvar _require4 = require('../../util/constants'),\n DEFAULT_ICE_GATHERING_TIMEOUT_MS = _require4.DEFAULT_ICE_GATHERING_TIMEOUT_MS,\n DEFAULT_LOG_LEVEL = _require4.DEFAULT_LOG_LEVEL,\n DEFAULT_SESSION_TIMEOUT_SEC = _require4.DEFAULT_SESSION_TIMEOUT_SEC,\n iceRestartBackoffConfig = _require4.iceRestartBackoffConfig;\n\nvar _require5 = require('../../util/sdp'),\n createCodecMapForMediaSection = _require5.createCodecMapForMediaSection,\n getMediaSections = _require5.getMediaSections,\n revertSimulcastForNonVP8MediaSections = _require5.revertSimulcastForNonVP8MediaSections,\n setBitrateParameters = _require5.setBitrateParameters,\n setCodecPreferences = _require5.setCodecPreferences,\n setSimulcast = _require5.setSimulcast,\n unifiedPlanAddOrRewriteNewTrackIds = _require5.unifiedPlanAddOrRewriteNewTrackIds,\n unifiedPlanAddOrRewriteTrackIds = _require5.unifiedPlanAddOrRewriteTrackIds,\n unifiedPlanFilterLocalCodecs = _require5.unifiedPlanFilterLocalCodecs;\n\nvar DefaultTimeout = require('../../util/timeout');\n\nvar _require6 = require('../../util/twilio-video-errors'),\n MediaClientLocalDescFailedError = _require6.MediaClientLocalDescFailedError,\n MediaClientRemoteDescFailedError = _require6.MediaClientRemoteDescFailedError;\n\nvar _require7 = require('../../util'),\n buildLogLevels = _require7.buildLogLevels,\n isChromeScreenShareTrack = _require7.isChromeScreenShareTrack,\n oncePerTick = _require7.oncePerTick;\n\nvar IceBox = require('./icebox');\nvar DefaultIceConnectionMonitor = require('./iceconnectionmonitor.js');\nvar DataTrackReceiver = require('../../data/receiver');\nvar MediaTrackReceiver = require('../../media/track/receiver');\nvar StateMachine = require('../../statemachine');\nvar Log = require('../../util/log');\nvar IdentityTrackMatcher = require('../../util/sdp/trackmatcher/identity');\nvar OrderedTrackMatcher = require('../../util/sdp/trackmatcher/ordered');\nvar MIDTrackMatcher = require('../../util/sdp/trackmatcher/mid');\nvar workaroundIssue8329 = require('../../util/sdp/issue8329');\n\nvar guess = guessBrowser();\nvar isChrome = guess === 'chrome';\nvar isFirefox = guess === 'firefox';\nvar isSafari = guess === 'safari';\n\nvar isRTCRtpSenderParamsSupported = typeof RTCRtpSender !== 'undefined' && typeof RTCRtpSender.prototype.getParameters === 'function' && typeof RTCRtpSender.prototype.setParameters === 'function';\n\nvar nInstances = 0;\n\n/*\nPeerConnectionV2 States\n-----------------------\n\n +------+ +--------+\n | | | |\n | open |--->| closed |\n | | | |\n +------+ +--------+\n | ^ ^\n | | |\n | | |\n v | |\n +----------+ |\n | | |\n | updating |------+\n | |\n +----------+\n\n*/\n\nvar states = {\n open: ['closed', 'updating'],\n updating: ['closed', 'open'],\n closed: []\n};\n\n/**\n * @extends StateMachine\n * @property {id}\n * @emits PeerConnectionV2#connectionStateChanged\n * @emits PeerConnectionV2#iceConnectionStateChanged\n * @emits PeerConnectionV2#candidates\n * @emits PeerConnectionV2#description\n */\n\nvar PeerConnectionV2 = function (_StateMachine) {\n _inherits(PeerConnectionV2, _StateMachine);\n\n /**\n * Construct a {@link PeerConnectionV2}.\n * @param {string} id\n * @param {EncodingParametersImpl} encodingParameters\n * @param {PreferredCodecs} preferredCodecs\n * @param {object} [options]\n */\n function PeerConnectionV2(id, encodingParameters, preferredCodecs, options) {\n _classCallCheck(this, PeerConnectionV2);\n\n var _this = _possibleConstructorReturn(this, (PeerConnectionV2.__proto__ || Object.getPrototypeOf(PeerConnectionV2)).call(this, 'open', states));\n\n options = Object.assign({\n enableDscp: false,\n dummyAudioMediaStreamTrack: null,\n isChromeScreenShareTrack: isChromeScreenShareTrack,\n iceServers: [],\n isRTCRtpSenderParamsSupported: isRTCRtpSenderParamsSupported,\n logLevel: DEFAULT_LOG_LEVEL,\n offerOptions: {},\n revertSimulcastForNonVP8MediaSections: revertSimulcastForNonVP8MediaSections,\n sessionTimeout: DEFAULT_SESSION_TIMEOUT_SEC * 1000,\n setBitrateParameters: setBitrateParameters,\n setCodecPreferences: setCodecPreferences,\n setSimulcast: setSimulcast,\n Backoff: DefaultBackoff,\n IceConnectionMonitor: DefaultIceConnectionMonitor,\n MediaStream: DefaultMediaStream,\n RTCIceCandidate: DefaultRTCIceCandidate,\n RTCPeerConnection: DefaultRTCPeerConnection,\n RTCSessionDescription: DefaultRTCSessionDescription,\n Timeout: DefaultTimeout\n }, options);\n\n var configuration = getConfiguration(options);\n var sdpFormat = getSdpFormat(configuration.sdpSemantics);\n var isUnifiedPlan = sdpFormat === 'unified';\n\n var localMediaStream = isUnifiedPlan ? null : new options.MediaStream();\n var logLevels = buildLogLevels(options.logLevel);\n var RTCPeerConnection = options.RTCPeerConnection;\n\n if (options.enableDscp === true) {\n options.chromeSpecificConstraints = options.chromeSpecificConstraints || {};\n options.chromeSpecificConstraints.optional = options.chromeSpecificConstraints.optional || [];\n options.chromeSpecificConstraints.optional.push({ googDscp: true });\n }\n\n var log = options.log ? options.log.createLog('signaling', _this) : new Log('webrtc', _this, logLevels);\n var peerConnection = new RTCPeerConnection(configuration, options.chromeSpecificConstraints);\n\n if (options.dummyAudioMediaStreamTrack) {\n peerConnection.addTrack(options.dummyAudioMediaStreamTrack, localMediaStream || new options.MediaStream());\n }\n\n Object.defineProperties(_this, {\n _appliedTrackIdsToAttributes: {\n value: new Map(),\n writable: true\n },\n _dataChannels: {\n value: new Map()\n },\n _dataTrackReceivers: {\n value: new Set()\n },\n _descriptionRevision: {\n writable: true,\n value: 0\n },\n _didGenerateLocalCandidates: {\n writable: true,\n value: false\n },\n _enableDscp: {\n value: options.enableDscp\n },\n _encodingParameters: {\n value: encodingParameters\n },\n _isChromeScreenShareTrack: {\n value: options.isChromeScreenShareTrack\n },\n _iceGatheringFailed: {\n value: false,\n writable: true\n },\n _iceGatheringTimeout: {\n value: new options.Timeout(function () {\n return _this._handleIceGatheringTimeout();\n }, DEFAULT_ICE_GATHERING_TIMEOUT_MS, false)\n },\n _iceRestartBackoff: {\n value: options.Backoff.exponential(iceRestartBackoffConfig)\n },\n _instanceId: {\n value: ++nInstances\n },\n _isIceConnectionInactive: {\n writable: true,\n value: false\n },\n _isIceLite: {\n writable: true,\n value: false\n },\n _isIceRestartBackoffInProgress: {\n writable: true,\n value: false\n },\n _isRestartingIce: {\n writable: true,\n value: false\n },\n _isUnifiedPlan: {\n value: isUnifiedPlan\n },\n _isRTCRtpSenderParamsSupported: {\n value: options.isRTCRtpSenderParamsSupported\n },\n _lastIceConnectionState: {\n writable: true,\n value: null\n },\n _lastStableDescriptionRevision: {\n writable: true,\n value: 0\n },\n _localCandidates: {\n writable: true,\n value: []\n },\n _localCodecs: {\n value: new Set()\n },\n _localCandidatesRevision: {\n writable: true,\n value: 1\n },\n _localDescriptionWithoutSimulcast: {\n writable: true,\n value: null\n },\n _localDescription: {\n writable: true,\n value: null\n },\n _localMediaStream: {\n value: localMediaStream\n },\n _localUfrag: {\n writable: true,\n value: null\n },\n _log: {\n value: log\n },\n _remoteCodecMaps: {\n value: new Map()\n },\n _rtpSenders: {\n value: new Map()\n },\n _iceConnectionMonitor: {\n value: new options.IceConnectionMonitor(peerConnection)\n },\n _mediaTrackReceivers: {\n value: new Set()\n },\n _needsAnswer: {\n writable: true,\n value: false\n },\n _negotiationRole: {\n writable: true,\n value: null\n },\n _offerOptions: {\n writable: true,\n value: options.offerOptions\n },\n _peerConnection: {\n value: peerConnection\n },\n _preferredAudioCodecs: {\n value: preferredCodecs.audio\n },\n _preferredVideoCodecs: {\n value: preferredCodecs.video\n },\n _shouldApplySimulcast: {\n value: (isChrome || isSafari) && preferredCodecs.video.some(function (codecSettings) {\n return codecSettings.codec.toLowerCase() === 'vp8' && codecSettings.simulcast;\n })\n },\n _queuedDescription: {\n writable: true,\n value: null\n },\n _iceReconnectTimeout: {\n value: new options.Timeout(function () {\n log.debug('ICE reconnect timed out');\n _this.close();\n }, options.sessionTimeout, false)\n },\n _recycledTransceivers: {\n value: {\n audio: [],\n video: []\n }\n },\n _replaceTrackPromises: {\n value: new Map()\n },\n _remoteCandidates: {\n writable: true,\n value: new IceBox()\n },\n _sdpFormat: {\n value: sdpFormat\n },\n _setBitrateParameters: {\n value: options.setBitrateParameters\n },\n _setCodecPreferences: {\n value: options.setCodecPreferences\n },\n _setSimulcast: {\n value: options.setSimulcast\n },\n _revertSimulcastForNonVP8MediaSections: {\n value: options.revertSimulcastForNonVP8MediaSections\n },\n _RTCIceCandidate: {\n value: options.RTCIceCandidate\n },\n _RTCPeerConnection: {\n value: options.RTCPeerConnection\n },\n _RTCSessionDescription: {\n value: options.RTCSessionDescription\n },\n _shouldOffer: {\n writable: true,\n value: false\n },\n _shouldRestartIce: {\n writable: true,\n value: false\n },\n _trackIdsToAttributes: {\n value: new Map(),\n writable: true\n },\n _trackMatcher: {\n writable: true,\n value: null\n },\n id: {\n enumerable: true,\n value: id\n }\n });\n\n encodingParameters.on('changed', oncePerTick(function () {\n if (_this._isRTCRtpSenderParamsSupported) {\n if (!_this._needsAnswer) {\n updateEncodingParameters(_this);\n }\n return;\n }\n _this.offer();\n }));\n\n peerConnection.addEventListener('connectionstatechange', _this._handleConnectionStateChange.bind(_this));\n peerConnection.addEventListener('datachannel', _this._handleDataChannelEvent.bind(_this));\n peerConnection.addEventListener('icecandidate', _this._handleIceCandidateEvent.bind(_this));\n peerConnection.addEventListener('iceconnectionstatechange', _this._handleIceConnectionStateChange.bind(_this));\n peerConnection.addEventListener('icegatheringstatechange', _this._handleIceGatheringStateChange.bind(_this));\n peerConnection.addEventListener('signalingstatechange', _this._handleSignalingStateChange.bind(_this));\n peerConnection.addEventListener('track', _this._handleTrackEvent.bind(_this));\n _this._iceRestartBackoff.on('ready', function () {\n return _this._initiateIceRestart();\n });\n\n var self = _this;\n _this.on('stateChanged', function stateChanged(state) {\n if (state !== 'closed') {\n return;\n }\n self.removeListener('stateChanged', stateChanged);\n self._dataChannels.forEach(function (dataChannel, dataTrackSender) {\n self.removeDataTrackSender(dataTrackSender);\n });\n });\n return _this;\n }\n\n _createClass(PeerConnectionV2, [{\n key: 'toString',\n value: function toString() {\n return '[PeerConnectionV2 #' + this._instanceId + ': ' + this.id + ']';\n }\n\n /**\n * The {@link PeerConnectionV2}'s underlying RTCPeerConnection's RTCPeerConnectionState\n * if supported by the browser, its RTCIceConnectionState otherwise.\n * @property {RTCPeerConnectionState}\n */\n\n }, {\n key: '_addIceCandidate',\n\n\n /**\n * Add an ICE candidate to the {@link PeerConnectionV2}.\n * @private\n * @param {object} candidate\n * @returns {Promise}\n */\n value: function _addIceCandidate(candidate) {\n var _this2 = this;\n\n return Promise.resolve().then(function () {\n candidate = new _this2._RTCIceCandidate(candidate);\n return _this2._peerConnection.addIceCandidate(candidate);\n }).catch(function (error) {\n // NOTE(mmalavalli): Firefox 68+ now generates an RTCIceCandidate with an\n // empty candidate string to signal end-of-candidates, followed by a null\n // candidate. As of now, Chrome and Safari reject this RTCIceCandidate. Since\n // this does not affect the media connection between Firefox 68+ and Chrome/Safari\n // in Peer-to-Peer Rooms, we suppress the Error and log a warning message.\n //\n // Chrome bug: https://bugs.chromium.org/p/chromium/issues/detail?id=978582\n //\n _this2._log.warn('Failed to add RTCIceCandidate ' + (candidate ? '\"' + candidate.candidate + '\"' : 'null') + ': ' + error.message);\n });\n }\n\n /**\n * Add ICE candidates to the {@link PeerConnectionV2}.\n * @private\n * @param {Array} candidates\n * @returns {Promise}\n */\n\n }, {\n key: '_addIceCandidates',\n value: function _addIceCandidates(candidates) {\n return Promise.all(candidates.map(this._addIceCandidate, this)).then(function () {});\n }\n\n /**\n * Add a new RTCRtpTransceiver or update an existing RTCRtpTransceiver for the\n * given MediaStreamTrack.\n * @private\n * @param {MediaStreamTrack} track\n * @returns {RTCRtpTransceiver}\n */\n\n }, {\n key: '_addOrUpdateTransceiver',\n value: function _addOrUpdateTransceiver(track) {\n var _this3 = this;\n\n var transceiver = takeRecycledTransceiver(this, track.kind);\n if (transceiver && transceiver.sender) {\n var oldTrackId = transceiver.sender.track ? transceiver.sender.track.id : null;\n if (oldTrackId) {\n this._log.warn('Reusing transceiver: ' + transceiver.mid + '] ' + oldTrackId + ' => ' + track.id);\n }\n // NOTE(mpatwardhan):remember this transceiver while we replace track.\n // we recycle transceivers that are not in use after 'negotiationCompleted', but we want to prevent\n // this one from getting recycled while replaceTrack is pending.\n this._replaceTrackPromises.set(transceiver, transceiver.sender.replaceTrack(track).then(function () {\n transceiver.direction = 'sendrecv';\n }, function () {\n // Do nothing.\n }).finally(function () {\n _this3._replaceTrackPromises.delete(transceiver);\n }));\n return transceiver;\n }\n return this._peerConnection.addTransceiver(track);\n }\n\n /**\n * Check the {@link IceBox}.\n * @private\n * @param {RTCSessionDescriptionInit} description\n * @returns {Promise}\n */\n\n }, {\n key: '_checkIceBox',\n value: function _checkIceBox(description) {\n var ufrag = getUfrag(description);\n if (!ufrag) {\n return Promise.resolve();\n }\n var candidates = this._remoteCandidates.setUfrag(ufrag);\n return this._addIceCandidates(candidates);\n }\n\n /**\n * Create an answer and set it on the {@link PeerConnectionV2}.\n * @private\n * @param {RTCSessionDescriptionInit} offer\n * @returns {Promise}\n */\n\n }, {\n key: '_answer',\n value: function _answer(offer) {\n var _this4 = this;\n\n return Promise.resolve().then(function () {\n if (!_this4._negotiationRole) {\n _this4._negotiationRole = 'answerer';\n }\n return _this4._setRemoteDescription(offer);\n }).catch(function () {\n throw new MediaClientRemoteDescFailedError();\n }).then(function () {\n return _this4._peerConnection.createAnswer();\n }).then(function (answer) {\n if (!isFirefox) {\n answer = workaroundIssue8329(answer);\n }\n\n var description = answer;\n if (_this4._shouldApplySimulcast) {\n var updatedSdp = _this4._setSimulcast(answer.sdp, _this4._sdpFormat, _this4._trackIdsToAttributes);\n // NOTE(syerrapragada): VMS does not support H264 simulcast. So,\n // unset simulcast for sections in local offer where corresponding\n // sections in answer doesn't have vp8 as preferred codec and reapply offer.\n updatedSdp = _this4._revertSimulcastForNonVP8MediaSections(updatedSdp, answer.sdp, offer.sdp);\n description = {\n type: description.type,\n sdp: updatedSdp\n };\n }\n return _this4._setLocalDescription(description);\n }).then(function () {\n return _this4._checkIceBox(offer);\n }).then(function () {\n return _this4._queuedDescription && _this4._updateDescription(_this4._queuedDescription);\n }).then(function () {\n _this4._queuedDescription = null;\n return _this4._maybeReoffer(_this4._peerConnection.localDescription);\n }).catch(function (error) {\n throw error instanceof MediaClientRemoteDescFailedError ? error : new MediaClientLocalDescFailedError();\n });\n }\n\n /**\n * Close the underlying RTCPeerConnection. Returns false if the\n * RTCPeerConnection was already closed.\n * @private\n * @returns {boolean}\n */\n\n }, {\n key: '_close',\n value: function _close() {\n if (this._peerConnection.signalingState !== 'closed') {\n this._peerConnection.close();\n this.preempt('closed');\n return true;\n }\n return false;\n }\n\n /**\n * Handle a \"connectionstatechange\" event.\n * @private\n * @returns {void}\n */\n\n }, {\n key: '_handleConnectionStateChange',\n value: function _handleConnectionStateChange() {\n this.emit('connectionStateChanged');\n }\n\n /**\n * Handle a \"datachannel\" event.\n * @private\n * @param {RTCDataChannelEvent} event\n * @returns {void}\n */\n\n }, {\n key: '_handleDataChannelEvent',\n value: function _handleDataChannelEvent(event) {\n var _this5 = this;\n\n var dataChannel = event.channel;\n var dataTrackReceiver = new DataTrackReceiver(dataChannel);\n this._dataTrackReceivers.add(dataTrackReceiver);\n\n dataChannel.addEventListener('close', function () {\n _this5._dataTrackReceivers.delete(dataTrackReceiver);\n });\n\n this.emit('trackAdded', dataTrackReceiver);\n }\n\n /**\n * Handle a glare scenario on the {@link PeerConnectionV2}.\n * @private\n * @param {RTCSessionDescriptionInit} offer\n * @returns {Promise}\n */\n\n }, {\n key: '_handleGlare',\n value: function _handleGlare(offer) {\n var _this6 = this;\n\n this._log.debug('Glare detected; rolling back');\n if (this._isRestartingIce) {\n this._log.debug('An ICE restart was in progress; we\\'ll need to restart ICE again after rolling back');\n this._isRestartingIce = false;\n this._shouldRestartIce = true;\n }\n return Promise.resolve().then(function () {\n _this6._trackIdsToAttributes = new Map(_this6._appliedTrackIdsToAttributes);\n return _this6._setLocalDescription({ type: 'rollback' });\n }).then(function () {\n _this6._needsAnswer = false;\n return _this6._answer(offer);\n }).then(function (didReoffer) {\n return didReoffer ? Promise.resolve() : _this6._offer();\n });\n }\n\n /**\n * Handle an ICE candidate event.\n * @private\n * @param {Event} event\n * @returns {void}\n */\n\n }, {\n key: '_handleIceCandidateEvent',\n value: function _handleIceCandidateEvent(event) {\n if (event.candidate) {\n this._log.debug('Clearing ICE gathering timeout');\n this._didGenerateLocalCandidates = true;\n this._iceGatheringTimeout.clear();\n this._localCandidates.push(event.candidate);\n }\n var peerConnectionState = {\n ice: {\n candidates: this._isIceLite ? [] : this._localCandidates.slice(),\n ufrag: this._localUfrag\n },\n id: this.id\n };\n if (!event.candidate) {\n peerConnectionState.ice.complete = true;\n }\n if (!(this._isIceLite && event.candidate)) {\n peerConnectionState.ice.revision = this._localCandidatesRevision++;\n this.emit('candidates', peerConnectionState);\n }\n }\n\n /**\n * Handle an ICE connection state change event.\n * @private\n * @returns {void}\n */\n\n }, {\n key: '_handleIceConnectionStateChange',\n value: function _handleIceConnectionStateChange() {\n var _this7 = this;\n\n var iceConnectionState = this._peerConnection.iceConnectionState;\n\n var isIceConnectedOrComplete = ['connected', 'complete'].includes(iceConnectionState);\n var log = this._log;\n\n log.debug('ICE connection state is \"' + iceConnectionState + '\"');\n if (isIceConnectedOrComplete) {\n this._iceReconnectTimeout.clear();\n this._iceRestartBackoff.reset();\n }\n\n if (this._lastIceConnectionState !== 'failed' && iceConnectionState === 'failed' && !this._shouldRestartIce && !this._isRestartingIce) {\n // Case 1: Transition to \"failed\".\n log.warn('ICE failed');\n this._initiateIceRestartBackoff();\n } else if (['disconnected', 'failed'].includes(this._lastIceConnectionState) && isIceConnectedOrComplete) {\n // Case 2: Transition from \"disconnected\" or \"failed\".\n log.debug('ICE reconnected');\n }\n\n this._isIceConnectionInactive = false;\n if (iceConnectionState === 'disconnected') {\n this._iceConnectionMonitor.start(function () {\n _this7._iceConnectionMonitor.stop();\n if (!_this7._shouldRestartIce && !_this7._isRestartingIce) {\n log.warn('ICE Connection Monitor detected inactivity');\n _this7._isIceConnectionInactive = true;\n _this7._initiateIceRestartBackoff();\n _this7.emit('iceConnectionStateChanged');\n _this7.emit('connectionStateChanged');\n }\n });\n } else {\n this._iceConnectionMonitor.stop();\n }\n\n this._lastIceConnectionState = iceConnectionState;\n this.emit('iceConnectionStateChanged');\n }\n\n /**\n * Handle ICE gathering timeout.\n * @private\n * @returns {void}\n */\n\n }, {\n key: '_handleIceGatheringTimeout',\n value: function _handleIceGatheringTimeout() {\n this._log.warn('ICE failed to gather any local candidates');\n this._iceGatheringFailed = true;\n this._initiateIceRestartBackoff();\n this.emit('iceConnectionStateChanged');\n this.emit('connectionStateChanged');\n }\n\n /**\n * Handle an ICE gathering state change event.\n * @private\n * @returns {void}\n */\n\n }, {\n key: '_handleIceGatheringStateChange',\n value: function _handleIceGatheringStateChange() {\n var iceGatheringState = this._peerConnection.iceGatheringState;\n\n var log = this._log;\n log.debug('ICE gathering state is \"' + iceGatheringState + '\"');\n\n // NOTE(mmalavalli): Start the ICE gathering timeout only if the RTCPeerConnection\n // has started gathering candidates for the first time since the initial offer/answer\n // or an offer/answer with ICE restart.\n var _iceGatheringTimeout = this._iceGatheringTimeout,\n delay = _iceGatheringTimeout.delay,\n isSet = _iceGatheringTimeout.isSet;\n\n if (iceGatheringState === 'gathering' && !this._didGenerateLocalCandidates && !isSet) {\n log.debug('Starting ICE gathering timeout: ' + delay);\n this._iceGatheringFailed = false;\n this._iceGatheringTimeout.start();\n }\n }\n\n /**\n * Handle a signaling state change event.\n * @private\n * @returns {void}\n */\n\n }, {\n key: '_handleSignalingStateChange',\n value: function _handleSignalingStateChange() {\n if (this._peerConnection.signalingState === 'stable') {\n this._appliedTrackIdsToAttributes = new Map(this._trackIdsToAttributes);\n }\n }\n\n /**\n * Handle a track event.\n * @private\n * @param {Event} event\n * @returns {void}\n */\n\n }, {\n key: '_handleTrackEvent',\n value: function _handleTrackEvent(event) {\n var _this8 = this;\n\n var sdp = this._peerConnection.remoteDescription ? this._peerConnection.remoteDescription.sdp : null;\n\n if (!this._trackMatcher) {\n this._trackMatcher = event.transceiver && event.transceiver.mid ? new MIDTrackMatcher()\n // NOTE(mroberts): Until Chrome ships RTCRtpTransceivers with MID\n // support, we have to use the same hacky solution as Safari. Revisit\n // this when RTCRtpTransceivers and MIDs land. We should be able to use\n // the same technique as Firefox.\n : isSafari || this._isUnifiedPlan ? new OrderedTrackMatcher() : new IdentityTrackMatcher();\n }\n this._trackMatcher.update(sdp);\n\n var mediaStreamTrack = event.track;\n var signaledTrackId = this._trackMatcher.match(event) || mediaStreamTrack.id;\n var mediaTrackReceiver = new MediaTrackReceiver(signaledTrackId, mediaStreamTrack);\n\n // NOTE(mmalavalli): In unified plan mode, \"ended\" is not fired on the remote\n // MediaStreamTrack when the remote peer removes a track. So, when this\n // MediaStreamTrack is re-used for a different track due to the remote peer\n // calling RTCRtpSender.replaceTrack(), we delete the previous MediaTrackReceiver\n // that owned this MediaStreamTrack before adding the new MediaTrackReceiver.\n this._mediaTrackReceivers.forEach(function (trackReceiver) {\n if (trackReceiver.track.id === mediaTrackReceiver.track.id) {\n _this8._mediaTrackReceivers.delete(trackReceiver);\n }\n });\n\n this._mediaTrackReceivers.add(mediaTrackReceiver);\n mediaStreamTrack.addEventListener('ended', function () {\n return _this8._mediaTrackReceivers.delete(mediaTrackReceiver);\n });\n this.emit('trackAdded', mediaTrackReceiver);\n }\n\n /**\n * Initiate ICE Restart.\n * @private\n * @returns {void}\n */\n\n }, {\n key: '_initiateIceRestart',\n value: function _initiateIceRestart() {\n if (this._peerConnection.signalingState === 'closed') {\n return;\n }\n var log = this._log;\n log.warn('Attempting to restart ICE');\n this._didGenerateLocalCandidates = false;\n this._isIceRestartBackoffInProgress = false;\n this._shouldRestartIce = true;\n\n var _iceReconnectTimeout = this._iceReconnectTimeout,\n delay = _iceReconnectTimeout.delay,\n isSet = _iceReconnectTimeout.isSet;\n\n if (!isSet) {\n log.debug('Starting ICE reconnect timeout: ' + delay);\n this._iceReconnectTimeout.start();\n }\n this.offer();\n }\n\n /**\n * Schedule an ICE Restart.\n * @private\n * @returns {void}\n */\n\n }, {\n key: '_initiateIceRestartBackoff',\n value: function _initiateIceRestartBackoff() {\n if (this._peerConnection.signalingState === 'closed' || this._isIceRestartBackoffInProgress) {\n return;\n }\n this._log.warn('An ICE restart has been scheduled');\n this._isIceRestartBackoffInProgress = true;\n this._iceRestartBackoff.backoff();\n }\n\n /**\n * Conditionally re-offer.\n * @private\n * @param {?RTCSessionDescriptionInit} localDescription\n * @returns {Promise}\n */\n\n }, {\n key: '_maybeReoffer',\n value: function _maybeReoffer(localDescription) {\n var shouldReoffer = this._shouldOffer;\n\n if (localDescription && localDescription.sdp) {\n // NOTE(mmalavalli): For \"unified-plan\" sdps, if the remote RTCPeerConnection sends\n // an offer with fewer audio m= lines than the number of audio RTCRTPSenders\n // in the local RTCPeerConnection, then the local RTCPeerConnection creates\n // an answer with the same number of audio m= lines as in the offer. This\n // behavior was triggered by the removal of 'offerToReceiveAudio' from the\n // default RTCOfferOptions. Ideally, the local RTCPeerConnection should create\n // an answer with the same number of audio m= lines as the number of\n // RTCRTPSenders. In order to achieve this,the local RTCPeerConnection\n // initiates renegotiation.\n //\n // We can reduce the number of cases where renegotiation is needed by\n // re-introducing 'offerToReceiveAudio' to the default RTCOfferOptions with a\n // value > 1.\n if (this._isUnifiedPlan && localDescription.type === 'answer') {\n var senders = this._peerConnection.getSenders().filter(function (sender) {\n return sender.track;\n });\n shouldReoffer = ['audio', 'video'].reduce(function (shouldOffer, kind) {\n var mediaSections = getMediaSections(localDescription.sdp, kind, '(sendrecv|sendonly)');\n var sendersOfKind = senders.filter(isSenderOfKind.bind(null, kind));\n return shouldOffer || mediaSections.length < sendersOfKind.length;\n }, shouldReoffer);\n }\n\n // NOTE(mroberts): We also need to re-offer if we have a DataTrack to share\n // but no m= application section.\n var hasDataTrack = this._dataChannels.size > 0;\n var hasApplicationMediaSection = getMediaSections(localDescription.sdp, 'application').length > 0;\n var needsApplicationMediaSection = hasDataTrack && !hasApplicationMediaSection;\n shouldReoffer = shouldReoffer || needsApplicationMediaSection;\n }\n\n var promise = shouldReoffer ? this._offer() : Promise.resolve();\n return promise.then(function () {\n return shouldReoffer;\n });\n }\n\n /**\n * Create an offer and set it on the {@link PeerConnectionV2}.\n * @private\n * @returns {Promise}\n */\n\n }, {\n key: '_offer',\n value: function _offer() {\n var _this9 = this;\n\n var offerOptions = Object.assign({}, this._offerOptions);\n this._needsAnswer = true;\n if (this._shouldRestartIce) {\n this._shouldRestartIce = false;\n this._isRestartingIce = true;\n offerOptions.iceRestart = true;\n }\n\n return Promise.all(this._replaceTrackPromises.values()).then(function () {\n return _this9._peerConnection.createOffer(offerOptions);\n }).catch(function () {\n throw new MediaClientLocalDescFailedError();\n }).then(function (offer) {\n if (!isFirefox) {\n offer = workaroundIssue8329(offer);\n }\n\n var sdp = _this9._isUnifiedPlan && _this9._peerConnection.remoteDescription ? unifiedPlanFilterLocalCodecs(offer.sdp, _this9._peerConnection.remoteDescription.sdp) : offer.sdp;\n\n var updatedSdp = _this9._setCodecPreferences(sdp, _this9._preferredAudioCodecs, _this9._preferredVideoCodecs);\n\n _this9._shouldOffer = false;\n if (!_this9._negotiationRole) {\n _this9._negotiationRole = 'offerer';\n }\n\n if (_this9._shouldApplySimulcast) {\n _this9._localDescriptionWithoutSimulcast = {\n type: 'offer',\n sdp: updatedSdp\n };\n updatedSdp = _this9._setSimulcast(updatedSdp, _this9._sdpFormat, _this9._trackIdsToAttributes);\n }\n return _this9._setLocalDescription({\n type: 'offer',\n sdp: updatedSdp\n });\n });\n }\n\n /**\n * Add or rewrite local MediaStreamTrack IDs in the given Unified Plan RTCSessionDescription.\n * @private\n * @param {RTCSessionDescription} description\n * @return {RTCSessionDescription}\n */\n\n }, {\n key: '_addOrRewriteLocalTrackIds',\n value: function _addOrRewriteLocalTrackIds(description) {\n var transceivers = this._peerConnection.getTransceivers();\n var activeTransceivers = transceivers.filter(function (_ref) {\n var sender = _ref.sender,\n stopped = _ref.stopped;\n return !stopped && sender && sender.track;\n });\n\n // NOTE(mmalavalli): There is no guarantee that MediaStreamTrack IDs will be present in\n // SDPs, and even if they are, there is no guarantee that they will be the same as the\n // actual MediaStreamTrack IDs. So, we add or re-write the actual MediaStreamTrack IDs\n // to the assigned m= sections here.\n var assignedTransceivers = activeTransceivers.filter(function (_ref2) {\n var mid = _ref2.mid;\n return mid;\n });\n var midsToTrackIds = new Map(assignedTransceivers.map(function (_ref3) {\n var mid = _ref3.mid,\n sender = _ref3.sender;\n return [mid, sender.track.id];\n }));\n var sdp1 = unifiedPlanAddOrRewriteTrackIds(description.sdp, midsToTrackIds);\n\n // NOTE(mmalavalli): Chrome and Safari do not apply the offer until they get an answer.\n // So, we add or re-write the actual MediaStreamTrack IDs to the unassigned m= sections here.\n var unassignedTransceivers = activeTransceivers.filter(function (_ref4) {\n var mid = _ref4.mid;\n return !mid;\n });\n var newTrackIdsByKind = new Map(['audio', 'video'].map(function (kind) {\n return [kind, unassignedTransceivers.filter(function (_ref5) {\n var sender = _ref5.sender;\n return sender.track.kind === kind;\n }).map(function (_ref6) {\n var sender = _ref6.sender;\n return sender.track.id;\n })];\n }));\n var sdp2 = unifiedPlanAddOrRewriteNewTrackIds(sdp1, midsToTrackIds, newTrackIdsByKind);\n\n return new this._RTCSessionDescription({\n sdp: sdp2,\n type: description.type\n });\n }\n\n /**\n * Rollback and apply the given offer.\n * @private\n * @param {RTCSessionDescriptionInit} offer\n * @returns {Promise}\n */\n\n }, {\n key: '_rollbackAndApplyOffer',\n value: function _rollbackAndApplyOffer(offer) {\n var _this10 = this;\n\n return this._setLocalDescription({ type: 'rollback' }).then(function () {\n return _this10._setLocalDescription(offer);\n });\n }\n\n /**\n * Set a local description on the {@link PeerConnectionV2}.\n * @private\n * @param {RTCSessionDescription|RTCSessionDescriptionInit} description\n * @returns {Promise}\n */\n\n }, {\n key: '_setLocalDescription',\n value: function _setLocalDescription(description) {\n var _this11 = this;\n\n return this._peerConnection.setLocalDescription(description).catch(function (error) {\n _this11._log.warn('Calling setLocalDescription with an RTCSessionDescription of type \"' + description.type + '\" failed with the error \"' + error.message + '\".');\n if (description.sdp) {\n _this11._log.warn('The SDP was ' + description.sdp);\n }\n throw new MediaClientLocalDescFailedError();\n }).then(function () {\n if (description.type !== 'rollback') {\n _this11._localDescription = _this11._isUnifiedPlan ? _this11._addOrRewriteLocalTrackIds(description) : description;\n _this11._localCandidates = [];\n if (description.type === 'offer') {\n _this11._descriptionRevision++;\n } else if (description.type === 'answer') {\n _this11._lastStableDescriptionRevision = _this11._descriptionRevision;\n negotiationCompleted(_this11);\n }\n _this11._localUfrag = getUfrag(description);\n _this11.emit('description', _this11.getState());\n }\n });\n }\n\n /**\n * Set a remote RTCSessionDescription on the {@link PeerConnectionV2}.\n * @private\n * @param {RTCSessionDescriptionInit} description\n * @returns {Promise}\n */\n\n }, {\n key: '_setRemoteDescription',\n value: function _setRemoteDescription(description) {\n var _this12 = this;\n\n if (description.sdp) {\n if (!this._isRTCRtpSenderParamsSupported) {\n description.sdp = this._setBitrateParameters(description.sdp, isFirefox ? 'TIAS' : 'AS', this._encodingParameters.maxAudioBitrate, this._encodingParameters.maxVideoBitrate);\n }\n description.sdp = this._setCodecPreferences(description.sdp, this._preferredAudioCodecs, this._preferredVideoCodecs);\n // NOTE(mroberts): Do this to reduce our MediaStream count in Firefox. By\n // mapping MediaStream IDs in the SDP to \"-\", we ensure the \"track\" event\n // doesn't include any new MediaStreams in Firefox. Its `streams` member\n // will always be the empty Array.\n if (isFirefox) {\n description.sdp = filterOutMediaStreamIds(description.sdp);\n }\n if (!this._peerConnection.remoteDescription) {\n this._isIceLite = /a=ice-lite/.test(description.sdp);\n }\n }\n description = new this._RTCSessionDescription(description);\n // eslint-disable-next-line consistent-return\n return Promise.resolve().then(function () {\n // NOTE(syerrapragada): VMS does not support H264 simulcast. So,\n // unset simulcast for sections in local offer where corresponding\n // sections in answer doesn't have vp8 as preferred codec and reapply offer.\n if (description.type === 'answer' && _this12._shouldApplySimulcast) {\n var sdpWithoutSimulcastForNonVP8MediaSections = _this12._revertSimulcastForNonVP8MediaSections(_this12._localDescription.sdp, _this12._localDescriptionWithoutSimulcast.sdp, description.sdp);\n if (sdpWithoutSimulcastForNonVP8MediaSections !== _this12._localDescription.sdp) {\n return _this12._rollbackAndApplyOffer({\n type: _this12._localDescription.type,\n sdp: sdpWithoutSimulcastForNonVP8MediaSections\n });\n }\n }\n }).then(function () {\n return _this12._peerConnection.setRemoteDescription(description);\n }).then(function () {\n if (description.type === 'answer') {\n if (_this12._isRestartingIce) {\n _this12._log.debug('An ICE restart was in-progress and is now completed');\n _this12._isRestartingIce = false;\n }\n negotiationCompleted(_this12);\n }\n }, function (error) {\n _this12._log.warn('Calling setRemoteDescription with an RTCSessionDescription of type \"' + description.type + '\" failed with the error \"' + error.message + '\".');\n if (description.sdp) {\n _this12._log.warn('The SDP was ' + description.sdp);\n }\n throw error;\n });\n }\n\n /**\n * Update the {@link PeerConnectionV2}'s description.\n * @private\n * @param {RTCSessionDescriptionInit} description\n * @returns {Promise}\n */\n\n }, {\n key: '_updateDescription',\n value: function _updateDescription(description) {\n var _this13 = this;\n\n switch (description.type) {\n case 'answer':\n case 'pranswer':\n if (description.revision !== this._descriptionRevision || this._peerConnection.signalingState !== 'have-local-offer') {\n return Promise.resolve();\n }\n this._descriptionRevision = description.revision;\n break;\n case 'close':\n return this._close();\n case 'create-offer':\n if (description.revision <= this._lastStableDescriptionRevision) {\n return Promise.resolve();\n } else if (this._needsAnswer) {\n this._queuedDescription = description;\n return Promise.resolve();\n }\n this._descriptionRevision = description.revision;\n return this._offer();\n case 'offer':\n if (description.revision <= this._lastStableDescriptionRevision || this._peerConnection.signalingState === 'closed') {\n return Promise.resolve();\n }\n if (this._peerConnection.signalingState === 'have-local-offer') {\n // NOTE(mpatwardhan): For a peer connection\n // 1) createOffer always generate SDP with `setup:actpass`\n // 2) when remote description is set `setup:active` - the answer generated selects the dtls role of setup:passive\n // 3) when remote description is set `setup:passive` - the answer generated selects the dtls role of setup:active\n // 4) when remote description is set `setup:actpass` - the answer generated uses the previously negotiated role (if not negotiated previously setup:active is used)\n // This test shows the behavior: https://github.com/twilio/twilio-webrtc.js/blob/master/test/integration/spec/rtcpeerconnection.js#L936\n // with glare handling (if dtls role was not negotiated before ) the generated answer will set setup:active.\n // we do not want that. lets wait for \"initial negotiation\" before attempting glare handling.\n if (this._needsAnswer && this._lastStableDescriptionRevision === 0) {\n this._queuedDescription = description;\n return Promise.resolve();\n }\n this._descriptionRevision = description.revision;\n return this._handleGlare(description);\n }\n this._descriptionRevision = description.revision;\n return this._answer(description).then(function () {});\n default:\n // Do nothing.\n }\n\n // Handle answer or pranswer.\n var revision = description.revision;\n return Promise.resolve().then(function () {\n return _this13._setRemoteDescription(description);\n }).catch(function () {\n throw new MediaClientRemoteDescFailedError();\n }).then(function () {\n _this13._lastStableDescriptionRevision = revision;\n _this13._needsAnswer = false;\n return _this13._checkIceBox(description);\n }).then(function () {\n return _this13._queuedDescription && _this13._updateDescription(_this13._queuedDescription);\n }).then(function () {\n _this13._queuedDescription = null;\n return _this13._maybeReoffer(_this13._peerConnection.localDescription).then(function () {});\n });\n }\n\n /**\n * Update the {@link PeerConnectionV2}'s ICE candidates.\n * @private\n * @param {object} iceState\n * @returns {Promise}\n */\n\n }, {\n key: '_updateIce',\n value: function _updateIce(iceState) {\n var candidates = this._remoteCandidates.update(iceState);\n return this._addIceCandidates(candidates);\n }\n\n /**\n * Add a {@link DataTrackSender} to the {@link PeerConnectionV2}.\n * @param {DataTrackSender} dataTrackSender\n * @returns {void}\n */\n\n }, {\n key: 'addDataTrackSender',\n value: function addDataTrackSender(dataTrackSender) {\n if (this._dataChannels.has(dataTrackSender)) {\n return;\n }\n try {\n var dataChannelDict = {\n ordered: dataTrackSender.ordered\n };\n if (dataTrackSender.maxPacketLifeTime !== null) {\n dataChannelDict.maxPacketLifeTime = dataTrackSender.maxPacketLifeTime;\n }\n if (dataTrackSender.maxRetransmits !== null) {\n dataChannelDict.maxRetransmits = dataTrackSender.maxRetransmits;\n }\n var dataChannel = this._peerConnection.createDataChannel(dataTrackSender.id, dataChannelDict);\n dataTrackSender.addDataChannel(dataChannel);\n this._dataChannels.set(dataTrackSender, dataChannel);\n } catch (error) {\n this._log.warn('Error creating an RTCDataChannel for DataTrack \"' + dataTrackSender.id + '\": ' + error.message);\n }\n }\n\n /**\n * Add the {@link MediaTrackSender} to the {@link PeerConnectionV2}.\n * @param {MediaTrackSender} mediaTrackSender\n * @returns {void}\n */\n\n }, {\n key: 'addMediaTrackSender',\n value: function addMediaTrackSender(mediaTrackSender) {\n if (this._peerConnection.signalingState === 'closed' || this._rtpSenders.has(mediaTrackSender)) {\n return;\n }\n var sender = void 0;\n if (this._localMediaStream) {\n this._localMediaStream.addTrack(mediaTrackSender.track);\n sender = this._peerConnection.addTrack(mediaTrackSender.track, this._localMediaStream);\n } else {\n var transceiver = this._addOrUpdateTransceiver(mediaTrackSender.track);\n sender = transceiver.sender;\n }\n mediaTrackSender.addSender(sender);\n this._rtpSenders.set(mediaTrackSender, sender);\n }\n\n /**\n * Close the {@link PeerConnectionV2}.\n * @returns {void}\n */\n\n }, {\n key: 'close',\n value: function close() {\n if (this._close()) {\n this._descriptionRevision++;\n this._localDescription = { type: 'close' };\n this.emit('description', this.getState());\n }\n }\n\n /**\n * Get the {@link DataTrackReceiver}s and the {@link MediaTrackReceivers} on the\n * {@link PeerConnectionV2}.\n * @returns {Array} trackReceivers\n */\n\n }, {\n key: 'getTrackReceivers',\n value: function getTrackReceivers() {\n return Array.from(this._dataTrackReceivers).concat(Array.from(this._mediaTrackReceivers));\n }\n\n /**\n * Get the {@link PeerConnectionV2}'s state (specifically, its description).\n * @returns {?object}\n */\n\n }, {\n key: 'getState',\n value: function getState() {\n if (!this._localDescription) {\n return null;\n }\n var localDescription = {\n type: this._localDescription.type,\n revision: this._descriptionRevision\n };\n if (this._localDescription.sdp) {\n localDescription.sdp = this._localDescription.sdp;\n }\n return {\n description: localDescription,\n id: this.id\n };\n }\n\n /**\n * Create an offer and set it on the {@link PeerConnectionV2}.\n * @returns {Promise}\n */\n\n }, {\n key: 'offer',\n value: function offer() {\n var _this14 = this;\n\n if (this._needsAnswer || this._isRestartingIce) {\n this._shouldOffer = true;\n return Promise.resolve();\n }\n\n return this.bracket('offering', function (key) {\n _this14.transition('updating', key);\n var promise = _this14._needsAnswer || _this14._isRestartingIce ? Promise.resolve() : _this14._offer();\n return promise.then(function () {\n _this14.tryTransition('open', key);\n }, function (error) {\n _this14.tryTransition('open', key);\n throw error;\n });\n });\n }\n\n /**\n * Remove a {@link DataTrackSender} from the {@link PeerConnectionV2}.\n * @param {DataTrackSender} dataTrackSender\n * @returns {void}\n */\n\n }, {\n key: 'removeDataTrackSender',\n value: function removeDataTrackSender(dataTrackSender) {\n var dataChannel = this._dataChannels.get(dataTrackSender);\n if (dataChannel) {\n dataTrackSender.removeDataChannel(dataChannel);\n this._dataChannels.delete(dataTrackSender);\n dataChannel.close();\n }\n }\n\n /**\n * Remove the {@link MediaTrackSender} from the {@link PeerConnectionV2}.\n * @param {MediaTrackSender} mediaTrackSender\n * @returns {void}\n */\n\n }, {\n key: 'removeMediaTrackSender',\n value: function removeMediaTrackSender(mediaTrackSender) {\n if (this._peerConnection.signalingState === 'closed' || !this._rtpSenders.has(mediaTrackSender)) {\n return;\n }\n var sender = this._rtpSenders.get(mediaTrackSender);\n this._peerConnection.removeTrack(sender);\n if (this._localMediaStream) {\n this._localMediaStream.removeTrack(mediaTrackSender.track);\n }\n mediaTrackSender.removeSender(sender);\n this._rtpSenders.delete(mediaTrackSender);\n }\n\n /**\n * Set the RTCConfiguration on the underlying RTCPeerConnection.\n * @param {RTCConfiguration} configuration\n * @returns {void}\n */\n\n }, {\n key: 'setConfiguration',\n value: function setConfiguration(configuration) {\n if (typeof this._peerConnection.setConfiguration === 'function') {\n this._peerConnection.setConfiguration(getConfiguration(configuration));\n }\n }\n\n /**\n * Set the ICE reconnect timeout period.\n * @param {number} period - Period in milliseconds.\n * @returns {this}\n */\n\n }, {\n key: 'setIceReconnectTimeout',\n value: function setIceReconnectTimeout(period) {\n this._iceReconnectTimeout.setDelay(period);\n this._log.debug('Updated ICE reconnection timeout period:', this._iceReconnectTimeout.delay);\n return this;\n }\n\n /**\n * Update the {@link PeerConnectionV2}.\n * @param {object} peerConnectionState\n * @returns {Promise}\n */\n\n }, {\n key: 'update',\n value: function update(peerConnectionState) {\n var _this15 = this;\n\n return this.bracket('updating', function (key) {\n if (_this15.state === 'closed') {\n return Promise.resolve();\n }\n\n _this15.transition('updating', key);\n\n var updates = [];\n\n if (peerConnectionState.ice) {\n updates.push(_this15._updateIce(peerConnectionState.ice));\n }\n\n if (peerConnectionState.description) {\n updates.push(_this15._updateDescription(peerConnectionState.description));\n }\n\n return Promise.all(updates).then(function () {\n _this15.tryTransition('open', key);\n }, function (error) {\n _this15.tryTransition('open', key);\n throw error;\n });\n });\n }\n\n /**\n * Get the {@link PeerConnectionV2}'s media statistics.\n * @returns {Promise}\n */\n\n }, {\n key: 'getStats',\n value: function getStats() {\n var _this16 = this;\n\n return getStatistics(this._peerConnection).then(function (response) {\n return rewriteTrackIds(_this16, response);\n });\n }\n }, {\n key: 'connectionState',\n get: function get() {\n return this.iceConnectionState === 'failed' ? 'failed' : this._peerConnection.connectionState || this.iceConnectionState;\n }\n\n /**\n * The {@link PeerConnectionV2}'s underlying RTCPeerConnection's\n * RTCIceConnectionState.\n * @property {RTCIceConnectionState}\n */\n\n }, {\n key: 'iceConnectionState',\n get: function get() {\n return this._isIceConnectionInactive && this._peerConnection.iceConnectionState === 'disconnected' || this._iceGatheringFailed ? 'failed' : this._peerConnection.iceConnectionState;\n }\n\n /**\n * Whether the {@link PeerConnectionV2} has negotiated or is in the process\n * of negotiating the application m= section.\n * @returns {boolean}\n */\n\n }, {\n key: 'isApplicationSectionNegotiated',\n get: function get() {\n if (this._peerConnection.signalingState !== 'closed') {\n // accessing .localDescription in 'closed' state causes it throw exceptions.\n return this._peerConnection.localDescription ? getMediaSections(this._peerConnection.localDescription.sdp, 'application').length > 0 : false;\n }\n return true;\n }\n }]);\n\n return PeerConnectionV2;\n}(StateMachine);\n\nfunction rewriteTrackId(pcv2, stats) {\n var receiver = [].concat(_toConsumableArray(pcv2._mediaTrackReceivers)).find(function (receiver) {\n return receiver.track.id === stats.trackId;\n });\n var trackId = receiver ? receiver.id : null;\n return Object.assign(stats, { trackId: trackId });\n}\n\nfunction rewriteTrackIds(pcv2, response) {\n return Object.assign(response, {\n remoteAudioTrackStats: response.remoteAudioTrackStats.map(function (stats) {\n return rewriteTrackId(pcv2, stats);\n }),\n remoteVideoTrackStats: response.remoteVideoTrackStats.map(function (stats) {\n return rewriteTrackId(pcv2, stats);\n })\n });\n}\n\n/**\n * @event PeerConnectionV2#candidates\n * @param {object} candidates\n */\n\n/**\n * @event PeerConnectionV2#connectionStateChanged\n */\n\n/**\n * @event PeerConnectionV2#description\n * @param {object} description\n */\n\n/**\n * @event PeerConnectionV2#iceConnectionStateChanged\n */\n\n/**\n * @event PeerConnectionV2#trackAdded\n * @param {DataTrackReceiver|MediaTrackReceiver} trackReceiver\n */\n\nfunction getUfrag(description) {\n if (description.sdp) {\n var match = description.sdp.match(/^a=ice-ufrag:([a-zA-Z0-9+/]+)/m);\n if (match) {\n return match[1];\n }\n }\n return null;\n}\n\nfunction getConfiguration(configuration) {\n return Object.assign({\n bundlePolicy: 'max-bundle',\n rtcpMuxPolicy: 'require'\n }, configuration);\n}\n\n/**\n * Whether the MediaStreamTrack of the given RTCRTPSender is a non-ended\n * MediaStreamTrack of a given kind.\n * @private\n * @param {string} kind\n * @param {RTCRtpSender} sender\n * @return {boolean}\n */\nfunction isSenderOfKind(kind, sender) {\n var track = sender.track;\n return track && track.kind === kind && track.readyState !== 'ended';\n}\n\n/**\n * Preferred codecs.\n * @typedef {object} PreferredCodecs\n * @property {Array} audio\n * @property {Array} video\n */\n\nfunction filterOutMediaStreamIds(sdp) {\n return sdp.replace(/a=msid:[^ ]+ /g, 'a=msid:- ');\n}\n\n/**\n * Whether an RTCRtpTransceiver can be recycled.\n * @param {RTCRtpTransceiver} transceiver\n * @returns {boolean}\n */\nfunction shouldRecycleTransceiver(transceiver, pcv2) {\n return !transceiver.stopped && !pcv2._replaceTrackPromises.has(transceiver) && (transceiver.currentDirection === 'inactive' || transceiver.currentDirection === 'recvonly' || transceiver.direction === 'recvonly');\n}\n\n/**\n * Take a recycled RTCRtpTransceiver if available.\n * @param {PeerConnectionV2} pcv2\n * @param {Track.Kind} kind\n * @returns {?RTCRtpTransceiver}\n */\nfunction takeRecycledTransceiver(pcv2, kind) {\n var preferredCodecs = {\n audio: pcv2._preferredAudioCodecs.map(function (codec) {\n return codec.toLowerCase();\n }),\n video: pcv2._preferredVideoCodecs.map(function (_ref7) {\n var codec = _ref7.codec;\n return codec.toLowerCase();\n })\n }[kind];\n\n var recycledTransceivers = pcv2._recycledTransceivers[kind];\n var localCodec = preferredCodecs.find(function (codec) {\n return pcv2._localCodecs.has(codec);\n });\n if (!localCodec) {\n return recycledTransceivers.shift();\n }\n\n var transceiver = recycledTransceivers.find(function (transceiver) {\n var remoteCodecMap = pcv2._remoteCodecMaps.get(transceiver.mid);\n return remoteCodecMap && remoteCodecMap.has(localCodec);\n });\n\n if (transceiver) {\n recycledTransceivers.splice(recycledTransceivers.indexOf(transceiver), 1);\n }\n return transceiver;\n}\n\n/**\n * Update the set of locally supported {@link Codec}s.\n * @param pcv2\n * @returns {void}\n */\nfunction updateLocalCodecs(pcv2) {\n var description = pcv2._peerConnection.localDescription;\n if (!description) {\n return;\n }\n getMediaSections(description.sdp).forEach(function (section) {\n var codecMap = createCodecMapForMediaSection(section);\n codecMap.forEach(function (pts, codec) {\n return pcv2._localCodecs.add(codec);\n });\n });\n}\n\n/**\n * Update the {@link Codec} maps for all m= sections in the remote {@link RTCSessionDescription}s.\n * @param {PeerConnectionV2} pcv2\n * @returns {void}\n */\nfunction updateRemoteCodecMaps(pcv2) {\n var description = pcv2._peerConnection.remoteDescription;\n if (!description) {\n return;\n }\n getMediaSections(description.sdp).forEach(function (section) {\n var mid = section.match(/^a=mid:(.+)$/m)[1];\n var codecMap = createCodecMapForMediaSection(section);\n pcv2._remoteCodecMaps.set(mid, codecMap);\n });\n}\n\n/**\n * Update the list of recycled RTCRtpTransceivers.\n * @param {PeerConnectionV2} pcv2\n */\nfunction updateRecycledTransceivers(pcv2) {\n pcv2._recycledTransceivers.audio = [];\n pcv2._recycledTransceivers.video = [];\n pcv2._peerConnection.getTransceivers().forEach(function (transceiver) {\n if (shouldRecycleTransceiver(transceiver, pcv2)) {\n var track = transceiver.receiver.track;\n pcv2._recycledTransceivers[track.kind].push(transceiver);\n }\n });\n}\n\n/**\n * Perform certain updates after an SDP negotiation is completed.\n * @param {PeerConnectionV2} pcv2\n * @returns {void}\n */\nfunction negotiationCompleted(pcv2) {\n if (pcv2._isUnifiedPlan) {\n updateRecycledTransceivers(pcv2);\n updateLocalCodecs(pcv2);\n updateRemoteCodecMaps(pcv2);\n }\n if (pcv2._isRTCRtpSenderParamsSupported) {\n updateEncodingParameters(pcv2);\n }\n}\n\n/**\n * Update the RTCRtpEncodingParameters of all active RTCRtpSenders.\n * @param {PeerConnectionV2} pcv2\n * @returns {void}\n */\nfunction updateEncodingParameters(pcv2) {\n var _pcv2$_encodingParame = pcv2._encodingParameters,\n maxAudioBitrate = _pcv2$_encodingParame.maxAudioBitrate,\n maxVideoBitrate = _pcv2$_encodingParame.maxVideoBitrate;\n\n\n var maxBitrates = new Map([['audio', maxAudioBitrate], ['video', maxVideoBitrate]]);\n\n pcv2._peerConnection.getSenders().filter(function (sender) {\n return sender.track;\n }).forEach(function (sender) {\n var maxBitrate = maxBitrates.get(sender.track.kind);\n var params = sender.getParameters();\n\n if (maxBitrate === null || maxBitrate === 0) {\n removeMaxBitrate(params);\n } else if (pcv2._isChromeScreenShareTrack(sender.track)) {\n // NOTE(mpatwardhan): Sometimes (JSDK-2557) chrome does not send any bytes on screen track if MaxBitRate is set on it via setParameters,\n // To workaround this issue we will not apply maxBitrate if the track appears to be a screen share track created by chrome\n pcv2._log.warn('Not setting maxBitrate for ' + sender.track.kind + ' Track ' + sender.track.id + ' because it appears to be screen share track: ' + sender.track.label);\n } else {\n setMaxBitrate(params, maxBitrate);\n }\n\n if (!isFirefox && pcv2._enableDscp && params.encodings.length > 0) {\n // NOTE(mmalavalli): \"networkPriority\" is a per-sender property and not\n // a per-encoding-layer property. So, we set the value only on the first\n // encoding layer. Any attempt to set the value on subsequent encoding\n // layers (in the case of simulcast) will result in the Promise returned\n // by RTCRtpSender.setParameters() being rejected.\n params.encodings[0].networkPriority = 'high';\n }\n\n sender.setParameters(params).catch(function (error) {\n pcv2._log.warn('Error while setting encodings parameters for ' + sender.track.kind + ' Track ' + sender.track.id + ': ' + (error.message || error.name));\n });\n });\n}\n\n/**\n * Remove maxBitrate from the RTCRtpSendParameters' encodings.\n * @param {RTCRtpSendParameters} params\n * @returns {void}\n */\nfunction removeMaxBitrate(params) {\n if (Array.isArray(params.encodings)) {\n params.encodings.forEach(function (encoding) {\n return delete encoding.maxBitrate;\n });\n }\n}\n\n/**\n * Set the given maxBitrate in the RTCRtpSendParameters' encodings.\n * @param {RTCRtpSendParameters} params\n * @param {number} maxBitrate\n * @returns {void}\n */\nfunction setMaxBitrate(params, maxBitrate) {\n if (isFirefox) {\n params.encodings = [{ maxBitrate: maxBitrate }];\n } else {\n params.encodings.forEach(function (encoding) {\n encoding.maxBitrate = maxBitrate;\n });\n }\n}\n\nmodule.exports = PeerConnectionV2;","/*\n * Copyright (c) 2012 Mathieu Turcotte\n * Licensed under the MIT license.\n */\n\nvar util = require('util');\n\nfunction IllegalArgumentError(message) {\n Error.call(this, message);\n this.message = message;\n}\nutil.inherits(IllegalArgumentError, Error);\n\nIllegalArgumentError.prototype.name = 'IllegalArgumentError';\n\nfunction IllegalStateError(message) {\n Error.call(this, message);\n this.message = message;\n}\nutil.inherits(IllegalStateError, Error);\n\nIllegalStateError.prototype.name = 'IllegalStateError';\n\nmodule.exports.IllegalStateError = IllegalStateError;\nmodule.exports.IllegalArgumentError = IllegalArgumentError;","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar RecordingSignaling = require('../recording');\n\n/**\n * @extends RecordingSignaling\n */\n\nvar RecordingV2 = function (_RecordingSignaling) {\n _inherits(RecordingV2, _RecordingSignaling);\n\n /**\n * Construct a {@link RecordingV2}.\n */\n function RecordingV2() {\n _classCallCheck(this, RecordingV2);\n\n var _this = _possibleConstructorReturn(this, (RecordingV2.__proto__ || Object.getPrototypeOf(RecordingV2)).call(this));\n\n Object.defineProperties(_this, {\n _revision: {\n value: 1,\n writable: true\n }\n });\n return _this;\n }\n\n /**\n * Compare the {@link RecordingV2} to a {@link RecordingV2#Representation}\n * of itself and perform any updates necessary.\n * @param {RecordingV2#Representation} recording\n * @returns {this}\n * @fires RecordingSignaling#updated\n */\n\n\n _createClass(RecordingV2, [{\n key: 'update',\n value: function update(recording) {\n if (recording.revision < this._revision) {\n return this;\n }\n this._revision = recording.revision;\n return this.enable(recording.enabled);\n }\n }]);\n\n return RecordingV2;\n}(RecordingSignaling);\n\n/**\n * The Room Signaling Protocol (RSP) representation of a {@link RecordingV2}\n * @typedef {object} RecordingV2#Representation\n * @property {boolean} enabled\n * @property {number} revision\n */\n\nmodule.exports = RecordingV2;","'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar EventEmitter = require('events').EventEmitter;\nvar util = require('./util');\n\n/**\n * {@link StateMachine} represents a state machine. The state machine supports a\n * reentrant locking mechanism to allow asynchronous state transitions to ensure\n * they have not been preempted. Calls to {@link StateMachine#takeLock} are\n * guaranteed to be resolved in FIFO order.\n * @extends EventEmitter\n * @property {boolean} isLocked - whether or not the {@link StateMachine} is\n * locked performing asynchronous state transition\n * @property {string} state - the current state\n * @emits {@link StateMachine#stateChanged}\n */\n\nvar StateMachine = function (_EventEmitter) {\n _inherits(StateMachine, _EventEmitter);\n\n /**\n * Construct a {@link StateMachine}.\n * @param {string} initialState - the intiial state\n * @param {object} states\n */\n function StateMachine(initialState, states) {\n _classCallCheck(this, StateMachine);\n\n var _this = _possibleConstructorReturn(this, (StateMachine.__proto__ || Object.getPrototypeOf(StateMachine)).call(this));\n\n var lock = null;\n var state = initialState;\n states = transformStates(states);\n Object.defineProperties(_this, {\n _lock: {\n get: function get() {\n return lock;\n },\n set: function set(_lock) {\n lock = _lock;\n }\n },\n _reachableStates: {\n value: reachable(states)\n },\n _state: {\n get: function get() {\n return state;\n },\n set: function set(_state) {\n state = _state;\n }\n },\n _states: {\n value: states\n },\n _whenDeferreds: {\n value: new Set()\n },\n isLocked: {\n enumerable: true,\n get: function get() {\n return lock !== null;\n }\n },\n state: {\n enumerable: true,\n get: function get() {\n return state;\n }\n }\n });\n\n _this.on('stateChanged', function (state) {\n _this._whenDeferreds.forEach(function (deferred) {\n deferred.when(state, deferred.resolve, deferred.reject);\n });\n });\n return _this;\n }\n\n /**\n * Returns a promise whose executor function is called on each state change.\n * @param {function(state: string, resolve: function, reject: function): void} when\n * @returns {Promise.<*>}\n * @private\n */\n\n\n _createClass(StateMachine, [{\n key: '_whenPromise',\n value: function _whenPromise(when) {\n var _this2 = this;\n\n if (typeof when !== 'function') {\n return Promise.reject(new Error('when() executor must be a function'));\n }\n\n var deferred = util.defer();\n\n deferred.when = when;\n this._whenDeferreds.add(deferred);\n\n return deferred.promise.then(function (payload) {\n _this2._whenDeferreds.delete(deferred);\n return payload;\n }, function (error) {\n _this2._whenDeferreds.delete(deferred);\n throw error;\n });\n }\n\n /**\n * This method takes a lock and passes the {@link StateMachine#Key} to your\n * transition function. You may perform zero or more state transitions in your\n * transition function, but you should check for preemption in each tick. You\n * may also reenter the lock. Once the Promise returned by your transition\n * function resolves or rejects, this method releases the lock it acquired for\n * you.\n * @param {string} name - a name for the lock\n * @param {function(StateMachine#Key): Promise} transitionFunction\n * @returns {Promise}\n */\n // NOTE(mroberts): This method is named after a Haskell function:\n // https://hackage.haskell.org/package/base-4.8.2.0/docs/Control-Exception.html#v:bracket\n\n }, {\n key: 'bracket',\n value: function bracket(name, transitionFunction) {\n var key = void 0;\n var self = this;\n\n function releaseLock(error) {\n if (self.hasLock(key)) {\n self.releaseLockCompletely(key);\n }\n if (error) {\n throw error;\n }\n }\n\n return this.takeLock(name).then(function gotKey(_key) {\n key = _key;\n return transitionFunction(key);\n }).then(function success(result) {\n releaseLock();\n return result;\n }, releaseLock);\n }\n\n /**\n * Check whether or not a {@link StateMachine#Key} matches the lock.\n * @param {StateMachine#Key} key\n * @returns {boolean}\n */\n\n }, {\n key: 'hasLock',\n value: function hasLock(key) {\n return this._lock === key;\n }\n\n /**\n * Preempt any pending state transitions and immediately transition to the new\n * state. If a lock name is specified, take the lock and return the\n * {@link StateMachine#Key}.\n * @param {string} newState\n * @param {?string} [name=null] - a name for the lock\n * @param {Array<*>} [payload=[]]\n * @returns {?StateMachine#Key}\n */\n\n }, {\n key: 'preempt',\n value: function preempt(newState, name, payload) {\n // 1. Check that the new state is valid.\n if (!isValidTransition(this._states, this.state, newState)) {\n throw new Error('Cannot transition from \"' + this.state + '\" to \"' + newState + '\"');\n }\n\n // 2. Release the old lock, if any.\n var oldLock = void 0;\n if (this.isLocked) {\n oldLock = this._lock;\n this._lock = null;\n }\n\n // 3. Take the lock, if requested.\n var key = null;\n if (name) {\n key = this.takeLockSync(name);\n }\n\n // 4. If a lock wasn't requested, take a \"preemption\" lock in order to\n // maintain FIFO order of those taking locks.\n var preemptionKey = key ? null : this.takeLockSync('preemption');\n\n // 5. Transition.\n this.transition(newState, key || preemptionKey, payload);\n\n // 6. Preempt anyone blocked on the old lock.\n if (oldLock) {\n oldLock.resolve();\n }\n\n // 7. Release the \"preemption\" lock, if we took it.\n if (preemptionKey) {\n this.releaseLock(preemptionKey);\n }\n\n return key;\n }\n\n /**\n * Release a lock. This method succeeds only if the {@link StateMachine} is\n * still locked and has not been preempted.\n * @param {StateMachine#Key} key\n * @throws Error\n */\n\n }, {\n key: 'releaseLock',\n value: function releaseLock(key) {\n if (!this.isLocked) {\n throw new Error('Could not release the lock for ' + key.name + ' because the StateMachine is not locked');\n } else if (!this.hasLock(key)) {\n throw new Error('Could not release the lock for ' + key.name + ' because ' + this._lock.name + ' has the lock');\n }\n if (key.depth === 0) {\n this._lock = null;\n key.resolve();\n } else {\n key.depth--;\n }\n }\n\n /**\n * Release a lock completely, even if it has been reentered. This method\n * succeeds only if the {@link StateMachine} is still locked and has not been\n * preempted.\n * @param {StateMachine#Key} key\n * @throws Error\n */\n\n }, {\n key: 'releaseLockCompletely',\n value: function releaseLockCompletely(key) {\n if (!this.isLocked) {\n throw new Error('Could not release the lock for ' + key.name + ' because the StateMachine is not locked');\n } else if (!this.hasLock(key)) {\n throw new Error('Could not release the lock for ' + key.name + ' because ' + this._lock.name + ' has the lock');\n }\n key.depth = 0;\n this._lock = null;\n key.resolve();\n }\n\n /**\n * Take a lock, returning a Promise for the {@link StateMachine#Key}. You should\n * take a lock anytime you intend to perform asynchronous transitions. Calls to\n * this method are guaranteed to be resolved in FIFO order. You may reenter\n * a lock by passing its {@link StateMachine#Key}.\n * @param {string|StateMachine#Key} nameOrKey - a name for the lock or an\n * existing {@link StateMachine#Key}\n * @returns {Promise}\n */\n\n }, {\n key: 'takeLock',\n value: function takeLock(nameOrKey) {\n var _this3 = this;\n\n // Reentrant lock\n if ((typeof nameOrKey === 'undefined' ? 'undefined' : _typeof(nameOrKey)) === 'object') {\n var key = nameOrKey;\n return new Promise(function (resolve) {\n resolve(_this3.takeLockSync(key));\n });\n }\n\n // New lock\n var name = nameOrKey;\n if (this.isLocked) {\n var takeLock = this.takeLock.bind(this, name);\n return this._lock.promise.then(takeLock);\n }\n return Promise.resolve(this.takeLockSync(name));\n }\n\n /**\n * Take a lock, returning the {@Link StateMachine#Key}. This method throws if\n * the {@link StateMachine} is locked or the wrong {@link StateMachine#Key} is\n * provided. You may reenter a lock by passing its {@link StateMachine#Key}.\n * @param {string|StateMachine#Key} nameOrKey - a name for the lock or an\n * existing {@link StateMachine#Key}\n * @returns {object}\n * @throws Error\n */\n\n }, {\n key: 'takeLockSync',\n value: function takeLockSync(nameOrKey) {\n var key = typeof nameOrKey === 'string' ? null : nameOrKey;\n var name = key ? key.name : nameOrKey;\n\n if (key && !this.hasLock(key) || !key && this.isLocked) {\n throw new Error('Could not take the lock for ' + name + ' because the lock for ' + this._lock.name + ' was not released');\n }\n\n // Reentrant lock\n if (key) {\n key.depth++;\n return key;\n }\n\n // New lock\n var lock = makeLock(name);\n this._lock = lock;\n return lock;\n }\n\n /**\n * Transition to a new state. If the {@link StateMachine} is locked, you must\n * provide the {@link StateMachine#Key}. An invalid state or the wrong\n * {@link StateMachine#Key} will throw an error.\n * @param {string} newState\n * @param {?StateMachine#Key} [key=null]\n * @param {Array<*>} [payload=[]]\n * @throws {Error}\n */\n\n }, {\n key: 'transition',\n value: function transition(newState, key, payload) {\n payload = payload || [];\n\n // 1. If we're locked, required the key.\n if (this.isLocked) {\n if (!key) {\n throw new Error('You must provide the key in order to ' + 'transition');\n } else if (!this.hasLock(key)) {\n throw new Error('Could not transition using the key for ' + key.name + ' because ' + this._lock.name + ' has the lock');\n }\n } else if (key) {\n throw new Error('Key provided for ' + key.name + ', but the StateMachine was not locked (possibly due to preemption)');\n }\n\n // 2. Check that the new state is valid.\n if (!isValidTransition(this._states, this.state, newState)) {\n throw new Error('Cannot transition from \"' + this.state + '\" to \"' + newState + '\"');\n }\n\n // 3. Update the state and emit an event.\n this._state = newState;\n this.emit.apply(this, _toConsumableArray(['stateChanged', newState].concat(payload)));\n }\n\n /**\n * Attempt to transition to a new state. Unlike {@link StateMachine#transition},\n * this method does not throw.\n * @param {string} newState\n * @param {?StateMachine#Key} [key=null]\n * @param {Array<*>} [payload=[]]\n * @returns {boolean}\n */\n\n }, {\n key: 'tryTransition',\n value: function tryTransition(newState, key, payload) {\n try {\n this.transition(newState, key, payload);\n } catch (error) {\n return false;\n }\n return true;\n }\n\n /**\n * Return a Promise that resolves when the {@link StateMachine} transitions to\n * the specified state. If the {@link StateMachine} transitions such that the\n * requested state becomes unreachable, the Promise rejects.\n * @param {string} state\n * @returns {Promise}\n */\n\n }, {\n key: 'when',\n value: function when(state) {\n var _this4 = this;\n\n if (this.state === state) {\n return Promise.resolve(this);\n } else if (!isValidTransition(this._reachableStates, this.state, state)) {\n return Promise.reject(createUnreachableError(this.state, state));\n }\n return this._whenPromise(function (newState, resolve, reject) {\n if (newState === state) {\n resolve(_this4);\n } else if (!isValidTransition(_this4._reachableStates, newState, state)) {\n reject(createUnreachableError(newState, state));\n }\n });\n }\n }]);\n\n return StateMachine;\n}(EventEmitter);\n\n/**\n * @event StateMachine#stateChanged\n * @param {string} newState\n */\n\n/**\n * Check if a transition is valid.\n * @private\n * @param {Map<*, Set<*>>} graph\n * @param {*} from\n * @param {*} to\n * @returns {boolean}\n */\n\n\nfunction isValidTransition(graph, from, to) {\n return graph.get(from).has(to);\n}\n\n/**\n * @typedef {object} StateMachine#Key\n */\n\nfunction makeLock(name) {\n var lock = util.defer();\n lock.name = name;\n lock.depth = 0;\n return lock;\n}\n\n/**\n * Compute the transitive closure of a graph (i.e. what nodes are reachable from\n * where).\n * @private\n * @param {Map<*, Set<*>>} graph\n * @returns {Map<*, Set<*>>}\n */\nfunction reachable(graph) {\n return Array.from(graph.keys()).reduce(function (newGraph, from) {\n return newGraph.set(from, reachableFrom(graph, from));\n }, new Map());\n}\n\n/**\n * Compute the Set of node reachable from a particular node in the graph.\n * @private\n * @param {Map<*, Set<*>>} graph\n * @param {*} from\n * @param {Set<*>} [to]\n * @returns {Set<*>}\n */\nfunction reachableFrom(graph, from, to) {\n to = to || new Set();\n graph.get(from).forEach(function (node) {\n if (!to.has(node)) {\n to.add(node);\n reachableFrom(graph, node, to).forEach(to.add, to);\n }\n });\n return to;\n}\n\nfunction transformStates(states) {\n var newStates = new Map();\n for (var key in states) {\n newStates.set(key, new Set(states[key]));\n }\n return newStates;\n}\n\n/**\n * Create an \"unreachable state\" Error.\n * @param {string} here\n * @param {string} there\n * @returns {Error}\n */\nfunction createUnreachableError(here, there) {\n return new Error('\"' + there + '\" cannot be reached from \"' + here + '\"');\n}\n\nmodule.exports = StateMachine;","// eslint-disable-next-line no-warning-comments\n// TODO(mroberts): Remove this when we go to the next major version. This is\n// only in place so that we can support ES6 classes without requiring `new`.\n'use strict';\n\nvar _require = require('util'),\n inherits = _require.inherits;\n\nvar LocalAudioTrackClass = require('../localaudiotrack');\n\nfunction LocalAudioTrack(mediaStreamTrack, options) {\n var track = new LocalAudioTrackClass(mediaStreamTrack, options);\n Object.setPrototypeOf(track, LocalAudioTrack.prototype);\n return track;\n}\n\ninherits(LocalAudioTrack, LocalAudioTrackClass);\n\nmodule.exports = LocalAudioTrack;","'use strict';\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar constants = require('./constants');\nvar E = constants.typeErrors,\n trackPriority = constants.trackPriority;\n\nvar util = require('@twilio/webrtc/lib/util');\n\n/**\n * Return the given {@link LocalTrack} or a new {@link LocalTrack} for the\n * given MediaStreamTrack.\n * @param {LocalTrack|MediaStreamTrack} track\n * @param {object} options\n * @returns {LocalTrack}\n * @throws {TypeError}\n */\nfunction asLocalTrack(track, options) {\n if (track instanceof options.LocalAudioTrack || track instanceof options.LocalVideoTrack || track instanceof options.LocalDataTrack) {\n return track;\n }\n if (track instanceof options.MediaStreamTrack) {\n return track.kind === 'audio' ? new options.LocalAudioTrack(track, options) : new options.LocalVideoTrack(track, options);\n }\n /* eslint new-cap:0 */\n throw E.INVALID_TYPE('track', 'LocalAudioTrack, LocalVideoTrack, LocalDataTrack, or MediaStreamTrack');\n}\n\n/**\n * Create a new {@link LocalTrackPublication} for the given {@link LocalTrack}.\n * @param {LocalTrack} track\n * @param {LocalTrackPublicationSignaling} signaling\n * @param {function(track: LocalTrackPublication): void} unpublish\n * @param {object} options\n */\nfunction asLocalTrackPublication(track, signaling, unpublish, options) {\n var LocalTrackPublication = {\n audio: options.LocalAudioTrackPublication,\n video: options.LocalVideoTrackPublication,\n data: options.LocalDataTrackPublication\n }[track.kind];\n return new LocalTrackPublication(signaling, track, unpublish, options);\n}\n\n/**\n * Capitalize a word.\n * @param {string} word\n * @returns {string} capitalized\n */\nfunction capitalize(word) {\n return word[0].toUpperCase() + word.slice(1);\n}\n\n/**\n * Log deprecation warnings for the given events of an EventEmitter.\n * @param {string} name\n * @param {EventEmitter} emitter\n * @param {Map} events\n * @param {Log} log\n */\nfunction deprecateEvents(name, emitter, events, log) {\n var warningsShown = new Set();\n emitter.on('newListener', function newListener(event) {\n if (events.has(event) && !warningsShown.has(event)) {\n log.deprecated(name + '#' + event + ' has been deprecated and scheduled for removal in twilio-video.js@2.0.0.' + (events.get(event) ? ' Use ' + name + '#' + events.get(event) + ' instead.' : ''));\n warningsShown.add(event);\n }\n if (warningsShown.size >= events.size) {\n emitter.removeListener('newListener', newListener);\n }\n });\n}\n\n/**\n * Finds the items in list1 that are not in list2.\n * @param {Array<*>|Map<*>|Set<*>} list1\n * @param {Array<*>|Map<*>|Set<*>} list2\n * @returns {Set}\n */\nfunction difference(list1, list2) {\n list1 = Array.isArray(list1) ? new Set(list1) : new Set(list1.values());\n list2 = Array.isArray(list2) ? new Set(list2) : new Set(list2.values());\n\n var difference = new Set();\n\n list1.forEach(function (item) {\n if (!list2.has(item)) {\n difference.add(item);\n }\n });\n\n return difference;\n}\n\n/**\n * Filter out the keys in an object with a given value.\n * @param {object} object - Object to be filtered\n * @param {*} [filterValue] - Value to be filtered out; If not specified, then\n * filters out all keys which have an explicit value of \"undefined\"\n * @returns {object} - Filtered object\n */\nfunction filterObject(object, filterValue) {\n return Object.keys(object).reduce(function (filtered, key) {\n if (object[key] !== filterValue) {\n filtered[key] = object[key];\n }\n return filtered;\n }, {});\n}\n\n/**\n * Map a list to an array of arrays, and return the flattened result.\n * @param {Array<*>|Set<*>|Map<*>} list\n * @param {function(*): Array<*>} [mapFn]\n * @returns Array<*>\n */\nfunction flatMap(list, mapFn) {\n var listArray = list instanceof Map || list instanceof Set ? Array.from(list.values()) : list;\n\n mapFn = mapFn || function mapFn(item) {\n return item;\n };\n\n return listArray.reduce(function (flattened, item) {\n var mapped = mapFn(item);\n return flattened.concat(mapped);\n }, []);\n}\n\n/**\n * Get the user agent string, or return \"Unknown\".\n * @returns {string}\n */\nfunction getUserAgent() {\n return typeof navigator !== 'undefined' && navigator.userAgent ? navigator.userAgent : 'Unknown';\n}\n\n/**\n * Create a unique identifier.\n * @returns {string}\n */\nfunction makeUUID() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n var r = Math.random() * 16 | 0;\n var v = c === 'x' ? r : r & 0x3 | 0x8;\n return v.toString(16);\n });\n}\n\n/**\n * Ensure that the given function is called once per tick.\n * @param {function} fn - Function to be executed\n * @returns {function} - Schedules the given function to be called on the next tick\n */\nfunction oncePerTick(fn) {\n var timeout = null;\n\n function nextTick() {\n timeout = null;\n fn();\n }\n\n return function scheduleNextTick() {\n if (timeout) {\n clearTimeout(timeout);\n }\n timeout = setTimeout(nextTick);\n };\n}\n\nfunction promiseFromEvents(operation, eventEmitter, successEvent, failureEvent) {\n return new Promise(function (resolve, reject) {\n function onSuccess() {\n var args = [].slice.call(arguments);\n if (failureEvent) {\n eventEmitter.removeListener(failureEvent, onFailure);\n }\n resolve.apply(undefined, _toConsumableArray(args));\n }\n function onFailure() {\n var args = [].slice.call(arguments);\n eventEmitter.removeListener(successEvent, onSuccess);\n reject.apply(undefined, _toConsumableArray(args));\n }\n eventEmitter.once(successEvent, onSuccess);\n if (failureEvent) {\n eventEmitter.once(failureEvent, onFailure);\n }\n operation();\n });\n}\n\n/**\n * Traverse down multiple nodes on an object and return null if\n * any link in the path is unavailable.\n * @param {Object} obj - Object to traverse\n * @param {String} path - Path to traverse. Period-separated.\n * @returns {Any|null}\n */\nfunction getOrNull(obj, path) {\n return path.split('.').reduce(function (output, step) {\n if (!output) {\n return null;\n }\n return output[step];\n }, obj);\n}\n\n/**\n * @typedef {object} Deferred\n * @property {Promise} promise\n * @property {function} reject\n * @property {function} resolve\n */\n\n/**\n * Create a {@link Deferred}.\n * @returns {Deferred}\n */\nfunction defer() {\n var deferred = {};\n deferred.promise = new Promise(function (resolve, reject) {\n deferred.resolve = resolve;\n deferred.reject = reject;\n });\n return deferred;\n}\n\n/**\n * Copy a method from a `source` prototype onto a `wrapper` prototype. Invoking\n * the method on the `wrapper` prototype will invoke the corresponding method\n * on an instance accessed by `target`.\n * @param {object} source\n * @param {object} wrapper\n * @param {string} target\n * @param {string} methodName\n * @returns {undefined}\n */\nfunction delegateMethod(source, wrapper, target, methodName) {\n if (methodName in wrapper) {\n // Skip any methods already set.\n return;\n } else if (methodName.match(/^on[a-z]+$/)) {\n // Skip EventHandlers (these are handled in the constructor).\n return;\n }\n\n var type = void 0;\n try {\n type = _typeof(source[methodName]);\n } catch (error) {\n // NOTE(mroberts): Attempting to check the type of non-function members\n // on the prototype throws an error for some types.\n }\n\n if (type !== 'function') {\n // Skip non-function members.\n return;\n }\n\n /* eslint no-loop-func:0 */\n wrapper[methodName] = function () {\n var _target;\n\n return (_target = this[target])[methodName].apply(_target, arguments);\n };\n}\n\n/**\n * Copy methods from a `source` prototype onto a `wrapper` prototype. Invoking\n * the methods on the `wrapper` prototype will invoke the corresponding method\n * on an instance accessed by `target`.\n * @param {object} source\n * @param {object} wrapper\n * @param {string} target\n * @returns {undefined}\n */\nfunction delegateMethods(source, wrapper, target) {\n for (var methodName in source) {\n delegateMethod(source, wrapper, target, methodName);\n }\n}\n\n/**\n * Determine whether two values are deeply equal.\n * @param {*} val1\n * @param {*} val2\n * @returns {boolean}\n */\nfunction isDeepEqual(val1, val2) {\n if (val1 === val2) {\n return true;\n }\n if ((typeof val1 === 'undefined' ? 'undefined' : _typeof(val1)) !== (typeof val2 === 'undefined' ? 'undefined' : _typeof(val2))) {\n return false;\n }\n if (val1 === null) {\n return val2 === null;\n }\n if (val2 === null) {\n return false;\n }\n if (Array.isArray(val1)) {\n return Array.isArray(val2) && val1.length === val2.length && val1.every(function (val, i) {\n return isDeepEqual(val, val2[i]);\n });\n }\n if ((typeof val1 === 'undefined' ? 'undefined' : _typeof(val1)) === 'object') {\n var val1Keys = Object.keys(val1).sort();\n var val2Keys = Object.keys(val2).sort();\n return !Array.isArray(val2) && isDeepEqual(val1Keys, val2Keys) && val1Keys.every(function (key) {\n return isDeepEqual(val1[key], val2[key]);\n });\n }\n return false;\n}\n\n/**\n * Whether the given argument is a non-array object.\n * @param {*} object\n * @return {boolean}\n */\nfunction isNonArrayObject(object) {\n return (typeof object === 'undefined' ? 'undefined' : _typeof(object)) === 'object' && !Array.isArray(object);\n}\n\n/**\n * For each property name on the `source` prototype, add getters and/or setters\n * to `wrapper` that proxy to `target`.\n * @param {object} source\n * @param {object} wrapper\n * @param {string} target\n * @returns {undefined}\n */\nfunction proxyProperties(source, wrapper, target) {\n Object.getOwnPropertyNames(source).forEach(function (propertyName) {\n proxyProperty(source, wrapper, target, propertyName);\n });\n}\n\n/**\n * For the property name on the `source` prototype, add a getter and/or setter\n * to `wrapper` that proxies to `target`.\n * @param {object} source\n * @param {object} wrapper\n * @param {string} target\n * @param {string} propertyName\n * @returns {undefined}\n */\nfunction proxyProperty(source, wrapper, target, propertyName) {\n if (propertyName in wrapper) {\n // Skip any properties already set.\n return;\n } else if (propertyName.match(/^on[a-z]+$/)) {\n Object.defineProperty(wrapper, propertyName, {\n value: null,\n writable: true\n });\n\n target.addEventListener(propertyName.slice(2), function () {\n wrapper.dispatchEvent.apply(wrapper, arguments);\n });\n\n return;\n }\n\n Object.defineProperty(wrapper, propertyName, {\n enumerable: true,\n get: function get() {\n return target[propertyName];\n }\n });\n}\n\n/**\n * This is a function for turning a Promise into the kind referenced in the\n * Legacy Interface Extensions section of the WebRTC spec.\n * @param {Promise<*>} promise\n * @param {function<*>} onSuccess\n * @param {function} onFailure\n * @returns {Promise}\n */\nfunction legacyPromise(promise, onSuccess, onFailure) {\n if (onSuccess) {\n return promise.then(function (result) {\n onSuccess(result);\n }, function (error) {\n onFailure(error);\n });\n }\n return promise;\n}\n\n/**\n * Build the {@link LogLevels} object.\n * @param {String|LogLevel} logLevel - Log level name or object\n * @returns {LogLevels}\n */\nfunction buildLogLevels(logLevel) {\n if (typeof logLevel === 'string') {\n return {\n default: logLevel,\n media: logLevel,\n signaling: logLevel,\n webrtc: logLevel\n };\n }\n return logLevel;\n}\n\n/**\n * Get the {@link Track}'s derived class name\n * @param {Track} track\n * @param {?boolean} [local=undefined]\n * @returns {string}\n */\nfunction trackClass(track, local) {\n local = local ? 'Local' : '';\n return local + (track.kind || '').replace(/\\w{1}/, function (m) {\n return m.toUpperCase();\n }) + 'Track';\n}\n\n/**\n * Get the {@link TrackPublication}'s derived class name\n * @param {TrackPublication} publication\n * @param {?boolean} [local=undefined]\n * @returns {string}\n */\nfunction trackPublicationClass(publication, local) {\n local = local ? 'Local' : '';\n return local + (publication.kind || '').replace(/\\w{1}/, function (m) {\n return m.toUpperCase();\n }) + 'TrackPublication';\n}\n\n/**\n * Sets all underscore-prefixed properties on `object` non-enumerable.\n * @param {Object} object\n * @returns {void}\n */\nfunction hidePrivateProperties(object) {\n Object.getOwnPropertyNames(object).forEach(function (name) {\n if (name.startsWith('_')) {\n hideProperty(object, name);\n }\n });\n}\n\n/**\n * Creates a new subclass which, in the constructor, sets all underscore-prefixed\n * properties and the given public properties non-enumerable. This is useful for\n * patching up classes like EventEmitter which may set properties like `_events`\n * and `domain`.\n * @param {Function} klass\n * @param {Array} props\n * @returns {Function} subclass\n */\nfunction hidePrivateAndCertainPublicPropertiesInClass(klass, props) {\n // NOTE(mroberts): We do this to avoid giving the class a name.\n return function (_klass) {\n _inherits(_class, _klass);\n\n function _class() {\n var _ref;\n\n _classCallCheck(this, _class);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var _this = _possibleConstructorReturn(this, (_ref = _class.__proto__ || Object.getPrototypeOf(_class)).call.apply(_ref, [this].concat(args)));\n\n hidePrivateProperties(_this);\n hidePublicProperties(_this, props);\n return _this;\n }\n\n return _class;\n }(klass);\n}\n\n/**\n * Hide a property of an object.\n * @param {object} object\n * @param {string} name\n */\nfunction hideProperty(object, name) {\n var descriptor = Object.getOwnPropertyDescriptor(object, name);\n descriptor.enumerable = false;\n Object.defineProperty(object, name, descriptor);\n}\n\n/**\n * Hide the given public properties of an object.\n * @param {object} object\n * @param {Array} [props=[]]\n */\nfunction hidePublicProperties(object) {\n var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n props.forEach(function (name) {\n // eslint-disable-next-line no-prototype-builtins\n if (object.hasOwnProperty(name)) {\n hideProperty(object, name);\n }\n });\n}\n\n/**\n * Convert an Array of values to an Array of JSON values by calling\n * `valueToJSON` on each value.\n * @param {Array<*>} array\n * @returns {Array<*>}\n */\nfunction arrayToJSON(array) {\n return array.map(valueToJSON);\n}\n\n/**\n * Convert a Set of values to an Array of JSON values by calling `valueToJSON`\n * on each value.\n * @param {Set<*>} set\n * @returns {Array<*>}\n */\nfunction setToJSON(set) {\n return arrayToJSON([].concat(_toConsumableArray(set)));\n}\n\n/**\n * Convert a Map from strings to values to an object of JSON values by calling\n * `valueToJSON` on each value.\n * @param {Map} map\n * @returns {object}\n */\nfunction mapToJSON(map) {\n return [].concat(_toConsumableArray(map.entries())).reduce(function (json, _ref2) {\n var _ref3 = _slicedToArray(_ref2, 2),\n key = _ref3[0],\n value = _ref3[1];\n\n return Object.assign(_defineProperty({}, key, valueToJSON(value)), json);\n }, {});\n}\n\n/**\n * Convert an object to a JSON value by calling `valueToJSON` on its enumerable\n * keys.\n * @param {object} object\n * @returns {object}\n */\nfunction objectToJSON(object) {\n return Object.entries(object).reduce(function (json, _ref4) {\n var _ref5 = _slicedToArray(_ref4, 2),\n key = _ref5[0],\n value = _ref5[1];\n\n return Object.assign(_defineProperty({}, key, valueToJSON(value)), json);\n }, {});\n}\n\n/**\n * Convert a value into a JSON value.\n * @param {*} value\n * @returns {*}\n */\nfunction valueToJSON(value) {\n if (Array.isArray(value)) {\n return arrayToJSON(value);\n } else if (value instanceof Set) {\n return setToJSON(value);\n } else if (value instanceof Map) {\n return mapToJSON(value);\n } else if (value && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object') {\n return objectToJSON(value);\n }\n return value;\n}\n\n/**\n * Create the bandwidth profile payload included in an RSP connect message.\n * @param {BandwidthProfileOptions} bandwidthProfile\n * @returns {object}\n */\nfunction createBandwidthProfilePayload(bandwidthProfile) {\n return createRSPPayload(bandwidthProfile, [{ prop: 'video', type: 'object', transform: createBandwidthProfileVideoPayload }]);\n}\n\n/**\n * Create the bandwidth profile video payload included in an RSP connect message.\n * @param {VideoBandwidthProfileOptions} bandwidthProfileVideo\n * @returns {object}\n */\nfunction createBandwidthProfileVideoPayload(bandwidthProfileVideo) {\n return createRSPPayload(bandwidthProfileVideo, [{ prop: 'dominantSpeakerPriority', type: 'string', payloadProp: 'active_speaker_priority' }, { prop: 'maxSubscriptionBitrate', type: 'number', payloadProp: 'max_subscription_bandwidth' }, { prop: 'maxTracks', type: 'number', payloadProp: 'max_tracks' }, { prop: 'mode', type: 'string' }, { prop: 'renderDimensions', type: 'object', payloadProp: 'render_dimensions', transform: createRenderDimensionsPayload }, { prop: 'trackSwitchOffMode', type: 'string', payloadProp: 'track_switch_off' }]);\n}\n\n/**\n * Create the Media Signaling payload included in an RSP connect message.\n * @param {boolean} dominantSpeaker - whether to enable the Dominant Speaker\n * protocol or not\n * @param {boolean} networkQuality - whether to enable the Network Quality\n * protocol or not\n * @param {boolean} trackPriority - whether to enable the Track Priority\n * protocol or not\n * @param {boolean} trackSwitchOff - whether to enable the Track Switch-Off\n * protocol or not.\n * @returns {object}\n */\nfunction createMediaSignalingPayload(dominantSpeaker, networkQuality, trackPriority, trackSwitchOff) {\n var transports = { transports: [{ type: 'data-channel' }] };\n return Object.assign(dominantSpeaker\n // eslint-disable-next-line\n ? { active_speaker: transports } : {}, networkQuality\n // eslint-disable-next-line\n ? { network_quality: transports } : {}, trackPriority\n // eslint-disable-next-line\n ? { track_priority: transports } : {}, trackSwitchOff\n // eslint-disable-next-line\n ? { track_switch_off: transports } : {});\n}\n\n/**\n * Create {@link VideoTrack.Dimensions} RSP payload.\n * @param {VideoTrack.Dimensions} [dimensions]\n * @returns {object}\n */\nfunction createDimensionsPayload(dimensions) {\n return createRSPPayload(dimensions, [{ prop: 'height', type: 'number' }, { prop: 'width', type: 'number' }]);\n}\n\n/**\n * Create {@link VideoRenderDimensions} RSP payload.\n * @param renderDimensions\n * @returns {object}\n */\nfunction createRenderDimensionsPayload(renderDimensions) {\n var PRIORITY_HIGH = trackPriority.PRIORITY_HIGH,\n PRIORITY_LOW = trackPriority.PRIORITY_LOW,\n PRIORITY_STANDARD = trackPriority.PRIORITY_STANDARD;\n\n return createRSPPayload(renderDimensions, [{ prop: PRIORITY_HIGH, type: 'object', transform: createDimensionsPayload }, { prop: PRIORITY_LOW, type: 'object', transform: createDimensionsPayload }, { prop: PRIORITY_STANDARD, type: 'object', transform: createDimensionsPayload }]);\n}\n\n/**\n * Create an RSP payload for the given object.\n * @param {object} object - object for which RSP payload is to be generated\n * @param {Array} propConversions - conversion rules for object properties;\n * they specify how object properties should be converted to their corresponding\n * RSP payload properties\n * @returns {object}\n */\nfunction createRSPPayload(object, propConversions) {\n return propConversions.reduce(function (payload, _ref6) {\n var prop = _ref6.prop,\n type = _ref6.type,\n _ref6$payloadProp = _ref6.payloadProp,\n payloadProp = _ref6$payloadProp === undefined ? prop : _ref6$payloadProp,\n _ref6$transform = _ref6.transform,\n transform = _ref6$transform === undefined ? function (x) {\n return x;\n } : _ref6$transform;\n\n return _typeof(object[prop]) === type ? Object.assign(_defineProperty({}, payloadProp, transform(object[prop])), payload) : payload;\n }, {});\n}\n\n/**\n * Create the subscribe payload included in an RSP connect/update message.\n * @param {boolean} automaticSubscription - whether to subscribe to all RemoteTracks\n * @returns {object}\n */\nfunction createSubscribePayload(automaticSubscription) {\n return {\n rules: [{\n type: automaticSubscription ? 'include' : 'exclude',\n all: true\n }],\n revision: 1\n };\n}\n\n/**\n * Add random jitter to a given value in the range [-jitter, jitter].\n * @private\n * @param {number} value\n * @param {number} jitter\n * @returns {number} value + random(-jitter, +jitter)\n */\nfunction withJitter(value, jitter) {\n var rand = Math.random();\n return value - jitter + Math.floor(2 * jitter * rand + 0.5);\n}\n\n/**\n * Checks if the a number is in the range [min, max].\n * @private\n * @param {num} num\n * @param {number} min\n * @param {number} max\n * @return {boolean}\n */\nfunction inRange(num, min, max) {\n return min <= num && num <= max;\n}\n\n/**\n * returns true if given MediaStreamTrack is a screen share track\n * @private\n * @param {MediaStreamTrack} track\n * @returns {boolean}\n */\nfunction isChromeScreenShareTrack(track) {\n // NOTE(mpatwardhan): Chrome creates screen share tracks with label like: \"screen:69734272*\"\n // we will check for label that starts with \"screen:D\" where D being a digit.\n var isChrome = util.guessBrowser() === 'chrome';\n return isChrome && track.kind === 'video' && track.label && /^screen:[0-9]+/.test(track.label);\n}\n\nexports.constants = constants;\nexports.createBandwidthProfilePayload = createBandwidthProfilePayload;\nexports.createMediaSignalingPayload = createMediaSignalingPayload;\nexports.createSubscribePayload = createSubscribePayload;\nexports.asLocalTrack = asLocalTrack;\nexports.asLocalTrackPublication = asLocalTrackPublication;\nexports.capitalize = capitalize;\nexports.deprecateEvents = deprecateEvents;\nexports.difference = difference;\nexports.filterObject = filterObject;\nexports.flatMap = flatMap;\nexports.getUserAgent = getUserAgent;\nexports.hidePrivateProperties = hidePrivateProperties;\nexports.hidePrivateAndCertainPublicPropertiesInClass = hidePrivateAndCertainPublicPropertiesInClass;\nexports.isDeepEqual = isDeepEqual;\nexports.isNonArrayObject = isNonArrayObject;\nexports.inRange = inRange;\nexports.makeUUID = makeUUID;\nexports.oncePerTick = oncePerTick;\nexports.promiseFromEvents = promiseFromEvents;\nexports.getOrNull = getOrNull;\nexports.defer = defer;\nexports.delegateMethods = delegateMethods;\nexports.proxyProperties = proxyProperties;\nexports.legacyPromise = legacyPromise;\nexports.buildLogLevels = buildLogLevels;\nexports.trackClass = trackClass;\nexports.trackPublicationClass = trackPublicationClass;\nexports.valueToJSON = valueToJSON;\nexports.withJitter = withJitter;\nexports.isChromeScreenShareTrack = isChromeScreenShareTrack;","'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar NetworkQualitySendStats = require('./networkqualitysendstats');\nvar NetworkQualityRecvStats = require('./networkqualityrecvstats');\n\n/**\n * Network quality statistics shared between a {@link Participant}'s audio or video.\n * @property {NetworkQualityLevel} send - {@link NetworkQualityLevel} of the\n * {@link Participant}'s published audio or video\n * @property {number} recv - {@link NetworkQualityLevel} of the\n * {@link Participant}'s subscribed audio or video\n * @property {?NetworkQualitySendOrRecvStats} sendStats - {@link NetworkQualitySendOrRecvStats}\n * based on which {@link NetworkQualityMediaStats}#send\n * is calculated\n * @property {?NetworkQualitySendOrRecvStats} recvStats - {@link NetworkQualitySendOrRecvStats}\n * based on which {@link NetworkQualityMediaStats}#recv\n * is calculated\n */\n\nvar NetworkQualityMediaStats =\n/**\n * Construct a {@link NetworkQualityMediaStats}.\n * @param {MediaLevels} mediaLevels\n */\nfunction NetworkQualityMediaStats(_ref) {\n var send = _ref.send,\n recv = _ref.recv,\n _ref$sendStats = _ref.sendStats,\n sendStats = _ref$sendStats === undefined ? null : _ref$sendStats,\n _ref$recvStats = _ref.recvStats,\n recvStats = _ref$recvStats === undefined ? null : _ref$recvStats;\n\n _classCallCheck(this, NetworkQualityMediaStats);\n\n Object.defineProperties(this, {\n send: {\n value: send,\n enumerable: true\n },\n recv: {\n value: recv,\n enumerable: true\n },\n sendStats: {\n value: sendStats ? new NetworkQualitySendStats(sendStats) : null,\n enumerable: true\n },\n recvStats: {\n value: recvStats ? new NetworkQualityRecvStats(recvStats) : null,\n enumerable: true\n }\n });\n};\n\nmodule.exports = NetworkQualityMediaStats;","'use strict';\n\nvar XHR = require('xmlhttprequest').XMLHttpRequest;\n\n/**\n * Make a network request.\n * @param {String} method - HTTP method to use. e.g: GET, POST.\n * @param {RequestParams} params\n * @returns {Promise} responseText\n*/ /**\n * @typedef {Object} RequestParams\n * @property {String} url - URL to access.\n * @property {Object} [headers] - An unformatted map of headers.\n * @property {Object} [body] - An unformatted map representing\n * post body.\n * @property {Boolean} [withCredentials=false] - Whether to set the\n * XHR withCredentials flag.\n */\nfunction request(method, params) {\n return new Promise(function (resolve, reject) {\n if (typeof method !== 'string' || !params) {\n throw new Error('method and params are required args.');\n }\n\n var xhr = new XHR();\n xhr.open(method.toUpperCase(), params.url, true);\n xhr.withCredentials = !!params.withCredentials;\n\n xhr.onreadystatechange = function onreadystatechange() {\n if (xhr.readyState !== 4) {\n return;\n }\n\n if (200 <= xhr.status && xhr.status < 300) {\n resolve(xhr.responseText);\n } else {\n reject(xhr.responseText);\n }\n };\n\n for (var headerName in params.headers) {\n xhr.setRequestHeader(headerName, params.headers[headerName]);\n }\n\n xhr.send(params.body);\n });\n}\n\nrequest.get = request.bind(null, 'GET');\nrequest.post = request.bind(null, 'POST');\n\nmodule.exports = request;","/* globals RTCPeerConnection, RTCRtpTransceiver */\n\n'use strict';\n\nvar flatMap = require('./').flatMap;\nvar guessBrowser = require('./').guessBrowser;\n\n// NOTE(mmalavalli): We cache Chrome's sdpSemantics support in order to prevent\n// instantiation of more than one RTCPeerConnection.\nvar isSdpSemanticsSupported = null;\n\n/**\n * Check if Chrome supports specifying sdpSemantics for an RTCPeerConnection.\n * @return {boolean}\n */\nfunction checkIfSdpSemanticsIsSupported() {\n if (typeof isSdpSemanticsSupported === 'boolean') {\n return isSdpSemanticsSupported;\n }\n if (typeof RTCPeerConnection === 'undefined') {\n isSdpSemanticsSupported = false;\n return isSdpSemanticsSupported;\n }\n try {\n new RTCPeerConnection({ sdpSemantics: 'foo' });\n isSdpSemanticsSupported = false;\n } catch (e) {\n isSdpSemanticsSupported = true;\n }\n return isSdpSemanticsSupported;\n}\n\n// NOTE(mmalavalli): We cache Chrome's SDP format in order to prevent\n// instantiation of more than one RTCPeerConnection.\nvar chromeSdpFormat = null;\n\n/**\n * Get Chrome's default SDP format.\n * @returns {'planb'|'unified'}\n */\nfunction getChromeDefaultSdpFormat() {\n if (!chromeSdpFormat) {\n if (typeof RTCPeerConnection !== 'undefined'\n && 'addTransceiver' in RTCPeerConnection.prototype) {\n try {\n new RTCPeerConnection().addTransceiver('audio');\n chromeSdpFormat = 'unified';\n } catch (e) {\n chromeSdpFormat = 'planb';\n }\n } else {\n chromeSdpFormat = 'planb';\n }\n }\n return chromeSdpFormat;\n}\n\n/**\n * Get Chrome's SDP format.\n * @param {'plan-b'|'unified-plan'} [sdpSemantics]\n * @returns {'planb'|'unified'}\n */\nfunction getChromeSdpFormat(sdpSemantics) {\n if (!sdpSemantics || !checkIfSdpSemanticsIsSupported()) {\n return getChromeDefaultSdpFormat();\n }\n return {\n 'plan-b': 'planb',\n 'unified-plan': 'unified'\n }[sdpSemantics];\n}\n\n/**\n * Get Safari's default SDP format.\n * @returns {'planb'|'unified'}\n */\nfunction getSafariSdpFormat() {\n return typeof RTCRtpTransceiver !== 'undefined'\n && 'currentDirection' in RTCRtpTransceiver.prototype\n ? 'unified'\n : 'planb';\n}\n\n/**\n * Get the browser's default SDP format.\n * @param {'plan-b'|'unified-plan'} [sdpSemantics]\n * @returns {'planb'|'unified'}\n */\nfunction getSdpFormat(sdpSemantics) {\n return {\n chrome: getChromeSdpFormat(sdpSemantics),\n firefox: 'unified',\n safari: getSafariSdpFormat()\n }[guessBrowser()] || null;\n}\n\n/**\n * Match a pattern across lines, returning the first capture group for any\n * matches.\n * @param {string} pattern\n * @param {string} lines\n * @returns {Set} matches\n */\nfunction getMatches(pattern, lines) {\n var matches = lines.match(new RegExp(pattern, 'gm')) || [];\n return matches.reduce(function(results, line) {\n var match = line.match(new RegExp(pattern));\n return match ? results.add(match[1]) : results;\n }, new Set());\n}\n\n/**\n * Get a Set of MediaStreamTrack IDs from an SDP.\n * @param {string} pattern\n * @param {string} sdp\n * @returns {Set}\n */\nfunction getTrackIds(pattern, sdp) {\n return getMatches(pattern, sdp);\n}\n\n/**\n * Get a Set of MediaStreamTrack IDs from a Plan B SDP.\n * @param {string} sdp - Plan B SDP\n * @returns {Set} trackIds\n */\nfunction getPlanBTrackIds(sdp) {\n return getTrackIds('^a=ssrc:[0-9]+ +msid:.+ +(.+) *$', sdp);\n}\n\n/**\n * Get a Set of MediaStreamTrack IDs from a Unified Plan SDP.\n * @param {string} sdp - Unified Plan SDP\n * @returns {Set} trackIds\n */\nfunction getUnifiedPlanTrackIds(sdp) {\n return getTrackIds('^a=msid:.+ +(.+) *$', sdp);\n}\n\n/**\n * Get a Set of SSRCs for a MediaStreamTrack from a Plan B SDP.\n * @param {string} sdp - Plan B SDP\n * @param {string} trackId - MediaStreamTrack ID\n * @returns {Set}\n */\nfunction getPlanBSSRCs(sdp, trackId) {\n var pattern = '^a=ssrc:([0-9]+) +msid:[^ ]+ +' + trackId + ' *$';\n return getMatches(pattern, sdp);\n}\n\n/**\n * Get the m= sections of a particular kind and direction from an sdp.\n * @param {string} sdp - sdp string\n * @param {string} [kind] - Pattern for matching kind\n * @param {string} [direction] - Pattern for matching direction\n * @returns {Array} mediaSections\n */\nfunction getMediaSections(sdp, kind, direction) {\n kind = kind || '.*';\n direction = direction || '.*';\n return sdp.split('\\r\\nm=').slice(1).map(function(mediaSection) {\n return 'm=' + mediaSection;\n }).filter(function(mediaSection) {\n var kindPattern = new RegExp('m=' + kind, 'gm');\n var directionPattern = new RegExp('a=' + direction, 'gm');\n return kindPattern.test(mediaSection) && directionPattern.test(mediaSection);\n });\n}\n\n/**\n * Get the Set of SSRCs announced in a MediaSection.\n * @param {string} mediaSection\n * @returns {Array} ssrcs\n */\nfunction getMediaSectionSSRCs(mediaSection) {\n return Array.from(getMatches('^a=ssrc:([0-9]+) +.*$', mediaSection));\n}\n\n/**\n * Get a Set of SSRCs for a MediaStreamTrack from a Unified Plan SDP.\n * @param {string} sdp - Unified Plan SDP\n * @param {string} trackId - MediaStreamTrack ID\n * @returns {Set}\n */\nfunction getUnifiedPlanSSRCs(sdp, trackId) {\n var mediaSections = getMediaSections(sdp);\n\n var msidAttrRegExp = new RegExp('^a=msid:[^ ]+ +' + trackId + ' *$', 'gm');\n var matchingMediaSections = mediaSections.filter(function(mediaSection) {\n return mediaSection.match(msidAttrRegExp);\n });\n\n return new Set(flatMap(matchingMediaSections, getMediaSectionSSRCs));\n}\n\n/**\n * Get a Map from MediaStreamTrack IDs to SSRCs from an SDP.\n * @param {function(string): Set} getTrackIds\n * @param {function(string, string): Set} getSSRCs\n * @param {string} sdp - SDP\n * @returns {Map>} trackIdsToSSRCs\n */\nfunction getTrackIdsToSSRCs(getTrackIds, getSSRCs, sdp) {\n return new Map(Array.from(getTrackIds(sdp)).map(function(trackId) {\n return [trackId, getSSRCs(sdp, trackId)];\n }));\n}\n\n/**\n * Get a Map from MediaStreamTrack IDs to SSRCs from a Plan B SDP.\n * @param {string} sdp - Plan B SDP\n * @returns {Map>} trackIdsToSSRCs\n */\nfunction getPlanBTrackIdsToSSRCs(sdp) {\n return getTrackIdsToSSRCs(getPlanBTrackIds, getPlanBSSRCs, sdp);\n}\n\n/**\n * Get a Map from MediaStreamTrack IDs to SSRCs from a Plan B SDP.\n * @param {string} sdp - Plan B SDP\n * @returns {Map>} trackIdsToSSRCs\n */\nfunction getUnifiedPlanTrackIdsToSSRCs(sdp) {\n return getTrackIdsToSSRCs(getUnifiedPlanTrackIds, getUnifiedPlanSSRCs, sdp);\n}\n\n/**\n * Update the mappings from MediaStreamTrack IDs to SSRCs as indicated by both\n * the Map from MediaStreamTrack IDs to SSRCs and the SDP itself. This method\n * ensures that SSRCs never change once announced.\n * @param {function(string): Map>} getTrackIdsToSSRCs\n * @param {Map>} trackIdsToSSRCs\n * @param {string} sdp - SDP\n * @returns {strinng} updatedSdp - updated SDP\n */\nfunction updateTrackIdsToSSRCs(getTrackIdsToSSRCs, trackIdsToSSRCs, sdp) {\n var newTrackIdsToSSRCs = getTrackIdsToSSRCs(sdp);\n var newSSRCsToOldSSRCs = new Map();\n\n // NOTE(mroberts): First, update a=ssrc attributes.\n newTrackIdsToSSRCs.forEach(function(ssrcs, trackId) {\n if (!trackIdsToSSRCs.has(trackId)) {\n trackIdsToSSRCs.set(trackId, ssrcs);\n return;\n }\n var oldSSRCs = Array.from(trackIdsToSSRCs.get(trackId));\n var newSSRCs = Array.from(ssrcs);\n oldSSRCs.forEach(function(oldSSRC, i) {\n var newSSRC = newSSRCs[i];\n newSSRCsToOldSSRCs.set(newSSRC, oldSSRC);\n var pattern = '^a=ssrc:' + newSSRC + ' (.*)$';\n var replacement = 'a=ssrc:' + oldSSRC + ' $1';\n sdp = sdp.replace(new RegExp(pattern, 'gm'), replacement);\n });\n });\n\n // NOTE(mroberts): Then, update a=ssrc-group attributes.\n var pattern = '^(a=ssrc-group:[^ ]+ +)(.*)$';\n var matches = sdp.match(new RegExp(pattern, 'gm')) || [];\n matches.forEach(function(line) {\n var match = line.match(new RegExp(pattern));\n if (!match) {\n return;\n }\n var prefix = match[1];\n var newSSRCs = match[2];\n var oldSSRCs = newSSRCs.split(' ').map(function(newSSRC) {\n var oldSSRC = newSSRCsToOldSSRCs.get(newSSRC);\n return oldSSRC ? oldSSRC : newSSRC;\n }).join(' ');\n sdp = sdp.replace(match[0], prefix + oldSSRCs);\n });\n\n return sdp;\n}\n\n/**\n * Update the mappings from MediaStreamTrack IDs to SSRCs as indicated by both\n * the Map from MediaStreamTrack IDs to SSRCs and the Plan B SDP itself. This\n * method ensures that SSRCs never change once announced.\n * @param {Map>} trackIdsToSSRCs\n * @param {string} sdp - Plan B SDP\n * @returns {string} updatedSdp - updated Plan B SDP\n */\nfunction updatePlanBTrackIdsToSSRCs(trackIdsToSSRCs, sdp) {\n return updateTrackIdsToSSRCs(getPlanBTrackIdsToSSRCs, trackIdsToSSRCs, sdp);\n}\n\n/**\n * Update the mappings from MediaStreamTrack IDs to SSRCs as indicated by both\n * the Map from MediaStreamTrack IDs to SSRCs and the Plan B SDP itself. This\n * method ensures that SSRCs never change once announced.\n * @param {Map>} trackIdsToSSRCs\n * @param {string} sdp - Plan B SDP\n * @returns {string} updatedSdp - updated Plan B SDP\n */\nfunction updateUnifiedPlanTrackIdsToSSRCs(trackIdsToSSRCs, sdp) {\n return updateTrackIdsToSSRCs(getUnifiedPlanTrackIdsToSSRCs, trackIdsToSSRCs, sdp);\n}\n\nexports.getSdpFormat = getSdpFormat;\nexports.getMediaSections = getMediaSections;\nexports.getPlanBTrackIds = getPlanBTrackIds;\nexports.getUnifiedPlanTrackIds = getUnifiedPlanTrackIds;\nexports.getPlanBSSRCs = getPlanBSSRCs;\nexports.getUnifiedPlanSSRCs = getUnifiedPlanSSRCs;\nexports.updatePlanBTrackIdsToSSRCs = updatePlanBTrackIdsToSSRCs;\nexports.updateUnifiedPlanTrackIdsToSSRCs = updateUnifiedPlanTrackIdsToSSRCs;\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"modalContent\",staticClass:\"modal fade\",attrs:{\"tabindex\":\"-1\",\"role\":\"dialog\",\"data-backdrop\":\"static\",\"aria-hidden\":\"true\",\"data-keyboard\":\"false\"}},[_c('div',{staticClass:\"modal-dialog\",class:[\n 'modal-dialog',\n _vm.sizeClass\n ],attrs:{\"role\":\"document\"}},[_c('div',{staticClass:\"modal-content\"},[_c('div',{staticClass:\"modal-header\"},[_c('h5',{staticClass:\"modal-title\"},[_vm._v(_vm._s(_vm.title))]),(_vm.hasCloseButton)?_c('button',{staticClass:\"close\",attrs:{\"type\":\"button\",\"aria-label\":\"Close\"},on:{\"click\":_vm.hide}},[_c('span',{attrs:{\"aria-hidden\":\"true\"}},[_vm._v(\"×\")])]):_vm._e()]),_c('div',{staticClass:\"modal-body\"},[_vm._t(\"content\")],2),_c('div',{staticClass:\"modal-footer\"},[_vm._t(\"footer\")],2)])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./index.vue?vue&type=template&id=dfd924ce&\"\nimport script from \"./index.vue?vue&type=script&lang=js&\"\nexport * from \"./index.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar TrackStats = require('./trackstats');\n\n/**\n * Statistics for a remote {@link Track}.\n * @extends TrackStats\n * @property {?number} bytesReceived - Number of bytes received\n * @property {?number} packetsReceived - Number of packets received\n */\n\nvar RemoteTrackStats = function (_TrackStats) {\n _inherits(RemoteTrackStats, _TrackStats);\n\n /*\n * @param {string} trackId - {@link Track} ID\n * @param {StandardizedTrackStatsReport} statsReport\n */\n function RemoteTrackStats(trackId, statsReport) {\n _classCallCheck(this, RemoteTrackStats);\n\n var _this = _possibleConstructorReturn(this, (RemoteTrackStats.__proto__ || Object.getPrototypeOf(RemoteTrackStats)).call(this, trackId, statsReport));\n\n Object.defineProperties(_this, {\n bytesReceived: {\n value: typeof statsReport.bytesReceived === 'number' ? statsReport.bytesReceived : null,\n enumerable: true\n },\n packetsReceived: {\n value: typeof statsReport.packetsReceived === 'number' ? statsReport.packetsReceived : null,\n enumerable: true\n }\n });\n return _this;\n }\n\n return RemoteTrackStats;\n}(TrackStats);\n\nmodule.exports = RemoteTrackStats;","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar AudioTrack = require('./audiotrack');\nvar mixinLocalMediaTrack = require('./localmediatrack');\n\nvar LocalMediaAudioTrack = mixinLocalMediaTrack(AudioTrack);\n\n/**\n * A {@link LocalAudioTrack} is an {@link AudioTrack} representing audio that\n * your {@link LocalParticipant} can publish to a {@link Room}. It can be\n * enabled and disabled with {@link LocalAudioTrack#enable} and\n * {@link LocalAudioTrack#disable} or stopped completely with\n * {@link LocalAudioTrack#stop}.\n * @extends AudioTrack\n * @property {Track.ID} id - The {@link LocalAudioTrack}'s ID\n * @property {boolean} isStopped - Whether or not the {@link LocalAudioTrack} is\n * stopped\n * @emits LocalAudioTrack#disabled\n * @emits LocalAudioTrack#enabled\n * @emits LocalAudioTrack#started\n * @emits LocalAudioTrack#stopped\n */\n\nvar LocalAudioTrack = function (_LocalMediaAudioTrack) {\n _inherits(LocalAudioTrack, _LocalMediaAudioTrack);\n\n /**\n * Construct a {@link LocalAudioTrack} from a MediaStreamTrack.\n * @param {MediaStreamTrack} mediaStreamTrack - An audio MediaStreamTrack\n * @param {LocalTrackOptions} [options] - {@link LocalTrack} options\n */\n function LocalAudioTrack(mediaStreamTrack, options) {\n _classCallCheck(this, LocalAudioTrack);\n\n return _possibleConstructorReturn(this, (LocalAudioTrack.__proto__ || Object.getPrototypeOf(LocalAudioTrack)).call(this, mediaStreamTrack, options));\n }\n\n _createClass(LocalAudioTrack, [{\n key: 'toString',\n value: function toString() {\n return '[LocalAudioTrack #' + this._instanceId + ': ' + this.id + ']';\n }\n }, {\n key: 'attach',\n value: function attach(el) {\n el = _get(LocalAudioTrack.prototype.__proto__ || Object.getPrototypeOf(LocalAudioTrack.prototype), 'attach', this).call(this, el);\n el.muted = true;\n return el;\n }\n\n /**\n * @private\n */\n\n }, {\n key: '_end',\n value: function _end() {\n return _get(LocalAudioTrack.prototype.__proto__ || Object.getPrototypeOf(LocalAudioTrack.prototype), '_end', this).apply(this, arguments);\n }\n\n /**\n * Disable the {@link LocalAudioTrack}. This is effectively \"mute\".\n * @returns {this}\n * @fires LocalAudioTrack#disabled\n */\n\n }, {\n key: 'disable',\n value: function disable() {\n return _get(LocalAudioTrack.prototype.__proto__ || Object.getPrototypeOf(LocalAudioTrack.prototype), 'disable', this).apply(this, arguments);\n }\n\n /**\n * Enable the {@link LocalAudioTrack}. This is effectively \"unmute\".\n * @returns {this}\n * @fires LocalAudioTrack#enabled\n */ /**\n * Enable or disable the {@link LocalAudioTrack}. This is effectively \"unmute\"\n * or \"mute\".\n * @param {boolean} [enabled] - Specify false to mute the\n * {@link LocalAudioTrack}\n * @returns {this}\n * @fires LocalAudioTrack#disabled\n * @fires LocalAudioTrack#enabled\n */\n\n }, {\n key: 'enable',\n value: function enable() {\n return _get(LocalAudioTrack.prototype.__proto__ || Object.getPrototypeOf(LocalAudioTrack.prototype), 'enable', this).apply(this, arguments);\n }\n\n /**\n * Calls stop on the underlying MediaStreamTrack. If you choose to stop a\n * {@link LocalAudioTrack}, you should unpublish it after stopping.\n * @returns {this}\n * @fires LocalAudioTrack#stopped\n */\n\n }, {\n key: 'stop',\n value: function stop() {\n return _get(LocalAudioTrack.prototype.__proto__ || Object.getPrototypeOf(LocalAudioTrack.prototype), 'stop', this).apply(this, arguments);\n }\n }]);\n\n return LocalAudioTrack;\n}(LocalMediaAudioTrack);\n\n/**\n * The {@link LocalAudioTrack} was disabled, i.e. \"muted\".\n * @param {LocalAudioTrack} track - The {@link LocalAudioTrack} that was\n * disabled\n * @event LocalAudioTrack#disabled\n */\n\n/**\n * The {@link LocalAudioTrack} was enabled, i.e. \"unmuted\".\n * @param {LocalAudioTrack} track - The {@link LocalAudioTrack} that was enabled\n * @event LocalAudioTrack#enabled\n */\n\n/**\n * The {@link LocalAudioTrack} started. This means there is enough audio data to\n * begin playback.\n * @param {LocalAudioTrack} track - The {@link LocalAudioTrack} that started\n * @event LocalAudioTrack#started\n */\n\n/**\n * The {@link LocalAudioTrack} stopped, either because\n * {@link LocalAudioTrack#stop} was called or because the underlying\n * MediaStreamTrack ended).\n * @param {LocalAudioTrack} track - The {@link LocalAudioTrack} that stopped\n * @event LocalAudioTrack#stopped\n */\n\nmodule.exports = LocalAudioTrack;","'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar NetworkQualityMediaStats = require('./networkqualitymediastats');\n\n/**\n * {@link NetworkQualityMediaStats} for a {@link Participant}'s audio.\n */\n\nvar NetworkQualityAudioStats = function (_NetworkQualityMediaS) {\n _inherits(NetworkQualityAudioStats, _NetworkQualityMediaS);\n\n /**\n * Construct a {@link NetworkQualityAudioStats}.\n * @param {MediaLevels} mediaLevels\n */\n function NetworkQualityAudioStats(mediaLevels) {\n _classCallCheck(this, NetworkQualityAudioStats);\n\n return _possibleConstructorReturn(this, (NetworkQualityAudioStats.__proto__ || Object.getPrototypeOf(NetworkQualityAudioStats)).call(this, mediaLevels));\n }\n\n return NetworkQualityAudioStats;\n}(NetworkQualityMediaStats);\n\nmodule.exports = NetworkQualityAudioStats;","// Copyright (c) 2012 Mathieu Turcotte\n// Licensed under the MIT license.\n\nvar events = require('events');\nvar util = require('util');\n\nfunction isDef(value) {\n return value !== undefined && value !== null;\n}\n\n// Abstract class defining the skeleton for the backoff strategies. Accepts an\n// object holding the options for the backoff strategy:\n//\n// * `randomisationFactor`: The randomisation factor which must be between 0\n// and 1 where 1 equates to a randomization factor of 100% and 0 to no\n// randomization.\n// * `initialDelay`: The backoff initial delay in milliseconds.\n// * `maxDelay`: The backoff maximal delay in milliseconds.\nfunction BackoffStrategy(options) {\n options = options || {};\n\n if (isDef(options.initialDelay) && options.initialDelay < 1) {\n throw new Error('The initial timeout must be greater than 0.');\n } else if (isDef(options.maxDelay) && options.maxDelay < 1) {\n throw new Error('The maximal timeout must be greater than 0.');\n }\n\n this.initialDelay_ = options.initialDelay || 100;\n this.maxDelay_ = options.maxDelay || 10000;\n\n if (this.maxDelay_ <= this.initialDelay_) {\n throw new Error('The maximal backoff delay must be ' +\n 'greater than the initial backoff delay.');\n }\n\n if (isDef(options.randomisationFactor) &&\n (options.randomisationFactor < 0 || options.randomisationFactor > 1)) {\n throw new Error('The randomisation factor must be between 0 and 1.');\n }\n\n this.randomisationFactor_ = options.randomisationFactor || 0;\n}\n\n// Gets the maximal backoff delay.\nBackoffStrategy.prototype.getMaxDelay = function() {\n return this.maxDelay_;\n};\n\n// Gets the initial backoff delay.\nBackoffStrategy.prototype.getInitialDelay = function() {\n return this.initialDelay_;\n};\n\n// Template method that computes and returns the next backoff delay in\n// milliseconds.\nBackoffStrategy.prototype.next = function() {\n var backoffDelay = this.next_();\n var randomisationMultiple = 1 + Math.random() * this.randomisationFactor_;\n var randomizedDelay = Math.round(backoffDelay * randomisationMultiple);\n return randomizedDelay;\n};\n\n// Computes and returns the next backoff delay. Intended to be overridden by\n// subclasses.\nBackoffStrategy.prototype.next_ = function() {\n throw new Error('BackoffStrategy.next_() unimplemented.');\n};\n\n// Template method that resets the backoff delay to its initial value.\nBackoffStrategy.prototype.reset = function() {\n this.reset_();\n};\n\n// Resets the backoff delay to its initial value. Intended to be overridden by\n// subclasses.\nBackoffStrategy.prototype.reset_ = function() {\n throw new Error('BackoffStrategy.reset_() unimplemented.');\n};\n\nmodule.exports = BackoffStrategy;\n","'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar NetworkQualitySendOrRecvStats = require('./networkqualitysendorrecvstats');\n\n/**\n * {@link NetworkQualitySendOrRecvStats} based on which a {@link Participant}'s\n * {@link NetworkQualityMediaStats}#recv is calculated.\n */\n\nvar NetworkQualityRecvStats = function (_NetworkQualitySendOr) {\n _inherits(NetworkQualityRecvStats, _NetworkQualitySendOr);\n\n /**\n * Construct a {@link NetworkQualityRecvStats}.\n * @param {SendOrRecvStats} sendOrRecvStats\n */\n function NetworkQualityRecvStats(sendOrRecvStats) {\n _classCallCheck(this, NetworkQualityRecvStats);\n\n return _possibleConstructorReturn(this, (NetworkQualityRecvStats.__proto__ || Object.getPrototypeOf(NetworkQualityRecvStats)).call(this, sendOrRecvStats));\n }\n\n return NetworkQualityRecvStats;\n}(NetworkQualitySendOrRecvStats);\n\nmodule.exports = NetworkQualityRecvStats;","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar DataTrackTransceiver = require('./transceiver');\nvar DataTransport = require('./transport');\n\n/**\n * A {@link DataTrackReceiver} represents a {@link DataTrackTransceiver} over\n * which data can be received. Internally, it users a single RTCDataChannel to\n * receive data.\n * @extends DataTrackTransceiver\n * @emits DataTrackReceiver#message\n * @emits DataTrackReceiver#close\n */\n\nvar DataTrackReceiver = function (_DataTrackTransceiver) {\n _inherits(DataTrackReceiver, _DataTrackTransceiver);\n\n /**\n * Construct an {@link DataTrackReceiver}.\n * @param {RTCDataChannel} dataChannel\n */\n function DataTrackReceiver(dataChannel) {\n _classCallCheck(this, DataTrackReceiver);\n\n var _this = _possibleConstructorReturn(this, (DataTrackReceiver.__proto__ || Object.getPrototypeOf(DataTrackReceiver)).call(this, dataChannel.label, dataChannel.maxPacketLifeTime, dataChannel.maxRetransmits, dataChannel.ordered));\n\n Object.defineProperties(_this, {\n _dataChannel: {\n value: dataChannel\n }\n });\n\n // NOTE(mmalavalli): In Firefox, the default value for \"binaryType\" is \"blob\".\n // So, we set it to \"arraybuffer\" to ensure that it is consistent with Chrome\n // and Safari.\n dataChannel.binaryType = 'arraybuffer';\n\n dataChannel.addEventListener('message', function (event) {\n _this.emit('message', event.data);\n });\n\n dataChannel.addEventListener('close', function () {\n _this.emit('close');\n });\n return _this;\n }\n\n _createClass(DataTrackReceiver, [{\n key: 'stop',\n value: function stop() {\n this._dataChannel.close();\n _get(DataTrackReceiver.prototype.__proto__ || Object.getPrototypeOf(DataTrackReceiver.prototype), 'stop', this).call(this);\n }\n\n /**\n * Create a {@link DataTransport} from the {@link DataTrackReceiver}.\n * @returns {DataTransport}\n */\n\n }, {\n key: 'toDataTransport',\n value: function toDataTransport() {\n return new DataTransport(this._dataChannel);\n }\n }]);\n\n return DataTrackReceiver;\n}(DataTrackTransceiver);\n\n/**\n * @event DataTrackReceiver#message\n * @param {string|ArrayBuffer} data\n */\n\n/**\n * @event DataTrackReceiver#close\n */\n\nmodule.exports = DataTrackReceiver;","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _require = require('events'),\n EventEmitter = _require.EventEmitter;\n\n/**\n * @property {?Track.SID} loudestParticipantSid\n * @emits DominantSpeakerSignaling#updated\n */\n\n\nvar DominantSpeakerSignaling = function (_EventEmitter) {\n _inherits(DominantSpeakerSignaling, _EventEmitter);\n\n /**\n * Construct an {@link DominantSpeakerSignaling}.\n * @param {MediaSignalingTransport} mediaSignalingTransport\n */\n function DominantSpeakerSignaling(mediaSignalingTransport) {\n _classCallCheck(this, DominantSpeakerSignaling);\n\n var _this = _possibleConstructorReturn(this, (DominantSpeakerSignaling.__proto__ || Object.getPrototypeOf(DominantSpeakerSignaling)).call(this));\n\n Object.defineProperties(_this, {\n _loudestParticipantSid: {\n value: null,\n writable: true\n }\n });\n\n mediaSignalingTransport.on('message', function (message) {\n switch (message.type) {\n case 'active_speaker':\n _this._setLoudestParticipantSid(message.participant);\n break;\n default:\n break;\n }\n });\n return _this;\n }\n\n /**\n * Get the loudest {@link Track.SID}, if known.\n * @returns {?Track.SID}\n */\n\n\n _createClass(DominantSpeakerSignaling, [{\n key: '_setLoudestParticipantSid',\n\n\n /**\n * @private\n * @param {Track.SID} loudestParticipantSid\n * @returns {void}\n */\n value: function _setLoudestParticipantSid(loudestParticipantSid) {\n if (this.loudestParticipantSid === loudestParticipantSid) {\n return;\n }\n this._loudestParticipantSid = loudestParticipantSid;\n this.emit('updated');\n }\n }, {\n key: 'loudestParticipantSid',\n get: function get() {\n return this._loudestParticipantSid;\n }\n }]);\n\n return DominantSpeakerSignaling;\n}(EventEmitter);\n\n/**\n * @event DominantSpeakerSignaling#updated\n */\n\nmodule.exports = DominantSpeakerSignaling;","/* globals RTCPeerConnection */\n'use strict';\n\nvar EventTarget = require('../util/eventtarget');\nvar FirefoxRTCSessionDescription = require('../rtcsessiondescription/firefox');\nvar inherits = require('util').inherits;\nvar updateTracksToSSRCs = require('../util/sdp').updateUnifiedPlanTrackIdsToSSRCs;\nvar util = require('../util');\n\n// NOTE(mroberts): This is a short-lived workaround. Checking the user agent\n// string might not fix every affected Firefox instance, but it should be good\n// enough for this bug.\nvar needsWorkaroundForBug1480277 = typeof navigator === 'object'\n && navigator.userAgent\n && (navigator.userAgent.match(/Firefox\\/61/) || navigator.userAgent.match(/Firefox\\/62/));\n\n// NOTE(mroberts): This class wraps Firefox's RTCPeerConnection implementation.\n// It provides some functionality not currently present in Firefox, namely the\n// abilities to\n//\n// 1. Call setLocalDescription and setRemoteDescription with new offers in\n// signalingStates \"have-local-offer\" and \"have-remote-offer\",\n// respectively.\n//\n// 2. The ability to call createOffer in signalingState \"have-local-offer\".\n//\n// Both of these are implemented using rollbacks to workaround the following\n// bug:\n//\n// https://bugzilla.mozilla.org/show_bug.cgi?id=1072388\n//\n// We also provide a workaround for a bug where Firefox may change the\n// previously-negotiated DTLS role in an answer, which breaks Chrome:\n//\n// https://bugzilla.mozilla.org/show_bug.cgi?id=1240897\n//\nfunction FirefoxRTCPeerConnection(configuration) {\n if (!(this instanceof FirefoxRTCPeerConnection)) {\n return new FirefoxRTCPeerConnection(configuration);\n }\n\n EventTarget.call(this);\n\n util.interceptEvent(this, 'signalingstatechange');\n\n /* eslint new-cap:0 */\n var peerConnection = new RTCPeerConnection(configuration);\n\n Object.defineProperties(this, {\n _initiallyNegotiatedDtlsRole: {\n value: null,\n writable: true\n },\n _isClosed: {\n value: false,\n writable: true\n },\n _peerConnection: {\n value: peerConnection\n },\n _rollingBack: {\n value: false,\n writable: true\n },\n _tracksToSSRCs: {\n value: new Map()\n },\n iceGatheringState: {\n enumerable: true,\n get: function() {\n return this._isClosed ? 'complete' : this._peerConnection.iceGatheringState;\n }\n },\n localDescription: {\n enumerable: true,\n get: function() {\n return overwriteWithInitiallyNegotiatedDtlsRole(this._peerConnection.localDescription, this._initiallyNegotiatedDtlsRole);\n }\n },\n signalingState: {\n enumerable: true,\n get: function() {\n return this._isClosed ? 'closed' : this._peerConnection.signalingState;\n }\n }\n });\n\n var self = this;\n var previousSignalingState;\n\n peerConnection.addEventListener('signalingstatechange', function onsignalingstatechange() {\n if (!self._rollingBack && self.signalingState !== previousSignalingState) {\n previousSignalingState = self.signalingState;\n\n // NOTE(mmalavalli): In Firefox, 'signalingstatechange' event is\n // triggered synchronously in the same tick after\n // RTCPeerConnection#close() is called. So we mimic Chrome's behavior\n // by triggering 'signalingstatechange' on the next tick.\n var dispatchEventToSelf = self.dispatchEvent.apply.bind(self.dispatchEvent, self, arguments);\n if (self._isClosed) {\n setTimeout(dispatchEventToSelf);\n } else {\n dispatchEventToSelf();\n }\n }\n });\n\n util.proxyProperties(RTCPeerConnection.prototype, this, peerConnection);\n}\n\ninherits(FirefoxRTCPeerConnection, EventTarget);\n\n// NOTE(mmalavalli): Firefox throws a TypeError when the PeerConnection's\n// prototype's \"peerIdentity\" property is accessed. In order to overcome\n// this, we ignore this property while delegating methods.\n// Reference: https://bugzilla.mozilla.org/show_bug.cgi?id=1363815\nObject.defineProperty(FirefoxRTCPeerConnection.prototype, 'peerIdentity', {\n enumerable: true,\n value: Promise.resolve({\n idp: '',\n name: ''\n })\n});\n\nif (needsWorkaroundForBug1480277) {\n FirefoxRTCPeerConnection.prototype.addTrack = function addTrack() {\n var track = arguments[0];\n var sender = this._peerConnection.addTrack.apply(this._peerConnection, arguments);\n sender.replaceTrack(track);\n return sender;\n };\n}\n\nFirefoxRTCPeerConnection.prototype.createAnswer = function createAnswer() {\n var args = [].slice.call(arguments);\n var promise;\n var self = this;\n\n promise = this._peerConnection.createAnswer().then(function createAnswerSucceeded(answer) {\n saveInitiallyNegotiatedDtlsRole(self, answer);\n return overwriteWithInitiallyNegotiatedDtlsRole(answer, self._initiallyNegotiatedDtlsRole);\n });\n\n return typeof args[0] === 'function'\n ? util.legacyPromise(promise, args[0], args[1])\n : promise;\n};\n\n// NOTE(mroberts): The WebRTC spec allows you to call createOffer from any\n// signalingState other than \"closed\"; however, Firefox has not yet implemented\n// this (https://bugzilla.mozilla.org/show_bug.cgi?id=1072388). We workaround\n// this by rolling back if we are in state \"have-local-offer\" or\n// \"have-remote-offer\". This is acceptable for our use case because we will\n// apply the newly-created offer almost immediately; however, this may be\n// unacceptable for other use cases.\nFirefoxRTCPeerConnection.prototype.createOffer = function createOffer() {\n var args = [].slice.call(arguments);\n var options = (args.length > 1 ? args[2] : args[0]) || {};\n var promise;\n var self = this;\n\n if (this.signalingState === 'have-local-offer' ||\n this.signalingState === 'have-remote-offer') {\n var local = this.signalingState === 'have-local-offer';\n promise = rollback(this, local, function rollbackSucceeded() {\n return self.createOffer(options);\n });\n } else {\n promise = self._peerConnection.createOffer(options);\n }\n\n promise = promise.then(function(offer) {\n return new FirefoxRTCSessionDescription({\n type: offer.type,\n sdp: updateTracksToSSRCs(self._tracksToSSRCs, offer.sdp)\n });\n });\n\n return args.length > 1\n ? util.legacyPromise(promise, args[0], args[1])\n : promise;\n};\n\n// NOTE(mroberts): While Firefox will reject the Promise returned by\n// setLocalDescription when called from signalingState \"have-local-offer\" with\n// an answer, it still updates the .localDescription property. We workaround\n// this by explicitly handling this case.\nFirefoxRTCPeerConnection.prototype.setLocalDescription = function setLocalDescription() {\n var args = [].slice.call(arguments);\n var description = args[0];\n var promise;\n\n if (description && description.type === 'answer' && this.signalingState === 'have-local-offer') {\n promise = Promise.reject(new Error('Cannot set local answer in state have-local-offer'));\n }\n\n if (promise) {\n return args.length > 1\n ? util.legacyPromise(promise, args[1], args[2])\n : promise;\n }\n\n return this._peerConnection.setLocalDescription.apply(this._peerConnection, args);\n};\n\n// NOTE(mroberts): The WebRTC spec allows you to call setRemoteDescription with\n// an offer multiple times in signalingState \"have-remote-offer\"; however,\n// Firefox has not yet implemented this (https://bugzilla.mozilla.org/show_bug.cgi?id=1072388).\n// We workaround this by rolling back if we are in state \"have-remote-offer\".\n// This is acceptable for our use case; however, this may be unacceptable for\n// other use cases.\n//\n// While Firefox will reject the Promise returned by setRemoteDescription when\n// called from signalingState \"have-remote-offer\" with an answer, it sill\n// updates the .remoteDescription property. We workaround this by explicitly\n// handling this case.\nFirefoxRTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() {\n var args = [].slice.call(arguments);\n var description = args[0];\n var promise;\n var self = this;\n\n if (description && this.signalingState === 'have-remote-offer') {\n if (description.type === 'answer') {\n promise = Promise.reject(new Error('Cannot set remote answer in state have-remote-offer'));\n } else if (description.type === 'offer') {\n promise = rollback(this, false, function rollbackSucceeded() {\n return self._peerConnection.setRemoteDescription(description);\n });\n }\n }\n\n if (!promise) {\n promise = this._peerConnection.setRemoteDescription(description);\n }\n\n promise = promise.then(function setRemoteDescriptionSucceeded() {\n saveInitiallyNegotiatedDtlsRole(self, description, true);\n });\n\n return args.length > 1\n ? util.legacyPromise(promise, args[1], args[2])\n : promise;\n};\n\n// NOTE(mroberts): The WebRTC spec specifies that the PeerConnection's internal\n// isClosed slot should immediately be set to true; however, in Firefox it\n// occurs in the next tick. We workaround this by tracking isClosed manually.\nFirefoxRTCPeerConnection.prototype.close = function close() {\n if (this.signalingState !== 'closed') {\n this._isClosed = true;\n this._peerConnection.close();\n }\n};\n\nutil.delegateMethods(\n RTCPeerConnection.prototype,\n FirefoxRTCPeerConnection.prototype,\n '_peerConnection');\n\nfunction rollback(peerConnection, local, onceRolledBack) {\n var setLocalDescription = local ? 'setLocalDescription' : 'setRemoteDescription';\n peerConnection._rollingBack = true;\n return peerConnection._peerConnection[setLocalDescription](new FirefoxRTCSessionDescription({\n type: 'rollback'\n })).then(onceRolledBack).then(function onceRolledBackSucceeded(result) {\n peerConnection._rollingBack = false;\n return result;\n }, function rollbackOrOnceRolledBackFailed(error) {\n peerConnection._rollingBack = false;\n throw error;\n });\n}\n\n/**\n * Extract the initially negotiated DTLS role out of an RTCSessionDescription's\n * sdp property and save it on the FirefoxRTCPeerConnection if and only if\n *\n * 1. A DTLS role was not already saved on the FirefoxRTCPeerConnection, and\n * 2. The description is an answer.\n *\n * @private\n * @param {FirefoxRTCPeerConnection} peerConnection\n * @param {RTCSessionDescription} description\n * @param {boolean} [remote=false] - if true, save the inverse of the DTLS role,\n * e.g. \"active\" instead of \"passive\" and vice versa\n * @returns {undefined}\n */\nfunction saveInitiallyNegotiatedDtlsRole(peerConnection, description, remote) {\n // NOTE(mroberts): JSEP specifies that offers always offer \"actpass\" as the\n // DTLS role. We need to inspect answers to figure out the negotiated DTLS\n // role.\n if (peerConnection._initiallyNegotiatedDtlsRole || description.type === 'offer') {\n return;\n }\n\n var match = description.sdp.match(/a=setup:([a-z]+)/);\n if (!match) {\n return;\n }\n\n var dtlsRole = match[1];\n peerConnection._initiallyNegotiatedDtlsRole = remote ? {\n active: 'passive',\n passive: 'active'\n }[dtlsRole] : dtlsRole;\n}\n\n/**\n * Overwrite the DTLS role in the sdp property of an RTCSessionDescription if\n * and only if\n *\n * 1. The description is an answer, and\n * 2. A DTLS role is provided.\n *\n * @private\n * @param {RTCSessionDescription} [description]\n * @param {string} [dtlsRole] - one of \"active\" or \"passive\"\n * @returns {?RTCSessionDescription} description\n */\nfunction overwriteWithInitiallyNegotiatedDtlsRole(description, dtlsRole) {\n if (description && description.type === 'answer' && dtlsRole) {\n return new FirefoxRTCSessionDescription({\n type: description.type,\n sdp: description.sdp.replace(/a=setup:[a-z]+/g, 'a=setup:' + dtlsRole)\n });\n }\n return description;\n}\n\nmodule.exports = FirefoxRTCPeerConnection;\n","'use strict';\n\nvar _require = require('events'),\n EventEmitter = _require.EventEmitter;\n\nvar _require2 = require('./util'),\n hidePrivateAndCertainPublicPropertiesInClass = _require2.hidePrivateAndCertainPublicPropertiesInClass;\n\nmodule.exports = hidePrivateAndCertainPublicPropertiesInClass(EventEmitter, ['domain']);","/* eslint new-cap:0 */\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar TrackPublication = require('./trackpublication');\n\nvar _require = require('../../util/constants'),\n E = _require.typeErrors,\n trackPriority = _require.trackPriority;\n\n/**\n * A {@link LocalTrackPublication} is a {@link LocalTrack} that has been\n * published to a {@link Room}.\n * @extends TrackPublication\n * @property {boolean} isTrackEnabled - whether the published {@link LocalTrack}\n * is enabled\n * @property {Track.Kind} kind - kind of the published {@link LocalTrack}\n * @property {Track.Priority} priority - the publish priority of the {@link LocalTrack}\n * @property {LocalTrack} track - the {@link LocalTrack}\n */\n\n\nvar LocalTrackPublication = function (_TrackPublication) {\n _inherits(LocalTrackPublication, _TrackPublication);\n\n /**\n * Construct a {@link LocalTrackPublication}.\n * @param {LocalTrackPublicationSignaling} signaling - The corresponding\n * {@link LocalTrackPublicationSignaling}\n * @param {LocalTrack} track - The {@link LocalTrack}\n * @param {function(LocalTrackPublication): void} unpublish - The callback\n * that unpublishes the {@link LocalTrackPublication}\n * @param {TrackPublicationOptions} options - {@link LocalTrackPublication}\n * options\n */\n function LocalTrackPublication(signaling, track, unpublish, options) {\n _classCallCheck(this, LocalTrackPublication);\n\n var _this = _possibleConstructorReturn(this, (LocalTrackPublication.__proto__ || Object.getPrototypeOf(LocalTrackPublication)).call(this, track.name, signaling.sid, options));\n\n Object.defineProperties(_this, {\n _reemitTrackEvent: {\n value: function value() {\n return _this.emit(_this.isTrackEnabled ? 'trackEnabled' : 'trackDisabled');\n }\n },\n _signaling: {\n value: signaling\n },\n _unpublish: {\n value: unpublish\n },\n isTrackEnabled: {\n enumerable: true,\n get: function get() {\n return this.track.kind === 'data' ? true : this.track.isEnabled;\n }\n },\n kind: {\n enumerable: true,\n value: track.kind\n },\n priority: {\n enumerable: true,\n get: function get() {\n return signaling.updatedPriority;\n }\n },\n track: {\n enumerable: true,\n value: track\n }\n });\n\n track.on('disabled', _this._reemitTrackEvent);\n track.on('enabled', _this._reemitTrackEvent);\n return _this;\n }\n\n _createClass(LocalTrackPublication, [{\n key: 'toString',\n value: function toString() {\n return '[LocalTrackPublication #' + this._instanceId + ': ' + this.trackSid + ']';\n }\n\n /**\n * Update the {@link Track.Priority} of the published {@link LocalTrack}.\n * @param {Track.Priority} priority - the new {@link Track.priority}\n * @returns {this}\n * @throws {RangeError}\n */\n\n }, {\n key: 'setPriority',\n value: function setPriority(priority) {\n var priorityValues = Object.values(trackPriority);\n if (!priorityValues.includes(priority)) {\n throw E.INVALID_VALUE('priority', priorityValues);\n }\n this._signaling.setPriority(priority);\n return this;\n }\n\n /**\n * Unpublish a {@link LocalTrackPublication}. This means that the media\n * from this {@link LocalTrackPublication} is no longer available to the\n * {@link Room}'s {@link RemoteParticipant}s.\n * @returns {this}\n */\n\n }, {\n key: 'unpublish',\n value: function unpublish() {\n this.track.removeListener('disabled', this._reemitTrackEvent);\n this.track.removeListener('enabled', this._reemitTrackEvent);\n this._unpublish(this);\n return this;\n }\n }]);\n\n return LocalTrackPublication;\n}(TrackPublication);\n\nmodule.exports = LocalTrackPublication;","/* globals RTCSessionDescription */\n'use strict';\n\n// This class wraps Chrome's RTCSessionDescription implementation. It provides\n// one piece of functionality not currently present in Chrome, namely\n//\n// 1. Rollback support\n// https://bugs.chromium.org/p/webrtc/issues/detail?id=4676\n//\nfunction ChromeRTCSessionDescription(descriptionInitDict) {\n if (!(this instanceof ChromeRTCSessionDescription)) {\n return new ChromeRTCSessionDescription(descriptionInitDict);\n }\n\n // If this constructor is called with an object with a .type property set to\n // \"rollback\", we should not call Chrome's RTCSessionDescription constructor,\n // because this would throw an RTCSdpType error.\n var description = descriptionInitDict && descriptionInitDict.type === 'rollback'\n ? null\n : new RTCSessionDescription(descriptionInitDict);\n\n Object.defineProperties(this, {\n _description: {\n get: function() {\n return description;\n }\n },\n sdp: {\n enumerable: true,\n value: description ? description.sdp : descriptionInitDict.sdp\n },\n type: {\n enumerable: true,\n value: description ? description.type : descriptionInitDict.type\n }\n });\n}\n\nmodule.exports = ChromeRTCSessionDescription;\n","/* globals RTCSessionDescription */\n'use strict';\nmodule.exports = typeof RTCSessionDescription !== 'undefined'\n ? RTCSessionDescription\n : window.mozRTCSessionDescription;\n","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _require = require('events'),\n EventEmitter = _require.EventEmitter;\n\n/**\n * @emits TrackSwitchOffSignalinging#updated\n */\n\n\nvar TrackSwitchOffSignaling = function (_EventEmitter) {\n _inherits(TrackSwitchOffSignaling, _EventEmitter);\n\n /**\n * Construct a {@link TrackSwitchOffSignaling}.\n * @param {MediaSignalingTransport} mediaSignalingTransport\n */\n function TrackSwitchOffSignaling(mediaSignalingTransport) {\n _classCallCheck(this, TrackSwitchOffSignaling);\n\n var _this = _possibleConstructorReturn(this, (TrackSwitchOffSignaling.__proto__ || Object.getPrototypeOf(TrackSwitchOffSignaling)).call(this));\n\n mediaSignalingTransport.on('message', function (message) {\n switch (message.type) {\n case 'track_switch_off':\n _this._setTrackSwitchOffUpdates(message.off || [], message.on || []);\n break;\n default:\n break;\n }\n });\n return _this;\n }\n\n /**\n * @private\n * @param {[Track.SID]} tracksSwitchedOff\n * @param {[Track.SID]} tracksSwitchedOn\n * @returns {void}\n */\n\n\n _createClass(TrackSwitchOffSignaling, [{\n key: '_setTrackSwitchOffUpdates',\n value: function _setTrackSwitchOffUpdates(tracksSwitchedOff, tracksSwitchedOn) {\n this.emit('updated', tracksSwitchedOff, tracksSwitchedOn);\n }\n }]);\n\n return TrackSwitchOffSignaling;\n}(EventEmitter);\n\n/**\n * @event TrackSwitchOffSignaling#updated\n */\n\nmodule.exports = TrackSwitchOffSignaling;","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Filter = function () {\n function Filter(options) {\n _classCallCheck(this, Filter);\n\n options = Object.assign({\n getKey: function defaultGetKey(a) {\n return a;\n },\n getValue: function defaultGetValue(a) {\n return a;\n },\n isLessThanOrEqualTo: function defaultIsLessThanOrEqualTo(a, b) {\n return a <= b;\n }\n }, options);\n Object.defineProperties(this, {\n _getKey: {\n value: options.getKey\n },\n _getValue: {\n value: options.getValue\n },\n _isLessThanOrEqualTo: {\n value: options.isLessThanOrEqualTo\n },\n _map: {\n value: new Map()\n }\n });\n }\n\n _createClass(Filter, [{\n key: 'toMap',\n value: function toMap() {\n return new Map(this._map);\n }\n }, {\n key: 'updateAndFilter',\n value: function updateAndFilter(entries) {\n return entries.filter(this.update, this);\n }\n }, {\n key: 'update',\n value: function update(entry) {\n var key = this._getKey(entry);\n var value = this._getValue(entry);\n if (this._map.has(key) && this._isLessThanOrEqualTo(value, this._map.get(key))) {\n return false;\n }\n this._map.set(key, value);\n return true;\n }\n }]);\n\n return Filter;\n}();\n\nmodule.exports = Filter;","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar RemoteTrackPublication = require('./remotetrackpublication');\n\n/**\n * A {@link RemoteDataTrackPublication} represents a {@link RemoteDataTrack}\n * that has been published to a {@link Room}.\n * @property {Track.Kind} kind - \"data\"\n * @property {?RemoteDataTrack} track - unless you have subscribed to the\n * {@link RemoteDataTrack}, this property is null\n * @emits RemoteDataTrackPublication#subscribed\n * @emits RemoteDataTrackPublication#subscriptionFailed\n * @emits RemoteDataTrackPublication#unsubscribed\n */\n\nvar RemoteDataTrackPublication = function (_RemoteTrackPublicati) {\n _inherits(RemoteDataTrackPublication, _RemoteTrackPublicati);\n\n /**\n * Construct a {@link RemoteDataTrackPublication}.\n * @param {RemoteTrackPublicationSignaling} signaling - {@link RemoteTrackPublication} signaling\n * @param {RemoteTrackPublicationOptions} options - {@link RemoteTrackPublication}\n * options\n */\n function RemoteDataTrackPublication(signaling, options) {\n _classCallCheck(this, RemoteDataTrackPublication);\n\n return _possibleConstructorReturn(this, (RemoteDataTrackPublication.__proto__ || Object.getPrototypeOf(RemoteDataTrackPublication)).call(this, signaling, options));\n }\n\n _createClass(RemoteDataTrackPublication, [{\n key: 'toString',\n value: function toString() {\n return '[RemoteDataTrackPublication #' + this._instanceId + ': ' + this.trackSid + ']';\n }\n }]);\n\n return RemoteDataTrackPublication;\n}(RemoteTrackPublication);\n\n/**\n * Your {@link LocalParticipant} subscribed to the {@link RemoteDataTrack}.\n * @param {RemoteDataTrack} track - the {@link RemoteDataTrack} that was subscribed to\n * @event RemoteDataTrackPublication#subscribed\n */\n\n/**\n * Your {@link LocalParticipant} failed to subscribe to the {@link RemoteDataTrack}.\n * @param {TwilioError} error - the reason the {@link RemoteDataTrack} could not be\n * subscribed to\n * @event RemoteDataTrackPublication#subscriptionFailed\n */\n\n/**\n * Your {@link LocalParticipant} unsubscribed from the {@link RemoteDataTrack}.\n * @param {RemoteDataTrack} track - the {@link RemoteDataTrack} that was unsubscribed from\n * @event RemoteDataTrackPublication#unsubscribed\n */\n\nmodule.exports = RemoteDataTrackPublication;","'use strict';\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _require = require('events'),\n EventEmitter = _require.EventEmitter;\n\nvar _require2 = require('./util/constants'),\n DEFAULT_NQ_LEVEL_LOCAL = _require2.DEFAULT_NQ_LEVEL_LOCAL,\n DEFAULT_NQ_LEVEL_REMOTE = _require2.DEFAULT_NQ_LEVEL_REMOTE,\n MAX_NQ_LEVEL = _require2.MAX_NQ_LEVEL;\n\nvar _require3 = require('./util'),\n inRange = _require3.inRange;\n\n/**\n * {@link NetworkQualityConfigurationImpl} represents an object which notifies its\n * listeners of any changes in the values of its properties.\n * @extends EventEmitter\n * @implements NetworkQualityConfiguration\n * @property {?NetworkQualityVerbosity} local - Verbosity level for {@link LocalParticipant}\n * @property {?NetworkQualityVerbosity} remote - Verbosity level for {@link RemoteParticipant}s\n */\n\n\nvar NetworkQualityConfigurationImpl = function (_EventEmitter) {\n _inherits(NetworkQualityConfigurationImpl, _EventEmitter);\n\n /**\n * Construct an {@link NetworkQualityConfigurationImpl}.\n * @param {NetworkQualityConfiguration} networkQualityConfiguration - Initial {@link NetworkQualityConfiguration}\n */\n function NetworkQualityConfigurationImpl(networkQualityConfiguration) {\n _classCallCheck(this, NetworkQualityConfigurationImpl);\n\n var _this = _possibleConstructorReturn(this, (NetworkQualityConfigurationImpl.__proto__ || Object.getPrototypeOf(NetworkQualityConfigurationImpl)).call(this));\n\n networkQualityConfiguration = Object.assign({\n local: DEFAULT_NQ_LEVEL_LOCAL,\n remote: DEFAULT_NQ_LEVEL_REMOTE\n }, networkQualityConfiguration);\n\n Object.defineProperties(_this, {\n local: {\n value: inRange(networkQualityConfiguration.local, DEFAULT_NQ_LEVEL_LOCAL, MAX_NQ_LEVEL) ? networkQualityConfiguration.local : DEFAULT_NQ_LEVEL_LOCAL,\n writable: true\n },\n remote: {\n value: inRange(networkQualityConfiguration.remote, DEFAULT_NQ_LEVEL_REMOTE, MAX_NQ_LEVEL) ? networkQualityConfiguration.remote : DEFAULT_NQ_LEVEL_REMOTE,\n writable: true\n }\n });\n return _this;\n }\n\n /**\n * Update the verbosity levels for network quality information for\n * {@link LocalParticipant} and {@link RemoteParticipant} with those\n * in the given {@link NetworkQualityConfiguration}.\n * @param {NetworkQualityConfiguration} networkQualityConfiguration - The new {@link NetworkQualityConfiguration}\n */\n\n\n _createClass(NetworkQualityConfigurationImpl, [{\n key: 'update',\n value: function update(networkQualityConfiguration) {\n var _this2 = this;\n\n networkQualityConfiguration = Object.assign({\n local: this.local,\n remote: this.remote\n }, networkQualityConfiguration);\n\n [['local', DEFAULT_NQ_LEVEL_LOCAL, 3], ['remote', DEFAULT_NQ_LEVEL_REMOTE, 3]].forEach(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 3),\n localOrRemote = _ref2[0],\n min = _ref2[1],\n max = _ref2[2];\n\n _this2[localOrRemote] = typeof networkQualityConfiguration[localOrRemote] === 'number' && inRange(networkQualityConfiguration[localOrRemote], min, max) ? networkQualityConfiguration[localOrRemote] : min;\n });\n }\n }]);\n\n return NetworkQualityConfigurationImpl;\n}(EventEmitter);\n\nmodule.exports = NetworkQualityConfigurationImpl;","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar EventEmitter = require('events').EventEmitter;\n\n/**\n * {@link EncodingParametersImpl} represents an object which notifies its\n * listeners of any changes in the values of its properties.\n * @extends EventEmitter\n * @implements EncodingParameters\n * @emits EncodingParametersImpl#changed\n * @property {?number} maxAudioBitrate\n * @property {?number} maxVideoBitrate\n */\n\nvar EncodingParametersImpl = function (_EventEmitter) {\n _inherits(EncodingParametersImpl, _EventEmitter);\n\n /**\n * Construct an {@link EncodingParametersImpl}.\n * @param {EncodingParamters} encodingParameters - Initial {@link EncodingParameters}\n */\n function EncodingParametersImpl(encodingParameters) {\n _classCallCheck(this, EncodingParametersImpl);\n\n var _this = _possibleConstructorReturn(this, (EncodingParametersImpl.__proto__ || Object.getPrototypeOf(EncodingParametersImpl)).call(this));\n\n encodingParameters = Object.assign({\n maxAudioBitrate: null,\n maxVideoBitrate: null\n }, encodingParameters);\n\n Object.defineProperties(_this, {\n maxAudioBitrate: {\n value: encodingParameters.maxAudioBitrate,\n writable: true\n },\n maxVideoBitrate: {\n value: encodingParameters.maxVideoBitrate,\n writable: true\n }\n });\n return _this;\n }\n\n /**\n * Returns the bitrate values in an {@link EncodingParameters}.\n * @returns {EncodingParameters}\n */\n\n\n _createClass(EncodingParametersImpl, [{\n key: 'toJSON',\n value: function toJSON() {\n return {\n maxAudioBitrate: this.maxAudioBitrate,\n maxVideoBitrate: this.maxVideoBitrate\n };\n }\n\n /**\n * Update the bitrate values with those in the given {@link EncodingParameters}.\n * @param {EncodingParameters} encodingParameters - The new {@link EncodingParameters}\n * @fires EncodingParametersImpl#changed\n */\n\n }, {\n key: 'update',\n value: function update(encodingParameters) {\n var _this2 = this;\n\n encodingParameters = Object.assign({\n maxAudioBitrate: this.maxAudioBitrate,\n maxVideoBitrate: this.maxVideoBitrate\n }, encodingParameters);\n\n var shouldEmitChanged = ['maxAudioBitrate', 'maxVideoBitrate'].reduce(function (shouldEmitChanged, maxKindBitrate) {\n if (_this2[maxKindBitrate] !== encodingParameters[maxKindBitrate]) {\n _this2[maxKindBitrate] = encodingParameters[maxKindBitrate];\n shouldEmitChanged = true;\n }\n return shouldEmitChanged;\n }, false);\n\n if (shouldEmitChanged) {\n this.emit('changed');\n }\n }\n }]);\n\n return EncodingParametersImpl;\n}(EventEmitter);\n\n/**\n * At least one of the {@link EncodingParametersImpl}'s bitrate values changed.\n * @event EncodingParametersImpl#changed\n */\n\nmodule.exports = EncodingParametersImpl;","/* eslint callback-return:0 */\n'use strict';\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar EventEmitter = require('events');\n\nvar PeerConnectionReportFactory = require('../../stats/peerconnectionreportfactory');\n\n/**\n * @emits NetworkQualityMonitor#updated\n */\n\nvar NetworkQualityMonitor = function (_EventEmitter) {\n _inherits(NetworkQualityMonitor, _EventEmitter);\n\n /**\n * Construct a {@link NetworkQualityMonitor}.\n * @param {PeerConnectionManager} manager\n * @param {NetworkQualitySignaling} signaling\n */\n function NetworkQualityMonitor(manager, signaling) {\n _classCallCheck(this, NetworkQualityMonitor);\n\n var _this = _possibleConstructorReturn(this, (NetworkQualityMonitor.__proto__ || Object.getPrototypeOf(NetworkQualityMonitor)).call(this));\n\n Object.defineProperties(_this, {\n _factories: {\n value: new WeakMap()\n },\n _manager: {\n value: manager\n },\n _signaling: {\n value: signaling\n }\n });\n signaling.on('updated', function () {\n return _this.emit('updated');\n });\n return _this;\n }\n\n /**\n * Get the current {@link NetworkQualityLevel}, if any.\n * @returns {?NetworkQualityLevel} level - initially null\n */\n\n\n _createClass(NetworkQualityMonitor, [{\n key: 'start',\n\n\n /**\n * Start monitoring.\n * @returns {void}\n */\n value: function start() {\n var _this2 = this;\n\n this.stop();\n var timeout = setTimeout(function () {\n if (_this2._timeout !== timeout) {\n return;\n }\n next(_this2).then(function (reports) {\n if (_this2._timeout !== timeout) {\n return;\n }\n if (reports.length) {\n var _reports = _slicedToArray(reports, 1),\n report = _reports[0];\n\n _this2._signaling.put(report);\n }\n _this2.start();\n });\n }, 200);\n this._timeout = timeout;\n }\n\n /**\n * Stop monitoring.\n * @returns {void}\n */\n\n }, {\n key: 'stop',\n value: function stop() {\n clearTimeout(this._timeout);\n this._timeout = null;\n }\n }, {\n key: 'level',\n get: function get() {\n return this._signaling.level;\n }\n\n /**\n * Get the current {@link NetworkQualityLevels}, if any.\n * @returns {?NetworkQualityLevels} levels - initially null\n */\n\n }, {\n key: 'levels',\n get: function get() {\n return this._signaling.levels;\n }\n\n /**\n * Get the current {@link NetworkQualityLevels} of remote participants, if any.\n * @returns {Map} remoteLevels\n */\n\n }, {\n key: 'remoteLevels',\n get: function get() {\n return this._signaling.remoteLevels;\n }\n }]);\n\n return NetworkQualityMonitor;\n}(EventEmitter);\n\n/**\n * @param {NetworkQualityMonitor}\n * @returns {Promise}\n */\n\n\nfunction next(monitor) {\n var pcv2s = monitor._manager._peerConnections ? Array.from(monitor._manager._peerConnections.values()) : [];\n\n var pcs = pcv2s.map(function (pcv2) {\n return pcv2._peerConnection;\n }).filter(function (pc) {\n return pc.signalingState !== 'closed';\n });\n\n var factories = pcs.map(function (pc) {\n if (monitor._factories.has(pc)) {\n return monitor._factories.get(pc);\n }\n var factory = new PeerConnectionReportFactory(pc);\n monitor._factories.set(pc, factory);\n return factory;\n });\n\n var reportsOrNullPromises = factories.map(function (factory) {\n return factory.next().catch(function () {\n return null;\n });\n });\n\n return Promise.all(reportsOrNullPromises).then(function (reportsOrNull) {\n return reportsOrNull.filter(function (reportOrNull) {\n return reportOrNull;\n }).map(function (report) {\n return report.summarize();\n });\n });\n}\n\n/**\n * The {@link NetworkQualityLevel} changed.\n * @event NetworkQualityMonitor#updated\n */\n\nmodule.exports = NetworkQualityMonitor;","'use strict';\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar difference = require('../').difference;\nvar flatMap = require('../').flatMap;\n\n/**\n * Create a random {@link SSRC}.\n * @returns {SSRC}\n */\nfunction createSSRC() {\n var ssrcMax = 0xffffffff;\n return String(Math.floor(Math.random() * ssrcMax));\n}\n\n/**\n * @property {string} cName\n * @property {boolean} isSimulcastEnabled\n * @property {Map} rtxPairs\n * @property {Set} primarySSRCs\n * @property {string} streamId\n * @property {Track.ID} trackId\n */\n\nvar TrackAttributes = function () {\n /**\n * Construct a {@link MediaStreamTrack} attribute store.\n * @param {Track.ID} trackId - The MediaStreamTrack ID\n * @param {MediaStreamID} streamId - The MediaStream ID\n * @param {string} cName - The MediaStream cname\n */\n function TrackAttributes(trackId, streamId, cName) {\n _classCallCheck(this, TrackAttributes);\n\n Object.defineProperties(this, {\n cName: {\n enumerable: true,\n value: cName\n },\n isSimulcastEnabled: {\n enumerable: true,\n value: false,\n writable: true\n },\n primarySSRCs: {\n enumerable: true,\n value: new Set()\n },\n rtxPairs: {\n enumerable: true,\n value: new Map()\n },\n streamId: {\n enumerable: true,\n value: streamId\n },\n trackId: {\n enumerable: true,\n value: trackId\n }\n });\n }\n\n /**\n * Add {@link SimSSRC}s to the {@link TrackAttributes}.\n * @returns {void}\n */\n\n\n _createClass(TrackAttributes, [{\n key: 'addSimulcastSSRCs',\n value: function addSimulcastSSRCs() {\n if (this.isSimulcastEnabled) {\n return;\n }\n var simulcastSSRCs = [createSSRC(), createSSRC()];\n simulcastSSRCs.forEach(function (ssrc) {\n this.primarySSRCs.add(ssrc);\n }, this);\n\n if (this.rtxPairs.size) {\n simulcastSSRCs.forEach(function (ssrc) {\n this.rtxPairs.set(createSSRC(), ssrc);\n }, this);\n }\n }\n\n /**\n * Add the given {@link PrimarySSRC} or {@link RtxSSRC} to the {@link TrackAttributes}\n * and update the \"isSimulcastEnabled\" flag if it is also a {@link SimSSRC}.\n * @param {SSRC} ssrc - The {@link SSRC} to be added\n * @param {?PrimarySSRC} primarySSRC - The {@link PrimarySSRC}; if the given\n * {@link SSRC} itself is the {@link PrimarySSRC}, then this is set to null\n * @param {boolean} isSimSSRC - true if the given {@link SSRC} is a\n * {@link SimSSRC}; false otherwise\n * @returns {void}\n */\n\n }, {\n key: 'addSSRC',\n value: function addSSRC(ssrc, primarySSRC, isSimSSRC) {\n if (primarySSRC) {\n this.rtxPairs.set(ssrc, primarySSRC);\n } else {\n this.primarySSRCs.add(ssrc);\n }\n this.isSimulcastEnabled = this.isSimulcastEnabled || isSimSSRC;\n }\n\n /**\n * Construct the SDP lines for the {@link TrackAttributes}.\n * @param {boolean} [excludeRtx=false]\n * @returns {Array} Array of SDP lines\n */\n\n }, {\n key: 'toSdpLines',\n value: function toSdpLines(excludeRtx) {\n var _this = this;\n\n var rtxPairs = excludeRtx ? [] : Array.from(this.rtxPairs.entries()).map(function (rtxPair) {\n return rtxPair.reverse();\n });\n\n var simSSRCs = Array.from(this.primarySSRCs.values());\n var ssrcs = rtxPairs.length ? flatMap(rtxPairs) : simSSRCs;\n\n var attrLines = flatMap(ssrcs, function (ssrc) {\n return ['a=ssrc:' + ssrc + ' cname:' + _this.cName, 'a=ssrc:' + ssrc + ' msid:' + _this.streamId + ' ' + _this.trackId];\n });\n var rtxPairLines = rtxPairs.map(function (rtxPair) {\n return 'a=ssrc-group:FID ' + rtxPair.join(' ');\n });\n var simGroupLines = ['a=ssrc-group:SIM ' + simSSRCs.join(' ')];\n\n return rtxPairLines.concat(attrLines).concat(simGroupLines);\n }\n }]);\n\n return TrackAttributes;\n}();\n\n/**\n * Get the matches for a given RegEx pattern.\n * @param {string} section - SDP media section\n * @param {string} pattern - RegEx pattern\n * @returns {Array>} - Array of pattern matches\n */\n\n\nfunction getMatches(section, pattern) {\n var matches = section.match(new RegExp(pattern, 'gm')) || [];\n return matches.map(function (match) {\n var matches = match.match(new RegExp(pattern)) || [];\n return matches.slice(1);\n });\n}\n\n/**\n * Get the {@link SimSSRC}s that belong to a simulcast group.\n * @param {string} section - SDP media section\n * @returns {Set} Set of simulcast {@link SSRC}s\n */\nfunction getSimulcastSSRCs(section) {\n var simGroupPattern = '^a=ssrc-group:SIM ([0-9]+) ([0-9]+) ([0-9]+)$';\n return new Set(flatMap(getMatches(section, simGroupPattern)));\n}\n\n/**\n * Get the value of the given attribute for an SSRC.\n * @param {string} section - SDP media section\n * @param {SSRC} ssrc - {@link SSRC} whose attribute's value is to be determinded\n * @param {string} attribute - {@link SSRC} attribute name\n * @param {string} - {@link SSRC} attribute value\n */\nfunction getSSRCAttribute(section, ssrc, attribute) {\n var pattern = 'a=ssrc:' + ssrc + ' ' + attribute + ':(.+)';\n return section.match(new RegExp(pattern))[1];\n}\n\n/**\n * Create a Map of {@link PrimarySSRC}s and their {@link RtxSSRC}s.\n * @param {string} section - SDP media section\n * @returns {Map} - Map of {@link RtxSSRC}s and their\n * corresponding {@link PrimarySSRC}s\n */\nfunction getSSRCRtxPairs(section) {\n var rtxPairPattern = '^a=ssrc-group:FID ([0-9]+) ([0-9]+)$';\n return new Map(getMatches(section, rtxPairPattern).map(function (pair) {\n return pair.reverse();\n }));\n}\n\n/**\n * Create SSRC attribute tuples.\n * @param {string} section\n * @param {'planb' | 'unified'} sdpFormat\n * @returns {Array<[SSRC, MediaStreamID, Track.ID]>}\n */\nfunction createSSRCAttributeTuples(section, sdpFormat) {\n return {\n planb: createPlanBSSRCAttributeTuples,\n unified: createUnifiedPlanSSRCAttributeTuples\n }[sdpFormat](section);\n}\n\n/**\n * Create \"plan-b\" SSRC attribute tuples.\n * @param {string} section\n * @returns {Array<[SSRC, MediaStreamID, Track.ID]>}\n */\nfunction createPlanBSSRCAttributeTuples(section) {\n return getMatches(section, '^a=ssrc:([0-9]+) msid:([^\\\\s]+) ([^\\\\s]+)$');\n}\n\n/**\n * Create \"unified-plan\" SSRC attribute tuples.\n * @param {string} section\n * @returns {Array<[SSRC, MediaStreamID, Track.ID]>}\n */\nfunction createUnifiedPlanSSRCAttributeTuples(section) {\n var _flatMap = flatMap(getMatches(section, '^a=msid:(.+) (.+)$')),\n _flatMap2 = _slicedToArray(_flatMap, 2),\n streamId = _flatMap2[0],\n trackId = _flatMap2[1];\n\n var ssrcs = flatMap(getMatches(section, '^a=ssrc:(.+) cname:.+$'));\n return ssrcs.map(function (ssrc) {\n return [ssrc, streamId, trackId];\n });\n}\n\n/**\n * Create a Map of MediaStreamTrack IDs and their {@link TrackAttributes}.\n * @param {string} section - SDP media section\n * @param {'planb' | 'unified'} sdpFormat\n * @returns {Map}\n */\nfunction createTrackIdsToAttributes(section, sdpFormat) {\n var simSSRCs = getSimulcastSSRCs(section);\n var rtxPairs = getSSRCRtxPairs(section);\n var ssrcAttrTuples = createSSRCAttributeTuples(section, sdpFormat);\n\n return ssrcAttrTuples.reduce(function (trackIdsToSSRCs, tuple) {\n var ssrc = tuple[0];\n var streamId = tuple[1];\n var trackId = tuple[2];\n\n var trackAttributes = trackIdsToSSRCs.get(trackId) || new TrackAttributes(trackId, streamId, getSSRCAttribute(section, ssrc, 'cname'));\n\n var primarySSRC = rtxPairs.get(ssrc) || null;\n trackAttributes.addSSRC(ssrc, primarySSRC, simSSRCs.has(ssrc));\n return trackIdsToSSRCs.set(trackId, trackAttributes);\n }, new Map());\n}\n\n/**\n * Apply simulcast settings to the given SDP media section.\n * @param {string} section - SDP media section\n * @param {'planb' | 'unified'} sdpFormat\n * @param {Map} trackIdsToAttributes - Existing\n * map which will be updated for new MediaStreamTrack IDs\n * @returns {string} - The transformed SDP media section\n */\nfunction setSimulcastInMediaSection(section, sdpFormat, trackIdsToAttributes) {\n var newTrackIdsToAttributes = createTrackIdsToAttributes(section, sdpFormat);\n var newTrackIds = Array.from(newTrackIdsToAttributes.keys());\n var trackIds = Array.from(trackIdsToAttributes.keys());\n var trackIdsToAdd = difference(newTrackIds, trackIds);\n var trackIdsToIgnore = difference(trackIds, newTrackIds);\n\n // Update \"trackIdsToAttributes\" with TrackAttributes for new\n // MediaStreamTrack IDs.\n var trackAttributesToAdd = flatMap(trackIdsToAdd, function (trackId) {\n return newTrackIdsToAttributes.get(trackId);\n });\n trackAttributesToAdd.forEach(function (trackAttributes) {\n trackAttributes.addSimulcastSSRCs();\n trackIdsToAttributes.set(trackAttributes.trackId, trackAttributes);\n });\n\n // Get the SDP lines of the relevant MediaStreamTrack IDs from\n // \"trackIdsToAttributes\".\n trackIds = Array.from(trackIdsToAttributes.keys());\n var relevantTrackIds = difference(trackIds, trackIdsToIgnore);\n var relevantTrackAttributes = flatMap(relevantTrackIds, function (trackId) {\n return trackIdsToAttributes.get(trackId);\n });\n var excludeRtx = !section.match(/a=rtpmap:[0-9]+ rtx/);\n var relevantSdpLines = flatMap(relevantTrackAttributes, function (trackAttributes) {\n return trackAttributes.toSdpLines(excludeRtx);\n });\n\n // Add the simulcast SSRC SDP lines to the media section. The Set ensures\n // that the duplicates of the SSRC SDP lines that are in both \"section\" and\n // \"relevantSdpLines\" are removed.\n var sectionLines = flatMap(new Set(section.split('\\r\\n').concat(relevantSdpLines)));\n\n var xGoogleFlagConference = 'a=x-google-flag:conference';\n if (!section.match(xGoogleFlagConference)) {\n sectionLines.push(xGoogleFlagConference);\n }\n\n return sectionLines.join('\\r\\n');\n}\n\n/**\n * String representing a MediaStream ID.\n * @typedef {string} MediaStreamID\n */\n\n/**\n * String representing the SSRC of a MediaStreamTrack.\n * @typedef {string} SSRC\n */\n\n/**\n * Primary SSRC.\n * @typedef {SSRC} PrimarySSRC\n */\n\n/**\n * Retransmission SSRC.\n * @typedef {SSRC} RtxSSRC\n */\n\n/**\n * Simulcast SSRC.\n * @typedef {SSRC} SimSSRC\n */\n\nmodule.exports = setSimulcastInMediaSection;","/* globals MediaStream */\n'use strict';\n\nif (typeof MediaStream !== 'undefined') {\n module.exports = MediaStream;\n} else {\n module.exports = function MediaStream() {\n throw new Error('WebRTC is not supported in this browser');\n };\n}\n","'use strict';\n\n/**\n * Latency network quality statistics.\n * @property {?number} jitter - media jitter in seconds\n * @property {?number} rtt - round trip time in seconds\n * @property {?NetworkQualityLevel} level - {@link NetworkQualityLevel} for latency\n */\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar NetworkQualityLatencyStats =\n/**\n * Construct a {@link NetworkQualityLatencyStats}.\n * @param {LatencyStats} latencyStats\n */\nfunction NetworkQualityLatencyStats(_ref) {\n var _ref$jitter = _ref.jitter,\n jitter = _ref$jitter === undefined ? null : _ref$jitter,\n _ref$rtt = _ref.rtt,\n rtt = _ref$rtt === undefined ? null : _ref$rtt,\n _ref$level = _ref.level,\n level = _ref$level === undefined ? null : _ref$level;\n\n _classCallCheck(this, NetworkQualityLatencyStats);\n\n Object.defineProperties(this, {\n jitter: {\n value: jitter,\n enumerable: true\n },\n rtt: {\n value: rtt,\n enumerable: true\n },\n level: {\n value: level,\n enumerable: true\n }\n });\n};\n\nmodule.exports = NetworkQualityLatencyStats;","exports.XMLHttpRequest = XMLHttpRequest;\n","'use strict';\n\nvar defer = require('./').defer;\n\nvar states = {\n high: new Set(['low']),\n low: new Set(['high'])\n};\n\n/**\n * Construct a {@link Latch}.\n * @class\n * @classdesc A {@link Latch} has two states (\"high\" and \"low\") and methods for\n * transitioning between them ({@link Latch#raise} and {@link Latch#lower}).\n * @param {string} [initialState=\"low\"] - either \"high\" or \"low\"\n */\nfunction Latch(initialState) {\n if (!(this instanceof Latch)) {\n return new Latch(initialState);\n }\n var state = initialState || 'low';\n Object.defineProperties(this, {\n _state: {\n set: function(_state) {\n if (state !== _state) {\n state = _state;\n var whenDeferreds = this._whenDeferreds.get(state);\n whenDeferreds.forEach(function(deferred) {\n deferred.resolve(this);\n }, this);\n whenDeferreds.clear();\n }\n },\n get: function() {\n return state;\n }\n },\n _whenDeferreds: {\n value: new Map([\n ['high', new Set()],\n ['low', new Set()]\n ])\n },\n state: {\n enumerable: true,\n get: function() {\n return this._state;\n }\n }\n });\n}\n\n/**\n * Transition to \"low\".\n * @returns {this}\n * @throws {Error}\n */\nLatch.prototype.lower = function lower() {\n return this.transition('low');\n};\n\n/**\n * Transition to \"high\".\n * @returns {this}\n * @throws {Error}\n */\nLatch.prototype.raise = function raise() {\n return this.transition('high');\n};\n\n/**\n * Transition to a new state.\n * @param {string} newState\n * @returns {this}\n * @throws {Error}\n */\nLatch.prototype.transition = function transition(newState) {\n if (!states[this.state].has(newState)) {\n throw createUnreachableStateError(this.state, newState);\n }\n this._state = newState;\n return this;\n};\n\n/**\n * Return a Promise that resolves when the {@link Latch} transitions to\n * the specified state.\n * @param {string} state\n * @returns {Promise}\n */\nLatch.prototype.when = function when(state) {\n if (this.state === state) {\n return Promise.resolve(this);\n }\n if (!states[this.state].has(state)) {\n return Promise.reject(createUnreachableStateError(this.state, state));\n }\n var deferred = defer();\n this._whenDeferreds.get(state).add(deferred);\n return deferred.promise;\n};\n\n/**\n * Create an unreachable state Error.\n * @param {string} from - state to be transitioned from\n * @param {string} to - state to be transitioned to\n * @return {Error}\n */\nfunction createUnreachableStateError(from, to) {\n return new Error('Cannot transition from \"' + from + '\" to \"' + to + '\"');\n}\n\nmodule.exports = Latch;\n","'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar LocalTrackStats = require('./localtrackstats');\n\n/**\n * Statistics for a {@link LocalAudioTrack}.\n * @extends LocalTrackStats\n * @property {?AudioLevel} audioLevel - Input {@link AudioLevel}\n * @property {?number} jitter - Audio jitter in milliseconds\n */\n\nvar LocalAudioTrackStats = function (_LocalTrackStats) {\n _inherits(LocalAudioTrackStats, _LocalTrackStats);\n\n /**\n * @param {string} trackId - {@link LocalAudioTrack} ID\n * @param {StandardizedTrackStatsReport} statsReport\n */\n function LocalAudioTrackStats(trackId, statsReport) {\n _classCallCheck(this, LocalAudioTrackStats);\n\n var _this = _possibleConstructorReturn(this, (LocalAudioTrackStats.__proto__ || Object.getPrototypeOf(LocalAudioTrackStats)).call(this, trackId, statsReport));\n\n Object.defineProperties(_this, {\n audioLevel: {\n value: typeof statsReport.audioInputLevel === 'number' ? statsReport.audioInputLevel : null,\n enumerable: true\n },\n jitter: {\n value: typeof statsReport.jitter === 'number' ? statsReport.jitter : null,\n enumerable: true\n }\n });\n return _this;\n }\n\n return LocalAudioTrackStats;\n}(LocalTrackStats);\n\n/**\n * The maximum absolute amplitude of a set of audio samples in the\n * range of 0 to 32767 inclusive.\n * @typedef {number} AudioLevel\n */\n\nmodule.exports = LocalAudioTrackStats;","/* globals RTCPeerConnection, RTCSessionDescription */\n'use strict';\n\nvar EventTarget = require('../util/eventtarget');\nvar inherits = require('util').inherits;\nvar Latch = require('../util/latch');\nvar sdpUtils = require('../util/sdp');\nvar util = require('../util');\n\nvar isUnifiedPlan = sdpUtils.getSdpFormat() === 'unified';\n\nvar updateTrackIdsToSSRCs = isUnifiedPlan\n ? sdpUtils.updateUnifiedPlanTrackIdsToSSRCs\n : sdpUtils.updatePlanBTrackIdsToSSRCs;\n\nfunction SafariRTCPeerConnection(configuration) {\n if (!(this instanceof SafariRTCPeerConnection)) {\n return new SafariRTCPeerConnection(configuration);\n }\n\n EventTarget.call(this);\n\n util.interceptEvent(this, 'datachannel');\n util.interceptEvent(this, 'iceconnectionstatechange');\n util.interceptEvent(this, 'signalingstatechange');\n util.interceptEvent(this, 'track');\n\n var peerConnection = new RTCPeerConnection(configuration);\n\n Object.defineProperties(this, {\n _appliedTracksToSSRCs: {\n value: new Map(),\n writable: true\n },\n _audioTransceiver: {\n value: null,\n writable: true\n },\n _isClosed: {\n value: false,\n writable: true\n },\n _peerConnection: {\n value: peerConnection\n },\n _pendingLocalOffer: {\n value: null,\n writable: true\n },\n _pendingRemoteOffer: {\n value: null,\n writable: true\n },\n _rolledBackTracksToSSRCs: {\n value: new Map(),\n writable: true\n },\n _signalingStateLatch: {\n value: new Latch()\n },\n _tracksToSSRCs: {\n value: new Map(),\n writable: true\n },\n _videoTransceiver: {\n value: null,\n writable: true\n },\n localDescription: {\n enumerable: true,\n get: function() {\n return this._pendingLocalOffer || this._peerConnection.localDescription;\n }\n },\n iceConnectionState: {\n enumerable: true,\n get: function() {\n return this._isClosed ? 'closed' : this._peerConnection.iceConnectionState;\n }\n },\n iceGatheringState: {\n enumerable: true,\n get: function() {\n return this._isClosed ? 'complete' : this._peerConnection.iceGatheringState;\n }\n },\n remoteDescription: {\n enumerable: true,\n get: function() {\n return this._pendingRemoteOffer || this._peerConnection.remoteDescription;\n }\n },\n signalingState: {\n enumerable: true,\n get: function() {\n if (this._isClosed) {\n return 'closed';\n } else if (this._pendingLocalOffer) {\n return 'have-local-offer';\n } else if (this._pendingRemoteOffer) {\n return 'have-remote-offer';\n }\n return this._peerConnection.signalingState;\n }\n }\n });\n\n var self = this;\n\n peerConnection.addEventListener('datachannel', function ondatachannel(event) {\n shimDataChannel(event.channel);\n self.dispatchEvent(event);\n });\n\n peerConnection.addEventListener('iceconnectionstatechange', function oniceconnectionstatechange() {\n if (self._isClosed) {\n return;\n }\n self.dispatchEvent.apply(self, arguments);\n });\n\n peerConnection.addEventListener('signalingstatechange', function onsignalingstatechange() {\n if (self._isClosed) {\n return;\n }\n if (peerConnection.signalingState === 'stable') {\n self._appliedTracksToSSRCs = new Map(self._tracksToSSRCs);\n }\n if (!self._pendingLocalOffer && !self._pendingRemoteOffer) {\n self.dispatchEvent.apply(self, arguments);\n }\n });\n\n // NOTE(syerrapragada): This ensures that SafariRTCPeerConnection's \"remoteDescription\", when accessed\n // in an RTCTrackEvent listener, will point to the underlying RTCPeerConnection's\n // \"remoteDescription\". Before this fix, this was still pointing to \"_pendingRemoteOffer\"\n // even though a new remote RTCSessionDescription had already been applied.\n peerConnection.addEventListener('track', function ontrack(event) {\n self._pendingRemoteOffer = null;\n self.dispatchEvent(event);\n });\n\n util.proxyProperties(RTCPeerConnection.prototype, this, peerConnection);\n}\n\ninherits(SafariRTCPeerConnection, EventTarget);\n\nSafariRTCPeerConnection.prototype.addIceCandidate = function addIceCandidate(candidate) {\n var self = this;\n if (this.signalingState === 'have-remote-offer') {\n return this._signalingStateLatch.when('low').then(function signalingStatesResolved() {\n return self._peerConnection.addIceCandidate(candidate);\n });\n }\n return this._peerConnection.addIceCandidate(candidate);\n};\n\nSafariRTCPeerConnection.prototype.createOffer = function createOffer(options) {\n options = Object.assign({}, options);\n var self = this;\n\n // NOTE(mroberts): In general, this is not the way to do this; however, it's\n // good enough for our application.\n if (options.offerToReceiveAudio && !this._audioTransceiver && !(isUnifiedPlan && hasReceiversForTracksOfKind(this, 'audio'))) {\n delete options.offerToReceiveAudio;\n try {\n this._audioTransceiver = isUnifiedPlan\n ? this.addTransceiver('audio', { direction: 'recvonly' })\n : this.addTransceiver('audio');\n } catch (e) {\n return Promise.reject(e);\n }\n }\n\n if (options.offerToReceiveVideo && !this._videoTransceiver && !(isUnifiedPlan && hasReceiversForTracksOfKind(this, 'video'))) {\n delete options.offerToReceiveVideo;\n try {\n this._videoTransceiver = isUnifiedPlan\n ? this.addTransceiver('video', { direction: 'recvonly' })\n : this.addTransceiver('video');\n } catch (e) {\n return Promise.reject(e);\n }\n }\n\n return this._peerConnection.createOffer(options).then(function(offer) {\n // NOTE(mmalavalli): If createOffer() is called immediately after rolling back,\n // then we no longer need to retain the rolled back tracks to SSRCs Map.\n self._rolledBackTracksToSSRCs.clear();\n\n return new RTCSessionDescription({\n type: offer.type,\n sdp: updateTrackIdsToSSRCs(self._tracksToSSRCs, offer.sdp)\n });\n });\n};\n\nSafariRTCPeerConnection.prototype.createAnswer = function createAnswer(options) {\n var self = this;\n\n if (this._pendingRemoteOffer) {\n return this._peerConnection.setRemoteDescription(this._pendingRemoteOffer).then(function setRemoteDescriptionSucceeded() {\n self._signalingStateLatch.lower();\n return self._peerConnection.createAnswer();\n }).then(function createAnswerSucceeded(answer) {\n self._pendingRemoteOffer = null;\n\n // NOTE(mmalavalli): If createAnswer() is called immediately after rolling back, then we no\n // longer need to retain the rolled back tracks to SSRCs Map.\n self._rolledBackTracksToSSRCs.clear();\n\n return isUnifiedPlan ? new RTCSessionDescription({\n type: answer.type,\n sdp: updateTrackIdsToSSRCs(self._tracksToSSRCs, answer.sdp)\n }) : answer;\n }, function setRemoteDescriptionOrCreateAnswerFailed(error) {\n self._pendingRemoteOffer = null;\n throw error;\n });\n }\n\n return this._peerConnection.createAnswer(options).then(function createAnswerSucceeded(answer) {\n // NOTE(mmalavalli): If createAnswer() is called immediately after rolling back, then we no\n // longer need to retain the rolled back tracks to SSRCs Map.\n self._rolledBackTracksToSSRCs.clear();\n\n return isUnifiedPlan ? new RTCSessionDescription({\n type: answer.type,\n sdp: updateTrackIdsToSSRCs(self._tracksToSSRCs, answer.sdp)\n }) : answer;\n });\n};\n\nSafariRTCPeerConnection.prototype.createDataChannel = function createDataChannel(label, dataChannelDict) {\n var dataChannel = this._peerConnection.createDataChannel(label, dataChannelDict);\n shimDataChannel(dataChannel);\n return dataChannel;\n};\n\nSafariRTCPeerConnection.prototype.removeTrack = function removeTrack(sender) {\n sender.replaceTrack(null);\n this._peerConnection.removeTrack(sender);\n};\n\nSafariRTCPeerConnection.prototype.setLocalDescription = function setLocalDescription(description) {\n // NOTE(mmalavalli): If setLocalDescription() is called immediately after rolling back,\n // then we need to restore the rolled back tracks to SSRCs Map.\n if (this._rolledBackTracksToSSRCs.size > 0) {\n this._tracksToSSRCs = new Map(this._rolledBackTracksToSSRCs);\n this._rolledBackTracksToSSRCs.clear();\n }\n return setDescription(this, true, description);\n};\n\nSafariRTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription(description) {\n // NOTE(mmalavalli): If setRemoteDescription() is called immediately after rolling back,\n // then we no longer need to retain the rolled back tracks to SSRCs Map.\n this._rolledBackTracksToSSRCs.clear();\n return setDescription(this, false, description);\n};\n\nSafariRTCPeerConnection.prototype.close = function close() {\n if (this._isClosed) {\n return;\n }\n this._isClosed = true;\n this._peerConnection.close();\n var self = this;\n setTimeout(function() {\n self.dispatchEvent(new Event('iceconnectionstatechange'));\n self.dispatchEvent(new Event('signalingstatechange'));\n });\n};\n\nutil.delegateMethods(\n RTCPeerConnection.prototype,\n SafariRTCPeerConnection.prototype,\n '_peerConnection');\n\nfunction setDescription(peerConnection, local, description) {\n function setPendingLocalOffer(offer) {\n if (local) {\n peerConnection._pendingLocalOffer = offer;\n } else {\n peerConnection._pendingRemoteOffer = offer;\n }\n }\n\n function clearPendingLocalOffer() {\n if (local) {\n peerConnection._pendingLocalOffer = null;\n } else {\n peerConnection._pendingRemoteOffer = null;\n }\n }\n\n var pendingLocalOffer = local ? peerConnection._pendingLocalOffer : peerConnection._pendingRemoteOffer;\n var pendingRemoteOffer = local ? peerConnection._pendingRemoteOffer : peerConnection._pendingLocalOffer;\n var intermediateState = local ? 'have-local-offer' : 'have-remote-offer';\n var setLocalDescription = local ? 'setLocalDescription' : 'setRemoteDescription';\n\n if (!local && pendingRemoteOffer && description.type === 'answer') {\n return setRemoteAnswer(peerConnection, description);\n } else if (description.type === 'offer') {\n if (peerConnection.signalingState !== intermediateState && peerConnection.signalingState !== 'stable') {\n return Promise.reject(new Error('Cannot set ' + (local ? 'local' : 'remote') +\n ' offer in state ' + peerConnection.signalingState));\n }\n\n if (!pendingLocalOffer && peerConnection._signalingStateLatch.state === 'low') {\n peerConnection._signalingStateLatch.raise();\n }\n var previousSignalingState = peerConnection.signalingState;\n setPendingLocalOffer(description);\n\n // Only dispatch a signalingstatechange event if we transitioned.\n if (peerConnection.signalingState !== previousSignalingState) {\n return Promise.resolve().then(function dispatchSignalingStateChangeEvent() {\n peerConnection.dispatchEvent(new Event('signalingstatechange'));\n });\n }\n\n return Promise.resolve();\n } else if (description.type === 'rollback') {\n if (peerConnection.signalingState !== intermediateState) {\n return Promise.reject(new Error('Cannot rollback ' +\n (local ? 'local' : 'remote') + ' description in ' + peerConnection.signalingState));\n }\n clearPendingLocalOffer();\n\n // NOTE(mmalavalli): We store the rolled back tracks to SSRCs Map here in case\n // setLocalDescription() is called immediately aftera rollback (without calling\n // createOffer() or createAnswer()), in which case this roll back is not due to\n // a glare scenario and this Map should be restored.\n peerConnection._rolledBackTracksToSSRCs = new Map(peerConnection._tracksToSSRCs);\n peerConnection._tracksToSSRCs = new Map(peerConnection._appliedTracksToSSRCs);\n\n return Promise.resolve().then(function dispatchSignalingStateChangeEvent() {\n peerConnection.dispatchEvent(new Event('signalingstatechange'));\n });\n }\n\n return peerConnection._peerConnection[setLocalDescription](description);\n}\n\nfunction setRemoteAnswer(peerConnection, answer) {\n var pendingLocalOffer = peerConnection._pendingLocalOffer;\n return peerConnection._peerConnection.setLocalDescription(pendingLocalOffer).then(function setLocalOfferSucceeded() {\n peerConnection._pendingLocalOffer = null;\n return peerConnection.setRemoteDescription(answer);\n }).then(function setRemoteAnswerSucceeded() {\n peerConnection._signalingStateLatch.lower();\n });\n}\n\n/**\n * Whether a SafariRTCPeerConnection has any RTCRtpReceivers(s) for the given\n * MediaStreamTrack kind.\n * @param {SafariRTCPeerConnection} peerConnection\n * @param {'audio' | 'video'} kind\n * @returns {boolean}\n */\nfunction hasReceiversForTracksOfKind(peerConnection, kind) {\n return !!peerConnection.getTransceivers().find(function(transceiver) {\n return transceiver.receiver && transceiver.receiver.track && transceiver.receiver.track.kind === kind;\n });\n}\n\n/**\n * Shim an RTCDataChannel. This function mutates the RTCDataChannel.\n * @param {RTCDataChannel} dataChannel\n * @returns {RTCDataChannel}\n */\nfunction shimDataChannel(dataChannel) {\n return Object.defineProperties(dataChannel, {\n maxPacketLifeTime: {\n value: dataChannel.maxPacketLifeTime === 65535\n ? null\n : dataChannel.maxPacketLifeTime\n },\n maxRetransmits: {\n value: dataChannel.maxRetransmits === 65535\n ? null\n : dataChannel.maxRetransmits\n }\n });\n}\n\nmodule.exports = SafariRTCPeerConnection;\n","// eslint-disable-next-line no-warning-comments\n// TODO(mroberts): This should be described as implementing some\n// InsightsPublisher interface.\n'use strict';\n\n/**\n * Null Insights publisher.\n */\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar InsightsPublisher = function () {\n function InsightsPublisher() {\n _classCallCheck(this, InsightsPublisher);\n\n Object.defineProperties(this, {\n _connected: {\n writable: true,\n value: true\n }\n });\n }\n\n /**\n * Connect\n * @returns {void}\n */\n\n\n _createClass(InsightsPublisher, [{\n key: 'connect',\n value: function connect() {}\n\n /**\n * Disconnect.\n * @returns {boolean}\n */\n\n }, {\n key: 'disconnect',\n value: function disconnect() {\n if (this._connected) {\n this._connected = false;\n return true;\n }\n return false;\n }\n\n /**\n * Publish.\n * @returns {boolean}\n */\n\n }, {\n key: 'publish',\n value: function publish() {\n return this._connected;\n }\n }]);\n\n return InsightsPublisher;\n}();\n\nmodule.exports = InsightsPublisher;","'use strict';\n\n/**\n * A Promise that can be canceled with {@link CancelablePromise#cancel}.\n * @extends Promise\n*/\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar CancelablePromise = function () {\n /**\n * Construct a new {@link CancelablePromise}.\n * @param {CancelablePromise.OnCreate} onCreate\n * @param {CancelablePromise.OnCancel} onCancel\n */ /**\n * A function to be called on {@link CancelablePromise} creation\n * @typedef {function} CancelablePromise.OnCreate\n * @param {function(*)} resolve\n * @param {function(*)} reject\n * @param {function(): boolean} isCanceled\n */ /**\n * A function to be called when {@link CancelablePromise#cancel} is called\n * @typedef {function} CancelablePromise.OnCancel\n */\n function CancelablePromise(onCreate, onCancel) {\n var _this = this;\n\n _classCallCheck(this, CancelablePromise);\n\n /* istanbul ignore next */\n Object.defineProperties(this, {\n _isCancelable: {\n writable: true,\n value: true\n },\n _isCanceled: {\n writable: true,\n value: false\n },\n _onCancel: {\n value: onCancel\n }\n });\n\n Object.defineProperty(this, '_promise', {\n value: new Promise(function (resolve, reject) {\n onCreate(function (value) {\n _this._isCancelable = false;\n resolve(value);\n }, function (reason) {\n _this._isCancelable = false;\n reject(reason);\n }, function () {\n return _this._isCanceled;\n });\n })\n });\n }\n\n /**\n * Create a synchronously-rejected {@link CancelablePromise}.\n * @param {*} reason\n * @returns {Promise<*>}\n */\n\n\n _createClass(CancelablePromise, [{\n key: 'cancel',\n\n\n /**\n * Attempt to cancel the {@link CancelablePromise}.\n * @returns {this}\n */\n value: function cancel() {\n if (this._isCancelable) {\n this._isCanceled = true;\n this._onCancel();\n }\n return this;\n }\n\n /**\n * @param {function} onRejected\n * @returns {CancelablePromise}\n */\n\n }, {\n key: 'catch',\n value: function _catch() {\n var args = [].slice.call(arguments);\n var promise = this._promise;\n return new CancelablePromise(function onCreate(resolve, reject) {\n promise.catch.apply(promise, _toConsumableArray(args)).then(resolve, reject);\n }, this._onCancel);\n }\n\n /**\n * @param {?function} onResolved\n * @param {function} [onRejected]\n * @returns {CancelablePromise}\n */\n\n }, {\n key: 'then',\n value: function then() {\n var args = [].slice.call(arguments);\n var promise = this._promise;\n return new CancelablePromise(function onCreate(resolve, reject) {\n promise.then.apply(promise, _toConsumableArray(args)).then(resolve, reject);\n }, this._onCancel);\n }\n }], [{\n key: 'reject',\n value: function reject(reason) {\n return new CancelablePromise(function rejected(resolve, reject) {\n reject(reason);\n }, function onCancel() {\n // Do nothing.\n });\n }\n\n /**\n * Create a synchronously-resolved {@link CancelablePromise}.\n * @param {*|Promise<*>|Thenable<*>} result\n * @returns {CancelablePromise<*>}\n */\n\n }, {\n key: 'resolve',\n value: function resolve(result) {\n return new CancelablePromise(function resolved(resolve) {\n resolve(result);\n }, function onCancel() {\n // Do nothing.\n });\n }\n }]);\n\n return CancelablePromise;\n}();\n\nmodule.exports = CancelablePromise;","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar TrackSignaling = require('./track');\n\n/**\n * A {@link LocalTrackPublication} implementation\n * @extends TrackSignaling\n * @property {Track.ID} id\n */\n\nvar LocalTrackPublicationSignaling = function (_TrackSignaling) {\n _inherits(LocalTrackPublicationSignaling, _TrackSignaling);\n\n /**\n * Construct a {@link LocalTrackPublicationSignaling}. {@link TrackSenders}\n * are always cloned.\n * @param {DataTrackSender|MediaTrackSender} trackSender - the {@link TrackSender}\n * of the {@link LocalTrack} to be published\n * @param {string} name - the name of the {@link LocalTrack} to be published\n * @param {Track.Priority} priority - initial {@link Track.Priority}\n */\n function LocalTrackPublicationSignaling(trackSender, name, priority) {\n _classCallCheck(this, LocalTrackPublicationSignaling);\n\n trackSender = trackSender.clone();\n var enabled = trackSender.kind === 'data' ? true : trackSender.track.enabled;\n\n var _this = _possibleConstructorReturn(this, (LocalTrackPublicationSignaling.__proto__ || Object.getPrototypeOf(LocalTrackPublicationSignaling)).call(this, name, trackSender.kind, enabled, priority));\n\n _this.setTrackTransceiver(trackSender);\n Object.defineProperties(_this, {\n _updatedPriority: {\n value: priority,\n writable: true\n },\n id: {\n enumerable: true,\n value: trackSender.id\n }\n });\n return _this;\n }\n\n /**\n * The updated {@link Track.Priority} of the {@link LocalTrack}.\n * @property {Track.priority}\n */\n\n\n _createClass(LocalTrackPublicationSignaling, [{\n key: 'enable',\n\n\n /**\n * Enable (or disable) the {@link LocalTrackPublicationSignaling} if it is not\n * already enabled (or disabled). This also updates the cloned\n * {@link MediaTrackSender}'s MediaStreamTracks `enabled` state.\n * @param {boolean} [enabled=true]\n * @return {this}\n */\n value: function enable(enabled) {\n enabled = typeof enabled === 'boolean' ? enabled : true;\n this.trackTransceiver.track.enabled = enabled;\n return _get(LocalTrackPublicationSignaling.prototype.__proto__ || Object.getPrototypeOf(LocalTrackPublicationSignaling.prototype), 'enable', this).call(this, enabled);\n }\n\n /**\n * Rejects the SID's deferred promise with the given Error.\n * @param {Error} error\n * @returns {this}\n */\n\n }, {\n key: 'publishFailed',\n value: function publishFailed(error) {\n if (setError(this, error)) {\n this.emit('updated');\n }\n return this;\n }\n\n /**\n * Update the {@link Track.Priority} of the published {@link LocalTrack}.\n * @param {Track.priority} priority\n * @returns {this}\n */\n\n }, {\n key: 'setPriority',\n value: function setPriority(priority) {\n if (this._updatedPriority !== priority) {\n this._updatedPriority = priority;\n this.emit('updated');\n }\n return this;\n }\n\n /**\n * Set the published {@link LocalTrack}'s {@link Track.SID}.\n * @param {Track.SID} sid\n * @returns {this}\n */\n\n }, {\n key: 'setSid',\n value: function setSid(sid) {\n if (this._error) {\n return this;\n }\n return _get(LocalTrackPublicationSignaling.prototype.__proto__ || Object.getPrototypeOf(LocalTrackPublicationSignaling.prototype), 'setSid', this).call(this, sid);\n }\n\n /**\n * Stop the cloned {@link TrackSender}.\n * @returns {void}\n */\n\n }, {\n key: 'stop',\n value: function stop() {\n this.trackTransceiver.stop();\n }\n }, {\n key: 'updatedPriority',\n get: function get() {\n return this._updatedPriority;\n }\n }]);\n\n return LocalTrackPublicationSignaling;\n}(TrackSignaling);\n\n/**\n * @param {LocalTrackPublication} publication\n * @param {Error} error\n * @returns {boolean} updated\n */\n\n\nfunction setError(publication, error) {\n if (publication._sid !== null || publication._error) {\n return false;\n }\n publication._error = error;\n return true;\n}\n\nmodule.exports = LocalTrackPublicationSignaling;","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=style&index=0&lang=css&\"","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar EventEmitter = require('events').EventEmitter;\n\nvar _require = require('..'),\n getUserAgent = _require.getUserAgent;\n\nvar MAX_RECONNECT_ATTEMPTS = 5;\nvar RECONNECT_INTERVAL_MS = 50;\nvar WS_CLOSE_NORMAL = 1000;\n\nvar toplevel = global.window || global;\nvar WebSocket = toplevel.WebSocket ? toplevel.WebSocket : require('ws');\nvar util = require('../../util');\n\n/**\n * Publish events to the Insights gateway.\n * @extends EventEmitter\n * @emits InsightsPublisher#connected\n * @emits InsightsPublisher#disconnected\n * @emits InsightsPublisher#reconnecting\n */\n\nvar InsightsPublisher = function (_EventEmitter) {\n _inherits(InsightsPublisher, _EventEmitter);\n\n /**\n * @param {string} token - Insights gateway token\n * @param {string} sdkName - Name of the SDK using the {@link InsightsPublisher}\n * @param {string} sdkVersion - Version of the SDK using the {@link InsightsPublisher}\n * @param {string} environment - One of 'dev', 'stage' or 'prod'\n * @param {string} realm - Region identifier\n * @param {InsightsPublisherOptions} options - Override default behavior\n */\n function InsightsPublisher(token, sdkName, sdkVersion, environment, realm, options) {\n _classCallCheck(this, InsightsPublisher);\n\n var _this = _possibleConstructorReturn(this, (InsightsPublisher.__proto__ || Object.getPrototypeOf(InsightsPublisher)).call(this));\n\n options = Object.assign({\n gateway: createGateway(environment, realm) + '/v1/VideoEvents',\n maxReconnectAttempts: MAX_RECONNECT_ATTEMPTS,\n reconnectIntervalMs: RECONNECT_INTERVAL_MS,\n userAgent: getUserAgent(),\n WebSocket: WebSocket\n }, options);\n\n Object.defineProperties(_this, {\n _connectTimestamp: {\n value: 0,\n writable: true\n },\n _eventQueue: {\n value: []\n },\n _readyToConnect: {\n value: util.defer()\n },\n _reconnectAttemptsLeft: {\n value: options.maxReconnectAttempts,\n writable: true\n },\n _ws: {\n value: null,\n writable: true\n },\n _WebSocket: {\n value: options.WebSocket\n }\n });\n\n _this._readyToConnect.promise.then(function (_ref) {\n var roomSid = _ref.roomSid,\n participantSid = _ref.participantSid;\n\n var self = _this;\n _this.on('disconnected', function maybeReconnect(error) {\n self._session = null;\n if (error && self._reconnectAttemptsLeft > 0) {\n self.emit('reconnecting');\n reconnect(self, token, sdkName, sdkVersion, roomSid, participantSid, options);\n return;\n }\n self.removeListener('disconnected', maybeReconnect);\n });\n connect(_this, token, sdkName, sdkVersion, roomSid, participantSid, options);\n }).catch(function () {\n // ignore failures to connect\n });\n return _this;\n }\n\n /**\n * Start connecting to the Insights gateway.\n * @param {string} roomSid\n * @param {string} participantSid\n * @returns {void}\n */\n\n\n _createClass(InsightsPublisher, [{\n key: 'connect',\n value: function connect(roomSid, participantSid) {\n this._readyToConnect.resolve({ roomSid: roomSid, participantSid: participantSid });\n }\n\n /**\n * Publish an event to the Insights gateway.\n * @private\n * @param {*} event\n */\n\n }, {\n key: '_publish',\n value: function _publish(event) {\n event.session = this._session;\n this._ws.send(JSON.stringify(event));\n }\n\n /**\n * Disconnect from the Insights gateway.\n * @returns {boolean} true if called when connecting/open, false if not\n */\n\n }, {\n key: 'disconnect',\n value: function disconnect() {\n if (this._ws === null || this._ws.readyState === this._WebSocket.CLOSING || this._ws.readyState === this._WebSocket.CLOSED) {\n return false;\n }\n\n try {\n this._ws.close();\n } catch (error) {\n // Do nothing.\n }\n this.emit('disconnected');\n\n return true;\n }\n\n /**\n * Publish (or queue, if not connected) an event to the Insights gateway.\n * @param {string} groupName - Event group name\n * @param {string} eventName - Event name\n * @param {object} payload - Event payload\n * @returns {boolean} true if queued or published, false if disconnect() called\n */\n\n }, {\n key: 'publish',\n value: function publish(groupName, eventName, payload) {\n if (this._ws !== null && (this._ws.readyState === this._WebSocket.CLOSING || this._ws.readyState === this._WebSocket.CLOSED)) {\n return false;\n }\n\n var publishOrEnqueue = typeof this._session === 'string' ? this._publish.bind(this) : this._eventQueue.push.bind(this._eventQueue);\n\n publishOrEnqueue({\n group: groupName,\n name: eventName,\n payload: payload,\n timestamp: Date.now(),\n type: 'event',\n version: 1\n });\n\n return true;\n }\n }]);\n\n return InsightsPublisher;\n}(EventEmitter);\n\n/**\n * Start connecting to the Insights gateway.\n * @private\n * @param {InsightsPublisher} publisher\n * @param {string} name\n * @param {string} token\n * @param {string} sdkName\n * @param {string} sdkVersion\n * @param {string} roomSid\n * @param {string} participantSid\n * @param {InsightsPublisherOptions} options\n */\n\n\nfunction connect(publisher, token, sdkName, sdkVersion, roomSid, participantSid, options) {\n publisher._connectTimestamp = Date.now();\n publisher._reconnectAttemptsLeft--;\n publisher._ws = new options.WebSocket(options.gateway);\n var ws = publisher._ws;\n\n ws.addEventListener('close', function (event) {\n if (event.code === WS_CLOSE_NORMAL) {\n publisher.emit('disconnected');\n return;\n }\n publisher.emit('disconnected', new Error('WebSocket Error ' + event.code + ': ' + event.reason));\n });\n\n ws.addEventListener('message', function (message) {\n handleConnectResponse(publisher, JSON.parse(message.data), options);\n });\n\n ws.addEventListener('open', function () {\n var connectRequest = {\n type: 'connect',\n token: token,\n version: 1\n };\n\n connectRequest.publisher = {\n name: sdkName,\n sdkVersion: sdkVersion,\n userAgent: options.userAgent,\n participantSid: participantSid,\n roomSid: roomSid\n };\n\n ws.send(JSON.stringify(connectRequest));\n });\n}\n\n/**\n * Create the Insights Websocket gateway URL.\n * @param {string} environment\n * @param {string} realm\n * @returns {string}\n */\nfunction createGateway(environment, realm) {\n return environment === 'prod' ? 'wss://sdkgw.' + realm + '.twilio.com' : 'wss://sdkgw.' + environment + '-' + realm + '.twilio.com';\n}\n\n/**\n * Handle connect response from the Insights gateway.\n * @param {InsightsPublisher} publisher\n * @param {*} response\n * @param {InsightsPublisherOptions} options\n */\nfunction handleConnectResponse(publisher, response, options) {\n switch (response.type) {\n case 'connected':\n publisher._session = response.session;\n publisher._reconnectAttemptsLeft = options.maxReconnectAttempts;\n publisher._eventQueue.splice(0).forEach(publisher._publish, publisher);\n publisher.emit('connected');\n break;\n case 'error':\n publisher._ws.close();\n publisher.emit('disconnected', new Error(response.message));\n break;\n }\n}\n\n/**\n * Start re-connecting to the Insights gateway with an appropriate delay based\n * on InsightsPublisherOptions#reconnectIntervalMs.\n * @private\n * @param {InsightsPublisher} publisher\n * @param {string} token\n * @param {string} sdkName\n * @param {string} sdkVersion\n * @param {string} roomSid\n * @param {string} participantSid\n * @param {InsightsPublisherOptions} options\n */\nfunction reconnect(publisher, token, sdkName, sdkVersion, roomSid, participantSid, options) {\n var connectInterval = Date.now() - publisher._connectTimestamp;\n var timeToWait = options.reconnectIntervalMs - connectInterval;\n\n if (timeToWait > 0) {\n setTimeout(function () {\n connect(publisher, token, sdkName, sdkVersion, roomSid, participantSid, options);\n }, timeToWait);\n return;\n }\n\n connect(publisher, token, sdkName, sdkVersion, roomSid, participantSid, options);\n}\n\n/**\n * The {@link InsightsPublisher} is connected to the gateway.\n * @event InsightsPublisher#connected\n */\n\n/**\n * The {@link InsightsPublisher} is disconnected from the gateway.\n * @event InsightsPublisher#disconnected\n * @param {Error} [error] - Optional error if disconnected unintentionally\n */\n\n/**\n * The {@link InsightsPublisher} is re-connecting to the gateway.\n * @event InsightsPublisher#reconnecting\n */\n\n/**\n * {@link InsightsPublisher} options.\n * @typedef {object} InsightsPublisherOptions\n * @property {string} [gateway=sdkgw.{environment}-{realm}.twilio.com] - Insights WebSocket gateway url\n * @property {number} [maxReconnectAttempts=5] - Max re-connect attempts\n * @property {number} [reconnectIntervalMs=50] - Re-connect interval in ms\n */\n\nmodule.exports = InsightsPublisher;","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar EventEmitter = require('../../eventemitter');\n\nvar _require = require('../../util'),\n buildLogLevels = _require.buildLogLevels,\n valueToJSON = _require.valueToJSON;\n\nvar _require2 = require('../../util/constants'),\n DEFAULT_LOG_LEVEL = _require2.DEFAULT_LOG_LEVEL;\n\nvar Log = require('../../util/log');\nvar nInstances = 0;\n\n/**\n * A {@link TrackPublication} represents a {@link Track} that\n * has been published to a {@link Room}.\n * @property {string} trackName - the published {@link Track}'s name\n * @property {Track.SID} trackSid - SID assigned to the published {@link Track}\n * @emits TrackPublication#trackDisabled\n * @emits TrackPublication#trackEnabled\n */\n\nvar TrackPublication = function (_EventEmitter) {\n _inherits(TrackPublication, _EventEmitter);\n\n /**\n * Construct a {@link TrackPublication}.\n * @param {string} trackName - the published {@link Track}'s name\n * @param {Track.SID} trackSid - SID assigned to the {@link Track}\n * @param {TrackPublicationOptions} options - {@link TrackPublication} options\n */\n function TrackPublication(trackName, trackSid, options) {\n _classCallCheck(this, TrackPublication);\n\n var _this = _possibleConstructorReturn(this, (TrackPublication.__proto__ || Object.getPrototypeOf(TrackPublication)).call(this));\n\n options = Object.assign({\n logLevel: DEFAULT_LOG_LEVEL\n }, options);\n\n var logLevels = buildLogLevels(options.logLevel);\n\n Object.defineProperties(_this, {\n _instanceId: {\n value: nInstances++\n },\n _log: {\n value: options.log || new Log('default', _this, logLevels)\n },\n trackName: {\n enumerable: true,\n value: trackName\n },\n trackSid: {\n enumerable: true,\n value: trackSid\n }\n });\n return _this;\n }\n\n _createClass(TrackPublication, [{\n key: 'toJSON',\n value: function toJSON() {\n return valueToJSON(this);\n }\n }, {\n key: 'toString',\n value: function toString() {\n return '[TrackPublication #' + this._instanceId + ': ' + this.trackSid + ']';\n }\n }]);\n\n return TrackPublication;\n}(EventEmitter);\n\n/**\n * The published {@link Track} was disabled.\n * @event TrackPublication#trackDisabled\n */\n\n/**\n * The published {@link Track} was enabled.\n * @event TrackPublication#trackEnabled\n */\n\n/**\n * A {@link LocalAudioTrackPublication} or a {@link RemoteAudioTrackPublication}.\n * @typedef {LocalAudioTrackPublication|RemoteAudioTrackPublication} AudioTrackPublication\n */\n\n/**\n * A {@link LocalDataTrackPublication} or a {@link RemoteDataTrackPublication}.\n * @typedef {LocalDataTrackPublication|RemoteDataTrackPublication} DataTrackPublication\n */\n\n/**\n * A {@link LocalVideoTrackPublication} or a {@link RemoteVideoTrackPublication}.\n * @typedef {LocalVideoTrackPublication|RemoteVideoTrackPublication} VideoTrackPublication\n */\n\n/**\n * {@link TrackPublication} options\n * @typedef {object} TrackPublicationOptions\n * @property {LogLevel|LogLevels} logLevel - Log level for 'media' modules\n */\n\nmodule.exports = TrackPublication;","'use strict';\n\n/**\n * An {@link IdentityTrackMatcher} matches RTCTrackEvents with their respective\n * MediaStreamTrack IDs.\n */\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar IdentityTrackMatcher = function () {\n function IdentityTrackMatcher() {\n _classCallCheck(this, IdentityTrackMatcher);\n }\n\n _createClass(IdentityTrackMatcher, [{\n key: 'match',\n\n /**\n * Match a given MediaStreamTrack with its ID.\n * @param {RTCTrackEvent} event\n * @returns {Track.ID}\n */\n value: function match(event) {\n return event.track.id;\n }\n\n /**\n * Update the {@link IdentityTrackMatcher} with a new SDP.\n * @param {string} sdp\n */\n\n }, {\n key: 'update',\n value: function update() {}\n }]);\n\n return IdentityTrackMatcher;\n}();\n\nmodule.exports = IdentityTrackMatcher;","/* globals RTCPeerConnection, webkitRTCPeerConnection, mozRTCPeerConnection, chrome, navigator */\n'use strict';\n\nvar _require = require('@twilio/webrtc/lib/util'),\n guessBrowser = _require.guessBrowser;\n\n/**\n * Check whether PeerConnection API is supported.\n * @returns {boolean}\n */\n\n\nfunction isRTCPeerConnectionSupported() {\n return typeof RTCPeerConnection !== 'undefined' || typeof webkitRTCPeerConnection !== 'undefined' || typeof mozRTCPeerConnection !== 'undefined';\n}\n\n/**\n * Check whether GetUserMedia API is supported.\n * @returns {boolean}\n */\nfunction isGetUserMediaSupported() {\n return !!(navigator.mediaDevices && navigator.mediaDevices.getUserMedia) || !!navigator.getUserMedia || !!navigator.webkitGetUserMedia || !!navigator.mozGetUserMedia;\n}\n\n/**\n * Check whether the current browser is non-Chromium Edge.\n * @param {string} browser\n * @returns {boolean}\n */\nfunction isNonChromiumEdge(browser) {\n return browser === 'chrome' && /Edge/.test(navigator.userAgent) && (typeof chrome === 'undefined' || typeof chrome.runtime === 'undefined');\n}\n\n/**\n * Check if the current environment is supported by the SDK.\n * @returns {boolean}\n */\nfunction isSupported() {\n var browser = guessBrowser();\n return !!browser && !isNonChromiumEdge(browser) && isGetUserMediaSupported() && isRTCPeerConnectionSupported();\n}\n\nmodule.exports = isSupported;","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar TrackTransceiver = require('../../transceiver');\n\n/**\n * A {@link MediaTrackTransceiver} represents either one or more local\n * RTCRtpSenders, or a single RTCRtpReceiver.\n * @extends TrackTransceiver\n * @property {MediaStreamTrack} track\n */\n\nvar MediaTrackTransceiver = function (_TrackTransceiver) {\n _inherits(MediaTrackTransceiver, _TrackTransceiver);\n\n /**\n * Construct a {@link MediaTrackTransceiver}.\n * @param {Track.ID} id - The MediaStreamTrack ID signaled through RSP/SDP\n * @param {MediaStreamTrack} mediaStreamTrack\n */\n function MediaTrackTransceiver(id, mediaStreamTrack) {\n _classCallCheck(this, MediaTrackTransceiver);\n\n var _this = _possibleConstructorReturn(this, (MediaTrackTransceiver.__proto__ || Object.getPrototypeOf(MediaTrackTransceiver)).call(this, id, mediaStreamTrack.kind));\n\n Object.defineProperties(_this, {\n readyState: {\n enumerable: true,\n get: function get() {\n return mediaStreamTrack.readyState;\n }\n },\n track: {\n enumerable: true,\n value: mediaStreamTrack\n }\n });\n return _this;\n }\n\n _createClass(MediaTrackTransceiver, [{\n key: 'stop',\n value: function stop() {\n this.track.stop();\n _get(MediaTrackTransceiver.prototype.__proto__ || Object.getPrototypeOf(MediaTrackTransceiver.prototype), 'stop', this).call(this);\n }\n }]);\n\n return MediaTrackTransceiver;\n}(TrackTransceiver);\n\nmodule.exports = MediaTrackTransceiver;","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Filter = require('../../util/filter');\n\n/**\n * An {@link IceBox} stores trickled ICE candidates. Candidates added to the\n * {@link IceBox} via {@link IceBox#update} are compared against previously\n * trickled candidates and only new candidates will be returned (assuming they\n * match the current ICE username fragment set by {@link IceBox#setUfrag}).\n * @property {?string} ufrag\n */\n\nvar IceBox = function () {\n /**\n * Construct an {@link IceBox}.\n */\n function IceBox() {\n _classCallCheck(this, IceBox);\n\n Object.defineProperties(this, {\n _filter: {\n value: new Filter({\n getKey: function getKey(iceState) {\n return iceState.ufrag;\n },\n isLessThanOrEqualTo: function isLessThanOrEqualTo(a, b) {\n return a.revision <= b.revision;\n }\n })\n },\n _ufrag: {\n writable: true,\n value: null\n },\n ufrag: {\n enumerable: true,\n get: function get() {\n return this._ufrag;\n }\n }\n });\n }\n\n /**\n * Set the ICE username fragment on the {@link IceBox}. This method returns any\n * ICE candidates associated with the username fragment.\n * @param {string} ufrag\n * @returns {Array}\n */\n\n\n _createClass(IceBox, [{\n key: 'setUfrag',\n value: function setUfrag(ufrag) {\n this._ufrag = ufrag;\n var ice = this._filter.toMap().get(ufrag);\n return ice ? ice.candidates : [];\n }\n\n /**\n * Update the {@link IceBox}. This method returns any new ICE candidates\n * associated with the current username fragment.\n * @param {object} iceState\n * @returns {Array}\n */\n\n }, {\n key: 'update',\n value: function update(iceState) {\n // NOTE(mroberts): The Server sometimes does not set the candidates property.\n iceState.candidates = iceState.candidates || [];\n var oldIceState = this._filter.toMap().get(iceState.ufrag);\n var oldCandidates = oldIceState ? oldIceState.candidates : [];\n return this._filter.update(iceState) && this._ufrag === iceState.ufrag ? iceState.candidates.slice(oldCandidates.length) : [];\n }\n }]);\n\n return IceBox;\n}();\n\nmodule.exports = IceBox;","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar mixinLocalMediaTrack = require('./localmediatrack');\nvar VideoTrack = require('./videotrack');\n\nvar LocalMediaVideoTrack = mixinLocalMediaTrack(VideoTrack);\n\n/**\n * A {@link LocalVideoTrack} is a {@link VideoTrack} representing video that\n * your {@link LocalParticipant} can publish to a {@link Room}. It can be\n * enabled and disabled with {@link LocalVideoTrack#enable} and\n * {@link LocalVideoTrack#disable} or stopped completely with\n * {@link LocalVideoTrack#stop}.\n * @extends VideoTrack\n * @property {Track.ID} id - The {@link LocalVideoTrack}'s ID\n * @property {boolean} isStopped - Whether or not the {@link LocalVideoTrack} is\n * stopped\n * @emits LocalVideoTrack#disabled\n * @emits LocalVideoTrack#enabled\n * @emits LocalVideoTrack#started\n * @emits LocalVideoTrack#stopped\n */\n\nvar LocalVideoTrack = function (_LocalMediaVideoTrack) {\n _inherits(LocalVideoTrack, _LocalMediaVideoTrack);\n\n /**\n * Construct a {@link LocalVideoTrack} from a MediaStreamTrack.\n * @param {MediaStreamTrack} mediaStreamTrack - The underlying MediaStreamTrack\n * @param {LocalTrackOptions} [options] - {@link LocalTrack} options\n */\n function LocalVideoTrack(mediaStreamTrack, options) {\n _classCallCheck(this, LocalVideoTrack);\n\n return _possibleConstructorReturn(this, (LocalVideoTrack.__proto__ || Object.getPrototypeOf(LocalVideoTrack)).call(this, mediaStreamTrack, options));\n }\n\n _createClass(LocalVideoTrack, [{\n key: 'toString',\n value: function toString() {\n return '[LocalVideoTrack #' + this._instanceId + ': ' + this.id + ']';\n }\n\n /**\n * @private\n */\n\n }, {\n key: '_end',\n value: function _end() {\n return _get(LocalVideoTrack.prototype.__proto__ || Object.getPrototypeOf(LocalVideoTrack.prototype), '_end', this).apply(this, arguments);\n }\n\n /**\n * Disable the {@link LocalVideoTrack}. This is effectively \"pause\".\n * @returns {this}\n * @fires VideoTrack#disabled\n */\n\n }, {\n key: 'disable',\n value: function disable() {\n return _get(LocalVideoTrack.prototype.__proto__ || Object.getPrototypeOf(LocalVideoTrack.prototype), 'disable', this).apply(this, arguments);\n }\n\n /**\n * Enable the {@link LocalVideoTrack}. This is effectively \"unpause\".\n * @returns {this}\n * @fires VideoTrack#enabled\n */ /**\n * Enable or disable the {@link LocalVideoTrack}. This is effectively \"unpause\"\n * or \"pause\".\n * @param {boolean} [enabled] - Specify false to pause the\n * {@link LocalVideoTrack}\n * @returns {this}\n * @fires VideoTrack#disabled\n * @fires VideoTrack#enabled\n */\n\n }, {\n key: 'enable',\n value: function enable() {\n return _get(LocalVideoTrack.prototype.__proto__ || Object.getPrototypeOf(LocalVideoTrack.prototype), 'enable', this).apply(this, arguments);\n }\n\n /**\n * Calls stop on the underlying MediaStreamTrack. If you choose to stop a\n * {@link LocalVideoTrack}, you should unpublish it after stopping.\n * @returns {this}\n * @fires LocalVideoTrack#stopped\n */\n\n }, {\n key: 'stop',\n value: function stop() {\n return _get(LocalVideoTrack.prototype.__proto__ || Object.getPrototypeOf(LocalVideoTrack.prototype), 'stop', this).apply(this, arguments);\n }\n }]);\n\n return LocalVideoTrack;\n}(LocalMediaVideoTrack);\n\n/**\n * The {@link LocalVideoTrack} was disabled, i.e. \"muted\".\n * @param {LocalVideoTrack} track - The {@link LocalVideoTrack} that was\n * disabled\n * @event LocalVideoTrack#disabled\n */\n\n/**\n * The {@link LocalVideoTrack} was enabled, i.e. \"unmuted\".\n * @param {LocalVideoTrack} track - The {@link LocalVideoTrack} that was enabled\n * @event LocalVideoTrack#enabled\n */\n\n/**\n * The {@link LocalVideoTrack} started. This means there is enough video data\n * to begin playback.\n * @param {LocalVideoTrack} track - The {@link LocalVideoTrack} that started\n * @event LocalVideoTrack#started\n */\n\n/**\n * The {@link LocalVideoTrack} stopped, either because\n * {@link LocalVideoTrack#stop} was called or because the underlying\n * MediaStreamTrack ended).\n * @param {LocalVideoTrack} track - The {@link LocalVideoTrack} that stopped\n * @event LocalVideoTrack#stopped\n */\n\nmodule.exports = LocalVideoTrack;","module.exports = WebSocket;\n","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar defaultCreateCancelableRoomSignalingPromise = require('./cancelableroomsignalingpromise');\nvar LocalParticipantV2 = require('./localparticipant');\nvar Signaling = require('../');\n\n/**\n * {@link SignalingV2} implements version 2 of our signaling protocol.\n * @extends Signaling\n */\n\nvar SignalingV2 = function (_Signaling) {\n _inherits(SignalingV2, _Signaling);\n\n /**\n * Construct {@link SignalingV2}.\n * @param {string} wsServer\n * @param {?object} [options={}]\n */\n function SignalingV2(wsServer, options) {\n _classCallCheck(this, SignalingV2);\n\n /* eslint new-cap:0 */\n options = Object.assign({\n createCancelableRoomSignalingPromise: defaultCreateCancelableRoomSignalingPromise\n }, options);\n\n var _this = _possibleConstructorReturn(this, (SignalingV2.__proto__ || Object.getPrototypeOf(SignalingV2)).call(this));\n\n Object.defineProperties(_this, {\n _createCancelableRoomSignalingPromise: {\n value: options.createCancelableRoomSignalingPromise\n },\n _options: {\n value: options\n },\n _wsServer: {\n value: wsServer\n }\n });\n return _this;\n }\n\n /**\n * @private\n */\n\n\n _createClass(SignalingV2, [{\n key: '_connect',\n value: function _connect(localParticipant, token, iceServerSource, encodingParameters, preferredCodecs, options) {\n options = Object.assign({}, this._options, options);\n return this._createCancelableRoomSignalingPromise.bind(null, token, this._wsServer, localParticipant, iceServerSource, encodingParameters, preferredCodecs, options);\n }\n }, {\n key: 'createLocalParticipantSignaling',\n value: function createLocalParticipantSignaling(encodingParameters, networkQualityConfiguration) {\n return new LocalParticipantV2(encodingParameters, networkQualityConfiguration);\n }\n }]);\n\n return SignalingV2;\n}(Signaling);\n\nmodule.exports = SignalingV2;","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar EventEmitter = require('events').EventEmitter;\n\n/**\n * Represents recording state\n * @extends EventEmitter\n * @property {?boolean} isEnabled\n */\n\nvar RecordingSignaling = function (_EventEmitter) {\n _inherits(RecordingSignaling, _EventEmitter);\n\n /**\n * Construct a {@link RecordingSignaling}.\n */\n function RecordingSignaling() {\n _classCallCheck(this, RecordingSignaling);\n\n var _this = _possibleConstructorReturn(this, (RecordingSignaling.__proto__ || Object.getPrototypeOf(RecordingSignaling)).call(this));\n\n Object.defineProperties(_this, {\n _isEnabled: {\n value: null,\n writable: true\n },\n isEnabled: {\n enumerable: true,\n get: function get() {\n return this._isEnabled;\n }\n }\n });\n return _this;\n }\n\n /**\n * Disable the {@link RecordingSignaling} if it is not already disabled.\n * @return {this}\n */\n\n\n _createClass(RecordingSignaling, [{\n key: 'disable',\n value: function disable() {\n return this.enable(false);\n }\n\n /**\n * Enable (or disable) the {@link RecordingSignaling} if it is not already enabled\n * (or disabled).\n * @param {boolean} [enabled=true]\n * @return {this}\n */\n\n }, {\n key: 'enable',\n value: function enable(enabled) {\n enabled = typeof enabled === 'boolean' ? enabled : true;\n if (this.isEnabled !== enabled) {\n this._isEnabled = enabled;\n this.emit('updated');\n }\n return this;\n }\n }]);\n\n return RecordingSignaling;\n}(EventEmitter);\n\n/**\n * Emitted whenever the {@link RecordingSignaling} is updated\n * @event RecordingSignaling#updated\n */\n\nmodule.exports = RecordingSignaling;","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar MediaTrack = require('./mediatrack');\n\n/**\n * An {@link AudioTrack} is a {@link Track} representing audio.\n * @extends Track\n * @property {boolean} isStarted - Whether or not the {@link AudioTrack} has\n * started; if the {@link AudioTrack} started, there is enough audio data to\n * begin playback\n * @property {boolean} isEnabled - Whether or not the {@link AudioTrack} is\n * enabled; if the {@link AudioTrack} is not enabled, it is \"muted\"\n * @property {Track.Kind} kind - \"audio\"\n * @property {MediaStreamTrack} mediaStreamTrack - An audio MediaStreamTrack\n * @emits AudioTrack#disabled\n * @emits AudioTrack#enabled\n * @emits AudioTrack#started\n */\n\nvar AudioTrack = function (_MediaTrack) {\n _inherits(AudioTrack, _MediaTrack);\n\n /**\n * Construct an {@link AudioTrack}.\n * @param {MediaTrackTransceiver} mediaTrackTransceiver\n * @param {{log: Log}} options\n */\n function AudioTrack(mediaTrackTransceiver, options) {\n _classCallCheck(this, AudioTrack);\n\n return _possibleConstructorReturn(this, (AudioTrack.__proto__ || Object.getPrototypeOf(AudioTrack)).call(this, mediaTrackTransceiver, options));\n }\n\n /**\n * @private\n */\n\n\n _createClass(AudioTrack, [{\n key: '_start',\n value: function _start() {\n _get(AudioTrack.prototype.__proto__ || Object.getPrototypeOf(AudioTrack.prototype), '_start', this).call(this);\n if (this._dummyEl) {\n this._detachElement(this._dummyEl);\n }\n }\n\n /**\n * Create an HTMLAudioElement and attach the {@link AudioTrack} to it.\n *\n * The HTMLAudioElement's srcObject will be set to a new\n * MediaStream containing the {@link AudioTrack}'s MediaStreamTrack.\n *\n * @returns {HTMLAudioElement} audioElement\n * @example\n * const Video = require('twilio-video');\n *\n * Video.createLocalAudioTrack().then(function(audioTrack) {\n * const audioElement = audioTrack.attach();\n * document.body.appendChild(audioElement);\n * });\n */ /**\n * Attach the {@link AudioTrack} to an existing HTMLMediaElement. The\n * HTMLMediaElement could be an HTMLAudioElement or an HTMLVideoElement.\n *\n * If the HTMLMediaElement's srcObject is not set to a MediaStream,\n * this method sets it to a new MediaStream containing the {@link AudioTrack}'s\n * MediaStreamTrack; otherwise, it adds the {@link MediaTrack}'s\n * MediaStreamTrack to the existing MediaStream. Finally, if there are any other\n * MediaStreamTracks of the same kind on the MediaStream, this method removes\n * them.\n *\n * @param {HTMLMediaElement} mediaElement - The HTMLMediaElement to attach to\n * @returns {HTMLMediaElement} mediaElement\n * @example\n * const Video = require('twilio-video');\n *\n * const videoElement = document.createElement('video');\n * document.body.appendChild(videoElement);\n *\n * Video.createLocalAudioTrack().then(function(audioTrack) {\n * audioTrack.attach(videoElement);\n * });\n */ /**\n * Attach the {@link AudioTrack} to an HTMLMediaElement selected by\n * document.querySelector. The HTMLMediaElement could be an\n * HTMLAudioElement or an HTMLVideoElement.\n *\n * If the HTMLMediaElement's srcObject is not set to a MediaStream,\n * this method sets it to a new MediaStream containing the {@link AudioTrack}'s\n * MediaStreamTrack; otherwise, it adds the {@link AudioTrack}'s\n * MediaStreamTrack to the existing MediaStream. Finally, if there are any other\n * MediaStreamTracks of the same kind on the MediaStream, this method removes\n * them.\n *\n * @param {string} selector - A query selector for the HTMLMediaElement to\n * attach to\n * @returns {HTMLMediaElement} mediaElement\n * @example\n * const Video = require('twilio-video');\n *\n * const videoElement = document.createElement('video');\n * videoElement.id = 'my-video-element';\n * document.body.appendChild(videoElement);\n *\n * Video.createLocalAudioTrack().then(function(track) {\n * track.attach('#my-video-element');\n * });\n */\n\n }, {\n key: 'attach',\n value: function attach() {\n return _get(AudioTrack.prototype.__proto__ || Object.getPrototypeOf(AudioTrack.prototype), 'attach', this).apply(this, arguments);\n }\n\n /**\n * Detach the {@link AudioTrack} from all previously attached HTMLMediaElements.\n * @returns {Array} mediaElements\n * @example\n * const mediaElements = audioTrack.detach();\n * mediaElements.forEach(mediaElement => mediaElement.remove());\n */ /**\n * Detach the {@link AudioTrack} from a previously attached HTMLMediaElement.\n * @param {HTMLMediaElement} mediaElement - One of the HTMLMediaElements to\n * which the {@link AudioTrack} is attached\n * @returns {HTMLMediaElement} mediaElement\n * @example\n * const videoElement = document.getElementById('my-video-element');\n * audioTrack.detach(videoElement).remove();\n */ /**\n * Detach the {@link AudioTrack} from a previously attached HTMLMediaElement\n * specified by document.querySelector.\n * @param {string} selector - The query selector of HTMLMediaElement to which\n * the {@link AudioTrack} is attached\n * @returns {HTMLMediaElement} mediaElement\n * @example\n * audioTrack.detach('#my-video-element').remove();\n */\n\n }, {\n key: 'detach',\n value: function detach() {\n return _get(AudioTrack.prototype.__proto__ || Object.getPrototypeOf(AudioTrack.prototype), 'detach', this).apply(this, arguments);\n }\n }]);\n\n return AudioTrack;\n}(MediaTrack);\n\n/**\n * The {@link AudioTrack} was disabled, i.e. \"muted\".\n * @param {AudioTrack} track - The {@link AudioTrack} that was disabled\n * @event AudioTrack#disabled\n */\n\n/**\n * The {@link AudioTrack} was enabled, i.e. \"unmuted\".\n * @param {AudioTrack} track - The {@link AudioTrack} that was enabled\n * @event AudioTrack#enabled\n */\n\n/**\n * The {@link AudioTrack} started. This means there is enough audio data to\n * begin playback.\n * @param {AudioTrack} track - The {@link AudioTrack} that started\n * @event AudioTrack#started\n */\n\nmodule.exports = AudioTrack;","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar RemoteTrackPublicationSignaling = require('../remotetrackpublication');\n\n/**\n * @extends RemoteTrackPublicationSignaling\n */\n\nvar RemoteTrackPublicationV2 = function (_RemoteTrackPublicati) {\n _inherits(RemoteTrackPublicationV2, _RemoteTrackPublicati);\n\n /**\n * Construct a {@link RemoteTrackPublicationV2}.\n * @param {RemoteTrackPublicationV2#Representation} track\n */\n function RemoteTrackPublicationV2(track) {\n _classCallCheck(this, RemoteTrackPublicationV2);\n\n return _possibleConstructorReturn(this, (RemoteTrackPublicationV2.__proto__ || Object.getPrototypeOf(RemoteTrackPublicationV2)).call(this, track.sid, track.name, track.kind, track.enabled, track.priority));\n }\n\n /**\n * Compare the {@link RemoteTrackPublicationV2} to a\n * {@link RemoteTrackPublicationV2#Representation} of itself and perform any\n * updates necessary.\n * @param {RemoteTrackPublicationV2#Representation} track\n * @returns {this}\n * @fires TrackSignaling#updated\n */\n\n\n _createClass(RemoteTrackPublicationV2, [{\n key: 'update',\n value: function update(track) {\n this.enable(track.enabled);\n this.setPriority(track.priority);\n return this;\n }\n }]);\n\n return RemoteTrackPublicationV2;\n}(RemoteTrackPublicationSignaling);\n\n/**\n * The Room Signaling Protocol (RSP) representation of a {@link RemoteTrackPublicationV2}.\n * @typedef {LocalTrackPublicationV2#Representation} RemoteTrackPublicationV2#Representation\n * @property {boolean} subscribed\n */\n\nmodule.exports = RemoteTrackPublicationV2;","'use strict';\n\nmodule.exports.DEFAULT_ENVIRONMENT = 'prod';\nmodule.exports.DEFAULT_REALM = 'us1';\nmodule.exports.DEFAULT_REGION = 'gll';\nmodule.exports.DEFAULT_LOG_LEVEL = 'warn';\nmodule.exports.WS_SERVER = function (environment, region) {\n region = region === 'gll' ? 'global' : encodeURIComponent(region);\n return environment === 'prod' ? 'wss://' + region + '.vss.twilio.com/signaling' : 'wss://' + region + '.vss.' + environment + '.twilio.com/signaling';\n};\nmodule.exports.ECS_SERVER = function (environment, realm) {\n switch (environment) {\n case 'prod':\n return 'https://ecs.' + realm + '.twilio.com';\n default:\n return 'https://ecs.' + environment + '-' + realm + '.twilio.com';\n }\n};\nmodule.exports.ECS_TIMEOUT = 60;\nmodule.exports.PUBLISH_MAX_ATTEMPTS = 5;\nmodule.exports.PUBLISH_BACKOFF_JITTER = 10;\nmodule.exports.PUBLISH_BACKOFF_MS = 20;\n\nmodule.exports.ICE_SERVERS_TIMEOUT_MS = 3000;\nmodule.exports.ICE_SERVERS_DEFAULT_TTL = 3600;\nmodule.exports.DEFAULT_ICE_SERVERS = function (environment) {\n switch (environment) {\n case 'prod':\n return [{ urls: 'stun:global.stun.twilio.com:3478?transport=udp' }];\n default:\n return [{ urls: 'stun:global.stun.' + environment + '.twilio.com:3478?transport=udp' }];\n }\n};\n\n// Headers\n/* eslint key-spacing:0 */\nmodule.exports.headers = {\n X_TWILIO_ACCESSTOKEN: 'X-Twilio-AccessToken'\n};\n\n/**\n * Returns the appropriate indefinite article (\"a\" | \"an\").\n * @param {string} word - The word which determines whether \"a\" | \"an\" is returned\n * @returns {string} \"a\" if word's first letter is a vowel, \"an\" otherwise\n */\nfunction article(word) {\n // NOTE(mmalavalli): This will not be accurate for words like \"hour\",\n // which have consonants as their first character, but are pronounced like\n // vowels. We can address this issue if the need arises.\n return ['a', 'e', 'i', 'o', 'u'].includes(word.toLowerCase()[0]) ? 'an' : 'a';\n}\n\nmodule.exports.typeErrors = {\n INVALID_TYPE: function INVALID_TYPE(name, type) {\n return new TypeError(name + ' must be ' + article(type) + ' ' + type);\n },\n INVALID_VALUE: function INVALID_VALUE(name, values) {\n return new RangeError(name + ' must be one of ' + values.join(', '));\n },\n REQUIRED_ARGUMENT: function REQUIRED_ARGUMENT(name) {\n return new TypeError(name + ' must be specified');\n }\n};\n\nmodule.exports.DEFAULT_ICE_GATHERING_TIMEOUT_MS = 15000;\nmodule.exports.DEFAULT_SESSION_TIMEOUT_SEC = 30;\n\nmodule.exports.DEFAULT_NQ_LEVEL_LOCAL = 1;\nmodule.exports.DEFAULT_NQ_LEVEL_REMOTE = 0;\nmodule.exports.MAX_NQ_LEVEL = 3;\n\nmodule.exports.ICE_ACTIVITY_CHECK_PERIOD_MS = 1000;\nmodule.exports.ICE_INACTIVITY_THRESHOLD_MS = 3000;\n\nmodule.exports.iceRestartBackoffConfig = {\n factor: 1.1,\n initialDelay: 1,\n maxDelay: module.exports.DEFAULT_SESSION_TIMEOUT_SEC * 1000,\n randomisationFactor: 0.5\n};\n\nmodule.exports.reconnectBackoffConfig = {\n factor: 1.5,\n initialDelay: 80,\n randomisationFactor: 0.5\n};\n\nmodule.exports.subscriptionMode = {\n MODE_COLLABORATION: 'collaboration',\n MODE_GRID: 'grid',\n MODE_PRESENTATION: 'presentation'\n};\n\nmodule.exports.trackSwitchOffMode = {\n MODE_DISABLED: 'disabled',\n MODE_DETECTED: 'detected',\n MODE_PREDICTED: 'predicted'\n};\n\nmodule.exports.trackPriority = {\n PRIORITY_HIGH: 'high',\n PRIORITY_LOW: 'low',\n PRIORITY_STANDARD: 'standard'\n};","'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar RemoteTrackStats = require('./remotetrackstats');\n\n/**\n * Statistics for an {@link AudioTrack}.\n * @extends RemoteTrackStats\n * @property {?AudioLevel} audioLevel - Output {@link AudioLevel}\n * @property {?number} jitter - Audio jitter in milliseconds\n */\n\nvar RemoteAudioTrackStats = function (_RemoteTrackStats) {\n _inherits(RemoteAudioTrackStats, _RemoteTrackStats);\n\n /**\n * @param {string} trackId - {@link AudioTrack} ID\n * @param {StandardizedTrackStatsReport} statsReport\n */\n function RemoteAudioTrackStats(trackId, statsReport) {\n _classCallCheck(this, RemoteAudioTrackStats);\n\n var _this = _possibleConstructorReturn(this, (RemoteAudioTrackStats.__proto__ || Object.getPrototypeOf(RemoteAudioTrackStats)).call(this, trackId, statsReport));\n\n Object.defineProperties(_this, {\n audioLevel: {\n value: typeof statsReport.audioOutputLevel === 'number' ? statsReport.audioOutputLevel : null,\n enumerable: true\n },\n jitter: {\n value: typeof statsReport.jitter === 'number' ? statsReport.jitter : null,\n enumerable: true\n }\n });\n return _this;\n }\n\n return RemoteAudioTrackStats;\n}(RemoteTrackStats);\n\nmodule.exports = RemoteAudioTrackStats;","/*\n * Copyright (c) 2012 Mathieu Turcotte\n * Licensed under the MIT license.\n */\n\nmodule.exports = require('./lib/checks');","'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar TrackStats = require('./trackstats');\n\n/**\n * Statistics for a {@link LocalTrack}.\n * @extends TrackStats\n * @property {?number} bytesSent - Number of bytes sent\n * @property {?number} packetsSent - Number of packets sent\n * @property {?number} roundTripTime - Round trip time in milliseconds\n */\n\nvar LocalTrackStats = function (_TrackStats) {\n _inherits(LocalTrackStats, _TrackStats);\n\n /**\n * @param {string} trackId - {@link LocalTrack} ID\n * @param {StandardizedTrackStatsReport} statsReport\n */\n function LocalTrackStats(trackId, statsReport) {\n _classCallCheck(this, LocalTrackStats);\n\n var _this = _possibleConstructorReturn(this, (LocalTrackStats.__proto__ || Object.getPrototypeOf(LocalTrackStats)).call(this, trackId, statsReport));\n\n Object.defineProperties(_this, {\n bytesSent: {\n value: typeof statsReport.bytesSent === 'number' ? statsReport.bytesSent : null,\n enumerable: true\n },\n packetsSent: {\n value: typeof statsReport.packetsSent === 'number' ? statsReport.packetsSent : null,\n enumerable: true\n },\n roundTripTime: {\n value: typeof statsReport.roundTripTime === 'number' ? statsReport.roundTripTime : null,\n enumerable: true\n }\n });\n return _this;\n }\n\n return LocalTrackStats;\n}(TrackStats);\n\nmodule.exports = LocalTrackStats;","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Track = require('./');\nvar DefaultDataTrackSender = require('../../data/sender');\n\n/**\n * A {@link LocalDataTrack} is a {@link Track} representing data that your\n * {@link LocalParticipant} can publish to a {@link Room}.\n * @extends Track\n * @property {Track.ID} id - The {@link LocalDataTrack}'s ID\n * @property {Track.Kind} kind - \"data\"\n * @property {?number} maxPacketLifeTime - If non-null, this represents a time\n * limit (in milliseconds) during which the {@link LocalDataTrack} will send\n * or re-send data if not acknowledged on the underlying RTCDataChannel(s).\n * @property {?number} maxRetransmits - If non-null, this represents the number\n * of times the {@link LocalDataTrack} will resend data if not successfully\n * delivered on the underlying RTCDataChannel(s).\n * @property {boolean} ordered - true if data on the {@link LocalDataTrack} is\n * guaranteed to be sent in order.\n * @property {boolean} reliable - This is true if both\n * maxPacketLifeTime and maxRetransmits are set to\n * null. In other words, if this is true, there is no bound on packet lifetime\n * or the number of times the {@link LocalDataTrack} will attempt to send\n * data, ensuring \"reliable\" transmission.\n * @example\n * var Video = require('twilio-video');\n *\n * var localDataTrack = new Video.LocalDataTrack();\n * window.addEventListener('mousemove', function(event) {\n * localDataTrack.send({\n * x: e.clientX,\n * y: e.clientY\n * });\n * });\n *\n * var token1 = getAccessToken();\n * Video.connect(token1, {\n * name: 'my-cool-room',\n * tracks: [localDataTrack]\n * });\n *\n * var token2 = getAccessToken();\n * Video.connect(token2, {\n * name: 'my-cool-room',\n * tracks: []\n * }).then(function(room) {\n * room.on('trackSubscribed', function(track) {\n * track.on('message', function(message) {\n * console.log(message); // { x: , y: }\n * });\n * });\n * });\n */\n\nvar LocalDataTrack = function (_Track) {\n _inherits(LocalDataTrack, _Track);\n\n /**\n * Construct a {@link LocalDataTrack}.\n * @param {LocalDataTrackOptions} [options] - {@link LocalDataTrack} options\n */\n function LocalDataTrack(options) {\n _classCallCheck(this, LocalDataTrack);\n\n options = Object.assign({\n DataTrackSender: DefaultDataTrackSender,\n maxPacketLifeTime: null,\n maxRetransmits: null,\n ordered: true\n }, options);\n\n var DataTrackSender = options.DataTrackSender;\n var dataTrackSender = new DataTrackSender(options.maxPacketLifeTime, options.maxRetransmits, options.ordered);\n\n var _this = _possibleConstructorReturn(this, (LocalDataTrack.__proto__ || Object.getPrototypeOf(LocalDataTrack)).call(this, dataTrackSender.id, 'data', options));\n\n Object.defineProperties(_this, {\n _trackSender: {\n value: dataTrackSender\n },\n id: {\n enumerable: true,\n value: dataTrackSender.id\n },\n maxPacketLifeTime: {\n enumerable: true,\n value: options.maxPacketLifeTime\n },\n maxRetransmits: {\n enumerable: true,\n value: options.maxRetransmits\n },\n ordered: {\n enumerable: true,\n value: options.ordered\n },\n reliable: {\n enumerable: true,\n value: options.maxPacketLifeTime === null && options.maxRetransmits === null\n }\n });\n return _this;\n }\n\n /**\n * Send a message over the {@link LocalDataTrack}.\n * @param {string|Blob|ArrayBuffer|ArrayBufferView} data\n * @returns {void}\n */\n\n\n _createClass(LocalDataTrack, [{\n key: 'send',\n value: function send(data) {\n this._trackSender.send(data);\n }\n }]);\n\n return LocalDataTrack;\n}(Track);\n\n/**\n * {@link LocalDataTrack} options\n * @typedef {LocalTrackOptions} LocalDataTrackOptions\n * @property {?number} [maxPacketLifeTime=null] - Set this to limit the time\n * (in milliseconds) during which the LocalDataTrack will send or re-send data\n * if not successfully delivered on the underlying RTCDataChannel(s). It is an\n * error to specify both this and maxRetransmits.\n * @property {?number} [maxRetransmits=null] - Set this to limit the number of\n * times the {@link LocalDataTrack} will send or re-send data if not\n * acknowledged on the underlying RTCDataChannel(s). It is an error to specify\n * both this and maxPacketLifeTime.\n * @property {boolean} [ordered=true] - Set this to false to allow data on the\n * LocalDataTrack to be sent out-of-order.\n */\n\nmodule.exports = LocalDataTrack;","'use strict';\n\n/**\n * Statistics for a {@link Track}.\n * @property {Track.ID} trackId - The {@link Track} ID\n * @property {Track.SID} trackSid - The {@link Track}'s SID when published in\n * in a {@link Room}\n * @property {number} timestamp - A Unix timestamp in milliseconds indicating\n * when the {@link TrackStats} were gathered\n * @property {string} ssrc - The {@link Track}'s SSRC when transmitted over the\n * RTCPeerConnection\n * @property {?number} packetsLost - The number of packets lost\n * @property {?string} codec - The name of the codec used to encode the\n * {@link Track}'s media\n */\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar TrackStats =\n/**\n * @param {string} trackId - {@link Track} ID\n * @param {StandardizedTrackStatsReport} statsReport\n */\nfunction TrackStats(trackId, statsReport) {\n _classCallCheck(this, TrackStats);\n\n if (typeof trackId !== 'string') {\n throw new Error('Track id must be a string');\n }\n\n Object.defineProperties(this, {\n trackId: {\n value: trackId,\n enumerable: true\n },\n trackSid: {\n value: statsReport.trackSid,\n enumerable: true\n },\n timestamp: {\n value: statsReport.timestamp,\n enumerable: true\n },\n ssrc: {\n value: statsReport.ssrc,\n enumerable: true\n },\n packetsLost: {\n value: typeof statsReport.packetsLost === 'number' ? statsReport.packetsLost : null,\n enumerable: true\n },\n codec: {\n value: typeof statsReport.codecName === 'string' ? statsReport.codecName : null,\n enumerable: true\n }\n });\n};\n\nmodule.exports = TrackStats;","'use strict';\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar DominantSpeakerSignaling = require('./dominantspeakersignaling');\nvar NetworkQualityMonitor = require('./networkqualitymonitor');\nvar NetworkQualitySignaling = require('./networkqualitysignaling');\nvar RecordingV2 = require('./recording');\nvar RoomSignaling = require('../room');\nvar RemoteParticipantV2 = require('./remoteparticipant');\nvar StatsReport = require('../../stats/statsreport');\nvar TrackPrioritySignaling = require('./trackprioritysignaling');\nvar TrackSwitchOffSignaling = require('./trackswitchoffsignaling');\n\nvar _require = require('../../util'),\n DEFAULT_SESSION_TIMEOUT_SEC = _require.constants.DEFAULT_SESSION_TIMEOUT_SEC,\n createBandwidthProfilePayload = _require.createBandwidthProfilePayload,\n defer = _require.defer,\n filterObject = _require.filterObject,\n flatMap = _require.flatMap,\n oncePerTick = _require.oncePerTick;\n\nvar _require2 = require('../../util/twilio-video-errors'),\n createTwilioError = _require2.createTwilioError;\n\nvar STATS_PUBLISH_INTERVAL_MS = 1000;\n\n/**\n * @extends RoomSignaling\n */\n\nvar RoomV2 = function (_RoomSignaling) {\n _inherits(RoomV2, _RoomSignaling);\n\n function RoomV2(localParticipant, initialState, transport, peerConnectionManager, options) {\n _classCallCheck(this, RoomV2);\n\n initialState.options = Object.assign({\n session_timeout: DEFAULT_SESSION_TIMEOUT_SEC\n }, initialState.options);\n\n options = Object.assign({\n DominantSpeakerSignaling: DominantSpeakerSignaling,\n NetworkQualityMonitor: NetworkQualityMonitor,\n NetworkQualitySignaling: NetworkQualitySignaling,\n RecordingSignaling: RecordingV2,\n RemoteParticipantV2: RemoteParticipantV2,\n TrackPrioritySignaling: TrackPrioritySignaling,\n TrackSwitchOffSignaling: TrackSwitchOffSignaling,\n bandwidthProfile: null,\n sessionTimeout: initialState.options.session_timeout * 1000,\n statsPublishIntervalMs: STATS_PUBLISH_INTERVAL_MS\n }, options);\n\n localParticipant.setBandwidthProfile(options.bandwidthProfile);\n peerConnectionManager.setIceReconnectTimeout(options.sessionTimeout);\n\n var _this = _possibleConstructorReturn(this, (RoomV2.__proto__ || Object.getPrototypeOf(RoomV2)).call(this, localParticipant, initialState.sid, initialState.name, options));\n\n Object.defineProperties(_this, {\n _dominantSpeakerSignaling: {\n value: null,\n writable: true\n },\n _DominantSpeakerSignaling: {\n value: options.DominantSpeakerSignaling\n },\n _dominantSpeakerSignalingPromise: {\n value: null,\n writable: true\n },\n _disconnectedParticipantSids: {\n value: new Set()\n },\n _NetworkQualityMonitor: {\n value: options.NetworkQualityMonitor\n },\n _NetworkQualitySignaling: {\n value: options.NetworkQualitySignaling\n },\n _lastBandwidthProfileRevision: {\n value: localParticipant.bandwidthProfileRevision,\n writable: true\n },\n _networkQualityMonitor: {\n value: null,\n writable: true\n },\n _networkQualityMonitorPromise: {\n value: null,\n writable: true\n },\n _networkQualityConfiguration: {\n value: localParticipant.networkQualityConfiguration\n },\n _peerConnectionManager: {\n value: peerConnectionManager\n },\n _published: {\n value: new Map()\n },\n _publishedRevision: {\n value: 0,\n writable: true\n },\n _RemoteParticipantV2: {\n value: options.RemoteParticipantV2\n },\n _subscribed: {\n value: new Map()\n },\n _subscribedRevision: {\n value: 0,\n writable: true\n },\n _subscriptionFailures: {\n value: new Map()\n },\n _trackPriorityPromise: {\n value: null,\n writable: true\n },\n _trackPrioritySignaling: {\n value: null,\n writable: true\n },\n _trackSwitchOffPromise: {\n value: null,\n writable: true\n },\n _trackSwitchOffSignaling: {\n value: null,\n writable: true\n },\n _TrackPrioritySignaling: {\n value: options.TrackPrioritySignaling\n },\n _TrackSwitchOffSignaling: {\n value: options.TrackSwitchOffSignaling\n },\n _transport: {\n value: transport\n },\n _trackReceiverDeferreds: {\n value: new Map()\n },\n mediaRegion: {\n enumerable: true,\n value: initialState.options.media_region || null\n }\n });\n\n handleLocalParticipantEvents(_this, localParticipant);\n handlePeerConnectionEvents(_this, peerConnectionManager);\n handleTransportEvents(_this, transport);\n periodicallyPublishStats(_this, transport, options.statsPublishIntervalMs);\n\n _this._update(initialState);\n return _this;\n }\n\n /**\n * The PeerConnection state.\n * @property {RTCPeerConnectionState}\n */\n\n\n _createClass(RoomV2, [{\n key: '_deleteTrackReceiverDeferred',\n\n\n /**\n * @private\n */\n value: function _deleteTrackReceiverDeferred(id) {\n return this._trackReceiverDeferreds.delete(id);\n }\n\n /**\n * @private\n */\n\n }, {\n key: '_getOrCreateTrackReceiverDeferred',\n value: function _getOrCreateTrackReceiverDeferred(id) {\n var deferred = this._trackReceiverDeferreds.get(id) || defer();\n var trackReceivers = this._peerConnectionManager.getTrackReceivers();\n\n // NOTE(mmalavalli): In Firefox, there can be instances where a MediaStreamTrack\n // for the given Track ID already exists, for example, when a Track is removed\n // and added back. If that is the case, then we should resolve 'deferred'.\n var trackReceiver = trackReceivers.find(function (trackReceiver) {\n return trackReceiver.id === id && trackReceiver.readyState !== 'ended';\n });\n\n if (trackReceiver) {\n deferred.resolve(trackReceiver);\n } else {\n // NOTE(mmalavalli): Only add the 'deferred' to the map if it's not\n // resolved. This will prevent old copies of the MediaStreamTrack from\n // being used when the remote peer removes and re-adds a MediaStreamTrack.\n this._trackReceiverDeferreds.set(id, deferred);\n }\n\n return deferred;\n }\n\n /**\n * @private\n */\n\n }, {\n key: '_addTrackReceiver',\n value: function _addTrackReceiver(trackReceiver) {\n var deferred = this._getOrCreateTrackReceiverDeferred(trackReceiver.id);\n deferred.resolve(trackReceiver);\n return this;\n }\n\n /**\n * @private\n */\n\n }, {\n key: '_disconnect',\n value: function _disconnect(error) {\n var didDisconnect = _get(RoomV2.prototype.__proto__ || Object.getPrototypeOf(RoomV2.prototype), '_disconnect', this).call(this, error);\n if (didDisconnect) {\n this._teardownDominantSpeakerSignaling();\n this._teardownNetworkQualityMonitor();\n this._transport.disconnect();\n this._peerConnectionManager.close();\n }\n\n this.localParticipant.tracks.forEach(function (track) {\n track.publishFailed(error || new Error('LocalParticipant disconnected'));\n });\n\n return didDisconnect;\n }\n\n /**\n * @private\n */\n\n }, {\n key: '_getTrackReceiver',\n value: function _getTrackReceiver(id) {\n var _this2 = this;\n\n return this._getOrCreateTrackReceiverDeferred(id).promise.then(function (trackReceiver) {\n _this2._deleteTrackReceiverDeferred(id);\n return trackReceiver;\n });\n }\n\n /**\n * @private\n */\n\n }, {\n key: '_getTrackSidsToTrackSignalings',\n value: function _getTrackSidsToTrackSignalings() {\n var trackSidsToTrackSignalings = flatMap(this.participants, function (participant) {\n return Array.from(participant.tracks);\n });\n return new Map(trackSidsToTrackSignalings);\n }\n\n /**\n * @private\n */\n\n }, {\n key: '_getOrCreateRemoteParticipant',\n value: function _getOrCreateRemoteParticipant(participantState) {\n var RemoteParticipantV2 = this._RemoteParticipantV2;\n var participant = this.participants.get(participantState.sid);\n var self = this;\n if (!participant) {\n participant = new RemoteParticipantV2(participantState, this._getTrackReceiver.bind(this));\n participant.on('stateChanged', function stateChanged(state) {\n if (state === 'disconnected') {\n participant.removeListener('stateChanged', stateChanged);\n self.participants.delete(participant.sid);\n self._disconnectedParticipantSids.add(participant.sid);\n }\n });\n this.connectParticipant(participant);\n participant.setTrackPrioritySignaling(this._trackPrioritySignaling);\n }\n return participant;\n }\n\n /**\n * @private\n */\n\n }, {\n key: '_getState',\n value: function _getState() {\n return {\n participant: this.localParticipant.getState()\n };\n }\n\n /**\n * @private\n */\n\n }, {\n key: '_maybeAddBandwidthProfile',\n value: function _maybeAddBandwidthProfile(update) {\n var _localParticipant = this.localParticipant,\n bandwidthProfile = _localParticipant.bandwidthProfile,\n bandwidthProfileRevision = _localParticipant.bandwidthProfileRevision;\n\n if (bandwidthProfile && this._lastBandwidthProfileRevision < bandwidthProfileRevision) {\n this._lastBandwidthProfileRevision = bandwidthProfileRevision;\n return Object.assign({\n bandwidth_profile: createBandwidthProfilePayload(bandwidthProfile)\n }, update);\n }\n return update;\n }\n /**\n * @private\n */\n\n }, {\n key: '_publishNewLocalParticipantState',\n value: function _publishNewLocalParticipantState() {\n this._transport.publish(this._maybeAddBandwidthProfile(this._getState()));\n }\n\n /**\n * @private\n */\n\n }, {\n key: '_publishPeerConnectionState',\n value: function _publishPeerConnectionState(peerConnectionState) {\n /* eslint camelcase:0 */\n this._transport.publish(Object.assign({\n peer_connections: [peerConnectionState]\n }, this._getState()));\n }\n\n /**\n * @private\n */\n\n }, {\n key: '_update',\n value: function _update(roomState) {\n var _this3 = this;\n\n if (roomState.subscribed && roomState.subscribed.revision > this._subscribedRevision) {\n this._subscribedRevision = roomState.subscribed.revision;\n roomState.subscribed.tracks.forEach(function (trackState) {\n if (trackState.id) {\n _this3._subscriptionFailures.delete(trackState.sid);\n _this3._subscribed.set(trackState.sid, trackState.id);\n } else if (trackState.error && !_this3._subscriptionFailures.has(trackState.sid)) {\n _this3._subscriptionFailures.set(trackState.sid, trackState.error);\n }\n });\n\n var subscribedTrackSids = new Set(roomState.subscribed.tracks.filter(function (trackState) {\n return !!trackState.id;\n }).map(function (trackState) {\n return trackState.sid;\n }));\n\n this._subscribed.forEach(function (trackId, trackSid) {\n if (!subscribedTrackSids.has(trackSid)) {\n _this3._subscribed.delete(trackSid);\n }\n });\n }\n\n var participantsToKeep = new Set();\n\n // eslint-disable-next-line no-warning-comments\n // TODO(mroberts): Remove me once the Server is fixed.\n (roomState.participants || []).forEach(function (participantState) {\n if (participantState.sid === _this3.localParticipant.sid || _this3._disconnectedParticipantSids.has(participantState.sid)) {\n return;\n }\n var participant = _this3._getOrCreateRemoteParticipant(participantState);\n participant.update(participantState);\n participantsToKeep.add(participant);\n });\n\n if (roomState.type === 'synced') {\n this.participants.forEach(function (participant) {\n if (!participantsToKeep.has(participant)) {\n participant.disconnect();\n }\n });\n }\n\n handleSubscriptions(this);\n\n // eslint-disable-next-line no-warning-comments\n // TODO(mroberts): Remove me once the Server is fixed.\n /* eslint camelcase:0 */\n if (roomState.peer_connections) {\n this._peerConnectionManager.update(roomState.peer_connections, roomState.type === 'synced');\n }\n\n if (roomState.recording) {\n this.recording.update(roomState.recording);\n }\n\n if (roomState.published && roomState.published.revision > this._publishedRevision) {\n this._publishedRevision = roomState.published.revision;\n roomState.published.tracks.forEach(function (track) {\n if (track.sid) {\n _this3._published.set(track.id, track.sid);\n }\n });\n this.localParticipant.update(roomState.published);\n }\n\n if (roomState.participant) {\n this.localParticipant.connect(roomState.participant.sid, roomState.participant.identity);\n }\n\n if (!this._dominantSpeakerSignalingPromise && roomState.media_signaling && roomState.media_signaling.active_speaker && roomState.media_signaling.active_speaker.transport && roomState.media_signaling.active_speaker.transport.type === 'data-channel') {\n this._setupDataTransportBackedDominantSpeakerSignaling(roomState.media_signaling.active_speaker.transport.label);\n }\n\n if (!this._networkQualityMonitorPromise && roomState.media_signaling && roomState.media_signaling.network_quality && roomState.media_signaling.network_quality.transport && roomState.media_signaling.network_quality.transport.type === 'data-channel') {\n this._setupDataTransportBackedNetworkQualityMonitor(roomState.media_signaling.network_quality.transport.label);\n }\n\n if (!this._trackPriorityPromise && roomState.media_signaling && roomState.media_signaling.track_priority && roomState.media_signaling.track_priority.transport && roomState.media_signaling.track_priority.transport.type === 'data-channel') {\n this._setupTrackPrioritySignaling(roomState.media_signaling.track_priority.transport.label);\n }\n\n if (!this._trackSwitchOffPromise && roomState.media_signaling && roomState.media_signaling.track_switch_off && roomState.media_signaling.track_switch_off.transport && roomState.media_signaling.track_switch_off.transport.type === 'data-channel') {\n this._setupTrackSwitchOffMonitor(roomState.media_signaling.track_switch_off.transport.label);\n }\n\n return this;\n }\n\n // track priority signaling MSP is now used only for subscribe side priority changes.\n // publisher side priority changes and notifications are handled by RSP.\n\n }, {\n key: '_setupTrackPrioritySignaling',\n value: function _setupTrackPrioritySignaling(id) {\n var _this4 = this;\n\n this._teardownTrackPrioritySignaling();\n var trackPriorityPromise = this._getTrackReceiver(id).then(function (receiver) {\n if (receiver.kind !== 'data') {\n throw new Error('Expected a DataTrackReceiver');\n }if (_this4._trackPriorityPromise !== trackPriorityPromise) {\n return;\n }\n\n // NOTE(mmalavalli): The underlying RTCDataChannel is closed whenever\n // the VMS instance fails over, and a new RTCDataChannel is created in order\n // to resume sending Track Priority updates.\n receiver.once('close', function () {\n return _this4._teardownTrackPrioritySignaling();\n });\n\n _this4._trackPrioritySignaling = new _this4._TrackPrioritySignaling(receiver.toDataTransport());\n [].concat(_toConsumableArray(_this4.participants.values())).forEach(function (participant) {\n participant.setTrackPrioritySignaling(_this4._trackPrioritySignaling);\n });\n });\n this._trackPriorityPromise = trackPriorityPromise;\n }\n }, {\n key: '_setupTrackSwitchOff',\n value: function _setupTrackSwitchOff(trackSwitchOffSignaling) {\n var _this5 = this;\n\n this._trackSwitchOffSignaling = trackSwitchOffSignaling;\n trackSwitchOffSignaling.on('updated', function (tracksOff, tracksOn) {\n _this5.participants.forEach(function (participant) {\n participant.tracks.forEach(function (track) {\n if (tracksOff.includes(track.sid)) {\n track.setSwitchedOff(true);\n }\n if (tracksOn.includes(track.sid)) {\n track.setSwitchedOff(false);\n }\n });\n });\n });\n }\n }, {\n key: '_setupTrackSwitchOffMonitor',\n value: function _setupTrackSwitchOffMonitor(id) {\n var _this6 = this;\n\n this._teardownTrackSwitchOff();\n var trackSwitchOffPromise = this._getTrackReceiver(id).then(function (receiver) {\n if (receiver.kind !== 'data') {\n throw new Error('Expected a DataTrackReceiver');\n }if (_this6._trackSwitchOffPromise !== trackSwitchOffPromise) {\n return;\n }\n\n // NOTE(mpatwardhan): The underlying RTCDataChannel is closed whenever\n // the VMS instance fails over, and a new RTCDataChannel is created in order\n // to resume sending Dominant Speaker updates.\n receiver.once('close', function () {\n return _this6._teardownTrackSwitchOff();\n });\n\n var trackSwitchOffSignaling = new _this6._TrackSwitchOffSignaling(receiver.toDataTransport());\n _this6._setupTrackSwitchOff(trackSwitchOffSignaling);\n });\n this._trackSwitchOffPromise = trackSwitchOffPromise;\n }\n\n /**\n * Create a {@link DataTransport}-backed {@link DominantSpeakerSignaling}.\n * @private\n * @param {ID} id - ID of the {@link DataTrackReceiver} that will ultimately\n * be converted into a {@link DataTrackTransport} for use with\n * {@link DominantSpeakerSignaling}\n * @returns {Promise}\n */\n\n }, {\n key: '_setupDataTransportBackedDominantSpeakerSignaling',\n value: function _setupDataTransportBackedDominantSpeakerSignaling(id) {\n var _this7 = this;\n\n this._teardownDominantSpeakerSignaling();\n var dominantSpeakerSignalingPromise = this._getTrackReceiver(id).then(function (receiver) {\n if (receiver.kind !== 'data') {\n throw new Error('Expected a DataTrackReceiver');\n }if (_this7._dominantSpeakerSignalingPromise !== dominantSpeakerSignalingPromise) {\n // NOTE(mroberts): _teardownDominantSpeakerSignaling was called.\n return;\n }\n\n // NOTE(mpatwardhan): The underlying RTCDataChannel is closed whenever\n // the VMS instance fails over, and a new RTCDataChannel is created in order\n // to resume sending Dominant Speaker updates.\n receiver.once('close', function () {\n return _this7._teardownDominantSpeakerSignaling();\n });\n\n var dominantSpeakerSignaling = new _this7._DominantSpeakerSignaling(receiver.toDataTransport());\n _this7._setDominantSpeakerSignaling(dominantSpeakerSignaling);\n });\n this._dominantSpeakerSignalingPromise = dominantSpeakerSignalingPromise;\n }\n /**\n * Create a {@link DataTransport}-backed {@link NetworkQualityMonitor}.\n * @private\n * @param {ID} id - ID of the {@link DataTrackReceiver} that will ultimately\n * be converted into a {@link DataTrackTransport} for use with\n * {@link NetworkQualitySignaling}\n * @returns {Promise}\n */\n\n }, {\n key: '_setupDataTransportBackedNetworkQualityMonitor',\n value: function _setupDataTransportBackedNetworkQualityMonitor(id) {\n var _this8 = this;\n\n var self = this;\n this._teardownNetworkQualityMonitor();\n var networkQualityMonitorPromise = this._getTrackReceiver(id).then(function (receiver) {\n if (receiver.kind !== 'data') {\n throw new Error('Expected a DataTrackReceiver');\n }if (_this8._networkQualityMonitorPromise !== networkQualityMonitorPromise) {\n // NOTE(mroberts): _teardownNetworkQualityMonitor was called.\n return;\n }\n\n // NOTE(mpatwardhan): The underlying RTCDataChannel is closed whenever\n // the VMS instance fails over, and new a RTCDataChannel is created in order\n // to resume exchanging Network Quality messages.\n receiver.once('close', function () {\n return _this8._teardownNetworkQualityMonitor();\n });\n\n var networkQualitySignaling = new _this8._NetworkQualitySignaling(receiver.toDataTransport(), self._networkQualityConfiguration);\n var networkQualityMonitor = new _this8._NetworkQualityMonitor(_this8._peerConnectionManager, networkQualitySignaling);\n _this8._setNetworkQualityMonitor(networkQualityMonitor);\n });\n this._networkQualityMonitorPromise = networkQualityMonitorPromise;\n }\n }, {\n key: '_setDominantSpeakerSignaling',\n value: function _setDominantSpeakerSignaling(dominantSpeakerSignaling) {\n var _this9 = this;\n\n this._dominantSpeakerSignaling = dominantSpeakerSignaling;\n dominantSpeakerSignaling.on('updated', function () {\n return _this9.setDominantSpeaker(dominantSpeakerSignaling.loudestParticipantSid);\n });\n }\n }, {\n key: '_setNetworkQualityMonitor',\n value: function _setNetworkQualityMonitor(networkQualityMonitor) {\n var _this10 = this;\n\n this._networkQualityMonitor = networkQualityMonitor;\n networkQualityMonitor.on('updated', function () {\n if (_this10.iceConnectionState === 'failed') {\n return;\n }\n _this10.localParticipant.setNetworkQualityLevel(networkQualityMonitor.level, networkQualityMonitor.levels);\n _this10.participants.forEach(function (participant) {\n var levels = networkQualityMonitor.remoteLevels.get(participant.sid);\n if (levels) {\n participant.setNetworkQualityLevel(levels.level, levels);\n }\n });\n });\n networkQualityMonitor.start();\n }\n }, {\n key: '_teardownDominantSpeakerSignaling',\n value: function _teardownDominantSpeakerSignaling() {\n this._dominantSpeakerSignalingPromise = null;\n this._dominantSpeakerSignaling = null;\n }\n }, {\n key: '_teardownNetworkQualityMonitor',\n value: function _teardownNetworkQualityMonitor() {\n this._networkQualityMonitorPromise = null;\n if (this._networkQualityMonitor) {\n this._networkQualityMonitor.stop();\n this._networkQualityMonitor = null;\n }\n }\n }, {\n key: '_teardownTrackPrioritySignaling',\n value: function _teardownTrackPrioritySignaling() {\n this._trackPrioritySignaling = null;\n this._trackPriorityPromise = null;\n this.localParticipant.setTrackPrioritySignaling(null);\n this.participants.forEach(function (participant) {\n participant.setTrackPrioritySignaling(null);\n });\n }\n }, {\n key: '_teardownTrackSwitchOff',\n value: function _teardownTrackSwitchOff() {\n this._trackSwitchOffSignaling = null;\n this._trackSwitchOffPromise = null;\n }\n\n /**\n * Get the {@link RoomV2}'s media statistics.\n * @returns {Promise.>}\n */\n\n }, {\n key: 'getStats',\n value: function getStats() {\n var _this11 = this;\n\n return this._peerConnectionManager.getStats().then(function (responses) {\n return new Map(Array.from(responses).map(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n id = _ref2[0],\n response = _ref2[1];\n\n return [id, Object.assign({}, response, {\n localAudioTrackStats: filterAndAddLocalTrackSids(_this11, response.localAudioTrackStats),\n localVideoTrackStats: filterAndAddLocalTrackSids(_this11, response.localVideoTrackStats),\n remoteAudioTrackStats: filterAndAddRemoteTrackSids(_this11, response.remoteAudioTrackStats),\n remoteVideoTrackStats: filterAndAddRemoteTrackSids(_this11, response.remoteVideoTrackStats)\n })];\n }));\n });\n }\n }, {\n key: 'connectionState',\n get: function get() {\n return this._peerConnectionManager.connectionState;\n }\n\n /**\n * The Signaling Connection State.\n * @property {string} - \"connected\", \"reconnecting\", \"disconnected\"\n */\n\n }, {\n key: 'signalingConnectionState',\n get: function get() {\n return this._transport.state === 'syncing' ? 'reconnecting' : this._transport.state;\n }\n\n /**\n * The Ice Connection State.\n * @property {RTCIceConnectionState}\n */\n\n }, {\n key: 'iceConnectionState',\n get: function get() {\n return this._peerConnectionManager.iceConnectionState;\n }\n }]);\n\n return RoomV2;\n}(RoomSignaling);\n\n/**\n * Filter out {@link TrackStats} that aren't in the collection while also\n * stamping their Track SIDs.\n * @param {Map} idToSid\n * @param {Array} trackStats\n * @returns {Array}\n */\n\n\nfunction filterAndAddTrackSids(idToSid, trackStats) {\n return trackStats.reduce(function (trackStats, trackStat) {\n var trackSid = idToSid.get(trackStat.trackId);\n return trackSid ? [Object.assign({}, trackStat, { trackSid: trackSid })].concat(trackStats) : trackStats;\n }, []);\n}\n\n/**\n * Filter out {@link LocalTrackStats} that aren't currently published while also\n * stamping their Track SIDs.\n * @param {RoomV2} roomV2\n * @param {Array} localTrackStats\n * @returns {Array}\n */\nfunction filterAndAddLocalTrackSids(roomV2, localTrackStats) {\n return filterAndAddTrackSids(roomV2._published, localTrackStats);\n}\n\n/**\n * Filter out {@link RemoteTrackStats} that aren't currently subscribed while\n * also stamping their Track SIDs.\n * @param {RoomV2} roomV2\n * @param {Array} remoteTrackStats\n * @returns {Array}\n */\nfunction filterAndAddRemoteTrackSids(roomV2, remoteTrackStats) {\n var idToSid = new Map(Array.from(roomV2._subscribed.entries()).map(function (_ref3) {\n var _ref4 = _slicedToArray(_ref3, 2),\n sid = _ref4[0],\n id = _ref4[1];\n\n return [id, sid];\n }));\n return filterAndAddTrackSids(idToSid, remoteTrackStats);\n}\n\n/**\n * @typedef {object} RoomV2#Representation\n * @property {string} name\n * @property {LocalParticipantV2#Representation} participant\n * @property {?Array} participants\n * @property {?Array} peer_connections\n * @property {?RecordingV2#Representation} recording\n * @property {string} sid\n */\n\nfunction handleLocalParticipantEvents(roomV2, localParticipant) {\n var localParticipantUpdated = oncePerTick(function () {\n roomV2._publishNewLocalParticipantState();\n });\n\n var renegotiate = oncePerTick(function () {\n var trackSenders = flatMap(localParticipant.tracks, function (trackV2) {\n return trackV2.trackTransceiver;\n });\n roomV2._peerConnectionManager.setTrackSenders(trackSenders);\n });\n\n localParticipant.on('trackAdded', renegotiate);\n localParticipant.on('trackRemoved', renegotiate);\n localParticipant.on('updated', localParticipantUpdated);\n\n roomV2.on('stateChanged', function stateChanged(state) {\n if (state === 'disconnected') {\n localParticipant.removeListener('trackAdded', renegotiate);\n localParticipant.removeListener('trackRemoved', renegotiate);\n localParticipant.removeListener('updated', localParticipantUpdated);\n roomV2.removeListener('stateChanged', stateChanged);\n localParticipant.disconnect();\n }\n });\n\n roomV2.on('signalingConnectionStateChanged', function () {\n var localParticipant = roomV2.localParticipant,\n signalingConnectionState = roomV2.signalingConnectionState;\n var identity = localParticipant.identity,\n sid = localParticipant.sid;\n\n switch (signalingConnectionState) {\n case 'connected':\n localParticipant.connect(sid, identity);\n break;\n case 'reconnecting':\n localParticipant.reconnecting();\n break;\n }\n });\n}\n\nfunction handlePeerConnectionEvents(roomV2, peerConnectionManager) {\n peerConnectionManager.on('description', function onDescription(description) {\n roomV2._publishPeerConnectionState(description);\n });\n peerConnectionManager.dequeue('description');\n\n peerConnectionManager.on('candidates', function onCandidates(candidates) {\n roomV2._publishPeerConnectionState(candidates);\n });\n peerConnectionManager.dequeue('candidates');\n\n peerConnectionManager.on('trackAdded', roomV2._addTrackReceiver.bind(roomV2));\n peerConnectionManager.dequeue('trackAdded');\n peerConnectionManager.getTrackReceivers().forEach(roomV2._addTrackReceiver, roomV2);\n\n peerConnectionManager.on('connectionStateChanged', function () {\n roomV2.emit('connectionStateChanged');\n });\n\n peerConnectionManager.on('iceConnectionStateChanged', function () {\n roomV2.emit('iceConnectionStateChanged');\n if (roomV2.iceConnectionState === 'failed') {\n if (roomV2.localParticipant.networkQualityLevel !== null) {\n roomV2.localParticipant.setNetworkQualityLevel(0);\n }\n roomV2.participants.forEach(function (participant) {\n if (participant.networkQualityLevel !== null) {\n participant.setNetworkQualityLevel(0);\n }\n });\n }\n });\n}\n\nfunction handleTransportEvents(roomV2, transport) {\n transport.on('message', roomV2._update.bind(roomV2));\n transport.on('stateChanged', function stateChanged(state, error) {\n if (state === 'disconnected') {\n if (roomV2.state !== 'disconnected') {\n roomV2._disconnect(error);\n }\n transport.removeListener('stateChanged', stateChanged);\n }\n roomV2.emit('signalingConnectionStateChanged');\n });\n}\n\n/**\n * Periodically publish {@link StatsReport}s.\n * @private\n * @param {RoomV2} roomV2\n * @param {Transport} transport\n * @param {Number} intervalMs\n */\nfunction periodicallyPublishStats(roomV2, transport, intervalMs) {\n var interval = setInterval(function () {\n roomV2.getStats().then(function (stats) {\n stats.forEach(function (response, id) {\n // NOTE(mmalavalli): A StatsReport is used to publish a \"stats-report\"\n // event instead of using StandardizedStatsResponse directly because\n // StatsReport will add nulls to properties that do not exist.\n var report = new StatsReport(id, response);\n\n transport.publishEvent('quality', 'stats-report', {\n audioTrackStats: report.remoteAudioTrackStats,\n localAudioTrackStats: report.localAudioTrackStats,\n localVideoTrackStats: report.localVideoTrackStats,\n peerConnectionId: report.peerConnectionId,\n videoTrackStats: report.remoteVideoTrackStats\n });\n\n // NOTE(mmalavalli): null properties of the \"active-ice-candidate-pair\"\n // payload are assigned default values until the Insights gateway\n // accepts null values.\n var activeIceCandidatePair = replaceNullsWithDefaults(response.activeIceCandidatePair, report.peerConnectionId);\n\n transport.publishEvent('quality', 'active-ice-candidate-pair', activeIceCandidatePair);\n });\n }, function () {\n // Do nothing.\n });\n }, intervalMs);\n\n roomV2.on('stateChanged', function onStateChanged(state) {\n if (state === 'disconnected') {\n clearInterval(interval);\n roomV2.removeListener('stateChanged', onStateChanged);\n }\n });\n}\n\nfunction handleSubscriptions(room) {\n var trackSidsToTrackSignalings = room._getTrackSidsToTrackSignalings();\n\n room._subscriptionFailures.forEach(function (error, trackSid) {\n var trackSignaling = trackSidsToTrackSignalings.get(trackSid);\n if (trackSignaling) {\n room._subscriptionFailures.delete(trackSid);\n trackSignaling.subscribeFailed(createTwilioError(error.code, error.message));\n }\n });\n\n trackSidsToTrackSignalings.forEach(function (trackSignaling) {\n var trackId = room._subscribed.get(trackSignaling.sid);\n if (!trackId || trackSignaling.isSubscribed && trackSignaling.trackTransceiver.id !== trackId) {\n trackSignaling.setTrackTransceiver(null);\n }\n if (trackId) {\n room._getTrackReceiver(trackId).then(function (trackReceiver) {\n return trackSignaling.setTrackTransceiver(trackReceiver);\n });\n }\n });\n}\n\nfunction replaceNullsWithDefaults(activeIceCandidatePair, peerConnectionId) {\n activeIceCandidatePair = Object.assign({\n availableIncomingBitrate: 0,\n availableOutgoingBitrate: 0,\n bytesReceived: 0,\n bytesSent: 0,\n consentRequestsSent: 0,\n currentRoundTripTime: 0,\n lastPacketReceivedTimestamp: 0,\n lastPacketSentTimestamp: 0,\n nominated: false,\n peerConnectionId: peerConnectionId,\n priority: 0,\n readable: false,\n requestsReceived: 0,\n requestsSent: 0,\n responsesReceived: 0,\n responsesSent: 0,\n retransmissionsReceived: 0,\n retransmissionsSent: 0,\n state: 'failed',\n totalRoundTripTime: 0,\n transportId: '',\n writable: false\n }, filterObject(activeIceCandidatePair || {}, null));\n\n activeIceCandidatePair.localCandidate = Object.assign({\n candidateType: 'host',\n deleted: false,\n ip: '',\n port: 0,\n priority: 0,\n protocol: 'udp',\n relayProtocol: 'udp',\n url: ''\n }, filterObject(activeIceCandidatePair.localCandidate || {}, null));\n\n activeIceCandidatePair.remoteCandidate = Object.assign({\n candidateType: 'host',\n ip: '',\n port: 0,\n priority: 0,\n protocol: 'udp',\n url: ''\n }, filterObject(activeIceCandidatePair.remoteCandidate || {}, null));\n\n return activeIceCandidatePair;\n}\n\nmodule.exports = RoomV2;","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Participant = require('./participant');\n\n/**\n * A {@link RemoteParticipant} represents a remote {@link Participant} in a\n * {@link Room}.\n * @extends Participant\n * @property {Map} audioTracks -\n * The {@link Participant}'s {@link RemoteAudioTrackPublication}s\n * @property {Map} dataTracks -\n * The {@link Participant}'s {@link RemoteDataTrackPublication}s\n * @property {Map} tracks -\n * The {@link Participant}'s {@link RemoteTrackPublication}s\n * @property {Map} videoTracks -\n * The {@link Participant}'s {@link RemoteVideoTrackPublication}s\n * @emits RemoteParticipant#reconnected\n * @emits RemoteParticipant#reconnecting\n * @emits RemoteParticipant#trackDimensionsChanged\n * @emits RemoteParticipant#trackDisabled\n * @emits RemoteParticipant#trackEnabled\n * @emits RemoteParticipant#trackMessage\n * @emits RemoteParticipant#trackPublished\n * @emits RemoteParticipant#trackPublishPriorityChanged\n * @emits RemoteParticipant#trackStarted\n * @emits RemoteParticipant#trackSubscribed\n * @emits RemoteParticipant#trackSubscriptionFailed\n * @emits RemoteParticipant#trackSwitchedOff\n * @emits RemoteParticipant#trackSwitchedOn\n * @emits RemoteParticipant#trackUnpublished\n * @emits RemoteParticipant#trackUnsubscribed\n */\n\nvar RemoteParticipant = function (_Participant) {\n _inherits(RemoteParticipant, _Participant);\n\n /**\n * Construct a {@link RemoteParticipant}.\n * @param {ParticipantSignaling} signaling\n * @param {object} [options]\n */\n function RemoteParticipant(signaling, options) {\n _classCallCheck(this, RemoteParticipant);\n\n var _this = _possibleConstructorReturn(this, (RemoteParticipant.__proto__ || Object.getPrototypeOf(RemoteParticipant)).call(this, signaling, options));\n\n _this._handleTrackSignalingEvents();\n _this.once('disconnected', _this._unsubscribeTracks.bind(_this));\n return _this;\n }\n\n _createClass(RemoteParticipant, [{\n key: 'toString',\n value: function toString() {\n return '[RemoteParticipant #' + this._instanceId + (this.sid ? ': ' + this.sid : '') + ']';\n }\n\n /**\n * @private\n * @param {RemoteTrack} remoteTrack\n * @param {RemoteTrackPublication} publication\n * @param {Track.ID} id\n * @returns {?RemoteTrack}\n */\n\n }, {\n key: '_addTrack',\n value: function _addTrack(remoteTrack, publication, id) {\n if (!_get(RemoteParticipant.prototype.__proto__ || Object.getPrototypeOf(RemoteParticipant.prototype), '_addTrack', this).call(this, remoteTrack, id)) {\n return null;\n }\n publication._subscribed(remoteTrack);\n this.emit('trackSubscribed', remoteTrack, publication);\n return remoteTrack;\n }\n\n /**\n * @private\n * @param {RemoteTrackPublication} publication\n * @returns {?RemoteTrackPublication}\n */\n\n }, {\n key: '_addTrackPublication',\n value: function _addTrackPublication(publication) {\n var addedPublication = _get(RemoteParticipant.prototype.__proto__ || Object.getPrototypeOf(RemoteParticipant.prototype), '_addTrackPublication', this).call(this, publication);\n if (!addedPublication) {\n return null;\n }\n this.emit('trackPublished', addedPublication);\n return addedPublication;\n }\n /**\n * @private\n */\n\n }, {\n key: '_getTrackPublicationEvents',\n value: function _getTrackPublicationEvents() {\n return [].concat(_toConsumableArray(_get(RemoteParticipant.prototype.__proto__ || Object.getPrototypeOf(RemoteParticipant.prototype), '_getTrackPublicationEvents', this).call(this)), [['subscriptionFailed', 'trackSubscriptionFailed'], ['trackDisabled', 'trackDisabled'], ['trackEnabled', 'trackEnabled'], ['publishPriorityChanged', 'trackPublishPriorityChanged'], ['trackSwitchedOff', 'trackSwitchedOff'], ['trackSwitchedOn', 'trackSwitchedOn']]);\n }\n\n /**\n * @private\n */\n\n }, {\n key: '_unsubscribeTracks',\n value: function _unsubscribeTracks() {\n var _this2 = this;\n\n this.tracks.forEach(function (publication) {\n if (publication.isSubscribed) {\n var track = publication.track;\n publication._unsubscribe();\n _this2.emit('trackUnsubscribed', track, publication);\n }\n });\n }\n\n /**\n * @private\n * @param {RemoteTrack} remoteTrack\n * @param {RemoteTrackPublication} publication\n * @param {Track.ID} id\n * @returns {?RemoteTrack}\n */\n\n }, {\n key: '_removeTrack',\n value: function _removeTrack(remoteTrack, publication, id) {\n var unsubscribedTrack = this._tracks.get(id);\n if (!unsubscribedTrack) {\n return null;\n }\n\n _get(RemoteParticipant.prototype.__proto__ || Object.getPrototypeOf(RemoteParticipant.prototype), '_removeTrack', this).call(this, unsubscribedTrack, id);\n publication._unsubscribe();\n this.emit('trackUnsubscribed', unsubscribedTrack, publication);\n return unsubscribedTrack;\n }\n\n /**\n * @private\n * @param {RemoteTrackPublication} publication\n * @returns {?RemoteTrackPublication}\n */\n\n }, {\n key: '_removeTrackPublication',\n value: function _removeTrackPublication(publication) {\n var removedPublication = _get(RemoteParticipant.prototype.__proto__ || Object.getPrototypeOf(RemoteParticipant.prototype), '_removeTrackPublication', this).call(this, publication);\n if (!removedPublication) {\n return null;\n }\n this.emit('trackUnpublished', removedPublication);\n return removedPublication;\n }\n }]);\n\n return RemoteParticipant;\n}(Participant);\n\n/**\n * The {@link RemoteParticipant} has reconnected to the {@link Room} after a signaling connection disruption.\n * @event RemoteParticipant#reconnected\n */\n\n/**\n * The {@link RemoteParticipant} is reconnecting to the {@link Room} after a signaling connection disruption.\n * @event RemoteParticipant#reconnecting\n */\n\n/**\n * One of the {@link RemoteParticipant}'s {@link RemoteVideoTrack}'s dimensions changed.\n * @param {RemoteVideoTrack} track - The {@link RemoteVideoTrack} whose dimensions changed\n * @event RemoteParticipant#trackDimensionsChanged\n */\n\n/**\n * A {@link RemoteTrack} was disabled by the {@link RemoteParticipant}.\n * @param {RemoteTrackPublication} publication - The {@link RemoteTrackPublication} associated with the disabled {@link RemoteTrack}\n * @event RemoteParticipant#trackDisabled\n */\n\n/**\n * A {@link RemoteTrack} was enabled by the {@link RemoteParticipant}.\n * @param {RemoteTrackPublication} publication - The {@link RemoteTrackPublication} associated with the enabled {@link RemoteTrack}\n * @event RemoteParticipant#trackEnabled\n */\n\n/**\n * A message was received over one of the {@link RemoteParticipant}'s\n * {@link RemoteDataTrack}s.\n * @event RemoteParticipant#trackMessage\n * @param {string|ArrayBuffer} data\n * @param {RemoteDataTrack} track - The {@link RemoteDataTrack} over which the\n * message was received\n */\n\n/**\n * A {@link RemoteTrack} was published by the {@link RemoteParticipant} after\n * connecting to the {@link Room}. This event is not emitted for\n * {@link RemoteTrack}s that were published while the {@link RemoteParticipant}\n * was connecting to the {@link Room}.\n * @event RemoteParticipant#trackPublished\n * @param {RemoteTrackPublication} publication - The {@link RemoteTrackPublication}\n * which represents the published {@link RemoteTrack}\n * @example\n * function trackPublished(publication) {\n * console.log(`Track ${publication.trackSid} was published`);\n * }\n *\n * room.on('participantConnected', participant => {\n * // Handle RemoteTracks published while connecting to the Room.\n * participant.trackPublications.forEach(trackPublished);\n *\n * // Handle RemoteTracks published after connecting to the Room.\n * participant.on('trackPublished', trackPublished);\n * });\n */\n\n/**\n * One of the {@link RemoteParticipant}'s {@link RemoteTrack}s started.\n * @param {RemoteTrack} track - The {@link RemoteTrack} that started\n * @event RemoteParticipant#trackStarted\n */\n\n/**\n * A {@link RemoteParticipant}'s {@link RemoteTrack} was subscribed to.\n * @param {RemoteTrack} track - The {@link RemoteTrack} that was subscribed to\n * @param {RemoteTrackPublication} publication - The {@link RemoteTrackPublication}\n * for the {@link RemoteTrack} that was subscribed to\n * @event RemoteParticipant#trackSubscribed\n */\n\n/**\n * A {@link RemoteParticipant}'s {@link RemoteTrack} could not be subscribed to.\n * @param {TwilioError} error - The reason the {@link RemoteTrack} could not be\n * subscribed to\n * @param {RemoteTrackPublication} publication - The\n * {@link RemoteTrackPublication} for the {@link RemoteTrack} that could not\n * be subscribed to\n * @event RemoteParticipant#trackSubscriptionFailed\n */\n\n/**\n * The {@link RemoteTrackPublication}'s publish {@link Track.Priority} was changed by the\n * {@link RemoteParticipant}.\n * @param {Track.Priority} priority - the {@link RemoteTrack}'s new publish\n * {@link Track.Priority};\n * @param {RemoteTrackPublication} publication - The\n * {@link RemoteTrackPublication} for the {@link RemoteTrack} that changed priority\n * @event RemoteParticipant#trackPublishPriorityChanged\n */\n\n/**\n * A {@link RemoteParticipant}'s {@link RemoteTrack} was subscribed to.\n * @param {RemoteTrack} track - The {@link RemoteTrack} that was switched off\n * @param {RemoteTrackPublication} publication - The {@link RemoteTrackPublication}\n * for the {@link RemoteTrack} that was switched off\n * @event RemoteParticipant#trackSwitchedOff\n */\n\n/**\n * A {@link RemoteParticipant}'s {@link RemoteTrack} was switched on.\n * @param {RemoteTrack} track - The {@link RemoteTrack} that was switched on.\n * @param {RemoteTrackPublication} publication - The {@link RemoteTrackPublication}\n * for the {@link RemoteTrack} that was switched on\n * @event RemoteParticipant#trackSwitchedOn\n */\n\n/**\n * A {@link RemoteTrack} was unpublished by the {@link RemoteParticipant}.\n * @event RemoteParticipant#trackUnpublished\n * @param {RemoteTrackPublication} publication - The {@link RemoteTrackPublication}\n * which represents the unpublished {@link RemoteTrack}\n */\n\n/**\n * A {@link RemoteParticipant}'s {@link RemoteTrack} was unsubscribed from.\n * @param {RemoteTrack} track - The {@link RemoteTrack} that was unsubscribed from\n * @param {RemoteTrackPublication} publication - The {@link RemoteTrackPublication}\n * for the {@link RemoteTrack} that was unsubscribed from\n * @event RemoteParticipant#trackUnsubscribed\n */\n\nmodule.exports = RemoteParticipant;","module.exports = function isBuffer(arg) {\n return arg && typeof arg === 'object'\n && typeof arg.copy === 'function'\n && typeof arg.fill === 'function'\n && typeof arg.readUInt8 === 'function';\n}","'use strict';\n\n/**\n * This function is very similar to navigator.getUserMedia except\n * that it does not use callbacks and returns a Promise for a MediaStream\n * @function getUserMedia\n * @param {MediaStreamConstraints} [constraints={audio:true,video:true}] - the\n * MediaStreamConstraints object specifying what kind of LocalMediaStream to\n * request from the browser (by default both audio and video)\n * @returns Promise\n */\nfunction getUserMedia(constraints) {\n return new Promise(function getUserMediaPromise(resolve, reject) {\n _getUserMedia(constraints || { audio: true, video: true }, resolve, reject);\n });\n}\n\nfunction _getUserMedia(constraints, onSuccess, onFailure) {\n if (typeof window !== 'undefined' && typeof navigator !== 'undefined') {\n if (typeof navigator.mediaDevices === 'object' &&\n typeof navigator.mediaDevices.getUserMedia === 'function') {\n navigator.mediaDevices.getUserMedia(constraints).then(onSuccess, onFailure);\n return;\n } else if (typeof navigator.webkitGetUserMedia === 'function') {\n navigator.webkitGetUserMedia(constraints, onSuccess, onFailure);\n return;\n } else if (typeof navigator.mozGetUserMedia === 'function') {\n navigator.mozGetUserMedia(constraints, onSuccess, onFailure);\n return;\n }\n }\n onFailure(new Error('getUserMedia is not supported'));\n}\n\nmodule.exports = getUserMedia;\n","// eslint-disable-next-line no-warning-comments\n// TODO(mroberts): Remove this when we go to the next major version. This is\n// only in place so that we can support ES6 classes without requiring `new`.\n'use strict';\n\nvar _require = require('util'),\n inherits = _require.inherits;\n\nvar LocalVideoTrackClass = require('../localvideotrack');\n\nfunction LocalVideoTrack(mediaStreamTrack, options) {\n var track = new LocalVideoTrackClass(mediaStreamTrack, options);\n Object.setPrototypeOf(track, LocalVideoTrack.prototype);\n return track;\n}\n\ninherits(LocalVideoTrack, LocalVideoTrackClass);\n\nmodule.exports = LocalVideoTrack;","'use strict';\n\nvar WebRTC = {};\n\nObject.defineProperties(WebRTC, {\n getStats: {\n enumerable: true,\n value: require('./getstats')\n },\n getUserMedia: {\n enumerable: true,\n value: require('./getusermedia')\n },\n MediaStream: {\n enumerable: true,\n value: require('./mediastream')\n },\n MediaStreamTrack: {\n enumerable: true,\n value: require('./mediastreamtrack')\n },\n RTCIceCandidate: {\n enumerable: true,\n value: require('./rtcicecandidate')\n },\n RTCPeerConnection: {\n enumerable: true,\n value: require('./rtcpeerconnection')\n },\n RTCSessionDescription: {\n enumerable: true,\n value: require('./rtcsessiondescription')\n },\n version: {\n enumerable: true,\n value: require('../package.json').version\n }\n});\n\nmodule.exports = WebRTC;\n","'use strict';\n\n/**\n * Fraction lost network quality statistics.\n * @property {?number} fractionLost - packets lost\n * @property {?NetworkQualityLevel} level - {@link NetworkQualityLevel} for fraction lost\n */\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar NetworkQualityFractionLostStats =\n/**\n * Construct a {@link NetworkQualityFractionLostStats}.\n * @param {FractionLostStats} fractionLostStats\n */\nfunction NetworkQualityFractionLostStats(_ref) {\n var _ref$fractionLost = _ref.fractionLost,\n fractionLost = _ref$fractionLost === undefined ? null : _ref$fractionLost,\n _ref$level = _ref.level,\n level = _ref$level === undefined ? null : _ref$level;\n\n _classCallCheck(this, NetworkQualityFractionLostStats);\n\n Object.defineProperties(this, {\n fractionLost: {\n value: fractionLost,\n enumerable: true\n },\n level: {\n value: level,\n enumerable: true\n }\n });\n};\n\nmodule.exports = NetworkQualityFractionLostStats;","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar average = require('./average');\nvar SenderOrReceiverReport = require('./senderorreceiverreport');\nvar sum = require('./sum');\n\n/**\n * @interface ReceiverSummary\n * @property {number} bitrate\n * @property {number} fractionLost - 0–1\n * @property {number} [jitter] - s (undefined for video tracks in Chrome)\n */\n\n/**\n * @extends SenderOrReceiverReport\n * @property {number} deltaPacketsLost\n * @property {number} deltaPacketsReceived\n * @property {number} [fractionLost] - 0–1 (undefined in Firefox)\n * @property {number} [jitter] - s (undefined for video tracks in Chrome)\n * @property {number} phonyPacketsLost - 0–1\n */\n\nvar ReceiverReport = function (_SenderOrReceiverRepo) {\n _inherits(ReceiverReport, _SenderOrReceiverRepo);\n\n /**\n * @param {StatsId} id\n * @param {TrackId} trackId\n * @param {number} bitrate - bps\n * @param {number} deltaPacketsLost\n * @param {number} deltaPacketsReceived\n * @param {number} [fractionLost] - 0–1 (undefined in Firefox)\n * @param {number} [jitter] - s (undefined for video tracks in Chrome)\n */\n function ReceiverReport(id, trackId, bitrate, deltaPacketsLost, deltaPacketsReceived, fractionLost, jitter) {\n _classCallCheck(this, ReceiverReport);\n\n var _this = _possibleConstructorReturn(this, (ReceiverReport.__proto__ || Object.getPrototypeOf(ReceiverReport)).call(this, id, trackId, bitrate));\n\n var phonyFractionLost = deltaPacketsReceived > 0 ? deltaPacketsLost / deltaPacketsReceived : 0;\n Object.defineProperties(_this, {\n deltaPacketsLost: {\n enumerable: true,\n value: deltaPacketsLost\n },\n deltaPacketsReceived: {\n enumerable: true,\n value: deltaPacketsReceived\n },\n fractionLost: {\n enumerable: true,\n value: fractionLost\n },\n jitter: {\n enumerable: true,\n value: jitter\n },\n phonyFractionLost: {\n enumerable: true,\n value: phonyFractionLost\n }\n });\n return _this;\n }\n\n /**\n * Create a {@link ReceiverReport}.\n * @param {string} trackId\n * @param {RTCStats} olderStats\n * @param {RTCStats} newerStats\n * @returns {ReceiverReport}\n */\n\n\n _createClass(ReceiverReport, [{\n key: 'summarize',\n\n\n /**\n * Summarize the {@link ReceiveReport}.\n * @returns {ReceiverSummary}\n */\n value: function summarize() {\n return {\n bitrate: this.bitrate,\n fractionLost: typeof this.fractionLost === 'number' ? this.fractionLost : this.phonyFractionLost,\n jitter: this.jitter\n };\n }\n }], [{\n key: 'of',\n value: function of(trackId, olderStats, newerStats) {\n if (olderStats.id !== newerStats.id) {\n throw new Error('RTCStats IDs must match');\n }\n var secondsElapsed = (newerStats.timestamp - olderStats.timestamp) / 1000;\n var deltaBytesReceived = newerStats.bytesReceived - olderStats.bytesReceived;\n var bitrate = secondsElapsed > 0 ? deltaBytesReceived / secondsElapsed * 8 : 0;\n var deltaPacketsLost = Math.max(newerStats.packetsLost - olderStats.packetsLost, 0);\n var deltaPacketsReceived = newerStats.packetsReceived - olderStats.packetsReceived;\n var fractionLost = newerStats.fractionLost,\n jitter = newerStats.jitter;\n\n return new ReceiverReport(olderStats.id, trackId, bitrate, deltaPacketsLost, deltaPacketsReceived, fractionLost, jitter);\n }\n\n /**\n * Summarize {@link ReceiverReport}s by summing and averaging their values.\n * @param {Array} reports\n * @returns {ReceiverSummary}\n */\n\n }, {\n key: 'summarize',\n value: function summarize(reports) {\n var summaries = reports.map(function (report) {\n return report.summarize();\n });\n var bitrate = sum(summaries.map(function (summary) {\n return summary.bitrate;\n }));\n var fractionLost = average(summaries.map(function (summary) {\n return summary.fractionLost;\n }));\n var jitter = average(summaries.map(function (summary) {\n return summary.jitter;\n }));\n return {\n bitrate: bitrate,\n fractionLost: fractionLost,\n jitter: jitter\n };\n }\n }]);\n\n return ReceiverReport;\n}(SenderOrReceiverReport);\n\nmodule.exports = ReceiverReport;","'use strict';\n\nvar _require = require('./media/track/es5'),\n LocalAudioTrack = _require.LocalAudioTrack,\n LocalDataTrack = _require.LocalDataTrack,\n LocalVideoTrack = _require.LocalVideoTrack;\n\n/**\n * @module twilio-video\n * @property {boolean} isSupported - true if the current browser is officially supported by twilio-video.js.\n * @property {string} version - current version of twilio-video.js.\n */\n\n\nvar version = require('../package.json').version;\nvar Video = {};\n\nObject.defineProperties(Video, {\n connect: {\n enumerable: true,\n value: require('./connect')\n },\n createLocalAudioTrack: {\n enumerable: true,\n value: require('./createlocaltrack').audio\n },\n createLocalTracks: {\n enumerable: true,\n value: require('./createlocaltracks')\n },\n createLocalVideoTrack: {\n enumerable: true,\n value: require('./createlocaltrack').video\n },\n isSupported: {\n enumerable: true,\n value: require('./util/support')()\n },\n LocalAudioTrack: {\n enumerable: true,\n value: LocalAudioTrack\n },\n LocalDataTrack: {\n enumerable: true,\n value: LocalDataTrack\n },\n LocalVideoTrack: {\n enumerable: true,\n value: LocalVideoTrack\n },\n version: {\n enumerable: true,\n value: version\n }\n});\n\nmodule.exports = Video;","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ParticipantSignaling = require('./participant');\n\nvar LocalParticipantSignaling = function (_ParticipantSignaling) {\n _inherits(LocalParticipantSignaling, _ParticipantSignaling);\n\n function LocalParticipantSignaling() {\n _classCallCheck(this, LocalParticipantSignaling);\n\n var _this = _possibleConstructorReturn(this, (LocalParticipantSignaling.__proto__ || Object.getPrototypeOf(LocalParticipantSignaling)).call(this));\n\n Object.defineProperties(_this, {\n _publicationsToTrackSenders: {\n value: new Map()\n },\n _trackSendersToPublications: {\n value: new Map()\n }\n });\n return _this;\n }\n\n /**\n * @param {DataTrackSender|MediaTrackSender} trackSender\n * @param {string} name\n * @param {Track.Priority} priority\n * @returns {LocalTrackPublicationSignaling} publication\n */\n\n\n _createClass(LocalParticipantSignaling, [{\n key: 'addTrack',\n value: function addTrack(trackSender, name, priority) {\n var publication = this._createLocalTrackPublicationSignaling(trackSender, name, priority);\n this._trackSendersToPublications.set(trackSender, publication);\n this._publicationsToTrackSenders.set(publication, trackSender);\n _get(LocalParticipantSignaling.prototype.__proto__ || Object.getPrototypeOf(LocalParticipantSignaling.prototype), 'addTrack', this).call(this, publication);\n return this;\n }\n\n /**\n * @param {DataTrackSender|MediaTrackSender} trackSender\n * @returns {?LocalTrackPublicationSignaling}\n */\n\n }, {\n key: 'getPublication',\n value: function getPublication(trackSender) {\n return this._trackSendersToPublications.get(trackSender) || null;\n }\n\n /**\n * @param {LocalTrackPublicationSignaling} trackPublication\n * @returns {?DataTrackSender|MediaTrackSender}\n */\n\n }, {\n key: 'getSender',\n value: function getSender(trackPublication) {\n return this._publicationsToTrackSenders.get(trackPublication) || null;\n }\n\n /**\n * @param {DataTrackSender|MediaTrackSender} trackSender\n * @returns {?LocalTrackPublicationSignaling}\n */\n\n }, {\n key: 'removeTrack',\n value: function removeTrack(trackSender) {\n var publication = this._trackSendersToPublications.get(trackSender);\n if (!publication) {\n return null;\n }\n this._trackSendersToPublications.delete(trackSender);\n this._publicationsToTrackSenders.delete(publication);\n var didDelete = _get(LocalParticipantSignaling.prototype.__proto__ || Object.getPrototypeOf(LocalParticipantSignaling.prototype), 'removeTrack', this).call(this, publication);\n if (didDelete) {\n publication.stop();\n }\n return publication;\n }\n }]);\n\n return LocalParticipantSignaling;\n}(ParticipantSignaling);\n\nmodule.exports = LocalParticipantSignaling;","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar RemoteParticipantSignaling = require('../remoteparticipant');\nvar RemoteTrackPublicationV2 = require('./remotetrackpublication');\n\n/**\n * @extends RemoteParticipantSignaling\n * @property {?number} revision\n */\n\nvar RemoteParticipantV2 = function (_RemoteParticipantSig) {\n _inherits(RemoteParticipantV2, _RemoteParticipantSig);\n\n /**\n * Construct a {@link RemoteParticipantV2}.\n * @param {object} participantState\n * @param {function(string): Promise} getTrackReceiver\n * @param {object} [options]\n */\n function RemoteParticipantV2(participantState, getTrackReceiver, options) {\n var _ret;\n\n _classCallCheck(this, RemoteParticipantV2);\n\n var _this = _possibleConstructorReturn(this, (RemoteParticipantV2.__proto__ || Object.getPrototypeOf(RemoteParticipantV2)).call(this, participantState.sid, participantState.identity));\n\n options = Object.assign({\n RemoteTrackPublicationV2: RemoteTrackPublicationV2\n }, options);\n\n Object.defineProperties(_this, {\n _revision: {\n writable: true,\n value: null\n },\n _RemoteTrackPublicationV2: {\n value: options.RemoteTrackPublicationV2\n },\n _getTrackReceiver: {\n value: getTrackReceiver\n },\n revision: {\n enumerable: true,\n get: function get() {\n return this._revision;\n }\n }\n });\n\n return _ret = _this.update(participantState), _possibleConstructorReturn(_this, _ret);\n }\n\n /**\n * @private\n */\n\n\n _createClass(RemoteParticipantV2, [{\n key: '_getOrCreateTrack',\n value: function _getOrCreateTrack(trackState) {\n var RemoteTrackPublicationV2 = this._RemoteTrackPublicationV2;\n var track = this.tracks.get(trackState.sid);\n if (!track) {\n track = new RemoteTrackPublicationV2(trackState);\n this.addTrack(track);\n }\n return track;\n }\n\n /**\n * Update the {@link RemoteParticipantV2} with the new state.\n * @param {object} participantState\n * @returns {this}\n */\n\n }, {\n key: 'update',\n value: function update(participantState) {\n var _this2 = this;\n\n if (this.revision !== null && participantState.revision <= this.revision) {\n return this;\n }\n this._revision = participantState.revision;\n\n var tracksToKeep = new Set();\n\n participantState.tracks.forEach(function (trackState) {\n var track = _this2._getOrCreateTrack(trackState);\n track.update(trackState);\n tracksToKeep.add(track);\n });\n\n this.tracks.forEach(function (track) {\n if (!tracksToKeep.has(track)) {\n _this2.removeTrack(track);\n }\n });\n\n switch (participantState.state) {\n case 'disconnected':\n this.disconnect();\n break;\n case 'reconnecting':\n this.reconnecting();\n break;\n case 'connected':\n this.connect(this.sid, this.identity);\n break;\n }\n\n return this;\n }\n }]);\n\n return RemoteParticipantV2;\n}(RemoteParticipantSignaling);\n\nmodule.exports = RemoteParticipantV2;","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _require = require('@twilio/webrtc/lib/util'),\n guessBrowser = _require.guessBrowser;\n\nvar PeerConnectionV2 = require('./peerconnection');\nvar MediaTrackSender = require('../../media/track/sender');\nvar QueueingEventEmitter = require('../../queueingeventemitter');\nvar util = require('../../util');\n\nvar _require2 = require('../../util/twilio-video-errors'),\n MediaConnectionError = _require2.MediaConnectionError;\n\nvar isFirefox = guessBrowser() === 'firefox';\n\n/**\n * {@link PeerConnectionManager} manages multiple {@link PeerConnectionV2}s.\n * @extends QueueingEventEmitter\n * @emits PeerConnectionManager#candidates\n * @emits PeerConnectionManager#connectionStateChanged\n * @emits PeerConnectionManager#description\n * @emits PeerConnectionManager#iceConnectionStateChanged\n * @emits PeerConnectionManager#trackAdded\n */\n\nvar PeerConnectionManager = function (_QueueingEventEmitter) {\n _inherits(PeerConnectionManager, _QueueingEventEmitter);\n\n /**\n * Construct {@link PeerConnectionManager}.\n * @param {IceServerSource} iceServerSource\n * @param {EncodingParametersImpl} encodingParameters\n * @param {PreferredCodecs} preferredCodecs\n * @param {object} options\n */\n function PeerConnectionManager(iceServerSource, encodingParameters, preferredCodecs, options) {\n _classCallCheck(this, PeerConnectionManager);\n\n var _this = _possibleConstructorReturn(this, (PeerConnectionManager.__proto__ || Object.getPrototypeOf(PeerConnectionManager)).call(this));\n\n options = Object.assign({\n audioContextFactory: isFirefox ? require('../../webaudio/audiocontext') : null,\n PeerConnectionV2: PeerConnectionV2\n }, options);\n\n var audioContext = options.audioContextFactory ? options.audioContextFactory.getOrCreate(_this) : null;\n\n // NOTE(mroberts): If we're using an AudioContext, we don't need to specify\n // `offerToReceiveAudio` in RTCOfferOptions.\n var offerOptions = audioContext ? { offerToReceiveVideo: true } : { offerToReceiveAudio: true, offerToReceiveVideo: true };\n\n Object.defineProperties(_this, {\n _audioContextFactory: {\n value: options.audioContextFactory\n },\n _closedPeerConnectionIds: {\n value: new Set()\n },\n _configuration: {\n writable: true,\n value: null\n },\n _configurationDeferred: {\n writable: true,\n value: util.defer()\n },\n _connectionState: {\n value: 'new',\n writable: true\n },\n _dummyAudioTrackSender: {\n value: audioContext ? new MediaTrackSender(createDummyAudioMediaStreamTrack(audioContext)) : null\n },\n _encodingParameters: {\n value: encodingParameters\n },\n _iceConnectionState: {\n writable: true,\n value: 'new'\n },\n _iceServerSource: {\n value: iceServerSource\n },\n _dataTrackSenders: {\n writable: true,\n value: new Set()\n },\n _lastConnectionState: {\n value: 'new',\n writable: true\n },\n _lastIceConnectionState: {\n writable: true,\n value: 'new'\n },\n _mediaTrackSenders: {\n writable: true,\n value: new Set()\n },\n _offerOptions: {\n value: offerOptions\n },\n _peerConnections: {\n value: new Map()\n },\n _preferredCodecs: {\n value: preferredCodecs\n },\n _sessionTimeout: {\n value: null,\n writable: true\n },\n _PeerConnectionV2: {\n value: options.PeerConnectionV2\n }\n });\n return _this;\n }\n\n /**\n * A summarized RTCPeerConnectionState across all the\n * {@link PeerConnectionManager}'s underlying {@link PeerConnectionV2}s.\n * @property {RTCPeerConnectionState}\n */\n\n\n _createClass(PeerConnectionManager, [{\n key: '_closeAbsentPeerConnections',\n\n\n /**\n * Close the {@link PeerConnectionV2}s which are no longer relevant.\n * @param {Array} peerConnectionStates\n * @returns {this}\n */\n value: function _closeAbsentPeerConnections(peerConnectionStates) {\n var peerConnectionIds = new Set(peerConnectionStates.map(function (peerConnectionState) {\n return peerConnectionState.id;\n }));\n this._peerConnections.forEach(function (peerConnection) {\n if (!peerConnectionIds.has(peerConnection.id)) {\n peerConnection._close();\n }\n });\n return this;\n }\n\n /**\n * Get the {@link PeerConnectionManager}'s configuration.\n * @private\n * @returns {Promise}\n */\n\n }, {\n key: '_getConfiguration',\n value: function _getConfiguration() {\n return this._configurationDeferred.promise;\n }\n\n /**\n * Get or create a {@link PeerConnectionV2}.\n * @private\n * @param {string} id\n * @param {object} [configuration]\n * @returns {PeerConnectionV2}\n */\n\n }, {\n key: '_getOrCreate',\n value: function _getOrCreate(id, configuration) {\n var _this2 = this;\n\n var self = this;\n var peerConnection = this._peerConnections.get(id);\n if (!peerConnection) {\n var _PeerConnectionV = this._PeerConnectionV2;\n\n var options = Object.assign({\n dummyAudioMediaStreamTrack: this._dummyAudioTrackSender ? this._dummyAudioTrackSender.track : null,\n offerOptions: this._offerOptions\n }, this._sessionTimeout ? {\n sessionTimeout: this._sessionTimeout\n } : {}, configuration);\n\n try {\n peerConnection = new _PeerConnectionV(id, this._encodingParameters, this._preferredCodecs, options);\n } catch (e) {\n throw new MediaConnectionError();\n }\n\n this._peerConnections.set(peerConnection.id, peerConnection);\n peerConnection.on('candidates', this.queue.bind(this, 'candidates'));\n peerConnection.on('description', this.queue.bind(this, 'description'));\n peerConnection.on('trackAdded', this.queue.bind(this, 'trackAdded'));\n peerConnection.on('stateChanged', function stateChanged(state) {\n if (state === 'closed') {\n peerConnection.removeListener('stateChanged', stateChanged);\n self._peerConnections.delete(peerConnection.id);\n self._closedPeerConnectionIds.add(peerConnection.id);\n updateConnectionState(self);\n updateIceConnectionState(self);\n }\n });\n peerConnection.on('connectionStateChanged', function () {\n return updateConnectionState(_this2);\n });\n peerConnection.on('iceConnectionStateChanged', function () {\n return updateIceConnectionState(_this2);\n });\n\n this._dataTrackSenders.forEach(peerConnection.addDataTrackSender, peerConnection);\n this._mediaTrackSenders.forEach(peerConnection.addMediaTrackSender, peerConnection);\n\n updateIceConnectionState(this);\n }\n return peerConnection;\n }\n\n /**\n * Close all the {@link PeerConnectionV2}s in this {@link PeerConnectionManager}.\n * @returns {this}\n */\n\n }, {\n key: 'close',\n value: function close() {\n if (this._iceServerSource.isStarted) {\n this._iceServerSource.stop();\n }\n this._peerConnections.forEach(function (peerConnection) {\n peerConnection.close();\n });\n if (this._dummyAudioTrackSender) {\n this._dummyAudioTrackSender.stop();\n }\n if (this._audioContextFactory) {\n this._audioContextFactory.release(this);\n }\n updateIceConnectionState(this);\n return this;\n }\n\n /**\n * Create a new {@link PeerConnectionV2} on this {@link PeerConnectionManager}.\n * Then, create a new offer with the newly-created {@link PeerConnectionV2}.\n * @return {Promise}\n */\n\n }, {\n key: 'createAndOffer',\n value: function createAndOffer() {\n var _this3 = this;\n\n return this._getConfiguration().then(function (configuration) {\n var id = void 0;\n do {\n id = util.makeUUID();\n } while (_this3._peerConnections.has(id));\n\n return _this3._getOrCreate(id, configuration);\n }).then(function (peerConnection) {\n return peerConnection.offer();\n }).then(function () {\n return _this3;\n });\n }\n\n /**\n * Get the {@link DataTrackReceiver}s and {@link MediaTrackReceiver}s of all\n * the {@link PeerConnectionV2}s.\n * @returns {Array} trackReceivers\n */\n\n }, {\n key: 'getTrackReceivers',\n value: function getTrackReceivers() {\n return util.flatMap(this._peerConnections, function (peerConnection) {\n return peerConnection.getTrackReceivers();\n });\n }\n\n /**\n * Get the states of all {@link PeerConnectionV2}s.\n * @returns {Array}\n */\n\n }, {\n key: 'getStates',\n value: function getStates() {\n var peerConnectionStates = [];\n this._peerConnections.forEach(function (peerConnection) {\n var peerConnectionState = peerConnection.getState();\n if (peerConnectionState) {\n peerConnectionStates.push(peerConnectionState);\n }\n });\n return peerConnectionStates;\n }\n\n /**\n * Set the {@link PeerConnectionManager}'s configuration.\n * @param {object} configuration\n * @returns {this}\n */\n\n }, {\n key: 'setConfiguration',\n value: function setConfiguration(configuration) {\n if (this._configuration) {\n this._configurationDeferred = util.defer();\n this._peerConnections.forEach(function (peerConnection) {\n peerConnection.setConfiguration(configuration);\n });\n }\n this._configuration = configuration;\n this._configurationDeferred.resolve(configuration);\n return this;\n }\n\n /**\n * Set the ICE reconnect timeout period for all {@link PeerConnectionV2}s.\n * @param {number} period - Period in milliseconds.\n * @returns {this}\n */\n\n }, {\n key: 'setIceReconnectTimeout',\n value: function setIceReconnectTimeout(period) {\n if (this._sessionTimeout === null) {\n this._peerConnections.forEach(function (peerConnection) {\n peerConnection.setIceReconnectTimeout(period);\n });\n this._sessionTimeout = period;\n }\n return this;\n }\n\n /**\n * Set the {@link DataTrackSender}s and {@link MediaTrackSender}s on the\n * {@link PeerConnectionManager}'s underlying {@link PeerConnectionV2}s.\n * @param {Array} trackSenders\n * @returns {this}\n */\n\n }, {\n key: 'setTrackSenders',\n value: function setTrackSenders(trackSenders) {\n var dataTrackSenders = new Set(trackSenders.filter(function (trackSender) {\n return trackSender.kind === 'data';\n }));\n\n var mediaTrackSenders = new Set(trackSenders.filter(function (trackSender) {\n return trackSender && (trackSender.kind === 'audio' || trackSender.kind === 'video');\n }));\n\n var changes = getTrackSenderChanges(this, dataTrackSenders, mediaTrackSenders);\n this._dataTrackSenders = dataTrackSenders;\n this._mediaTrackSenders = mediaTrackSenders;\n applyTrackSenderChanges(this, changes);\n\n return this;\n }\n\n /**\n * Update the {@link PeerConnectionManager}.\n * @param {Array} peerConnectionStates\n * @param {boolean} [synced=false]\n * @returns {Promise}\n */\n\n }, {\n key: 'update',\n value: function update(peerConnectionStates) {\n var _this4 = this;\n\n var synced = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n if (synced) {\n this._closeAbsentPeerConnections(peerConnectionStates);\n }\n return this._getConfiguration().then(function (configuration) {\n return Promise.all(peerConnectionStates.map(function (peerConnectionState) {\n if (_this4._closedPeerConnectionIds.has(peerConnectionState.id)) {\n return null;\n }\n var peerConnection = _this4._getOrCreate(peerConnectionState.id, configuration);\n return peerConnection.update(peerConnectionState);\n }));\n }).then(function () {\n return _this4;\n });\n }\n\n /**\n * Get the {@link PeerConnectionManager}'s media statistics.\n * @returns {Promise.>}\n */\n\n }, {\n key: 'getStats',\n value: function getStats() {\n var peerConnections = Array.from(this._peerConnections.values());\n return Promise.all(peerConnections.map(function (peerConnection) {\n return peerConnection.getStats().then(function (response) {\n return [peerConnection.id, response];\n });\n })).then(function (responses) {\n return new Map(responses);\n });\n }\n }, {\n key: 'connectionState',\n get: function get() {\n return this._connectionState;\n }\n\n /**\n * A summarized RTCIceConnectionState across all the\n * {@link PeerConnectionManager}'s underlying {@link PeerConnectionV2}s.\n * @property {RTCIceConnectionState}\n */\n\n }, {\n key: 'iceConnectionState',\n get: function get() {\n return this._iceConnectionState;\n }\n }]);\n\n return PeerConnectionManager;\n}(QueueingEventEmitter);\n\n/**\n * Create a dummy audio MediaStreamTrack with the given AudioContext.\n * @private\n * @param {AudioContext} audioContext\n * @return {MediaStreamTrack}\n */\n\n\nfunction createDummyAudioMediaStreamTrack(audioContext) {\n var mediaStreamDestination = audioContext.createMediaStreamDestination();\n return mediaStreamDestination.stream.getAudioTracks()[0];\n}\n\n/**\n * @event {PeerConnectionManager#candidates}\n * @param {object} candidates\n */\n\n/**\n * @event {PeerConnectionManager#connectionStateChanged}\n */\n\n/**\n * @event {PeerConnectionManager#description}\n * @param {object} description\n */\n\n/**\n * @event {PeerConnectionManager#iceConnectionStateChanged}\n */\n\n/**\n * @event {PeerConnectionManager#trackAdded}\n * @param {MediaStreamTrack|DataTrackReceiver} mediaStreamTrackOrDataTrackReceiver\n */\n\n/**\n * Apply {@link TrackSenderChanges}.\n * @param {PeerConnectionManager} peerConnectionManager\n * @param {TrackSenderChanges} changes\n * @returns {void}\n */\nfunction applyTrackSenderChanges(peerConnectionManager, changes) {\n if (changes.data.add.size || changes.data.remove.size || changes.media.add.size || changes.media.remove.size) {\n peerConnectionManager._peerConnections.forEach(function (peerConnection) {\n changes.data.remove.forEach(peerConnection.removeDataTrackSender, peerConnection);\n changes.media.remove.forEach(peerConnection.removeMediaTrackSender, peerConnection);\n changes.data.add.forEach(peerConnection.addDataTrackSender, peerConnection);\n changes.media.add.forEach(peerConnection.addMediaTrackSender, peerConnection);\n if (changes.media.add.size || changes.media.remove.size || changes.data.add.size && !peerConnection.isApplicationSectionNegotiated) {\n peerConnection.offer();\n }\n });\n }\n}\n\n/**\n * @interface DataTrackSenderChanges\n * @property {Set} add\n * @property {Set} remove\n */\n\n/**\n * Get the {@Link DataTrackSender} changes.\n * @param {PeerConnectionManager} peerConnectionManager\n * @param {Array} dataTrackSenders\n * @returns {DataTrackSenderChanges} changes\n */\nfunction getDataTrackSenderChanges(peerConnectionManager, dataTrackSenders) {\n var dataTrackSendersToAdd = util.difference(dataTrackSenders, peerConnectionManager._dataTrackSenders);\n var dataTrackSendersToRemove = util.difference(peerConnectionManager._dataTrackSenders, dataTrackSenders);\n return {\n add: dataTrackSendersToAdd,\n remove: dataTrackSendersToRemove\n };\n}\n\n/**\n * @interface TrackSenderChanges\n * @property {DataTrackSenderChanges} data\n * @property {MediaTrackSenderChanges} media\n */\n\n/**\n * Get {@link DataTrackSender} and {@link MediaTrackSender} changes.\n * @param {PeerConnectionManager} peerConnectionManager\n * @param {Array} dataTrackSenders\n * @param {Array} mediaTrackSenders\n * @returns {TrackSenderChanges} changes\n */\nfunction getTrackSenderChanges(peerConnectionManager, dataTrackSenders, mediaTrackSenders) {\n return {\n data: getDataTrackSenderChanges(peerConnectionManager, dataTrackSenders),\n media: getMediaTrackSenderChanges(peerConnectionManager, mediaTrackSenders)\n };\n}\n\n/**\n * @interface MediaTrackSenderChanges\n * @property {Set} add\n * @property {Set} remove\n */\n\n/**\n * Get the {@link MediaTrackSender} changes.\n * @param {PeerConnectionManager} peerConnectionManager\n * @param {Array} mediaTrackSenders\n * @returns {MediaTrackSenderChanges} changes\n */\nfunction getMediaTrackSenderChanges(peerConnectionManager, mediaTrackSenders) {\n var mediaTrackSendersToAdd = util.difference(mediaTrackSenders, peerConnectionManager._mediaTrackSenders);\n var mediaTrackSendersToRemove = util.difference(peerConnectionManager._mediaTrackSenders, mediaTrackSenders);\n return {\n add: mediaTrackSendersToAdd,\n remove: mediaTrackSendersToRemove\n };\n}\n\n/**\n * This object maps RTCIceConnectionState and RTCPeerConnectionState values to a \"rank\".\n */\nvar toRank = {\n new: 0,\n checking: 1,\n connecting: 2,\n connected: 3,\n completed: 4,\n disconnected: -1,\n failed: -2,\n closed: -3\n};\n\n/**\n * This object maps \"rank\" back to RTCIceConnectionState or RTCPeerConnectionState values.\n */\nvar fromRank = void 0;\n\n/**\n * `Object.keys` is not supported in older browsers, so we can't just\n * synchronously call it in this module; we need to defer invoking it until we\n * know we're in a modern environment (i.e., anything that supports WebRTC).\n * @returns {object} fromRank\n */\nfunction createFromRank() {\n return Object.keys(toRank).reduce(function (fromRank, state) {\n return Object.assign(fromRank, _defineProperty({}, toRank[state], state));\n }, {});\n}\n\n/**\n * Summarize RTCIceConnectionStates or RTCPeerConnectionStates.\n * @param {Array|Array} states\n * @returns {RTCIceConnectionState|RTCPeerConnectionState} summary\n */\nfunction summarizeIceOrPeerConnectionStates(states) {\n if (!states.length) {\n return 'new';\n }\n fromRank = fromRank || createFromRank();\n return states.reduce(function (state1, state2) {\n return fromRank[Math.max(toRank[state1], toRank[state2])];\n });\n}\n\n/**\n * Update the {@link PeerConnectionManager}'s `iceConnectionState`, and emit an\n * \"iceConnectionStateChanged\" event, if necessary.\n * @param {PeerConnectionManager} pcm\n * @returns {void}\n */\nfunction updateIceConnectionState(pcm) {\n pcm._lastIceConnectionState = pcm.iceConnectionState;\n pcm._iceConnectionState = summarizeIceOrPeerConnectionStates([].concat(_toConsumableArray(pcm._peerConnections.values())).map(function (pcv2) {\n return pcv2.iceConnectionState;\n }));\n if (pcm.iceConnectionState !== pcm._lastIceConnectionState) {\n pcm.emit('iceConnectionStateChanged');\n }\n}\n\n/**\n * Update the {@link PeerConnectionManager}'s `connectionState`, and emit a\n * \"connectionStateChanged\" event, if necessary.\n * @param {PeerConnectionManager} pcm\n * @returns {void}\n */\nfunction updateConnectionState(pcm) {\n pcm._lastConnectionState = pcm.connectionState;\n pcm._connectionState = summarizeIceOrPeerConnectionStates([].concat(_toConsumableArray(pcm._peerConnections.values())).map(function (pcv2) {\n return pcv2.connectionState;\n }));\n if (pcm.connectionState !== pcm._lastConnectionState) {\n pcm.emit('connectionStateChanged');\n }\n}\n\nmodule.exports = PeerConnectionManager;","/* eslint no-undefined:0 */\n'use strict';\n\n/**\n * @param {Array} xs\n * @returns {number|undefined}\n */\n\nfunction average(xs) {\n xs = xs.filter(function (x) {\n return typeof x === 'number';\n });\n return xs.length < 1 ? undefined : xs.reduce(function (y, x) {\n return x + y;\n }) / xs.length;\n}\n\nmodule.exports = average;","'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar NetworkQualityBandwidthStats = require('./networkqualitybandwidthstats');\nvar NetworkQualityFractionLostStats = require('./networkqualityfractionloststats');\nvar NetworkQualityLatencyStats = require('./networkqualitylatencystats');\n\n/**\n * Network quality statistics shared between {@link NetworkQualitySendStats} and\n * {@link NetworkQualityRecvStats} based on which a {@link Participant}'s\n * {@link NetworkQualityMediaStats}#send or\n * {@link NetworkQualityMediaStats}#recv is calculated.\n * @property {?NetworkQualityBandwidthStats} bandwidth - bandwidth statistics\n * @property {?NetworkQualityLatencyStats} latency - latency statistics\n * @property {?NetworkQualityFractionLostStats} fractionLost - fraction lost statistics\n */\n\nvar NetworkQualitySendOrRecvStats =\n/**\n * Construct a {@link NetworkQualitySendOrRecvStats}.\n * @param {SendOrRecvStats} sendOrRecvStats\n */\nfunction NetworkQualitySendOrRecvStats(_ref) {\n var _ref$bandwidth = _ref.bandwidth,\n bandwidth = _ref$bandwidth === undefined ? null : _ref$bandwidth,\n _ref$fractionLost = _ref.fractionLost,\n fractionLost = _ref$fractionLost === undefined ? null : _ref$fractionLost,\n _ref$latency = _ref.latency,\n latency = _ref$latency === undefined ? null : _ref$latency;\n\n _classCallCheck(this, NetworkQualitySendOrRecvStats);\n\n Object.defineProperties(this, {\n bandwidth: {\n value: bandwidth ? new NetworkQualityBandwidthStats(bandwidth) : null,\n enumerable: true\n },\n fractionLost: {\n value: fractionLost ? new NetworkQualityFractionLostStats(fractionLost) : null,\n enumerable: true\n },\n latency: {\n value: latency ? new NetworkQualityLatencyStats(latency) : null,\n enumerable: true\n }\n });\n};\n\nmodule.exports = NetworkQualitySendOrRecvStats;","// NOTE: Do not edit this file. This code is auto-generated. Contact the\n// Twilio SDK Team for more information.\n\n'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar TwilioError = require('./twilioerror');\nvar TwilioErrorByCode = {};\n\n/**\n * Create a {@link TwilioError} for a given code and message.\n * @private\n * @param {number} [code] - Error code\n * @param {string} [message] - Error message\n * @returns {TwilioError}\n */\nexports.createTwilioError = function createTwilioError(code, message) {\n code = typeof code === 'number' ? code : 0;\n message = typeof message === 'string' && message ? message : 'Unknown error';\n return TwilioErrorByCode[code] ? new TwilioErrorByCode[code]() : new TwilioError(code, message);\n};\n\n/**\n * @class AccessTokenInvalidError\n * @classdesc Raised whenever the AccessToken used for connecting to a Room is invalid.\n * @extends TwilioError\n * @property {number} code - 20101\n * @property {string} message - 'Invalid Access Token'\n */\n\nvar AccessTokenInvalidError = function (_TwilioError) {\n _inherits(AccessTokenInvalidError, _TwilioError);\n\n function AccessTokenInvalidError() {\n _classCallCheck(this, AccessTokenInvalidError);\n\n return _possibleConstructorReturn(this, (AccessTokenInvalidError.__proto__ || Object.getPrototypeOf(AccessTokenInvalidError)).call(this, 20101, 'Invalid Access Token'));\n }\n\n return AccessTokenInvalidError;\n}(TwilioError);\n\nexports.AccessTokenInvalidError = AccessTokenInvalidError;\nObject.defineProperty(TwilioErrorByCode, 20101, { value: AccessTokenInvalidError });\n\n/**\n * @class AccessTokenHeaderInvalidError\n * @classdesc Raised whenever the AccessToken used for connecting to a Room has an invalid header.\n * @extends TwilioError\n * @property {number} code - 20102\n * @property {string} message - 'Invalid Access Token header'\n */\n\nvar AccessTokenHeaderInvalidError = function (_TwilioError2) {\n _inherits(AccessTokenHeaderInvalidError, _TwilioError2);\n\n function AccessTokenHeaderInvalidError() {\n _classCallCheck(this, AccessTokenHeaderInvalidError);\n\n return _possibleConstructorReturn(this, (AccessTokenHeaderInvalidError.__proto__ || Object.getPrototypeOf(AccessTokenHeaderInvalidError)).call(this, 20102, 'Invalid Access Token header'));\n }\n\n return AccessTokenHeaderInvalidError;\n}(TwilioError);\n\nexports.AccessTokenHeaderInvalidError = AccessTokenHeaderInvalidError;\nObject.defineProperty(TwilioErrorByCode, 20102, { value: AccessTokenHeaderInvalidError });\n\n/**\n * @class AccessTokenIssuerInvalidError\n * @classdesc Raised whenever the AccessToken used for connecting to a Room contains an invalid issuer or subject.\n * @extends TwilioError\n * @property {number} code - 20103\n * @property {string} message - 'Invalid Access Token issuer/subject'\n */\n\nvar AccessTokenIssuerInvalidError = function (_TwilioError3) {\n _inherits(AccessTokenIssuerInvalidError, _TwilioError3);\n\n function AccessTokenIssuerInvalidError() {\n _classCallCheck(this, AccessTokenIssuerInvalidError);\n\n return _possibleConstructorReturn(this, (AccessTokenIssuerInvalidError.__proto__ || Object.getPrototypeOf(AccessTokenIssuerInvalidError)).call(this, 20103, 'Invalid Access Token issuer/subject'));\n }\n\n return AccessTokenIssuerInvalidError;\n}(TwilioError);\n\nexports.AccessTokenIssuerInvalidError = AccessTokenIssuerInvalidError;\nObject.defineProperty(TwilioErrorByCode, 20103, { value: AccessTokenIssuerInvalidError });\n\n/**\n * @class AccessTokenExpiredError\n * @classdesc Raised whenever the AccessToken used for connecting, or reconnecting to a Room has expired.\n * @extends TwilioError\n * @property {number} code - 20104\n * @property {string} message - 'Access Token expired or expiration date invalid'\n */\n\nvar AccessTokenExpiredError = function (_TwilioError4) {\n _inherits(AccessTokenExpiredError, _TwilioError4);\n\n function AccessTokenExpiredError() {\n _classCallCheck(this, AccessTokenExpiredError);\n\n return _possibleConstructorReturn(this, (AccessTokenExpiredError.__proto__ || Object.getPrototypeOf(AccessTokenExpiredError)).call(this, 20104, 'Access Token expired or expiration date invalid'));\n }\n\n return AccessTokenExpiredError;\n}(TwilioError);\n\nexports.AccessTokenExpiredError = AccessTokenExpiredError;\nObject.defineProperty(TwilioErrorByCode, 20104, { value: AccessTokenExpiredError });\n\n/**\n * @class AccessTokenNotYetValidError\n * @classdesc Raised whenever the AccessToken used for connecting to a Room is not yet valid.\n * @extends TwilioError\n * @property {number} code - 20105\n * @property {string} message - 'Access Token not yet valid'\n */\n\nvar AccessTokenNotYetValidError = function (_TwilioError5) {\n _inherits(AccessTokenNotYetValidError, _TwilioError5);\n\n function AccessTokenNotYetValidError() {\n _classCallCheck(this, AccessTokenNotYetValidError);\n\n return _possibleConstructorReturn(this, (AccessTokenNotYetValidError.__proto__ || Object.getPrototypeOf(AccessTokenNotYetValidError)).call(this, 20105, 'Access Token not yet valid'));\n }\n\n return AccessTokenNotYetValidError;\n}(TwilioError);\n\nexports.AccessTokenNotYetValidError = AccessTokenNotYetValidError;\nObject.defineProperty(TwilioErrorByCode, 20105, { value: AccessTokenNotYetValidError });\n\n/**\n * @class AccessTokenGrantsInvalidError\n * @classdesc Raised whenever the AccessToken used for connecting to a Room has invalid grants.\n * @extends TwilioError\n * @property {number} code - 20106\n * @property {string} message - 'Invalid Access Token grants'\n */\n\nvar AccessTokenGrantsInvalidError = function (_TwilioError6) {\n _inherits(AccessTokenGrantsInvalidError, _TwilioError6);\n\n function AccessTokenGrantsInvalidError() {\n _classCallCheck(this, AccessTokenGrantsInvalidError);\n\n return _possibleConstructorReturn(this, (AccessTokenGrantsInvalidError.__proto__ || Object.getPrototypeOf(AccessTokenGrantsInvalidError)).call(this, 20106, 'Invalid Access Token grants'));\n }\n\n return AccessTokenGrantsInvalidError;\n}(TwilioError);\n\nexports.AccessTokenGrantsInvalidError = AccessTokenGrantsInvalidError;\nObject.defineProperty(TwilioErrorByCode, 20106, { value: AccessTokenGrantsInvalidError });\n\n/**\n * @class AccessTokenSignatureInvalidError\n * @classdesc Raised whenever the AccessToken used for connecting to a Room has an invalid signature.\n * @extends TwilioError\n * @property {number} code - 20107\n * @property {string} message - 'Invalid Access Token signature'\n */\n\nvar AccessTokenSignatureInvalidError = function (_TwilioError7) {\n _inherits(AccessTokenSignatureInvalidError, _TwilioError7);\n\n function AccessTokenSignatureInvalidError() {\n _classCallCheck(this, AccessTokenSignatureInvalidError);\n\n return _possibleConstructorReturn(this, (AccessTokenSignatureInvalidError.__proto__ || Object.getPrototypeOf(AccessTokenSignatureInvalidError)).call(this, 20107, 'Invalid Access Token signature'));\n }\n\n return AccessTokenSignatureInvalidError;\n}(TwilioError);\n\nexports.AccessTokenSignatureInvalidError = AccessTokenSignatureInvalidError;\nObject.defineProperty(TwilioErrorByCode, 20107, { value: AccessTokenSignatureInvalidError });\n\n/**\n * @class SignalingConnectionError\n * @classdesc Raised whenever a signaling connection error occurs that is not covered by a more specific error code.\n * @extends TwilioError\n * @property {number} code - 53000\n * @property {string} message - 'Signaling connection error'\n */\n\nvar SignalingConnectionError = function (_TwilioError8) {\n _inherits(SignalingConnectionError, _TwilioError8);\n\n function SignalingConnectionError() {\n _classCallCheck(this, SignalingConnectionError);\n\n return _possibleConstructorReturn(this, (SignalingConnectionError.__proto__ || Object.getPrototypeOf(SignalingConnectionError)).call(this, 53000, 'Signaling connection error'));\n }\n\n return SignalingConnectionError;\n}(TwilioError);\n\nexports.SignalingConnectionError = SignalingConnectionError;\nObject.defineProperty(TwilioErrorByCode, 53000, { value: SignalingConnectionError });\n\n/**\n * @class SignalingConnectionDisconnectedError\n * @classdesc Raised whenever the signaling connection is unexpectedly disconnected.\n * @extends TwilioError\n * @property {number} code - 53001\n * @property {string} message - 'Signaling connection disconnected'\n */\n\nvar SignalingConnectionDisconnectedError = function (_TwilioError9) {\n _inherits(SignalingConnectionDisconnectedError, _TwilioError9);\n\n function SignalingConnectionDisconnectedError() {\n _classCallCheck(this, SignalingConnectionDisconnectedError);\n\n return _possibleConstructorReturn(this, (SignalingConnectionDisconnectedError.__proto__ || Object.getPrototypeOf(SignalingConnectionDisconnectedError)).call(this, 53001, 'Signaling connection disconnected'));\n }\n\n return SignalingConnectionDisconnectedError;\n}(TwilioError);\n\nexports.SignalingConnectionDisconnectedError = SignalingConnectionDisconnectedError;\nObject.defineProperty(TwilioErrorByCode, 53001, { value: SignalingConnectionDisconnectedError });\n\n/**\n * @class SignalingConnectionTimeoutError\n * @classdesc Raised when connection liveliness checks fail, or when the signaling session expires.\n * @extends TwilioError\n * @property {number} code - 53002\n * @property {string} message - 'Signaling connection timed out'\n */\n\nvar SignalingConnectionTimeoutError = function (_TwilioError10) {\n _inherits(SignalingConnectionTimeoutError, _TwilioError10);\n\n function SignalingConnectionTimeoutError() {\n _classCallCheck(this, SignalingConnectionTimeoutError);\n\n return _possibleConstructorReturn(this, (SignalingConnectionTimeoutError.__proto__ || Object.getPrototypeOf(SignalingConnectionTimeoutError)).call(this, 53002, 'Signaling connection timed out'));\n }\n\n return SignalingConnectionTimeoutError;\n}(TwilioError);\n\nexports.SignalingConnectionTimeoutError = SignalingConnectionTimeoutError;\nObject.defineProperty(TwilioErrorByCode, 53002, { value: SignalingConnectionTimeoutError });\n\n/**\n * @class SignalingIncomingMessageInvalidError\n * @classdesc Raised whenever the Client receives a message from the Server that the Client cannot handle.\n * @extends TwilioError\n * @property {number} code - 53003\n * @property {string} message - 'Client received an invalid signaling message'\n */\n\nvar SignalingIncomingMessageInvalidError = function (_TwilioError11) {\n _inherits(SignalingIncomingMessageInvalidError, _TwilioError11);\n\n function SignalingIncomingMessageInvalidError() {\n _classCallCheck(this, SignalingIncomingMessageInvalidError);\n\n return _possibleConstructorReturn(this, (SignalingIncomingMessageInvalidError.__proto__ || Object.getPrototypeOf(SignalingIncomingMessageInvalidError)).call(this, 53003, 'Client received an invalid signaling message'));\n }\n\n return SignalingIncomingMessageInvalidError;\n}(TwilioError);\n\nexports.SignalingIncomingMessageInvalidError = SignalingIncomingMessageInvalidError;\nObject.defineProperty(TwilioErrorByCode, 53003, { value: SignalingIncomingMessageInvalidError });\n\n/**\n * @class SignalingOutgoingMessageInvalidError\n * @classdesc Raised whenever the Client sends a message to the Server that the Server cannot handle.\n * @extends TwilioError\n * @property {number} code - 53004\n * @property {string} message - 'Client sent an invalid signaling message'\n */\n\nvar SignalingOutgoingMessageInvalidError = function (_TwilioError12) {\n _inherits(SignalingOutgoingMessageInvalidError, _TwilioError12);\n\n function SignalingOutgoingMessageInvalidError() {\n _classCallCheck(this, SignalingOutgoingMessageInvalidError);\n\n return _possibleConstructorReturn(this, (SignalingOutgoingMessageInvalidError.__proto__ || Object.getPrototypeOf(SignalingOutgoingMessageInvalidError)).call(this, 53004, 'Client sent an invalid signaling message'));\n }\n\n return SignalingOutgoingMessageInvalidError;\n}(TwilioError);\n\nexports.SignalingOutgoingMessageInvalidError = SignalingOutgoingMessageInvalidError;\nObject.defineProperty(TwilioErrorByCode, 53004, { value: SignalingOutgoingMessageInvalidError });\n\n/**\n * @class RoomNameInvalidError\n * @classdesc Raised whenever a Room name is invalid, and the scenario is not covered by a more specific error code.\n * @extends TwilioError\n * @property {number} code - 53100\n * @property {string} message - 'Room name is invalid'\n */\n\nvar RoomNameInvalidError = function (_TwilioError13) {\n _inherits(RoomNameInvalidError, _TwilioError13);\n\n function RoomNameInvalidError() {\n _classCallCheck(this, RoomNameInvalidError);\n\n return _possibleConstructorReturn(this, (RoomNameInvalidError.__proto__ || Object.getPrototypeOf(RoomNameInvalidError)).call(this, 53100, 'Room name is invalid'));\n }\n\n return RoomNameInvalidError;\n}(TwilioError);\n\nexports.RoomNameInvalidError = RoomNameInvalidError;\nObject.defineProperty(TwilioErrorByCode, 53100, { value: RoomNameInvalidError });\n\n/**\n * @class RoomNameTooLongError\n * @classdesc Raised whenever a Room name is too long.\n * @extends TwilioError\n * @property {number} code - 53101\n * @property {string} message - 'Room name is too long'\n */\n\nvar RoomNameTooLongError = function (_TwilioError14) {\n _inherits(RoomNameTooLongError, _TwilioError14);\n\n function RoomNameTooLongError() {\n _classCallCheck(this, RoomNameTooLongError);\n\n return _possibleConstructorReturn(this, (RoomNameTooLongError.__proto__ || Object.getPrototypeOf(RoomNameTooLongError)).call(this, 53101, 'Room name is too long'));\n }\n\n return RoomNameTooLongError;\n}(TwilioError);\n\nexports.RoomNameTooLongError = RoomNameTooLongError;\nObject.defineProperty(TwilioErrorByCode, 53101, { value: RoomNameTooLongError });\n\n/**\n * @class RoomNameCharsInvalidError\n * @classdesc Raised whenever a Room name contains invalid characters.\n * @extends TwilioError\n * @property {number} code - 53102\n * @property {string} message - 'Room name contains invalid characters'\n */\n\nvar RoomNameCharsInvalidError = function (_TwilioError15) {\n _inherits(RoomNameCharsInvalidError, _TwilioError15);\n\n function RoomNameCharsInvalidError() {\n _classCallCheck(this, RoomNameCharsInvalidError);\n\n return _possibleConstructorReturn(this, (RoomNameCharsInvalidError.__proto__ || Object.getPrototypeOf(RoomNameCharsInvalidError)).call(this, 53102, 'Room name contains invalid characters'));\n }\n\n return RoomNameCharsInvalidError;\n}(TwilioError);\n\nexports.RoomNameCharsInvalidError = RoomNameCharsInvalidError;\nObject.defineProperty(TwilioErrorByCode, 53102, { value: RoomNameCharsInvalidError });\n\n/**\n * @class RoomCreateFailedError\n * @classdesc Raised whenever the Server is unable to create a Room.\n * @extends TwilioError\n * @property {number} code - 53103\n * @property {string} message - 'Unable to create Room'\n */\n\nvar RoomCreateFailedError = function (_TwilioError16) {\n _inherits(RoomCreateFailedError, _TwilioError16);\n\n function RoomCreateFailedError() {\n _classCallCheck(this, RoomCreateFailedError);\n\n return _possibleConstructorReturn(this, (RoomCreateFailedError.__proto__ || Object.getPrototypeOf(RoomCreateFailedError)).call(this, 53103, 'Unable to create Room'));\n }\n\n return RoomCreateFailedError;\n}(TwilioError);\n\nexports.RoomCreateFailedError = RoomCreateFailedError;\nObject.defineProperty(TwilioErrorByCode, 53103, { value: RoomCreateFailedError });\n\n/**\n * @class RoomConnectFailedError\n * @classdesc Raised whenever a Client is unable to connect to a Room, and the scenario is not covered by a more specific error code.\n * @extends TwilioError\n * @property {number} code - 53104\n * @property {string} message - 'Unable to connect to Room'\n */\n\nvar RoomConnectFailedError = function (_TwilioError17) {\n _inherits(RoomConnectFailedError, _TwilioError17);\n\n function RoomConnectFailedError() {\n _classCallCheck(this, RoomConnectFailedError);\n\n return _possibleConstructorReturn(this, (RoomConnectFailedError.__proto__ || Object.getPrototypeOf(RoomConnectFailedError)).call(this, 53104, 'Unable to connect to Room'));\n }\n\n return RoomConnectFailedError;\n}(TwilioError);\n\nexports.RoomConnectFailedError = RoomConnectFailedError;\nObject.defineProperty(TwilioErrorByCode, 53104, { value: RoomConnectFailedError });\n\n/**\n * @class RoomMaxParticipantsExceededError\n * @classdesc Raised whenever a Client is unable to connect to a Room because the Room contains too many Participants.\n * @extends TwilioError\n * @property {number} code - 53105\n * @property {string} message - 'Room contains too many Participants'\n */\n\nvar RoomMaxParticipantsExceededError = function (_TwilioError18) {\n _inherits(RoomMaxParticipantsExceededError, _TwilioError18);\n\n function RoomMaxParticipantsExceededError() {\n _classCallCheck(this, RoomMaxParticipantsExceededError);\n\n return _possibleConstructorReturn(this, (RoomMaxParticipantsExceededError.__proto__ || Object.getPrototypeOf(RoomMaxParticipantsExceededError)).call(this, 53105, 'Room contains too many Participants'));\n }\n\n return RoomMaxParticipantsExceededError;\n}(TwilioError);\n\nexports.RoomMaxParticipantsExceededError = RoomMaxParticipantsExceededError;\nObject.defineProperty(TwilioErrorByCode, 53105, { value: RoomMaxParticipantsExceededError });\n\n/**\n * @class RoomNotFoundError\n * @classdesc Raised whenever attempting operation on a non-existent Room.\n * @extends TwilioError\n * @property {number} code - 53106\n * @property {string} message - 'Room not found'\n */\n\nvar RoomNotFoundError = function (_TwilioError19) {\n _inherits(RoomNotFoundError, _TwilioError19);\n\n function RoomNotFoundError() {\n _classCallCheck(this, RoomNotFoundError);\n\n return _possibleConstructorReturn(this, (RoomNotFoundError.__proto__ || Object.getPrototypeOf(RoomNotFoundError)).call(this, 53106, 'Room not found'));\n }\n\n return RoomNotFoundError;\n}(TwilioError);\n\nexports.RoomNotFoundError = RoomNotFoundError;\nObject.defineProperty(TwilioErrorByCode, 53106, { value: RoomNotFoundError });\n\n/**\n * @class RoomMaxParticipantsOutOfRangeError\n * @classdesc Raised in the REST API when MaxParticipants is set out of range.\n * @extends TwilioError\n * @property {number} code - 53107\n * @property {string} message - 'MaxParticipants is out of range'\n */\n\nvar RoomMaxParticipantsOutOfRangeError = function (_TwilioError20) {\n _inherits(RoomMaxParticipantsOutOfRangeError, _TwilioError20);\n\n function RoomMaxParticipantsOutOfRangeError() {\n _classCallCheck(this, RoomMaxParticipantsOutOfRangeError);\n\n return _possibleConstructorReturn(this, (RoomMaxParticipantsOutOfRangeError.__proto__ || Object.getPrototypeOf(RoomMaxParticipantsOutOfRangeError)).call(this, 53107, 'MaxParticipants is out of range'));\n }\n\n return RoomMaxParticipantsOutOfRangeError;\n}(TwilioError);\n\nexports.RoomMaxParticipantsOutOfRangeError = RoomMaxParticipantsOutOfRangeError;\nObject.defineProperty(TwilioErrorByCode, 53107, { value: RoomMaxParticipantsOutOfRangeError });\n\n/**\n * @class RoomTypeInvalidError\n * @classdesc Raised in the REST API when the user attempts to create a Room with an invalid RoomType\n * @extends TwilioError\n * @property {number} code - 53108\n * @property {string} message - 'RoomType is not valid'\n */\n\nvar RoomTypeInvalidError = function (_TwilioError21) {\n _inherits(RoomTypeInvalidError, _TwilioError21);\n\n function RoomTypeInvalidError() {\n _classCallCheck(this, RoomTypeInvalidError);\n\n return _possibleConstructorReturn(this, (RoomTypeInvalidError.__proto__ || Object.getPrototypeOf(RoomTypeInvalidError)).call(this, 53108, 'RoomType is not valid'));\n }\n\n return RoomTypeInvalidError;\n}(TwilioError);\n\nexports.RoomTypeInvalidError = RoomTypeInvalidError;\nObject.defineProperty(TwilioErrorByCode, 53108, { value: RoomTypeInvalidError });\n\n/**\n * @class RoomTimeoutOutOfRangeError\n * @classdesc Raised in the REST API when Timeout is set out of range.\n * @extends TwilioError\n * @property {number} code - 53109\n * @property {string} message - 'Timeout is out of range'\n */\n\nvar RoomTimeoutOutOfRangeError = function (_TwilioError22) {\n _inherits(RoomTimeoutOutOfRangeError, _TwilioError22);\n\n function RoomTimeoutOutOfRangeError() {\n _classCallCheck(this, RoomTimeoutOutOfRangeError);\n\n return _possibleConstructorReturn(this, (RoomTimeoutOutOfRangeError.__proto__ || Object.getPrototypeOf(RoomTimeoutOutOfRangeError)).call(this, 53109, 'Timeout is out of range'));\n }\n\n return RoomTimeoutOutOfRangeError;\n}(TwilioError);\n\nexports.RoomTimeoutOutOfRangeError = RoomTimeoutOutOfRangeError;\nObject.defineProperty(TwilioErrorByCode, 53109, { value: RoomTimeoutOutOfRangeError });\n\n/**\n * @class RoomStatusCallbackMethodInvalidError\n * @classdesc Raised in the REST API when StatusCallbackMethod is set to an invalid value.\n * @extends TwilioError\n * @property {number} code - 53110\n * @property {string} message - 'StatusCallbackMethod is invalid'\n */\n\nvar RoomStatusCallbackMethodInvalidError = function (_TwilioError23) {\n _inherits(RoomStatusCallbackMethodInvalidError, _TwilioError23);\n\n function RoomStatusCallbackMethodInvalidError() {\n _classCallCheck(this, RoomStatusCallbackMethodInvalidError);\n\n return _possibleConstructorReturn(this, (RoomStatusCallbackMethodInvalidError.__proto__ || Object.getPrototypeOf(RoomStatusCallbackMethodInvalidError)).call(this, 53110, 'StatusCallbackMethod is invalid'));\n }\n\n return RoomStatusCallbackMethodInvalidError;\n}(TwilioError);\n\nexports.RoomStatusCallbackMethodInvalidError = RoomStatusCallbackMethodInvalidError;\nObject.defineProperty(TwilioErrorByCode, 53110, { value: RoomStatusCallbackMethodInvalidError });\n\n/**\n * @class RoomStatusCallbackInvalidError\n * @classdesc Raised in the REST API when StatusCallback is not a valid URL or the url is too long.\n * @extends TwilioError\n * @property {number} code - 53111\n * @property {string} message - 'StatusCallback is invalid'\n */\n\nvar RoomStatusCallbackInvalidError = function (_TwilioError24) {\n _inherits(RoomStatusCallbackInvalidError, _TwilioError24);\n\n function RoomStatusCallbackInvalidError() {\n _classCallCheck(this, RoomStatusCallbackInvalidError);\n\n return _possibleConstructorReturn(this, (RoomStatusCallbackInvalidError.__proto__ || Object.getPrototypeOf(RoomStatusCallbackInvalidError)).call(this, 53111, 'StatusCallback is invalid'));\n }\n\n return RoomStatusCallbackInvalidError;\n}(TwilioError);\n\nexports.RoomStatusCallbackInvalidError = RoomStatusCallbackInvalidError;\nObject.defineProperty(TwilioErrorByCode, 53111, { value: RoomStatusCallbackInvalidError });\n\n/**\n * @class RoomStatusInvalidError\n * @classdesc Raised in the REST API when Status is not valid or the Room is not in-progress.\n * @extends TwilioError\n * @property {number} code - 53112\n * @property {string} message - 'Status is invalid'\n */\n\nvar RoomStatusInvalidError = function (_TwilioError25) {\n _inherits(RoomStatusInvalidError, _TwilioError25);\n\n function RoomStatusInvalidError() {\n _classCallCheck(this, RoomStatusInvalidError);\n\n return _possibleConstructorReturn(this, (RoomStatusInvalidError.__proto__ || Object.getPrototypeOf(RoomStatusInvalidError)).call(this, 53112, 'Status is invalid'));\n }\n\n return RoomStatusInvalidError;\n}(TwilioError);\n\nexports.RoomStatusInvalidError = RoomStatusInvalidError;\nObject.defineProperty(TwilioErrorByCode, 53112, { value: RoomStatusInvalidError });\n\n/**\n * @class RoomRoomExistsError\n * @classdesc Raised in the REST API when the Room creation fails because a Room exists with the same name.\n * @extends TwilioError\n * @property {number} code - 53113\n * @property {string} message - 'Room exists'\n */\n\nvar RoomRoomExistsError = function (_TwilioError26) {\n _inherits(RoomRoomExistsError, _TwilioError26);\n\n function RoomRoomExistsError() {\n _classCallCheck(this, RoomRoomExistsError);\n\n return _possibleConstructorReturn(this, (RoomRoomExistsError.__proto__ || Object.getPrototypeOf(RoomRoomExistsError)).call(this, 53113, 'Room exists'));\n }\n\n return RoomRoomExistsError;\n}(TwilioError);\n\nexports.RoomRoomExistsError = RoomRoomExistsError;\nObject.defineProperty(TwilioErrorByCode, 53113, { value: RoomRoomExistsError });\n\n/**\n * @class RoomInvalidParametersError\n * @classdesc Raised in the REST API when one or more Room creation parameter is incompatible with the Room type.\n * @extends TwilioError\n * @property {number} code - 53114\n * @property {string} message - 'Room creation parameter(s) incompatible with the Room type'\n */\n\nvar RoomInvalidParametersError = function (_TwilioError27) {\n _inherits(RoomInvalidParametersError, _TwilioError27);\n\n function RoomInvalidParametersError() {\n _classCallCheck(this, RoomInvalidParametersError);\n\n return _possibleConstructorReturn(this, (RoomInvalidParametersError.__proto__ || Object.getPrototypeOf(RoomInvalidParametersError)).call(this, 53114, 'Room creation parameter(s) incompatible with the Room type'));\n }\n\n return RoomInvalidParametersError;\n}(TwilioError);\n\nexports.RoomInvalidParametersError = RoomInvalidParametersError;\nObject.defineProperty(TwilioErrorByCode, 53114, { value: RoomInvalidParametersError });\n\n/**\n * @class RoomMediaRegionInvalidError\n * @classdesc Raised in the REST API when MediaRegion is set to an invalid value.\n * @extends TwilioError\n * @property {number} code - 53115\n * @property {string} message - 'MediaRegion is invalid'\n */\n\nvar RoomMediaRegionInvalidError = function (_TwilioError28) {\n _inherits(RoomMediaRegionInvalidError, _TwilioError28);\n\n function RoomMediaRegionInvalidError() {\n _classCallCheck(this, RoomMediaRegionInvalidError);\n\n return _possibleConstructorReturn(this, (RoomMediaRegionInvalidError.__proto__ || Object.getPrototypeOf(RoomMediaRegionInvalidError)).call(this, 53115, 'MediaRegion is invalid'));\n }\n\n return RoomMediaRegionInvalidError;\n}(TwilioError);\n\nexports.RoomMediaRegionInvalidError = RoomMediaRegionInvalidError;\nObject.defineProperty(TwilioErrorByCode, 53115, { value: RoomMediaRegionInvalidError });\n\n/**\n * @class RoomMediaRegionUnavailableError\n * @classdesc Raised in the REST API when MediaRegion is set to a valid value but no media servers are available.\n * @extends TwilioError\n * @property {number} code - 53116\n * @property {string} message - 'There are no media servers available in the MediaRegion'\n */\n\nvar RoomMediaRegionUnavailableError = function (_TwilioError29) {\n _inherits(RoomMediaRegionUnavailableError, _TwilioError29);\n\n function RoomMediaRegionUnavailableError() {\n _classCallCheck(this, RoomMediaRegionUnavailableError);\n\n return _possibleConstructorReturn(this, (RoomMediaRegionUnavailableError.__proto__ || Object.getPrototypeOf(RoomMediaRegionUnavailableError)).call(this, 53116, 'There are no media servers available in the MediaRegion'));\n }\n\n return RoomMediaRegionUnavailableError;\n}(TwilioError);\n\nexports.RoomMediaRegionUnavailableError = RoomMediaRegionUnavailableError;\nObject.defineProperty(TwilioErrorByCode, 53116, { value: RoomMediaRegionUnavailableError });\n\n/**\n * @class RoomSubscriptionOperationNotSupportedError\n * @classdesc Raised whenever the subscription operation requested is not supported for the Room type.\n * @extends TwilioError\n * @property {number} code - 53117\n * @property {string} message - 'The subscription operation requested is not supported for the Room type'\n */\n\nvar RoomSubscriptionOperationNotSupportedError = function (_TwilioError30) {\n _inherits(RoomSubscriptionOperationNotSupportedError, _TwilioError30);\n\n function RoomSubscriptionOperationNotSupportedError() {\n _classCallCheck(this, RoomSubscriptionOperationNotSupportedError);\n\n return _possibleConstructorReturn(this, (RoomSubscriptionOperationNotSupportedError.__proto__ || Object.getPrototypeOf(RoomSubscriptionOperationNotSupportedError)).call(this, 53117, 'The subscription operation requested is not supported for the Room type'));\n }\n\n return RoomSubscriptionOperationNotSupportedError;\n}(TwilioError);\n\nexports.RoomSubscriptionOperationNotSupportedError = RoomSubscriptionOperationNotSupportedError;\nObject.defineProperty(TwilioErrorByCode, 53117, { value: RoomSubscriptionOperationNotSupportedError });\n\n/**\n * @class RoomCompletedError\n * @classdesc Raised whenever a Room is completed via the REST API.\n * @extends TwilioError\n * @property {number} code - 53118\n * @property {string} message - 'Room completed'\n */\n\nvar RoomCompletedError = function (_TwilioError31) {\n _inherits(RoomCompletedError, _TwilioError31);\n\n function RoomCompletedError() {\n _classCallCheck(this, RoomCompletedError);\n\n return _possibleConstructorReturn(this, (RoomCompletedError.__proto__ || Object.getPrototypeOf(RoomCompletedError)).call(this, 53118, 'Room completed'));\n }\n\n return RoomCompletedError;\n}(TwilioError);\n\nexports.RoomCompletedError = RoomCompletedError;\nObject.defineProperty(TwilioErrorByCode, 53118, { value: RoomCompletedError });\n\n/**\n * @class ParticipantIdentityInvalidError\n * @classdesc Raised whenever a Participant identity is invalid, and the scenario is not covered by a more specific error code.\n * @extends TwilioError\n * @property {number} code - 53200\n * @property {string} message - 'Participant identity is invalid'\n */\n\nvar ParticipantIdentityInvalidError = function (_TwilioError32) {\n _inherits(ParticipantIdentityInvalidError, _TwilioError32);\n\n function ParticipantIdentityInvalidError() {\n _classCallCheck(this, ParticipantIdentityInvalidError);\n\n return _possibleConstructorReturn(this, (ParticipantIdentityInvalidError.__proto__ || Object.getPrototypeOf(ParticipantIdentityInvalidError)).call(this, 53200, 'Participant identity is invalid'));\n }\n\n return ParticipantIdentityInvalidError;\n}(TwilioError);\n\nexports.ParticipantIdentityInvalidError = ParticipantIdentityInvalidError;\nObject.defineProperty(TwilioErrorByCode, 53200, { value: ParticipantIdentityInvalidError });\n\n/**\n * @class ParticipantIdentityTooLongError\n * @classdesc Raised whenever a Participant identity is too long.\n * @extends TwilioError\n * @property {number} code - 53201\n * @property {string} message - 'Participant identity is too long'\n */\n\nvar ParticipantIdentityTooLongError = function (_TwilioError33) {\n _inherits(ParticipantIdentityTooLongError, _TwilioError33);\n\n function ParticipantIdentityTooLongError() {\n _classCallCheck(this, ParticipantIdentityTooLongError);\n\n return _possibleConstructorReturn(this, (ParticipantIdentityTooLongError.__proto__ || Object.getPrototypeOf(ParticipantIdentityTooLongError)).call(this, 53201, 'Participant identity is too long'));\n }\n\n return ParticipantIdentityTooLongError;\n}(TwilioError);\n\nexports.ParticipantIdentityTooLongError = ParticipantIdentityTooLongError;\nObject.defineProperty(TwilioErrorByCode, 53201, { value: ParticipantIdentityTooLongError });\n\n/**\n * @class ParticipantIdentityCharsInvalidError\n * @classdesc Raised whenever a Participant identity contains invalid characters.\n * @extends TwilioError\n * @property {number} code - 53202\n * @property {string} message - 'Participant identity contains invalid characters'\n */\n\nvar ParticipantIdentityCharsInvalidError = function (_TwilioError34) {\n _inherits(ParticipantIdentityCharsInvalidError, _TwilioError34);\n\n function ParticipantIdentityCharsInvalidError() {\n _classCallCheck(this, ParticipantIdentityCharsInvalidError);\n\n return _possibleConstructorReturn(this, (ParticipantIdentityCharsInvalidError.__proto__ || Object.getPrototypeOf(ParticipantIdentityCharsInvalidError)).call(this, 53202, 'Participant identity contains invalid characters'));\n }\n\n return ParticipantIdentityCharsInvalidError;\n}(TwilioError);\n\nexports.ParticipantIdentityCharsInvalidError = ParticipantIdentityCharsInvalidError;\nObject.defineProperty(TwilioErrorByCode, 53202, { value: ParticipantIdentityCharsInvalidError });\n\n/**\n * @class ParticipantMaxTracksExceededError\n * @classdesc Raised whenever a Participant has too many Tracks.\n * @extends TwilioError\n * @property {number} code - 53203\n * @property {string} message - 'Participant has too many Tracks'\n */\n\nvar ParticipantMaxTracksExceededError = function (_TwilioError35) {\n _inherits(ParticipantMaxTracksExceededError, _TwilioError35);\n\n function ParticipantMaxTracksExceededError() {\n _classCallCheck(this, ParticipantMaxTracksExceededError);\n\n return _possibleConstructorReturn(this, (ParticipantMaxTracksExceededError.__proto__ || Object.getPrototypeOf(ParticipantMaxTracksExceededError)).call(this, 53203, 'Participant has too many Tracks'));\n }\n\n return ParticipantMaxTracksExceededError;\n}(TwilioError);\n\nexports.ParticipantMaxTracksExceededError = ParticipantMaxTracksExceededError;\nObject.defineProperty(TwilioErrorByCode, 53203, { value: ParticipantMaxTracksExceededError });\n\n/**\n * @class ParticipantNotFoundError\n * @classdesc Raised whenever attempting an operation on a non-existent Participant.\n * @extends TwilioError\n * @property {number} code - 53204\n * @property {string} message - 'Participant not found'\n */\n\nvar ParticipantNotFoundError = function (_TwilioError36) {\n _inherits(ParticipantNotFoundError, _TwilioError36);\n\n function ParticipantNotFoundError() {\n _classCallCheck(this, ParticipantNotFoundError);\n\n return _possibleConstructorReturn(this, (ParticipantNotFoundError.__proto__ || Object.getPrototypeOf(ParticipantNotFoundError)).call(this, 53204, 'Participant not found'));\n }\n\n return ParticipantNotFoundError;\n}(TwilioError);\n\nexports.ParticipantNotFoundError = ParticipantNotFoundError;\nObject.defineProperty(TwilioErrorByCode, 53204, { value: ParticipantNotFoundError });\n\n/**\n * @class ParticipantDuplicateIdentityError\n * @classdesc Raised by the server to the existing Participant when a new Participant joins a Room with the same identity as the existing Participant.\n * @extends TwilioError\n * @property {number} code - 53205\n * @property {string} message - 'Participant disconnected because of duplicate identity'\n */\n\nvar ParticipantDuplicateIdentityError = function (_TwilioError37) {\n _inherits(ParticipantDuplicateIdentityError, _TwilioError37);\n\n function ParticipantDuplicateIdentityError() {\n _classCallCheck(this, ParticipantDuplicateIdentityError);\n\n return _possibleConstructorReturn(this, (ParticipantDuplicateIdentityError.__proto__ || Object.getPrototypeOf(ParticipantDuplicateIdentityError)).call(this, 53205, 'Participant disconnected because of duplicate identity'));\n }\n\n return ParticipantDuplicateIdentityError;\n}(TwilioError);\n\nexports.ParticipantDuplicateIdentityError = ParticipantDuplicateIdentityError;\nObject.defineProperty(TwilioErrorByCode, 53205, { value: ParticipantDuplicateIdentityError });\n\n/**\n * @class TrackInvalidError\n * @classdesc Raised whenever a Track is invalid, and the scenario is not covered by a more specific error code.\n * @extends TwilioError\n * @property {number} code - 53300\n * @property {string} message - 'Track is invalid'\n */\n\nvar TrackInvalidError = function (_TwilioError38) {\n _inherits(TrackInvalidError, _TwilioError38);\n\n function TrackInvalidError() {\n _classCallCheck(this, TrackInvalidError);\n\n return _possibleConstructorReturn(this, (TrackInvalidError.__proto__ || Object.getPrototypeOf(TrackInvalidError)).call(this, 53300, 'Track is invalid'));\n }\n\n return TrackInvalidError;\n}(TwilioError);\n\nexports.TrackInvalidError = TrackInvalidError;\nObject.defineProperty(TwilioErrorByCode, 53300, { value: TrackInvalidError });\n\n/**\n * @class TrackNameInvalidError\n * @classdesc Raised whenever a Track name is invalid, and the scenario is not covered by a more specific error code.\n * @extends TwilioError\n * @property {number} code - 53301\n * @property {string} message - 'Track name is invalid'\n */\n\nvar TrackNameInvalidError = function (_TwilioError39) {\n _inherits(TrackNameInvalidError, _TwilioError39);\n\n function TrackNameInvalidError() {\n _classCallCheck(this, TrackNameInvalidError);\n\n return _possibleConstructorReturn(this, (TrackNameInvalidError.__proto__ || Object.getPrototypeOf(TrackNameInvalidError)).call(this, 53301, 'Track name is invalid'));\n }\n\n return TrackNameInvalidError;\n}(TwilioError);\n\nexports.TrackNameInvalidError = TrackNameInvalidError;\nObject.defineProperty(TwilioErrorByCode, 53301, { value: TrackNameInvalidError });\n\n/**\n * @class TrackNameTooLongError\n * @classdesc Raised whenever a Track name is too long.\n * @extends TwilioError\n * @property {number} code - 53302\n * @property {string} message - 'Track name is too long'\n */\n\nvar TrackNameTooLongError = function (_TwilioError40) {\n _inherits(TrackNameTooLongError, _TwilioError40);\n\n function TrackNameTooLongError() {\n _classCallCheck(this, TrackNameTooLongError);\n\n return _possibleConstructorReturn(this, (TrackNameTooLongError.__proto__ || Object.getPrototypeOf(TrackNameTooLongError)).call(this, 53302, 'Track name is too long'));\n }\n\n return TrackNameTooLongError;\n}(TwilioError);\n\nexports.TrackNameTooLongError = TrackNameTooLongError;\nObject.defineProperty(TwilioErrorByCode, 53302, { value: TrackNameTooLongError });\n\n/**\n * @class TrackNameCharsInvalidError\n * @classdesc Raised whenever a Track name contains invalid characters.\n * @extends TwilioError\n * @property {number} code - 53303\n * @property {string} message - 'Track name contains invalid characters'\n */\n\nvar TrackNameCharsInvalidError = function (_TwilioError41) {\n _inherits(TrackNameCharsInvalidError, _TwilioError41);\n\n function TrackNameCharsInvalidError() {\n _classCallCheck(this, TrackNameCharsInvalidError);\n\n return _possibleConstructorReturn(this, (TrackNameCharsInvalidError.__proto__ || Object.getPrototypeOf(TrackNameCharsInvalidError)).call(this, 53303, 'Track name contains invalid characters'));\n }\n\n return TrackNameCharsInvalidError;\n}(TwilioError);\n\nexports.TrackNameCharsInvalidError = TrackNameCharsInvalidError;\nObject.defineProperty(TwilioErrorByCode, 53303, { value: TrackNameCharsInvalidError });\n\n/**\n * @class TrackNameIsDuplicatedError\n * @classdesc Raised whenever a Participant is currently publishing a Track with the same name.\n * @extends TwilioError\n * @property {number} code - 53304\n * @property {string} message - 'Track name is duplicated'\n */\n\nvar TrackNameIsDuplicatedError = function (_TwilioError42) {\n _inherits(TrackNameIsDuplicatedError, _TwilioError42);\n\n function TrackNameIsDuplicatedError() {\n _classCallCheck(this, TrackNameIsDuplicatedError);\n\n return _possibleConstructorReturn(this, (TrackNameIsDuplicatedError.__proto__ || Object.getPrototypeOf(TrackNameIsDuplicatedError)).call(this, 53304, 'Track name is duplicated'));\n }\n\n return TrackNameIsDuplicatedError;\n}(TwilioError);\n\nexports.TrackNameIsDuplicatedError = TrackNameIsDuplicatedError;\nObject.defineProperty(TwilioErrorByCode, 53304, { value: TrackNameIsDuplicatedError });\n\n/**\n * @class TrackServerTrackCapacityReachedError\n * @classdesc The server does not have enough resources available to create a new Track.\n * @extends TwilioError\n * @property {number} code - 53305\n * @property {string} message - 'The server has reached capacity and cannot fulfill this request'\n */\n\nvar TrackServerTrackCapacityReachedError = function (_TwilioError43) {\n _inherits(TrackServerTrackCapacityReachedError, _TwilioError43);\n\n function TrackServerTrackCapacityReachedError() {\n _classCallCheck(this, TrackServerTrackCapacityReachedError);\n\n return _possibleConstructorReturn(this, (TrackServerTrackCapacityReachedError.__proto__ || Object.getPrototypeOf(TrackServerTrackCapacityReachedError)).call(this, 53305, 'The server has reached capacity and cannot fulfill this request'));\n }\n\n return TrackServerTrackCapacityReachedError;\n}(TwilioError);\n\nexports.TrackServerTrackCapacityReachedError = TrackServerTrackCapacityReachedError;\nObject.defineProperty(TwilioErrorByCode, 53305, { value: TrackServerTrackCapacityReachedError });\n\n/**\n * @class MediaClientLocalDescFailedError\n * @classdesc Raised whenever a Client is unable to create or apply a local media description.\n * @extends TwilioError\n * @property {number} code - 53400\n * @property {string} message - 'Client is unable to create or apply a local media description'\n */\n\nvar MediaClientLocalDescFailedError = function (_TwilioError44) {\n _inherits(MediaClientLocalDescFailedError, _TwilioError44);\n\n function MediaClientLocalDescFailedError() {\n _classCallCheck(this, MediaClientLocalDescFailedError);\n\n return _possibleConstructorReturn(this, (MediaClientLocalDescFailedError.__proto__ || Object.getPrototypeOf(MediaClientLocalDescFailedError)).call(this, 53400, 'Client is unable to create or apply a local media description'));\n }\n\n return MediaClientLocalDescFailedError;\n}(TwilioError);\n\nexports.MediaClientLocalDescFailedError = MediaClientLocalDescFailedError;\nObject.defineProperty(TwilioErrorByCode, 53400, { value: MediaClientLocalDescFailedError });\n\n/**\n * @class MediaServerLocalDescFailedError\n * @classdesc Raised whenever the Server is unable to create or apply a local media description.\n * @extends TwilioError\n * @property {number} code - 53401\n * @property {string} message - 'Server is unable to create or apply a local media description'\n */\n\nvar MediaServerLocalDescFailedError = function (_TwilioError45) {\n _inherits(MediaServerLocalDescFailedError, _TwilioError45);\n\n function MediaServerLocalDescFailedError() {\n _classCallCheck(this, MediaServerLocalDescFailedError);\n\n return _possibleConstructorReturn(this, (MediaServerLocalDescFailedError.__proto__ || Object.getPrototypeOf(MediaServerLocalDescFailedError)).call(this, 53401, 'Server is unable to create or apply a local media description'));\n }\n\n return MediaServerLocalDescFailedError;\n}(TwilioError);\n\nexports.MediaServerLocalDescFailedError = MediaServerLocalDescFailedError;\nObject.defineProperty(TwilioErrorByCode, 53401, { value: MediaServerLocalDescFailedError });\n\n/**\n * @class MediaClientRemoteDescFailedError\n * @classdesc Raised whenever the Client receives a remote media description but is unable to apply it.\n * @extends TwilioError\n * @property {number} code - 53402\n * @property {string} message - 'Client is unable to apply a remote media description'\n */\n\nvar MediaClientRemoteDescFailedError = function (_TwilioError46) {\n _inherits(MediaClientRemoteDescFailedError, _TwilioError46);\n\n function MediaClientRemoteDescFailedError() {\n _classCallCheck(this, MediaClientRemoteDescFailedError);\n\n return _possibleConstructorReturn(this, (MediaClientRemoteDescFailedError.__proto__ || Object.getPrototypeOf(MediaClientRemoteDescFailedError)).call(this, 53402, 'Client is unable to apply a remote media description'));\n }\n\n return MediaClientRemoteDescFailedError;\n}(TwilioError);\n\nexports.MediaClientRemoteDescFailedError = MediaClientRemoteDescFailedError;\nObject.defineProperty(TwilioErrorByCode, 53402, { value: MediaClientRemoteDescFailedError });\n\n/**\n * @class MediaServerRemoteDescFailedError\n * @classdesc Raised whenever the Server receives a remote media description but is unable to apply it.\n * @extends TwilioError\n * @property {number} code - 53403\n * @property {string} message - 'Server is unable to apply a remote media description'\n */\n\nvar MediaServerRemoteDescFailedError = function (_TwilioError47) {\n _inherits(MediaServerRemoteDescFailedError, _TwilioError47);\n\n function MediaServerRemoteDescFailedError() {\n _classCallCheck(this, MediaServerRemoteDescFailedError);\n\n return _possibleConstructorReturn(this, (MediaServerRemoteDescFailedError.__proto__ || Object.getPrototypeOf(MediaServerRemoteDescFailedError)).call(this, 53403, 'Server is unable to apply a remote media description'));\n }\n\n return MediaServerRemoteDescFailedError;\n}(TwilioError);\n\nexports.MediaServerRemoteDescFailedError = MediaServerRemoteDescFailedError;\nObject.defineProperty(TwilioErrorByCode, 53403, { value: MediaServerRemoteDescFailedError });\n\n/**\n * @class MediaNoSupportedCodecError\n * @classdesc Raised whenever the intersection of codecs supported by the Client and the Server (or, in peer-to-peer, the Client and another Participant) is empty.\n * @extends TwilioError\n * @property {number} code - 53404\n * @property {string} message - 'No supported codec'\n */\n\nvar MediaNoSupportedCodecError = function (_TwilioError48) {\n _inherits(MediaNoSupportedCodecError, _TwilioError48);\n\n function MediaNoSupportedCodecError() {\n _classCallCheck(this, MediaNoSupportedCodecError);\n\n return _possibleConstructorReturn(this, (MediaNoSupportedCodecError.__proto__ || Object.getPrototypeOf(MediaNoSupportedCodecError)).call(this, 53404, 'No supported codec'));\n }\n\n return MediaNoSupportedCodecError;\n}(TwilioError);\n\nexports.MediaNoSupportedCodecError = MediaNoSupportedCodecError;\nObject.defineProperty(TwilioErrorByCode, 53404, { value: MediaNoSupportedCodecError });\n\n/**\n * @class MediaConnectionError\n * @classdesc Raised by the Client or Server whenever a media connection fails or raised by the Client whenever it detects that media has stopped flowing.\n * @extends TwilioError\n * @property {number} code - 53405\n * @property {string} message - 'Media connection failed or Media activity ceased'\n */\n\nvar MediaConnectionError = function (_TwilioError49) {\n _inherits(MediaConnectionError, _TwilioError49);\n\n function MediaConnectionError() {\n _classCallCheck(this, MediaConnectionError);\n\n return _possibleConstructorReturn(this, (MediaConnectionError.__proto__ || Object.getPrototypeOf(MediaConnectionError)).call(this, 53405, 'Media connection failed or Media activity ceased'));\n }\n\n return MediaConnectionError;\n}(TwilioError);\n\nexports.MediaConnectionError = MediaConnectionError;\nObject.defineProperty(TwilioErrorByCode, 53405, { value: MediaConnectionError });\n\n/**\n * @class MediaDTLSTransportFailedError\n * @classdesc There was a problem while negotiating with the remote DTLS peer. Therefore the Participant will not be able to publish or subscribe to Tracks.\n * @extends TwilioError\n * @property {number} code - 53407\n * @property {string} message - 'Media connection failed due to DTLS handshake failure'\n */\n\nvar MediaDTLSTransportFailedError = function (_TwilioError50) {\n _inherits(MediaDTLSTransportFailedError, _TwilioError50);\n\n function MediaDTLSTransportFailedError() {\n _classCallCheck(this, MediaDTLSTransportFailedError);\n\n return _possibleConstructorReturn(this, (MediaDTLSTransportFailedError.__proto__ || Object.getPrototypeOf(MediaDTLSTransportFailedError)).call(this, 53407, 'Media connection failed due to DTLS handshake failure'));\n }\n\n return MediaDTLSTransportFailedError;\n}(TwilioError);\n\nexports.MediaDTLSTransportFailedError = MediaDTLSTransportFailedError;\nObject.defineProperty(TwilioErrorByCode, 53407, { value: MediaDTLSTransportFailedError });\n\n/**\n * @class ConfigurationAcquireFailedError\n * @classdesc Raised whenever the Client is unable to acquire configuration information from the Server.\n * @extends TwilioError\n * @property {number} code - 53500\n * @property {string} message - 'Unable to acquire configuration'\n */\n\nvar ConfigurationAcquireFailedError = function (_TwilioError51) {\n _inherits(ConfigurationAcquireFailedError, _TwilioError51);\n\n function ConfigurationAcquireFailedError() {\n _classCallCheck(this, ConfigurationAcquireFailedError);\n\n return _possibleConstructorReturn(this, (ConfigurationAcquireFailedError.__proto__ || Object.getPrototypeOf(ConfigurationAcquireFailedError)).call(this, 53500, 'Unable to acquire configuration'));\n }\n\n return ConfigurationAcquireFailedError;\n}(TwilioError);\n\nexports.ConfigurationAcquireFailedError = ConfigurationAcquireFailedError;\nObject.defineProperty(TwilioErrorByCode, 53500, { value: ConfigurationAcquireFailedError });\n\n/**\n * @class ConfigurationAcquireTurnFailedError\n * @classdesc Raised whenever the Server is unable to return TURN credentials to the Client\n * @extends TwilioError\n * @property {number} code - 53501\n * @property {string} message - 'Unable to acquire TURN credentials'\n */\n\nvar ConfigurationAcquireTurnFailedError = function (_TwilioError52) {\n _inherits(ConfigurationAcquireTurnFailedError, _TwilioError52);\n\n function ConfigurationAcquireTurnFailedError() {\n _classCallCheck(this, ConfigurationAcquireTurnFailedError);\n\n return _possibleConstructorReturn(this, (ConfigurationAcquireTurnFailedError.__proto__ || Object.getPrototypeOf(ConfigurationAcquireTurnFailedError)).call(this, 53501, 'Unable to acquire TURN credentials'));\n }\n\n return ConfigurationAcquireTurnFailedError;\n}(TwilioError);\n\nexports.ConfigurationAcquireTurnFailedError = ConfigurationAcquireTurnFailedError;\nObject.defineProperty(TwilioErrorByCode, 53501, { value: ConfigurationAcquireTurnFailedError });","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar AudioTrack = require('./audiotrack');\nvar mixinRemoteMediaTrack = require('./remotemediatrack');\n\nvar RemoteMediaAudioTrack = mixinRemoteMediaTrack(AudioTrack);\n\n/**\n * A {@link RemoteAudioTrack} represents an {@link AudioTrack} published to a\n * {@link Room} by a {@link RemoteParticipant}.\n * @extends AudioTrack\n * @property {boolean} isEnabled - Whether the {@link RemoteAudioTrack} is enabled\n * @property {boolean} isSwitchedOff - Whether the {@link RemoteAudioTrack} is switched off\n * @property {Track.SID} sid - The {@link RemoteAudioTrack}'s SID\n * @property {?Track.Priority} priority - The subscribe priority of the {@link RemoteAudioTrack}\n * @emits RemoteAudioTrack#disabled\n * @emits RemoteAudioTrack#enabled\n * @emits RemoteAudioTrack#started\n * @emits RemoteAudioTrack#switchedOff\n * @emits RemoteAudioTrack#switchedOn\n */\n\nvar RemoteAudioTrack = function (_RemoteMediaAudioTrac) {\n _inherits(RemoteAudioTrack, _RemoteMediaAudioTrac);\n\n /**\n * Construct a {@link RemoteAudioTrack}.\n * @param {Track.SID} sid - The {@link RemoteAudioTrack}'s SID\n * @param {MediaTrackReceiver} mediaTrackReceiver - An audio MediaStreamTrack container\n * @param {boolean} isEnabled - Whether the {@link RemoteAudioTrack} is enabled\n * @param {function(?Track.Priority): void} setPriority - Set or clear the subscribe\n * {@link Track.Priority} of the {@link RemoteAudioTrack}\n * @param {{log: Log}} options - The {@link RemoteTrack} options\n */\n function RemoteAudioTrack(sid, mediaTrackReceiver, isEnabled, setPriority, options) {\n _classCallCheck(this, RemoteAudioTrack);\n\n return _possibleConstructorReturn(this, (RemoteAudioTrack.__proto__ || Object.getPrototypeOf(RemoteAudioTrack)).call(this, sid, mediaTrackReceiver, isEnabled, setPriority, options));\n }\n\n _createClass(RemoteAudioTrack, [{\n key: 'toString',\n value: function toString() {\n return '[RemoteAudioTrack #' + this._instanceId + ': ' + this.sid + ']';\n }\n\n /**\n * Update the subscribe {@link Track.Priority} of the {@link RemoteAudioTrack}.\n * @param {?Track.Priority} priority - the new subscribe {@link Track.Priority};\n * Currently setPriority has no effect on audio tracks.\n * @returns {this}\n * @throws {RangeError}\n */\n\n }, {\n key: 'setPriority',\n value: function setPriority(priority) {\n return _get(RemoteAudioTrack.prototype.__proto__ || Object.getPrototypeOf(RemoteAudioTrack.prototype), 'setPriority', this).call(this, priority);\n }\n }]);\n\n return RemoteAudioTrack;\n}(RemoteMediaAudioTrack);\n\n/**\n * The {@link RemoteAudioTrack} was disabled, i.e. \"muted\".\n * @param {RemoteAudioTrack} track - The {@link RemoteAudioTrack} that was\n * disabled\n * @event RemoteAudioTrack#disabled\n */\n\n/**\n * The {@link RemoteAudioTrack} was enabled, i.e. \"unmuted\".\n * @param {RemoteAudioTrack} track - The {@link RemoteAudioTrack} that was\n * enabled\n * @event RemoteAudioTrack#enabled\n */\n\n/**\n * The {@link RemoteAudioTrack} started. This means there is enough audio data\n * to begin playback.\n * @param {RemoteAudioTrack} track - The {@link RemoteAudioTrack} that started\n * @event RemoteAudioTrack#started\n */\n\n/**\n * A {@link RemoteAudioTrack} was switched off.\n * @param {RemoteAudioTrack} track - The {@link RemoteAudioTrack} that was\n * switched off\n * @event RemoteAudioTrack#switchedOff\n */\n\n/**\n * A {@link RemoteAudioTrack} was switched on.\n * @param {RemoteAudioTrack} track - The {@link RemoteAudioTrack} that was\n * switched on\n * @event RemoteAudioTrack#switchedOn\n */\n\nmodule.exports = RemoteAudioTrack;","'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar NetworkQualityAudioStats = require('./networkqualityaudiostats');\nvar NetworkQualityVideoStats = require('./networkqualityvideostats');\n\n/**\n * Network quality statistics for a {@link Participant}.\n * @property {NetworkQualityLevel} level - {@link NetworkQualityLevel} of the {@link Participant}\n * @property {?NetworkQualityAudioStats} audio - {@link NetworkQualityMediaStats}\n * for audio; null if {@link NetworkQualityVerbosity} is {@link NetworkQualityVerbosity}#minimal\n * or below\n * @property {?NetworkQualityVideoStats} video - {@link NetworkQualityMediaStats}\n * for video; null if {@link NetworkQualityVerbosity} is {@link NetworkQualityVerbosity}#minimal\n * or below\n */\n\nvar NetworkQualityStats =\n/**\n * Construct a {@link NetworkQualityStats}.\n * @param {NetworkQualityLevels} networkQualityLevels\n */\nfunction NetworkQualityStats(_ref) {\n var level = _ref.level,\n audio = _ref.audio,\n video = _ref.video;\n\n _classCallCheck(this, NetworkQualityStats);\n\n Object.defineProperties(this, {\n level: {\n value: level,\n enumerable: true\n },\n audio: {\n value: audio ? new NetworkQualityAudioStats(audio) : null,\n enumerable: true\n },\n video: {\n value: video ? new NetworkQualityVideoStats(video) : null,\n enumerable: true\n }\n });\n};\n\nmodule.exports = NetworkQualityStats;","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar RemoteTrackPublication = require('./remotetrackpublication');\n\n/**\n * A {@link RemoteVideoTrackPublication} represents a {@link RemoteVideoTrack}\n * that has been published to a {@link Room}.\n * @property {Track.Kind} kind - \"video\"\n * @property {?RemoteVideoTrack} track - unless you have subscribed to the\n * {@link RemoteVideoTrack}, this property is null\n * @emits RemoteVideoTrackPublication#subscribed\n * @emits RemoteVideoTrackPublication#subscriptionFailed\n * @emits RemoteVideoTrackPublication#trackDisabled\n * @emits RemoteVideoTrackPublication#trackEnabled\n * @emits RemoteVideoTrackPublication#unsubscribed\n */\n\nvar RemoteVideoTrackPublication = function (_RemoteTrackPublicati) {\n _inherits(RemoteVideoTrackPublication, _RemoteTrackPublicati);\n\n /**\n * Construct a {@link RemoteVideoTrackPublication}.\n * @param {RemoteTrackPublicationSignaling} signaling - {@link RemoteTrackPublication} signaling\n * @param {RemoteTrackPublicationOptions} options - {@link RemoteTrackPublication}\n * options\n */\n function RemoteVideoTrackPublication(signaling, options) {\n _classCallCheck(this, RemoteVideoTrackPublication);\n\n return _possibleConstructorReturn(this, (RemoteVideoTrackPublication.__proto__ || Object.getPrototypeOf(RemoteVideoTrackPublication)).call(this, signaling, options));\n }\n\n _createClass(RemoteVideoTrackPublication, [{\n key: 'toString',\n value: function toString() {\n return '[RemoteVideoTrackPublication #' + this._instanceId + ': ' + this.trackSid + ']';\n }\n }]);\n\n return RemoteVideoTrackPublication;\n}(RemoteTrackPublication);\n\n/**\n * Your {@link LocalParticipant} subscribed to the {@link RemoteVideoTrack}.\n * @param {RemoteVideoTrack} track - the {@link RemoteVideoTrack} that was subscribed to\n * @event RemoteVideoTrackPublication#subscribed\n */\n\n/**\n * Your {@link LocalParticipant} failed to subscribe to the {@link RemoteVideoTrack}.\n * @param {TwilioError} error - the reason the {@link RemoteVideoTrack} could not be\n * subscribed to\n * @event RemoteVideoTrackPublication#subscriptionFailed\n */\n\n/**\n * The {@link RemoteVideoTrack} was disabled.\n * @event RemoteVideoTrackPublication#trackDisabled\n */\n\n/**\n * The {@link RemoteVideoTrack} was enabled.\n * @event RemoteVideoTrackPublication#trackEnabled\n */\n\n/**\n * Your {@link LocalParticipant} unsubscribed from the {@link RemoteVideoTrack}.\n * @param {RemoteVideoTrack} track - the {@link RemoteVideoTrack} that was unsubscribed from\n * @event RemoteVideoTrackPublication#unsubscribed\n */\n\nmodule.exports = RemoteVideoTrackPublication;","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar EventEmitter = require('events').EventEmitter;\nvar util = require('./');\n\n/**\n * A Promise that can time out.\n * @extends EventEmitter\n * @implements Promise\n * @property {?number} timeout - the timeout, in milliseconds\n * @property {boolean} isTimedOut - whether or not the\n * {@link TimeoutPromise} timed out\n * @emits TimeoutPromise#timedOut\n */\n\nvar TimeoutPromise = function (_EventEmitter) {\n _inherits(TimeoutPromise, _EventEmitter);\n\n /**\n * Construct a new {@link TimeoutPromise}.\n * @param {Promise} original - a Promise\n * @param {?number} [timeout] - the timeout, in milliseconds; providing this in\n * the constructor invokes {@link TimeoutPromise#start} (otherwise, you must\n * call {@link TimeoutPromise#start} yourself)\n */\n function TimeoutPromise(original, initialTimeout) {\n _classCallCheck(this, TimeoutPromise);\n\n var _this = _possibleConstructorReturn(this, (TimeoutPromise.__proto__ || Object.getPrototypeOf(TimeoutPromise)).call(this));\n\n var deferred = util.defer();\n var isTimedOut = false;\n var timedOut = new Error('Timed out');\n var timeout = null;\n var timer = null;\n\n /* istanbul ignore next */\n Object.defineProperties(_this, {\n _deferred: {\n value: deferred\n },\n _isTimedOut: {\n get: function get() {\n return isTimedOut;\n },\n set: function set(_isTimedOut) {\n isTimedOut = _isTimedOut;\n }\n },\n _timedOut: {\n value: timedOut\n },\n _timeout: {\n get: function get() {\n return timeout;\n },\n set: function set(_timeout) {\n timeout = _timeout;\n }\n },\n _timer: {\n get: function get() {\n return timer;\n },\n set: function set(_timer) {\n timer = _timer;\n }\n },\n _promise: {\n value: deferred.promise\n },\n isTimedOut: {\n enumerable: true,\n get: function get() {\n return isTimedOut;\n }\n },\n timeout: {\n enumerable: true,\n get: function get() {\n return timeout;\n }\n }\n });\n\n original.then(function (result) {\n clearTimeout(_this._timer);\n deferred.resolve(result);\n }, function (reason) {\n clearTimeout(_this._timer);\n deferred.reject(reason);\n });\n\n if (initialTimeout) {\n _this.start(initialTimeout);\n }\n return _this;\n }\n\n _createClass(TimeoutPromise, [{\n key: 'catch',\n value: function _catch() {\n var _promise;\n\n return (_promise = this._promise).catch.apply(_promise, arguments);\n }\n\n /**\n * Start the timer that will time out the {@link TimeoutPromise} if the\n * original Promise has neither resolved nor rejected. Subsequent calls have no\n * effect once the {@link TimeoutPromise} is started.\n * @param {number} timeout - the timeout, in milliseconds\n * @returns {this}\n */\n\n }, {\n key: 'start',\n value: function start(timeout) {\n var _this2 = this;\n\n if (this._timer) {\n return this;\n }\n this._timeout = timeout;\n this._timer = setTimeout(function () {\n if (_this2._timer) {\n _this2._isTimedOut = true;\n _this2.emit('timedOut', _this2);\n _this2._deferred.reject(_this2._timedOut);\n }\n }, this.timeout);\n return this;\n }\n }, {\n key: 'then',\n value: function then() {\n var _promise2;\n\n return (_promise2 = this._promise).then.apply(_promise2, arguments);\n }\n }]);\n\n return TimeoutPromise;\n}(EventEmitter);\n\n/**\n * The {@link TimeoutPromise} timed out.\n * @param {TimeoutPromise} promise - The {@link TimeoutPromise}\n * @event TimeoutPromise#timedOut\n */\n\nmodule.exports = TimeoutPromise;","'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar NetworkQualitySendOrRecvStats = require('./networkqualitysendorrecvstats');\n\n/**\n * {@link NetworkQualitySendOrRecvStats} based on which a {@link Participant}'s\n * {@link NetworkQualityMediaStats}#send is calculated.\n */\n\nvar NetworkQualitySendStats = function (_NetworkQualitySendOr) {\n _inherits(NetworkQualitySendStats, _NetworkQualitySendOr);\n\n /**\n * Construct a {@link NetworkQualitySendStats}.\n * @param {SendOrRecvStats} sendOrRecvStats\n */\n function NetworkQualitySendStats(sendOrRecvStats) {\n _classCallCheck(this, NetworkQualitySendStats);\n\n return _possibleConstructorReturn(this, (NetworkQualitySendStats.__proto__ || Object.getPrototypeOf(NetworkQualitySendStats)).call(this, sendOrRecvStats));\n }\n\n return NetworkQualitySendStats;\n}(NetworkQualitySendOrRecvStats);\n\nmodule.exports = NetworkQualitySendStats;","'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar MediaTrackTransceiver = require('./transceiver');\n\n/**\n * A {@link MediaTrackReceiver} represents a remote MediaStreamTrack.\n * @extends MediaTrackTransceiver\n */\n\nvar MediaTrackReceiver = function (_MediaTrackTransceive) {\n _inherits(MediaTrackReceiver, _MediaTrackTransceive);\n\n /**\n * Construct a {@link MediaTrackReceiver}.\n * @param {Track.ID} id - The MediaStreamTrack ID signaled through RSP/SDP\n * @param {MediaStreamTrack} mediaStreamTrack - The remote MediaStreamTrack\n */\n function MediaTrackReceiver(id, mediaStreamTrack) {\n _classCallCheck(this, MediaTrackReceiver);\n\n return _possibleConstructorReturn(this, (MediaTrackReceiver.__proto__ || Object.getPrototypeOf(MediaTrackReceiver)).call(this, id, mediaStreamTrack));\n }\n\n return MediaTrackReceiver;\n}(MediaTrackTransceiver);\n\nmodule.exports = MediaTrackReceiver;","'use strict';\n\nvar flatMap = require('./util').flatMap;\nvar guessBrowser = require('./util').guessBrowser;\nvar guessBrowserVersion = require('./util').guessBrowserVersion;\nvar getSdpFormat = require('./util/sdp').getSdpFormat;\n\nvar guess = guessBrowser();\nvar guessVersion = guessBrowserVersion();\nvar isChrome = guess === 'chrome';\nvar isFirefox = guess === 'firefox';\nvar isSafari = guess === 'safari';\n\nvar chromeMajorVersion = isChrome ? guessVersion.major : null;\n\nvar CHROME_LEGACY_MAX_AUDIO_LEVEL = 32767;\n\n/**\n * Get the standardized {@link RTCPeerConnection} statistics.\n * @param {RTCPeerConnection} peerConnection\n * @param {object} [options] - Used for testing\n * @returns {Promise.}\n */\nfunction getStats(peerConnection, options) {\n if (!(peerConnection && typeof peerConnection.getStats === 'function')) {\n return Promise.reject(new Error('Given PeerConnection does not support getStats'));\n }\n return _getStats(peerConnection, options);\n}\n\n/**\n * getStats() implementation.\n * @param {RTCPeerConnection} peerConnection\n * @param {object} [options] - Used for testing\n * @returns {Promise.}\n */\nfunction _getStats(peerConnection, options) {\n var localAudioTracks = getTracks(peerConnection, 'audio', 'local');\n var localVideoTracks = getTracks(peerConnection, 'video', 'local');\n var remoteAudioTracks = getTracks(peerConnection, 'audio');\n var remoteVideoTracks = getTracks(peerConnection, 'video');\n\n var statsResponse = {\n activeIceCandidatePair: null,\n localAudioTrackStats: [],\n localVideoTrackStats: [],\n remoteAudioTrackStats: [],\n remoteVideoTrackStats: []\n };\n\n var trackStatsPromises = flatMap([\n [localAudioTracks, 'localAudioTrackStats', false],\n [localVideoTracks, 'localVideoTrackStats', false],\n [remoteAudioTracks, 'remoteAudioTrackStats', true],\n [remoteVideoTracks, 'remoteVideoTrackStats', true]\n ], function(triple) {\n var tracks = triple[0];\n var statsArrayName = triple[1];\n var isRemote = triple[2];\n return tracks.map(function(track) {\n return getTrackStats(peerConnection, track, Object.assign({\n isRemote: isRemote\n }, options)).then(function(stats) {\n stats.trackId = track.id;\n statsResponse[statsArrayName].push(stats);\n });\n });\n });\n\n return Promise.all(trackStatsPromises).then(function() {\n return getActiveIceCandidatePairStats(peerConnection, options);\n }).then(function(activeIceCandidatePairStatsReport) {\n statsResponse.activeIceCandidatePair = activeIceCandidatePairStatsReport;\n return statsResponse;\n });\n}\n\n/**\n * Generate the {@link StandardizedActiveIceCandidatePairStatsReport} for the\n * {@link RTCPeerConnection}.\n * @param {RTCPeerConnection} peerConnection\n * @param {object} [options]\n * @returns {Promise}\n */\nfunction getActiveIceCandidatePairStats(peerConnection, options) {\n options = options || {};\n\n if (typeof options.testForChrome !== 'undefined' || isChrome\n || typeof options.testForSafari !== 'undefined' || isSafari) {\n return peerConnection.getStats().then(\n standardizeChromeOrSafariActiveIceCandidatePairStats);\n }\n if (typeof options.testForFirefox !== 'undefined' || isFirefox) {\n return peerConnection.getStats().then(standardizeFirefoxActiveIceCandidatePairStats);\n }\n return Promise.reject(new Error('RTCPeerConnection#getStats() not supported'));\n}\n\n/**\n * Standardize the active RTCIceCandidate pair's statistics in Chrome or Safari.\n * @param {RTCStatsReport} stats\n * @returns {?StandardizedActiveIceCandidatePairStatsReport}\n */\nfunction standardizeChromeOrSafariActiveIceCandidatePairStats(stats) {\n var activeCandidatePairStats = Array.from(stats.values()).find(function(stat) {\n return stat.type === 'candidate-pair' && stat.nominated;\n });\n\n if (!activeCandidatePairStats) {\n return null;\n }\n\n var activeLocalCandidateStats = stats.get(activeCandidatePairStats.localCandidateId);\n var activeRemoteCandidateStats = stats.get(activeCandidatePairStats.remoteCandidateId);\n\n var standardizedCandidateStatsKeys = [\n { key: 'candidateType', type: 'string' },\n { key: 'ip', type: 'string' },\n { key: 'port', type: 'number' },\n { key: 'priority', type: 'number' },\n { key: 'protocol', type: 'string' },\n { key: 'url', type: 'string' }\n ];\n\n var standardizedLocalCandidateStatsKeys = standardizedCandidateStatsKeys.concat([\n { key: 'deleted', type: 'boolean' },\n { key: 'relayProtocol', type: 'string' }\n ]);\n\n var standatdizedLocalCandidateStatsReport = activeLocalCandidateStats\n ? standardizedLocalCandidateStatsKeys.reduce(function(report, keyInfo) {\n report[keyInfo.key] = typeof activeLocalCandidateStats[keyInfo.key] === keyInfo.type\n ? activeLocalCandidateStats[keyInfo.key]\n : keyInfo.key === 'deleted' ? false : null;\n return report;\n }, {})\n : null;\n\n var standardizedRemoteCandidateStatsReport = activeRemoteCandidateStats\n ? standardizedCandidateStatsKeys.reduce(function(report, keyInfo) {\n report[keyInfo.key] = typeof activeRemoteCandidateStats[keyInfo.key] === keyInfo.type\n ? activeRemoteCandidateStats[keyInfo.key]\n : null;\n return report;\n }, {})\n : null;\n\n return [\n { key: 'availableIncomingBitrate', type: 'number' },\n { key: 'availableOutgoingBitrate', type: 'number' },\n { key: 'bytesReceived', type: 'number' },\n { key: 'bytesSent', type: 'number' },\n { key: 'consentRequestsSent', type: 'number' },\n { key: 'currentRoundTripTime', type: 'number' },\n { key: 'lastPacketReceivedTimestamp', type: 'number' },\n { key: 'lastPacketSentTimestamp', type: 'number' },\n { key: 'nominated', type: 'boolean' },\n { key: 'priority', type: 'number' },\n { key: 'readable', type: 'boolean' },\n { key: 'requestsReceived', type: 'number' },\n { key: 'requestsSent', type: 'number' },\n { key: 'responsesReceived', type: 'number' },\n { key: 'responsesSent', type: 'number' },\n { key: 'retransmissionsReceived', type: 'number' },\n { key: 'retransmissionsSent', type: 'number' },\n { key: 'state', type: 'string' },\n { key: 'totalRoundTripTime', type: 'number' },\n { key: 'transportId', type: 'string' },\n { key: 'writable', type: 'boolean' }\n ].reduce(function(report, keyInfo) {\n report[keyInfo.key] = typeof activeCandidatePairStats[keyInfo.key] === keyInfo.type\n ? activeCandidatePairStats[keyInfo.key]\n : null;\n return report;\n }, {\n localCandidate: standatdizedLocalCandidateStatsReport,\n remoteCandidate: standardizedRemoteCandidateStatsReport\n });\n}\n\n/**\n * Standardize the active RTCIceCandidate pair's statistics in Firefox.\n * @param {RTCStatsReport} stats\n * @returns {?StandardizedActiveIceCandidatePairStatsReport}\n */\nfunction standardizeFirefoxActiveIceCandidatePairStats(stats) {\n var activeCandidatePairStats = Array.from(stats.values()).find(function(stat) {\n return stat.type === 'candidate-pair' && stat.nominated;\n });\n\n if (!activeCandidatePairStats) {\n return null;\n }\n\n var activeLocalCandidateStats = stats.get(activeCandidatePairStats.localCandidateId);\n var activeRemoteCandidateStats = stats.get(activeCandidatePairStats.remoteCandidateId);\n\n var standardizedCandidateStatsKeys = [\n { key: 'candidateType', type: 'string' },\n { key: 'ip', ffKeys: ['address', 'ipAddress'], type: 'string' },\n { key: 'port', ffKeys: ['portNumber'], type: 'number' },\n { key: 'priority', type: 'number' },\n { key: 'protocol', ffKeys: ['transport'], type: 'string' },\n { key: 'url', type: 'string' }\n ];\n\n var standardizedLocalCandidateStatsKeys = standardizedCandidateStatsKeys.concat([\n { key: 'deleted', type: 'boolean' },\n { key: 'relayProtocol', type: 'string' }\n ]);\n\n var candidateTypes = {\n host: 'host',\n peerreflexive: 'prflx',\n relayed: 'relay',\n serverreflexive: 'srflx'\n };\n\n var standatdizedLocalCandidateStatsReport = activeLocalCandidateStats\n ? standardizedLocalCandidateStatsKeys.reduce(function(report, keyInfo) {\n var key = keyInfo.ffKeys && keyInfo.ffKeys.find(function(key) {\n return key in activeLocalCandidateStats;\n }) || keyInfo.key;\n report[keyInfo.key] = typeof activeLocalCandidateStats[key] === keyInfo.type\n ? key === 'candidateType'\n ? candidateTypes[activeLocalCandidateStats[key]] || activeLocalCandidateStats[key]\n : activeLocalCandidateStats[key]\n : key === 'deleted' ? false : null;\n return report;\n }, {})\n : null;\n\n var standardizedRemoteCandidateStatsReport = activeRemoteCandidateStats\n ? standardizedCandidateStatsKeys.reduce(function(report, keyInfo) {\n var key = keyInfo.ffKeys && keyInfo.ffKeys.find(function(key) {\n return key in activeRemoteCandidateStats;\n }) || keyInfo.key;\n report[keyInfo.key] = typeof activeRemoteCandidateStats[key] === keyInfo.type\n ? key === 'candidateType'\n ? candidateTypes[activeRemoteCandidateStats[key]] || activeRemoteCandidateStats[key]\n : activeRemoteCandidateStats[key]\n : null;\n return report;\n }, {})\n : null;\n\n return [\n { key: 'availableIncomingBitrate', type: 'number' },\n { key: 'availableOutgoingBitrate', type: 'number' },\n { key: 'bytesReceived', type: 'number' },\n { key: 'bytesSent', type: 'number' },\n { key: 'consentRequestsSent', type: 'number' },\n { key: 'currentRoundTripTime', type: 'number' },\n { key: 'lastPacketReceivedTimestamp', type: 'number' },\n { key: 'lastPacketSentTimestamp', type: 'number' },\n { key: 'nominated', type: 'boolean' },\n { key: 'priority', type: 'number' },\n { key: 'readable', type: 'boolean' },\n { key: 'requestsReceived', type: 'number' },\n { key: 'requestsSent', type: 'number' },\n { key: 'responsesReceived', type: 'number' },\n { key: 'responsesSent', type: 'number' },\n { key: 'retransmissionsReceived', type: 'number' },\n { key: 'retransmissionsSent', type: 'number' },\n { key: 'state', type: 'string' },\n { key: 'totalRoundTripTime', type: 'number' },\n { key: 'transportId', type: 'string' },\n { key: 'writable', type: 'boolean' }\n ].reduce(function(report, keyInfo) {\n report[keyInfo.key] = typeof activeCandidatePairStats[keyInfo.key] === keyInfo.type\n ? activeCandidatePairStats[keyInfo.key]\n : null;\n return report;\n }, {\n localCandidate: standatdizedLocalCandidateStatsReport,\n remoteCandidate: standardizedRemoteCandidateStatsReport\n });\n}\n\n/**\n * Get local/remote audio/video MediaStreamTracks.\n * @param {RTCPeerConnection} peerConnection - The RTCPeerConnection\n * @param {string} kind - 'audio' or 'video'\n * @param {string} [localOrRemote] - 'local' or 'remote'\n * @returns {Array}\n */\nfunction getTracks(peerConnection, kind, localOrRemote) {\n var getSendersOrReceivers = localOrRemote === 'local' ? 'getSenders' : 'getReceivers';\n if (peerConnection[getSendersOrReceivers]) {\n return peerConnection[getSendersOrReceivers]().map(function(senderOrReceiver) {\n return senderOrReceiver.track;\n }).filter(function(track) {\n return track && track.kind === kind;\n });\n }\n var getStreams = localOrRemote === 'local' ? 'getLocalStreams' : 'getRemoteStreams';\n return flatMap(peerConnection[getStreams](), function(stream) {\n var getTracks = kind === 'audio' ? 'getAudioTracks' : 'getVideoTracks';\n return stream[getTracks]();\n });\n}\n\n/**\n * Get the standardized statistics for a particular MediaStreamTrack.\n * @param {RTCPeerConnection} peerConnection\n * @param {MediaStreamTrack} track\n * @param {object} [options] - Used for testing\n * @returns {Promise.}\n */\nfunction getTrackStats(peerConnection, track, options) {\n options = options || {};\n\n if (typeof options.testForChrome !== 'undefined' || isChrome) {\n return chromeOrSafariGetTrackStats(peerConnection, track);\n }\n if (typeof options.testForFirefox !== 'undefined' || isFirefox) {\n return firefoxGetTrackStats(peerConnection, track, options.isRemote);\n }\n if (typeof options.testForSafari !== 'undefined' || isSafari) {\n if (typeof options.testForSafari !== 'undefined' || getSdpFormat() === 'unified') {\n return chromeOrSafariGetTrackStats(peerConnection, track);\n }\n // NOTE(syerrapragada): getStats() is not supported on\n // Safari versions where plan-b is the SDP format\n // due to this bug: https://bugs.webkit.org/show_bug.cgi?id=192601\n return Promise.reject(new Error([\n 'getStats() is not supported on this version of Safari',\n 'due to this bug: https://bugs.webkit.org/show_bug.cgi?id=192601'\n ].join(' ')));\n }\n return Promise.reject(new Error('RTCPeerConnection#getStats() not supported'));\n}\n\n/**\n * Get the standardized statistics for a particular MediaStreamTrack in Chrome or Safari.\n * @param {RTCPeerConnection} peerConnection\n * @param {MediaStreamTrack} track\n * @returns {Promise.}\n */\nfunction chromeOrSafariGetTrackStats(peerConnection, track) {\n return new Promise(function(resolve, reject) {\n if (chromeMajorVersion && chromeMajorVersion < 67) {\n peerConnection.getStats(function(response) {\n resolve(standardizeChromeLegacyStats(response, track));\n }, null, reject);\n return;\n }\n peerConnection.getStats(track).then(function(response) {\n resolve(standardizeChromeOrSafariStats(response));\n }, reject);\n });\n}\n\n/**\n * Get the standardized statistics for a particular MediaStreamTrack in Firefox.\n * @param {RTCPeerConnection} peerConnection\n * @param {MediaStreamTrack} track\n * @param {boolean} isRemote\n * @returns {Promise.}\n */\nfunction firefoxGetTrackStats(peerConnection, track, isRemote) {\n return new Promise(function(resolve, reject) {\n peerConnection.getStats(track).then(function(response) {\n resolve(standardizeFirefoxStats(response, isRemote));\n }, reject);\n });\n}\n\n/**\n * Standardize the MediaStreamTrack's legacy statistics in Chrome.\n * @param {RTCStatsResponse} response\n * @param {MediaStreamTrack} track\n * @returns {StandardizedTrackStatsReport}\n */\nfunction standardizeChromeLegacyStats(response, track) {\n var ssrcReport = response.result().find(function(report) {\n return report.type === 'ssrc' && report.stat('googTrackId') === track.id;\n });\n\n var standardizedStats = {};\n\n if (ssrcReport) {\n standardizedStats.timestamp = Math.round(Number(ssrcReport.timestamp));\n standardizedStats = ssrcReport.names().reduce(function(stats, name) {\n switch (name) {\n case 'googCodecName':\n stats.codecName = ssrcReport.stat(name);\n break;\n case 'googRtt':\n stats.roundTripTime = Number(ssrcReport.stat(name));\n break;\n case 'googJitterReceived':\n stats.jitter = Number(ssrcReport.stat(name));\n break;\n case 'googFrameWidthInput':\n stats.frameWidthInput = Number(ssrcReport.stat(name));\n break;\n case 'googFrameHeightInput':\n stats.frameHeightInput = Number(ssrcReport.stat(name));\n break;\n case 'googFrameWidthSent':\n stats.frameWidthSent = Number(ssrcReport.stat(name));\n break;\n case 'googFrameHeightSent':\n stats.frameHeightSent = Number(ssrcReport.stat(name));\n break;\n case 'googFrameWidthReceived':\n stats.frameWidthReceived = Number(ssrcReport.stat(name));\n break;\n case 'googFrameHeightReceived':\n stats.frameHeightReceived = Number(ssrcReport.stat(name));\n break;\n case 'googFrameRateInput':\n stats.frameRateInput = Number(ssrcReport.stat(name));\n break;\n case 'googFrameRateSent':\n stats.frameRateSent = Number(ssrcReport.stat(name));\n break;\n case 'googFrameRateReceived':\n stats.frameRateReceived = Number(ssrcReport.stat(name));\n break;\n case 'ssrc':\n stats[name] = ssrcReport.stat(name);\n break;\n case 'bytesReceived':\n case 'bytesSent':\n case 'packetsLost':\n case 'packetsReceived':\n case 'packetsSent':\n case 'audioInputLevel':\n case 'audioOutputLevel':\n stats[name] = Number(ssrcReport.stat(name));\n break;\n }\n\n return stats;\n }, standardizedStats);\n }\n\n return standardizedStats;\n}\n\n/**\n * Standardize the MediaStreamTrack's statistics in Chrome or Safari.\n * @param {RTCStatsResponse} response\n * @returns {StandardizedTrackStatsReport}\n */\nfunction standardizeChromeOrSafariStats(response) {\n var inbound = null;\n var outbound = null;\n var track = null;\n var codec = null;\n\n response.forEach(function(stat) {\n switch (stat.type) {\n case 'inbound-rtp':\n inbound = stat;\n break;\n case 'outbound-rtp':\n outbound = stat;\n break;\n case 'track':\n track = stat;\n break;\n case 'codec':\n codec = stat;\n break;\n }\n });\n\n var isRemote = track && track.remoteSource;\n var standardizedStats = {};\n\n var first = isRemote ? inbound : outbound;\n var second = track;\n var third = codec;\n\n function getStatValue(name) {\n if (first && typeof first[name] !== 'undefined') {\n return first[name];\n }\n\n if (second && typeof second[name] !== 'undefined') {\n return second[name];\n }\n\n if (third && typeof third[name] !== 'undefined') {\n return third[name];\n }\n\n return null;\n }\n\n var ssrc = getStatValue('ssrc');\n if (typeof ssrc === 'number') {\n standardizedStats.ssrc = String(ssrc);\n }\n\n var timestamp = getStatValue('timestamp');\n standardizedStats.timestamp = Math.round(timestamp);\n\n var mimeType = getStatValue('mimeType');\n if (typeof mimeType === 'string') {\n mimeType = mimeType.split('/');\n standardizedStats.codecName = mimeType[mimeType.length - 1];\n }\n\n var roundTripTime = getStatValue('roundTripTime');\n if (typeof roundTripTime === 'number') {\n standardizedStats.roundTripTime = roundTripTime;\n }\n\n var jitter = getStatValue('jitter');\n if (typeof jitter === 'number') {\n standardizedStats.jitter = Math.round(jitter * 1000);\n }\n\n var frameWidth = getStatValue('frameWidth');\n if (typeof frameWidth === 'number') {\n if (isRemote) {\n standardizedStats.frameWidthReceived = frameWidth;\n } else {\n standardizedStats.frameWidthSent = frameWidth;\n }\n }\n\n var frameHeight = getStatValue('frameHeight');\n if (typeof frameHeight === 'number') {\n if (isRemote) {\n standardizedStats.frameHeightReceived = frameHeight;\n } else {\n standardizedStats.frameHeightSent = frameHeight;\n }\n }\n\n var framesPerSecond = getStatValue('framesPerSecond');\n if (typeof framesPerSecond === 'number') {\n standardizedStats.frameRateSent = framesPerSecond;\n }\n\n var bytesReceived = getStatValue('bytesReceived');\n if (typeof bytesReceived === 'number') {\n standardizedStats.bytesReceived = bytesReceived;\n }\n\n var bytesSent = getStatValue('bytesSent');\n if (typeof bytesSent === 'number') {\n standardizedStats.bytesSent = bytesSent;\n }\n\n var packetsLost = getStatValue('packetsLost');\n if (typeof packetsLost === 'number') {\n standardizedStats.packetsLost = packetsLost;\n }\n\n var packetsReceived = getStatValue('packetsReceived');\n if (typeof packetsReceived === 'number') {\n standardizedStats.packetsReceived = packetsReceived;\n }\n\n var packetsSent = getStatValue('packetsSent');\n if (typeof packetsSent === 'number') {\n standardizedStats.packetsSent = packetsSent;\n }\n\n var audioLevel = getStatValue('audioLevel');\n if (typeof audioLevel === 'number') {\n audioLevel = Math.round(audioLevel * CHROME_LEGACY_MAX_AUDIO_LEVEL);\n if (isRemote) {\n standardizedStats.audioOutputLevel = audioLevel;\n } else {\n standardizedStats.audioInputLevel = audioLevel;\n }\n }\n\n return standardizedStats;\n}\n\n/**\n * Standardize the MediaStreamTrack's statistics in Firefox.\n * @param {RTCStatsReport} response\n * @param {boolean} isRemote\n * @returns {StandardizedTrackStatsReport}\n */\nfunction standardizeFirefoxStats(response, isRemote) {\n // NOTE(mroberts): If getStats is called on a closed RTCPeerConnection,\n // Firefox returns undefined instead of an RTCStatsReport. We workaround this\n // here. See the following bug for more details:\n //\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1377225\n //\n response = response || new Map();\n\n var inbound = null;\n var outbound = null;\n\n // NOTE(mmalavalli): Starting from Firefox 63, RTC{Inbound, Outbound}RTPStreamStats.isRemote\n // will be deprecated, followed by its removal in Firefox 66. Also, trying to\n // access members of the remote RTC{Inbound, Outbound}RTPStreamStats without\n // using RTCStatsReport.get(remoteId) will trigger console warnings. So, we\n // no longer depend on \"isRemote\", and we call RTCStatsReport.get(remoteId)\n // to access the remote RTC{Inbound, Outbound}RTPStreamStats.\n //\n // Source: https://blog.mozilla.org/webrtc/getstats-isremote-65/\n //\n response.forEach(function(stat) {\n if (stat.isRemote) {\n return;\n }\n switch (stat.type) {\n case 'inbound-rtp':\n inbound = stat;\n outbound = response.get(stat.remoteId);\n break;\n case 'outbound-rtp':\n outbound = stat;\n inbound = response.get(stat.remoteId);\n break;\n }\n });\n\n var first = isRemote ? inbound : outbound;\n var second = isRemote ? outbound : inbound;\n\n function getStatValue(name) {\n if (first && typeof first[name] !== 'undefined') {\n return first[name];\n }\n if (second && typeof second[name] !== 'undefined') {\n return second[name];\n }\n return null;\n }\n\n var standardizedStats = {};\n var timestamp = getStatValue('timestamp');\n standardizedStats.timestamp = Math.round(timestamp);\n\n var ssrc = getStatValue('ssrc');\n if (typeof ssrc === 'number') {\n standardizedStats.ssrc = String(ssrc);\n }\n\n var bytesSent = getStatValue('bytesSent');\n if (typeof bytesSent === 'number') {\n standardizedStats.bytesSent = bytesSent;\n }\n\n var packetsLost = getStatValue('packetsLost');\n if (typeof packetsLost === 'number') {\n standardizedStats.packetsLost = packetsLost;\n }\n\n var packetsSent = getStatValue('packetsSent');\n if (typeof packetsSent === 'number') {\n standardizedStats.packetsSent = packetsSent;\n }\n\n var roundTripTime = getStatValue('roundTripTime');\n if (typeof roundTripTime === 'number') {\n standardizedStats.roundTripTime = roundTripTime;\n }\n\n var jitter = getStatValue('jitter');\n if (typeof jitter === 'number') {\n standardizedStats.jitter = Math.round(jitter * 1000);\n }\n\n var frameRateSent = getStatValue('framerateMean');\n if (typeof frameRateSent === 'number') {\n standardizedStats.frameRateSent = Math.round(frameRateSent);\n }\n\n var bytesReceived = getStatValue('bytesReceived');\n if (typeof bytesReceived === 'number') {\n standardizedStats.bytesReceived = bytesReceived;\n }\n\n var packetsReceived = getStatValue('packetsReceived');\n if (typeof packetsReceived === 'number') {\n standardizedStats.packetsReceived = packetsReceived;\n }\n\n var frameRateReceived = getStatValue('framerateMean');\n if (typeof frameRateReceived === 'number') {\n standardizedStats.frameRateReceived = Math.round(frameRateReceived);\n }\n\n return standardizedStats;\n}\n\n/**\n * Standardized RTCIceCandidate statistics.\n * @typedef {object} StandardizedIceCandidateStatsReport\n * @property {'host'|'prflx'|'relay'|'srflx'} candidateType\n * @property {string} ip\n * @property {number} port\n * @property {number} priority\n * @property {'tcp'|'udp'} protocol\n * @property {string} url\n */\n\n/**\n * Standardized local RTCIceCandidate statistics.\n * @typedef {StandardizedIceCandidateStatsReport} StandardizedLocalIceCandidateStatsReport\n * @property {boolean} [deleted=false]\n * @property {'tcp'|'tls'|'udp'} relayProtocol\n */\n\n/**\n * Standardized active RTCIceCandidate pair statistics.\n * @typedef {object} StandardizedActiveIceCandidatePairStatsReport\n * @property {number} availableIncomingBitrate\n * @property {number} availableOutgoingBitrate\n * @property {number} bytesReceived\n * @property {number} bytesSent\n * @property {number} consentRequestsSent\n * @property {number} currentRoundTripTime\n * @property {number} lastPacketReceivedTimestamp\n * @property {number} lastPacketSentTimestamp\n * @property {StandardizedLocalIceCandidateStatsReport} localCandidate\n * @property {boolean} nominated\n * @property {number} priority\n * @property {boolean} readable\n * @property {StandardizedIceCandidateStatsReport} remoteCandidate\n * @property {number} requestsReceived\n * @property {number} requestsSent\n * @property {number} responsesReceived\n * @property {number} responsesSent\n * @property {number} retransmissionsReceived\n * @property {number} retransmissionsSent\n * @property {'frozen'|'waiting'|'in-progress'|'failed'|'succeeded'} state\n * @property {number} totalRoundTripTime\n * @property {string} transportId\n * @property {boolean} writable\n */\n\n/**\n * Standardized {@link RTCPeerConnection} statistics.\n * @typedef {Object} StandardizedStatsResponse\n * @property {StandardizedActiveIceCandidatePairStatsReport} activeIceCandidatePair - Stats for active ICE candidate pair\n * @property Array localAudioTrackStats - Stats for local audio MediaStreamTracks\n * @property Array localVideoTrackStats - Stats for local video MediaStreamTracks\n * @property Array remoteAudioTrackStats - Stats for remote audio MediaStreamTracks\n * @property Array remoteVideoTrackStats - Stats for remote video MediaStreamTracks\n */\n\n/**\n * Standardized MediaStreamTrack statistics.\n * @typedef {Object} StandardizedTrackStatsReport\n * @property {string} trackId - MediaStreamTrack ID\n * @property {string} ssrc - SSRC of the MediaStreamTrack\n * @property {number} timestamp - The Unix timestamp in milliseconds\n * @property {string} [codecName] - Name of the codec used to encode the MediaStreamTrack's media\n * @property {number} [roundTripTime] - Round trip time in milliseconds\n * @property {number} [jitter] - Jitter in milliseconds\n * @property {number} [frameWidthInput] - Width in pixels of the local video MediaStreamTrack's captured frame\n * @property {number} [frameHeightInput] - Height in pixels of the local video MediaStreamTrack's captured frame\n * @property {number} [frameWidthSent] - Width in pixels of the local video MediaStreamTrack's encoded frame\n * @property {number} [frameHeightSent] - Height in pixels of the local video MediaStreamTrack's encoded frame\n * @property {number} [frameWidthReceived] - Width in pixels of the remote video MediaStreamTrack's received frame\n * @property {number} [frameHeightReceived] - Height in pixels of the remote video MediaStreamTrack's received frame\n * @property {number} [frameRateInput] - Captured frames per second of the local video MediaStreamTrack\n * @property {number} [frameRateSent] - Frames per second of the local video MediaStreamTrack's encoded video\n * @property {number} [frameRateReceived] - Frames per second of the remote video MediaStreamTrack's received video\n * @property {number} [bytesReceived] - Number of bytes of the remote MediaStreamTrack's media received\n * @property {number} [bytesSent] - Number of bytes of the local MediaStreamTrack's media sent\n * @property {number} [packetsLost] - Number of packets of the MediaStreamTrack's media lost\n * @property {number} [packetsReceived] - Number of packets of the remote MediaStreamTrack's media received\n * @property {number} [packetsSent] - Number of packets of the local MediaStreamTrack's media sent\n * @property {AudioLevel} [audioInputLevel] - The {@link AudioLevel} of the local audio MediaStreamTrack\n * @property {AudioLevel} [audioOutputLevel] - The {@link AudioLevel} of the remote video MediaStreamTrack\n */\n\nmodule.exports = getStats;\n","'use strict';\n\n/**\n * @property {StatsId} id\n * @property {TrackId} trackId\n * @property {number} bitrate - bps\n */\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar SenderOrReceiverReport =\n/**\n * Construct a {@link SenderOrReceiverReport}.\n * @param {StatsId} id\n * @param {TrackId} trackId\n * @param {number} bitrate - bps\n */\nfunction SenderOrReceiverReport(id, trackId, bitrate) {\n _classCallCheck(this, SenderOrReceiverReport);\n\n Object.defineProperties(this, {\n id: {\n enumerable: true,\n value: id\n },\n trackId: {\n enumerable: true,\n value: trackId\n },\n bitrate: {\n enumerable: true,\n value: bitrate\n }\n });\n};\n\nmodule.exports = SenderOrReceiverReport;","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar RemoteTrackPublication = require('./remotetrackpublication');\n\n/**\n * A {@link RemoteAudioTrackPublication} represents a {@link RemoteAudioTrack}\n * that has been published to a {@link Room}.\n * @property {Track.Kind} kind - \"audio\"\n * @property {?RemoteAudioTrack} track - unless you have subscribed to the\n * {@link RemoteAudioTrack}, this property is null\n * @emits RemoteAudioTrackPublication#subscribed\n * @emits RemoteAudioTrackPublication#subscriptionFailed\n * @emits RemoteAudioTrackPublication#trackDisabled\n * @emits RemoteAudioTrackPublication#trackEnabled\n * @emits RemoteAudioTrackPublication#unsubscribed\n */\n\nvar RemoteAudioTrackPublication = function (_RemoteTrackPublicati) {\n _inherits(RemoteAudioTrackPublication, _RemoteTrackPublicati);\n\n /**\n * Construct a {@link RemoteAudioTrackPublication}.\n * @param {RemoteTrackPublicationSignaling} signaling - {@link RemoteTrackPublication} signaling\n * @param {RemoteTrackPublicationOptions} options - {@link RemoteTrackPublication}\n * options\n */\n function RemoteAudioTrackPublication(signaling, options) {\n _classCallCheck(this, RemoteAudioTrackPublication);\n\n return _possibleConstructorReturn(this, (RemoteAudioTrackPublication.__proto__ || Object.getPrototypeOf(RemoteAudioTrackPublication)).call(this, signaling, options));\n }\n\n _createClass(RemoteAudioTrackPublication, [{\n key: 'toString',\n value: function toString() {\n return '[RemoteAudioTrackPublication #' + this._instanceId + ': ' + this.trackSid + ']';\n }\n }]);\n\n return RemoteAudioTrackPublication;\n}(RemoteTrackPublication);\n\n/**\n * Your {@link LocalParticipant} subscribed to the {@link RemoteAudioTrack}.\n * @param {RemoteAudioTrack} track - the {@link RemoteAudioTrack} that was subscribed to\n * @event RemoteAudioTrackPublication#subscribed\n */\n\n/**\n * Your {@link LocalParticipant} failed to subscribe to the {@link RemoteAudioTrack}.\n * @param {TwilioError} error - the reason the {@link RemoteAudioTrack} could not be\n * subscribed to\n * @event RemoteAudioTrackPublication#subscriptionFailed\n */\n\n/**\n * The {@link RemoteAudioTrack} was disabled.\n * @event RemoteAudioTrackPublication#trackDisabled\n */\n\n/**\n * The {@link RemoteAudioTrack} was enabled.\n * @event RemoteAudioTrackPublication#trackEnabled\n */\n\n/**\n * Your {@link LocalParticipant} unsubscribed from the {@link RemoteAudioTrack}.\n * @param {RemoteAudioTrack} track - the {@link RemoteAudioTrack} that was unsubscribed from\n * @event RemoteAudioTrackPublication#unsubscribed\n */\n\nmodule.exports = RemoteAudioTrackPublication;","'use strict';\n\nvar EventEmitter = require('events').EventEmitter;\n\n/**\n * Event target.\n * @class\n */\nfunction EventTarget() {\n Object.defineProperties(this, {\n _eventEmitter: {\n value: new EventEmitter()\n }\n });\n}\n\n/**\n * Dispatch an Event to the {@link EventTarget}.\n * @param {Event} event\n */\nEventTarget.prototype.dispatchEvent = function dispatchEvent(event) {\n return this._eventEmitter.emit(event.type, event);\n};\n\n/**\n * Add an Event listener to the {@link EventTarget}.\n */\nEventTarget.prototype.addEventListener = function addEventListener() {\n return this._eventEmitter.addListener.apply(this._eventEmitter, arguments);\n};\n\n/**\n * Remove an Event listener to the {@link EventTarget}.\n */\nEventTarget.prototype.removeEventListener = function removeEventListener() {\n return this._eventEmitter.removeListener.apply(this._eventEmitter, arguments);\n};\n\nmodule.exports = EventTarget;\n","// Copyright (c) 2012 Mathieu Turcotte\n// Licensed under the MIT license.\n\nvar util = require('util');\nvar precond = require('precond');\n\nvar BackoffStrategy = require('./strategy');\n\n// Exponential backoff strategy.\nfunction ExponentialBackoffStrategy(options) {\n BackoffStrategy.call(this, options);\n this.backoffDelay_ = 0;\n this.nextBackoffDelay_ = this.getInitialDelay();\n this.factor_ = ExponentialBackoffStrategy.DEFAULT_FACTOR;\n\n if (options && options.factor !== undefined) {\n precond.checkArgument(options.factor > 1,\n 'Exponential factor should be greater than 1 but got %s.',\n options.factor);\n this.factor_ = options.factor;\n }\n}\nutil.inherits(ExponentialBackoffStrategy, BackoffStrategy);\n\n// Default multiplication factor used to compute the next backoff delay from\n// the current one. The value can be overridden by passing a custom factor as\n// part of the options.\nExponentialBackoffStrategy.DEFAULT_FACTOR = 2;\n\nExponentialBackoffStrategy.prototype.next_ = function() {\n this.backoffDelay_ = Math.min(this.nextBackoffDelay_, this.getMaxDelay());\n this.nextBackoffDelay_ = this.backoffDelay_ * this.factor_;\n return this.backoffDelay_;\n};\n\nExponentialBackoffStrategy.prototype.reset_ = function() {\n this.backoffDelay_ = 0;\n this.nextBackoffDelay_ = this.getInitialDelay();\n};\n\nmodule.exports = ExponentialBackoffStrategy;\n","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar MediaTrack = require('./mediatrack');\n\n/**\n * A {@link VideoTrack} is a {@link Track} representing video.\n * @extends Track\n * @property {boolean} isStarted - Whether or not the {@link VideoTrack} has\n * started; if the {@link VideoTrack} started, there is enough video data to\n * begin playback\n * @property {boolean} isEnabled - Whether or not the {@link VideoTrack} is\n * enabled; if the {@link VideoTrack} is not enabled, it is \"paused\"\n * @property {VideoTrack.Dimensions} dimensions - The {@link VideoTrack}'s\n * {@link VideoTrack.Dimensions}\n * @property {Track.Kind} kind - \"video\"\n * @property {MediaStreamTrack} mediaStreamTrack - A video MediaStreamTrack\n * @emits VideoTrack#dimensionsChanged\n * @emits VideoTrack#disabled\n * @emits VideoTrack#enabled\n * @emits VideoTrack#started\n */\n\nvar VideoTrack = function (_MediaTrack) {\n _inherits(VideoTrack, _MediaTrack);\n\n /**\n * Construct a {@link VideoTrack}.\n * @param {MediaTrackTransceiver} mediaTrackTransceiver\n * @param {{log: Log}} options\n */\n function VideoTrack(mediaTrackTransceiver, options) {\n var _ret;\n\n _classCallCheck(this, VideoTrack);\n\n var _this = _possibleConstructorReturn(this, (VideoTrack.__proto__ || Object.getPrototypeOf(VideoTrack)).call(this, mediaTrackTransceiver, options));\n\n Object.defineProperties(_this, {\n dimensions: {\n enumerable: true,\n value: {\n width: null,\n height: null\n }\n }\n });\n return _ret = _this, _possibleConstructorReturn(_this, _ret);\n }\n\n /**\n * @private\n */\n\n\n _createClass(VideoTrack, [{\n key: '_initialize',\n value: function _initialize() {\n var _this2 = this;\n\n _get(VideoTrack.prototype.__proto__ || Object.getPrototypeOf(VideoTrack.prototype), '_initialize', this).call(this);\n if (this._dummyEl) {\n this._dummyEl.onloadedmetadata = function () {\n if (dimensionsChanged(_this2, _this2._dummyEl)) {\n _this2.dimensions.width = _this2._dummyEl.videoWidth;\n _this2.dimensions.height = _this2._dummyEl.videoHeight;\n }\n };\n this._dummyEl.onresize = function () {\n if (dimensionsChanged(_this2, _this2._dummyEl)) {\n _this2.dimensions.width = _this2._dummyEl.videoWidth;\n _this2.dimensions.height = _this2._dummyEl.videoHeight;\n if (_this2.isStarted) {\n _this2._log.debug('Dimensions changed:', _this2.dimensions);\n _this2.emit(VideoTrack.DIMENSIONS_CHANGED, _this2);\n }\n }\n };\n }\n }\n\n /**\n * @private\n */\n\n }, {\n key: '_start',\n value: function _start(dummyEl) {\n this.dimensions.width = dummyEl.videoWidth;\n this.dimensions.height = dummyEl.videoHeight;\n\n this._log.debug('Dimensions:', this.dimensions);\n return _get(VideoTrack.prototype.__proto__ || Object.getPrototypeOf(VideoTrack.prototype), '_start', this).call(this, dummyEl);\n }\n\n /**\n * Create an HTMLVideoElement and attach the {@link VideoTrack} to it.\n *\n * The HTMLVideoElement's srcObject will be set to a new\n * MediaStream containing the {@link VideoTrack}'s MediaStreamTrack.\n *\n * @returns {HTMLVideoElement} videoElement\n * @example\n * const Video = require('twilio-video');\n *\n * Video.createLocalVideoTrack().then(function(videoTrack) {\n * const videoElement = videoTrack.attach();\n * document.body.appendChild(videoElement);\n * });\n */ /**\n * Attach the {@link VideoTrack} to an existing HTMLMediaElement. The\n * HTMLMediaElement could be an HTMLAudioElement or an HTMLVideoElement.\n *\n * If the HTMLMediaElement's srcObject is not set to a MediaStream,\n * this method sets it to a new MediaStream containing the {@link VideoTrack}'s\n * MediaStreamTrack; otherwise, it adds the {@link MediaTrack}'s\n * MediaStreamTrack to the existing MediaStream. Finally, if there are any other\n * MediaStreamTracks of the same kind on the MediaStream, this method removes\n * them.\n *\n * @param {HTMLMediaElement} mediaElement - The HTMLMediaElement to attach to\n * @returns {HTMLMediaElement} mediaElement\n * @example\n * const Video = require('twilio-video');\n *\n * const videoElement = document.createElement('video');\n * document.body.appendChild(videoElement);\n *\n * Video.createLocalVideoTrack().then(function(videoTrack) {\n * videoTrack.attach(videoElement);\n * });\n */ /**\n * Attach the {@link VideoTrack} to an HTMLMediaElement selected by\n * document.querySelector. The HTMLMediaElement could be an\n * HTMLAudioElement or an HTMLVideoElement.\n *\n * If the HTMLMediaElement's srcObject is not set to a MediaStream,\n * this method sets it to a new MediaStream containing the {@link VideoTrack}'s\n * MediaStreamTrack; otherwise, it adds the {@link VideoTrack}'s\n * MediaStreamTrack to the existing MediaStream. Finally, if there are any other\n * MediaStreamTracks of the same kind on the MediaStream, this method removes\n * them.\n *\n * @param {string} selector - A query selector for the HTMLMediaElement to\n * attach to\n * @returns {HTMLMediaElement} mediaElement\n * @example\n * const Video = require('twilio-video');\n *\n * const videoElement = document.createElement('video');\n * videoElement.id = 'my-video-element';\n * document.body.appendChild(videoElement);\n *\n * Video.createLocalVideoTrack().then(function(track) {\n * track.attach('#my-video-element');\n * });\n */\n\n }, {\n key: 'attach',\n value: function attach() {\n return _get(VideoTrack.prototype.__proto__ || Object.getPrototypeOf(VideoTrack.prototype), 'attach', this).apply(this, arguments);\n }\n\n /**\n * Detach the {@link VideoTrack} from all previously attached HTMLMediaElements.\n * @returns {Array} mediaElements\n * @example\n * const mediaElements = videoTrack.detach();\n * mediaElements.forEach(mediaElement => mediaElement.remove());\n */ /**\n * Detach the {@link VideoTrack} from a previously attached HTMLMediaElement.\n * @param {HTMLMediaElement} mediaElement - One of the HTMLMediaElements to\n * which the {@link VideoTrack} is attached\n * @returns {HTMLMediaElement} mediaElement\n * @example\n * const videoElement = document.getElementById('my-video-element');\n * videoTrack.detach(videoElement).remove();\n */ /**\n * Detach the {@link VideoTrack} from a previously attached HTMLMediaElement\n * specified by document.querySelector.\n * @param {string} selector - The query selector of HTMLMediaElement to which\n * the {@link VideoTrack} is attached\n * @returns {HTMLMediaElement} mediaElement\n * @example\n * videoTrack.detach('#my-video-element').remove();\n */\n\n }, {\n key: 'detach',\n value: function detach() {\n return _get(VideoTrack.prototype.__proto__ || Object.getPrototypeOf(VideoTrack.prototype), 'detach', this).apply(this, arguments);\n }\n }]);\n\n return VideoTrack;\n}(MediaTrack);\n\nVideoTrack.DIMENSIONS_CHANGED = 'dimensionsChanged';\n\nfunction dimensionsChanged(track, elem) {\n return track.dimensions.width !== elem.videoWidth || track.dimensions.height !== elem.videoHeight;\n}\n\n/**\n * A {@link VideoTrack}'s width and height.\n * @typedef {object} VideoTrack.Dimensions\n * @property {?number} width - The {@link VideoTrack}'s width or null if the\n * {@link VideoTrack} has not yet started\n * @property {?number} height - The {@link VideoTrack}'s height or null if the\n * {@link VideoTrack} has not yet started\n */\n\n/**\n * The {@link VideoTrack}'s dimensions changed.\n * @param {VideoTrack} track - The {@link VideoTrack} whose dimensions changed\n * @event VideoTrack#dimensionsChanged\n */\n\n/**\n * The {@link VideoTrack} was disabled, i.e. \"paused\".\n * @param {VideoTrack} track - The {@link VideoTrack} that was disabled\n * @event VideoTrack#disabled\n */\n\n/**\n * The {@link VideoTrack} was enabled, i.e. \"unpaused\".\n * @param {VideoTrack} track - The {@link VideoTrack} that was enabled\n * @event VideoTrack#enabled\n */\n\n/**\n * The {@link VideoTrack} started. This means there is enough video data to\n * begin playback.\n * @param {VideoTrack} track - The {@link VideoTrack} that started\n * @event VideoTrack#started\n */\n\nmodule.exports = VideoTrack;","'use strict';\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar difference = require('../').difference;\nvar flatMap = require('../').flatMap;\nvar setSimulcastInMediaSection = require('./simulcast');\n\nvar ptToFixedBitrateAudioCodecName = {\n 0: 'PCMU',\n 8: 'PCMA'\n};\n\n/**\n * A payload type\n * @typedef {number} PT\n */\n\n/**\n * An {@link AudioCodec} or {@link VideoCodec}\n * @typedef {AudioCodec|VideoCodec} Codec\n */\n\n// NOTE(mmalavalli): This value is derived from the IETF spec\n// for JSEP, and it is used to convert a 'b=TIAS' value in bps\n// to a 'b=AS' value in kbps.\n// Spec: https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-21#section-5.9\nvar RTCP_BITRATE = 16000;\n\n/**\n * Construct a b= line string for the given max bitrate in bps. If the modifier\n * is 'AS', then the max bitrate will be converted to kbps using the formula\n * specified in the IETF spec for JSEP mentioned above.\n * @param {string} modifier - 'AS' | 'TIAS'\n * @param {?number} maxBitrate - Max outgoing bitrate (bps)\n * @returns {?string} - If \"maxBitrate\" is null, then returns null;\n * otherwise return the constructed b= line string\n */\nfunction createBLine(modifier, maxBitrate) {\n if (!maxBitrate) {\n return null;\n }\n return '\\r\\nb=' + modifier + ':' + (modifier === 'AS' ? Math.round((maxBitrate + RTCP_BITRATE) / 950) : maxBitrate);\n}\n\n/**\n * Create a Codec Map for the given m= section.\n * @param {string} section - The given m= section\n * @returns {Map>}\n */\nfunction createCodecMapForMediaSection(section) {\n return Array.from(createPtToCodecName(section)).reduce(function (codecMap, pair) {\n var pt = pair[0];\n var codecName = pair[1];\n var pts = codecMap.get(codecName) || [];\n return codecMap.set(codecName, pts.concat(pt));\n }, new Map());\n}\n\n/**\n * Create a Map of MIDs to m= sections for the given SDP.\n * @param {string} sdp\n * @returns {Map}\n */\nfunction createMidToMediaSectionMap(sdp) {\n return getMediaSections(sdp).reduce(function (midsToMediaSections, mediaSection) {\n var mid = getMidForMediaSection(mediaSection);\n return mid ? midsToMediaSections.set(mid, mediaSection) : midsToMediaSections;\n }, new Map());\n}\n\n/**\n * Create a Map from PTs to codec names for the given m= section.\n * @param {string} mediaSection - The given m= section.\n * @returns {Map} ptToCodecName\n */\nfunction createPtToCodecName(mediaSection) {\n return getPayloadTypesInMediaSection(mediaSection).reduce(function (ptToCodecName, pt) {\n var rtpmapPattern = new RegExp('a=rtpmap:' + pt + ' ([^/]+)');\n var matches = mediaSection.match(rtpmapPattern);\n var codecName = matches ? matches[1].toLowerCase() : ptToFixedBitrateAudioCodecName[pt] ? ptToFixedBitrateAudioCodecName[pt].toLowerCase() : '';\n return ptToCodecName.set(pt, codecName);\n }, new Map());\n}\n\n/**\n * Get the associated fmtp attributes for the given Payload Type in an m= section.\n * @param {PT} pt\n * @param {string} mediaSection\n * @returns {?object}\n */\nfunction getFmtpAttributesForPt(pt, mediaSection) {\n // In \"a=fmtp: =[;=]*\", the regex matches the codec\n // profile parameters expressed as name/value pairs separated by \";\".\n var fmtpRegex = new RegExp('^a=fmtp:' + pt + ' (.+)$', 'm');\n var matches = mediaSection.match(fmtpRegex);\n return matches && matches[1].split(';').reduce(function (attrs, nvPair) {\n var _nvPair$split = nvPair.split('='),\n _nvPair$split2 = _slicedToArray(_nvPair$split, 2),\n name = _nvPair$split2[0],\n value = _nvPair$split2[1];\n\n attrs[name] = isNaN(value) ? value : parseInt(value, 10);\n return attrs;\n }, {});\n}\n\n/**\n * Get the MID for the given m= section.\n * @param {string} mediaSection\n * @return {?string}\n */\nfunction getMidForMediaSection(mediaSection) {\n // In \"a=mid:\", the regex matches .\n var midMatches = mediaSection.match(/^a=mid:(.+)$/m);\n return midMatches && midMatches[1];\n}\n\n/**\n * Get the m= sections of a particular kind and direction from an sdp.\n * @param {string} sdp - SDP string\n * @param {string} [kind] - Pattern for matching kind\n * @param {string} [direction] - Pattern for matching direction\n * @returns {Array} mediaSections\n */\nfunction getMediaSections(sdp, kind, direction) {\n return sdp.replace(/\\r\\n\\r\\n$/, '\\r\\n').split('\\r\\nm=').slice(1).map(function (mediaSection) {\n return 'm=' + mediaSection;\n }).filter(function (mediaSection) {\n var kindPattern = new RegExp('m=' + (kind || '.*'), 'gm');\n var directionPattern = new RegExp('a=' + (direction || '.*'), 'gm');\n return kindPattern.test(mediaSection) && directionPattern.test(mediaSection);\n });\n}\n\n/**\n * Get the Codec Payload Types present in the first line of the given m= section\n * @param {string} section - The m= section\n * @returns {Array} Payload Types\n */\nfunction getPayloadTypesInMediaSection(section) {\n var mLine = section.split('\\r\\n')[0];\n\n // In \"m= ... \",\n // the regex matches and the Payload Types.\n var matches = mLine.match(/([0-9]+)/g);\n\n // This should not happen, but in case there are no Payload Types in\n // the m= line, return an empty array.\n if (!matches) {\n return [];\n }\n\n // Since only the Payload Types are needed, we discard the .\n return matches.slice(1).map(function (match) {\n return parseInt(match, 10);\n });\n}\n\n/**\n * Create the reordered Codec Payload Types based on the preferred Codec Names.\n * @param {Map>} codecMap - Codec Map\n * @param {Array} preferredCodecs - Preferred Codec Names\n * @returns {Array} Reordered Payload Types\n */\nfunction getReorderedPayloadTypes(codecMap, preferredCodecs) {\n preferredCodecs = preferredCodecs.map(function (codecName) {\n return codecName.toLowerCase();\n });\n\n var preferredPayloadTypes = flatMap(preferredCodecs, function (codecName) {\n return codecMap.get(codecName) || [];\n });\n\n var remainingCodecs = difference(Array.from(codecMap.keys()), preferredCodecs);\n var remainingPayloadTypes = flatMap(remainingCodecs, function (codecName) {\n return codecMap.get(codecName);\n });\n\n return preferredPayloadTypes.concat(remainingPayloadTypes);\n}\n\n/**\n * Set the specified max bitrate in the given m= section.\n * @param {string} modifier - 'AS' | 'TIAS'\n * @param {?number} maxBitrate - Max outgoing bitrate (bps)\n * @param {string} section - m= section string\n * @returns {string} The updated m= section\n */\nfunction setBitrateInMediaSection(modifier, maxBitrate, section) {\n var bLine = createBLine(modifier, maxBitrate) || '';\n var bLinePattern = /\\r\\nb=(AS|TIAS):([0-9]+)/;\n var bLineMatched = section.match(bLinePattern);\n\n if (!bLineMatched) {\n return section.replace(/(\\r\\n)?$/, bLine + '$1');\n }\n\n var maxBitrateMatched = parseInt(bLineMatched[2], 10);\n maxBitrate = maxBitrate || Infinity;\n bLine = createBLine(modifier, Math.min(maxBitrateMatched, maxBitrate));\n return section.replace(bLinePattern, bLine);\n}\n\n/**\n * Set maximum bitrates to the media sections in a given sdp.\n * @param {string} sdp - sdp string\n * @param {string} modifier - 'AS' | 'TIAS\"\n * @param {?number} maxAudioBitrate - Max outgoing audio bitrate (bps), null\n * if no limit is to be applied\n * @param {?number} maxVideoBitrate - Max outgoing video bitrate (bps), null\n * if no limit is to be applied\n * @returns {string} - The updated sdp string\n */\nfunction setBitrateParameters(sdp, modifier, maxAudioBitrate, maxVideoBitrate) {\n var mediaSections = getMediaSections(sdp);\n var session = sdp.split('\\r\\nm=')[0];\n return [session].concat(mediaSections.map(function (section) {\n // Bitrate parameters should not be applied to m=application sections\n // or to m=(audio|video) sections that do not receive media.\n if (!/^m=(audio|video)/.test(section) || !/a=(recvonly|sendrecv)/.test(section)) {\n return section;\n }\n var kind = section.match(/^m=(audio|video)/)[1];\n var maxBitrate = kind === 'audio' ? maxAudioBitrate : maxVideoBitrate;\n return setBitrateInMediaSection(modifier, maxBitrate, section);\n })).join('\\r\\n');\n}\n\n/**\n * Set the given Codec Payload Types in the first line of the given m= section.\n * @param {Array} payloadTypes - Payload Types\n * @param {string} section - Given m= section\n * @returns {string} - Updated m= section\n */\nfunction setPayloadTypesInMediaSection(payloadTypes, section) {\n var lines = section.split('\\r\\n');\n var mLine = lines[0];\n var otherLines = lines.slice(1);\n mLine = mLine.replace(/([0-9]+\\s?)+$/, payloadTypes.join(' '));\n return [mLine].concat(otherLines).join('\\r\\n');\n}\n\n/**\n * Return a new SDP string with the re-ordered codec preferences.\n * @param {string} sdp\n * @param {Array} preferredAudioCodecs - If empty, the existing order\n * of audio codecs is preserved\n * @param {Array} preferredVideoCodecs - If empty, the\n * existing order of video codecs is preserved\n * @returns {string} Updated SDP string\n */\nfunction setCodecPreferences(sdp, preferredAudioCodecs, preferredVideoCodecs) {\n var mediaSections = getMediaSections(sdp);\n var session = sdp.split('\\r\\nm=')[0];\n return [session].concat(mediaSections.map(function (section) {\n // Codec preferences should not be applied to m=application sections.\n if (!/^m=(audio|video)/.test(section)) {\n return section;\n }\n var kind = section.match(/^m=(audio|video)/)[1];\n var codecMap = createCodecMapForMediaSection(section);\n var preferredCodecs = kind === 'audio' ? preferredAudioCodecs : preferredVideoCodecs.map(function (codec) {\n return codec.codec;\n });\n var payloadTypes = getReorderedPayloadTypes(codecMap, preferredCodecs);\n var newSection = setPayloadTypesInMediaSection(payloadTypes, section);\n\n var pcmaPayloadTypes = codecMap.get('pcma') || [];\n var pcmuPayloadTypes = codecMap.get('pcmu') || [];\n var fixedBitratePayloadTypes = kind === 'audio' ? new Set(pcmaPayloadTypes.concat(pcmuPayloadTypes)) : new Set();\n\n return fixedBitratePayloadTypes.has(payloadTypes[0]) ? newSection.replace(/\\r\\nb=(AS|TIAS):([0-9]+)/g, '') : newSection;\n })).join('\\r\\n');\n}\n\n/**\n * Return a new SDP string with simulcast settings.\n * @param {string} sdp\n * @param {'planb' | 'unified'} sdpFormat\n * @param {Map} trackIdsToAttributes\n * @returns {string} Updated SDP string\n */\nfunction setSimulcast(sdp, sdpFormat, trackIdsToAttributes) {\n var mediaSections = getMediaSections(sdp);\n var session = sdp.split('\\r\\nm=')[0];\n return [session].concat(mediaSections.map(function (section) {\n section = section.replace(/\\r\\n$/, '');\n if (!/^m=video/.test(section)) {\n return section;\n }\n var codecMap = createCodecMapForMediaSection(section);\n var payloadTypes = getPayloadTypesInMediaSection(section);\n var vp8PayloadTypes = new Set(codecMap.get('vp8') || []);\n\n var hasVP8PayloadType = payloadTypes.some(function (payloadType) {\n return vp8PayloadTypes.has(payloadType);\n });\n return hasVP8PayloadType ? setSimulcastInMediaSection(section, sdpFormat, trackIdsToAttributes) : section;\n })).concat('').join('\\r\\n');\n}\n\n/**\n * Get the matching Payload Types in a unified plan local m= section for a particular remote codec.\n * @param {Codec} remoteCodec\n * @param {PT} remotePt\n * @param {Map} localCodecsToPts\n * @param {string} localSection\n * @param {string} remoteSection\n * @returns {Array}\n */\nfunction unifiedPlanGetMatchingLocalPayloadTypes(remoteCodec, remotePt, localCodecsToPts, localSection, remoteSection) {\n // If there is at most one local Payload Type that matches the remote codec, retain it.\n var matchingLocalPts = localCodecsToPts.get(remoteCodec) || [];\n if (matchingLocalPts.length <= 1) {\n return matchingLocalPts;\n }\n\n // If there are no fmtp attributes for the codec in the remote m= section,\n // then we cannot get a match in the local m= section. In that case, retain\n // all matching local Payload Types.\n var remoteFmtpAttrs = getFmtpAttributesForPt(remotePt, remoteSection);\n if (!remoteFmtpAttrs) {\n return matchingLocalPts;\n }\n\n // Among the matched local Payload Types, find the one that matches the remote\n // fmtp attributes.\n var matchinglocalPt = matchingLocalPts.find(function (localPt) {\n var localFmtpAttrs = getFmtpAttributesForPt(localPt, localSection);\n return localFmtpAttrs && Object.keys(remoteFmtpAttrs).every(function (attr) {\n return remoteFmtpAttrs[attr] === localFmtpAttrs[attr];\n });\n });\n\n // If none of the matched local Payload Types also have matching fmtp attributes,\n // then retain all of them, otherwise retain only the local Payload Type that\n // matches the remote fmtp attributes.\n return typeof matchinglocalPt === 'number' ? [matchinglocalPt] : matchingLocalPts;\n}\n\n/**\n * Filter codecs in a local unified plan m= section based on its equivalent remote m= section.\n * @param {string} localSection\n * @param {Map} remoteMidsToMediaSections\n * @returns {string}\n */\nfunction unifiedPlanFilterCodecsInLocalMediaSection(localSection, remoteMidsToMediaSections) {\n // Do nothing if the local m= section represents neither audio nor video.\n if (!/^m=(audio|video)/.test(localSection)) {\n return localSection;\n }\n\n // Do nothing if the local m= section does not have an equivalent remote m= section.\n var localMid = getMidForMediaSection(localSection);\n var remoteSection = localMid && remoteMidsToMediaSections.get(localMid);\n if (!remoteSection) {\n return localSection;\n }\n\n // Construct a Map of the remote Payload Types to their codec names.\n var remotePtToCodecs = createPtToCodecName(remoteSection);\n // Construct a Map of the local codec names to their Payload Types.\n var localCodecsToPts = createCodecMapForMediaSection(localSection);\n // Maintain a list of local non-rtx Payload Types to retain.\n var localPts = flatMap(Array.from(remotePtToCodecs), function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n remotePt = _ref2[0],\n remoteCodec = _ref2[1];\n\n return remoteCodec !== 'rtx' ? unifiedPlanGetMatchingLocalPayloadTypes(remoteCodec, remotePt, localCodecsToPts, localSection, remoteSection) : [];\n });\n\n // For each local Payload Type that will be retained, retain their\n // corresponding rtx Payload Type if present.\n var localRtxPts = localCodecsToPts.get('rtx') || [];\n // In \"a=fmtp: apt=\", extract the codec PT associated with rtxPt.\n localPts = localPts.concat(localRtxPts.filter(function (rtxPt) {\n var fmtpAttrs = getFmtpAttributesForPt(rtxPt, localSection);\n return fmtpAttrs && localPts.includes(fmtpAttrs.apt);\n }));\n\n // Filter out the below mentioned attribute lines in the local m= section that\n // do not belong to one of the local Payload Types that are to be retained.\n // 1. \"a=rtpmap: \"\n // 2. \"a=rtcp-fb: [ ]*\"\n // 3. \"a=fmtp: =[;=]*\"\n var lines = localSection.split('\\r\\n').filter(function (line) {\n var ptMatches = line.match(/^a=(rtpmap|fmtp|rtcp-fb):(.+) .+$/);\n var pt = ptMatches && ptMatches[2];\n return !ptMatches || pt && localPts.includes(parseInt(pt, 10));\n });\n\n // Filter the list of Payload Types in the first line of the m= section.\n var orderedLocalPts = getPayloadTypesInMediaSection(localSection).filter(function (pt) {\n return localPts.includes(pt);\n });\n return setPayloadTypesInMediaSection(orderedLocalPts, lines.join('\\r\\n'));\n}\n\n/**\n * Filter local codecs based on the remote unified plan SDP.\n * @param {string} localSdp\n * @param {string} remoteSdp\n * @returns {string} - Updated local SDP\n */\nfunction unifiedPlanFilterLocalCodecs(localSdp, remoteSdp) {\n var localMediaSections = getMediaSections(localSdp);\n var localSession = localSdp.split('\\r\\nm=')[0];\n var remoteMidsToMediaSections = createMidToMediaSectionMap(remoteSdp);\n return [localSession].concat(localMediaSections.map(function (localSection) {\n return unifiedPlanFilterCodecsInLocalMediaSection(localSection, remoteMidsToMediaSections);\n })).join('\\r\\n');\n}\n\n/**\n * Return a new SDP string after reverting simulcast for non vp8 sections in remote sdp.\n * @param localSdp - simulcast enabled local sdp\n * @param localSdpWithoutSimulcast - local sdp before simulcast was set\n * @param remoteSdp - remote sdp\n * @return {string} Updated SDP string\n */\nfunction revertSimulcastForNonVP8MediaSections(localSdp, localSdpWithoutSimulcast, remoteSdp) {\n var remoteMidToMediaSections = createMidToMediaSectionMap(remoteSdp);\n var localMidToMediaSectionsWithoutSimulcast = createMidToMediaSectionMap(localSdpWithoutSimulcast);\n var mediaSections = getMediaSections(localSdp);\n var session = localSdp.split('\\r\\nm=')[0];\n return [session].concat(mediaSections.map(function (section) {\n section = section.replace(/\\r\\n$/, '');\n if (!/^m=video/.test(section)) {\n return section;\n }\n var midMatches = section.match(/^a=mid:(.+)$/m);\n var mid = midMatches && midMatches[1];\n if (!mid) {\n return section;\n }\n\n var remoteSection = remoteMidToMediaSections.get(mid);\n var remotePtToCodecs = createPtToCodecName(remoteSection);\n var remotePayloadTypes = getPayloadTypesInMediaSection(remoteSection);\n\n var isVP8ThePreferredCodec = remotePayloadTypes.length && remotePtToCodecs.get(remotePayloadTypes[0]) === 'vp8';\n return isVP8ThePreferredCodec ? section : localMidToMediaSectionsWithoutSimulcast.get(mid).replace(/\\r\\n$/, '');\n })).concat('').join('\\r\\n');\n}\n\n/**\n * Add or rewrite MSIDs for new m= sections in the given Unified Plan SDP with their\n * corresponding local MediaStreamTrack IDs. These can be different when previously\n * removed MediaStreamTracks are added back (or Track IDs may not be present in the\n * SDPs at all once browsers implement the latest WebRTC spec).\n * @param {string} sdp\n * @param {Map} activeMidsToTrackIds\n * @param {Map>} trackIdsByKind\n * @returns {string}\n */\nfunction unifiedPlanAddOrRewriteNewTrackIds(sdp, activeMidsToTrackIds, trackIdsByKind) {\n // NOTE(mmalavalli): The m= sections for the new MediaStreamTracks are usually\n // present after the m= sections for the existing MediaStreamTracks, in order\n // of addition.\n var newMidsToTrackIds = Array.from(trackIdsByKind).reduce(function (midsToTrackIds, _ref3) {\n var _ref4 = _slicedToArray(_ref3, 2),\n kind = _ref4[0],\n trackIds = _ref4[1];\n\n var mediaSections = getMediaSections(sdp, kind, 'send(only|recv)');\n var newMids = mediaSections.map(getMidForMediaSection).filter(function (mid) {\n return !activeMidsToTrackIds.has(mid);\n });\n newMids.forEach(function (mid, i) {\n return midsToTrackIds.set(mid, trackIds[i]);\n });\n return midsToTrackIds;\n }, new Map());\n return unifiedPlanAddOrRewriteTrackIds(sdp, newMidsToTrackIds);\n}\n\n/**\n * Add or rewrite MSIDs in the given Unified Plan SDP with their corresponding local\n * MediaStreamTrack IDs. These IDs need not be the same (or Track IDs may not be\n * present in the SDPs at all once browsers implement the latest WebRTC spec).\n * @param {string} sdp\n * @param {Map} midsToTrackIds\n * @returns {string}\n */\nfunction unifiedPlanAddOrRewriteTrackIds(sdp, midsToTrackIds) {\n var mediaSections = getMediaSections(sdp);\n var session = sdp.split('\\r\\nm=')[0];\n return [session].concat(mediaSections.map(function (mediaSection) {\n // Do nothing if the m= section represents neither audio nor video.\n if (!/^m=(audio|video)/.test(mediaSection)) {\n return mediaSection;\n }\n // This shouldn't happen, but in case there is no MID for the m= section, do nothing.\n var mid = getMidForMediaSection(mediaSection);\n if (!mid) {\n return mediaSection;\n }\n // In case there is no Track ID for the given MID in the map, do nothing.\n var trackId = midsToTrackIds.get(mid);\n if (!trackId) {\n return mediaSection;\n }\n // This shouldn't happen, but in case there is no a=msid: line, do nothing.\n var attributes = (mediaSection.match(/^a=msid:(.+)$/m) || [])[1];\n if (!attributes) {\n return mediaSection;\n }\n // If the a=msid: line contains the \"appdata\" field, then replace it with the Track ID,\n // otherwise append the Track ID.\n\n var _attributes$split = attributes.split(' '),\n _attributes$split2 = _slicedToArray(_attributes$split, 2),\n msid = _attributes$split2[0],\n trackIdToRewrite = _attributes$split2[1];\n\n var msidRegex = new RegExp('msid:' + msid + (trackIdToRewrite ? ' ' + trackIdToRewrite : '') + '$', 'gm');\n return mediaSection.replace(msidRegex, 'msid:' + msid + ' ' + trackId);\n })).join('\\r\\n');\n}\n\nexports.createCodecMapForMediaSection = createCodecMapForMediaSection;\nexports.createPtToCodecName = createPtToCodecName;\nexports.getMediaSections = getMediaSections;\nexports.revertSimulcastForNonVP8MediaSections = revertSimulcastForNonVP8MediaSections;\nexports.setBitrateParameters = setBitrateParameters;\nexports.setCodecPreferences = setCodecPreferences;\nexports.setSimulcast = setSimulcast;\nexports.unifiedPlanFilterLocalCodecs = unifiedPlanFilterLocalCodecs;\nexports.unifiedPlanAddOrRewriteNewTrackIds = unifiedPlanAddOrRewriteNewTrackIds;\nexports.unifiedPlanAddOrRewriteTrackIds = unifiedPlanAddOrRewriteTrackIds;","'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _require = require('@twilio/webrtc'),\n MediaStreamTrack = _require.MediaStreamTrack;\n\nvar _require2 = require('@twilio/webrtc/lib/util'),\n guessBrowser = _require2.guessBrowser,\n guessBrowserVersion = _require2.guessBrowserVersion;\n\nvar createCancelableRoomPromise = require('./cancelableroompromise');\nvar createLocalTracks = require('./createlocaltracks');\nvar EncodingParametersImpl = require('./encodingparameters');\nvar ConstantIceServerSource = require('./iceserversource/constant');\nvar NTSIceServerSource = require('./iceserversource/nts');\nvar LocalParticipant = require('./localparticipant');\n\nvar _require3 = require('./media/track/es5'),\n LocalAudioTrack = _require3.LocalAudioTrack,\n LocalDataTrack = _require3.LocalDataTrack,\n LocalVideoTrack = _require3.LocalVideoTrack;\n\nvar NetworkQualityConfigurationImpl = require('./networkqualityconfiguration');\nvar Room = require('./room');\nvar SignalingV2 = require('./signaling/v2');\n\nvar _require4 = require('./util'),\n asLocalTrack = _require4.asLocalTrack,\n buildLogLevels = _require4.buildLogLevels,\n filterObject = _require4.filterObject,\n isNonArrayObject = _require4.isNonArrayObject;\n\nvar _require5 = require('./util/constants'),\n DEFAULT_ENVIRONMENT = _require5.DEFAULT_ENVIRONMENT,\n DEFAULT_LOG_LEVEL = _require5.DEFAULT_LOG_LEVEL,\n DEFAULT_REALM = _require5.DEFAULT_REALM,\n DEFAULT_REGION = _require5.DEFAULT_REGION,\n ICE_SERVERS_TIMEOUT_MS = _require5.ICE_SERVERS_TIMEOUT_MS,\n WS_SERVER = _require5.WS_SERVER,\n E = _require5.typeErrors;\n\nvar CancelablePromise = require('./util/cancelablepromise');\nvar Log = require('./util/log');\n\nvar _require6 = require('./util/validate'),\n validateBandwidthProfile = _require6.validateBandwidthProfile;\n\nvar safariVersion = guessBrowser() === 'safari' && guessBrowserVersion();\n\n// This is used to make out which connect() call a particular Log statement\n// belongs to. Each call to connect() increments this counter.\nvar connectCalls = 0;\n\nvar didPrintSafariWarning = false;\nvar didPrintDscpTaggingWarning = false;\nvar isSafariWithoutVP8Support = false;\n\nif (safariVersion) {\n var safariMajorVersion = safariVersion.major,\n safariMinorVersion = safariVersion.minor;\n\n isSafariWithoutVP8Support = safariMajorVersion < 12 || safariMajorVersion === 12 && safariMinorVersion < 1;\n}\n\n/**\n * Connect to a {@link Room}.\n *

\n * By default, this will automatically acquire an array containing a\n * {@link LocalAudioTrack} and {@link LocalVideoTrack} before connecting to\n * the {@link Room}. These will be stopped when you disconnect from the\n * {@link Room}.\n *

\n * You can override the default behavior by specifying\n * options. For example, rather than acquiring a\n * {@link LocalAudioTrack} and {@link LocalVideoTrack} automatically, you can\n * pass your own array which you can stop yourself. See {@link ConnectOptions}\n * for more information.\n * @alias module:twilio-video.connect\n * @param {string} token - The Access Token string\n * @param {ConnectOptions} [options] - Options to override the default behavior\n * @returns {CancelablePromise}\n * @throws {RangeError}\n * @throws {TwilioError}\n * @throws {TypeError}\n * @example\n * var Video = require('twilio-video');\n * var token = getAccessToken();\n * Video.connect(token, {\n * name: 'my-cool-room'\n * }).then(function(room) {\n * room.on('participantConnected', function(participant) {\n * console.log(participant.identity + ' has connected');\n * });\n\n * room.once('disconnected', function() {\n * console.log('You left the Room:', room.name);\n * });\n * }).catch(error => {\n * console.log('Could not connect to the Room:', error.message);\n * });\n * @example\n * var Video = require('twilio-video');\n * var token = getAccessToken();\n *\n * // Connect with audio-only\n * Video.connect(token, {\n * name: 'my-cool-room',\n * audio: true\n * }).then(function(room) {\n * room.on('participantConnected', function(participant) {\n * console.log(participant.identity + ' has connected');\n * });\n *\n * room.once('disconnected', function() {\n * console.log('You left the Room:', room.name);\n * });\n * }).catch(error => {\n * console.log('Could not connect to the Room:', error.message);\n * });\n * @example\n * var Video = require('twilio-video');\n * var token = getAccessToken();\n *\n * // Connect with media acquired using getUserMedia()\n * navigator.mediaDevices.getUserMedia({\n * audio: true,\n * video: true\n * }).then(function(mediaStream) {\n * return Video.connect(token, {\n * name: 'my-cool-room',\n * tracks: mediaStream.getTracks()\n * });\n * }).then(function(room) {\n * room.on('participantConnected', function(participant) {\n * console.log(participant.identity + ' has connected');\n * });\n *\n * room.once('disconnected', function() {\n * console.log('You left the Room:', room.name);\n * });\n * }).catch(error => {\n * console.log('Could not connect to the Room:', error.message);\n * });\n * @example\n * var Video = require('twilio-video');\n * var token = getAccessToken();\n *\n * // Connect with custom names for LocalAudioTrack and LocalVideoTrack\n * Video.connect(token, {\n * name: 'my-cool-room'\n * audio: { name: 'microphone' },\n * video: { name: 'camera' }\n * }).then(function(room) {\n * room.localParticipants.trackPublications.forEach(function(publication) {\n * console.log('The LocalTrack \"' + publication.trackName + '\" was successfully published');\n * });\n * }).catch(error => {\n * console.log('Could not connect to the Room:', error.message);\n * });\n */\nfunction connect(token, options) {\n if (typeof options === 'undefined') {\n options = {};\n }\n if (!isNonArrayObject(options)) {\n return CancelablePromise.reject(E.INVALID_TYPE('options', 'object'));\n }\n\n var shouldPrintDscpTaggingWarning = false;\n if ('dscpTagging' in options) {\n options = Object.assign({\n enableDscp: options.dscpTagging\n }, options);\n delete options.dscpTagging;\n shouldPrintDscpTaggingWarning = !didPrintDscpTaggingWarning;\n }\n\n options = Object.assign({\n abortOnIceServersTimeout: false,\n automaticSubscription: true,\n createLocalTracks: createLocalTracks,\n dominantSpeaker: false,\n enableDscp: false,\n environment: DEFAULT_ENVIRONMENT,\n iceServersTimeout: ICE_SERVERS_TIMEOUT_MS,\n insights: true,\n LocalAudioTrack: LocalAudioTrack,\n LocalDataTrack: LocalDataTrack,\n LocalParticipant: LocalParticipant,\n LocalVideoTrack: LocalVideoTrack,\n Log: Log,\n MediaStreamTrack: MediaStreamTrack,\n logLevel: DEFAULT_LOG_LEVEL,\n maxAudioBitrate: null,\n maxVideoBitrate: null,\n name: null,\n networkQuality: false,\n preferredAudioCodecs: [],\n preferredVideoCodecs: [],\n realm: DEFAULT_REALM,\n region: DEFAULT_REGION,\n signaling: SignalingV2\n }, filterObject(options));\n\n /* eslint new-cap:0 */\n var wsServer = WS_SERVER(options.environment, options.region);\n\n options = Object.assign({ wsServer: wsServer }, options);\n\n var logLevels = buildLogLevels(options.logLevel);\n var logComponentName = '[connect #' + ++connectCalls + ']';\n\n var log = void 0;\n try {\n log = new options.Log('default', logComponentName, logLevels);\n } catch (error) {\n return CancelablePromise.reject(error);\n }\n options.log = log;\n\n // NOTE(mmalavalli): Print the \"dscpTagging\" deprecation warning once if the log-level\n // is at least \"warn\", i.e. neither \"error\" nor \"off\".\n if (shouldPrintDscpTaggingWarning && log.level !== 'error' && log.level !== 'off') {\n didPrintDscpTaggingWarning = true;\n log.warn(['The ConnectOptions flag \"dscpTagging\" is deprecated and scheduled for removal.', 'Please use \"enableDscp\" instead.'].join(' '));\n }\n\n // NOTE(mroberts): Print the Safari warning once if the log-level is at least\n // \"warn\", i.e. neither \"error\" nor \"off\".\n // NOTE(mmalavalli): Print the Safari warning only for versions 12.0 and below.\n if (isSafariWithoutVP8Support && !didPrintSafariWarning && log.logLevel !== 'error' && log.logLevel !== 'off') {\n didPrintSafariWarning = true;\n log.warn(['Support for Safari 12.0 and below is limited because it does not support VP8.', 'This means you may experience codec issues in Group Rooms. You may also', 'experience codec issues in Peer-to-Peer (P2P) Rooms containing Android- or', 'iOS-based Participants who do not support H.264. However, P2P Rooms', 'with browser-based Participants should work. For more information, please', 'refer to this guide: https://www.twilio.com/docs/video/javascript-v2-developing-safari-11'].join(' '));\n }\n\n if (typeof token !== 'string') {\n return CancelablePromise.reject(E.INVALID_TYPE('token', 'string'));\n }\n\n // NOTE(mmalavalli): The Room \"name\" in \"options\" was being used\n // as the LocalTrack name in asLocalTrack(). So we pass a copy of\n // \"options\" without the \"name\".\n var localTrackOptions = Object.assign({}, options);\n delete localTrackOptions.name;\n\n if ('tracks' in options) {\n if (!Array.isArray(options.tracks)) {\n return CancelablePromise.reject(E.INVALID_TYPE('options.tracks', 'Array of LocalAudioTrack, LocalVideoTrack or MediaStreamTrack'));\n }\n try {\n options.tracks = options.tracks.map(function (track) {\n return asLocalTrack(track, localTrackOptions);\n });\n } catch (error) {\n return CancelablePromise.reject(error);\n }\n }\n\n var error = validateBandwidthProfile(options.bandwidthProfile);\n if (error) {\n return CancelablePromise.reject(error);\n }\n\n var Signaling = options.signaling;\n var signaling = new Signaling(options.wsServer, options);\n\n log.info('Connecting to a Room');\n log.debug('Options:', options);\n\n var encodingParameters = new EncodingParametersImpl({\n maxAudioBitrate: options.maxAudioBitrate,\n maxVideoBitrate: options.maxVideoBitrate\n });\n\n var ntsIceServerSourceOptions = Object.assign({}, options, {\n abortOnTimeout: options.abortOnIceServersTimeout,\n timeout: options.iceServersTimeout\n });\n\n var iceServerSource = Array.isArray(options.iceServers) ? new ConstantIceServerSource(options.iceServers) : _typeof(options.iceServers) === 'object' ? options.iceServers : new NTSIceServerSource(token, ntsIceServerSourceOptions);\n\n var preferredCodecs = {\n audio: options.preferredAudioCodecs,\n video: options.preferredVideoCodecs.map(normalizeVideoCodecSettings)\n };\n\n var networkQualityConfiguration = new NetworkQualityConfigurationImpl(isNonArrayObject(options.networkQuality) ? options.networkQuality : {});\n\n // Convert options.networkQuality to boolean to configure Media Signaling\n options.networkQuality = isNonArrayObject(options.networkQuality) || options.networkQuality;\n\n // Create a CancelableRoomPromise that resolves after these steps:\n // 1 - Get the LocalTracks.\n // 2 - Create the LocalParticipant using options.tracks.\n // 3 - Connect to rtc-room-service and create the RoomSignaling.\n // 4 - Create the Room and then resolve the CancelablePromise.\n var cancelableRoomPromise = createCancelableRoomPromise(getLocalTracks.bind(null, options), createLocalParticipant.bind(null, signaling, log, encodingParameters, networkQualityConfiguration, options), createRoomSignaling.bind(null, token, options, signaling, iceServerSource, encodingParameters, preferredCodecs), createRoom.bind(null, options));\n\n cancelableRoomPromise.then(function (room) {\n log.info('Connected to Room:', room.toString());\n log.info('Room name:', room.name);\n log.debug('Room:', room);\n return room;\n }, function (error) {\n if (iceServerSource.isStarted) {\n iceServerSource.stop();\n }\n if (cancelableRoomPromise._isCanceled) {\n log.info('Attempt to connect to a Room was canceled');\n } else {\n log.info('Error while connecting to a Room:', error);\n }\n });\n\n return cancelableRoomPromise;\n}\n\n/**\n * You may pass these options to {@link connect} in order to override the\n * default behavior.\n * @typedef {object} ConnectOptions\n * @property {boolean} [abortOnIceServersTimeout=false] - If fetching ICE\n * servers times out (for example, due to a restrictive network or slow HTTP\n * proxy), then, by default, twilio-video.js will fallback to using hard-coded\n * STUN servers and continue connecting to the Room. Setting this property to\n * true will cause twilio-video.js to abort instead, and\n * {@link connect} will reject with a {@link ConfigurationAcquireFailedError}.\n * @property {boolean|CreateLocalTrackOptions} [audio=true] - Whether or not to\n * get local audio with getUserMedia when tracks\n * are not provided.\n * @property {boolean} [automaticSubscription=true] - By default, you will subscribe\n * to all RemoteTracks shared by other Participants in a Room. You can now override this\n * behavior by setting this flag to false. It will make sure that you will\n * not subscribe to any RemoteTrack in a Group or Small Group Room. Setting it to\n * true, or not setting it at all preserves the default behavior. This\n * flag does not have any effect in a Peer-to-Peer Room.\n * @property {BandwidthProfileOptions} [bandwidthProfile] - You can optionally configure\n * how your available downlink bandwidth is shared among the RemoteTracks you have subscribed\n * to in a Group Room. By default, bandwidth is shared equally among the RemoteTracks.\n * This has no effect in Peer-to-Peer Rooms.\n * @property {boolean} [dominantSpeaker=false] - Whether to enable the Dominant\n * Speaker API or not. This only takes effect in Group Rooms.\n * @property {boolean} [dscpTagging=false] - (deprecated: use \"enableDscp\" instead)\n * DSCP tagging allows you to request enhanced QoS treatment for RTP media packets from any\n * firewall that the client may be behind. Setting this option to true will\n * request DSCP tagging for media packets on supported browsers (only Chrome supports this\n * as of now). Audio packets will be sent with DSCP header value set to 0xb8 which corresponds\n * to Expedited Forwarding (EF). Video packets will be sent with DSCP header value set to 0x88\n * which corresponds to Assured Forwarding (AF41).\n * @property {boolean} [enableDscp=false] - DSCP tagging allows you to request enhanced\n * QoS treatment for RTP media packets from any firewall that the client may be behind.\n * Setting this option to true will request DSCP tagging for media packets\n * on supported browsers (only Chrome supports this as of now). Audio packets will be\n * sent with DSCP header value set to 0xb8 which corresponds to Expedited Forwarding (EF).\n * Video packets will be sent with DSCP header value set to 0x88 which corresponds to\n * Assured Forwarding (AF41).\n * @property {Array} iceServers - Override the STUN and TURN\n * servers used when connecting to {@link Room}s\n * @property {number} [iceServersTimeout=3000] - Override the amount of time, in\n * milliseconds, that the SDK will wait when acquiring STUN and TURN servers\n * @property {RTCIceTransportPolicy} [iceTransportPolicy=\"all\"] - Override the\n * ICE transport policy to be one of \"relay\" or \"all\"\n * @property {boolean} [insights=true] - Whether publishing events\n * to the Insights gateway is enabled or not\n * @property {?number} [maxAudioBitrate=null] - Max outgoing audio bitrate (bps);\n * A null or a 0 value does not set any bitrate limit;\n * This value is set as a hint for variable bitrate codecs, but will not take\n * effect for fixed bitrate codecs; Based on our tests, Chrome, Firefox and Safari\n * support a bitrate range of 12000 bps to 256000 bps for Opus codec; This parameter\n * has no effect on iSAC, PCMU and PCMA codecs\n * @property {?number} [maxVideoBitrate=null] - Max outgoing video bitrate (bps);\n * A null or 0 value does not set any bitrate limit;\n * This value is set as a hint for variable bitrate codecs, but will not take\n * effect for fixed bitrate codecs; Based on our tests, Chrome, Firefox and Safari\n * all seem to support an average bitrate range of 20000 bps (20 kbps) to\n * 8000000 bps (8 mbps) for a 720p VideoTrack\n * @property {?string} [name=null] - Set to connect to a {@link Room} by name\n * @property {boolean|NetworkQualityConfiguration} [networkQuality=false] - Whether to enable the Network\n * Quality API or not. This only takes effect in Group Rooms. Pass a {@link NetworkQualityConfiguration}\n * to configure verbosity levels for network quality information for {@link LocalParticipant}\n * and {@link RemoteParticipant}s. A true value will set the {@link NetworkQualityVerbosity}\n * for the {@link LocalParticipant} to {@link NetworkQualityVerbosity}#minimal\n * and the {@link NetworkQualityVerbosity} for {@link RemoteParticipant}s to\n * {@link NetworkQualityVerbosity}#none.\n * @property {string} [region='gll'] - Preferred signaling region; By default, you will be connected to the\n * nearest signaling server determined by latency based routing. Setting a value other\n * than gll bypasses routing and guarantees that signaling traffic will be\n * terminated in the region that you prefer. Please refer to this table\n * for the list of supported signaling regions.\n * @property {Array} [preferredAudioCodecs=[]] - Preferred audio codecs;\n * An empty array preserves the current audio codec preference order.\n * @property {Array} [preferredVideoCodecs=[]] -\n * Preferred video codecs; An empty array preserves the current video codec\n * preference order. If you want to set a preferred video codec on a Group Room,\n * you will need to create the Room using the REST API and set the\n * VideoCodecs property.\n * See \n * here for more information.\n * @property {LogLevel|LogLevels} [logLevel='warn'] - Set the log verbosity\n * of logging to console. Passing a {@link LogLevel} string will use the same\n * level for all components. Pass a {@link LogLevels} to set specific log\n * levels.\n * @property {Array} [tracks] - The\n * {@link LocalTrack}s or MediaStreamTracks with which to join the\n * {@link Room}. These tracks can be obtained either by calling\n * {@link createLocalTracks}, or by constructing them from the MediaStream\n * obtained by calling getUserMedia().\n * @property {boolean|CreateLocalTrackOptions} [video=true] - Whether or not to\n * get local video with getUserMedia when tracks\n * are not provided.\n */\n\n/**\n * {@link BandwidthProfileOptions} allows you to configure how your available downlink\n * bandwidth is shared among the RemoteTracks you have subscribed to in a Group Room.\n * @typedef {object} BandwidthProfileOptions\n * @property {VideoBandwidthProfileOptions} [video] - Optional parameter to configure\n * how your available downlink bandwidth is shared among the {@link RemoteVideoTrack}s you\n * have subscribed to in a Group Room.\n */\n\n/**\n * {@link VideoBandwidthProfileOptions} allows you to configure how your available downlink\n * bandwidth is shared among the {@link RemoteVideoTrack}s you have subscribed to in a Group Room.\n * @typedef {object} VideoBandwidthProfileOptions\n * @property {Track.Priority} [dominantSpeakerPriority=\"standard\"] - Optional parameter to\n * specify the minimum subscribe {@link Track.Priority} of the Dominant Speaker's {@link RemoteVideoTrack}s.\n * This means that the Dominant Speaker's {@link RemoteVideoTrack}s that are published with\n * lower {@link Track.Priority} will be subscribed to with the {@link Track.Priority} specified here.\n * This has no effect on {@link RemoteVideoTrack}s published with higher {@link Track.Priority}, which will\n * still be subscribed to with with the same {@link Track.Priority}. If not specified, this defaults to \"standard\".\n * This parameter only applies to a Group Room Participant when {@link ConnectOptions}.dominantSpeaker is set to true.\n * @property {number} [maxSubscriptionBitrate] - Optional parameter to specify the maximum\n * downlink video bandwidth in bits per second (bps). By default, there are no limits on\n * the downlink video bandwidth.\n * @property {number} [maxTracks] - Optional parameter to specify the maximum number of visible\n * {@link RemoteVideoTrack}s, which will be selected based on {@link Track.Priority} and an N-Loudest\n * policy. By default there are no limits on the number of visible {@link RemoteVideoTrack}s.\n * 0 or a negative value will remove any limit on the maximum number of visible {@link RemoteVideoTrack}s.\n * @property {BandwidthProfileMode} [mode=\"grid\"] - Optional parameter to specify how the {@link RemoteVideoTrack}s'\n * TrackPriority values are mapped to bandwidth allocation in Group Rooms. This defaults to \"grid\",\n * which results in equal bandwidth share allocation to all {@link RemoteVideoTrack}s.\n * @property {VideoRenderDimensions} [renderDimensions] - Optional parameter to specify the desired\n * render dimensions of {@link RemoteVideoTrack}s based on {@link Track.Priority} and the\n * {@link RemoteVideoTrack}s of the Dominant Speaker.\n * @property {TrackSwitchOffMode} [trackSwitchOffMode=\"predicted\"] - Optional parameter to configure\n * how {@link RemoteVideoTrack}s are switched off in response to bandwidth pressure. Defaults to \"predicted\".\n */\n\n/**\n * {@link VideoRenderDimensions} allows you to specify the desired render dimensions of {@link RemoteVideoTrack}s\n * based on {@link Track.Priority}. The bandwidth allocation algorithm will distribute the available downlink bandwidth\n * proportional to the requested render dimensions. This is just an input for calculating the bandwidth to be allocated\n * and does not affect the actual resolution of the {@link RemoteVideoTrack}s.\n * @typedef {object} VideoRenderDimensions\n * @property {VideoTrack.Dimensions} [high] - Optional parameter to specify the desired rendering dimensions of\n * {@link RemoteVideoTrack} whose {@link Track.Priority} is \"high\". 0 or a negative value will result in the lowest\n * possible resolution. This defaults to 1280 x 720 (HD).\n * @property {VideoTrack.Dimensions} [low] - Optional parameter to specify the desired rendering dimensions of\n * {@link RemoteVideoTrack} whose {@link Track.Priority} is \"low\". 0 or a negative value will result in the lowest\n * possible resolution. This defaults to 176 x 144 (QCIF).\n * @property {VideoTrack.Dimensions} [standard] - Optional parameter to specify the desired rendering dimensions of\n * {@link RemoteVideoTrack} whose {@link Track.Priority} is \"standard\". 0 or a negative value will result in the lowest\n * possible resolution. This defaults to 640 x 480 (VGA).\n */\n\n/**\n * Configure verbosity levels for network quality information for\n * {@link LocalParticipant} and {@link RemoteParticipant}s.\n * @typedef {object} NetworkQualityConfiguration\n * @property {NetworkQualityVerbosity} [local=1] - Verbosity level for {@link LocalParticipant}\n * @property {NetworkQualityVerbosity} [remote=0] - Verbosity level for {@link RemoteParticipant}s\n */\n\n/**\n * You may pass these levels to {@link ConnectOptions} to override\n * log levels for individual components.\n * @typedef {object} LogLevels\n * @property {LogLevel} [default='warn'] - Log level for 'default' modules.\n * @property {LogLevel} [media='warn'] - Log level for 'media' modules.\n * @property {LogLevel} [signaling='warn'] - Log level for 'signaling' modules.\n * @property {LogLevel} [webrtc='warn'] - Log level for 'webrtc' modules.\n */\n\n/**\n * Video codec settings.\n * @typedef {object} VideoCodecSettings\n * @property {VideoCodec} codec - Video codec name\n */\n\n/**\n * VP8 codec settings.\n * @typedef {VideoCodecSettings} VP8CodecSettings\n * @property {VideoCodec} name - \"VP8\"\n * @property {boolean} [simulcast=false] - Enable/disable VP8 simulcast; if\n * enabled, Twilio's Video SDK will send three video streams of different\n * qualities\n */\n\n/**\n * Names of the supported audio codecs.\n * @enum {string}\n */\n// eslint-disable-next-line\nvar AudioCodec = {\n isac: 'isac',\n opus: 'opus',\n PCMA: 'PCMA',\n PCMU: 'PCMU'\n};\n\n/**\n * Names of the supported video codecs.\n * @enum {string}\n */\n// eslint-disable-next-line\nvar VideoCodec = {\n H264: 'H264',\n VP8: 'VP8',\n VP9: 'VP9'\n};\n\n/**\n * Levels for logging verbosity.\n * @enum {string}\n */\n// eslint-disable-next-line\nvar LogLevel = {\n debug: 'debug',\n info: 'info',\n warn: 'warn',\n error: 'error',\n off: 'off'\n};\n\n/**\n * The verbosity level of network quality information of a {@link Participant}.\n * @enum {number}\n */\n// eslint-disable-next-line\nvar NetworkQualityVerbosity = {\n /**\n * Nothing is reported for the {@link Participant}. This has no effect and\n * defaults to {@link NetworkQualityVerbosity}#minimal\n * for the {@link LocalParticipant}.\n */\n none: 0,\n /**\n * Reports {@link NetworkQualityLevel} for the {@link Participant}.\n */\n minimal: 1,\n /**\n * Reports {@link NetworkQualityLevel} and {@link NetworkQualityStats} for the {@link Participant}.\n * {@link NetworkQualityStats} is populated with audio and video {@link NetworkQualityLevel}s\n * based on which the {@link Participant}'s {@link NetworkQualityLevel} is calculated.\n */\n moderate: 2,\n /**\n * Reports {@link NetworkQualityLevel} and {@link NetworkQualityStats} for the {@link Participant}.\n * {@link NetworkQualityStats} is populated with audio and Video {@link NetworkQualityLevel}s\n * and their corresponding {@link NetworkQualityMediaStats} based on which the\n * {@link Participant}'s {@link NetworkQualityLevel} is calculated.\n */\n detailed: 3\n};\n\n/**\n * {@link TrackSwitchOffMode} specifies when {@link RemoteVideoTrack}s' are switched off.\n * @enum {string}\n */\n// eslint-disable-next-line\nvar TrackSwitchOffMode = {\n /**\n * In this mode, {@link RemoteVideoTrack}s are switched off only when network congestion\n * is detected.\n */\n detected: 'detected',\n\n /**\n * In this mode, {@link RemoteVideoTrack}s are pro-actively switched off when network\n * congestion is predicted by the bandwidth estimation mechanism.\n */\n predicted: 'predicted',\n\n /**\n * In this mode, {@link RemoteVideoTrack}s are not switched off. Instead in response to network\n * congestion, tracks will be adjusted to lower quality.\n */\n disabled: 'disabled'\n};\n\n/**\n * {@link BandwidthProfileMode} specifies how {@link RemoteVideoTrack}s' {@link Track.Priority} values\n * are mapped to bandwidth allocation in Group Rooms.\n * @enum {string}\n */\n// eslint-disable-next-line\nvar BandwidthProfileMode = {\n /**\n * This mode is for use cases where all the subscribed {@link RemoteVideoTrack}s are\n * equally important. The bandwidth allocation algorithm will share the available\n * downlink bandwidth equally among the subscribed {@link RemoteVideoTrack}s, irrespective\n * of their {@link Track.Priority}. In case of insufficient downlink bandwidth, the lower\n * priority {@link RemoteVideoTrack}s are switched off.\n */\n grid: 'grid',\n /**\n * This mode is for use cases where some {@link RemoteVideoTrack}s are prioritized more than\n * others. However, the lower priority {@link RemoteVideoTrack}s still need to be visible.\n * The bandwidth allocation algorithm will share the available downlink bandwidth proportional\n * to the requested {@link VideoRenderDimensions} corresponding to their {@link Track.Priority}.\n * In case of insufficient downlink bandwidth, the quality of higher priority {@link RemoteVideoTrack}s\n * may be degraded to avoid switching off lower priority {@link RemoteVideoTrack}s.\n */\n collaboration: 'collaboration',\n /**\n * This mode is for use cases where some {@link RemoteVideoTrack}s are deemed critical and must\n * be preserved at any cost over the other {@link RemoteVideoTrack}s. The bandwidth allocation\n * algorithm will allocate as big a share of the available downlink bandwidth as it possibly\n * can to the higher priority {@link RemoteVideoTrack}s, and only then consider the lower priority\n * {@link RemoteVideoTrack}s. In case of insufficient downlink bandwidth, the lower priority\n * {@link RemoteVideoTrack}s are switched off in order to preserve the quality of the higher\n * priority {@link RemoteVideoTrack}s.\n */\n presentation: 'presentation'\n};\n\nfunction createLocalParticipant(signaling, log, encodingParameters, networkQualityConfiguration, options, localTracks) {\n var localParticipantSignaling = signaling.createLocalParticipantSignaling(encodingParameters, networkQualityConfiguration);\n log.debug('Creating a new LocalParticipant:', localParticipantSignaling);\n return new options.LocalParticipant(localParticipantSignaling, localTracks, options);\n}\n\nfunction createRoom(options, localParticipant, roomSignaling) {\n var room = new Room(localParticipant, roomSignaling, options);\n var log = options.log;\n\n log.debug('Creating a new Room:', room);\n roomSignaling.on('stateChanged', function stateChanged(state) {\n if (state === 'disconnected') {\n log.info('Disconnected from Room:', room.toString());\n roomSignaling.removeListener('stateChanged', stateChanged);\n }\n });\n\n return room;\n}\n\nfunction createRoomSignaling(token, options, signaling, iceServerSource, encodingParameters, preferredCodecs, localParticipant) {\n var log = options.log;\n log.info('Getting ICE servers');\n log.debug('Options:', options);\n\n return iceServerSource.start().then(function (iceServers) {\n var roomSignalingParams = {\n token: token\n };\n\n log.info('Got ICE servers');\n log.debug('ICE servers:', iceServers);\n\n options.iceServers = iceServers;\n log.debug('Creating a new RoomSignaling');\n log.debug('RoomSignaling params:', roomSignalingParams);\n\n return signaling.connect(localParticipant._signaling, token, iceServerSource, encodingParameters, preferredCodecs, options);\n });\n}\n\nfunction getLocalTracks(options, handleLocalTracks) {\n var log = options.log;\n\n options.shouldStopLocalTracks = !options.tracks;\n if (options.shouldStopLocalTracks) {\n log.info('LocalTracks were not provided, so they will be acquired ' + 'automatically before connecting to the Room. LocalTracks will ' + 'be released if connecting to the Room fails or if the Room ' + 'is disconnected');\n } else {\n log.info('Getting LocalTracks');\n log.debug('Options:', options);\n }\n\n return options.createLocalTracks(options).then(function getLocalTracksSucceeded(localTracks) {\n var promise = handleLocalTracks(localTracks);\n\n promise.catch(function handleLocalTracksFailed() {\n if (options.shouldStopLocalTracks) {\n log.info('The automatically acquired LocalTracks will now be stopped');\n localTracks.forEach(function (track) {\n track.stop();\n });\n }\n });\n\n return promise;\n });\n}\n\nfunction normalizeVideoCodecSettings(nameOrSettings) {\n var settings = typeof nameOrSettings === 'string' ? { codec: nameOrSettings } : nameOrSettings;\n switch (settings.codec.toLowerCase()) {\n case 'vp8':\n {\n return Object.assign({ simulcast: false }, settings);\n }\n default:\n {\n return settings;\n }\n }\n}\n\nmodule.exports = connect;","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar TrackPublication = require('./trackpublication');\n\n/**\n * A {@link RemoteTrackPublication} represents a {@link RemoteTrack} that has\n * been published to a {@link Room}.\n * @extends TrackPublication\n * @property {boolean} isSubscribed - whether the published {@link RemoteTrack}\n * is subscribed to\n * @property {boolean} isTrackEnabled - whether the published\n * {@link RemoteTrack} is enabled\n * @property {Track.Kind} kind - kind of the published {@link RemoteTrack}\n * @property {Track.Priority} publishPriority - the {@link Track.Priority} of the published\n * {@link RemoteTrack} set by the {@link RemoteParticipant}\n * @property {?RemoteTrack} track - Unless you have subscribed to the\n * {@link RemoteTrack}, this property is null\n * @emits RemoteTrackPublication#publishPriorityChanged\n * @emits RemoteTrackPublication#subscribed\n * @emits RemoteTrackPublication#subscriptionFailed\n * @emits RemoteTrackPublication#trackDisabled\n * @emits RemoteTrackPublication#trackEnabled\n * @emits RemoteTrackPublication#trackSwitchedOff\n * @emits RemoteTrackPublication#trackSwitchedOn\n * @emits RemoteTrackPublication#unsubscribed\n *\n */\n\nvar RemoteTrackPublication = function (_TrackPublication) {\n _inherits(RemoteTrackPublication, _TrackPublication);\n\n /**\n * Construct a {@link RemoteTrackPublication}.\n * @param {RemoteTrackPublicationSignaling} signaling - {@link RemoteTrackPublication} signaling\n * @param {RemoteTrackPublicationOptions} options - {@link RemoteTrackPublication}\n * options\n */\n function RemoteTrackPublication(signaling, options) {\n _classCallCheck(this, RemoteTrackPublication);\n\n var _this = _possibleConstructorReturn(this, (RemoteTrackPublication.__proto__ || Object.getPrototypeOf(RemoteTrackPublication)).call(this, signaling.name, signaling.sid, options));\n\n Object.defineProperties(_this, {\n _signaling: {\n value: signaling\n },\n _track: {\n value: null,\n writable: true\n },\n isSubscribed: {\n enumerable: true,\n get: function get() {\n return !!this._track;\n }\n },\n isTrackEnabled: {\n enumerable: true,\n get: function get() {\n return signaling.isEnabled;\n }\n },\n kind: {\n enumerable: true,\n value: signaling.kind\n },\n publishPriority: {\n enumerable: true,\n get: function get() {\n return signaling.priority;\n }\n },\n track: {\n enumerable: true,\n get: function get() {\n return this._track;\n }\n }\n });\n\n // remember original state, and fire events only on change.\n var error = signaling.error,\n isEnabled = signaling.isEnabled,\n isSwitchedOff = signaling.isSwitchedOff,\n priority = signaling.priority;\n\n\n signaling.on('updated', function () {\n if (error !== signaling.error) {\n error = signaling.error;\n _this.emit('subscriptionFailed', signaling.error);\n return;\n }\n if (isEnabled !== signaling.isEnabled) {\n isEnabled = signaling.isEnabled;\n if (_this.track) {\n _this.track._setEnabled(signaling.isEnabled);\n }\n _this.emit(signaling.isEnabled ? 'trackEnabled' : 'trackDisabled');\n }\n if (isSwitchedOff !== signaling.isSwitchedOff) {\n isSwitchedOff = signaling.isSwitchedOff;\n if (_this.track) {\n _this.track._setSwitchedOff(signaling.isSwitchedOff);\n _this.emit(signaling.isSwitchedOff ? 'trackSwitchedOff' : 'trackSwitchedOn', _this.track);\n }\n }\n if (priority !== signaling.priority) {\n priority = signaling.priority;\n _this.emit('publishPriorityChanged', priority);\n }\n });\n return _this;\n }\n\n _createClass(RemoteTrackPublication, [{\n key: 'toString',\n value: function toString() {\n return '[RemoteTrackPublication #' + this._instanceId + ': ' + this.trackSid + ']';\n }\n\n /**\n * @private\n * @param {RemoteTrack} track\n */\n\n }, {\n key: '_subscribed',\n value: function _subscribed(track) {\n if (!this._track && track) {\n this._track = track;\n this.emit('subscribed', track);\n }\n }\n\n /**\n * @private\n */\n\n }, {\n key: '_unsubscribe',\n value: function _unsubscribe() {\n if (this._track) {\n var track = this._track;\n this._track = null;\n this.emit('unsubscribed', track);\n }\n }\n }]);\n\n return RemoteTrackPublication;\n}(TrackPublication);\n\n/**\n * The {@link RemoteTrack}'s publish {@link Track.Priority} was changed by the\n * {@link RemoteParticipant}.\n * @param {Track.Priority} priority - the {@link RemoteTrack}'s new publish\n * {@link Track.Priority}; RemoteTrackPublication#publishPriority is also\n * updated accordingly\n * @event RemoteTrackPublication#publishPriorityChanged\n */\n\n/**\n * Your {@link LocalParticipant} subscribed to the {@link RemoteTrack}.\n * @param {RemoteTrack} track - the {@link RemoteTrack} that was subscribed to\n * @event RemoteTrackPublication#subscribed\n */\n\n/**\n * Your {@link LocalParticipant} failed to subscribe to the {@link RemoteTrack}.\n * @param {TwilioError} error - the reason the {@link RemoteTrack} could not be\n * subscribed to\n * @event RemoteTrackPublication#subscriptionFailed\n */\n\n/**\n * The {@link RemoteTrack} was disabled.\n * @event RemoteTrackPublication#trackDisabled\n */\n\n/**\n * The {@link RemoteTrack} was enabled.\n * @event RemoteTrackPublication#trackEnabled\n */\n\n/**\n * The {@link RemoteTrack} was switched off.\n * @param {RemoteTrack} track - the {@link RemoteTrack} that was switched off\n * @event RemoteTrackPublication#trackSwitchedOff\n */\n\n/**\n * The {@link RemoteTrack} was switched on.\n * @param {RemoteTrack} track - the {@link RemoteTrack} that was switched on\n * @event RemoteTrackPublication#trackSwitchedOn\n */\n\n/**\n * Your {@link LocalParticipant} unsubscribed from the {@link RemoteTrack}.\n * @param {RemoteTrack} track - the {@link RemoteTrack} that was unsubscribed from\n * @event RemoteTrackPublication#unsubscribed\n */\n\n/**\n * {@link RemoteTrackPublication} options\n * @typedef {object} RemoteTrackPublicationOptions\n * @property {LogLevel|LogLevels} logLevel - Log level for 'media' modules\n */\n\nmodule.exports = RemoteTrackPublication;","'use strict';\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar EventEmitter = require('./eventemitter');\nvar RemoteParticipant = require('./remoteparticipant');\nvar StatsReport = require('./stats/statsreport');\n\nvar _require = require('./util'),\n valueToJSON = _require.valueToJSON;\n\nvar nInstances = 0;\n\n/**\n * A {@link Room} represents communication between you and one or more\n * {@link RemoteParticipant}s sharing {@link AudioTrack}s and\n * {@link VideoTrack}s.\n *

\n * You can connect to a {@link Room} by calling {@link connect}.\n * @extends EventEmitter\n * @property {?RemoteParticipant} dominantSpeaker - The Dominant Speaker in the\n * {@link Room}, if any\n * @property {boolean} isRecording - Whether or not the {@link Room} is being\n * recorded\n * @property {LocalParticipant} localParticipant - Your {@link LocalParticipant}\n * in the {@link Room}\n * @property {string} mediaRegion - String indicating geographical region\n * where media is processed for the {@link Room}.\n * @property {string} name - The {@link Room}'s name\n * @property {Map} participants -\n * The {@link RemoteParticipant}s participating in this {@link Room}\n * @property {Room.SID} sid - The {@link Room}'s SID\n * @property {string} state - \"connected\", \"reconnecting\", or \"disconnected\"\n * @throws {SignalingConnectionDisconnectedError}\n * @emits Room#disconnected\n * @emits Room#participantConnected\n * @emits Room#participantDisconnected\n * @emits Room#participantReconnected\n * @emits Room#participantReconnecting\n * @emits Room#reconnected\n * @emits Room#reconnecting\n * @emits Room#recordingStarted\n * @emits Room#recordingStopped\n * @emits Room#trackDimensionsChanged\n * @emits Room#trackDisabled\n * @emits Room#trackEnabled\n * @emits Room#trackMessage\n * @emits Room#trackPublished\n * @emits Room#trackPublishPriorityChanged\n * @emits Room#trackStarted\n * @emits Room#trackSubscribed\n * @emits Room#trackSwitchedOff\n * @emits Room#trackSwitchedOn\n * @emits Room#trackUnpublished\n * @emits Room#trackUnsubscribed\n */\n\nvar Room = function (_EventEmitter) {\n _inherits(Room, _EventEmitter);\n\n /**\n * Construct a {@link Room}.\n * @param {RoomSignaling} signaling\n * @param {?object} [options={}]\n */\n function Room(localParticipant, signaling, options) {\n _classCallCheck(this, Room);\n\n var _this = _possibleConstructorReturn(this, (Room.__proto__ || Object.getPrototypeOf(Room)).call(this));\n\n var log = options.log.createLog('default', _this);\n var participants = new Map();\n\n /* istanbul ignore next */\n Object.defineProperties(_this, {\n _log: {\n value: log\n },\n _instanceId: {\n value: ++nInstances\n },\n _options: {\n value: options\n },\n _participants: {\n value: participants\n },\n _signaling: {\n value: signaling\n },\n dominantSpeaker: {\n enumerable: true,\n get: function get() {\n return this.participants.get(signaling.dominantSpeakerSid) || null;\n }\n },\n isRecording: {\n enumerable: true,\n get: function get() {\n return signaling.recording.isEnabled || false;\n }\n },\n localParticipant: {\n enumerable: true,\n value: localParticipant\n },\n name: {\n enumerable: true,\n value: signaling.name\n },\n participants: {\n enumerable: true,\n value: participants\n },\n sid: {\n enumerable: true,\n value: signaling.sid\n },\n state: {\n enumerable: true,\n get: function get() {\n return signaling.state;\n }\n },\n mediaRegion: {\n enumerable: true,\n value: signaling.mediaRegion\n }\n });\n\n handleRecordingEvents(_this, signaling.recording);\n handleSignalingEvents(_this, signaling);\n\n log.info('Created a new Room:', _this.name);\n log.debug('Initial RemoteParticipants:', Array.from(_this._participants.values()));\n return _this;\n }\n\n _createClass(Room, [{\n key: 'toString',\n value: function toString() {\n return '[Room #' + this._instanceId + ': ' + this.sid + ']';\n }\n\n /**\n * Disconnect from the {@link Room}.\n * @returns {this}\n */\n\n }, {\n key: 'disconnect',\n value: function disconnect() {\n this._log.info('Disconnecting');\n this._signaling.disconnect();\n return this;\n }\n\n /**\n * Get the {@link Room}'s media statistics. This is not supported in Safari 12.0 or below\n * due to this bug : https://bugs.webkit.org/show_bug.cgi?id=192601\n *\n * @returns {Promise.>}\n */\n\n }, {\n key: 'getStats',\n value: function getStats() {\n var _this2 = this;\n\n return this._signaling.getStats().then(function (responses) {\n return Array.from(responses).map(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n id = _ref2[0],\n response = _ref2[1];\n\n return new StatsReport(id, Object.assign({}, response, {\n localAudioTrackStats: rewriteLocalTrackIds(_this2, response.localAudioTrackStats),\n localVideoTrackStats: rewriteLocalTrackIds(_this2, response.localVideoTrackStats)\n }));\n });\n });\n }\n }, {\n key: 'toJSON',\n value: function toJSON() {\n return valueToJSON(this);\n }\n }]);\n\n return Room;\n}(EventEmitter);\n\nfunction rewriteLocalTrackIds(room, trackStats) {\n var localParticipantSignaling = room.localParticipant._signaling;\n return trackStats.reduce(function (trackStats, trackStat) {\n var publication = localParticipantSignaling.tracks.get(trackStat.trackId);\n var trackSender = localParticipantSignaling.getSender(publication);\n return trackSender ? [Object.assign({}, trackStat, { trackId: trackSender.id })].concat(trackStats) : trackStats;\n }, []);\n}\n\n/**\n * A {@link Room.SID} is a 34-character string starting with \"RM\"\n * that uniquely identifies a {@link Room}.\n * @type string\n * @typedef Room.SID\n */\n\n/**\n * The Dominant Speaker in the {@link Room} changed. Either the Dominant Speaker\n * is a new {@link RemoteParticipant} or the Dominant Speaker has been reset and\n * is now null.\n * @param {?RemoteParticipant} dominantSpeaker - The Dominant Speaker in the\n * {@link Room}, if any\n * @event Room#dominantSpeakerChanged\n */\n\n/**\n * Your {@link LocalParticipant} was disconnected from the {@link Room} and all\n * other {@link RemoteParticipant}s.\n * @param {Room} room - The {@link Room} your\n * {@link LocalParticipant} was disconnected from\n * @param {?TwilioError} error - Present when the {@link LocalParticipant} got\n * disconnected from the {@link Room} unexpectedly\n * @event Room#disconnected\n * @example\n * myRoom.on('disconnected', function(room, error) {\n * if (error) {\n * console.log('Unexpectedly disconnected:', error);\n * }\n * myRoom.localParticipant.tracks.forEach(function(track) {\n * track.stop();\n * track.detach();\n * });\n * });\n */\n\n/**\n * A {@link RemoteParticipant} joined the {@link Room}.\n * @param {RemoteParticipant} participant - The {@link RemoteParticipant} who joined\n * @event Room#participantConnected\n * @example\n * myRoom.on('participantConnected', function(participant) {\n * console.log(participant.identity + ' joined the Room');\n * });\n */\n\n/**\n * A {@link RemoteParticipant} left the {@link Room}.\n * @param {RemoteParticipant} participant - The {@link RemoteParticipant} who left\n * @event Room#participantDisconnected\n * @example\n * myRoom.on('participantDisconnected', function(participant) {\n * console.log(participant.identity + ' left the Room');\n * participant.tracks.forEach(function(track) {\n * track.detach().forEach(function(mediaElement) {\n * mediaElement.remove();\n * });\n * });\n * });\n */\n\n/**\n * A {@link RemoteParticipant} has reconnected to the {@link Room} after a signaling connection disruption.\n * @param {RemoteParticipant} participant - The {@link RemoteParticipant} that has reconnected.\n * @event Room#participantReconnected\n * @example\n * myRoom.on('participantReconnected', participant => {\n * console.log(participant.identity + ' reconnected to the Room');\n * });\n */\n\n/**\n * A {@link RemoteParticipant} is reconnecting to the {@link Room} after a signaling connection disruption.\n * @param {RemoteParticipant} participant - The {@link RemoteParticipant} that is reconnecting.\n * @event Room#participantReconnecting\n * @example\n * myRoom.on('participantReconnecting', participant => {\n * console.log(participant.identity + ' is reconnecting to the Room');\n * });\n */\n\n/**\n * Your application successfully reconnected to the {@link Room}. When this\n * event is emitted, the {@link Room} is in state \"connected\".\n * @event Room#reconnected\n * @example\n * myRoom.on('reconnected', () => {\n * console.log('Reconnected!');\n * });\n */\n\n/**\n * Your application is reconnecting to the {@link Room}. This happens when there\n * is a disruption in your signaling connection and/or your media connection. When\n * this event is emitted, the {@link Room} is in state \"reconnecting\". If reconnecting\n * succeeds, the {@link Room} will emit a \"reconnected\" event.\n * @param {MediaConnectionError|SignalingConnectionDisconnectedError} error - A\n * {@link MediaConnectionError} if your application is reconnecting due to a\n * disruption in your media connection, or a {@link SignalingConnectionDisconnectedError}\n * if your application is reconnecting due to a disruption in your signaling connection\n * @event Room#reconnecting\n * @example\n * myRoom.on('reconnecting', error => {\n * if (error.code === 53001) {\n * console.log('Reconnecting your signaling connection!', error.message);\n * } else if (error.code === 53405) {\n * console.log('Reconnecting your media connection!', error.message);\n * }\n * });\n */\n\n/**\n * The {@link Room} is now being recorded\n * @event Room#recordingStarted\n */\n\n/**\n * The {@link Room} is no longer being recorded\n * @event Room#recordingStopped\n */\n\n/**\n * One of the {@link RemoteParticipant}'s {@link VideoTrack}'s dimensions changed.\n * @param {RemoteVideoTrack} track - The {@link RemoteVideoTrack} whose dimensions changed\n * @param {RemoteParticipant} participant - The {@link RemoteParticipant} whose\n * {@link RemoteVideoTrack}'s dimensions changed\n * @event Room#trackDimensionsChanged\n */\n\n/**\n * A {@link RemoteTrack} was disabled by a {@link RemoteParticipant} in the {@link Room}.\n * @param {RemoteTrackPublication} publication - The {@link RemoteTrackPublication} that represents disabled {@link RemoteTrack}\n * @param {RemoteParticipant} participant - The {@link RemoteParticipant} who\n * disabled the {@link RemoteTrack}\n * @event Room#trackDisabled\n */\n\n/**\n * A {@link RemoteTrack} was enabled by a {@link RemoteParticipant} in the {@link Room}.\n * @param {RemoteTrackPublication} publication - The {@link RemoteTrackPublication} that represents enabled {@link RemoteTrack}\n * @param {RemoteParticipant} participant - The {@link RemoteParticipant} who\n * enabled the {@link RemoteTrack}\n * @event Room#trackEnabled\n */\n\n/**\n * A message was received over one of the {@link RemoteParticipant}'s\n * {@link RemoteDataTrack}'s.\n * @param {string|ArrayBuffer} data\n * @param {RemoteVideoTrack} track - The {@link RemoteDataTrack} over which the\n * message was received\n * @param {RemoteParticipant} participant - The {@link RemoteParticipant} whose\n * {@link RemoteDataTrack} received the message\n * @event Room#trackMessage\n */\n\n/**\n * A {@link RemoteTrack} was published by a {@link RemoteParticipant} after\n * connecting to the {@link Room}. This event is not emitted for\n * {@link RemoteTrack}s that were published while the {@link RemoteParticipant}\n * was connecting to the {@link Room}.\n * @event Room#trackPublished\n * @param {RemoteTrackPublication} publication - The {@link RemoteTrackPublication}\n * which represents the published {@link RemoteTrack}\n * @param {RemoteParticipant} participant - The {@link RemoteParticipant} who\n * published the {@link RemoteTrack}\n * @example\n * function trackPublished(publication, participant) {\n * console.log(`RemoteParticipant ${participant.sid} published Track ${publication.trackSid}`);\n * }\n *\n * // Handle RemoteTracks published after connecting to the Room.\n * room.on('trackPublished', trackPublished);\n *\n * room.on('participantConnected', participant => {\n * // Handle RemoteTracks published while connecting to the Room.\n * participant.trackPublications.forEach(publication => trackPublished(publication, participant));\n * });\n */\n\n/**\n * One of a {@link RemoteParticipant}'s {@link RemoteTrack}s in the {@link Room} started.\n * @param {RemoteTrack} track - The {@link RemoteTrack} that started\n * @param {RemoteParticipant} participant - The {@link RemoteParticipant} whose\n * {@link RemoteTrack} started\n * @event Room#trackStarted\n */\n\n/**\n * A {@link RemoteParticipant}'s {@link RemoteTrack} was subscribed to.\n * @param {RemoteTrack} track - The {@link RemoteTrack} that was subscribed\n * @param {RemoteTrackPublication} publication - The {@link RemoteTrackPublication}\n * for the {@link RemoteTrack} that was subscribed to\n * @param {RemoteParticipant} participant - The {@link RemoteParticipant} whose\n * {@link RemoteTrack} was subscribed\n * @event Room#trackSubscribed\n * @example\n * room.on('trackSubscribed', function(track, publication, participant) {\n * var participantView = document.getElementById('participant-view-' + participant.identity);\n * participantView.appendChild(track.attach());\n * });\n */\n\n/**\n * A {@link RemoteParticipant}'s {@link RemoteTrack} was switched off.\n * @param {RemoteTrack} track - The {@link RemoteTrack} that was switched off\n * @param {RemoteTrackPublication} publication - The {@link RemoteTrackPublication}\n * for the {@link RemoteTrack} that was subscribed to\n * @param {RemoteParticipant} participant - The {@link RemoteParticipant} whose\n * {@link RemoteTrack} was switched off\n * @event Room#trackSwitchedOff\n */\n\n/**\n * A {@link RemoteParticipant}'s {@link RemoteTrack} was switched on.\n * @param {RemoteTrack} track - The {@link RemoteTrack} that was switched on\n * @param {RemoteTrackPublication} publication - The {@link RemoteTrackPublication}\n * for the {@link RemoteTrack} that was subscribed to\n * @param {RemoteParticipant} participant - The {@link RemoteParticipant} whose\n * {@link RemoteTrack} was switched on\n * @event Room#trackSwitchedOn\n */\n\n/**\n * A {@link RemoteParticipant}'s {@link RemoteTrack} could not be subscribed to.\n * @param {TwilioError} error - The reason the {@link RemoteTrack} could not be\n * subscribed to\n * @param {RemoteTrackPublication} publication - The\n * {@link RemoteTrackPublication} for the {@link RemoteTrack} that could not\n * be subscribed to\n * @param {RemoteParticipant} participant - The {@link RemoteParticipant} whose\n * {@link RemoteTrack} could not be subscribed to\n * @event Room#trackSubscriptionFailed\n */\n\n/**\n * The {@link RemoteTrack}'s publish {@link Track.Priority} was changed by the\n * {@link RemoteParticipant}.\n * @param {Track.Priority} priority - the {@link RemoteTrack}'s new publish\n * {@link Track.Priority};\n * @param {RemoteTrackPublication} publication - The\n * {@link RemoteTrackPublication} for the {@link RemoteTrack} that changed priority\n * @param {RemoteParticipant} participant - The {@link RemoteParticipant} whose\n * {@link RemoteTrack} changed priority\n * @event Room#trackPublishPriorityChanged\n */\n\n/**\n * A {@link RemoteTrack} was unpublished by a {@link RemoteParticipant} to the {@link Room}.\n * @event Room#trackUnpublished\n * @param {RemoteTrackPublication} publication - The {@link RemoteTrackPublication}\n * which represents the unpublished {@link RemoteTrack}\n * @param {RemoteParticipant} participant - The {@link RemoteParticipant} who\n * unpublished the {@link RemoteTrack}\n */\n\n/**\n * A {@link RemoteParticipant}'s {@link RemoteTrack} was unsubscribed from.\n * @param {RemoteTrack} track - The {@link RemoteTrack} that was unsubscribed\n * @param {RemoteTrackPublication} publication - The {@link RemoteTrackPublication}\n * for the {@link RemoteTrack} that was unsubscribed from\n * @param {RemoteParticipant} participant - The {@link RemoteParticipant} whose\n * {@link RemoteTrack} was unsubscribed\n * @event Room#trackUnsubscribed\n * @example\n * room.on('trackUnsubscribed', function(track, publication, participant) {\n * track.detach().forEach(function(mediaElement) {\n * mediaElement.remove();\n * });\n * });\n */\n\nfunction connectParticipant(room, participantSignaling) {\n var log = room._log;\n var participant = new RemoteParticipant(participantSignaling, { log: log });\n\n log.info('A new RemoteParticipant connected:', participant);\n room._participants.set(participant.sid, participant);\n room.emit('participantConnected', participant);\n\n // Reemit Track and RemoteParticipant events.\n var eventListeners = [['reconnected', 'participantReconnected'], ['reconnecting', 'participantReconnecting'], 'trackDimensionsChanged', 'trackDisabled', 'trackEnabled', 'trackMessage', 'trackPublished', 'trackPublishPriorityChanged', 'trackStarted', 'trackSubscribed', 'trackSubscriptionFailed', 'trackSwitchedOff', 'trackSwitchedOn', 'trackUnpublished', 'trackUnsubscribed'].map(function (eventOrPair) {\n var _ref3 = Array.isArray(eventOrPair) ? eventOrPair : [eventOrPair, eventOrPair],\n _ref4 = _slicedToArray(_ref3, 2),\n event = _ref4[0],\n participantEvent = _ref4[1];\n\n function reemit() {\n var args = [].slice.call(arguments);\n args.unshift(participantEvent);\n args.push(participant);\n room.emit.apply(room, _toConsumableArray(args));\n }\n participant.on(event, reemit);\n return [event, reemit];\n });\n\n participant.once('disconnected', function participantDisconnected() {\n var dominantSpeaker = room.dominantSpeaker;\n log.info('RemoteParticipant disconnected:', participant);\n room._participants.delete(participant.sid);\n eventListeners.forEach(function (args) {\n participant.removeListener(args[0], args[1]);\n });\n room.emit('participantDisconnected', participant);\n if (participant === dominantSpeaker) {\n room.emit('dominantSpeakerChanged', room.dominantSpeaker);\n }\n });\n}\n\nfunction handleRecordingEvents(room, recording) {\n recording.on('updated', function updated() {\n var started = recording.isEnabled;\n room._log.info('Recording ' + (started ? 'started' : 'stopped'));\n room.emit('recording' + (started ? 'Started' : 'Stopped'));\n });\n}\n\nfunction handleSignalingEvents(room, signaling) {\n var log = room._log;\n\n // Reemit RemoteParticipant events from the RoomSignaling.\n log.debug('Creating a new RemoteParticipant for each ParticipantSignaling ' + 'in the RoomSignaling');\n signaling.participants.forEach(connectParticipant.bind(null, room));\n log.debug('Setting up RemoteParticipant creation for all subsequent ' + 'ParticipantSignalings that connect to the RoomSignaling');\n signaling.on('participantConnected', connectParticipant.bind(null, room));\n\n signaling.on('dominantSpeakerChanged', function () {\n return room.emit('dominantSpeakerChanged', room.dominantSpeaker);\n });\n\n // Reemit state transition events from the RoomSignaling.\n signaling.on('stateChanged', function stateChanged(state, error) {\n log.info('Transitioned to state:', state);\n switch (state) {\n case 'disconnected':\n room.participants.forEach(function (participant) {\n participant._unsubscribeTracks();\n });\n room.emit(state, room, error);\n signaling.removeListener('stateChanged', stateChanged);\n break;\n case 'reconnecting':\n\n // NOTE(mpatwardhan): `stateChanged` can get emitted with StateMachine locked.\n // Do not signal public events synchronously with lock held.\n setTimeout(function () {\n return room.emit('reconnecting', error);\n }, 0);\n\n break;\n default:\n\n // NOTE(mpatwardhan): `stateChanged` can get emitted with StateMachine locked.\n // Do not signal public events synchronously with lock held.\n setTimeout(function () {\n return room.emit('reconnected');\n }, 0);\n }\n });\n}\n\nmodule.exports = Room;","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction $getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return $getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = $getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) args.push(arguments[i]);\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n ReflectApply(this.listener, this.target, args);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n","'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar LocalAudioTrackStats = require('./localaudiotrackstats');\nvar LocalVideoTrackStats = require('./localvideotrackstats');\nvar RemoteAudioTrackStats = require('./remoteaudiotrackstats');\nvar RemoteVideoTrackStats = require('./remotevideotrackstats');\n\n/**\n * Statistics report for an RTCPeerConnection.\n * @property {string} peerConnectionId - ID of the RTCPeerConnection\n * @property {Array} localAudioTrackStats - List of {@link LocalAudioTrackStats}\n * @property {Array} localVideoTrackStats - List of {@link LocalVideoTrackStats}\n * @property {Array} remoteAudioTrackStats - List of {@link RemoteAudioTrackStats}\n * @property {Array} remoteVideoTrackStats - List of {@link RemoteVideoTrackStats}\n */\n\nvar StatsReport =\n/**\n * @param {string} peerConnectionId - RTCPeerConnection ID\n * @param {StandardizedStatsResponse} statsResponse\n */\nfunction StatsReport(peerConnectionId, statsResponse) {\n _classCallCheck(this, StatsReport);\n\n if (typeof peerConnectionId !== 'string') {\n throw new Error('RTCPeerConnection id must be a string');\n }\n\n Object.defineProperties(this, {\n peerConnectionId: {\n value: peerConnectionId,\n enumerable: true\n },\n localAudioTrackStats: {\n value: statsResponse.localAudioTrackStats.map(function (report) {\n return new LocalAudioTrackStats(report.trackId, report);\n }),\n enumerable: true\n },\n localVideoTrackStats: {\n value: statsResponse.localVideoTrackStats.map(function (report) {\n return new LocalVideoTrackStats(report.trackId, report);\n }),\n enumerable: true\n },\n remoteAudioTrackStats: {\n value: statsResponse.remoteAudioTrackStats.map(function (report) {\n return new RemoteAudioTrackStats(report.trackId, report);\n }),\n enumerable: true\n },\n remoteVideoTrackStats: {\n value: statsResponse.remoteVideoTrackStats.map(function (report) {\n return new RemoteVideoTrackStats(report.trackId, report);\n }),\n enumerable: true\n }\n });\n};\n\nmodule.exports = StatsReport;","'use strict';\n\nvar CancelablePromise = require('./util/cancelablepromise');\n\n/**\n * Create a {@link CancelablePromise}.\n * @param {function(function(Array): CancelablePromise):\n * Promise>} getLocalTracks\n * @param {function(Array): LocalParticipant} createLocalParticipant\n * @param {function(Array): CancelablePromise} createRoomSignaling\n * @param {function(LocalParticipant, RoomSignaling): Room} createRoom\n * @returns CancelablePromise\n */\nfunction createCancelableRoomPromise(getLocalTracks, createLocalParticipant, createRoomSignaling, createRoom) {\n var cancelableRoomSignalingPromise = void 0;\n var cancelationError = new Error('Canceled');\n\n return new CancelablePromise(function onCreate(resolve, reject, isCanceled) {\n var localParticipant = void 0;\n getLocalTracks(function getLocalTracksSucceeded(localTracks) {\n if (isCanceled()) {\n return CancelablePromise.reject(cancelationError);\n }\n localParticipant = createLocalParticipant(localTracks);\n return createRoomSignaling(localParticipant).then(function createRoomSignalingSucceeded(getCancelableRoomSignalingPromise) {\n if (isCanceled()) {\n throw cancelationError;\n }\n cancelableRoomSignalingPromise = getCancelableRoomSignalingPromise();\n return cancelableRoomSignalingPromise;\n });\n }).then(function roomSignalingConnected(roomSignaling) {\n if (isCanceled()) {\n roomSignaling.disconnect();\n throw cancelationError;\n }\n resolve(createRoom(localParticipant, roomSignaling));\n }).catch(function onError(error) {\n reject(error);\n });\n }, function onCancel() {\n if (cancelableRoomSignalingPromise) {\n cancelableRoomSignalingPromise.cancel();\n }\n });\n}\n\nmodule.exports = createCancelableRoomPromise;","/* globals webkitAudioContext, AudioContext */\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar NativeAudioContext = typeof AudioContext !== 'undefined' ? AudioContext : typeof webkitAudioContext !== 'undefined' ? webkitAudioContext : null;\n\n/**\n * @interface AudioContextFactoryOptions\n * @property {AudioContext} [AudioContext] - The AudioContext constructor\n */\n\n/**\n * {@link AudioContextFactory} ensures we construct at most one AudioContext\n * at a time, and that it is eventually closed when we no longer need it.\n * @property {AudioContextFactory} AudioContextFactory - The\n * {@link AudioContextFactory} constructor\n */\n\nvar AudioContextFactory = function () {\n /**\n * @param {AudioContextFactoryOptions} [options]\n */\n function AudioContextFactory(options) {\n _classCallCheck(this, AudioContextFactory);\n\n options = Object.assign({\n AudioContext: NativeAudioContext\n }, options);\n Object.defineProperties(this, {\n _AudioContext: {\n value: options.AudioContext\n },\n _audioContext: {\n value: null,\n writable: true\n },\n _holders: {\n value: new Set()\n },\n AudioContextFactory: {\n enumerable: true,\n value: AudioContextFactory\n }\n });\n }\n\n /**\n * Each call to {@link AudioContextFactory#getOrCreate} should be paired with a\n * call to {@link AudioContextFactory#release}. Calling this increments an\n * internal reference count.\n * @param {*} holder - The object to hold a reference to the AudioContext\n * @returns {?AudioContext}\n */\n\n\n _createClass(AudioContextFactory, [{\n key: 'getOrCreate',\n value: function getOrCreate(holder) {\n if (!this._holders.has(holder)) {\n this._holders.add(holder);\n if (this._AudioContext && !this._audioContext) {\n try {\n this._audioContext = new this._AudioContext();\n } catch (error) {\n // Do nothing;\n }\n }\n }\n return this._audioContext;\n }\n\n /**\n * Decrement the internal reference count. If it reaches zero, close and destroy\n * the AudioContext.\n * @param {*} holder - The object that held a reference to the AudioContext\n * @returns {void}\n */\n\n }, {\n key: 'release',\n value: function release(holder) {\n if (this._holders.has(holder)) {\n this._holders.delete(holder);\n if (!this._holders.size && this._audioContext) {\n this._audioContext.close();\n this._audioContext = null;\n }\n }\n }\n }]);\n\n return AudioContextFactory;\n}();\n\nmodule.exports = new AudioContextFactory();"],"sourceRoot":""}