{"version":3,"sources":["webpack:///./node_modules/base64-js/index.js","webpack:///./src/components/room/Chat.vue?fd98","webpack:///./node_modules/detectrtc/DetectRTC.js","webpack:///./src/components/room/participant/ConnectionInfo.vue?5537","webpack:///./node_modules/@microsoft/signalr/dist/esm/ILogger.js","webpack:///./src/views/Room.vue?a4ca","webpack:///./src/RTCUtils.js","webpack:///./node_modules/@babel/runtime-corejs2/helpers/esm/classCallCheck.js","webpack:///./node_modules/@babel/runtime-corejs2/helpers/esm/createClass.js","webpack:///./node_modules/@babel/runtime-corejs2/helpers/esm/defineProperty.js","webpack:///./src/services/RTCStateService.js","webpack:///./node_modules/@microsoft/signalr/dist/esm/Errors.js","webpack:///./node_modules/@microsoft/signalr/dist/esm/HttpClient.js","webpack:///./node_modules/@microsoft/signalr/dist/esm/FetchHttpClient.js","webpack:///./node_modules/@microsoft/signalr/dist/esm/XhrHttpClient.js","webpack:///./node_modules/@microsoft/signalr/dist/esm/IHubProtocol.js","webpack:///./node_modules/@microsoft/signalr/dist/esm/DefaultHttpClient.js","webpack:///./node_modules/@microsoft/signalr/dist/esm/Subject.js","webpack:///./node_modules/@microsoft/signalr/dist/esm/HubConnection.js","webpack:///./node_modules/@microsoft/signalr/dist/esm/ITransport.js","webpack:///./node_modules/@microsoft/signalr/dist/esm/DefaultReconnectPolicy.js","webpack:///./node_modules/@microsoft/signalr/dist/esm/AbortController.js","webpack:///./node_modules/@microsoft/signalr/dist/esm/LongPollingTransport.js","webpack:///./node_modules/@microsoft/signalr/dist/esm/ServerSentEventsTransport.js","webpack:///./node_modules/@microsoft/signalr/dist/esm/WebSocketTransport.js","webpack:///./node_modules/@microsoft/signalr/dist/esm/HttpConnection.js","webpack:///./node_modules/@microsoft/signalr/dist/esm/JsonHubProtocol.js","webpack:///./node_modules/@microsoft/signalr/dist/esm/HubConnectionBuilder.js","webpack:///./src/WebRtcHub.js","webpack:///./src/services/PeerMeetingRtcMulticonnection.js","webpack:///./src/components/room/participant/ParticipantBlock.vue?9f25","webpack:///./src/services/PeerStats.js","webpack:///./src/components/room/participant/ConnectionInfo.vue?e2f3","webpack:///src/components/room/participant/ConnectionInfo.vue","webpack:///./src/components/room/participant/ConnectionInfo.vue?b4ed","webpack:///./src/components/room/participant/ConnectionInfo.vue?d35c","webpack:///./src/components/room/participant/ControlMenu.vue?bffc","webpack:///src/components/room/participant/ControlMenu.vue","webpack:///./src/components/room/participant/ControlMenu.vue?5af1","webpack:///./src/components/room/participant/ControlMenu.vue?5b60","webpack:///src/components/room/participant/ParticipantBlock.vue","webpack:///./src/components/room/participant/ParticipantBlock.vue?cf3f","webpack:///./src/components/room/participant/ParticipantBlock.vue?39ac","webpack:///./src/components/room/Chat.vue?582f","webpack:///src/components/room/Chat.vue","webpack:///./src/components/room/Chat.vue?1edf","webpack:///./src/components/room/Chat.vue?02b1","webpack:///./src/components/room/ControlBar.vue?4804","webpack:///src/components/room/ControlBar.vue","webpack:///./src/components/room/ControlBar.vue?0825","webpack:///./src/components/room/ControlBar.vue?c587","webpack:///src/views/Room.vue","webpack:///./src/views/Room.vue?4f58","webpack:///./src/views/Room.vue","webpack:///./src/views/Room.vue?cc14","webpack:///./node_modules/@microsoft/signalr/dist/esm/TextMessageFormat.js","webpack:///./node_modules/core-js/library/fn/object/define-property.js","webpack:///./node_modules/core-js/library/modules/es6.object.define-property.js","webpack:///./node_modules/core-js/modules/_inherit-if-required.js","webpack:///./node_modules/@microsoft/signalr/dist/esm/HandshakeProtocol.js","webpack:///./node_modules/adapterjs/publish/adapter.min.js","webpack:///./node_modules/@microsoft/signalr/dist/esm/Utils.js","webpack:///./node_modules/@babel/runtime-corejs2/core-js/object/define-property.js","webpack:///./node_modules/core-js/modules/_set-proto.js","webpack:///./node_modules/ieee754/index.js","webpack:///./src/components/room/participant/ParticipantBlock.vue?ec97","webpack:///./src/components/room/participant/ControlMenu.vue?cae3","webpack:///./node_modules/core-js/modules/_validate-collection.js","webpack:///./node_modules/buffer/index.js","webpack:///./node_modules/@microsoft/signalr/dist/esm/Loggers.js","webpack:///./node_modules/core-js/modules/_collection-strong.js","webpack:///./node_modules/rtcmulticonnection/dist/RTCMultiConnection.js","webpack:///./node_modules/core-js/modules/_collection.js","webpack:///./node_modules/isarray/index.js","webpack:///./src/components/room/ControlBar.vue?b326","webpack:///./node_modules/core-js/modules/es6.map.js"],"names":["exports","byteLength","toByteArray","fromByteArray","lookup","revLookup","Arr","Uint8Array","Array","code","i","len","length","charCodeAt","getLens","b64","Error","validLen","indexOf","placeHoldersLen","lens","_byteLength","tmp","arr","curByte","tripletToBase64","num","encodeChunk","uint8","start","end","output","push","join","extraBytes","parts","maxChunkLength","len2","browserFakeUserAgent","isNodejs","process","versions","node","browser","version","toString","replace","that","window","global","navigator","userAgent","getUserMedia","location","protocol","href","hash","screen","width","height","webkitGetUserMedia","mozGetUserMedia","isMobileDevice","test","isEdge","msSaveOrOpenBlob","msSaveBlob","isOpera","opera","isFirefox","toLowerCase","isSafari","isChrome","chrome","isIE","document","documentMode","getBrowserInfo","appVersion","nameOffset","verOffset","ix","nAgt","browserName","appName","fullVersion","parseFloat","majorVersion","parseInt","split","e","substring","lastIndexOf","toUpperCase","search","isNaN","name","isPrivateBrowsing","retry","isDone","next","currentTrial","maxRetry","isTimeout","id","setInterval","clearInterval","isIE10OrLater","ua","match","exec","detectPrivateMode","callback","isPrivate","webkitRequestFileSystem","TEMPORARY","indexedDB","db","open","onerror","readyState","result","localStorage","setItem","removeItem","isMobile","Android","BlackBerry","iOS","Opera","Windows","any","getOsName","osName","detectDesktopOS","cs","unknown","nVer","os","clientStrings","s","r","osVersion","getAndroidVersion","osInfo","isCanvasSupportsStreamCapturing","isVideoSupportsStreamCapturing","forEach","item","createElement","regexIpv4Local","regexIpv4","regexIpv6","DetectLocalIPAddress","stream","DetectRTC","isWebRTCSupported","isPublic","isIpv4","getIPs","ip","getElementById","ipDuplicates","RTCPeerConnection","mozRTCPeerConnection","webkitRTCPeerConnection","iframe","win","contentWindow","peerConfig","optional","RtpDataChannels","servers","iceServers","urls","pc","addStream","addTrack","getTracks","onicecandidate","event","candidate","handleCandidate","createDataChannel","isPromisesSupported","createOffer","then","setLocalDescription","afterCreateOffer","ipAddress","undefined","lines","localDescription","sdp","line","MediaDevices","audioInputDevices","audioOutputDevices","videoInputDevices","mediaDevices","enumerateDevices","catch","canEnumerate","MediaStreamTrack","hasMicrophone","hasSpeakers","hasWebcam","isWebsiteHasMicrophonePermissions","isWebsiteHasWebcamPermissions","checkDeviceSupport","getSources","bind","alreadyUsedDevices","devices","_device","device","d","deviceId","label","kind","isCustomLabel","domain","isORTCSupported","RTCIceGatherer","isScreenCapturingSupported","getDisplayMedia","isNonLocalHost","webAudio","isSupported","isCreateMediaStreamSourceSupported","prototype","isAudioContextSupported","isRtpDataChannelsSupported","isSCTPSupportd","isSctpDataChannelsSupported","isGetUserMediaSupported","displayResolution","getAspectRatio","w","h","gcd","a","b","displayAspectRatio","toFixed","isWebSocketsSupported","WebSocket","CLOSING","isWebSocketsBlocked","checkWebSocketsSupport","starttime","websocket","onopen","Date","getTime","send","onmessage","WebsocketLatency","close","load","isSetSinkIdSupported","isRTPSenderReplaceTracksSupported","isRemoteStreamProcessingSupported","isApplyConstraintsSupported","isMultiMonitorScreenCapturingSupported","MediaStream","webkitMediaStream","Object","keys","module","LogLevel","render","_vm","this","_h","$createElement","_c","_self","staticClass","attrs","_v","_s","roomId","class","state","halfScreenMode","_l","ref","k","v","key","participants","size","rtcConnection","style","chatOpened","connection","channel","stateService","addParticipantBlock","staticRenderFns","RTCUtils","ConfigureMediaError","deviceSettings","videoState","audioState","onMediaError","mPeer","multiPeersHandler","console","error","message","dontCaptureUserMedia","getAllParticipants","sessionid","renegotiate","alert","secondaryMic","mediaConstraints","audio","audioDevice","audioInput","video","onGettingLocalMedia","AddBaseStream","mediaState","attachStreams","stop","self","AddStream","CreateFakeStream","setTimeout","SetHarkHandler","CreateVideoElementEvent","userid","emptyStream","srcObject","autoplay","playsinline","muted","streamid","mediaElement","getAudioTracks","onspeaking","onsilence","hark","speachEvent","speach","on","_classCallCheck","instance","Constructor","TypeError","_defineProperties","target","props","descriptor","enumerable","configurable","writable","_createClass","protoProps","staticProps","_defineProperty","obj","value","RTCStateService","store","audioEnabled","videoEnabled","screenEnabled","fullScreenMode","stateCheckTimer","stateCheck","leave","unmute","mute","extra","audioMuted","updateExtraData","videoMuted","screenStream","application","microphoneStream","track","enabled","getVideoTracks","__extends","extendStatics","setPrototypeOf","__proto__","p","hasOwnProperty","__","constructor","create","HttpError","_super","errorMessage","statusCode","_newTarget","_this","trueProto","call","TimeoutError","AbortError","__assign","assign","t","n","arguments","HttpResponse","statusText","content","HttpClient","get","url","options","method","post","delete","getCookieString","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","step","rejected","done","apply","__generator","body","f","y","g","_","sent","trys","ops","verb","Symbol","iterator","op","pop","FetchHttpClient","logger","fetch","requireFunc","jar","CookieJar","fetchType","abortControllerType","AbortController","request","abortController","timeoutId","msTimeout","response","e_1","payload","_a","abortSignal","aborted","onabort","abort","timeout","log","Warning","cache","credentials","withCredentials","headers","mode","redirect","signal","clearTimeout","ok","status","deserializeContent","responseType","cookies","isNode","getCookies","c","arrayBuffer","text","MessageType","XhrHttpClient","xhr","XMLHttpRequest","setRequestHeader","header","onload","responseText","ontimeout","DefaultHttpClient","httpClient","HubConnectionState","Subject","observers","_i","observer","err","complete","subscribe","DEFAULT_TIMEOUT_IN_MS","DEFAULT_PING_INTERVAL_IN_MS","HttpTransportType","TransferFormat","HubConnection","reconnectPolicy","nextKeepAlive","isRequired","serverTimeoutInMilliseconds","keepAliveIntervalInMilliseconds","handshakeProtocol","HandshakeProtocol","onreceive","data","processIncomingData","onclose","connectionClosed","callbacks","methods","closedCallbacks","reconnectingCallbacks","reconnectedCallbacks","invocationId","receivedHandshakeResponse","connectionState","Disconnected","connectionStarted","cachedPingMessage","writeMessage","type","Ping","defineProperty","connectionId","baseUrl","set","Reconnecting","startPromise","startWithStateTransitions","Connecting","Debug","startInternal","Connected","handshakePromise","handshakeRequest","e_2","stopDuringStartError","handshakeResolver","handshakeRejecter","transferFormat","sendMessage","writeHandshakeRequest","Information","cleanupTimeout","resetTimeoutPeriod","resetKeepAliveInterval","cleanupPingTimer","stopPromise","stopInternal","Disconnecting","reconnectDelayHandle","completeClose","methodName","args","promiseQueue","replaceStreamingParams","streams","streamIds","invocationDescriptor","createStreamInvocation","subject","cancelCallback","cancelInvocation","createCancelInvocation","sendWithProtocol","invocationEvent","Completion","launchStreams","sendPromise","createInvocation","invoke","newMethod","off","handlers","removeIdx","splice","onreconnecting","onreconnected","processHandshakeResponse","messages","parseMessages","messages_1","Invocation","invokeClientMethod","StreamItem","Close","allowReconnect","responseMessage","remainingData","parseHandshakeResponse","features","inherentKeepAlive","timeoutHandle","serverTimeout","pingServerHandle","nextPing","_b","invocationMessage","m","cancelCallbacksWithError","reconnect","reconnectStartTime","previousReconnectAttempts","retryError","nextRetryDelay","e_4","now","getNextRetryDelay","previousRetryCount","elapsedMilliseconds","retryReason","nextRetryDelayInMilliseconds","nonblocking","_loop_1","streamId","createCompletionMessage","createStreamItemMessage","argument","isObservable","arg","StreamInvocation","CancelInvocation","DEFAULT_RETRY_DELAYS_IN_MILLISECONDS","DefaultReconnectPolicy","retryDelays","concat","retryContext","isAborted","LongPollingTransport","accessTokenFactory","logMessageContent","pollAbort","running","connect","pollOptions","token","pollUrl","isIn","Trace","Binary","getAccessToken","updateHeaderToken","closeError","receiving","poll","pollAborted","raiseOnClose","name_1","deleteOptions","logMessage","ServerSentEventsTransport","eventSourceConstructor","encodeURIComponent","opened","Text","eventSource","isBrowser","isWebWorker","Cookie","WebSocketTransport","webSocketConstructor","webSocket","binaryType","_event","ErrorEvent","OPEN","isCloseEvent","wasClean","reason","MAX_REDIRECTS","HttpConnection","stopPromiseResolver","negotiateVersion","resolveUrl","webSocketModule","eventSourceModule","EventSource","startInternalPromise","sendQueue","TransportSendQueue","transport","stopError","stopConnection","negotiateResponse","redirects","this_1","e_3","skipNegotiation","WebSockets","constructTransport","startTransport","accessToken_1","getNegotiationResponse","ProtocolVersion","accessToken","createTransport","negotiateUrl","resolveNegotiateUrl","JSON","parse","connectionToken","createConnectUrl","requestedTransport","requestedTransferFormat","connectUrl","transportExceptions","transports","negotiate","transports_1","endpoint","transportOrError","ex_1","ex_2","isITransport","availableTransports","resolveTransportOrError","ServerSentEvents","LongPolling","transportMatches","transferFormats","map","ex","aTag","index","actualTransport","buffer","executing","sendBufferedData","PromiseSource","transportResult","sendLoopPromise","sendLoop","bufferData","promise","error_1","concatBuffers","arrayBuffers","totalLength","reduce","offset","arrayBuffers_1","resolver","rejecter","JSON_HUB_PROTOCOL_NAME","JsonHubProtocol","input","TextMessageFormat","hubMessages","parsedMessage","isInvocationMessage","isStreamItemMessage","isCompletionMessage","write","stringify","assertNotEmptyString","LogLevelNameMapping","trace","debug","info","information","warn","warning","critical","Critical","none","None","parseLogLevel","mapping","HubConnectionBuilder","configureLogging","logging","isLogger","logLevel","withUrl","transportTypeOrOptions","isNotEmpty","httpConnectionOptions","withHubProtocol","withAutomaticReconnect","retryDelaysOrReconnectPolicy","isArray","build","WebRtcSignalR","connectCallback","signalRConnection","isData","session","channelName","socket","eventName","socketMessageEvent","onMessagesCallback","onUserStatusChanged","isOnline","peers","remoteUserId","onExtraDataUpdated","sender","all","onMuteForcibly","onKicked","emit","enableLogs","getOwnPropertyNames","shiftedModerationControl","newParticipationRequest","streamSyncNeeded","streamEvents","action","peersBackup","onstreamended","allParticipants","participant","localPeerSdpConstraints","OfferToReceiveAudio","sdpConstraints","mandatory","OfferToReceiveVideo","remotePeerSdpConstraints","oneway","isOneWay","direction","isDataOnly","newParticipant","createNewPeer","userPreferences","readyForOffer","waitingForLocalMedia","deletePeer","dontGetRemoteStream","dontAttachLocalStream","connectionDescription","successCallback","onNewParticipant","changedUUID","oldUUID","newUUID","userLeft","onUserLeft","autoCloseEntireSession","addNegotiatedMessage","PeerMeetingRtcMulticonnection","router","require","RTCMultiConnection","_generateUserId","_configureExtraData","setCustomSocketHandler","configureMediaConstraints","codecs","_configureIceServers","_configureKicked","_configureMute","_configureVoiceDetection","_startParticipantFixTimer","patrticipantsFixTimer","patrticipantsCardFixTimer","onstream","parentNode","removeChild","detectRTC","videoInput","uuidv4","profile","speacking","turnSettings","turnOnly","candidates","host","iceTransportPolicy","uris","credential","password","username","pathname","onmute","muteType","hidden","originalOnUnmute","onunmute","tagName","unmuteType","connectedParticipants","peer","has","participantCardError","cardfix","selfCardError","fullscreen","halfscreen","streamEvent","avatar","getInitials","switchFullscreen","stats","_e","switchHalfScreen","PeerStats","PeerConnection","bandwidth","stunOrTurn","local","remote","ips","receive","packets","rtt","timestamp","old","interval","timer","getStats","parseReport","report","iceConnectionState","nominated","perSecond","bytesSent","bytesReceived","packetsSent","packetsReceived","candidatePair","selectedCandidatePairId","totalRoundTripTime","responsesReceived","localCandidate","localCandidateId","address","port","candidateType","remoteCandidate","remoteCandidateId","$event","$bvToast","show","userId","bytesToSize","String","CommonUtils","component","scopedSlots","_u","fn","proxy","prefix","iconName","model","$$v","volume","expression","muteParticipant","$t","muteAllParticipants","kickPatricipant","components","ConnectionInfo","ControlMenu","halfscreenTimer","streamValidateTimer","peerStats","Map","clearMediaElements","card","tryGetProfile","streamValidate","hasVideoTracks","hasAudioTracks","enablePeerStats","streamEventChangeCallback","$forceUpdate","prepare","changeCallback","controls","appendChild","play","watch","newVal","mounted","destroyed","user","date","_k","keyCode","messageText","ctrlKey","shiftKey","messageReceived","listMessages","scrollToBottom","$store","commit","messagesListObject","scrollTo","top","scrollHeight","behavior","created","toggleChat","chat","hasNewMessages","toggleAudio","toggleVideo","shareScreen","streamAddCallback","Function","computed","switchVideoMute","switchAudioMute","screenSharing","ParticipantBlock","ControlBar","Chat","streamEnded","toast","title","variant","solid","userStatusChanged","initialize","reload","setOnStream","setOnStreamEnded","setOnUserStatusChanged","setOnMuteForcibly","configureMediaError","mediaErrorCallback","addToHistory","inputDeviceChanged","$route","params","unmount","to","RecordSeparator","RecordSeparatorCode","fromCharCode","$Object","it","desc","$export","S","F","isObject","C","messageData","Buffer","binaryData","separatorIndex","responseLength","slice","textData","AdapterJS","getAllCams","hidePluginInstallPrompt","forceSafariPlugin","VERSION","onwebrtcready","isUsingPlugin","_onwebrtcreadies","webRTCReady","baseCallback","_defineMediaSourcePolyfill","WebRTCPlugin","plugin","onwebrtcreadyDone","pluginInfo","plugName","pluginId","portalLink","downloadLink","companyName","downloadLinks","mac","platform","TAGS","NONE","AUDIO","VIDEO","pageId","Math","random","setLogLevel","defineWebRTCInterface","isPluginInstalled","pluginInjectionInterval","injectPlugin","PLUGIN_STATES","INITIALIZING","INJECTING","INJECTED","READY","pluginState","PLUGIN_LOG_LEVELS","ERROR","WARNING","INFO","VERBOSE","SENSITIVE","WaitForPluginReady","callWhenPluginReady","documentReady","__TemWebRTCReady0","maybeThroughWebRTCReady","TEXT","PLUGIN","REQUIRE_INSTALLATION","REQUIRE_RESTART","NOT_SUPPORTED","BUTTON","REFRESH","REQUIRE_REFRESH","_iceConnectionStates","starting","checking","connected","completed","disconnected","failed","closed","_iceConnectionFiredStates","isDefined","webrtcDetectedType","RTCSessionDescription","RTCIceCandidate","attachMediaStream","reattachMediaStream","webrtcDetectedBrowser","webrtcDetectedVersion","webrtcMinimumVersion","webrtcDetectedDCSupport","parseWebrtcDetectedBrowser","hasMatch","opr","addons","chromiumVersion","StyleMedia","InstallTrigger","webstore","HTMLElement","safari","pushNotification","AppleWebKitBuild","hasNativeImpl","minorVersion","nativeImplIsOverridable","addEvent","elem","evnt","func","addEventListener","attachEvent","renderNotificationBar","buttonText","buttonCallback","position","left","right","backgroundColor","border","borderBottom","zIndex","webkitTransition","transition","contentDocument","preventDefault","cancelBubble","webkitTransform","transform","requestUserMedia","msRTCPeerConnection","o","u","l","1","requirecopy","fixStatsType","stat","inboundrtp","outboundrtp","candidatepair","localcandidate","remotecandidate","writeMediaSection","transceiver","caps","dtlsRole","SDPUtils","writeRtpDescription","writeIceParameters","iceGatherer","getLocalParameters","writeDtlsParameters","dtlsTransport","mid","rtpSender","rtpReceiver","trackId","_initialTrackId","msid","sendEncodingParameters","ssrc","rtx","localCName","filterIceServers","edgeVersion","hasTurn","filter","server","isString","getCommonCapabilities","localCapabilities","remoteCapabilities","commonCapabilities","headerExtensions","fecMechanisms","findCodecByPayloadType","pt","payloadType","preferredPayloadType","rtxCapabilityMatches","lRtx","rRtx","lCodecs","rCodecs","lCodec","parameters","apt","rCodec","clockRate","numChannels","min","rtcpFeedback","fb","j","parameter","lHeaderExtension","rHeaderExtension","uri","isActionAllowedInSignalingState","signalingState","offer","setRemoteDescription","answer","maybeAddCandidate","iceTransport","alreadyAdded","getRemoteCandidates","find","foundation","priority","addRemoteCandidate","makeError","description","NotSupportedError","InvalidStateError","InvalidAccessError","OperationError","addTrackToStreamAndFireEvent","dispatchEvent","MediaStreamTrackEvent","removeTrackFromStreamAndFireEvent","removeTrack","fireAddTrack","receiver","trackEvent","Event","_dispatchEvent","config","_eventTarget","createDocumentFragment","canTrickleIceCandidates","needNegotiation","localStreams","remoteStreams","_localDescription","_remoteDescription","iceGatheringState","usingBundle","bundlePolicy","rtcpMuxPolicy","_iceGatherers","iceCandidatePoolSize","gatherPolicy","_config","transceivers","_sdpSessionId","generateSessionId","_sdpSessionVersion","_dtlsRole","_isClosed","onaddstream","ontrack","onremovestream","onsignalingstatechange","oniceconnectionstatechange","onconnectionstatechange","onicegatheringstatechange","onnegotiationneeded","ondatachannel","_emitGatheringStateChange","getConfiguration","getLocalStreams","getRemoteStreams","_createTransceiver","doNotAdd","hasBundleTransport","recvEncodingParameters","associatedRemoteMediaStreams","wantReceive","_createIceAndDtlsTransports","_maybeFireNegotiationNeeded","RTCRtpSender","clonedStream","clone","idx","clonedTrack","removeStream","getSenders","getReceivers","_createIceGatherer","sdpMLineIndex","shift","bufferedCandidateEvents","bufferCandidates","_gather","onlocalcandidate","removeEventListener","evt","sdpMid","cand","ufrag","usernameFragment","serializedCandidate","writeCandidate","parseCandidate","toJSON","sections","getMediaSections","getDescription","every","RTCIceTransport","onicestatechange","_updateIceConnectionState","_updateConnectionState","RTCDtlsTransport","ondtlsstatechange","_disposeIceAndDtlsTransports","_transceive","recv","encodings","rtcp","cname","compound","rtcpParameters","sessionpart","splitSections","mediaSection","parseRtpParameters","isIceLite","matchPrefix","isRejected","remoteIceParameters","getIceParameters","remoteDtlsParameters","getDtlsParameters","role","_updateSignalingState","receiverList","iceOptions","substr","splitLines","getKind","getDirection","remoteMsid","parseMsid","getMid","generateIdentifier","parseRtpEncodingParameters","parseRtcpParameters","isComplete","cands","setTransport","setRemoteCandidates","default","RTCRtpReceiver","getCapabilities","codec","isNewTrack","nativeTrack","sid","newState","states","new","connecting","numAudioTracks","numVideoTracks","offerOptions","offerToReceiveAudio","offerToReceiveVideo","writeSessionBoilerplate","remoteCodec","hdrExt","rHdrExt","getLocalCandidates","createAnswer","mediaSectionsInOffer","localTrack","reducedSize","addIceCandidate","candidateString","trim","selector","senderOrReceiver","promises","allStats","results","ortcObjectName","nativeGetstats","nativeStats","mapStats","nativeMethod","2","blob","part","relatedAddress","relatedPort","tcpType","parseIceOptions","parseRtpMap","parsed","channels","writeRtpMap","parseExtmap","writeExtmap","headerExtension","preferredId","parseFmtp","kv","writeFmtp","param","parseRtcpFb","writeRtcpFb","parseSsrcMedia","sp","colon","attribute","parseSsrcGroup","semantics","ssrcs","parseFingerprint","algorithm","fingerprints","setupType","fp","mline","rtpmapline","fmtps","maxptime","extension","secondarySsrc","encodingParameters","hasRed","hasUlpfec","primarySsrc","flows","encParam","codecPayloadType","fec","mechanism","maxBitrate","remoteSsrc","rsize","mux","spec","planB","msidParts","sessId","sessVer","parseMLine","fmt","parseOLine","sessionId","sessionVersion","netType","addressType","isValidSDP","charAt","3","adapterFactory","4","utils","dependencies","opts","shimChrome","shimFirefox","shimEdge","shimSafari","browserDetails","detectBrowser","chromeShim","edgeShim","firefoxShim","safariShim","commonShim","adapter","extractVersion","disableLog","disableWarnings","shimPeerConnection","browserShim","shimCreateObjectURL","shimGetUserMedia","shimMediaStream","shimSourceObject","shimOnTrack","shimAddTrackRemoveTrack","shimGetSendersWithDtmf","shimSenderReceiverGetStats","fixNegotiationNeeded","shimRTCIceCandidate","shimMaxMessageSize","shimSendThrowTypeError","shimRemoveStream","shimSenderGetStats","shimReceiverGetStats","shimRTCDataChannel","shimReplaceTrack","shimRTCIceServerUrls","shimCreateOfferLegacy","shimCallbacksAPI","shimLocalStreamsAPI","shimRemoteStreamsAPI","shimTrackEventTransceiver","5","walkStats","base","resultSet","endsWith","filterStats","outbound","streamStatsType","filteredResult","trackStats","trackIdentifier","trackStat","wrapPeerConnectionEvent","_ontrack","origSetRemoteDescription","_ontrackpoly","te","shimSenderWithDtmf","_dtmf","createDTMFSender","_pc","_senders","origAddTrack","origRemoveTrack","origAddStream","origRemoveStream","origGetSenders","senders","origGetReceivers","receivers","srcElement","origGetStats","DOMException","URL","HTMLMediaElement","_srcObject","src","revokeObjectURL","createObjectURL","shimAddTrackRemoveTrackWithNative","_shimmedLocalStreams","existingSenders","newSenders","newSender","replaceInternalStreamId","_reverseStreams","internalId","externalStream","internalStream","_streams","RegExp","replaceExternalStreamId","origGetLocalStreams","nativeStreams","newStream","oldStream","origSetLocalDescription","origLocalDescription","getOwnPropertyDescriptor","pcConfig","pcConstraints","iceTransports","generateCertificate","OrigPeerConnection","newIceServers","deprecated","errorCallback","fixChromeStats_","standardReport","standardStats","names","makeMapStats","successCallbackWrapper_","nativeAddIceCandidate","shimGetDisplayMedia","getSourceId","constraints","sourceId","chromeMediaSource","chromeMediaSourceId","maxFrameRate","frameRate","6","constraintsToChrome_","cc","ideal","exact","max","oldname_","oc","mix","advanced","shimConstraints_","remap","face","facingMode","matches","getSupportedFacingModeLies","getSupportedConstraints","dev","some","shimError_","PermissionDeniedError","PermissionDismissedError","DevicesNotFoundError","ConstraintNotSatisfiedError","TrackStartError","MediaDeviceFailedDueToShutdown","MediaDeviceKillSwitchOn","TabCaptureError","ScreenCaptureError","DeviceCaptureError","constraint","constraintName","getUserMedia_","onSuccess","onError","getUserMediaPromise_","kinds","groupId","echoCancellation","origGetUserMedia","7","NativeRTCIceCandidate","nativeCandidate","parsedCandidate","augmentedCandidate","nativeCreateObjectURL","nativeRevokeObjectURL","newId","dsc","nativeSetAttribute","setAttribute","RTCSctpTransport","_sctp","sctpInDescription","mLine","getRemoteFirefoxVersion","getCanSendMaxMessageSize","remoteIsFirefox","canSendMaxMessageSize","getMaxMessageSize","maxMessageSize","canSendMMS","remoteMMS","Number","POSITIVE_INFINITY","sctp","wrapDcSend","dc","origDataChannelSend","origCreateDataChannel","dataChannel","8","shimRTCPeerConnection","origMSTEnabled","ev","RTCDtmfSender","RTCDTMFSender","RTCPeerConnectionShim","replaceTrack","setTrack","9","10","11","RTCTrackEvent","mozSrcObject","newServer","mozRTCSessionDescription","mozRTCIceCandidate","modernStatsTypes","nativeGetStats","onSucc","onErr","DataChannel","RTCDataChannel","preferredMediaSource","mediaSource","12","InternalError","SecurityError","constraintsToFF37_","orgEnumerateDevices","nativeGetUserMedia","getSettings","nativeGetSettings","applyConstraints","nativeApplyConstraints","13","_localStreams","getStreamById","_remoteStreams","_addTrack","tracks","_onaddstream","_onaddstreampoly","failureCallback","withCallback","cb","errcb","RTCTransceiver","origCreateOffer","audioTransceiver","getTransceivers","setDirection","addTransceiver","videoTransceiver","14","uastring","expr","pos","eventNameToWrap","wrapper","proto","nativeAddEventListener","nativeEventName","wrappedCallback","modifiedEvent","_eventMap","nativeRemoveEventListener","unwrappedCb","logDisabled_","bool","oldMethod","successCb","facing","element","from","errorCb","attachMediaStream_base","reattachMediaStream_base","onFailure","dir","exception","count","time","timeEnd","group","groupCollapsed","groupEnd","checkPluginReadyState","existing","valid","pluginValidInterval","frag","innerHTML","firstChild","comName","plugType","installedCb","notInstalledCb","pluginArray","mimeTypes","ActiveXObject","variable","ConstructSessionDescription","mediaStreamOrTracks","invalidConstraits","hasCredentials","PEER_CONNECTION_VERSION","GetSources","constraintsToPlugin","oldname","enableSoundTracks","elementId","nodeName","tag","temp","classHTML","className","attributes","clientWidth","clientHeight","insertBefore","children","setStreamId","newElement","forwardEventHandlers","getPrototypeOf","getStreamWithId","destElem","srcElem","properties","prop","propName","subPrototype","ConstructIceCandidate","pluginNeededButNotInstalledCb","pluginNeededButNotInstalledCbPriv","popupString","pluginInstallInterval","plugins","refresh","Arg","val","values","Platform","getDataDetail","includeContent","detail","isArrayBuffer","formatArrayBuffer","view","str","pad","ArrayBuffer","transportName","defaultHeaders","getUserAgentHeader","createLogger","ConsoleLogger","SubjectSubscription","dispose","minimumLogLevel","outputConsole","toISOString","userAgentHeaderName","constructUserAgent","getRuntime","getRuntimeVersion","runtime","runtimeVersion","majorAndMinor","anObject","check","O","buggy","read","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","NaN","Infinity","pow","rt","abs","floor","LN2","TYPE","_t","base64","ieee754","typedArraySupport","foo","subarray","kMaxLength","TYPED_ARRAY_SUPPORT","createBuffer","RangeError","encodingOrOffset","allocUnsafe","fromArrayBuffer","fromString","fromObject","assertSize","alloc","fill","encoding","checked","string","isEncoding","actual","fromArrayLike","array","byteOffset","isBuffer","copy","isnan","SlowBuffer","isView","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","bidirectionalIndexOf","arrayIndexOf","indexSize","arrLength","valLength","buf","readUInt16BE","foundIndex","found","hexWrite","remaining","strLen","utf8Write","blitBuffer","asciiWrite","asciiToBytes","latin1Write","base64Write","ucs2Write","utf16leToBytes","res","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","decodeCodePointsArray","INSPECT_MAX_BYTES","poolSize","_augment","species","allocUnsafeSlow","_isBuffer","compare","x","list","swap16","swap32","swap64","equals","inspect","thisStart","thisEnd","thisCopy","targetCopy","includes","isFinite","_arr","MAX_ARGUMENTS_LENGTH","codePoints","ret","out","toHex","bytes","checkOffset","ext","checkInt","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","sliceLen","readUIntLE","mul","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","maxBytes","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","INVALID_BASE64_RE","base64clean","stringtrim","units","leadSurrogate","byteArray","hi","lo","dst","NullLogger","_logLevel","_message","dP","redefineAll","ctx","anInstance","forOf","$iterDefine","setSpecies","DESCRIPTORS","fastKey","validate","SIZE","getEntry","entry","_f","getConstructor","NAME","IS_MAP","ADDER","iterable","clear","prev","callbackfn","def","setStrong","iterated","roomid","forceOptions","SocketConnection","socketCustomEvent","broadcast","maxParticipantsAllowed","enableScalableBroadcast","maxRelayLimitPerUser","socketCustomParameters","io","sockets","socketURL","origin","socketOptions","updateExtraBackup","onMessageEvent","alreadyConnected","resetProps","onSocketDisconnect","onSocketError","onEntireSessionClosed","useridAlreadyTaken","yourNewUserId","onUserIdAlreadyTaken","onNumberOfBroadcastViewersUpdated","isInitiator","MultiPeers","skipPeers","initFileBufferReader","fbr","FileBufferReader","onProgress","chunk","onFileProgress","onBegin","file","onFileStart","onEnd","onFileEnd","getLength","numberOfPeers","selectFirst","firstPeer","allPeers","callbcak","isNull","enableFileSharing","shareFile","DataView","remoteUser","TextSender","uuid","getLocalConfig","remoteSdp","streamsToShare","rtcMultiConnection","renegotiatingPeer","peerRef","onLocalSdp","localSdp","onNegotiationNeeded","onLocalCandidate","OnIceCandidateHandler","processCandidates","onDataChannelMessage","convertToObject","object","readyForNextChunk","getNextChunk","nextChunk","isLastChunk","chunkMissing","addChunk","promptNextChunk","onDataChannelError","onDataChannelOpened","onDataChannelClosed","onRemoteStream","onGettingRemoteMedia","onRemoteStreamRemoved","onRemovingRemoteMedia","onPeerStateChanged","onNegotiationStarted","onNegotiationCompleted","disconnectWith","enableMedia","setUserPreferences","localConfig","PeerInitiator","createAnsweringPeer","renegotiatePeer","isVideoTrack","lastVideoTrack","lastAudioTrack","addRemoteSdp","isAudio","isVideo","isScreen","onReadyForOffer","localStream","onLocalMediaError","readAsArrayBuffer","arrayOfUsers","chunkSize","textReceiver","TextReceiver","fireEvent","CustomEvent","eventDetail","__exposedProps__","setHarkEvents","onvolumechange","threshold","merge","setMuteHandlers","getRandomString","crypto","getRandomValues","Uint32Array","getRMCMediaElement","autoCreateMediaElement","isAudioOnly","streamEndedEvent","currentUserMediaRequest","remove","idInstance","StreamsHandler","onSyncNeeded","aStream","newStreamsArray","played","cbFired","listenEventHandler","eventHandler","removeNullEntries","newArray","captureStream","mozCaptureStream","getContext","pause","drawImage","toDataURL","HTMLVideoElement","cordova","el","attachEventListener","listener","useCapture","isAudioPlusTab","audioPlusTab","isUnifiedPlanSupportedDefault","canAddTransceiver","RTCRtpTransceiver","tempPc","isUnifiedPlanSuppored","isUnifiedPlanSupported","sdpSemantics","setCordovaAPIs","iosrtc","enable","selectAudioOutput","iOSDefaultAudioOutputDevice","registerGlobals","defaults","setSdpConstraints","allRemoteStreams","turn","relay","stun","reflexive","optionalArgument","trickleIce","beforeAddingStream","dontDuplicate","onended","streamToShare","onremovetrack","processSdp","isOfferer","setChannelEvents","internalSend","enableDisableVideoEncoding","getParameters","active","setParameters","createOfferOrAnswer","_method","onSettingLocalDescription","nativeClose","CodecsHandler","preferCodec","codecName","videoCodecNumbers","vp8LineNumber","vp9LineNumber","h264LineNumber","preferCodecHelper","ignore","preferCodecNumber","newLine","videoCodecNumbersOriginal","newOrder","codecNumber","removeVPX","disableNACK","prioritize","codecMimeType","mimeType","unshift","removeNonG722","setBAS","findLine","sdpLines","findLineInRange","startLine","endLine","realEndLine","getCodecPayloadType","sdpLine","pattern","setVideoBitrates","vp8Payload","xgoogle_min_bitrate","xgoogle_max_bitrate","vp8Index","rtxPayload","rtxIndex","rtxFmtpLineIndex","appendrtxNext","setOpusAttributes","opusPayload","opusIndex","opusFmtpLineIndex","appendOpusNext","stereo","maxaveragebitrate","maxplaybackrate","cbr","useinbandfec","usedtx","forceStereoAudio","fmtpLineIndex","extractSdp","setApplicationSpecificBandwidth","preferVP9","BandwidthHandler","icePair","iceRestrictions","iceProtocols","udp","tcp","IceServersHandler","getIceServers","setStreamType","mozMediaSource","getUserMediaHandler","mutex","localMediaConstraints","streaming","isBlackBerry","getUserMediaStream","getUserMediaError","getUserMediaFailure","hints","getUserMediaSuccess","successCB","failureCB","queueRequests","returnBack","currentUserMediaRequestOptions","handleType","setHandlers","syncAction","isSyncAction","isAudioMuted","graduallyIncreaseVolume","looper","times","afterEach","setTimeoutInteval","numberOfTimes","startedTimes","last","isobject","receivingTime","latency","sendingTime","autoTranslateText","original","Translator","TranslateText","translatedText","initialText","packetSize","textToTransfer","sendText","textMessage","chunkInterval","FileProgressBarHandler","handle","progressHelper","updateLabel","progress","div","filesContainer","documentElement","querySelector","maxChunks","helper","currentPosition","TranslationHandler","language","googKey","newScript","sourceText","randomNumber","translations","source","getElementsByTagName","getListOfLanguages","onreadystatechange","DONE","languages","useDefaultDevices","preventDuplicateOnStreamEvents","connectSocket","socketAutoReConnect","FirebaseConnection","PubNubConnection","joinRoom","getStreamInfoForAdmin","isRoomJoined","openRoom","identifier","publicRoomIdentifier","isRoomOpened","selectAll","beforeJoin","invokeGetUserMedia","setStreamEndHandler","messageToDeliver","openOrJoin","checkPresence","isRoomExist","captureUserMedia","eventObject","onleave","rejoin","onReConnecting","sessionForced","nonScreenSession","onbeforeunload","arg1","dontCloseSocket","closeBeforeUnload","closeSocket","ignoreBeforeUnload","changeUserId","newUserId","lastAudioDevice","lastVideoDevice","VoiceActivityDetection","DtlsSrtpKeyAgreement","googImprovedWifiBwe","googScreencastMinBitrate","googIPv6","googDscp","googCpuUnderuseThreshold","googCpuOveruseThreshold","googSuspendBelowMinBitrate","googCpuOveruseDetection","disconnect","closeEntireSession","videosContainer","gumCallback","streamCallback","videoConstraints","resetTrack","remoteUsersIds","isRemote","alreadySetEndHandler","participantId","acceptParticipationRequest","invokeSelectFileDialog","FileSelector","accept","selectSingleFile","paused","poster","snapshot","getSocket","skipStreams","setCustomSocketEvent","customEvent","getNumberOfBroadcastViewers","broadcastId","numberOfBroadcastViewers","dontWriteLogs","customSocketHandler","_roomid","SSEConnection","dontAttachStream","beforeRemovingStream","isChromeExtensionAvailable","checkIfChromeExtensionAvailable","isFirefoxExtensionAvailable","getChromeExtensionStatus","modifyScreenConstraints","screen_constraints","isLowBandwidth","opt","getExtraData","autoOpenOrJoin","resetScreen","setPassword","errors","ROOM_NOT_AVAILABLE","INVALID_PASSWORD","USERID_NOT_AVAILABLE","ROOM_PERMISSION_DENIED","ROOM_FULL","DID_NOT_JOIN_ANY_ROOM","INVALID_SOCKET","PUBLIC_IDENTIFIER_MISSING","INVALID_ADMIN_CREDENTIAL","redefine","meta","fails","$iterDetect","setToStringTag","inheritIfRequired","common","IS_WEAK","Base","fixMethod","KEY","entries","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","iter","BUGGY_ZERO","$instance","NEED","G","W","strong","MAP"],"mappings":"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","file":"js/room.d0f1e50d.js","sourcesContent":["'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","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!./Chat.vue?vue&type=style&index=0&lang=css&\"","'use strict';\r\n\r\n// Last Updated On: 2020-08-12 11:18:41 AM UTC\r\n\r\n// ________________\r\n// DetectRTC v1.4.1\r\n\r\n// Open-Sourced: https://github.com/muaz-khan/DetectRTC\r\n\r\n// --------------------------------------------------\r\n// Muaz Khan - www.MuazKhan.com\r\n// MIT License - www.WebRTC-Experiment.com/licence\r\n// --------------------------------------------------\r\n\r\n(function() {\r\n\r\n var browserFakeUserAgent = 'Fake/5.0 (FakeOS) AppleWebKit/123 (KHTML, like Gecko) Fake/12.3.4567.89 Fake/123.45';\r\n\r\n var isNodejs = typeof process === 'object' && typeof process.versions === 'object' && process.versions.node && /*node-process*/ !process.browser;\r\n if (isNodejs) {\r\n var version = process.versions.node.toString().replace('v', '');\r\n browserFakeUserAgent = 'Nodejs/' + version + ' (NodeOS) AppleWebKit/' + version + ' (KHTML, like Gecko) Nodejs/' + version + ' Nodejs/' + version\r\n }\r\n\r\n (function(that) {\r\n if (typeof window !== 'undefined') {\r\n return;\r\n }\r\n\r\n if (typeof window === 'undefined' && typeof global !== 'undefined') {\r\n global.navigator = {\r\n userAgent: browserFakeUserAgent,\r\n getUserMedia: function() {}\r\n };\r\n\r\n /*global window:true */\r\n that.window = global;\r\n } else if (typeof window === 'undefined') {\r\n // window = this;\r\n }\r\n\r\n if (typeof location === 'undefined') {\r\n /*global location:true */\r\n that.location = {\r\n protocol: 'file:',\r\n href: '',\r\n hash: ''\r\n };\r\n }\r\n\r\n if (typeof screen === 'undefined') {\r\n /*global screen:true */\r\n that.screen = {\r\n width: 0,\r\n height: 0\r\n };\r\n }\r\n })(typeof global !== 'undefined' ? global : window);\r\n\r\n /*global navigator:true */\r\n var navigator = window.navigator;\r\n\r\n if (typeof navigator !== 'undefined') {\r\n if (typeof navigator.webkitGetUserMedia !== 'undefined') {\r\n navigator.getUserMedia = navigator.webkitGetUserMedia;\r\n }\r\n\r\n if (typeof navigator.mozGetUserMedia !== 'undefined') {\r\n navigator.getUserMedia = navigator.mozGetUserMedia;\r\n }\r\n } else {\r\n navigator = {\r\n getUserMedia: function() {},\r\n userAgent: browserFakeUserAgent\r\n };\r\n }\r\n\r\n var isMobileDevice = !!(/Android|webOS|iPhone|iPad|iPod|BB10|BlackBerry|IEMobile|Opera Mini|Mobile|mobile/i.test(navigator.userAgent || ''));\r\n\r\n var isEdge = navigator.userAgent.indexOf('Edge') !== -1 && (!!navigator.msSaveOrOpenBlob || !!navigator.msSaveBlob);\r\n\r\n var isOpera = !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;\r\n var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1 && ('netscape' in window) && / rv:/.test(navigator.userAgent);\r\n var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\r\n var isChrome = !!window.chrome && !isOpera;\r\n var isIE = typeof document !== 'undefined' && !!document.documentMode && !isEdge;\r\n\r\n // this one can also be used:\r\n // https://www.websocket.org/js/stuff.js (DetectBrowser.js)\r\n\r\n function getBrowserInfo() {\r\n var nVer = navigator.appVersion;\r\n var nAgt = navigator.userAgent;\r\n var browserName = navigator.appName;\r\n var fullVersion = '' + parseFloat(navigator.appVersion);\r\n var majorVersion = parseInt(navigator.appVersion, 10);\r\n var nameOffset, verOffset, ix;\r\n\r\n // In Opera, the true version is after 'Opera' or after 'Version'\r\n if (isOpera) {\r\n browserName = 'Opera';\r\n try {\r\n fullVersion = navigator.userAgent.split('OPR/')[1].split(' ')[0];\r\n majorVersion = fullVersion.split('.')[0];\r\n } catch (e) {\r\n fullVersion = '0.0.0.0';\r\n majorVersion = 0;\r\n }\r\n }\r\n // In MSIE version <=10, the true version is after 'MSIE' in userAgent\r\n // In IE 11, look for the string after 'rv:'\r\n else if (isIE) {\r\n verOffset = nAgt.indexOf('rv:');\r\n if (verOffset > 0) { //IE 11\r\n fullVersion = nAgt.substring(verOffset + 3);\r\n } else { //IE 10 or earlier\r\n verOffset = nAgt.indexOf('MSIE');\r\n fullVersion = nAgt.substring(verOffset + 5);\r\n }\r\n browserName = 'IE';\r\n }\r\n // In Chrome, the true version is after 'Chrome' \r\n else if (isChrome) {\r\n verOffset = nAgt.indexOf('Chrome');\r\n browserName = 'Chrome';\r\n fullVersion = nAgt.substring(verOffset + 7);\r\n }\r\n // In Safari, the true version is after 'Safari' or after 'Version' \r\n else if (isSafari) {\r\n // both and safri and chrome has same userAgent\r\n if (nAgt.indexOf('CriOS') !== -1) {\r\n verOffset = nAgt.indexOf('CriOS');\r\n browserName = 'Chrome';\r\n fullVersion = nAgt.substring(verOffset + 6);\r\n } else if (nAgt.indexOf('FxiOS') !== -1) {\r\n verOffset = nAgt.indexOf('FxiOS');\r\n browserName = 'Firefox';\r\n fullVersion = nAgt.substring(verOffset + 6);\r\n } else {\r\n verOffset = nAgt.indexOf('Safari');\r\n\r\n browserName = 'Safari';\r\n fullVersion = nAgt.substring(verOffset + 7);\r\n\r\n if ((verOffset = nAgt.indexOf('Version')) !== -1) {\r\n fullVersion = nAgt.substring(verOffset + 8);\r\n }\r\n\r\n if (navigator.userAgent.indexOf('Version/') !== -1) {\r\n fullVersion = navigator.userAgent.split('Version/')[1].split(' ')[0];\r\n }\r\n }\r\n }\r\n // In Firefox, the true version is after 'Firefox' \r\n else if (isFirefox) {\r\n verOffset = nAgt.indexOf('Firefox');\r\n browserName = 'Firefox';\r\n fullVersion = nAgt.substring(verOffset + 8);\r\n }\r\n\r\n // In most other browsers, 'name/version' is at the end of userAgent \r\n else if ((nameOffset = nAgt.lastIndexOf(' ') + 1) < (verOffset = nAgt.lastIndexOf('/'))) {\r\n browserName = nAgt.substring(nameOffset, verOffset);\r\n fullVersion = nAgt.substring(verOffset + 1);\r\n\r\n if (browserName.toLowerCase() === browserName.toUpperCase()) {\r\n browserName = navigator.appName;\r\n }\r\n }\r\n\r\n if (isEdge) {\r\n browserName = 'Edge';\r\n fullVersion = navigator.userAgent.split('Edge/')[1];\r\n // fullVersion = parseInt(navigator.userAgent.match(/Edge\\/(\\d+).(\\d+)$/)[2], 10).toString();\r\n }\r\n\r\n // trim the fullVersion string at semicolon/space/bracket if present\r\n if ((ix = fullVersion.search(/[; \\)]/)) !== -1) {\r\n fullVersion = fullVersion.substring(0, ix);\r\n }\r\n\r\n majorVersion = parseInt('' + fullVersion, 10);\r\n\r\n if (isNaN(majorVersion)) {\r\n fullVersion = '' + parseFloat(navigator.appVersion);\r\n majorVersion = parseInt(navigator.appVersion, 10);\r\n }\r\n\r\n return {\r\n fullVersion: fullVersion,\r\n version: majorVersion,\r\n name: browserName,\r\n isPrivateBrowsing: false\r\n };\r\n }\r\n\r\n // via: https://gist.github.com/cou929/7973956\r\n\r\n function retry(isDone, next) {\r\n var currentTrial = 0,\r\n maxRetry = 50,\r\n interval = 10,\r\n isTimeout = false;\r\n var id = window.setInterval(\r\n function() {\r\n if (isDone()) {\r\n window.clearInterval(id);\r\n next(isTimeout);\r\n }\r\n if (currentTrial++ > maxRetry) {\r\n window.clearInterval(id);\r\n isTimeout = true;\r\n next(isTimeout);\r\n }\r\n },\r\n 10\r\n );\r\n }\r\n\r\n function isIE10OrLater(userAgent) {\r\n var ua = userAgent.toLowerCase();\r\n if (ua.indexOf('msie') === 0 && ua.indexOf('trident') === 0) {\r\n return false;\r\n }\r\n var match = /(?:msie|rv:)\\s?([\\d\\.]+)/.exec(ua);\r\n if (match && parseInt(match[1], 10) >= 10) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n function detectPrivateMode(callback) {\r\n var isPrivate;\r\n\r\n try {\r\n\r\n if (window.webkitRequestFileSystem) {\r\n window.webkitRequestFileSystem(\r\n window.TEMPORARY, 1,\r\n function() {\r\n isPrivate = false;\r\n },\r\n function(e) {\r\n isPrivate = true;\r\n }\r\n );\r\n } else if (window.indexedDB && /Firefox/.test(window.navigator.userAgent)) {\r\n var db;\r\n try {\r\n db = window.indexedDB.open('test');\r\n db.onerror = function() {\r\n return true;\r\n };\r\n } catch (e) {\r\n isPrivate = true;\r\n }\r\n\r\n if (typeof isPrivate === 'undefined') {\r\n retry(\r\n function isDone() {\r\n return db.readyState === 'done' ? true : false;\r\n },\r\n function next(isTimeout) {\r\n if (!isTimeout) {\r\n isPrivate = db.result ? false : true;\r\n }\r\n }\r\n );\r\n }\r\n } else if (isIE10OrLater(window.navigator.userAgent)) {\r\n isPrivate = false;\r\n try {\r\n if (!window.indexedDB) {\r\n isPrivate = true;\r\n }\r\n } catch (e) {\r\n isPrivate = true;\r\n }\r\n } else if (window.localStorage && /Safari/.test(window.navigator.userAgent)) {\r\n try {\r\n window.localStorage.setItem('test', 1);\r\n } catch (e) {\r\n isPrivate = true;\r\n }\r\n\r\n if (typeof isPrivate === 'undefined') {\r\n isPrivate = false;\r\n window.localStorage.removeItem('test');\r\n }\r\n }\r\n\r\n } catch (e) {\r\n isPrivate = false;\r\n }\r\n\r\n retry(\r\n function isDone() {\r\n return typeof isPrivate !== 'undefined' ? true : false;\r\n },\r\n function next(isTimeout) {\r\n callback(isPrivate);\r\n }\r\n );\r\n }\r\n\r\n var isMobile = {\r\n Android: function() {\r\n return navigator.userAgent.match(/Android/i);\r\n },\r\n BlackBerry: function() {\r\n return navigator.userAgent.match(/BlackBerry|BB10/i);\r\n },\r\n iOS: function() {\r\n return navigator.userAgent.match(/iPhone|iPad|iPod/i);\r\n },\r\n Opera: function() {\r\n return navigator.userAgent.match(/Opera Mini/i);\r\n },\r\n Windows: function() {\r\n return navigator.userAgent.match(/IEMobile/i);\r\n },\r\n any: function() {\r\n return (isMobile.Android() || isMobile.BlackBerry() || isMobile.iOS() || isMobile.Opera() || isMobile.Windows());\r\n },\r\n getOsName: function() {\r\n var osName = 'Unknown OS';\r\n if (isMobile.Android()) {\r\n osName = 'Android';\r\n }\r\n\r\n if (isMobile.BlackBerry()) {\r\n osName = 'BlackBerry';\r\n }\r\n\r\n if (isMobile.iOS()) {\r\n osName = 'iOS';\r\n }\r\n\r\n if (isMobile.Opera()) {\r\n osName = 'Opera Mini';\r\n }\r\n\r\n if (isMobile.Windows()) {\r\n osName = 'Windows';\r\n }\r\n\r\n return osName;\r\n }\r\n };\r\n\r\n // via: http://jsfiddle.net/ChristianL/AVyND/\r\n function detectDesktopOS() {\r\n var unknown = '-';\r\n\r\n var nVer = navigator.appVersion;\r\n var nAgt = navigator.userAgent;\r\n\r\n var os = unknown;\r\n var clientStrings = [{\r\n s: 'Chrome OS',\r\n r: /CrOS/\r\n }, {\r\n s: 'Windows 10',\r\n r: /(Windows 10.0|Windows NT 10.0)/\r\n }, {\r\n s: 'Windows 8.1',\r\n r: /(Windows 8.1|Windows NT 6.3)/\r\n }, {\r\n s: 'Windows 8',\r\n r: /(Windows 8|Windows NT 6.2)/\r\n }, {\r\n s: 'Windows 7',\r\n r: /(Windows 7|Windows NT 6.1)/\r\n }, {\r\n s: 'Windows Vista',\r\n r: /Windows NT 6.0/\r\n }, {\r\n s: 'Windows Server 2003',\r\n r: /Windows NT 5.2/\r\n }, {\r\n s: 'Windows XP',\r\n r: /(Windows NT 5.1|Windows XP)/\r\n }, {\r\n s: 'Windows 2000',\r\n r: /(Windows NT 5.0|Windows 2000)/\r\n }, {\r\n s: 'Windows ME',\r\n r: /(Win 9x 4.90|Windows ME)/\r\n }, {\r\n s: 'Windows 98',\r\n r: /(Windows 98|Win98)/\r\n }, {\r\n s: 'Windows 95',\r\n r: /(Windows 95|Win95|Windows_95)/\r\n }, {\r\n s: 'Windows NT 4.0',\r\n r: /(Windows NT 4.0|WinNT4.0|WinNT|Windows NT)/\r\n }, {\r\n s: 'Windows CE',\r\n r: /Windows CE/\r\n }, {\r\n s: 'Windows 3.11',\r\n r: /Win16/\r\n }, {\r\n s: 'Android',\r\n r: /Android/\r\n }, {\r\n s: 'Open BSD',\r\n r: /OpenBSD/\r\n }, {\r\n s: 'Sun OS',\r\n r: /SunOS/\r\n }, {\r\n s: 'Linux',\r\n r: /(Linux|X11)/\r\n }, {\r\n s: 'iOS',\r\n r: /(iPhone|iPad|iPod)/\r\n }, {\r\n s: 'Mac OS X',\r\n r: /Mac OS X/\r\n }, {\r\n s: 'Mac OS',\r\n r: /(MacPPC|MacIntel|Mac_PowerPC|Macintosh)/\r\n }, {\r\n s: 'QNX',\r\n r: /QNX/\r\n }, {\r\n s: 'UNIX',\r\n r: /UNIX/\r\n }, {\r\n s: 'BeOS',\r\n r: /BeOS/\r\n }, {\r\n s: 'OS/2',\r\n r: /OS\\/2/\r\n }, {\r\n s: 'Search Bot',\r\n r: /(nuhk|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask Jeeves\\/Teoma|ia_archiver)/\r\n }];\r\n for (var i = 0, cs; cs = clientStrings[i]; i++) {\r\n if (cs.r.test(nAgt)) {\r\n os = cs.s;\r\n break;\r\n }\r\n }\r\n\r\n var osVersion = unknown;\r\n\r\n if (/Windows/.test(os)) {\r\n if (/Windows (.*)/.test(os)) {\r\n osVersion = /Windows (.*)/.exec(os)[1];\r\n }\r\n os = 'Windows';\r\n }\r\n\r\n switch (os) {\r\n case 'Mac OS X':\r\n if (/Mac OS X (10[\\.\\_\\d]+)/.test(nAgt)) {\r\n osVersion = /Mac OS X (10[\\.\\_\\d]+)/.exec(nAgt)[1];\r\n }\r\n break;\r\n case 'Android':\r\n if (/Android ([\\.\\_\\d]+)/.test(nAgt)) {\r\n osVersion = /Android ([\\.\\_\\d]+)/.exec(nAgt)[1];\r\n }\r\n break;\r\n case 'iOS':\r\n if (/OS (\\d+)_(\\d+)_?(\\d+)?/.test(nAgt)) {\r\n osVersion = /OS (\\d+)_(\\d+)_?(\\d+)?/.exec(nVer);\r\n if (osVersion && osVersion.length > 3) {\r\n osVersion = osVersion[1] + '.' + osVersion[2] + '.' + (osVersion[3] | 0);\r\n }\r\n }\r\n break;\r\n }\r\n\r\n return {\r\n osName: os,\r\n osVersion: osVersion\r\n };\r\n }\r\n\r\n var osName = 'Unknown OS';\r\n var osVersion = 'Unknown OS Version';\r\n\r\n function getAndroidVersion(ua) {\r\n ua = (ua || navigator.userAgent).toLowerCase();\r\n var match = ua.match(/android\\s([0-9\\.]*)/);\r\n return match ? match[1] : false;\r\n }\r\n\r\n var osInfo = detectDesktopOS();\r\n\r\n if (osInfo && osInfo.osName && osInfo.osName != '-') {\r\n osName = osInfo.osName;\r\n osVersion = osInfo.osVersion;\r\n } else if (isMobile.any()) {\r\n osName = isMobile.getOsName();\r\n\r\n if (osName == 'Android') {\r\n osVersion = getAndroidVersion();\r\n }\r\n }\r\n\r\n var isNodejs = typeof process === 'object' && typeof process.versions === 'object' && process.versions.node;\r\n\r\n if (osName === 'Unknown OS' && isNodejs) {\r\n osName = 'Nodejs';\r\n osVersion = process.versions.node.toString().replace('v', '');\r\n }\r\n\r\n var isCanvasSupportsStreamCapturing = false;\r\n var isVideoSupportsStreamCapturing = false;\r\n ['captureStream', 'mozCaptureStream', 'webkitCaptureStream'].forEach(function(item) {\r\n if (typeof document === 'undefined' || typeof document.createElement !== 'function') {\r\n return;\r\n }\r\n\r\n if (!isCanvasSupportsStreamCapturing && item in document.createElement('canvas')) {\r\n isCanvasSupportsStreamCapturing = true;\r\n }\r\n\r\n if (!isVideoSupportsStreamCapturing && item in document.createElement('video')) {\r\n isVideoSupportsStreamCapturing = true;\r\n }\r\n });\r\n\r\n var regexIpv4Local = /^(192\\.168\\.|169\\.254\\.|10\\.|172\\.(1[6-9]|2\\d|3[01]))/,\r\n regexIpv4 = /([0-9]{1,3}(\\.[0-9]{1,3}){3})/,\r\n regexIpv6 = /[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7}/;\r\n\r\n // via: https://github.com/diafygi/webrtc-ips\r\n function DetectLocalIPAddress(callback, stream) {\r\n if (!DetectRTC.isWebRTCSupported) {\r\n return;\r\n }\r\n\r\n var isPublic = true,\r\n isIpv4 = true;\r\n getIPs(function(ip) {\r\n if (!ip) {\r\n callback(); // Pass nothing to tell that ICE-gathering-ended\r\n } else if (ip.match(regexIpv4Local)) {\r\n isPublic = false;\r\n callback('Local: ' + ip, isPublic, isIpv4);\r\n } else if (ip.match(regexIpv6)) { //via https://ourcodeworld.com/articles/read/257/how-to-get-the-client-ip-address-with-javascript-only\r\n isIpv4 = false;\r\n callback('Public: ' + ip, isPublic, isIpv4);\r\n } else {\r\n callback('Public: ' + ip, isPublic, isIpv4);\r\n }\r\n }, stream);\r\n }\r\n\r\n function getIPs(callback, stream) {\r\n if (typeof document === 'undefined' || typeof document.getElementById !== 'function') {\r\n return;\r\n }\r\n\r\n var ipDuplicates = {};\r\n\r\n var RTCPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;\r\n\r\n if (!RTCPeerConnection) {\r\n var iframe = document.getElementById('iframe');\r\n if (!iframe) {\r\n return;\r\n }\r\n var win = iframe.contentWindow;\r\n RTCPeerConnection = win.RTCPeerConnection || win.mozRTCPeerConnection || win.webkitRTCPeerConnection;\r\n }\r\n\r\n if (!RTCPeerConnection) {\r\n return;\r\n }\r\n\r\n var peerConfig = null;\r\n\r\n if (DetectRTC.browser === 'Chrome' && DetectRTC.browser.version < 58) {\r\n // todo: add support for older Opera\r\n peerConfig = {\r\n optional: [{\r\n RtpDataChannels: true\r\n }]\r\n };\r\n }\r\n\r\n var servers = {\r\n iceServers: [{\r\n urls: 'stun:stun.l.google.com:19302'\r\n }]\r\n };\r\n\r\n var pc = new RTCPeerConnection(servers, peerConfig);\r\n\r\n if (stream) {\r\n if (pc.addStream) {\r\n pc.addStream(stream);\r\n } else if (pc.addTrack && stream.getTracks()[0]) {\r\n pc.addTrack(stream.getTracks()[0], stream);\r\n }\r\n }\r\n\r\n function handleCandidate(candidate) {\r\n if (!candidate) {\r\n callback(); // Pass nothing to tell that ICE-gathering-ended\r\n return;\r\n }\r\n\r\n var match = regexIpv4.exec(candidate);\r\n if (!match) {\r\n return;\r\n }\r\n var ipAddress = match[1];\r\n var isPublic = (candidate.match(regexIpv4Local)),\r\n isIpv4 = true;\r\n\r\n if (ipDuplicates[ipAddress] === undefined) {\r\n callback(ipAddress, isPublic, isIpv4);\r\n }\r\n\r\n ipDuplicates[ipAddress] = true;\r\n }\r\n\r\n // listen for candidate events\r\n pc.onicecandidate = function(event) {\r\n if (event.candidate && event.candidate.candidate) {\r\n handleCandidate(event.candidate.candidate);\r\n } else {\r\n handleCandidate(); // Pass nothing to tell that ICE-gathering-ended\r\n }\r\n };\r\n\r\n // create data channel\r\n if (!stream) {\r\n try {\r\n pc.createDataChannel('sctp', {});\r\n } catch (e) {}\r\n }\r\n\r\n // create an offer sdp\r\n if (DetectRTC.isPromisesSupported) {\r\n pc.createOffer().then(function(result) {\r\n pc.setLocalDescription(result).then(afterCreateOffer);\r\n });\r\n } else {\r\n pc.createOffer(function(result) {\r\n pc.setLocalDescription(result, afterCreateOffer, function() {});\r\n }, function() {});\r\n }\r\n\r\n function afterCreateOffer() {\r\n var lines = pc.localDescription.sdp.split('\\n');\r\n\r\n lines.forEach(function(line) {\r\n if (line && line.indexOf('a=candidate:') === 0) {\r\n handleCandidate(line);\r\n }\r\n });\r\n }\r\n }\r\n\r\n var MediaDevices = [];\r\n\r\n var audioInputDevices = [];\r\n var audioOutputDevices = [];\r\n var videoInputDevices = [];\r\n\r\n if (navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {\r\n // Firefox 38+ seems having support of enumerateDevices\r\n // Thanks @xdumaine/enumerateDevices\r\n navigator.enumerateDevices = function(callback) {\r\n var enumerateDevices = navigator.mediaDevices.enumerateDevices();\r\n if (enumerateDevices && enumerateDevices.then) {\r\n navigator.mediaDevices.enumerateDevices().then(callback).catch(function() {\r\n callback([]);\r\n });\r\n } else {\r\n callback([]);\r\n }\r\n };\r\n }\r\n\r\n // Media Devices detection\r\n var canEnumerate = false;\r\n\r\n /*global MediaStreamTrack:true */\r\n if (typeof MediaStreamTrack !== 'undefined' && 'getSources' in MediaStreamTrack) {\r\n canEnumerate = true;\r\n } else if (navigator.mediaDevices && !!navigator.mediaDevices.enumerateDevices) {\r\n canEnumerate = true;\r\n }\r\n\r\n var hasMicrophone = false;\r\n var hasSpeakers = false;\r\n var hasWebcam = false;\r\n\r\n var isWebsiteHasMicrophonePermissions = false;\r\n var isWebsiteHasWebcamPermissions = false;\r\n\r\n // http://dev.w3.org/2011/webrtc/editor/getusermedia.html#mediadevices\r\n function checkDeviceSupport(callback) {\r\n if (!canEnumerate) {\r\n if (callback) {\r\n callback();\r\n }\r\n return;\r\n }\r\n\r\n if (!navigator.enumerateDevices && window.MediaStreamTrack && window.MediaStreamTrack.getSources) {\r\n navigator.enumerateDevices = window.MediaStreamTrack.getSources.bind(window.MediaStreamTrack);\r\n }\r\n\r\n if (!navigator.enumerateDevices && navigator.enumerateDevices) {\r\n navigator.enumerateDevices = navigator.enumerateDevices.bind(navigator);\r\n }\r\n\r\n if (!navigator.enumerateDevices) {\r\n if (callback) {\r\n callback();\r\n }\r\n return;\r\n }\r\n\r\n MediaDevices = [];\r\n\r\n audioInputDevices = [];\r\n audioOutputDevices = [];\r\n videoInputDevices = [];\r\n\r\n hasMicrophone = false;\r\n hasSpeakers = false;\r\n hasWebcam = false;\r\n\r\n isWebsiteHasMicrophonePermissions = false;\r\n isWebsiteHasWebcamPermissions = false;\r\n\r\n // to prevent duplication\r\n var alreadyUsedDevices = {};\r\n\r\n navigator.enumerateDevices(function(devices) {\r\n MediaDevices = [];\r\n\r\n audioInputDevices = [];\r\n audioOutputDevices = [];\r\n videoInputDevices = [];\r\n\r\n devices.forEach(function(_device) {\r\n var device = {};\r\n for (var d in _device) {\r\n try {\r\n if (typeof _device[d] !== 'function') {\r\n device[d] = _device[d];\r\n }\r\n } catch (e) {}\r\n }\r\n\r\n if (alreadyUsedDevices[device.deviceId + device.label + device.kind]) {\r\n return;\r\n }\r\n\r\n // if it is MediaStreamTrack.getSources\r\n if (device.kind === 'audio') {\r\n device.kind = 'audioinput';\r\n }\r\n\r\n if (device.kind === 'video') {\r\n device.kind = 'videoinput';\r\n }\r\n\r\n if (!device.deviceId) {\r\n device.deviceId = device.id;\r\n }\r\n\r\n if (!device.id) {\r\n device.id = device.deviceId;\r\n }\r\n\r\n if (!device.label) {\r\n device.isCustomLabel = true;\r\n\r\n if (device.kind === 'videoinput') {\r\n device.label = 'Camera ' + (videoInputDevices.length + 1);\r\n } else if (device.kind === 'audioinput') {\r\n device.label = 'Microphone ' + (audioInputDevices.length + 1);\r\n } else if (device.kind === 'audiooutput') {\r\n device.label = 'Speaker ' + (audioOutputDevices.length + 1);\r\n } else {\r\n device.label = 'Please invoke getUserMedia once.';\r\n }\r\n\r\n if (typeof DetectRTC !== 'undefined' && DetectRTC.browser.isChrome && DetectRTC.browser.version >= 46 && !/^(https:|chrome-extension:)$/g.test(location.protocol || '')) {\r\n if (typeof document !== 'undefined' && typeof document.domain === 'string' && document.domain.search && document.domain.search(/localhost|127.0./g) === -1) {\r\n device.label = 'HTTPs is required to get label of this ' + device.kind + ' device.';\r\n }\r\n }\r\n } else {\r\n // Firefox on Android still returns empty label\r\n if (device.kind === 'videoinput' && !isWebsiteHasWebcamPermissions) {\r\n isWebsiteHasWebcamPermissions = true;\r\n }\r\n\r\n if (device.kind === 'audioinput' && !isWebsiteHasMicrophonePermissions) {\r\n isWebsiteHasMicrophonePermissions = true;\r\n }\r\n }\r\n\r\n if (device.kind === 'audioinput') {\r\n hasMicrophone = true;\r\n\r\n if (audioInputDevices.indexOf(device) === -1) {\r\n audioInputDevices.push(device);\r\n }\r\n }\r\n\r\n if (device.kind === 'audiooutput') {\r\n hasSpeakers = true;\r\n\r\n if (audioOutputDevices.indexOf(device) === -1) {\r\n audioOutputDevices.push(device);\r\n }\r\n }\r\n\r\n if (device.kind === 'videoinput') {\r\n hasWebcam = true;\r\n\r\n if (videoInputDevices.indexOf(device) === -1) {\r\n videoInputDevices.push(device);\r\n }\r\n }\r\n\r\n // there is no 'videoouput' in the spec.\r\n MediaDevices.push(device);\r\n\r\n alreadyUsedDevices[device.deviceId + device.label + device.kind] = device;\r\n });\r\n\r\n if (typeof DetectRTC !== 'undefined') {\r\n // to sync latest outputs\r\n DetectRTC.MediaDevices = MediaDevices;\r\n DetectRTC.hasMicrophone = hasMicrophone;\r\n DetectRTC.hasSpeakers = hasSpeakers;\r\n DetectRTC.hasWebcam = hasWebcam;\r\n\r\n DetectRTC.isWebsiteHasWebcamPermissions = isWebsiteHasWebcamPermissions;\r\n DetectRTC.isWebsiteHasMicrophonePermissions = isWebsiteHasMicrophonePermissions;\r\n\r\n DetectRTC.audioInputDevices = audioInputDevices;\r\n DetectRTC.audioOutputDevices = audioOutputDevices;\r\n DetectRTC.videoInputDevices = videoInputDevices;\r\n }\r\n\r\n if (callback) {\r\n callback();\r\n }\r\n });\r\n }\r\n\r\n var DetectRTC = window.DetectRTC || {};\r\n\r\n // ----------\r\n // DetectRTC.browser.name || DetectRTC.browser.version || DetectRTC.browser.fullVersion\r\n DetectRTC.browser = getBrowserInfo();\r\n\r\n detectPrivateMode(function(isPrivateBrowsing) {\r\n DetectRTC.browser.isPrivateBrowsing = !!isPrivateBrowsing;\r\n });\r\n\r\n // DetectRTC.isChrome || DetectRTC.isFirefox || DetectRTC.isEdge\r\n DetectRTC.browser['is' + DetectRTC.browser.name] = true;\r\n\r\n // -----------\r\n DetectRTC.osName = osName;\r\n DetectRTC.osVersion = osVersion;\r\n\r\n var isNodeWebkit = typeof process === 'object' && typeof process.versions === 'object' && process.versions['node-webkit'];\r\n\r\n // --------- Detect if system supports WebRTC 1.0 or WebRTC 1.1.\r\n var isWebRTCSupported = false;\r\n ['RTCPeerConnection', 'webkitRTCPeerConnection', 'mozRTCPeerConnection', 'RTCIceGatherer'].forEach(function(item) {\r\n if (isWebRTCSupported) {\r\n return;\r\n }\r\n\r\n if (item in window) {\r\n isWebRTCSupported = true;\r\n }\r\n });\r\n DetectRTC.isWebRTCSupported = isWebRTCSupported;\r\n\r\n //-------\r\n DetectRTC.isORTCSupported = typeof RTCIceGatherer !== 'undefined';\r\n\r\n // --------- Detect if system supports screen capturing API\r\n var isScreenCapturingSupported = false;\r\n if (DetectRTC.browser.isChrome && DetectRTC.browser.version >= 35) {\r\n isScreenCapturingSupported = true;\r\n } else if (DetectRTC.browser.isFirefox && DetectRTC.browser.version >= 34) {\r\n isScreenCapturingSupported = true;\r\n } else if (DetectRTC.browser.isEdge && DetectRTC.browser.version >= 17) {\r\n isScreenCapturingSupported = true;\r\n } else if (DetectRTC.osName === 'Android' && DetectRTC.browser.isChrome) {\r\n isScreenCapturingSupported = true;\r\n }\r\n\r\n if (!!navigator.getDisplayMedia || (navigator.mediaDevices && navigator.mediaDevices.getDisplayMedia)) {\r\n isScreenCapturingSupported = true;\r\n }\r\n\r\n if (!/^(https:|chrome-extension:)$/g.test(location.protocol || '')) {\r\n var isNonLocalHost = typeof document !== 'undefined' && typeof document.domain === 'string' && document.domain.search && document.domain.search(/localhost|127.0./g) === -1;\r\n if (isNonLocalHost && (DetectRTC.browser.isChrome || DetectRTC.browser.isEdge || DetectRTC.browser.isOpera)) {\r\n isScreenCapturingSupported = false;\r\n } else if (DetectRTC.browser.isFirefox) {\r\n isScreenCapturingSupported = false;\r\n }\r\n }\r\n DetectRTC.isScreenCapturingSupported = isScreenCapturingSupported;\r\n\r\n // --------- Detect if WebAudio API are supported\r\n var webAudio = {\r\n isSupported: false,\r\n isCreateMediaStreamSourceSupported: false\r\n };\r\n\r\n ['AudioContext', 'webkitAudioContext', 'mozAudioContext', 'msAudioContext'].forEach(function(item) {\r\n if (webAudio.isSupported) {\r\n return;\r\n }\r\n\r\n if (item in window) {\r\n webAudio.isSupported = true;\r\n\r\n if (window[item] && 'createMediaStreamSource' in window[item].prototype) {\r\n webAudio.isCreateMediaStreamSourceSupported = true;\r\n }\r\n }\r\n });\r\n DetectRTC.isAudioContextSupported = webAudio.isSupported;\r\n DetectRTC.isCreateMediaStreamSourceSupported = webAudio.isCreateMediaStreamSourceSupported;\r\n\r\n // ---------- Detect if SCTP/RTP channels are supported.\r\n\r\n var isRtpDataChannelsSupported = false;\r\n if (DetectRTC.browser.isChrome && DetectRTC.browser.version > 31) {\r\n isRtpDataChannelsSupported = true;\r\n }\r\n DetectRTC.isRtpDataChannelsSupported = isRtpDataChannelsSupported;\r\n\r\n var isSCTPSupportd = false;\r\n if (DetectRTC.browser.isFirefox && DetectRTC.browser.version > 28) {\r\n isSCTPSupportd = true;\r\n } else if (DetectRTC.browser.isChrome && DetectRTC.browser.version > 25) {\r\n isSCTPSupportd = true;\r\n } else if (DetectRTC.browser.isOpera && DetectRTC.browser.version >= 11) {\r\n isSCTPSupportd = true;\r\n }\r\n DetectRTC.isSctpDataChannelsSupported = isSCTPSupportd;\r\n\r\n // ---------\r\n\r\n DetectRTC.isMobileDevice = isMobileDevice; // \"isMobileDevice\" boolean is defined in \"getBrowserInfo.js\"\r\n\r\n // ------\r\n var isGetUserMediaSupported = false;\r\n if (navigator.getUserMedia) {\r\n isGetUserMediaSupported = true;\r\n } else if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\r\n isGetUserMediaSupported = true;\r\n }\r\n\r\n if (DetectRTC.browser.isChrome && DetectRTC.browser.version >= 46 && !/^(https:|chrome-extension:)$/g.test(location.protocol || '')) {\r\n if (typeof document !== 'undefined' && typeof document.domain === 'string' && document.domain.search && document.domain.search(/localhost|127.0./g) === -1) {\r\n isGetUserMediaSupported = 'Requires HTTPs';\r\n }\r\n }\r\n\r\n if (DetectRTC.osName === 'Nodejs') {\r\n isGetUserMediaSupported = false;\r\n }\r\n DetectRTC.isGetUserMediaSupported = isGetUserMediaSupported;\r\n\r\n var displayResolution = '';\r\n if (screen.width) {\r\n var width = (screen.width) ? screen.width : '';\r\n var height = (screen.height) ? screen.height : '';\r\n displayResolution += '' + width + ' x ' + height;\r\n }\r\n DetectRTC.displayResolution = displayResolution;\r\n\r\n function getAspectRatio(w, h) {\r\n function gcd(a, b) {\r\n return (b == 0) ? a : gcd(b, a % b);\r\n }\r\n var r = gcd(w, h);\r\n return (w / r) / (h / r);\r\n }\r\n\r\n DetectRTC.displayAspectRatio = getAspectRatio(screen.width, screen.height).toFixed(2);\r\n\r\n // ----------\r\n DetectRTC.isCanvasSupportsStreamCapturing = isCanvasSupportsStreamCapturing;\r\n DetectRTC.isVideoSupportsStreamCapturing = isVideoSupportsStreamCapturing;\r\n\r\n if (DetectRTC.browser.name == 'Chrome' && DetectRTC.browser.version >= 53) {\r\n if (!DetectRTC.isCanvasSupportsStreamCapturing) {\r\n DetectRTC.isCanvasSupportsStreamCapturing = 'Requires chrome flag: enable-experimental-web-platform-features';\r\n }\r\n\r\n if (!DetectRTC.isVideoSupportsStreamCapturing) {\r\n DetectRTC.isVideoSupportsStreamCapturing = 'Requires chrome flag: enable-experimental-web-platform-features';\r\n }\r\n }\r\n\r\n // ------\r\n DetectRTC.DetectLocalIPAddress = DetectLocalIPAddress;\r\n\r\n DetectRTC.isWebSocketsSupported = 'WebSocket' in window && 2 === window.WebSocket.CLOSING;\r\n DetectRTC.isWebSocketsBlocked = !DetectRTC.isWebSocketsSupported;\r\n\r\n if (DetectRTC.osName === 'Nodejs') {\r\n DetectRTC.isWebSocketsSupported = true;\r\n DetectRTC.isWebSocketsBlocked = false;\r\n }\r\n\r\n DetectRTC.checkWebSocketsSupport = function(callback) {\r\n callback = callback || function() {};\r\n try {\r\n var starttime;\r\n var websocket = new WebSocket('wss://echo.websocket.org:443/');\r\n websocket.onopen = function() {\r\n DetectRTC.isWebSocketsBlocked = false;\r\n starttime = (new Date).getTime();\r\n websocket.send('ping');\r\n };\r\n websocket.onmessage = function() {\r\n DetectRTC.WebsocketLatency = (new Date).getTime() - starttime + 'ms';\r\n callback();\r\n websocket.close();\r\n websocket = null;\r\n };\r\n websocket.onerror = function() {\r\n DetectRTC.isWebSocketsBlocked = true;\r\n callback();\r\n };\r\n } catch (e) {\r\n DetectRTC.isWebSocketsBlocked = true;\r\n callback();\r\n }\r\n };\r\n\r\n // -------\r\n DetectRTC.load = function(callback) {\r\n callback = callback || function() {};\r\n checkDeviceSupport(callback);\r\n };\r\n\r\n // check for microphone/camera support!\r\n if (typeof checkDeviceSupport === 'function') {\r\n // checkDeviceSupport();\r\n }\r\n\r\n if (typeof MediaDevices !== 'undefined') {\r\n DetectRTC.MediaDevices = MediaDevices;\r\n } else {\r\n DetectRTC.MediaDevices = [];\r\n }\r\n\r\n DetectRTC.hasMicrophone = hasMicrophone;\r\n DetectRTC.hasSpeakers = hasSpeakers;\r\n DetectRTC.hasWebcam = hasWebcam;\r\n\r\n DetectRTC.isWebsiteHasWebcamPermissions = isWebsiteHasWebcamPermissions;\r\n DetectRTC.isWebsiteHasMicrophonePermissions = isWebsiteHasMicrophonePermissions;\r\n\r\n DetectRTC.audioInputDevices = audioInputDevices;\r\n DetectRTC.audioOutputDevices = audioOutputDevices;\r\n DetectRTC.videoInputDevices = videoInputDevices;\r\n\r\n // ------\r\n var isSetSinkIdSupported = false;\r\n if (typeof document !== 'undefined' && typeof document.createElement === 'function' && 'setSinkId' in document.createElement('video')) {\r\n isSetSinkIdSupported = true;\r\n }\r\n DetectRTC.isSetSinkIdSupported = isSetSinkIdSupported;\r\n\r\n // -----\r\n var isRTPSenderReplaceTracksSupported = false;\r\n if (DetectRTC.browser.isFirefox && typeof mozRTCPeerConnection !== 'undefined' /*&& DetectRTC.browser.version > 39*/ ) {\r\n /*global mozRTCPeerConnection:true */\r\n if ('getSenders' in mozRTCPeerConnection.prototype) {\r\n isRTPSenderReplaceTracksSupported = true;\r\n }\r\n } else if (DetectRTC.browser.isChrome && typeof webkitRTCPeerConnection !== 'undefined') {\r\n /*global webkitRTCPeerConnection:true */\r\n if ('getSenders' in webkitRTCPeerConnection.prototype) {\r\n isRTPSenderReplaceTracksSupported = true;\r\n }\r\n }\r\n DetectRTC.isRTPSenderReplaceTracksSupported = isRTPSenderReplaceTracksSupported;\r\n\r\n //------\r\n var isRemoteStreamProcessingSupported = false;\r\n if (DetectRTC.browser.isFirefox && DetectRTC.browser.version > 38) {\r\n isRemoteStreamProcessingSupported = true;\r\n }\r\n DetectRTC.isRemoteStreamProcessingSupported = isRemoteStreamProcessingSupported;\r\n\r\n //-------\r\n var isApplyConstraintsSupported = false;\r\n\r\n /*global MediaStreamTrack:true */\r\n if (typeof MediaStreamTrack !== 'undefined' && 'applyConstraints' in MediaStreamTrack.prototype) {\r\n isApplyConstraintsSupported = true;\r\n }\r\n DetectRTC.isApplyConstraintsSupported = isApplyConstraintsSupported;\r\n\r\n //-------\r\n var isMultiMonitorScreenCapturingSupported = false;\r\n if (DetectRTC.browser.isFirefox && DetectRTC.browser.version >= 43) {\r\n // version 43 merely supports platforms for multi-monitors\r\n // version 44 will support exact multi-monitor selection i.e. you can select any monitor for screen capturing.\r\n isMultiMonitorScreenCapturingSupported = true;\r\n }\r\n DetectRTC.isMultiMonitorScreenCapturingSupported = isMultiMonitorScreenCapturingSupported;\r\n\r\n DetectRTC.isPromisesSupported = !!('Promise' in window);\r\n\r\n // version is generated by \"grunt\"\r\n DetectRTC.version = '1.4.1';\r\n\r\n if (typeof DetectRTC === 'undefined') {\r\n window.DetectRTC = {};\r\n }\r\n\r\n var MediaStream = window.MediaStream;\r\n\r\n if (typeof MediaStream === 'undefined' && typeof webkitMediaStream !== 'undefined') {\r\n MediaStream = webkitMediaStream;\r\n }\r\n\r\n if (typeof MediaStream !== 'undefined' && typeof MediaStream === 'function') {\r\n DetectRTC.MediaStream = Object.keys(MediaStream.prototype);\r\n } else DetectRTC.MediaStream = false;\r\n\r\n if (typeof MediaStreamTrack !== 'undefined') {\r\n DetectRTC.MediaStreamTrack = Object.keys(MediaStreamTrack.prototype);\r\n } else DetectRTC.MediaStreamTrack = false;\r\n\r\n var RTCPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;\r\n\r\n if (typeof RTCPeerConnection !== 'undefined') {\r\n DetectRTC.RTCPeerConnection = Object.keys(RTCPeerConnection.prototype);\r\n } else DetectRTC.RTCPeerConnection = false;\r\n\r\n window.DetectRTC = DetectRTC;\r\n\r\n if (typeof module !== 'undefined' /* && !!module.exports*/ ) {\r\n module.exports = DetectRTC;\r\n }\r\n\r\n if (typeof define === 'function' && define.amd) {\r\n define('DetectRTC', [], function() {\r\n return DetectRTC;\r\n });\r\n }\r\n})();\n","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!./ConnectionInfo.vue?vue&type=style&index=0&lang=css&\"","// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\n// These values are designed to match the ASP.NET Log Levels since that's the pattern we're emulating here.\r\n/** Indicates the severity of a log message.\r\n *\r\n * Log Levels are ordered in increasing severity. So `Debug` is more severe than `Trace`, etc.\r\n */\r\nexport var LogLevel;\r\n(function (LogLevel) {\r\n /** Log level for very low severity diagnostic messages. */\r\n LogLevel[LogLevel[\"Trace\"] = 0] = \"Trace\";\r\n /** Log level for low severity diagnostic messages. */\r\n LogLevel[LogLevel[\"Debug\"] = 1] = \"Debug\";\r\n /** Log level for informational diagnostic messages. */\r\n LogLevel[LogLevel[\"Information\"] = 2] = \"Information\";\r\n /** Log level for diagnostic messages that indicate a non-fatal problem. */\r\n LogLevel[LogLevel[\"Warning\"] = 3] = \"Warning\";\r\n /** Log level for diagnostic messages that indicate a failure in the current operation. */\r\n LogLevel[LogLevel[\"Error\"] = 4] = \"Error\";\r\n /** Log level for diagnostic messages that indicate a failure that will terminate the entire application. */\r\n LogLevel[LogLevel[\"Critical\"] = 5] = \"Critical\";\r\n /** The highest possible log level. Used when configuring logging to indicate that no log messages should be emitted. */\r\n LogLevel[LogLevel[\"None\"] = 6] = \"None\";\r\n})(LogLevel || (LogLevel = {}));\r\n//# sourceMappingURL=ILogger.js.map","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"room\"},[_c('b-container',{attrs:{\"fluid\":\"\"}},[_c('div',{staticClass:\"room-container\"},[_c('h3',{staticClass:\"room-name\"},[_vm._v(_vm._s(this.roomId))])]),_c('b-card-group',{staticClass:\"justify-content-center\",class:[\n this.state.halfScreenMode ? 'half-screen-container' : '' ],attrs:{\"deck\":\"\",\"id\":\"videos-container\"}},_vm._l((this.participants),function(ref){\n var k = ref[0];\n var v = ref[1];\nreturn _c('participant-block',{key:k,class:_vm.participants.size <= 2\n ? 'only-local-participant'\n : 'many-participants',attrs:{\"streamEvent\":v,\"state\":_vm.state,\"DetectRTC\":_vm.DetectRTC,\"participants\":_vm.participants,\"connection\":_vm.rtcConnection}})}),1),_c('chat',{style:(this.state.chatOpened ? '' : 'visibility:hidden'),attrs:{\"roomId\":this.rtcConnection.connection.channel,\"state\":this.state}}),_c('control-bar',{attrs:{\"stateService\":this.stateService,\"DetectRTC\":this.DetectRTC,\"streamAddCallback\":this.addParticipantBlock}})],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","// Copyright 2021 Klabukov Erik.\n// SPDX-License-Identifier: GPL-3.0-only\n\n/* eslint-disable */\nvar RTCUtils = {\n // Configure media error event for try use another microfon or if webcam not available, connect without it\n // eslint-disable-next-line\n ConfigureMediaError: function (connection, DetectRTC, deviceSettings, callback = (videoState, audioState) => { }) {\n connection.onMediaError = function (e) {\n var mPeer = connection.multiPeersHandler\n console.error('Media Error', e.message)\n\n //If all media device unvailable or not allowed\n if (e.message === 'Requested device not found' \n || e.message === 'The object can not be found here.'\n || e.message === 'The request is not allowed by the user agent or the platform in the current context.'){\n connection.dontCaptureUserMedia = true\n callback(false, false)\n if(connection.getAllParticipants().length <= 0 )\n connection.join(connection.sessionid)\n else\n connection.renegotiate()\n return\n }\n\n // Fix Mic cuncurrent limit\n if (e.message === 'Concurrent mic process limit.') {\n if (DetectRTC.audioInputDevices.length <= 1) {\n alert(\n 'Please select external microphone. Check github issue number 483.'\n )\n return\n }\n var secondaryMic = DetectRTC.audioInputDevices[1].deviceId\n connection.mediaConstraints.audio = {\n deviceId: secondaryMic\n }\n if(connection.getAllParticipants().length <= 0 )\n connection.join(connection.sessionid)\n else\n connection.renegotiate()\n return\n }\n\n // Case if webcam not available\n callback(false, true)\n connection.dontCaptureUserMedia = true\n var audioDevice = deviceSettings.audioInput ? {deviceId: deviceSettings.audioInput} : true\n navigator.getUserMedia(\n { audio: audioDevice, video: false },\n function (stream) {\n connection.addStream(stream)\n mPeer.onGettingLocalMedia(stream)\n if(connection.getAllParticipants().length <= 0 )\n connection.join(connection.sessionid)\n else\n connection.renegotiate()\n },\n function () { }\n )\n }\n },\n AddBaseStream: function(connection, mediaState, deviceSettings, callback){\n connection.attachStreams.forEach((s) => s.stop());\n connection.attachStreams = []\n var self = this\n if(!mediaState.hasMicrophone && !mediaState.hasWebcam){\n this.CreateFakeStream(connection, connection.multiPeersHandler, callback)\n return\n }\n if(mediaState.hasMicrophone && !mediaState.hasWebcam && connection.dontCaptureUserMedia){\n var audioDevice = deviceSettings.audioInput ? {deviceId: deviceSettings.audioInput} : true\n navigator.getUserMedia(\n { audio: audioDevice, video: false },\n function (stream) {\n self.AddStream(connection, stream, connection.multiPeersHandler, callback)\n },\n function (e) { connection.onMediaError(e) }\n )\n return\n }\n\n navigator.getUserMedia(connection.mediaConstraints,\n function (stream) {\n self.AddStream(connection, stream, connection.multiPeersHandler, callback)\n },\n function (e) { connection.onMediaError(e) }\n )\n },\n AddStream: function(connection, stream, mPeer, callback){\n var self = this;\n connection.attachStreams.forEach(s => s.stop())\n connection.attachStreams = [];\n setTimeout(() =>{\n connection.addStream(stream)\n mPeer.onGettingLocalMedia(stream)\n self.SetHarkHandler(connection, stream)\n var event = this.CreateVideoElementEvent(connection.userid, stream)\n callback(event)\n },300)\n },\n CreateFakeStream: function(connection, mPeer, callback){\n connection.attachStreams = []\n var emptyStream = new MediaStream()\n connection.addStream(emptyStream)\n mPeer.onGettingLocalMedia(emptyStream)\n var event = this.CreateVideoElementEvent(connection.userid, emptyStream)\n callback(event)\n },\n CreateVideoElementEvent: function(userid, stream){\n var video = document.createElement(\"video\");\n video.srcObject = stream;\n video.id = stream.id\n video.autoplay=true\n video.playsinline=true\n video.muted=true\n return {\n userid: userid,\n streamid: stream.id,\n mediaElement: video\n }\n },\n SetHarkHandler: function(connection, stream){\n if (!stream || stream.getAudioTracks().length < 1) return;\n if (!connection.onspeaking || !connection.onsilence) {\n return;\n }\n if (typeof hark === 'undefined') {\n throw 'hark.js not found.';\n }\n\n var speachEvent = {\n userid: connection.userid,\n stream: stream\n }\n var speach = hark(stream, {})\n\n speach.on('speaking', function() {\n connection.onspeaking(speachEvent)\n });\n \n speach.on('stopped_speaking', function() {\n connection.onsilence(speachEvent);\n });\n }\n}\n\nexport default RTCUtils\n","export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}","import _Object$defineProperty from \"@babel/runtime-corejs2/core-js/object/define-property\";\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n\n _Object$defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}","import _Object$defineProperty from \"@babel/runtime-corejs2/core-js/object/define-property\";\nexport default function _defineProperty(obj, key, value) {\n if (key in obj) {\n _Object$defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","// Copyright 2021 Klabukov Erik.\n// SPDX-License-Identifier: GPL-3.0-only\n/* eslint-disable */\nimport RTCUtils from \"@/RTCUtils\";\n\nexport default class RTCStateService {\n rtcConnection = null;\n store = null;\n state = {\n chatOpened: false,\n audioEnabled: true,\n videoEnabled: true,\n screenEnabled: false,\n halfScreenMode: false,\n fullScreenMode: false,\n hasWebcam: true,\n hasMicrophone: true,\n }\n stateCheckTimer = null;\n\n constructor(connection, store) {\n this.rtcConnection = connection;\n this.store = store;\n this.stateCheckTimer = setInterval(this.stateCheck, 1000, this);\n }\n\n renegotiateStreams(){\n this.rtcConnection.connection.renegotiate();\n }\n\n leave(){\n this.rtcConnection.leave();\n }\n\n // Switch mute/unmute audio\n switchAudioMute(state = null) {\n var self = this;\n this.state.audioEnabled = state == null ? !this.state.audioEnabled : state;\n this.rtcConnection.connection.attachStreams.forEach(s => {\n if (self.state.audioEnabled)\n s.unmute(\"audio\");\n else\n s.mute(\"audio\");\n self.rtcConnection.connection.extra.audioMuted = !self.state.audioEnabled;\n self.rtcConnection.connection.updateExtraData();\n })\n }\n\n // Switch mute/unmute video\n switchVideoMute(state = null) {\n var self = this;\n this.state.videoEnabled = state == null ? !this.state.videoEnabled : state;\n this.rtcConnection.connection.attachStreams.forEach(s => {\n if (self.state.videoEnabled)\n s.unmute(\"video\")\n else\n s.mute(\"video\")\n\n self.rtcConnection.connection.extra.videoMuted = !self.state.videoEnabled\n self.rtcConnection.connection.updateExtraData()\n })\n }\n\n // Start screen sharing or stop and back to video + audio or audio only or empty\n screenSharing(callback = e => {}) {\n this.state.screenEnabled = !this.state.screenEnabled;\n this.state.audioEnabled = this.state.hasMicrophone;\n this.state.videoEnabled = this.rtcConnection.dontCaptureUserMedia && !this.state.hasWebcam\n ? false\n : !this.state.screenEnabled;\n var mPeer = this.rtcConnection.connection.multiPeersHandler\n var self = this\n if (this.state.screenEnabled) {\n //Getting screen stream with system audio\n navigator.mediaDevices.getDisplayMedia({ video: true, audio: true })\n .then(function (screenStream) {\n if (!self.state.hasMicrophone) {\n RTCUtils.AddStream(self.rtcConnection.connection, screenStream, mPeer, callback)\n return\n }\n //On succes getting microphone stream, for add to screen stream\n var audioDevice = self.store.state.application.deviceSettings.audioInput ? { deviceId: self.store.state.application.deviceSettings.audioInput } : true\n navigator.getUserMedia(\n { audio: audioDevice, video: false },\n function (microphoneStream) {\n screenStream.addTrack(microphoneStream.getAudioTracks()[0])\n RTCUtils.AddStream(self.rtcConnection.connection, screenStream, mPeer, callback)\n },\n function (e) {\n console.error('screen sharing with mic error', e)\n RTCUtils.AddStream(connection, screenStream, mPeer, callback)\n })\n }, function (e) { console.error('screen sharing', e) });\n return\n }\n this.rtcConnection.connection.attachStreams.forEach(s => s.stop())\n this.rtcConnection.connection.attachStreams = []\n RTCUtils.AddBaseStream(this.rtcConnection.connection, this.state, this.store.state.application.deviceSettings, callback)\n }\n\n stateCheck(self) {\n self.rtcConnection.connection.attachStreams.forEach(s => {\n if(self.state.hasMicrophone)\n s.getAudioTracks().forEach(track =>{\n var enabled = track.enabled;\n if(enabled && !self.state.audioEnabled) s.mute(\"audio\");\n else if (!enabled && self.state.audioEnabled) s.unmute(\"audio\");\n })\n if(!self.state.screenEnabled && self.state.hasWebcam)\n s.getVideoTracks().forEach(track =>{\n var enabled = track.enabled;\n if(enabled && !self.state.videoEnabled) s.mute(\"video\");\n else if (!enabled && self.state.videoEnabled) s.unmute(\"video\");\n })\n });\n }\n}","// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\n/** Error thrown when an HTTP request fails. */\r\nvar HttpError = /** @class */ (function (_super) {\r\n __extends(HttpError, _super);\r\n /** Constructs a new instance of {@link @microsoft/signalr.HttpError}.\r\n *\r\n * @param {string} errorMessage A descriptive error message.\r\n * @param {number} statusCode The HTTP status code represented by this error.\r\n */\r\n function HttpError(errorMessage, statusCode) {\r\n var _newTarget = this.constructor;\r\n var _this = this;\r\n var trueProto = _newTarget.prototype;\r\n _this = _super.call(this, errorMessage) || this;\r\n _this.statusCode = statusCode;\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n _this.__proto__ = trueProto;\r\n return _this;\r\n }\r\n return HttpError;\r\n}(Error));\r\nexport { HttpError };\r\n/** Error thrown when a timeout elapses. */\r\nvar TimeoutError = /** @class */ (function (_super) {\r\n __extends(TimeoutError, _super);\r\n /** Constructs a new instance of {@link @microsoft/signalr.TimeoutError}.\r\n *\r\n * @param {string} errorMessage A descriptive error message.\r\n */\r\n function TimeoutError(errorMessage) {\r\n var _newTarget = this.constructor;\r\n if (errorMessage === void 0) { errorMessage = \"A timeout occurred.\"; }\r\n var _this = this;\r\n var trueProto = _newTarget.prototype;\r\n _this = _super.call(this, errorMessage) || this;\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n _this.__proto__ = trueProto;\r\n return _this;\r\n }\r\n return TimeoutError;\r\n}(Error));\r\nexport { TimeoutError };\r\n/** Error thrown when an action is aborted. */\r\nvar AbortError = /** @class */ (function (_super) {\r\n __extends(AbortError, _super);\r\n /** Constructs a new instance of {@link AbortError}.\r\n *\r\n * @param {string} errorMessage A descriptive error message.\r\n */\r\n function AbortError(errorMessage) {\r\n var _newTarget = this.constructor;\r\n if (errorMessage === void 0) { errorMessage = \"An abort occurred.\"; }\r\n var _this = this;\r\n var trueProto = _newTarget.prototype;\r\n _this = _super.call(this, errorMessage) || this;\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n _this.__proto__ = trueProto;\r\n return _this;\r\n }\r\n return AbortError;\r\n}(Error));\r\nexport { AbortError };\r\n//# sourceMappingURL=Errors.js.map","// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n};\r\n/** Represents an HTTP response. */\r\nvar HttpResponse = /** @class */ (function () {\r\n function HttpResponse(statusCode, statusText, content) {\r\n this.statusCode = statusCode;\r\n this.statusText = statusText;\r\n this.content = content;\r\n }\r\n return HttpResponse;\r\n}());\r\nexport { HttpResponse };\r\n/** Abstraction over an HTTP client.\r\n *\r\n * This class provides an abstraction over an HTTP client so that a different implementation can be provided on different platforms.\r\n */\r\nvar HttpClient = /** @class */ (function () {\r\n function HttpClient() {\r\n }\r\n HttpClient.prototype.get = function (url, options) {\r\n return this.send(__assign({}, options, { method: \"GET\", url: url }));\r\n };\r\n HttpClient.prototype.post = function (url, options) {\r\n return this.send(__assign({}, options, { method: \"POST\", url: url }));\r\n };\r\n HttpClient.prototype.delete = function (url, options) {\r\n return this.send(__assign({}, options, { method: \"DELETE\", url: url }));\r\n };\r\n /** Gets all cookies that apply to the specified URL.\r\n *\r\n * @param url The URL that the cookies are valid for.\r\n * @returns {string} A string containing all the key-value cookie pairs for the specified URL.\r\n */\r\n // @ts-ignore\r\n HttpClient.prototype.getCookieString = function (url) {\r\n return \"\";\r\n };\r\n return HttpClient;\r\n}());\r\nexport { HttpClient };\r\n//# sourceMappingURL=HttpClient.js.map","// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n};\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nimport { AbortError, HttpError, TimeoutError } from \"./Errors\";\r\nimport { HttpClient, HttpResponse } from \"./HttpClient\";\r\nimport { LogLevel } from \"./ILogger\";\r\nimport { Platform } from \"./Utils\";\r\nvar FetchHttpClient = /** @class */ (function (_super) {\r\n __extends(FetchHttpClient, _super);\r\n function FetchHttpClient(logger) {\r\n var _this = _super.call(this) || this;\r\n _this.logger = logger;\r\n if (typeof fetch === \"undefined\") {\r\n // In order to ignore the dynamic require in webpack builds we need to do this magic\r\n // @ts-ignore: TS doesn't know about these names\r\n var requireFunc = typeof __webpack_require__ === \"function\" ? __non_webpack_require__ : require;\r\n // Cookies aren't automatically handled in Node so we need to add a CookieJar to preserve cookies across requests\r\n _this.jar = new (requireFunc(\"tough-cookie\")).CookieJar();\r\n _this.fetchType = requireFunc(\"node-fetch\");\r\n // node-fetch doesn't have a nice API for getting and setting cookies\r\n // fetch-cookie will wrap a fetch implementation with a default CookieJar or a provided one\r\n _this.fetchType = requireFunc(\"fetch-cookie\")(_this.fetchType, _this.jar);\r\n // Node needs EventListener methods on AbortController which our custom polyfill doesn't provide\r\n _this.abortControllerType = requireFunc(\"abort-controller\");\r\n }\r\n else {\r\n _this.fetchType = fetch.bind(self);\r\n _this.abortControllerType = AbortController;\r\n }\r\n return _this;\r\n }\r\n /** @inheritDoc */\r\n FetchHttpClient.prototype.send = function (request) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var abortController, error, timeoutId, msTimeout, response, e_1, content, payload;\r\n var _this = this;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n // Check that abort was not signaled before calling send\r\n if (request.abortSignal && request.abortSignal.aborted) {\r\n throw new AbortError();\r\n }\r\n if (!request.method) {\r\n throw new Error(\"No method defined.\");\r\n }\r\n if (!request.url) {\r\n throw new Error(\"No url defined.\");\r\n }\r\n abortController = new this.abortControllerType();\r\n // Hook our abortSignal into the abort controller\r\n if (request.abortSignal) {\r\n request.abortSignal.onabort = function () {\r\n abortController.abort();\r\n error = new AbortError();\r\n };\r\n }\r\n timeoutId = null;\r\n if (request.timeout) {\r\n msTimeout = request.timeout;\r\n timeoutId = setTimeout(function () {\r\n abortController.abort();\r\n _this.logger.log(LogLevel.Warning, \"Timeout from HTTP request.\");\r\n error = new TimeoutError();\r\n }, msTimeout);\r\n }\r\n _a.label = 1;\r\n case 1:\r\n _a.trys.push([1, 3, 4, 5]);\r\n return [4 /*yield*/, this.fetchType(request.url, {\r\n body: request.content,\r\n cache: \"no-cache\",\r\n credentials: request.withCredentials === true ? \"include\" : \"same-origin\",\r\n headers: __assign({ \"Content-Type\": \"text/plain;charset=UTF-8\", \"X-Requested-With\": \"XMLHttpRequest\" }, request.headers),\r\n method: request.method,\r\n mode: \"cors\",\r\n redirect: \"manual\",\r\n signal: abortController.signal,\r\n })];\r\n case 2:\r\n response = _a.sent();\r\n return [3 /*break*/, 5];\r\n case 3:\r\n e_1 = _a.sent();\r\n if (error) {\r\n throw error;\r\n }\r\n this.logger.log(LogLevel.Warning, \"Error from HTTP request. \" + e_1 + \".\");\r\n throw e_1;\r\n case 4:\r\n if (timeoutId) {\r\n clearTimeout(timeoutId);\r\n }\r\n if (request.abortSignal) {\r\n request.abortSignal.onabort = null;\r\n }\r\n return [7 /*endfinally*/];\r\n case 5:\r\n if (!response.ok) {\r\n throw new HttpError(response.statusText, response.status);\r\n }\r\n content = deserializeContent(response, request.responseType);\r\n return [4 /*yield*/, content];\r\n case 6:\r\n payload = _a.sent();\r\n return [2 /*return*/, new HttpResponse(response.status, response.statusText, payload)];\r\n }\r\n });\r\n });\r\n };\r\n FetchHttpClient.prototype.getCookieString = function (url) {\r\n var cookies = \"\";\r\n if (Platform.isNode && this.jar) {\r\n // @ts-ignore: unused variable\r\n this.jar.getCookies(url, function (e, c) { return cookies = c.join(\"; \"); });\r\n }\r\n return cookies;\r\n };\r\n return FetchHttpClient;\r\n}(HttpClient));\r\nexport { FetchHttpClient };\r\nfunction deserializeContent(response, responseType) {\r\n var content;\r\n switch (responseType) {\r\n case \"arraybuffer\":\r\n content = response.arrayBuffer();\r\n break;\r\n case \"text\":\r\n content = response.text();\r\n break;\r\n case \"blob\":\r\n case \"document\":\r\n case \"json\":\r\n throw new Error(responseType + \" is not supported.\");\r\n default:\r\n content = response.text();\r\n break;\r\n }\r\n return content;\r\n}\r\n//# sourceMappingURL=FetchHttpClient.js.map","// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { AbortError, HttpError, TimeoutError } from \"./Errors\";\r\nimport { HttpClient, HttpResponse } from \"./HttpClient\";\r\nimport { LogLevel } from \"./ILogger\";\r\nvar XhrHttpClient = /** @class */ (function (_super) {\r\n __extends(XhrHttpClient, _super);\r\n function XhrHttpClient(logger) {\r\n var _this = _super.call(this) || this;\r\n _this.logger = logger;\r\n return _this;\r\n }\r\n /** @inheritDoc */\r\n XhrHttpClient.prototype.send = function (request) {\r\n var _this = this;\r\n // Check that abort was not signaled before calling send\r\n if (request.abortSignal && request.abortSignal.aborted) {\r\n return Promise.reject(new AbortError());\r\n }\r\n if (!request.method) {\r\n return Promise.reject(new Error(\"No method defined.\"));\r\n }\r\n if (!request.url) {\r\n return Promise.reject(new Error(\"No url defined.\"));\r\n }\r\n return new Promise(function (resolve, reject) {\r\n var xhr = new XMLHttpRequest();\r\n xhr.open(request.method, request.url, true);\r\n xhr.withCredentials = request.withCredentials === undefined ? true : request.withCredentials;\r\n xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\r\n // Explicitly setting the Content-Type header for React Native on Android platform.\r\n xhr.setRequestHeader(\"Content-Type\", \"text/plain;charset=UTF-8\");\r\n var headers = request.headers;\r\n if (headers) {\r\n Object.keys(headers)\r\n .forEach(function (header) {\r\n xhr.setRequestHeader(header, headers[header]);\r\n });\r\n }\r\n if (request.responseType) {\r\n xhr.responseType = request.responseType;\r\n }\r\n if (request.abortSignal) {\r\n request.abortSignal.onabort = function () {\r\n xhr.abort();\r\n reject(new AbortError());\r\n };\r\n }\r\n if (request.timeout) {\r\n xhr.timeout = request.timeout;\r\n }\r\n xhr.onload = function () {\r\n if (request.abortSignal) {\r\n request.abortSignal.onabort = null;\r\n }\r\n if (xhr.status >= 200 && xhr.status < 300) {\r\n resolve(new HttpResponse(xhr.status, xhr.statusText, xhr.response || xhr.responseText));\r\n }\r\n else {\r\n reject(new HttpError(xhr.statusText, xhr.status));\r\n }\r\n };\r\n xhr.onerror = function () {\r\n _this.logger.log(LogLevel.Warning, \"Error from HTTP request. \" + xhr.status + \": \" + xhr.statusText + \".\");\r\n reject(new HttpError(xhr.statusText, xhr.status));\r\n };\r\n xhr.ontimeout = function () {\r\n _this.logger.log(LogLevel.Warning, \"Timeout from HTTP request.\");\r\n reject(new TimeoutError());\r\n };\r\n xhr.send(request.content || \"\");\r\n });\r\n };\r\n return XhrHttpClient;\r\n}(HttpClient));\r\nexport { XhrHttpClient };\r\n//# sourceMappingURL=XhrHttpClient.js.map","// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\n/** Defines the type of a Hub Message. */\r\nexport var MessageType;\r\n(function (MessageType) {\r\n /** Indicates the message is an Invocation message and implements the {@link @microsoft/signalr.InvocationMessage} interface. */\r\n MessageType[MessageType[\"Invocation\"] = 1] = \"Invocation\";\r\n /** Indicates the message is a StreamItem message and implements the {@link @microsoft/signalr.StreamItemMessage} interface. */\r\n MessageType[MessageType[\"StreamItem\"] = 2] = \"StreamItem\";\r\n /** Indicates the message is a Completion message and implements the {@link @microsoft/signalr.CompletionMessage} interface. */\r\n MessageType[MessageType[\"Completion\"] = 3] = \"Completion\";\r\n /** Indicates the message is a Stream Invocation message and implements the {@link @microsoft/signalr.StreamInvocationMessage} interface. */\r\n MessageType[MessageType[\"StreamInvocation\"] = 4] = \"StreamInvocation\";\r\n /** Indicates the message is a Cancel Invocation message and implements the {@link @microsoft/signalr.CancelInvocationMessage} interface. */\r\n MessageType[MessageType[\"CancelInvocation\"] = 5] = \"CancelInvocation\";\r\n /** Indicates the message is a Ping message and implements the {@link @microsoft/signalr.PingMessage} interface. */\r\n MessageType[MessageType[\"Ping\"] = 6] = \"Ping\";\r\n /** Indicates the message is a Close message and implements the {@link @microsoft/signalr.CloseMessage} interface. */\r\n MessageType[MessageType[\"Close\"] = 7] = \"Close\";\r\n})(MessageType || (MessageType = {}));\r\n//# sourceMappingURL=IHubProtocol.js.map","// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { AbortError } from \"./Errors\";\r\nimport { FetchHttpClient } from \"./FetchHttpClient\";\r\nimport { HttpClient } from \"./HttpClient\";\r\nimport { Platform } from \"./Utils\";\r\nimport { XhrHttpClient } from \"./XhrHttpClient\";\r\n/** Default implementation of {@link @microsoft/signalr.HttpClient}. */\r\nvar DefaultHttpClient = /** @class */ (function (_super) {\r\n __extends(DefaultHttpClient, _super);\r\n /** Creates a new instance of the {@link @microsoft/signalr.DefaultHttpClient}, using the provided {@link @microsoft/signalr.ILogger} to log messages. */\r\n function DefaultHttpClient(logger) {\r\n var _this = _super.call(this) || this;\r\n if (typeof fetch !== \"undefined\" || Platform.isNode) {\r\n _this.httpClient = new FetchHttpClient(logger);\r\n }\r\n else if (typeof XMLHttpRequest !== \"undefined\") {\r\n _this.httpClient = new XhrHttpClient(logger);\r\n }\r\n else {\r\n throw new Error(\"No usable HttpClient found.\");\r\n }\r\n return _this;\r\n }\r\n /** @inheritDoc */\r\n DefaultHttpClient.prototype.send = function (request) {\r\n // Check that abort was not signaled before calling send\r\n if (request.abortSignal && request.abortSignal.aborted) {\r\n return Promise.reject(new AbortError());\r\n }\r\n if (!request.method) {\r\n return Promise.reject(new Error(\"No method defined.\"));\r\n }\r\n if (!request.url) {\r\n return Promise.reject(new Error(\"No url defined.\"));\r\n }\r\n return this.httpClient.send(request);\r\n };\r\n DefaultHttpClient.prototype.getCookieString = function (url) {\r\n return this.httpClient.getCookieString(url);\r\n };\r\n return DefaultHttpClient;\r\n}(HttpClient));\r\nexport { DefaultHttpClient };\r\n//# sourceMappingURL=DefaultHttpClient.js.map","// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\nimport { SubjectSubscription } from \"./Utils\";\r\n/** Stream implementation to stream items to the server. */\r\nvar Subject = /** @class */ (function () {\r\n function Subject() {\r\n this.observers = [];\r\n }\r\n Subject.prototype.next = function (item) {\r\n for (var _i = 0, _a = this.observers; _i < _a.length; _i++) {\r\n var observer = _a[_i];\r\n observer.next(item);\r\n }\r\n };\r\n Subject.prototype.error = function (err) {\r\n for (var _i = 0, _a = this.observers; _i < _a.length; _i++) {\r\n var observer = _a[_i];\r\n if (observer.error) {\r\n observer.error(err);\r\n }\r\n }\r\n };\r\n Subject.prototype.complete = function () {\r\n for (var _i = 0, _a = this.observers; _i < _a.length; _i++) {\r\n var observer = _a[_i];\r\n if (observer.complete) {\r\n observer.complete();\r\n }\r\n }\r\n };\r\n Subject.prototype.subscribe = function (observer) {\r\n this.observers.push(observer);\r\n return new SubjectSubscription(this, observer);\r\n };\r\n return Subject;\r\n}());\r\nexport { Subject };\r\n//# sourceMappingURL=Subject.js.map","// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nimport { HandshakeProtocol } from \"./HandshakeProtocol\";\r\nimport { MessageType } from \"./IHubProtocol\";\r\nimport { LogLevel } from \"./ILogger\";\r\nimport { Subject } from \"./Subject\";\r\nimport { Arg } from \"./Utils\";\r\nvar DEFAULT_TIMEOUT_IN_MS = 30 * 1000;\r\nvar DEFAULT_PING_INTERVAL_IN_MS = 15 * 1000;\r\n/** Describes the current state of the {@link HubConnection} to the server. */\r\nexport var HubConnectionState;\r\n(function (HubConnectionState) {\r\n /** The hub connection is disconnected. */\r\n HubConnectionState[\"Disconnected\"] = \"Disconnected\";\r\n /** The hub connection is connecting. */\r\n HubConnectionState[\"Connecting\"] = \"Connecting\";\r\n /** The hub connection is connected. */\r\n HubConnectionState[\"Connected\"] = \"Connected\";\r\n /** The hub connection is disconnecting. */\r\n HubConnectionState[\"Disconnecting\"] = \"Disconnecting\";\r\n /** The hub connection is reconnecting. */\r\n HubConnectionState[\"Reconnecting\"] = \"Reconnecting\";\r\n})(HubConnectionState || (HubConnectionState = {}));\r\n/** Represents a connection to a SignalR Hub. */\r\nvar HubConnection = /** @class */ (function () {\r\n function HubConnection(connection, logger, protocol, reconnectPolicy) {\r\n var _this = this;\r\n this.nextKeepAlive = 0;\r\n Arg.isRequired(connection, \"connection\");\r\n Arg.isRequired(logger, \"logger\");\r\n Arg.isRequired(protocol, \"protocol\");\r\n this.serverTimeoutInMilliseconds = DEFAULT_TIMEOUT_IN_MS;\r\n this.keepAliveIntervalInMilliseconds = DEFAULT_PING_INTERVAL_IN_MS;\r\n this.logger = logger;\r\n this.protocol = protocol;\r\n this.connection = connection;\r\n this.reconnectPolicy = reconnectPolicy;\r\n this.handshakeProtocol = new HandshakeProtocol();\r\n this.connection.onreceive = function (data) { return _this.processIncomingData(data); };\r\n this.connection.onclose = function (error) { return _this.connectionClosed(error); };\r\n this.callbacks = {};\r\n this.methods = {};\r\n this.closedCallbacks = [];\r\n this.reconnectingCallbacks = [];\r\n this.reconnectedCallbacks = [];\r\n this.invocationId = 0;\r\n this.receivedHandshakeResponse = false;\r\n this.connectionState = HubConnectionState.Disconnected;\r\n this.connectionStarted = false;\r\n this.cachedPingMessage = this.protocol.writeMessage({ type: MessageType.Ping });\r\n }\r\n /** @internal */\r\n // Using a public static factory method means we can have a private constructor and an _internal_\r\n // create method that can be used by HubConnectionBuilder. An \"internal\" constructor would just\r\n // be stripped away and the '.d.ts' file would have no constructor, which is interpreted as a\r\n // public parameter-less constructor.\r\n HubConnection.create = function (connection, logger, protocol, reconnectPolicy) {\r\n return new HubConnection(connection, logger, protocol, reconnectPolicy);\r\n };\r\n Object.defineProperty(HubConnection.prototype, \"state\", {\r\n /** Indicates the state of the {@link HubConnection} to the server. */\r\n get: function () {\r\n return this.connectionState;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(HubConnection.prototype, \"connectionId\", {\r\n /** Represents the connection id of the {@link HubConnection} on the server. The connection id will be null when the connection is either\r\n * in the disconnected state or if the negotiation step was skipped.\r\n */\r\n get: function () {\r\n return this.connection ? (this.connection.connectionId || null) : null;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(HubConnection.prototype, \"baseUrl\", {\r\n /** Indicates the url of the {@link HubConnection} to the server. */\r\n get: function () {\r\n return this.connection.baseUrl || \"\";\r\n },\r\n /**\r\n * Sets a new url for the HubConnection. Note that the url can only be changed when the connection is in either the Disconnected or\r\n * Reconnecting states.\r\n * @param {string} url The url to connect to.\r\n */\r\n set: function (url) {\r\n if (this.connectionState !== HubConnectionState.Disconnected && this.connectionState !== HubConnectionState.Reconnecting) {\r\n throw new Error(\"The HubConnection must be in the Disconnected or Reconnecting state to change the url.\");\r\n }\r\n if (!url) {\r\n throw new Error(\"The HubConnection url must be a valid url.\");\r\n }\r\n this.connection.baseUrl = url;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /** Starts the connection.\r\n *\r\n * @returns {Promise} A Promise that resolves when the connection has been successfully established, or rejects with an error.\r\n */\r\n HubConnection.prototype.start = function () {\r\n this.startPromise = this.startWithStateTransitions();\r\n return this.startPromise;\r\n };\r\n HubConnection.prototype.startWithStateTransitions = function () {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var e_1;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (this.connectionState !== HubConnectionState.Disconnected) {\r\n return [2 /*return*/, Promise.reject(new Error(\"Cannot start a HubConnection that is not in the 'Disconnected' state.\"))];\r\n }\r\n this.connectionState = HubConnectionState.Connecting;\r\n this.logger.log(LogLevel.Debug, \"Starting HubConnection.\");\r\n _a.label = 1;\r\n case 1:\r\n _a.trys.push([1, 3, , 4]);\r\n return [4 /*yield*/, this.startInternal()];\r\n case 2:\r\n _a.sent();\r\n this.connectionState = HubConnectionState.Connected;\r\n this.connectionStarted = true;\r\n this.logger.log(LogLevel.Debug, \"HubConnection connected successfully.\");\r\n return [3 /*break*/, 4];\r\n case 3:\r\n e_1 = _a.sent();\r\n this.connectionState = HubConnectionState.Disconnected;\r\n this.logger.log(LogLevel.Debug, \"HubConnection failed to start successfully because of error '\" + e_1 + \"'.\");\r\n return [2 /*return*/, Promise.reject(e_1)];\r\n case 4: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n HubConnection.prototype.startInternal = function () {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var handshakePromise, handshakeRequest, e_2;\r\n var _this = this;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n this.stopDuringStartError = undefined;\r\n this.receivedHandshakeResponse = false;\r\n handshakePromise = new Promise(function (resolve, reject) {\r\n _this.handshakeResolver = resolve;\r\n _this.handshakeRejecter = reject;\r\n });\r\n return [4 /*yield*/, this.connection.start(this.protocol.transferFormat)];\r\n case 1:\r\n _a.sent();\r\n _a.label = 2;\r\n case 2:\r\n _a.trys.push([2, 5, , 7]);\r\n handshakeRequest = {\r\n protocol: this.protocol.name,\r\n version: this.protocol.version,\r\n };\r\n this.logger.log(LogLevel.Debug, \"Sending handshake request.\");\r\n return [4 /*yield*/, this.sendMessage(this.handshakeProtocol.writeHandshakeRequest(handshakeRequest))];\r\n case 3:\r\n _a.sent();\r\n this.logger.log(LogLevel.Information, \"Using HubProtocol '\" + this.protocol.name + \"'.\");\r\n // defensively cleanup timeout in case we receive a message from the server before we finish start\r\n this.cleanupTimeout();\r\n this.resetTimeoutPeriod();\r\n this.resetKeepAliveInterval();\r\n return [4 /*yield*/, handshakePromise];\r\n case 4:\r\n _a.sent();\r\n // It's important to check the stopDuringStartError instead of just relying on the handshakePromise\r\n // being rejected on close, because this continuation can run after both the handshake completed successfully\r\n // and the connection was closed.\r\n if (this.stopDuringStartError) {\r\n // It's important to throw instead of returning a rejected promise, because we don't want to allow any state\r\n // transitions to occur between now and the calling code observing the exceptions. Returning a rejected promise\r\n // will cause the calling continuation to get scheduled to run later.\r\n throw this.stopDuringStartError;\r\n }\r\n return [3 /*break*/, 7];\r\n case 5:\r\n e_2 = _a.sent();\r\n this.logger.log(LogLevel.Debug, \"Hub handshake failed with error '\" + e_2 + \"' during start(). Stopping HubConnection.\");\r\n this.cleanupTimeout();\r\n this.cleanupPingTimer();\r\n // HttpConnection.stop() should not complete until after the onclose callback is invoked.\r\n // This will transition the HubConnection to the disconnected state before HttpConnection.stop() completes.\r\n return [4 /*yield*/, this.connection.stop(e_2)];\r\n case 6:\r\n // HttpConnection.stop() should not complete until after the onclose callback is invoked.\r\n // This will transition the HubConnection to the disconnected state before HttpConnection.stop() completes.\r\n _a.sent();\r\n throw e_2;\r\n case 7: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n /** Stops the connection.\r\n *\r\n * @returns {Promise} A Promise that resolves when the connection has been successfully terminated, or rejects with an error.\r\n */\r\n HubConnection.prototype.stop = function () {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var startPromise, e_3;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n startPromise = this.startPromise;\r\n this.stopPromise = this.stopInternal();\r\n return [4 /*yield*/, this.stopPromise];\r\n case 1:\r\n _a.sent();\r\n _a.label = 2;\r\n case 2:\r\n _a.trys.push([2, 4, , 5]);\r\n // Awaiting undefined continues immediately\r\n return [4 /*yield*/, startPromise];\r\n case 3:\r\n // Awaiting undefined continues immediately\r\n _a.sent();\r\n return [3 /*break*/, 5];\r\n case 4:\r\n e_3 = _a.sent();\r\n return [3 /*break*/, 5];\r\n case 5: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n HubConnection.prototype.stopInternal = function (error) {\r\n if (this.connectionState === HubConnectionState.Disconnected) {\r\n this.logger.log(LogLevel.Debug, \"Call to HubConnection.stop(\" + error + \") ignored because it is already in the disconnected state.\");\r\n return Promise.resolve();\r\n }\r\n if (this.connectionState === HubConnectionState.Disconnecting) {\r\n this.logger.log(LogLevel.Debug, \"Call to HttpConnection.stop(\" + error + \") ignored because the connection is already in the disconnecting state.\");\r\n return this.stopPromise;\r\n }\r\n this.connectionState = HubConnectionState.Disconnecting;\r\n this.logger.log(LogLevel.Debug, \"Stopping HubConnection.\");\r\n if (this.reconnectDelayHandle) {\r\n // We're in a reconnect delay which means the underlying connection is currently already stopped.\r\n // Just clear the handle to stop the reconnect loop (which no one is waiting on thankfully) and\r\n // fire the onclose callbacks.\r\n this.logger.log(LogLevel.Debug, \"Connection stopped during reconnect delay. Done reconnecting.\");\r\n clearTimeout(this.reconnectDelayHandle);\r\n this.reconnectDelayHandle = undefined;\r\n this.completeClose();\r\n return Promise.resolve();\r\n }\r\n this.cleanupTimeout();\r\n this.cleanupPingTimer();\r\n this.stopDuringStartError = error || new Error(\"The connection was stopped before the hub handshake could complete.\");\r\n // HttpConnection.stop() should not complete until after either HttpConnection.start() fails\r\n // or the onclose callback is invoked. The onclose callback will transition the HubConnection\r\n // to the disconnected state if need be before HttpConnection.stop() completes.\r\n return this.connection.stop(error);\r\n };\r\n /** Invokes a streaming hub method on the server using the specified name and arguments.\r\n *\r\n * @typeparam T The type of the items returned by the server.\r\n * @param {string} methodName The name of the server method to invoke.\r\n * @param {any[]} args The arguments used to invoke the server method.\r\n * @returns {IStreamResult} An object that yields results from the server as they are received.\r\n */\r\n HubConnection.prototype.stream = function (methodName) {\r\n var _this = this;\r\n var args = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n args[_i - 1] = arguments[_i];\r\n }\r\n var _a = this.replaceStreamingParams(args), streams = _a[0], streamIds = _a[1];\r\n var invocationDescriptor = this.createStreamInvocation(methodName, args, streamIds);\r\n var promiseQueue;\r\n var subject = new Subject();\r\n subject.cancelCallback = function () {\r\n var cancelInvocation = _this.createCancelInvocation(invocationDescriptor.invocationId);\r\n delete _this.callbacks[invocationDescriptor.invocationId];\r\n return promiseQueue.then(function () {\r\n return _this.sendWithProtocol(cancelInvocation);\r\n });\r\n };\r\n this.callbacks[invocationDescriptor.invocationId] = function (invocationEvent, error) {\r\n if (error) {\r\n subject.error(error);\r\n return;\r\n }\r\n else if (invocationEvent) {\r\n // invocationEvent will not be null when an error is not passed to the callback\r\n if (invocationEvent.type === MessageType.Completion) {\r\n if (invocationEvent.error) {\r\n subject.error(new Error(invocationEvent.error));\r\n }\r\n else {\r\n subject.complete();\r\n }\r\n }\r\n else {\r\n subject.next((invocationEvent.item));\r\n }\r\n }\r\n };\r\n promiseQueue = this.sendWithProtocol(invocationDescriptor)\r\n .catch(function (e) {\r\n subject.error(e);\r\n delete _this.callbacks[invocationDescriptor.invocationId];\r\n });\r\n this.launchStreams(streams, promiseQueue);\r\n return subject;\r\n };\r\n HubConnection.prototype.sendMessage = function (message) {\r\n this.resetKeepAliveInterval();\r\n return this.connection.send(message);\r\n };\r\n /**\r\n * Sends a js object to the server.\r\n * @param message The js object to serialize and send.\r\n */\r\n HubConnection.prototype.sendWithProtocol = function (message) {\r\n return this.sendMessage(this.protocol.writeMessage(message));\r\n };\r\n /** Invokes a hub method on the server using the specified name and arguments. Does not wait for a response from the receiver.\r\n *\r\n * The Promise returned by this method resolves when the client has sent the invocation to the server. The server may still\r\n * be processing the invocation.\r\n *\r\n * @param {string} methodName The name of the server method to invoke.\r\n * @param {any[]} args The arguments used to invoke the server method.\r\n * @returns {Promise} A Promise that resolves when the invocation has been successfully sent, or rejects with an error.\r\n */\r\n HubConnection.prototype.send = function (methodName) {\r\n var args = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n args[_i - 1] = arguments[_i];\r\n }\r\n var _a = this.replaceStreamingParams(args), streams = _a[0], streamIds = _a[1];\r\n var sendPromise = this.sendWithProtocol(this.createInvocation(methodName, args, true, streamIds));\r\n this.launchStreams(streams, sendPromise);\r\n return sendPromise;\r\n };\r\n /** Invokes a hub method on the server using the specified name and arguments.\r\n *\r\n * The Promise returned by this method resolves when the server indicates it has finished invoking the method. When the promise\r\n * resolves, the server has finished invoking the method. If the server method returns a result, it is produced as the result of\r\n * resolving the Promise.\r\n *\r\n * @typeparam T The expected return type.\r\n * @param {string} methodName The name of the server method to invoke.\r\n * @param {any[]} args The arguments used to invoke the server method.\r\n * @returns {Promise} A Promise that resolves with the result of the server method (if any), or rejects with an error.\r\n */\r\n HubConnection.prototype.invoke = function (methodName) {\r\n var _this = this;\r\n var args = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n args[_i - 1] = arguments[_i];\r\n }\r\n var _a = this.replaceStreamingParams(args), streams = _a[0], streamIds = _a[1];\r\n var invocationDescriptor = this.createInvocation(methodName, args, false, streamIds);\r\n var p = new Promise(function (resolve, reject) {\r\n // invocationId will always have a value for a non-blocking invocation\r\n _this.callbacks[invocationDescriptor.invocationId] = function (invocationEvent, error) {\r\n if (error) {\r\n reject(error);\r\n return;\r\n }\r\n else if (invocationEvent) {\r\n // invocationEvent will not be null when an error is not passed to the callback\r\n if (invocationEvent.type === MessageType.Completion) {\r\n if (invocationEvent.error) {\r\n reject(new Error(invocationEvent.error));\r\n }\r\n else {\r\n resolve(invocationEvent.result);\r\n }\r\n }\r\n else {\r\n reject(new Error(\"Unexpected message type: \" + invocationEvent.type));\r\n }\r\n }\r\n };\r\n var promiseQueue = _this.sendWithProtocol(invocationDescriptor)\r\n .catch(function (e) {\r\n reject(e);\r\n // invocationId will always have a value for a non-blocking invocation\r\n delete _this.callbacks[invocationDescriptor.invocationId];\r\n });\r\n _this.launchStreams(streams, promiseQueue);\r\n });\r\n return p;\r\n };\r\n /** Registers a handler that will be invoked when the hub method with the specified method name is invoked.\r\n *\r\n * @param {string} methodName The name of the hub method to define.\r\n * @param {Function} newMethod The handler that will be raised when the hub method is invoked.\r\n */\r\n HubConnection.prototype.on = function (methodName, newMethod) {\r\n if (!methodName || !newMethod) {\r\n return;\r\n }\r\n methodName = methodName.toLowerCase();\r\n if (!this.methods[methodName]) {\r\n this.methods[methodName] = [];\r\n }\r\n // Preventing adding the same handler multiple times.\r\n if (this.methods[methodName].indexOf(newMethod) !== -1) {\r\n return;\r\n }\r\n this.methods[methodName].push(newMethod);\r\n };\r\n HubConnection.prototype.off = function (methodName, method) {\r\n if (!methodName) {\r\n return;\r\n }\r\n methodName = methodName.toLowerCase();\r\n var handlers = this.methods[methodName];\r\n if (!handlers) {\r\n return;\r\n }\r\n if (method) {\r\n var removeIdx = handlers.indexOf(method);\r\n if (removeIdx !== -1) {\r\n handlers.splice(removeIdx, 1);\r\n if (handlers.length === 0) {\r\n delete this.methods[methodName];\r\n }\r\n }\r\n }\r\n else {\r\n delete this.methods[methodName];\r\n }\r\n };\r\n /** Registers a handler that will be invoked when the connection is closed.\r\n *\r\n * @param {Function} callback The handler that will be invoked when the connection is closed. Optionally receives a single argument containing the error that caused the connection to close (if any).\r\n */\r\n HubConnection.prototype.onclose = function (callback) {\r\n if (callback) {\r\n this.closedCallbacks.push(callback);\r\n }\r\n };\r\n /** Registers a handler that will be invoked when the connection starts reconnecting.\r\n *\r\n * @param {Function} callback The handler that will be invoked when the connection starts reconnecting. Optionally receives a single argument containing the error that caused the connection to start reconnecting (if any).\r\n */\r\n HubConnection.prototype.onreconnecting = function (callback) {\r\n if (callback) {\r\n this.reconnectingCallbacks.push(callback);\r\n }\r\n };\r\n /** Registers a handler that will be invoked when the connection successfully reconnects.\r\n *\r\n * @param {Function} callback The handler that will be invoked when the connection successfully reconnects.\r\n */\r\n HubConnection.prototype.onreconnected = function (callback) {\r\n if (callback) {\r\n this.reconnectedCallbacks.push(callback);\r\n }\r\n };\r\n HubConnection.prototype.processIncomingData = function (data) {\r\n this.cleanupTimeout();\r\n if (!this.receivedHandshakeResponse) {\r\n data = this.processHandshakeResponse(data);\r\n this.receivedHandshakeResponse = true;\r\n }\r\n // Data may have all been read when processing handshake response\r\n if (data) {\r\n // Parse the messages\r\n var messages = this.protocol.parseMessages(data, this.logger);\r\n for (var _i = 0, messages_1 = messages; _i < messages_1.length; _i++) {\r\n var message = messages_1[_i];\r\n switch (message.type) {\r\n case MessageType.Invocation:\r\n this.invokeClientMethod(message);\r\n break;\r\n case MessageType.StreamItem:\r\n case MessageType.Completion:\r\n var callback = this.callbacks[message.invocationId];\r\n if (callback) {\r\n if (message.type === MessageType.Completion) {\r\n delete this.callbacks[message.invocationId];\r\n }\r\n callback(message);\r\n }\r\n break;\r\n case MessageType.Ping:\r\n // Don't care about pings\r\n break;\r\n case MessageType.Close:\r\n this.logger.log(LogLevel.Information, \"Close message received from server.\");\r\n var error = message.error ? new Error(\"Server returned an error on close: \" + message.error) : undefined;\r\n if (message.allowReconnect === true) {\r\n // It feels wrong not to await connection.stop() here, but processIncomingData is called as part of an onreceive callback which is not async,\r\n // this is already the behavior for serverTimeout(), and HttpConnection.Stop() should catch and log all possible exceptions.\r\n // tslint:disable-next-line:no-floating-promises\r\n this.connection.stop(error);\r\n }\r\n else {\r\n // We cannot await stopInternal() here, but subsequent calls to stop() will await this if stopInternal() is still ongoing.\r\n this.stopPromise = this.stopInternal(error);\r\n }\r\n break;\r\n default:\r\n this.logger.log(LogLevel.Warning, \"Invalid message type: \" + message.type + \".\");\r\n break;\r\n }\r\n }\r\n }\r\n this.resetTimeoutPeriod();\r\n };\r\n HubConnection.prototype.processHandshakeResponse = function (data) {\r\n var _a;\r\n var responseMessage;\r\n var remainingData;\r\n try {\r\n _a = this.handshakeProtocol.parseHandshakeResponse(data), remainingData = _a[0], responseMessage = _a[1];\r\n }\r\n catch (e) {\r\n var message = \"Error parsing handshake response: \" + e;\r\n this.logger.log(LogLevel.Error, message);\r\n var error = new Error(message);\r\n this.handshakeRejecter(error);\r\n throw error;\r\n }\r\n if (responseMessage.error) {\r\n var message = \"Server returned handshake error: \" + responseMessage.error;\r\n this.logger.log(LogLevel.Error, message);\r\n var error = new Error(message);\r\n this.handshakeRejecter(error);\r\n throw error;\r\n }\r\n else {\r\n this.logger.log(LogLevel.Debug, \"Server handshake complete.\");\r\n }\r\n this.handshakeResolver();\r\n return remainingData;\r\n };\r\n HubConnection.prototype.resetKeepAliveInterval = function () {\r\n if (this.connection.features.inherentKeepAlive) {\r\n return;\r\n }\r\n // Set the time we want the next keep alive to be sent\r\n // Timer will be setup on next message receive\r\n this.nextKeepAlive = new Date().getTime() + this.keepAliveIntervalInMilliseconds;\r\n this.cleanupPingTimer();\r\n };\r\n HubConnection.prototype.resetTimeoutPeriod = function () {\r\n var _this = this;\r\n if (!this.connection.features || !this.connection.features.inherentKeepAlive) {\r\n // Set the timeout timer\r\n this.timeoutHandle = setTimeout(function () { return _this.serverTimeout(); }, this.serverTimeoutInMilliseconds);\r\n // Set keepAlive timer if there isn't one\r\n if (this.pingServerHandle === undefined) {\r\n var nextPing = this.nextKeepAlive - new Date().getTime();\r\n if (nextPing < 0) {\r\n nextPing = 0;\r\n }\r\n // The timer needs to be set from a networking callback to avoid Chrome timer throttling from causing timers to run once a minute\r\n this.pingServerHandle = setTimeout(function () { return __awaiter(_this, void 0, void 0, function () {\r\n var _a;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n if (!(this.connectionState === HubConnectionState.Connected)) return [3 /*break*/, 4];\r\n _b.label = 1;\r\n case 1:\r\n _b.trys.push([1, 3, , 4]);\r\n return [4 /*yield*/, this.sendMessage(this.cachedPingMessage)];\r\n case 2:\r\n _b.sent();\r\n return [3 /*break*/, 4];\r\n case 3:\r\n _a = _b.sent();\r\n // We don't care about the error. It should be seen elsewhere in the client.\r\n // The connection is probably in a bad or closed state now, cleanup the timer so it stops triggering\r\n this.cleanupPingTimer();\r\n return [3 /*break*/, 4];\r\n case 4: return [2 /*return*/];\r\n }\r\n });\r\n }); }, nextPing);\r\n }\r\n }\r\n };\r\n HubConnection.prototype.serverTimeout = function () {\r\n // The server hasn't talked to us in a while. It doesn't like us anymore ... :(\r\n // Terminate the connection, but we don't need to wait on the promise. This could trigger reconnecting.\r\n // tslint:disable-next-line:no-floating-promises\r\n this.connection.stop(new Error(\"Server timeout elapsed without receiving a message from the server.\"));\r\n };\r\n HubConnection.prototype.invokeClientMethod = function (invocationMessage) {\r\n var _this = this;\r\n var methods = this.methods[invocationMessage.target.toLowerCase()];\r\n if (methods) {\r\n try {\r\n methods.forEach(function (m) { return m.apply(_this, invocationMessage.arguments); });\r\n }\r\n catch (e) {\r\n this.logger.log(LogLevel.Error, \"A callback for the method \" + invocationMessage.target.toLowerCase() + \" threw error '\" + e + \"'.\");\r\n }\r\n if (invocationMessage.invocationId) {\r\n // This is not supported in v1. So we return an error to avoid blocking the server waiting for the response.\r\n var message = \"Server requested a response, which is not supported in this version of the client.\";\r\n this.logger.log(LogLevel.Error, message);\r\n // We don't want to wait on the stop itself.\r\n this.stopPromise = this.stopInternal(new Error(message));\r\n }\r\n }\r\n else {\r\n this.logger.log(LogLevel.Warning, \"No client method with the name '\" + invocationMessage.target + \"' found.\");\r\n }\r\n };\r\n HubConnection.prototype.connectionClosed = function (error) {\r\n this.logger.log(LogLevel.Debug, \"HubConnection.connectionClosed(\" + error + \") called while in state \" + this.connectionState + \".\");\r\n // Triggering this.handshakeRejecter is insufficient because it could already be resolved without the continuation having run yet.\r\n this.stopDuringStartError = this.stopDuringStartError || error || new Error(\"The underlying connection was closed before the hub handshake could complete.\");\r\n // If the handshake is in progress, start will be waiting for the handshake promise, so we complete it.\r\n // If it has already completed, this should just noop.\r\n if (this.handshakeResolver) {\r\n this.handshakeResolver();\r\n }\r\n this.cancelCallbacksWithError(error || new Error(\"Invocation canceled due to the underlying connection being closed.\"));\r\n this.cleanupTimeout();\r\n this.cleanupPingTimer();\r\n if (this.connectionState === HubConnectionState.Disconnecting) {\r\n this.completeClose(error);\r\n }\r\n else if (this.connectionState === HubConnectionState.Connected && this.reconnectPolicy) {\r\n // tslint:disable-next-line:no-floating-promises\r\n this.reconnect(error);\r\n }\r\n else if (this.connectionState === HubConnectionState.Connected) {\r\n this.completeClose(error);\r\n }\r\n // If none of the above if conditions were true were called the HubConnection must be in either:\r\n // 1. The Connecting state in which case the handshakeResolver will complete it and stopDuringStartError will fail it.\r\n // 2. The Reconnecting state in which case the handshakeResolver will complete it and stopDuringStartError will fail the current reconnect attempt\r\n // and potentially continue the reconnect() loop.\r\n // 3. The Disconnected state in which case we're already done.\r\n };\r\n HubConnection.prototype.completeClose = function (error) {\r\n var _this = this;\r\n if (this.connectionStarted) {\r\n this.connectionState = HubConnectionState.Disconnected;\r\n this.connectionStarted = false;\r\n try {\r\n this.closedCallbacks.forEach(function (c) { return c.apply(_this, [error]); });\r\n }\r\n catch (e) {\r\n this.logger.log(LogLevel.Error, \"An onclose callback called with error '\" + error + \"' threw error '\" + e + \"'.\");\r\n }\r\n }\r\n };\r\n HubConnection.prototype.reconnect = function (error) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var reconnectStartTime, previousReconnectAttempts, retryError, nextRetryDelay, e_4;\r\n var _this = this;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n reconnectStartTime = Date.now();\r\n previousReconnectAttempts = 0;\r\n retryError = error !== undefined ? error : new Error(\"Attempting to reconnect due to a unknown error.\");\r\n nextRetryDelay = this.getNextRetryDelay(previousReconnectAttempts++, 0, retryError);\r\n if (nextRetryDelay === null) {\r\n this.logger.log(LogLevel.Debug, \"Connection not reconnecting because the IRetryPolicy returned null on the first reconnect attempt.\");\r\n this.completeClose(error);\r\n return [2 /*return*/];\r\n }\r\n this.connectionState = HubConnectionState.Reconnecting;\r\n if (error) {\r\n this.logger.log(LogLevel.Information, \"Connection reconnecting because of error '\" + error + \"'.\");\r\n }\r\n else {\r\n this.logger.log(LogLevel.Information, \"Connection reconnecting.\");\r\n }\r\n if (this.onreconnecting) {\r\n try {\r\n this.reconnectingCallbacks.forEach(function (c) { return c.apply(_this, [error]); });\r\n }\r\n catch (e) {\r\n this.logger.log(LogLevel.Error, \"An onreconnecting callback called with error '\" + error + \"' threw error '\" + e + \"'.\");\r\n }\r\n // Exit early if an onreconnecting callback called connection.stop().\r\n if (this.connectionState !== HubConnectionState.Reconnecting) {\r\n this.logger.log(LogLevel.Debug, \"Connection left the reconnecting state in onreconnecting callback. Done reconnecting.\");\r\n return [2 /*return*/];\r\n }\r\n }\r\n _a.label = 1;\r\n case 1:\r\n if (!(nextRetryDelay !== null)) return [3 /*break*/, 7];\r\n this.logger.log(LogLevel.Information, \"Reconnect attempt number \" + previousReconnectAttempts + \" will start in \" + nextRetryDelay + \" ms.\");\r\n return [4 /*yield*/, new Promise(function (resolve) {\r\n _this.reconnectDelayHandle = setTimeout(resolve, nextRetryDelay);\r\n })];\r\n case 2:\r\n _a.sent();\r\n this.reconnectDelayHandle = undefined;\r\n if (this.connectionState !== HubConnectionState.Reconnecting) {\r\n this.logger.log(LogLevel.Debug, \"Connection left the reconnecting state during reconnect delay. Done reconnecting.\");\r\n return [2 /*return*/];\r\n }\r\n _a.label = 3;\r\n case 3:\r\n _a.trys.push([3, 5, , 6]);\r\n return [4 /*yield*/, this.startInternal()];\r\n case 4:\r\n _a.sent();\r\n this.connectionState = HubConnectionState.Connected;\r\n this.logger.log(LogLevel.Information, \"HubConnection reconnected successfully.\");\r\n if (this.onreconnected) {\r\n try {\r\n this.reconnectedCallbacks.forEach(function (c) { return c.apply(_this, [_this.connection.connectionId]); });\r\n }\r\n catch (e) {\r\n this.logger.log(LogLevel.Error, \"An onreconnected callback called with connectionId '\" + this.connection.connectionId + \"; threw error '\" + e + \"'.\");\r\n }\r\n }\r\n return [2 /*return*/];\r\n case 5:\r\n e_4 = _a.sent();\r\n this.logger.log(LogLevel.Information, \"Reconnect attempt failed because of error '\" + e_4 + \"'.\");\r\n if (this.connectionState !== HubConnectionState.Reconnecting) {\r\n this.logger.log(LogLevel.Debug, \"Connection moved to the '\" + this.connectionState + \"' from the reconnecting state during reconnect attempt. Done reconnecting.\");\r\n // The TypeScript compiler thinks that connectionState must be Connected here. The TypeScript compiler is wrong.\r\n if (this.connectionState === HubConnectionState.Disconnecting) {\r\n this.completeClose();\r\n }\r\n return [2 /*return*/];\r\n }\r\n retryError = e_4 instanceof Error ? e_4 : new Error(e_4.toString());\r\n nextRetryDelay = this.getNextRetryDelay(previousReconnectAttempts++, Date.now() - reconnectStartTime, retryError);\r\n return [3 /*break*/, 6];\r\n case 6: return [3 /*break*/, 1];\r\n case 7:\r\n this.logger.log(LogLevel.Information, \"Reconnect retries have been exhausted after \" + (Date.now() - reconnectStartTime) + \" ms and \" + previousReconnectAttempts + \" failed attempts. Connection disconnecting.\");\r\n this.completeClose();\r\n return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n HubConnection.prototype.getNextRetryDelay = function (previousRetryCount, elapsedMilliseconds, retryReason) {\r\n try {\r\n return this.reconnectPolicy.nextRetryDelayInMilliseconds({\r\n elapsedMilliseconds: elapsedMilliseconds,\r\n previousRetryCount: previousRetryCount,\r\n retryReason: retryReason,\r\n });\r\n }\r\n catch (e) {\r\n this.logger.log(LogLevel.Error, \"IRetryPolicy.nextRetryDelayInMilliseconds(\" + previousRetryCount + \", \" + elapsedMilliseconds + \") threw error '\" + e + \"'.\");\r\n return null;\r\n }\r\n };\r\n HubConnection.prototype.cancelCallbacksWithError = function (error) {\r\n var callbacks = this.callbacks;\r\n this.callbacks = {};\r\n Object.keys(callbacks)\r\n .forEach(function (key) {\r\n var callback = callbacks[key];\r\n callback(null, error);\r\n });\r\n };\r\n HubConnection.prototype.cleanupPingTimer = function () {\r\n if (this.pingServerHandle) {\r\n clearTimeout(this.pingServerHandle);\r\n this.pingServerHandle = undefined;\r\n }\r\n };\r\n HubConnection.prototype.cleanupTimeout = function () {\r\n if (this.timeoutHandle) {\r\n clearTimeout(this.timeoutHandle);\r\n }\r\n };\r\n HubConnection.prototype.createInvocation = function (methodName, args, nonblocking, streamIds) {\r\n if (nonblocking) {\r\n if (streamIds.length !== 0) {\r\n return {\r\n arguments: args,\r\n streamIds: streamIds,\r\n target: methodName,\r\n type: MessageType.Invocation,\r\n };\r\n }\r\n else {\r\n return {\r\n arguments: args,\r\n target: methodName,\r\n type: MessageType.Invocation,\r\n };\r\n }\r\n }\r\n else {\r\n var invocationId = this.invocationId;\r\n this.invocationId++;\r\n if (streamIds.length !== 0) {\r\n return {\r\n arguments: args,\r\n invocationId: invocationId.toString(),\r\n streamIds: streamIds,\r\n target: methodName,\r\n type: MessageType.Invocation,\r\n };\r\n }\r\n else {\r\n return {\r\n arguments: args,\r\n invocationId: invocationId.toString(),\r\n target: methodName,\r\n type: MessageType.Invocation,\r\n };\r\n }\r\n }\r\n };\r\n HubConnection.prototype.launchStreams = function (streams, promiseQueue) {\r\n var _this = this;\r\n if (streams.length === 0) {\r\n return;\r\n }\r\n // Synchronize stream data so they arrive in-order on the server\r\n if (!promiseQueue) {\r\n promiseQueue = Promise.resolve();\r\n }\r\n var _loop_1 = function (streamId) {\r\n streams[streamId].subscribe({\r\n complete: function () {\r\n promiseQueue = promiseQueue.then(function () { return _this.sendWithProtocol(_this.createCompletionMessage(streamId)); });\r\n },\r\n error: function (err) {\r\n var message;\r\n if (err instanceof Error) {\r\n message = err.message;\r\n }\r\n else if (err && err.toString) {\r\n message = err.toString();\r\n }\r\n else {\r\n message = \"Unknown error\";\r\n }\r\n promiseQueue = promiseQueue.then(function () { return _this.sendWithProtocol(_this.createCompletionMessage(streamId, message)); });\r\n },\r\n next: function (item) {\r\n promiseQueue = promiseQueue.then(function () { return _this.sendWithProtocol(_this.createStreamItemMessage(streamId, item)); });\r\n },\r\n });\r\n };\r\n // We want to iterate over the keys, since the keys are the stream ids\r\n // tslint:disable-next-line:forin\r\n for (var streamId in streams) {\r\n _loop_1(streamId);\r\n }\r\n };\r\n HubConnection.prototype.replaceStreamingParams = function (args) {\r\n var streams = [];\r\n var streamIds = [];\r\n for (var i = 0; i < args.length; i++) {\r\n var argument = args[i];\r\n if (this.isObservable(argument)) {\r\n var streamId = this.invocationId;\r\n this.invocationId++;\r\n // Store the stream for later use\r\n streams[streamId] = argument;\r\n streamIds.push(streamId.toString());\r\n // remove stream from args\r\n args.splice(i, 1);\r\n }\r\n }\r\n return [streams, streamIds];\r\n };\r\n HubConnection.prototype.isObservable = function (arg) {\r\n // This allows other stream implementations to just work (like rxjs)\r\n return arg && arg.subscribe && typeof arg.subscribe === \"function\";\r\n };\r\n HubConnection.prototype.createStreamInvocation = function (methodName, args, streamIds) {\r\n var invocationId = this.invocationId;\r\n this.invocationId++;\r\n if (streamIds.length !== 0) {\r\n return {\r\n arguments: args,\r\n invocationId: invocationId.toString(),\r\n streamIds: streamIds,\r\n target: methodName,\r\n type: MessageType.StreamInvocation,\r\n };\r\n }\r\n else {\r\n return {\r\n arguments: args,\r\n invocationId: invocationId.toString(),\r\n target: methodName,\r\n type: MessageType.StreamInvocation,\r\n };\r\n }\r\n };\r\n HubConnection.prototype.createCancelInvocation = function (id) {\r\n return {\r\n invocationId: id,\r\n type: MessageType.CancelInvocation,\r\n };\r\n };\r\n HubConnection.prototype.createStreamItemMessage = function (id, item) {\r\n return {\r\n invocationId: id,\r\n item: item,\r\n type: MessageType.StreamItem,\r\n };\r\n };\r\n HubConnection.prototype.createCompletionMessage = function (id, error, result) {\r\n if (error) {\r\n return {\r\n error: error,\r\n invocationId: id,\r\n type: MessageType.Completion,\r\n };\r\n }\r\n return {\r\n invocationId: id,\r\n result: result,\r\n type: MessageType.Completion,\r\n };\r\n };\r\n return HubConnection;\r\n}());\r\nexport { HubConnection };\r\n//# sourceMappingURL=HubConnection.js.map","// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\n// This will be treated as a bit flag in the future, so we keep it using power-of-two values.\r\n/** Specifies a specific HTTP transport type. */\r\nexport var HttpTransportType;\r\n(function (HttpTransportType) {\r\n /** Specifies no transport preference. */\r\n HttpTransportType[HttpTransportType[\"None\"] = 0] = \"None\";\r\n /** Specifies the WebSockets transport. */\r\n HttpTransportType[HttpTransportType[\"WebSockets\"] = 1] = \"WebSockets\";\r\n /** Specifies the Server-Sent Events transport. */\r\n HttpTransportType[HttpTransportType[\"ServerSentEvents\"] = 2] = \"ServerSentEvents\";\r\n /** Specifies the Long Polling transport. */\r\n HttpTransportType[HttpTransportType[\"LongPolling\"] = 4] = \"LongPolling\";\r\n})(HttpTransportType || (HttpTransportType = {}));\r\n/** Specifies the transfer format for a connection. */\r\nexport var TransferFormat;\r\n(function (TransferFormat) {\r\n /** Specifies that only text data will be transmitted over the connection. */\r\n TransferFormat[TransferFormat[\"Text\"] = 1] = \"Text\";\r\n /** Specifies that binary data will be transmitted over the connection. */\r\n TransferFormat[TransferFormat[\"Binary\"] = 2] = \"Binary\";\r\n})(TransferFormat || (TransferFormat = {}));\r\n//# sourceMappingURL=ITransport.js.map","// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\n// 0, 2, 10, 30 second delays before reconnect attempts.\r\nvar DEFAULT_RETRY_DELAYS_IN_MILLISECONDS = [0, 2000, 10000, 30000, null];\r\n/** @private */\r\nvar DefaultReconnectPolicy = /** @class */ (function () {\r\n function DefaultReconnectPolicy(retryDelays) {\r\n this.retryDelays = retryDelays !== undefined ? retryDelays.concat([null]) : DEFAULT_RETRY_DELAYS_IN_MILLISECONDS;\r\n }\r\n DefaultReconnectPolicy.prototype.nextRetryDelayInMilliseconds = function (retryContext) {\r\n return this.retryDelays[retryContext.previousRetryCount];\r\n };\r\n return DefaultReconnectPolicy;\r\n}());\r\nexport { DefaultReconnectPolicy };\r\n//# sourceMappingURL=DefaultReconnectPolicy.js.map","// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\n// Rough polyfill of https://developer.mozilla.org/en-US/docs/Web/API/AbortController\r\n// We don't actually ever use the API being polyfilled, we always use the polyfill because\r\n// it's a very new API right now.\r\n// Not exported from index.\r\n/** @private */\r\nvar AbortController = /** @class */ (function () {\r\n function AbortController() {\r\n this.isAborted = false;\r\n this.onabort = null;\r\n }\r\n AbortController.prototype.abort = function () {\r\n if (!this.isAborted) {\r\n this.isAborted = true;\r\n if (this.onabort) {\r\n this.onabort();\r\n }\r\n }\r\n };\r\n Object.defineProperty(AbortController.prototype, \"signal\", {\r\n get: function () {\r\n return this;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AbortController.prototype, \"aborted\", {\r\n get: function () {\r\n return this.isAborted;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return AbortController;\r\n}());\r\nexport { AbortController };\r\n//# sourceMappingURL=AbortController.js.map","// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n};\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nimport { AbortController } from \"./AbortController\";\r\nimport { HttpError, TimeoutError } from \"./Errors\";\r\nimport { LogLevel } from \"./ILogger\";\r\nimport { TransferFormat } from \"./ITransport\";\r\nimport { Arg, getDataDetail, getUserAgentHeader, sendMessage } from \"./Utils\";\r\n// Not exported from 'index', this type is internal.\r\n/** @private */\r\nvar LongPollingTransport = /** @class */ (function () {\r\n function LongPollingTransport(httpClient, accessTokenFactory, logger, logMessageContent, withCredentials, headers) {\r\n this.httpClient = httpClient;\r\n this.accessTokenFactory = accessTokenFactory;\r\n this.logger = logger;\r\n this.pollAbort = new AbortController();\r\n this.logMessageContent = logMessageContent;\r\n this.withCredentials = withCredentials;\r\n this.headers = headers;\r\n this.running = false;\r\n this.onreceive = null;\r\n this.onclose = null;\r\n }\r\n Object.defineProperty(LongPollingTransport.prototype, \"pollAborted\", {\r\n // This is an internal type, not exported from 'index' so this is really just internal.\r\n get: function () {\r\n return this.pollAbort.aborted;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n LongPollingTransport.prototype.connect = function (url, transferFormat) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var _a, _b, name, value, headers, pollOptions, token, pollUrl, response;\r\n return __generator(this, function (_c) {\r\n switch (_c.label) {\r\n case 0:\r\n Arg.isRequired(url, \"url\");\r\n Arg.isRequired(transferFormat, \"transferFormat\");\r\n Arg.isIn(transferFormat, TransferFormat, \"transferFormat\");\r\n this.url = url;\r\n this.logger.log(LogLevel.Trace, \"(LongPolling transport) Connecting.\");\r\n // Allow binary format on Node and Browsers that support binary content (indicated by the presence of responseType property)\r\n if (transferFormat === TransferFormat.Binary &&\r\n (typeof XMLHttpRequest !== \"undefined\" && typeof new XMLHttpRequest().responseType !== \"string\")) {\r\n throw new Error(\"Binary protocols over XmlHttpRequest not implementing advanced features are not supported.\");\r\n }\r\n _b = getUserAgentHeader(), name = _b[0], value = _b[1];\r\n headers = __assign((_a = {}, _a[name] = value, _a), this.headers);\r\n pollOptions = {\r\n abortSignal: this.pollAbort.signal,\r\n headers: headers,\r\n timeout: 100000,\r\n withCredentials: this.withCredentials,\r\n };\r\n if (transferFormat === TransferFormat.Binary) {\r\n pollOptions.responseType = \"arraybuffer\";\r\n }\r\n return [4 /*yield*/, this.getAccessToken()];\r\n case 1:\r\n token = _c.sent();\r\n this.updateHeaderToken(pollOptions, token);\r\n pollUrl = url + \"&_=\" + Date.now();\r\n this.logger.log(LogLevel.Trace, \"(LongPolling transport) polling: \" + pollUrl + \".\");\r\n return [4 /*yield*/, this.httpClient.get(pollUrl, pollOptions)];\r\n case 2:\r\n response = _c.sent();\r\n if (response.statusCode !== 200) {\r\n this.logger.log(LogLevel.Error, \"(LongPolling transport) Unexpected response code: \" + response.statusCode + \".\");\r\n // Mark running as false so that the poll immediately ends and runs the close logic\r\n this.closeError = new HttpError(response.statusText || \"\", response.statusCode);\r\n this.running = false;\r\n }\r\n else {\r\n this.running = true;\r\n }\r\n this.receiving = this.poll(this.url, pollOptions);\r\n return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n LongPollingTransport.prototype.getAccessToken = function () {\r\n return __awaiter(this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (!this.accessTokenFactory) return [3 /*break*/, 2];\r\n return [4 /*yield*/, this.accessTokenFactory()];\r\n case 1: return [2 /*return*/, _a.sent()];\r\n case 2: return [2 /*return*/, null];\r\n }\r\n });\r\n });\r\n };\r\n LongPollingTransport.prototype.updateHeaderToken = function (request, token) {\r\n if (!request.headers) {\r\n request.headers = {};\r\n }\r\n if (token) {\r\n // tslint:disable-next-line:no-string-literal\r\n request.headers[\"Authorization\"] = \"Bearer \" + token;\r\n return;\r\n }\r\n // tslint:disable-next-line:no-string-literal\r\n if (request.headers[\"Authorization\"]) {\r\n // tslint:disable-next-line:no-string-literal\r\n delete request.headers[\"Authorization\"];\r\n }\r\n };\r\n LongPollingTransport.prototype.poll = function (url, pollOptions) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var token, pollUrl, response, e_1;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n _a.trys.push([0, , 8, 9]);\r\n _a.label = 1;\r\n case 1:\r\n if (!this.running) return [3 /*break*/, 7];\r\n return [4 /*yield*/, this.getAccessToken()];\r\n case 2:\r\n token = _a.sent();\r\n this.updateHeaderToken(pollOptions, token);\r\n _a.label = 3;\r\n case 3:\r\n _a.trys.push([3, 5, , 6]);\r\n pollUrl = url + \"&_=\" + Date.now();\r\n this.logger.log(LogLevel.Trace, \"(LongPolling transport) polling: \" + pollUrl + \".\");\r\n return [4 /*yield*/, this.httpClient.get(pollUrl, pollOptions)];\r\n case 4:\r\n response = _a.sent();\r\n if (response.statusCode === 204) {\r\n this.logger.log(LogLevel.Information, \"(LongPolling transport) Poll terminated by server.\");\r\n this.running = false;\r\n }\r\n else if (response.statusCode !== 200) {\r\n this.logger.log(LogLevel.Error, \"(LongPolling transport) Unexpected response code: \" + response.statusCode + \".\");\r\n // Unexpected status code\r\n this.closeError = new HttpError(response.statusText || \"\", response.statusCode);\r\n this.running = false;\r\n }\r\n else {\r\n // Process the response\r\n if (response.content) {\r\n this.logger.log(LogLevel.Trace, \"(LongPolling transport) data received. \" + getDataDetail(response.content, this.logMessageContent) + \".\");\r\n if (this.onreceive) {\r\n this.onreceive(response.content);\r\n }\r\n }\r\n else {\r\n // This is another way timeout manifest.\r\n this.logger.log(LogLevel.Trace, \"(LongPolling transport) Poll timed out, reissuing.\");\r\n }\r\n }\r\n return [3 /*break*/, 6];\r\n case 5:\r\n e_1 = _a.sent();\r\n if (!this.running) {\r\n // Log but disregard errors that occur after stopping\r\n this.logger.log(LogLevel.Trace, \"(LongPolling transport) Poll errored after shutdown: \" + e_1.message);\r\n }\r\n else {\r\n if (e_1 instanceof TimeoutError) {\r\n // Ignore timeouts and reissue the poll.\r\n this.logger.log(LogLevel.Trace, \"(LongPolling transport) Poll timed out, reissuing.\");\r\n }\r\n else {\r\n // Close the connection with the error as the result.\r\n this.closeError = e_1;\r\n this.running = false;\r\n }\r\n }\r\n return [3 /*break*/, 6];\r\n case 6: return [3 /*break*/, 1];\r\n case 7: return [3 /*break*/, 9];\r\n case 8:\r\n this.logger.log(LogLevel.Trace, \"(LongPolling transport) Polling complete.\");\r\n // We will reach here with pollAborted==false when the server returned a response causing the transport to stop.\r\n // If pollAborted==true then client initiated the stop and the stop method will raise the close event after DELETE is sent.\r\n if (!this.pollAborted) {\r\n this.raiseOnClose();\r\n }\r\n return [7 /*endfinally*/];\r\n case 9: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n LongPollingTransport.prototype.send = function (data) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n if (!this.running) {\r\n return [2 /*return*/, Promise.reject(new Error(\"Cannot send until the transport is connected\"))];\r\n }\r\n return [2 /*return*/, sendMessage(this.logger, \"LongPolling\", this.httpClient, this.url, this.accessTokenFactory, data, this.logMessageContent, this.withCredentials, this.headers)];\r\n });\r\n });\r\n };\r\n LongPollingTransport.prototype.stop = function () {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var headers, _a, name_1, value, deleteOptions, token;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n this.logger.log(LogLevel.Trace, \"(LongPolling transport) Stopping polling.\");\r\n // Tell receiving loop to stop, abort any current request, and then wait for it to finish\r\n this.running = false;\r\n this.pollAbort.abort();\r\n _b.label = 1;\r\n case 1:\r\n _b.trys.push([1, , 5, 6]);\r\n return [4 /*yield*/, this.receiving];\r\n case 2:\r\n _b.sent();\r\n // Send DELETE to clean up long polling on the server\r\n this.logger.log(LogLevel.Trace, \"(LongPolling transport) sending DELETE request to \" + this.url + \".\");\r\n headers = {};\r\n _a = getUserAgentHeader(), name_1 = _a[0], value = _a[1];\r\n headers[name_1] = value;\r\n deleteOptions = {\r\n headers: __assign({}, headers, this.headers),\r\n withCredentials: this.withCredentials,\r\n };\r\n return [4 /*yield*/, this.getAccessToken()];\r\n case 3:\r\n token = _b.sent();\r\n this.updateHeaderToken(deleteOptions, token);\r\n return [4 /*yield*/, this.httpClient.delete(this.url, deleteOptions)];\r\n case 4:\r\n _b.sent();\r\n this.logger.log(LogLevel.Trace, \"(LongPolling transport) DELETE request sent.\");\r\n return [3 /*break*/, 6];\r\n case 5:\r\n this.logger.log(LogLevel.Trace, \"(LongPolling transport) Stop finished.\");\r\n // Raise close event here instead of in polling\r\n // It needs to happen after the DELETE request is sent\r\n this.raiseOnClose();\r\n return [7 /*endfinally*/];\r\n case 6: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n LongPollingTransport.prototype.raiseOnClose = function () {\r\n if (this.onclose) {\r\n var logMessage = \"(LongPolling transport) Firing onclose event.\";\r\n if (this.closeError) {\r\n logMessage += \" Error: \" + this.closeError;\r\n }\r\n this.logger.log(LogLevel.Trace, logMessage);\r\n this.onclose(this.closeError);\r\n }\r\n };\r\n return LongPollingTransport;\r\n}());\r\nexport { LongPollingTransport };\r\n//# sourceMappingURL=LongPollingTransport.js.map","// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n};\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nimport { LogLevel } from \"./ILogger\";\r\nimport { TransferFormat } from \"./ITransport\";\r\nimport { Arg, getDataDetail, getUserAgentHeader, Platform, sendMessage } from \"./Utils\";\r\n/** @private */\r\nvar ServerSentEventsTransport = /** @class */ (function () {\r\n function ServerSentEventsTransport(httpClient, accessTokenFactory, logger, logMessageContent, eventSourceConstructor, withCredentials, headers) {\r\n this.httpClient = httpClient;\r\n this.accessTokenFactory = accessTokenFactory;\r\n this.logger = logger;\r\n this.logMessageContent = logMessageContent;\r\n this.withCredentials = withCredentials;\r\n this.eventSourceConstructor = eventSourceConstructor;\r\n this.headers = headers;\r\n this.onreceive = null;\r\n this.onclose = null;\r\n }\r\n ServerSentEventsTransport.prototype.connect = function (url, transferFormat) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var token;\r\n var _this = this;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n Arg.isRequired(url, \"url\");\r\n Arg.isRequired(transferFormat, \"transferFormat\");\r\n Arg.isIn(transferFormat, TransferFormat, \"transferFormat\");\r\n this.logger.log(LogLevel.Trace, \"(SSE transport) Connecting.\");\r\n // set url before accessTokenFactory because this.url is only for send and we set the auth header instead of the query string for send\r\n this.url = url;\r\n if (!this.accessTokenFactory) return [3 /*break*/, 2];\r\n return [4 /*yield*/, this.accessTokenFactory()];\r\n case 1:\r\n token = _a.sent();\r\n if (token) {\r\n url += (url.indexOf(\"?\") < 0 ? \"?\" : \"&\") + (\"access_token=\" + encodeURIComponent(token));\r\n }\r\n _a.label = 2;\r\n case 2: return [2 /*return*/, new Promise(function (resolve, reject) {\r\n var opened = false;\r\n if (transferFormat !== TransferFormat.Text) {\r\n reject(new Error(\"The Server-Sent Events transport only supports the 'Text' transfer format\"));\r\n return;\r\n }\r\n var eventSource;\r\n if (Platform.isBrowser || Platform.isWebWorker) {\r\n eventSource = new _this.eventSourceConstructor(url, { withCredentials: _this.withCredentials });\r\n }\r\n else {\r\n // Non-browser passes cookies via the dictionary\r\n var cookies = _this.httpClient.getCookieString(url);\r\n var headers = {};\r\n headers.Cookie = cookies;\r\n var _a = getUserAgentHeader(), name_1 = _a[0], value = _a[1];\r\n headers[name_1] = value;\r\n eventSource = new _this.eventSourceConstructor(url, { withCredentials: _this.withCredentials, headers: __assign({}, headers, _this.headers) });\r\n }\r\n try {\r\n eventSource.onmessage = function (e) {\r\n if (_this.onreceive) {\r\n try {\r\n _this.logger.log(LogLevel.Trace, \"(SSE transport) data received. \" + getDataDetail(e.data, _this.logMessageContent) + \".\");\r\n _this.onreceive(e.data);\r\n }\r\n catch (error) {\r\n _this.close(error);\r\n return;\r\n }\r\n }\r\n };\r\n eventSource.onerror = function (e) {\r\n var error = new Error(e.data || \"Error occurred\");\r\n if (opened) {\r\n _this.close(error);\r\n }\r\n else {\r\n reject(error);\r\n }\r\n };\r\n eventSource.onopen = function () {\r\n _this.logger.log(LogLevel.Information, \"SSE connected to \" + _this.url);\r\n _this.eventSource = eventSource;\r\n opened = true;\r\n resolve();\r\n };\r\n }\r\n catch (e) {\r\n reject(e);\r\n return;\r\n }\r\n })];\r\n }\r\n });\r\n });\r\n };\r\n ServerSentEventsTransport.prototype.send = function (data) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n if (!this.eventSource) {\r\n return [2 /*return*/, Promise.reject(new Error(\"Cannot send until the transport is connected\"))];\r\n }\r\n return [2 /*return*/, sendMessage(this.logger, \"SSE\", this.httpClient, this.url, this.accessTokenFactory, data, this.logMessageContent, this.withCredentials, this.headers)];\r\n });\r\n });\r\n };\r\n ServerSentEventsTransport.prototype.stop = function () {\r\n this.close();\r\n return Promise.resolve();\r\n };\r\n ServerSentEventsTransport.prototype.close = function (e) {\r\n if (this.eventSource) {\r\n this.eventSource.close();\r\n this.eventSource = undefined;\r\n if (this.onclose) {\r\n this.onclose(e);\r\n }\r\n }\r\n };\r\n return ServerSentEventsTransport;\r\n}());\r\nexport { ServerSentEventsTransport };\r\n//# sourceMappingURL=ServerSentEventsTransport.js.map","// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n};\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nimport { LogLevel } from \"./ILogger\";\r\nimport { TransferFormat } from \"./ITransport\";\r\nimport { Arg, getDataDetail, getUserAgentHeader, Platform } from \"./Utils\";\r\n/** @private */\r\nvar WebSocketTransport = /** @class */ (function () {\r\n function WebSocketTransport(httpClient, accessTokenFactory, logger, logMessageContent, webSocketConstructor, headers) {\r\n this.logger = logger;\r\n this.accessTokenFactory = accessTokenFactory;\r\n this.logMessageContent = logMessageContent;\r\n this.webSocketConstructor = webSocketConstructor;\r\n this.httpClient = httpClient;\r\n this.onreceive = null;\r\n this.onclose = null;\r\n this.headers = headers;\r\n }\r\n WebSocketTransport.prototype.connect = function (url, transferFormat) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var token;\r\n var _this = this;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n Arg.isRequired(url, \"url\");\r\n Arg.isRequired(transferFormat, \"transferFormat\");\r\n Arg.isIn(transferFormat, TransferFormat, \"transferFormat\");\r\n this.logger.log(LogLevel.Trace, \"(WebSockets transport) Connecting.\");\r\n if (!this.accessTokenFactory) return [3 /*break*/, 2];\r\n return [4 /*yield*/, this.accessTokenFactory()];\r\n case 1:\r\n token = _a.sent();\r\n if (token) {\r\n url += (url.indexOf(\"?\") < 0 ? \"?\" : \"&\") + (\"access_token=\" + encodeURIComponent(token));\r\n }\r\n _a.label = 2;\r\n case 2: return [2 /*return*/, new Promise(function (resolve, reject) {\r\n url = url.replace(/^http/, \"ws\");\r\n var webSocket;\r\n var cookies = _this.httpClient.getCookieString(url);\r\n var opened = false;\r\n if (Platform.isNode) {\r\n var headers = {};\r\n var _a = getUserAgentHeader(), name_1 = _a[0], value = _a[1];\r\n headers[name_1] = value;\r\n if (cookies) {\r\n headers[\"Cookie\"] = \"\" + cookies;\r\n }\r\n // Only pass headers when in non-browser environments\r\n webSocket = new _this.webSocketConstructor(url, undefined, {\r\n headers: __assign({}, headers, _this.headers),\r\n });\r\n }\r\n if (!webSocket) {\r\n // Chrome is not happy with passing 'undefined' as protocol\r\n webSocket = new _this.webSocketConstructor(url);\r\n }\r\n if (transferFormat === TransferFormat.Binary) {\r\n webSocket.binaryType = \"arraybuffer\";\r\n }\r\n // tslint:disable-next-line:variable-name\r\n webSocket.onopen = function (_event) {\r\n _this.logger.log(LogLevel.Information, \"WebSocket connected to \" + url + \".\");\r\n _this.webSocket = webSocket;\r\n opened = true;\r\n resolve();\r\n };\r\n webSocket.onerror = function (event) {\r\n var error = null;\r\n // ErrorEvent is a browser only type we need to check if the type exists before using it\r\n if (typeof ErrorEvent !== \"undefined\" && event instanceof ErrorEvent) {\r\n error = event.error;\r\n }\r\n else {\r\n error = new Error(\"There was an error with the transport.\");\r\n }\r\n reject(error);\r\n };\r\n webSocket.onmessage = function (message) {\r\n _this.logger.log(LogLevel.Trace, \"(WebSockets transport) data received. \" + getDataDetail(message.data, _this.logMessageContent) + \".\");\r\n if (_this.onreceive) {\r\n try {\r\n _this.onreceive(message.data);\r\n }\r\n catch (error) {\r\n _this.close(error);\r\n return;\r\n }\r\n }\r\n };\r\n webSocket.onclose = function (event) {\r\n // Don't call close handler if connection was never established\r\n // We'll reject the connect call instead\r\n if (opened) {\r\n _this.close(event);\r\n }\r\n else {\r\n var error = null;\r\n // ErrorEvent is a browser only type we need to check if the type exists before using it\r\n if (typeof ErrorEvent !== \"undefined\" && event instanceof ErrorEvent) {\r\n error = event.error;\r\n }\r\n else {\r\n error = new Error(\"There was an error with the transport.\");\r\n }\r\n reject(error);\r\n }\r\n };\r\n })];\r\n }\r\n });\r\n });\r\n };\r\n WebSocketTransport.prototype.send = function (data) {\r\n if (this.webSocket && this.webSocket.readyState === this.webSocketConstructor.OPEN) {\r\n this.logger.log(LogLevel.Trace, \"(WebSockets transport) sending data. \" + getDataDetail(data, this.logMessageContent) + \".\");\r\n this.webSocket.send(data);\r\n return Promise.resolve();\r\n }\r\n return Promise.reject(\"WebSocket is not in the OPEN state\");\r\n };\r\n WebSocketTransport.prototype.stop = function () {\r\n if (this.webSocket) {\r\n // Manually invoke onclose callback inline so we know the HttpConnection was closed properly before returning\r\n // This also solves an issue where websocket.onclose could take 18+ seconds to trigger during network disconnects\r\n this.close(undefined);\r\n }\r\n return Promise.resolve();\r\n };\r\n WebSocketTransport.prototype.close = function (event) {\r\n // webSocket will be null if the transport did not start successfully\r\n if (this.webSocket) {\r\n // Clear websocket handlers because we are considering the socket closed now\r\n this.webSocket.onclose = function () { };\r\n this.webSocket.onmessage = function () { };\r\n this.webSocket.onerror = function () { };\r\n this.webSocket.close();\r\n this.webSocket = undefined;\r\n }\r\n this.logger.log(LogLevel.Trace, \"(WebSockets transport) socket closed.\");\r\n if (this.onclose) {\r\n if (this.isCloseEvent(event) && (event.wasClean === false || event.code !== 1000)) {\r\n this.onclose(new Error(\"WebSocket closed with status code: \" + event.code + \" (\" + event.reason + \").\"));\r\n }\r\n else if (event instanceof Error) {\r\n this.onclose(event);\r\n }\r\n else {\r\n this.onclose();\r\n }\r\n }\r\n };\r\n WebSocketTransport.prototype.isCloseEvent = function (event) {\r\n return event && typeof event.wasClean === \"boolean\" && typeof event.code === \"number\";\r\n };\r\n return WebSocketTransport;\r\n}());\r\nexport { WebSocketTransport };\r\n//# sourceMappingURL=WebSocketTransport.js.map","// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n};\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nimport { DefaultHttpClient } from \"./DefaultHttpClient\";\r\nimport { LogLevel } from \"./ILogger\";\r\nimport { HttpTransportType, TransferFormat } from \"./ITransport\";\r\nimport { LongPollingTransport } from \"./LongPollingTransport\";\r\nimport { ServerSentEventsTransport } from \"./ServerSentEventsTransport\";\r\nimport { Arg, createLogger, getUserAgentHeader, Platform } from \"./Utils\";\r\nimport { WebSocketTransport } from \"./WebSocketTransport\";\r\nvar MAX_REDIRECTS = 100;\r\n/** @private */\r\nvar HttpConnection = /** @class */ (function () {\r\n function HttpConnection(url, options) {\r\n if (options === void 0) { options = {}; }\r\n this.stopPromiseResolver = function () { };\r\n this.features = {};\r\n this.negotiateVersion = 1;\r\n Arg.isRequired(url, \"url\");\r\n this.logger = createLogger(options.logger);\r\n this.baseUrl = this.resolveUrl(url);\r\n options = options || {};\r\n options.logMessageContent = options.logMessageContent === undefined ? false : options.logMessageContent;\r\n if (typeof options.withCredentials === \"boolean\" || options.withCredentials === undefined) {\r\n options.withCredentials = options.withCredentials === undefined ? true : options.withCredentials;\r\n }\r\n else {\r\n throw new Error(\"withCredentials option was not a 'boolean' or 'undefined' value\");\r\n }\r\n var webSocketModule = null;\r\n var eventSourceModule = null;\r\n if (Platform.isNode && typeof require !== \"undefined\") {\r\n // In order to ignore the dynamic require in webpack builds we need to do this magic\r\n // @ts-ignore: TS doesn't know about these names\r\n var requireFunc = typeof __webpack_require__ === \"function\" ? __non_webpack_require__ : require;\r\n webSocketModule = requireFunc(\"ws\");\r\n eventSourceModule = requireFunc(\"eventsource\");\r\n }\r\n if (!Platform.isNode && typeof WebSocket !== \"undefined\" && !options.WebSocket) {\r\n options.WebSocket = WebSocket;\r\n }\r\n else if (Platform.isNode && !options.WebSocket) {\r\n if (webSocketModule) {\r\n options.WebSocket = webSocketModule;\r\n }\r\n }\r\n if (!Platform.isNode && typeof EventSource !== \"undefined\" && !options.EventSource) {\r\n options.EventSource = EventSource;\r\n }\r\n else if (Platform.isNode && !options.EventSource) {\r\n if (typeof eventSourceModule !== \"undefined\") {\r\n options.EventSource = eventSourceModule;\r\n }\r\n }\r\n this.httpClient = options.httpClient || new DefaultHttpClient(this.logger);\r\n this.connectionState = \"Disconnected\" /* Disconnected */;\r\n this.connectionStarted = false;\r\n this.options = options;\r\n this.onreceive = null;\r\n this.onclose = null;\r\n }\r\n HttpConnection.prototype.start = function (transferFormat) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var message, message;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n transferFormat = transferFormat || TransferFormat.Binary;\r\n Arg.isIn(transferFormat, TransferFormat, \"transferFormat\");\r\n this.logger.log(LogLevel.Debug, \"Starting connection with transfer format '\" + TransferFormat[transferFormat] + \"'.\");\r\n if (this.connectionState !== \"Disconnected\" /* Disconnected */) {\r\n return [2 /*return*/, Promise.reject(new Error(\"Cannot start an HttpConnection that is not in the 'Disconnected' state.\"))];\r\n }\r\n this.connectionState = \"Connecting\" /* Connecting */;\r\n this.startInternalPromise = this.startInternal(transferFormat);\r\n return [4 /*yield*/, this.startInternalPromise];\r\n case 1:\r\n _a.sent();\r\n if (!(this.connectionState === \"Disconnecting\" /* Disconnecting */)) return [3 /*break*/, 3];\r\n message = \"Failed to start the HttpConnection before stop() was called.\";\r\n this.logger.log(LogLevel.Error, message);\r\n // We cannot await stopPromise inside startInternal since stopInternal awaits the startInternalPromise.\r\n return [4 /*yield*/, this.stopPromise];\r\n case 2:\r\n // We cannot await stopPromise inside startInternal since stopInternal awaits the startInternalPromise.\r\n _a.sent();\r\n return [2 /*return*/, Promise.reject(new Error(message))];\r\n case 3:\r\n if (this.connectionState !== \"Connected\" /* Connected */) {\r\n message = \"HttpConnection.startInternal completed gracefully but didn't enter the connection into the connected state!\";\r\n this.logger.log(LogLevel.Error, message);\r\n return [2 /*return*/, Promise.reject(new Error(message))];\r\n }\r\n _a.label = 4;\r\n case 4:\r\n this.connectionStarted = true;\r\n return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n HttpConnection.prototype.send = function (data) {\r\n if (this.connectionState !== \"Connected\" /* Connected */) {\r\n return Promise.reject(new Error(\"Cannot send data if the connection is not in the 'Connected' State.\"));\r\n }\r\n if (!this.sendQueue) {\r\n this.sendQueue = new TransportSendQueue(this.transport);\r\n }\r\n // Transport will not be null if state is connected\r\n return this.sendQueue.send(data);\r\n };\r\n HttpConnection.prototype.stop = function (error) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var _this = this;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (this.connectionState === \"Disconnected\" /* Disconnected */) {\r\n this.logger.log(LogLevel.Debug, \"Call to HttpConnection.stop(\" + error + \") ignored because the connection is already in the disconnected state.\");\r\n return [2 /*return*/, Promise.resolve()];\r\n }\r\n if (this.connectionState === \"Disconnecting\" /* Disconnecting */) {\r\n this.logger.log(LogLevel.Debug, \"Call to HttpConnection.stop(\" + error + \") ignored because the connection is already in the disconnecting state.\");\r\n return [2 /*return*/, this.stopPromise];\r\n }\r\n this.connectionState = \"Disconnecting\" /* Disconnecting */;\r\n this.stopPromise = new Promise(function (resolve) {\r\n // Don't complete stop() until stopConnection() completes.\r\n _this.stopPromiseResolver = resolve;\r\n });\r\n // stopInternal should never throw so just observe it.\r\n return [4 /*yield*/, this.stopInternal(error)];\r\n case 1:\r\n // stopInternal should never throw so just observe it.\r\n _a.sent();\r\n return [4 /*yield*/, this.stopPromise];\r\n case 2:\r\n _a.sent();\r\n return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n HttpConnection.prototype.stopInternal = function (error) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var e_1, e_2;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n // Set error as soon as possible otherwise there is a race between\r\n // the transport closing and providing an error and the error from a close message\r\n // We would prefer the close message error.\r\n this.stopError = error;\r\n _a.label = 1;\r\n case 1:\r\n _a.trys.push([1, 3, , 4]);\r\n return [4 /*yield*/, this.startInternalPromise];\r\n case 2:\r\n _a.sent();\r\n return [3 /*break*/, 4];\r\n case 3:\r\n e_1 = _a.sent();\r\n return [3 /*break*/, 4];\r\n case 4:\r\n if (!this.transport) return [3 /*break*/, 9];\r\n _a.label = 5;\r\n case 5:\r\n _a.trys.push([5, 7, , 8]);\r\n return [4 /*yield*/, this.transport.stop()];\r\n case 6:\r\n _a.sent();\r\n return [3 /*break*/, 8];\r\n case 7:\r\n e_2 = _a.sent();\r\n this.logger.log(LogLevel.Error, \"HttpConnection.transport.stop() threw error '\" + e_2 + \"'.\");\r\n this.stopConnection();\r\n return [3 /*break*/, 8];\r\n case 8:\r\n this.transport = undefined;\r\n return [3 /*break*/, 10];\r\n case 9:\r\n this.logger.log(LogLevel.Debug, \"HttpConnection.transport is undefined in HttpConnection.stop() because start() failed.\");\r\n _a.label = 10;\r\n case 10: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n HttpConnection.prototype.startInternal = function (transferFormat) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var url, negotiateResponse, redirects, _loop_1, this_1, e_3;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n url = this.baseUrl;\r\n this.accessTokenFactory = this.options.accessTokenFactory;\r\n _a.label = 1;\r\n case 1:\r\n _a.trys.push([1, 12, , 13]);\r\n if (!this.options.skipNegotiation) return [3 /*break*/, 5];\r\n if (!(this.options.transport === HttpTransportType.WebSockets)) return [3 /*break*/, 3];\r\n // No need to add a connection ID in this case\r\n this.transport = this.constructTransport(HttpTransportType.WebSockets);\r\n // We should just call connect directly in this case.\r\n // No fallback or negotiate in this case.\r\n return [4 /*yield*/, this.startTransport(url, transferFormat)];\r\n case 2:\r\n // We should just call connect directly in this case.\r\n // No fallback or negotiate in this case.\r\n _a.sent();\r\n return [3 /*break*/, 4];\r\n case 3: throw new Error(\"Negotiation can only be skipped when using the WebSocket transport directly.\");\r\n case 4: return [3 /*break*/, 11];\r\n case 5:\r\n negotiateResponse = null;\r\n redirects = 0;\r\n _loop_1 = function () {\r\n var accessToken_1;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, this_1.getNegotiationResponse(url)];\r\n case 1:\r\n negotiateResponse = _a.sent();\r\n // the user tries to stop the connection when it is being started\r\n if (this_1.connectionState === \"Disconnecting\" /* Disconnecting */ || this_1.connectionState === \"Disconnected\" /* Disconnected */) {\r\n throw new Error(\"The connection was stopped during negotiation.\");\r\n }\r\n if (negotiateResponse.error) {\r\n throw new Error(negotiateResponse.error);\r\n }\r\n if (negotiateResponse.ProtocolVersion) {\r\n throw new Error(\"Detected a connection attempt to an ASP.NET SignalR Server. This client only supports connecting to an ASP.NET Core SignalR Server. See https://aka.ms/signalr-core-differences for details.\");\r\n }\r\n if (negotiateResponse.url) {\r\n url = negotiateResponse.url;\r\n }\r\n if (negotiateResponse.accessToken) {\r\n accessToken_1 = negotiateResponse.accessToken;\r\n this_1.accessTokenFactory = function () { return accessToken_1; };\r\n }\r\n redirects++;\r\n return [2 /*return*/];\r\n }\r\n });\r\n };\r\n this_1 = this;\r\n _a.label = 6;\r\n case 6: return [5 /*yield**/, _loop_1()];\r\n case 7:\r\n _a.sent();\r\n _a.label = 8;\r\n case 8:\r\n if (negotiateResponse.url && redirects < MAX_REDIRECTS) return [3 /*break*/, 6];\r\n _a.label = 9;\r\n case 9:\r\n if (redirects === MAX_REDIRECTS && negotiateResponse.url) {\r\n throw new Error(\"Negotiate redirection limit exceeded.\");\r\n }\r\n return [4 /*yield*/, this.createTransport(url, this.options.transport, negotiateResponse, transferFormat)];\r\n case 10:\r\n _a.sent();\r\n _a.label = 11;\r\n case 11:\r\n if (this.transport instanceof LongPollingTransport) {\r\n this.features.inherentKeepAlive = true;\r\n }\r\n if (this.connectionState === \"Connecting\" /* Connecting */) {\r\n // Ensure the connection transitions to the connected state prior to completing this.startInternalPromise.\r\n // start() will handle the case when stop was called and startInternal exits still in the disconnecting state.\r\n this.logger.log(LogLevel.Debug, \"The HttpConnection connected successfully.\");\r\n this.connectionState = \"Connected\" /* Connected */;\r\n }\r\n return [3 /*break*/, 13];\r\n case 12:\r\n e_3 = _a.sent();\r\n this.logger.log(LogLevel.Error, \"Failed to start the connection: \" + e_3);\r\n this.connectionState = \"Disconnected\" /* Disconnected */;\r\n this.transport = undefined;\r\n // if start fails, any active calls to stop assume that start will complete the stop promise\r\n this.stopPromiseResolver();\r\n return [2 /*return*/, Promise.reject(e_3)];\r\n case 13: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n HttpConnection.prototype.getNegotiationResponse = function (url) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var headers, token, _a, name, value, negotiateUrl, response, negotiateResponse, e_4;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n headers = {};\r\n if (!this.accessTokenFactory) return [3 /*break*/, 2];\r\n return [4 /*yield*/, this.accessTokenFactory()];\r\n case 1:\r\n token = _b.sent();\r\n if (token) {\r\n headers[\"Authorization\"] = \"Bearer \" + token;\r\n }\r\n _b.label = 2;\r\n case 2:\r\n _a = getUserAgentHeader(), name = _a[0], value = _a[1];\r\n headers[name] = value;\r\n negotiateUrl = this.resolveNegotiateUrl(url);\r\n this.logger.log(LogLevel.Debug, \"Sending negotiation request: \" + negotiateUrl + \".\");\r\n _b.label = 3;\r\n case 3:\r\n _b.trys.push([3, 5, , 6]);\r\n return [4 /*yield*/, this.httpClient.post(negotiateUrl, {\r\n content: \"\",\r\n headers: __assign({}, headers, this.options.headers),\r\n withCredentials: this.options.withCredentials,\r\n })];\r\n case 4:\r\n response = _b.sent();\r\n if (response.statusCode !== 200) {\r\n return [2 /*return*/, Promise.reject(new Error(\"Unexpected status code returned from negotiate '\" + response.statusCode + \"'\"))];\r\n }\r\n negotiateResponse = JSON.parse(response.content);\r\n if (!negotiateResponse.negotiateVersion || negotiateResponse.negotiateVersion < 1) {\r\n // Negotiate version 0 doesn't use connectionToken\r\n // So we set it equal to connectionId so all our logic can use connectionToken without being aware of the negotiate version\r\n negotiateResponse.connectionToken = negotiateResponse.connectionId;\r\n }\r\n return [2 /*return*/, negotiateResponse];\r\n case 5:\r\n e_4 = _b.sent();\r\n this.logger.log(LogLevel.Error, \"Failed to complete negotiation with the server: \" + e_4);\r\n return [2 /*return*/, Promise.reject(e_4)];\r\n case 6: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n HttpConnection.prototype.createConnectUrl = function (url, connectionToken) {\r\n if (!connectionToken) {\r\n return url;\r\n }\r\n return url + (url.indexOf(\"?\") === -1 ? \"?\" : \"&\") + (\"id=\" + connectionToken);\r\n };\r\n HttpConnection.prototype.createTransport = function (url, requestedTransport, negotiateResponse, requestedTransferFormat) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var connectUrl, transportExceptions, transports, negotiate, _i, transports_1, endpoint, transportOrError, ex_1, ex_2, message;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n connectUrl = this.createConnectUrl(url, negotiateResponse.connectionToken);\r\n if (!this.isITransport(requestedTransport)) return [3 /*break*/, 2];\r\n this.logger.log(LogLevel.Debug, \"Connection was provided an instance of ITransport, using that directly.\");\r\n this.transport = requestedTransport;\r\n return [4 /*yield*/, this.startTransport(connectUrl, requestedTransferFormat)];\r\n case 1:\r\n _a.sent();\r\n this.connectionId = negotiateResponse.connectionId;\r\n return [2 /*return*/];\r\n case 2:\r\n transportExceptions = [];\r\n transports = negotiateResponse.availableTransports || [];\r\n negotiate = negotiateResponse;\r\n _i = 0, transports_1 = transports;\r\n _a.label = 3;\r\n case 3:\r\n if (!(_i < transports_1.length)) return [3 /*break*/, 13];\r\n endpoint = transports_1[_i];\r\n transportOrError = this.resolveTransportOrError(endpoint, requestedTransport, requestedTransferFormat);\r\n if (!(transportOrError instanceof Error)) return [3 /*break*/, 4];\r\n // Store the error and continue, we don't want to cause a re-negotiate in these cases\r\n transportExceptions.push(endpoint.transport + \" failed: \" + transportOrError);\r\n return [3 /*break*/, 12];\r\n case 4:\r\n if (!this.isITransport(transportOrError)) return [3 /*break*/, 12];\r\n this.transport = transportOrError;\r\n if (!!negotiate) return [3 /*break*/, 9];\r\n _a.label = 5;\r\n case 5:\r\n _a.trys.push([5, 7, , 8]);\r\n return [4 /*yield*/, this.getNegotiationResponse(url)];\r\n case 6:\r\n negotiate = _a.sent();\r\n return [3 /*break*/, 8];\r\n case 7:\r\n ex_1 = _a.sent();\r\n return [2 /*return*/, Promise.reject(ex_1)];\r\n case 8:\r\n connectUrl = this.createConnectUrl(url, negotiate.connectionToken);\r\n _a.label = 9;\r\n case 9:\r\n _a.trys.push([9, 11, , 12]);\r\n return [4 /*yield*/, this.startTransport(connectUrl, requestedTransferFormat)];\r\n case 10:\r\n _a.sent();\r\n this.connectionId = negotiate.connectionId;\r\n return [2 /*return*/];\r\n case 11:\r\n ex_2 = _a.sent();\r\n this.logger.log(LogLevel.Error, \"Failed to start the transport '\" + endpoint.transport + \"': \" + ex_2);\r\n negotiate = undefined;\r\n transportExceptions.push(endpoint.transport + \" failed: \" + ex_2);\r\n if (this.connectionState !== \"Connecting\" /* Connecting */) {\r\n message = \"Failed to select transport before stop() was called.\";\r\n this.logger.log(LogLevel.Debug, message);\r\n return [2 /*return*/, Promise.reject(new Error(message))];\r\n }\r\n return [3 /*break*/, 12];\r\n case 12:\r\n _i++;\r\n return [3 /*break*/, 3];\r\n case 13:\r\n if (transportExceptions.length > 0) {\r\n return [2 /*return*/, Promise.reject(new Error(\"Unable to connect to the server with any of the available transports. \" + transportExceptions.join(\" \")))];\r\n }\r\n return [2 /*return*/, Promise.reject(new Error(\"None of the transports supported by the client are supported by the server.\"))];\r\n }\r\n });\r\n });\r\n };\r\n HttpConnection.prototype.constructTransport = function (transport) {\r\n switch (transport) {\r\n case HttpTransportType.WebSockets:\r\n if (!this.options.WebSocket) {\r\n throw new Error(\"'WebSocket' is not supported in your environment.\");\r\n }\r\n return new WebSocketTransport(this.httpClient, this.accessTokenFactory, this.logger, this.options.logMessageContent || false, this.options.WebSocket, this.options.headers || {});\r\n case HttpTransportType.ServerSentEvents:\r\n if (!this.options.EventSource) {\r\n throw new Error(\"'EventSource' is not supported in your environment.\");\r\n }\r\n return new ServerSentEventsTransport(this.httpClient, this.accessTokenFactory, this.logger, this.options.logMessageContent || false, this.options.EventSource, this.options.withCredentials, this.options.headers || {});\r\n case HttpTransportType.LongPolling:\r\n return new LongPollingTransport(this.httpClient, this.accessTokenFactory, this.logger, this.options.logMessageContent || false, this.options.withCredentials, this.options.headers || {});\r\n default:\r\n throw new Error(\"Unknown transport: \" + transport + \".\");\r\n }\r\n };\r\n HttpConnection.prototype.startTransport = function (url, transferFormat) {\r\n var _this = this;\r\n this.transport.onreceive = this.onreceive;\r\n this.transport.onclose = function (e) { return _this.stopConnection(e); };\r\n return this.transport.connect(url, transferFormat);\r\n };\r\n HttpConnection.prototype.resolveTransportOrError = function (endpoint, requestedTransport, requestedTransferFormat) {\r\n var transport = HttpTransportType[endpoint.transport];\r\n if (transport === null || transport === undefined) {\r\n this.logger.log(LogLevel.Debug, \"Skipping transport '\" + endpoint.transport + \"' because it is not supported by this client.\");\r\n return new Error(\"Skipping transport '\" + endpoint.transport + \"' because it is not supported by this client.\");\r\n }\r\n else {\r\n if (transportMatches(requestedTransport, transport)) {\r\n var transferFormats = endpoint.transferFormats.map(function (s) { return TransferFormat[s]; });\r\n if (transferFormats.indexOf(requestedTransferFormat) >= 0) {\r\n if ((transport === HttpTransportType.WebSockets && !this.options.WebSocket) ||\r\n (transport === HttpTransportType.ServerSentEvents && !this.options.EventSource)) {\r\n this.logger.log(LogLevel.Debug, \"Skipping transport '\" + HttpTransportType[transport] + \"' because it is not supported in your environment.'\");\r\n return new Error(\"'\" + HttpTransportType[transport] + \"' is not supported in your environment.\");\r\n }\r\n else {\r\n this.logger.log(LogLevel.Debug, \"Selecting transport '\" + HttpTransportType[transport] + \"'.\");\r\n try {\r\n return this.constructTransport(transport);\r\n }\r\n catch (ex) {\r\n return ex;\r\n }\r\n }\r\n }\r\n else {\r\n this.logger.log(LogLevel.Debug, \"Skipping transport '\" + HttpTransportType[transport] + \"' because it does not support the requested transfer format '\" + TransferFormat[requestedTransferFormat] + \"'.\");\r\n return new Error(\"'\" + HttpTransportType[transport] + \"' does not support \" + TransferFormat[requestedTransferFormat] + \".\");\r\n }\r\n }\r\n else {\r\n this.logger.log(LogLevel.Debug, \"Skipping transport '\" + HttpTransportType[transport] + \"' because it was disabled by the client.\");\r\n return new Error(\"'\" + HttpTransportType[transport] + \"' is disabled by the client.\");\r\n }\r\n }\r\n };\r\n HttpConnection.prototype.isITransport = function (transport) {\r\n return transport && typeof (transport) === \"object\" && \"connect\" in transport;\r\n };\r\n HttpConnection.prototype.stopConnection = function (error) {\r\n var _this = this;\r\n this.logger.log(LogLevel.Debug, \"HttpConnection.stopConnection(\" + error + \") called while in state \" + this.connectionState + \".\");\r\n this.transport = undefined;\r\n // If we have a stopError, it takes precedence over the error from the transport\r\n error = this.stopError || error;\r\n this.stopError = undefined;\r\n if (this.connectionState === \"Disconnected\" /* Disconnected */) {\r\n this.logger.log(LogLevel.Debug, \"Call to HttpConnection.stopConnection(\" + error + \") was ignored because the connection is already in the disconnected state.\");\r\n return;\r\n }\r\n if (this.connectionState === \"Connecting\" /* Connecting */) {\r\n this.logger.log(LogLevel.Warning, \"Call to HttpConnection.stopConnection(\" + error + \") was ignored because the connection is still in the connecting state.\");\r\n throw new Error(\"HttpConnection.stopConnection(\" + error + \") was called while the connection is still in the connecting state.\");\r\n }\r\n if (this.connectionState === \"Disconnecting\" /* Disconnecting */) {\r\n // A call to stop() induced this call to stopConnection and needs to be completed.\r\n // Any stop() awaiters will be scheduled to continue after the onclose callback fires.\r\n this.stopPromiseResolver();\r\n }\r\n if (error) {\r\n this.logger.log(LogLevel.Error, \"Connection disconnected with error '\" + error + \"'.\");\r\n }\r\n else {\r\n this.logger.log(LogLevel.Information, \"Connection disconnected.\");\r\n }\r\n if (this.sendQueue) {\r\n this.sendQueue.stop().catch(function (e) {\r\n _this.logger.log(LogLevel.Error, \"TransportSendQueue.stop() threw error '\" + e + \"'.\");\r\n });\r\n this.sendQueue = undefined;\r\n }\r\n this.connectionId = undefined;\r\n this.connectionState = \"Disconnected\" /* Disconnected */;\r\n if (this.connectionStarted) {\r\n this.connectionStarted = false;\r\n try {\r\n if (this.onclose) {\r\n this.onclose(error);\r\n }\r\n }\r\n catch (e) {\r\n this.logger.log(LogLevel.Error, \"HttpConnection.onclose(\" + error + \") threw error '\" + e + \"'.\");\r\n }\r\n }\r\n };\r\n HttpConnection.prototype.resolveUrl = function (url) {\r\n // startsWith is not supported in IE\r\n if (url.lastIndexOf(\"https://\", 0) === 0 || url.lastIndexOf(\"http://\", 0) === 0) {\r\n return url;\r\n }\r\n if (!Platform.isBrowser || !window.document) {\r\n throw new Error(\"Cannot resolve '\" + url + \"'.\");\r\n }\r\n // Setting the url to the href propery of an anchor tag handles normalization\r\n // for us. There are 3 main cases.\r\n // 1. Relative path normalization e.g \"b\" -> \"http://localhost:5000/a/b\"\r\n // 2. Absolute path normalization e.g \"/a/b\" -> \"http://localhost:5000/a/b\"\r\n // 3. Networkpath reference normalization e.g \"//localhost:5000/a/b\" -> \"http://localhost:5000/a/b\"\r\n var aTag = window.document.createElement(\"a\");\r\n aTag.href = url;\r\n this.logger.log(LogLevel.Information, \"Normalizing '\" + url + \"' to '\" + aTag.href + \"'.\");\r\n return aTag.href;\r\n };\r\n HttpConnection.prototype.resolveNegotiateUrl = function (url) {\r\n var index = url.indexOf(\"?\");\r\n var negotiateUrl = url.substring(0, index === -1 ? url.length : index);\r\n if (negotiateUrl[negotiateUrl.length - 1] !== \"/\") {\r\n negotiateUrl += \"/\";\r\n }\r\n negotiateUrl += \"negotiate\";\r\n negotiateUrl += index === -1 ? \"\" : url.substring(index);\r\n if (negotiateUrl.indexOf(\"negotiateVersion\") === -1) {\r\n negotiateUrl += index === -1 ? \"?\" : \"&\";\r\n negotiateUrl += \"negotiateVersion=\" + this.negotiateVersion;\r\n }\r\n return negotiateUrl;\r\n };\r\n return HttpConnection;\r\n}());\r\nexport { HttpConnection };\r\nfunction transportMatches(requestedTransport, actualTransport) {\r\n return !requestedTransport || ((actualTransport & requestedTransport) !== 0);\r\n}\r\n/** @private */\r\nvar TransportSendQueue = /** @class */ (function () {\r\n function TransportSendQueue(transport) {\r\n this.transport = transport;\r\n this.buffer = [];\r\n this.executing = true;\r\n this.sendBufferedData = new PromiseSource();\r\n this.transportResult = new PromiseSource();\r\n this.sendLoopPromise = this.sendLoop();\r\n }\r\n TransportSendQueue.prototype.send = function (data) {\r\n this.bufferData(data);\r\n if (!this.transportResult) {\r\n this.transportResult = new PromiseSource();\r\n }\r\n return this.transportResult.promise;\r\n };\r\n TransportSendQueue.prototype.stop = function () {\r\n this.executing = false;\r\n this.sendBufferedData.resolve();\r\n return this.sendLoopPromise;\r\n };\r\n TransportSendQueue.prototype.bufferData = function (data) {\r\n if (this.buffer.length && typeof (this.buffer[0]) !== typeof (data)) {\r\n throw new Error(\"Expected data to be of type \" + typeof (this.buffer) + \" but was of type \" + typeof (data));\r\n }\r\n this.buffer.push(data);\r\n this.sendBufferedData.resolve();\r\n };\r\n TransportSendQueue.prototype.sendLoop = function () {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var transportResult, data, error_1;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (!true) return [3 /*break*/, 6];\r\n return [4 /*yield*/, this.sendBufferedData.promise];\r\n case 1:\r\n _a.sent();\r\n if (!this.executing) {\r\n if (this.transportResult) {\r\n this.transportResult.reject(\"Connection stopped.\");\r\n }\r\n return [3 /*break*/, 6];\r\n }\r\n this.sendBufferedData = new PromiseSource();\r\n transportResult = this.transportResult;\r\n this.transportResult = undefined;\r\n data = typeof (this.buffer[0]) === \"string\" ?\r\n this.buffer.join(\"\") :\r\n TransportSendQueue.concatBuffers(this.buffer);\r\n this.buffer.length = 0;\r\n _a.label = 2;\r\n case 2:\r\n _a.trys.push([2, 4, , 5]);\r\n return [4 /*yield*/, this.transport.send(data)];\r\n case 3:\r\n _a.sent();\r\n transportResult.resolve();\r\n return [3 /*break*/, 5];\r\n case 4:\r\n error_1 = _a.sent();\r\n transportResult.reject(error_1);\r\n return [3 /*break*/, 5];\r\n case 5: return [3 /*break*/, 0];\r\n case 6: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n TransportSendQueue.concatBuffers = function (arrayBuffers) {\r\n var totalLength = arrayBuffers.map(function (b) { return b.byteLength; }).reduce(function (a, b) { return a + b; });\r\n var result = new Uint8Array(totalLength);\r\n var offset = 0;\r\n for (var _i = 0, arrayBuffers_1 = arrayBuffers; _i < arrayBuffers_1.length; _i++) {\r\n var item = arrayBuffers_1[_i];\r\n result.set(new Uint8Array(item), offset);\r\n offset += item.byteLength;\r\n }\r\n return result.buffer;\r\n };\r\n return TransportSendQueue;\r\n}());\r\nexport { TransportSendQueue };\r\nvar PromiseSource = /** @class */ (function () {\r\n function PromiseSource() {\r\n var _this = this;\r\n this.promise = new Promise(function (resolve, reject) {\r\n var _a;\r\n return _a = [resolve, reject], _this.resolver = _a[0], _this.rejecter = _a[1], _a;\r\n });\r\n }\r\n PromiseSource.prototype.resolve = function () {\r\n this.resolver();\r\n };\r\n PromiseSource.prototype.reject = function (reason) {\r\n this.rejecter(reason);\r\n };\r\n return PromiseSource;\r\n}());\r\n//# sourceMappingURL=HttpConnection.js.map","// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\nimport { MessageType } from \"./IHubProtocol\";\r\nimport { LogLevel } from \"./ILogger\";\r\nimport { TransferFormat } from \"./ITransport\";\r\nimport { NullLogger } from \"./Loggers\";\r\nimport { TextMessageFormat } from \"./TextMessageFormat\";\r\nvar JSON_HUB_PROTOCOL_NAME = \"json\";\r\n/** Implements the JSON Hub Protocol. */\r\nvar JsonHubProtocol = /** @class */ (function () {\r\n function JsonHubProtocol() {\r\n /** @inheritDoc */\r\n this.name = JSON_HUB_PROTOCOL_NAME;\r\n /** @inheritDoc */\r\n this.version = 1;\r\n /** @inheritDoc */\r\n this.transferFormat = TransferFormat.Text;\r\n }\r\n /** Creates an array of {@link @microsoft/signalr.HubMessage} objects from the specified serialized representation.\r\n *\r\n * @param {string} input A string containing the serialized representation.\r\n * @param {ILogger} logger A logger that will be used to log messages that occur during parsing.\r\n */\r\n JsonHubProtocol.prototype.parseMessages = function (input, logger) {\r\n // The interface does allow \"ArrayBuffer\" to be passed in, but this implementation does not. So let's throw a useful error.\r\n if (typeof input !== \"string\") {\r\n throw new Error(\"Invalid input for JSON hub protocol. Expected a string.\");\r\n }\r\n if (!input) {\r\n return [];\r\n }\r\n if (logger === null) {\r\n logger = NullLogger.instance;\r\n }\r\n // Parse the messages\r\n var messages = TextMessageFormat.parse(input);\r\n var hubMessages = [];\r\n for (var _i = 0, messages_1 = messages; _i < messages_1.length; _i++) {\r\n var message = messages_1[_i];\r\n var parsedMessage = JSON.parse(message);\r\n if (typeof parsedMessage.type !== \"number\") {\r\n throw new Error(\"Invalid payload.\");\r\n }\r\n switch (parsedMessage.type) {\r\n case MessageType.Invocation:\r\n this.isInvocationMessage(parsedMessage);\r\n break;\r\n case MessageType.StreamItem:\r\n this.isStreamItemMessage(parsedMessage);\r\n break;\r\n case MessageType.Completion:\r\n this.isCompletionMessage(parsedMessage);\r\n break;\r\n case MessageType.Ping:\r\n // Single value, no need to validate\r\n break;\r\n case MessageType.Close:\r\n // All optional values, no need to validate\r\n break;\r\n default:\r\n // Future protocol changes can add message types, old clients can ignore them\r\n logger.log(LogLevel.Information, \"Unknown message type '\" + parsedMessage.type + \"' ignored.\");\r\n continue;\r\n }\r\n hubMessages.push(parsedMessage);\r\n }\r\n return hubMessages;\r\n };\r\n /** Writes the specified {@link @microsoft/signalr.HubMessage} to a string and returns it.\r\n *\r\n * @param {HubMessage} message The message to write.\r\n * @returns {string} A string containing the serialized representation of the message.\r\n */\r\n JsonHubProtocol.prototype.writeMessage = function (message) {\r\n return TextMessageFormat.write(JSON.stringify(message));\r\n };\r\n JsonHubProtocol.prototype.isInvocationMessage = function (message) {\r\n this.assertNotEmptyString(message.target, \"Invalid payload for Invocation message.\");\r\n if (message.invocationId !== undefined) {\r\n this.assertNotEmptyString(message.invocationId, \"Invalid payload for Invocation message.\");\r\n }\r\n };\r\n JsonHubProtocol.prototype.isStreamItemMessage = function (message) {\r\n this.assertNotEmptyString(message.invocationId, \"Invalid payload for StreamItem message.\");\r\n if (message.item === undefined) {\r\n throw new Error(\"Invalid payload for StreamItem message.\");\r\n }\r\n };\r\n JsonHubProtocol.prototype.isCompletionMessage = function (message) {\r\n if (message.result && message.error) {\r\n throw new Error(\"Invalid payload for Completion message.\");\r\n }\r\n if (!message.result && message.error) {\r\n this.assertNotEmptyString(message.error, \"Invalid payload for Completion message.\");\r\n }\r\n this.assertNotEmptyString(message.invocationId, \"Invalid payload for Completion message.\");\r\n };\r\n JsonHubProtocol.prototype.assertNotEmptyString = function (value, errorMessage) {\r\n if (typeof value !== \"string\" || value === \"\") {\r\n throw new Error(errorMessage);\r\n }\r\n };\r\n return JsonHubProtocol;\r\n}());\r\nexport { JsonHubProtocol };\r\n//# sourceMappingURL=JsonHubProtocol.js.map","// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n};\r\nimport { DefaultReconnectPolicy } from \"./DefaultReconnectPolicy\";\r\nimport { HttpConnection } from \"./HttpConnection\";\r\nimport { HubConnection } from \"./HubConnection\";\r\nimport { LogLevel } from \"./ILogger\";\r\nimport { JsonHubProtocol } from \"./JsonHubProtocol\";\r\nimport { NullLogger } from \"./Loggers\";\r\nimport { Arg, ConsoleLogger } from \"./Utils\";\r\n// tslint:disable:object-literal-sort-keys\r\nvar LogLevelNameMapping = {\r\n trace: LogLevel.Trace,\r\n debug: LogLevel.Debug,\r\n info: LogLevel.Information,\r\n information: LogLevel.Information,\r\n warn: LogLevel.Warning,\r\n warning: LogLevel.Warning,\r\n error: LogLevel.Error,\r\n critical: LogLevel.Critical,\r\n none: LogLevel.None,\r\n};\r\nfunction parseLogLevel(name) {\r\n // Case-insensitive matching via lower-casing\r\n // Yes, I know case-folding is a complicated problem in Unicode, but we only support\r\n // the ASCII strings defined in LogLevelNameMapping anyway, so it's fine -anurse.\r\n var mapping = LogLevelNameMapping[name.toLowerCase()];\r\n if (typeof mapping !== \"undefined\") {\r\n return mapping;\r\n }\r\n else {\r\n throw new Error(\"Unknown log level: \" + name);\r\n }\r\n}\r\n/** A builder for configuring {@link @microsoft/signalr.HubConnection} instances. */\r\nvar HubConnectionBuilder = /** @class */ (function () {\r\n function HubConnectionBuilder() {\r\n }\r\n HubConnectionBuilder.prototype.configureLogging = function (logging) {\r\n Arg.isRequired(logging, \"logging\");\r\n if (isLogger(logging)) {\r\n this.logger = logging;\r\n }\r\n else if (typeof logging === \"string\") {\r\n var logLevel = parseLogLevel(logging);\r\n this.logger = new ConsoleLogger(logLevel);\r\n }\r\n else {\r\n this.logger = new ConsoleLogger(logging);\r\n }\r\n return this;\r\n };\r\n HubConnectionBuilder.prototype.withUrl = function (url, transportTypeOrOptions) {\r\n Arg.isRequired(url, \"url\");\r\n Arg.isNotEmpty(url, \"url\");\r\n this.url = url;\r\n // Flow-typing knows where it's at. Since HttpTransportType is a number and IHttpConnectionOptions is guaranteed\r\n // to be an object, we know (as does TypeScript) this comparison is all we need to figure out which overload was called.\r\n if (typeof transportTypeOrOptions === \"object\") {\r\n this.httpConnectionOptions = __assign({}, this.httpConnectionOptions, transportTypeOrOptions);\r\n }\r\n else {\r\n this.httpConnectionOptions = __assign({}, this.httpConnectionOptions, { transport: transportTypeOrOptions });\r\n }\r\n return this;\r\n };\r\n /** Configures the {@link @microsoft/signalr.HubConnection} to use the specified Hub Protocol.\r\n *\r\n * @param {IHubProtocol} protocol The {@link @microsoft/signalr.IHubProtocol} implementation to use.\r\n */\r\n HubConnectionBuilder.prototype.withHubProtocol = function (protocol) {\r\n Arg.isRequired(protocol, \"protocol\");\r\n this.protocol = protocol;\r\n return this;\r\n };\r\n HubConnectionBuilder.prototype.withAutomaticReconnect = function (retryDelaysOrReconnectPolicy) {\r\n if (this.reconnectPolicy) {\r\n throw new Error(\"A reconnectPolicy has already been set.\");\r\n }\r\n if (!retryDelaysOrReconnectPolicy) {\r\n this.reconnectPolicy = new DefaultReconnectPolicy();\r\n }\r\n else if (Array.isArray(retryDelaysOrReconnectPolicy)) {\r\n this.reconnectPolicy = new DefaultReconnectPolicy(retryDelaysOrReconnectPolicy);\r\n }\r\n else {\r\n this.reconnectPolicy = retryDelaysOrReconnectPolicy;\r\n }\r\n return this;\r\n };\r\n /** Creates a {@link @microsoft/signalr.HubConnection} from the configuration options specified in this builder.\r\n *\r\n * @returns {HubConnection} The configured {@link @microsoft/signalr.HubConnection}.\r\n */\r\n HubConnectionBuilder.prototype.build = function () {\r\n // If httpConnectionOptions has a logger, use it. Otherwise, override it with the one\r\n // provided to configureLogger\r\n var httpConnectionOptions = this.httpConnectionOptions || {};\r\n // If it's 'null', the user **explicitly** asked for null, don't mess with it.\r\n if (httpConnectionOptions.logger === undefined) {\r\n // If our logger is undefined or null, that's OK, the HttpConnection constructor will handle it.\r\n httpConnectionOptions.logger = this.logger;\r\n }\r\n // Now create the connection\r\n if (!this.url) {\r\n throw new Error(\"The 'HubConnectionBuilder.withUrl' method must be called before building the connection.\");\r\n }\r\n var connection = new HttpConnection(this.url, httpConnectionOptions);\r\n return HubConnection.create(connection, this.logger || NullLogger.instance, this.protocol || new JsonHubProtocol(), this.reconnectPolicy);\r\n };\r\n return HubConnectionBuilder;\r\n}());\r\nexport { HubConnectionBuilder };\r\nfunction isLogger(logger) {\r\n return logger.log !== undefined;\r\n}\r\n//# sourceMappingURL=HubConnectionBuilder.js.map","// Copyright 2021 Klabukov Erik.\n// SPDX-License-Identifier: GPL-3.0-only\n\nimport { HubConnectionBuilder, LogLevel, HttpTransportType } from '@microsoft/signalr'\n/* eslint-disable */\n// Custom SignalR connection handler\nfunction WebRtcSignalR (connection, connectCallback) {\n try{\n var signalRConnection = new HubConnectionBuilder()\n .withUrl('/ws/webrtc', { \n transport: HttpTransportType.WebSockets,\n skipNegotiation: true\n })\n .withAutomaticReconnect()\n .configureLogging(LogLevel.Information)\n .build()\n }catch(e){console.error(e)}\n\n function isData (session) {\n return !session.audio && !session.video && !session.screen && session.data\n }\n\n var channelName = connection.channel || 'defaultRoom'\n\n connection.socket = {\n send: function (data) {\n signalRConnection.invoke('Send', channelName, JSON.stringify(data))\n }\n }\n signalRConnection.on(channelName, message => {\n var data = JSON.parse(message)\n console.log('ON Deserialized', data)\n\n switch(data.eventName){\n case connection.socketMessageEvent:\n onMessagesCallback(data.data)\n break\n case 'presence':\n data = data.data\n if (data.userid === connection.userid) return\n connection.onUserStatusChanged({\n userid: data.userid,\n status: data.isOnline === true ? 'online' : 'offline',\n extra: connection.peers[data.userid] ? connection.peers[data.userid].extra : {}\n })\n break\n case 'extra-data-updated':\n if(connection.userid === data.data.remoteUserId) return\n if(!connection.peers[data.data.remoteUserId] || !data.data.extra) return\n connection.peers[data.data.remoteUserId].extra = data.data.extra\n connection.onExtraDataUpdated({\n userid: data.data.remoteUserId,\n extra: data.data.extra\n })\n break\n case 'renegotiate-needed':\n if(connection.userid !== data.data.remoteUserId) return\n if(!connection.peers[data.data.sender]) return\n connection.renegotiate(data.data.sender)\n break\n case 'mute-participant':\n console.warn(\"User \" + !data.data.all ? data.data.remoteUserId : connection.userid +\" muted by \"+data.data.sender)\n if(connection.userid !== data.data.remoteUserId && !data.data.all) return\n if(connection.userid === data.data.sender && data.data.all) return\n if(connection.extra.audioMuted) return\n connection.attachStreams.forEach( s =>{\n s.mute(\"audio\")\n connection.extra.audioMuted = true\n connection.updateExtraData()\n })\n if(connection.onMuteForcibly) connection.onMuteForcibly()\n break\n case 'kick-participant':\n console.warn(\"User \" + data.data.remoteUserId +\" kicked by \"+data.data.sender)\n if(connection.userid !== data.data.remoteUserId) return\n connection.leave()\n if(connection.onKicked)\n connection.onKicked();\n else\n window.location.href = window.location.href + '/ended'\n break\n }\n })\n signalRConnection.onreconnected(connectionId => {\n console.log('signalr reconnected. state' + signalRConnection.state);\n signalRConnection.invoke('JoinRoom', channelName).then(function(){\n connection.socket.emit('presence', {\n userid: connection.userid,\n isOnline: true\n })\n })\n });\n // start the hub\n signalRConnection.start().then(function () {\n if (connection.enableLogs) {\n console.info('SignalR connection is opened.')\n }\n signalRConnection.invoke('JoinRoom', channelName).then(function(){\n\n connection.socket.emit('presence', {\n userid: connection.userid,\n isOnline: true\n })\n\n if (connectCallback) connectCallback(connection.socket)\n })\n }).catch( e => {\n console.error('Error while establishing connection. Error: ' + e.message)\n console.error(JSON.stringify(e, Object.getOwnPropertyNames(e)))\n alert(JSON.stringify(e, Object.getOwnPropertyNames(e)))\n })\n\n connection.socket.emit = function (eventName, data, callback) {\n if (eventName === 'changed-uuid') return\n if (data.message && data.message.shiftedModerationControl) return\n\n if (eventName === 'extra-data-updated'){\n data = {\n extra: data,\n remoteUserId: connection.userid\n }\n }\n\n connection.socket.send({\n eventName: eventName,\n data: data\n })\n\n if (callback) {\n callback = callback || function () { }\n\n if (eventName === 'open-room' || eventName === 'join-room'){\n callback(true, null)\n } else {\n callback()\n }\n }\n }\n\n var mPeer = connection.multiPeersHandler\n\n function onMessagesCallback (message) {\n if (message.remoteUserId !== connection.userid && !message.message.newParticipationRequest) return\n\n if (connection.peers[message.sender] && connection.peers[message.sender].extra !== message.message.extra \n && message.message.extra) {\n connection.peers[message.sender].extra = message.message.extra\n connection.onExtraDataUpdated({\n userid: message.sender,\n extra: message.message.extra\n })\n }\n\n if (message.message.streamSyncNeeded && connection.peers[message.sender]) {\n var stream = connection.streamEvents[message.message.streamid]\n if (!stream || !stream.stream) {\n return\n }\n\n var action = message.message.action\n\n if (action === 'ended' || action === 'inactive' || action === 'stream-removed') {\n if (connection.peersBackup[stream.userid]) {\n stream.extra = connection.peersBackup[stream.userid].extra\n }\n connection.onstreamended(stream)\n return\n }\n\n var type = message.message.type !== 'both' ? message.message.type : null\n\n if (typeof stream.stream[action] === 'function') {\n stream.stream[action](type)\n }\n return\n }\n\n if (message.message === 'dropPeerConnection') {\n connection.deletePeer(message.sender)\n return\n }\n\n if (message.message.allParticipants) {\n if (message.message.allParticipants.indexOf(message.sender) === -1) {\n message.message.allParticipants.push(message.sender)\n }\n\n message.message.allParticipants.forEach(function (participant) {\n mPeer[!connection.peers[participant] ? 'createNewPeer' : 'renegotiatePeer'](participant, {\n localPeerSdpConstraints: {\n OfferToReceiveAudio: connection.sdpConstraints.mandatory.OfferToReceiveAudio,\n OfferToReceiveVideo: connection.sdpConstraints.mandatory.OfferToReceiveVideo\n },\n remotePeerSdpConstraints: {\n OfferToReceiveAudio: connection.session.oneway ? !!connection.session.audio : connection.sdpConstraints.mandatory.OfferToReceiveAudio,\n OfferToReceiveVideo: connection.session.oneway ? !!connection.session.video || !!connection.session.screen : connection.sdpConstraints.mandatory.OfferToReceiveVideo\n },\n isOneWay: !!connection.session.oneway || connection.direction === 'one-way',\n isDataOnly: isData(connection.session)\n })\n })\n return\n }\n\n if (message.message.newParticipant) {\n if (message.message.newParticipant === connection.userid) return\n if (connection.peers[message.message.newParticipant]) return\n\n mPeer.createNewPeer(message.message.newParticipant, message.message.userPreferences || {\n localPeerSdpConstraints: {\n OfferToReceiveAudio: connection.sdpConstraints.mandatory.OfferToReceiveAudio,\n OfferToReceiveVideo: connection.sdpConstraints.mandatory.OfferToReceiveVideo\n },\n remotePeerSdpConstraints: {\n OfferToReceiveAudio: connection.session.oneway ? !!connection.session.audio : connection.sdpConstraints.mandatory.OfferToReceiveAudio,\n OfferToReceiveVideo: connection.session.oneway ? !!connection.session.video || !!connection.session.screen : connection.sdpConstraints.mandatory.OfferToReceiveVideo\n },\n isOneWay: !!connection.session.oneway || connection.direction === 'one-way',\n isDataOnly: isData(connection.session)\n })\n return\n }\n\n if (message.message.readyForOffer) {\n if (connection.attachStreams.length) {\n connection.waitingForLocalMedia = false\n }\n\n if (connection.waitingForLocalMedia) {\n // if someone is waiting to join you\n // make sure that we've local media before making a handshake\n setTimeout(function () {\n onMessagesCallback(message)\n }, 1)\n return\n }\n }\n\n if (message.message.newParticipationRequest && message.sender !== connection.userid) {\n if (connection.peers[message.sender]) {\n connection.deletePeer(message.sender)\n }\n\n var userPreferences = {\n extra: message.extra || {},\n localPeerSdpConstraints: message.message.remotePeerSdpConstraints || {\n OfferToReceiveAudio: connection.sdpConstraints.mandatory.OfferToReceiveAudio,\n OfferToReceiveVideo: connection.sdpConstraints.mandatory.OfferToReceiveVideo\n },\n remotePeerSdpConstraints: message.message.localPeerSdpConstraints || {\n OfferToReceiveAudio: connection.session.oneway ? !!connection.session.audio : connection.sdpConstraints.mandatory.OfferToReceiveAudio,\n OfferToReceiveVideo: connection.session.oneway ? !!connection.session.video || !!connection.session.screen : connection.sdpConstraints.mandatory.OfferToReceiveVideo\n },\n isOneWay: typeof message.message.isOneWay !== 'undefined' ? message.message.isOneWay : !!connection.session.oneway || connection.direction === 'one-way',\n isDataOnly: typeof message.message.isDataOnly !== 'undefined' ? message.message.isDataOnly : isData(connection.session),\n dontGetRemoteStream: typeof message.message.isOneWay !== 'undefined' ? message.message.isOneWay : !!connection.session.oneway || connection.direction === 'one-way',\n dontAttachLocalStream: !!message.message.dontGetRemoteStream,\n connectionDescription: message,\n successCallback: function () { }\n }\n\n connection.onNewParticipant(message.sender, userPreferences)\n return\n }\n\n if (message.message.changedUUID) {\n if (connection.peers[message.message.oldUUID]) {\n connection.peers[message.message.newUUID] = connection.peers[message.message.oldUUID]\n delete connection.peers[message.message.oldUUID]\n }\n }\n\n if (message.message.userLeft) {\n mPeer.onUserLeft(message.sender)\n\n if (message.message.autoCloseEntireSession) {\n connection.leave()\n }\n\n //Patch for deleting perticipant block on firefox\n if (connection.DetectRTC.browser.name === 'Firefox'\n || !connection.peers[message.sender]){\n connection.onstreamended({streamid: null, userid: message.sender})\n }\n\n return\n }\n\n mPeer.addNegotiatedMessage(message.message, message.sender)\n }\n}\nexport default WebRtcSignalR\n","/* eslint-disable */\nimport WebRtcSignalR from \"@/WebRtcHub\";\nimport RTCUtils from \"@/RTCUtils\";\nimport RTCMultiConnection from \"rtcmulticonnection\";\nimport { v4 as uuidv4 } from \"uuid\";\n\nexport default class PeerMeetingRtcMulticonnection {\n detectRTC = require(\"detectrtc\");\n connection = null;\n userid = null;\n patrticipantsFixTimer = null;\n patrticipantsCardFixTimer = null;\n\n constructor(store, router, participants) {\n this.store = store;\n this.router = router;\n this.participants = participants;\n this.connection = new RTCMultiConnection();\n this._generateUserId();\n this._configureExtraData();\n // using signalR for signaling\n this.connection.setCustomSocketHandler(WebRtcSignalR);\n this.configureMediaConstraints();\n this.connection.codecs.video = 'VP8';\n this.connection.session = {\n audio: true,\n video: true\n };\n this.connection.sdpConstraints.mandatory = {\n OfferToReceiveAudio: true,\n OfferToReceiveVideo: true\n };\n this._configureIceServers();\n this._configureKicked();\n this._configureMute();\n this._configureVoiceDetection();\n this._startParticipantFixTimer();\n }\n\n join(roomId){\n this.connection.join(roomId);\n }\n\n leave(){\n this.connection.leave();\n }\n\n stop(){\n clearInterval(this.patrticipantsFixTimer);\n clearInterval(this.patrticipantsCardFixTimer);\n this.connection.close();\n }\n\n setOnStream(callback) {\n this.connection.onstream = callback;\n }\n\n setOnUserStatusChanged(callback) {\n this.connection.onUserStatusChanged = callback;\n }\n\n setOnMuteForcibly(callback) {\n this.connection.onMuteForcibly = callback;\n }\n\n setOnStreamEnded(callback) {\n // Custom on stream ended event\n this.connection.onstreamended = function (event) {\n callback(event)\n var mediaElement = document.getElementById(event.streamid)\n if (mediaElement) {\n mediaElement.parentNode.removeChild(mediaElement)\n }\n }\n }\n\n configureMediaError(callback){\n RTCUtils.ConfigureMediaError(\n this.connection,\n this.detectRTC, \n this.store.state.application.deviceSettings,\n callback);\n }\n\n configureMediaConstraints(){\n this.connection.mediaConstraints = {\n audio: this.store.state.application.deviceSettings.audioInput \n ? { deviceId: this.store.state.application.deviceSettings.audioInput }\n : true,\n video: this.store.state.application.deviceSettings.videoInput \n ? { deviceId: this.store.state.application.deviceSettings.videoInput }\n : true\n };\n }\n\n _generateUserId() {\n this.connection.userid = uuidv4() + \"|\" + this.store.state.application.profile.name;\n this.userid = this.connection.userid;\n }\n\n _configureExtraData() {\n this.connection.extra = {\n profile: this.store.state.application.profile,\n audioMuted: false,\n videoMuted: false,\n speacking: false\n };\n }\n\n _configureIceServers() {\n if(this.store.state.application.turnSettings != null){\n if(this.store.state.application.turnOnly){\n this.connection.iceServers = [];\n this.connection.candidates.host = false;\n this.connection.iceTransportPolicy = 'relay';\n }\n this.connection.iceServers.push({\n urls: this.store.state.application.turnSettings.uris[0],\n credential: this.store.state.application.turnSettings.password,\n username: this.store.state.application.turnSettings.username\n });\n }\n }\n\n _configureKicked(){\n var self = this;\n this.connection.onKicked = function(){\n self.router.push(window.location.pathname + '/ended');\n }\n }\n\n _configureMute(){\n var self = this;\n // overriding the event to replace the poster XD\n this.connection.onmute = function(e) {\n if (!e || !e.mediaElement) return\n if (e.muteType === 'both' || e.muteType === 'video') {\n e.mediaElement.hidden = true\n } else if (e.muteType === 'audio') {\n e.mediaElement.muted = true;\n }\n };\n \n // Overriding the event for fix mute local media element after unmute on all\n var originalOnUnmute = this.connection.onunmute\n this.connection.onunmute = function(e){\n originalOnUnmute(e)\n if(!e || !e.mediaElement) return\n if(e.userid == self.connection.userid)\n e.mediaElement.muted = true\n if(e.mediaElement.tagName == \"VIDEO\" && e.unmuteType == 'video')\n e.mediaElement.hidden = false\n }\n }\n\n _configureVoiceDetection(){\n var self = this;\n this.connection.onspeaking = function(e){\n self.connection.extra.speacking = true\n self.connection.updateExtraData()\n }\n \n this.connection.onsilence = function(e) {\n self.connection.extra.speacking = false\n self.connection.updateExtraData()\n }\n }\n\n _startParticipantFixTimer() {\n var self = this;\n if (this.patrticipantsFixTimer != null)\n clearInterval(this.patrticipantsFixTimer);\n // Fix for clear participant cards who disconnected without event\n this.patrticipantsFixTimer = setInterval(() => {\n var connectedParticipants = self.connection.getAllParticipants()\n for (const key of self.participants.keys()) {\n if ( (connectedParticipants.indexOf(key) == -1 && self.connection.userid != key)\n || (self.connection.peers[key] && self.connection.peers[key].peer.connectionState === \"failed\")){\n self.connection.onstreamended({ userid: key })\n }\n }\n }, 5000)\n\n if (this.patrticipantsCardFixTimer != null)\n clearInterval(this.patrticipantsCardFixTimer);\n\n // Fix peer connections without cards\n this.patrticipantsCardFixTimer = setInterval(() => {\n self.connection.peers.getAllParticipants().forEach(e => {\n if (!self.participants.has(e)\n && self.connection.peers[e]\n && self.connection.peers[e].peer\n && self.connection.peers[e].peer.connectionState\n && self.connection.peers[e].peer.connectionState === \"connected\") {\n\n if (!self.connection.peers[e].peer.participantCardError)\n self.connection.peers[e].peer.participantCardError = 0\n self.connection.peers[e].peer.participantCardError += 1\n\n if (self.connection.peers[e].peer.participantCardError > 6) {\n self.connection.onstream({\n streamid: null,\n userid: e,\n extra: self.connection.peers[e].extra,\n cardfix: true,\n mediaElement: document.createElement(\"div\"),\n })\n self.connection.peers[e].peer.participantCardError = 0\n }\n } else {\n self.connection.peers[e].peer.participantCardError = 0\n }\n })\n if (!self.participants.has(self.connection.userid)) {\n if (!self.connection.selfCardError)\n self.connection.selfCardError = 0\n\n self.connection.selfCardError += 1\n if (self.connection.selfCardError > 6) {\n RTCUtils.CreateFakeStream(self.connection, self.connection.multiPeersHandler, self.connection.onstream)\n self.connection.selfCardError = 0\n }\n } else {\n self.connection.selfCardError = 0\n }\n }, 2000)\n }\n}","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"card text-white user-block\",class:[\n this.fullscreen ? 'pseudo-fullscreen' : '',\n this.halfscreen ? 'half-screen' : '',\n this.streamEvent.extra.speacking ? 'speaking' : '' ],style:(this.halfscreen\n ? 'max-height: unset!important;height: 80%!important; max-width: unset;'\n : ''),attrs:{\"id\":'card-' + this.streamEvent.userid}},[_c('span',{staticClass:\"username-span\"},[_vm._v(_vm._s(this.profile.username))]),_c('b-avatar',{class:[\n this.state.halfScreenMode && !this.halfscreen ? 'b-avatar-half' : '',\n this.profile.avatar ? 'has-avatar' : '' ],attrs:{\"src\":this.profile.avatar,\"text\":this.getInitials()}}),_c('b-button',{staticClass:\"fullscreen-button\",attrs:{\"size\":\"sm\",\"variant\":\"outline-light\",\"disabled\":this.state.halfScreenMode},on:{\"click\":_vm.switchFullscreen}},[(!this.fullscreen)?_c('b-icon',{attrs:{\"icon\":\"fullscreen\"}}):_c('b-icon',{attrs:{\"icon\":\"fullscreen-exit\"}})],1),(this.streamEvent.type != 'local')?_c('connection-info',{attrs:{\"userId\":this.streamEvent.userid,\"stats\":this.stats}}):_vm._e(),_c('b-icon',{staticClass:\"audio-muted-icon\",style:(this.streamEvent.extra.audioMuted ? 'color: red' : ''),attrs:{\"icon\":this.streamEvent.extra.audioMuted ? 'mic-mute' : 'mic'}}),_c('b-icon',{staticClass:\"video-muted-icon\",style:(this.streamEvent.extra.videoMuted ? 'color: red' : ''),attrs:{\"icon\":this.streamEvent.extra.videoMuted ? 'camera-video-off' : 'camera-video'}}),(this.streamEvent.type != 'local')?_c('control-menu',{attrs:{\"userId\":this.streamEvent.userid,\"connection\":this.connection}}):_vm._e(),_c('div',{staticClass:\"switch-half-screen\",on:{\"click\":_vm.switchHalfScreen}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","// Copyright 2021 Klabukov Erik.\n// SPDX-License-Identifier: GPL-3.0-only\n/*eslint-disable*/\nexport default class PeerStats {\n timer = null;\n stats = {\n bandwidth: 0,\n stunOrTurn: { local: \"\", remote: \"\" },\n ips: { local: \"\", remote: \"\" },\n transport: { local: \"\", remote: \"\" },\n data: { send: 0, receive: 0 },\n packets: { send: 0, receive: 0 },\n codecs: { local: \"\", remote: \"\" },\n connectionState: \"\",\n rtt: 0.0,\n };\n old = {\n data: { send: 0, receive: 0 },\n timestamp: 0\n }\n isFirefox = false\n\n constructor(PeerConnection) {\n this.PeerConnection = PeerConnection\n this.old.timestamp = new Date().getTime();\n this.isFirefox = navigator.userAgent.indexOf(\"Firefox\") != -1\n }\n\n start(callback, interval) {\n if (!callback)\n throw \"Callback cannot be null\";\n interval = interval || 5000;\n var self = this;\n this.timer = setInterval(() => {\n self.PeerConnection.getStats().then(r => {\n try{\n self.parseReport(r);\n callback(self.stats);\n }catch(e){\n console.error(e);\n }\n });\n }, interval)\n }\n\n stop() {\n if (!this.timer) return;\n clearInterval(this.timer);\n }\n\n parseReport(report) {\n var self = this;\n this.stats.connectionState = this.isFirefox\n ? this.PeerConnection.iceConnectionState\n : this.PeerConnection.connectionState;\n report.forEach(r => {\n if (r.type == 'transport' || (self.isFirefox && r.type == 'candidate-pair' && r.nominated)) {\n var perSecond = (r.timestamp - self.old.timestamp) / 1000;\n perSecond = perSecond < 1 ? 1 : perSecond;\n self.old.timestamp = r.timestamp;\n\n //Bandwidth and bytes send / received\n self.stats.data.send = r.bytesSent;\n self.stats.data.receive = r.bytesReceived;\n self.stats.bandwidth = ((r.bytesSent - self.old.data.send) + (r.bytesReceived - self.old.data.receive)) / perSecond;\n self.old.data.send = r.bytesSent;\n self.old.data.receive = r.bytesReceived;\n self.stats.packets.send = r.packetsSent;\n self.stats.packets.receive = r.packetsReceived;\n\n //candidate pair\n var candidatePair = self.isFirefox ? r : report.get(r.selectedCandidatePairId);\n self.stats.rtt = self.isFirefox ? 0 : (candidatePair.totalRoundTripTime / candidatePair.responsesReceived).toFixed(5)\n\n var localCandidate = report.get(candidatePair.localCandidateId);\n self.stats.ips.local = (self.isFirefox ? localCandidate.address : localCandidate.ip) + \":\" + localCandidate.port;\n self.stats.transport.local = localCandidate.protocol;\n self.stats.stunOrTurn.local =\n localCandidate.candidateType.indexOf(\"relay\") == -1\n ? \"STUN\"\n : \"TURN\";\n\n var remoteCandidate = report.get(candidatePair.remoteCandidateId);\n self.stats.ips.remote = (self.isFirefox ? remoteCandidate.address : remoteCandidate.ip) + \":\" + remoteCandidate.port;\n self.stats.transport.remote = remoteCandidate.protocol;\n self.stats.stunOrTurn.remote =\n remoteCandidate.candidateType.indexOf(\"relay\") == -1\n ? \"STUN\"\n : \"TURN\";\n return\n }\n });\n }\n\n}","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('b-button',{staticClass:\"connection-info\",attrs:{\"variant\":\"outline-light\",\"size\":\"sm\"},on:{\"click\":function($event){return _vm.$bvToast.show('toast-' + _vm.userId)}}},[_c('b-icon',{attrs:{\"icon\":\"bar-chart-fill\"}})],1),_c('b-toast',{staticClass:\"connection-toast\",attrs:{\"id\":'toast-' + this.userId,\"title\":\"Connection Info\",\"variant\":\"secondary\",\"static\":\"\",\"no-auto-hide\":\"\"}},[_vm._v(\"\\n Bandwidth: \"+_vm._s(this.bytesToSize(this.stats.bandwidth))),_c('br'),_vm._v(\"\\n State: \"+_vm._s(this.stats.connectionState)),_c('br'),_vm._v(\"\\n Local (\"+_vm._s(this.stats.stunOrTurn.local)+\"): \"+_vm._s(this.stats.ips.local)+\" \"+_vm._s(this.stats.transport.local)),_c('br'),_vm._v(\"\\n Remote (\"+_vm._s(this.stats.stunOrTurn.remote)+\"): \"+_vm._s(this.stats.ips.remote)+\" \"+_vm._s(this.stats.transport.remote)),_c('br'),_vm._v(\"\\n Data transfered: \"+_vm._s(this.bytesToSize(this.stats.data.receive))+\"\\n \"),_c('b-icon',{attrs:{\"icon\":\"arrow-down-up\"}}),_vm._v(\"\\n \"+_vm._s(this.bytesToSize(this.stats.data.send))+\" \"),_c('br'),_vm._v(\"\\n RTT: \"+_vm._s(this.stats.rtt)+\" s.\\n \")],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\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!./ConnectionInfo.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!./ConnectionInfo.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ConnectionInfo.vue?vue&type=template&id=be8c19f4&\"\nimport script from \"./ConnectionInfo.vue?vue&type=script&lang=js&\"\nexport * from \"./ConnectionInfo.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ConnectionInfo.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","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('b-dropdown',{staticClass:\"control-menu\",attrs:{\"dropleft\":\"\",\"variant\":\"outline-light\",\"size\":\"sm\"},scopedSlots:_vm._u([{key:\"button-content\",fn:function(){return [_c('em',[_c('b-icon',{attrs:{\"icon\":\"three-dots-vertical\"}})],1)]},proxy:true}])},[_c('b-dropdown-form',[_c('font-awesome-icon',{staticClass:\"volume-icon\",attrs:{\"icon\":{ prefix: 'fas', iconName: 'volume-up' }}}),_c('b-form-input',{staticClass:\"volume-range\",attrs:{\"type\":\"range\",\"min\":\"0\",\"max\":\"100\"},model:{value:(_vm.volume),callback:function ($$v) {_vm.volume=$$v},expression:\"volume\"}},[_vm._v(\"a\")])],1),_c('b-dropdown-divider'),_c('b-dropdown-item',{on:{\"click\":this.muteParticipant}},[_vm._v(_vm._s(_vm.$t(\"room.controlMenu.mute\")))]),_c('b-dropdown-item',{on:{\"click\":this.muteAllParticipants}},[_vm._v(_vm._s(_vm.$t(\"room.controlMenu.muteAll\")))]),_c('b-dropdown-item',{on:{\"click\":this.kickPatricipant}},[_vm._v(_vm._s(_vm.$t(\"room.controlMenu.kick\")))])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\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!./ControlMenu.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!./ControlMenu.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ControlMenu.vue?vue&type=template&id=46849551&\"\nimport script from \"./ControlMenu.vue?vue&type=script&lang=js&\"\nexport * from \"./ControlMenu.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ControlMenu.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","\n\n\n\n\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!./ParticipantBlock.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!./ParticipantBlock.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ParticipantBlock.vue?vue&type=template&id=1008d13e&\"\nimport script from \"./ParticipantBlock.vue?vue&type=script&lang=js&\"\nexport * from \"./ParticipantBlock.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ParticipantBlock.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","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"chat\"},[_c('b-list-group',{staticClass:\"chat-messages-list\",attrs:{\"id\":\"chat-messages-list\"}},_vm._l((this.listMessages),function(item){return _c('b-list-group-item',{key:item.id,attrs:{\"href\":\"#\"}},[_c('b-avatar',{staticClass:\"white-avatar message-avatar\",attrs:{\"text\":_vm.getInitials(item.user.name),\"src\":item.user.avatar}}),_c('div',{staticClass:\"message-body\"},[_c('span',{staticClass:\"chat-message-username\",attrs:{\"title\":item.date}},[_vm._v(\"\\n \"+_vm._s(item.user.name)+\"\\n \")]),_c('br'),_c('span',{staticClass:\"chat-message-text\"},[_c('vue-simple-markdown',{attrs:{\"source\":item.text}})],1)])],1)}),1),_c('div',{staticClass:\"chat-textarea\"},[_c('b-form-textarea',{attrs:{\"placeholder\":\"Write message\"},on:{\"keyup\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.sendMessage($event)}},model:{value:(_vm.messageText),callback:function ($$v) {_vm.messageText=$$v},expression:\"messageText\"}})],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\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!./Chat.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!./Chat.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Chat.vue?vue&type=template&id=f9af8444&\"\nimport script from \"./Chat.vue?vue&type=script&lang=js&\"\nexport * from \"./Chat.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Chat.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","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"room-controls\"},[_c('b-button',{on:{\"click\":_vm.toggleChat}},[_c('b-icon',{attrs:{\"icon\":_vm.state.chatOpened ? 'chat-left-dots-fill' : 'chat-left-dots'}}),_c('b-badge',{staticClass:\"new-messages-badge\",style:(this.$store.state.application.chat.hasNewMessages ? '' : 'visibility:hidden'),attrs:{\"pill\":\"\",\"variant\":\"info\"}})],1),_c('b-button',{attrs:{\"disabled\":!this.state.hasMicrophone,\"variant\":\"info\"},on:{\"click\":_vm.toggleAudio}},[_c('b-icon',{attrs:{\"icon\":_vm.state.audioEnabled ? 'mic' : 'mic-mute'}})],1),_c('b-button',{attrs:{\"variant\":\"danger\"},on:{\"click\":_vm.leave}},[_c('b-icon',{attrs:{\"icon\":\"telephone\"}})],1),_c('b-button',{attrs:{\"disabled\":!this.stateService.rtcConnection ||\n this.stateService.rtcConnection.dontCaptureUserMedia ||\n this.state.screenEnabled ||\n !this.state.hasWebcam,\"variant\":\"info\"},on:{\"click\":_vm.toggleVideo}},[_c('b-icon',{attrs:{\"icon\":_vm.state.videoEnabled ? 'camera-video' : 'camera-video-off'}})],1),(!this.DetectRTC.isMobileDevice)?_c('b-button',{on:{\"click\":_vm.shareScreen}},[_c('b-icon',{style:(_vm.state.screenEnabled ? 'color: red' : ''),attrs:{\"icon\":_vm.state.screenEnabled ? 'display-fill' : 'display'}})],1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\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!./ControlBar.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!./ControlBar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ControlBar.vue?vue&type=template&id=3d481022&\"\nimport script from \"./ControlBar.vue?vue&type=script&lang=js&\"\nexport * from \"./ControlBar.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ControlBar.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","\n\n\n\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!./Room.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!./Room.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Room.vue?vue&type=template&id=44b1af60&scoped=true&\"\nimport script from \"./Room.vue?vue&type=script&lang=js&\"\nexport * from \"./Room.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Room.vue?vue&type=style&index=0&id=44b1af60&scoped=true&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 \"44b1af60\",\n null\n \n)\n\nexport default component.exports","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!./Room.vue?vue&type=style&index=0&id=44b1af60&scoped=true&lang=css&\"","// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\n// Not exported from index\r\n/** @private */\r\nvar TextMessageFormat = /** @class */ (function () {\r\n function TextMessageFormat() {\r\n }\r\n TextMessageFormat.write = function (output) {\r\n return \"\" + output + TextMessageFormat.RecordSeparator;\r\n };\r\n TextMessageFormat.parse = function (input) {\r\n if (input[input.length - 1] !== TextMessageFormat.RecordSeparator) {\r\n throw new Error(\"Message is incomplete.\");\r\n }\r\n var messages = input.split(TextMessageFormat.RecordSeparator);\r\n messages.pop();\r\n return messages;\r\n };\r\n TextMessageFormat.RecordSeparatorCode = 0x1e;\r\n TextMessageFormat.RecordSeparator = String.fromCharCode(TextMessageFormat.RecordSeparatorCode);\r\n return TextMessageFormat;\r\n}());\r\nexport { TextMessageFormat };\r\n//# sourceMappingURL=TextMessageFormat.js.map","require('../../modules/es6.object.define-property');\nvar $Object = require('../../modules/_core').Object;\nmodule.exports = function defineProperty(it, key, desc) {\n return $Object.defineProperty(it, key, desc);\n};\n","var $export = require('./_export');\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperty: require('./_object-dp').f });\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\nimport { TextMessageFormat } from \"./TextMessageFormat\";\r\nimport { isArrayBuffer } from \"./Utils\";\r\n/** @private */\r\nvar HandshakeProtocol = /** @class */ (function () {\r\n function HandshakeProtocol() {\r\n }\r\n // Handshake request is always JSON\r\n HandshakeProtocol.prototype.writeHandshakeRequest = function (handshakeRequest) {\r\n return TextMessageFormat.write(JSON.stringify(handshakeRequest));\r\n };\r\n HandshakeProtocol.prototype.parseHandshakeResponse = function (data) {\r\n var responseMessage;\r\n var messageData;\r\n var remainingData;\r\n if (isArrayBuffer(data) || (typeof Buffer !== \"undefined\" && data instanceof Buffer)) {\r\n // Format is binary but still need to read JSON text from handshake response\r\n var binaryData = new Uint8Array(data);\r\n var separatorIndex = binaryData.indexOf(TextMessageFormat.RecordSeparatorCode);\r\n if (separatorIndex === -1) {\r\n throw new Error(\"Message is incomplete.\");\r\n }\r\n // content before separator is handshake response\r\n // optional content after is additional messages\r\n var responseLength = separatorIndex + 1;\r\n messageData = String.fromCharCode.apply(null, binaryData.slice(0, responseLength));\r\n remainingData = (binaryData.byteLength > responseLength) ? binaryData.slice(responseLength).buffer : null;\r\n }\r\n else {\r\n var textData = data;\r\n var separatorIndex = textData.indexOf(TextMessageFormat.RecordSeparator);\r\n if (separatorIndex === -1) {\r\n throw new Error(\"Message is incomplete.\");\r\n }\r\n // content before separator is handshake response\r\n // optional content after is additional messages\r\n var responseLength = separatorIndex + 1;\r\n messageData = textData.substring(0, responseLength);\r\n remainingData = (textData.length > responseLength) ? textData.substring(responseLength) : null;\r\n }\r\n // At this point we should have just the single handshake message\r\n var messages = TextMessageFormat.parse(messageData);\r\n var response = JSON.parse(messages[0]);\r\n if (response.type) {\r\n throw new Error(\"Expected a handshake response from the server.\");\r\n }\r\n responseMessage = response;\r\n // multiple messages could have arrived with handshake\r\n // return additional data to be parsed as usual, or null if all parsed\r\n return [remainingData, responseMessage];\r\n };\r\n return HandshakeProtocol;\r\n}());\r\nexport { HandshakeProtocol };\r\n//# sourceMappingURL=HandshakeProtocol.js.map","/*! adapterjs - v0.15.5 - 2020-07-14 */\n\"use strict\";var AdapterJS=AdapterJS||window.AdapterJS||{};if(AdapterJS.options=AdapterJS.options||{},AdapterJS.options.getAllCams=!!AdapterJS.options.getAllCams,AdapterJS.options.hidePluginInstallPrompt=!!AdapterJS.options.hidePluginInstallPrompt,AdapterJS.options.forceSafariPlugin=!!AdapterJS.options.forceSafariPlugin,AdapterJS.VERSION=\"0.15.5\",AdapterJS.onwebrtcready=AdapterJS.onwebrtcready||function(isUsingPlugin){},AdapterJS._onwebrtcreadies=[],AdapterJS.webRTCReady=function(baseCallback){if(\"function\"!=typeof baseCallback)throw new Error(\"Callback provided is not a function\");var callback=function(){\"function\"==typeof window.require&&\"function\"==typeof AdapterJS._defineMediaSourcePolyfill&&AdapterJS._defineMediaSourcePolyfill(),baseCallback(null!==AdapterJS.WebRTCPlugin.plugin)};!0===AdapterJS.onwebrtcreadyDone?callback():AdapterJS._onwebrtcreadies.push(callback)},AdapterJS.WebRTCPlugin=AdapterJS.WebRTCPlugin||{},AdapterJS.WebRTCPlugin.pluginInfo=AdapterJS.WebRTCPlugin.pluginInfo||{prefix:\"Tem\",plugName:\"TemWebRTCPlugin\",pluginId:\"plugin0\",type:\"application/x-temwebrtcplugin\",onload:\"__TemWebRTCReady0\",portalLink:\"https://skylink.io/plugin/\",downloadLink:null,companyName:\"Temasys\",downloadLinks:{mac:\"https://bit.ly/webrtcpluginpkg\",win:\"https://bit.ly/webrtcpluginmsi\"}},void 0!==AdapterJS.WebRTCPlugin.pluginInfo.downloadLinks&&null!==AdapterJS.WebRTCPlugin.pluginInfo.downloadLinks&&(navigator.platform.match(/^Mac/i)?AdapterJS.WebRTCPlugin.pluginInfo.downloadLink=AdapterJS.WebRTCPlugin.pluginInfo.downloadLinks.mac:navigator.platform.match(/^Win/i)&&(AdapterJS.WebRTCPlugin.pluginInfo.downloadLink=AdapterJS.WebRTCPlugin.pluginInfo.downloadLinks.win)),AdapterJS.WebRTCPlugin.TAGS={NONE:\"none\",AUDIO:\"audio\",VIDEO:\"video\"},AdapterJS.WebRTCPlugin.pageId=Math.random().toString(36).slice(2),AdapterJS.WebRTCPlugin.plugin=null,AdapterJS.WebRTCPlugin.setLogLevel=null,AdapterJS.WebRTCPlugin.defineWebRTCInterface=null,AdapterJS.WebRTCPlugin.isPluginInstalled=null,AdapterJS.WebRTCPlugin.pluginInjectionInterval=null,AdapterJS.WebRTCPlugin.injectPlugin=null,AdapterJS.WebRTCPlugin.PLUGIN_STATES={NONE:0,INITIALIZING:1,INJECTING:2,INJECTED:3,READY:4},AdapterJS.WebRTCPlugin.pluginState=AdapterJS.WebRTCPlugin.PLUGIN_STATES.NONE,AdapterJS.onwebrtcreadyDone=!1,AdapterJS.WebRTCPlugin.PLUGIN_LOG_LEVELS={NONE:\"NONE\",ERROR:\"ERROR\",WARNING:\"WARNING\",INFO:\"INFO\",VERBOSE:\"VERBOSE\",SENSITIVE:\"SENSITIVE\"},AdapterJS.WebRTCPlugin.WaitForPluginReady=null,AdapterJS.WebRTCPlugin.callWhenPluginReady=null,AdapterJS.documentReady=function(){return\"interactive\"===document.readyState&&!!document.body||\"complete\"===document.readyState},window.__TemWebRTCReady0=function(){AdapterJS.documentReady()?(AdapterJS.WebRTCPlugin.pluginState=AdapterJS.WebRTCPlugin.PLUGIN_STATES.READY,AdapterJS.maybeThroughWebRTCReady()):setTimeout(__TemWebRTCReady0,100)},AdapterJS.maybeThroughWebRTCReady=function(){AdapterJS.onwebrtcreadyDone||(AdapterJS.onwebrtcreadyDone=!0,AdapterJS._onwebrtcreadies.length?AdapterJS._onwebrtcreadies.forEach(function(callback){\"function\"==typeof callback&&callback(null!==AdapterJS.WebRTCPlugin.plugin)}):\"function\"==typeof AdapterJS.onwebrtcready&&AdapterJS.onwebrtcready(null!==AdapterJS.WebRTCPlugin.plugin))},AdapterJS.TEXT={PLUGIN:{REQUIRE_INSTALLATION:\"This website requires you to install a WebRTC-enabling plugin to work on this browser.\",REQUIRE_RESTART:\"Your plugin is being downloaded. Please run the installer, and restart your browser to begin using it.\",NOT_SUPPORTED:\"Your browser does not support WebRTC.\",BUTTON:\"Install Now\"},REFRESH:{REQUIRE_REFRESH:\"Please refresh page\",BUTTON:\"Refresh Page\"}},AdapterJS._iceConnectionStates={starting:\"starting\",checking:\"checking\",connected:\"connected\",completed:\"connected\",done:\"completed\",disconnected:\"disconnected\",failed:\"failed\",closed:\"closed\"},AdapterJS._iceConnectionFiredStates=[],AdapterJS.isDefined=null,window.webrtcDetectedType=null,window.MediaStream=\"function\"==typeof MediaStream?MediaStream:null,window.MediaStreamTrack=\"function\"==typeof MediaStreamTrack?MediaStreamTrack:null,window.RTCPeerConnection=\"function\"==typeof RTCPeerConnection?RTCPeerConnection:null,window.RTCSessionDescription=\"function\"==typeof RTCSessionDescription?RTCSessionDescription:null,window.RTCIceCandidate=\"function\"==typeof RTCIceCandidate?RTCIceCandidate:null,window.getUserMedia=\"function\"==typeof getUserMedia?getUserMedia:null,window.attachMediaStream=null,window.reattachMediaStream=null,window.webrtcDetectedBrowser=null,window.webrtcDetectedVersion=null,window.webrtcMinimumVersion=null,window.webrtcDetectedDCSupport=null,AdapterJS.parseWebrtcDetectedBrowser=function(){var hasMatch=null;if(window.opr&&opr.addons||window.opera||navigator.userAgent.indexOf(\" OPR/\")>=0)hasMatch=navigator.userAgent.match(/OPR\\/(\\d+)/i)||[],window.webrtcDetectedBrowser=\"opera\",window.webrtcDetectedVersion=parseInt(hasMatch[1]||\"0\",10),window.webrtcMinimumVersion=26,window.webrtcDetectedType=\"webkit\",window.webrtcDetectedDCSupport=\"SCTP\";else if(navigator.userAgent.match(/Bowser\\/[0-9.]*/g)){hasMatch=navigator.userAgent.match(/Bowser\\/[0-9.]*/g)||[];var chromiumVersion=parseInt((navigator.userAgent.match(/Chrom(e|ium)\\/([0-9]+)\\./i)||[])[2]||\"0\",10);window.webrtcDetectedBrowser=\"bowser\",window.webrtcDetectedVersion=parseFloat((hasMatch[0]||\"0/0\").split(\"/\")[1],10),window.webrtcMinimumVersion=0,window.webrtcDetectedType=\"webkit\",window.webrtcDetectedDCSupport=chromiumVersion>30?\"SCTP\":\"RTP\"}else if(navigator.userAgent.indexOf(\"OPiOS\")>0)hasMatch=navigator.userAgent.match(/OPiOS\\/([0-9]+)\\./),window.webrtcDetectedBrowser=\"opera\",window.webrtcDetectedVersion=parseInt(hasMatch[1]||\"0\",10),window.webrtcMinimumVersion=0,window.webrtcDetectedType=null,window.webrtcDetectedDCSupport=null;else if(navigator.userAgent.indexOf(\"CriOS\")>0)hasMatch=navigator.userAgent.match(/CriOS\\/([0-9]+)\\./)||[],window.webrtcDetectedVersion=parseInt(hasMatch[1]||\"0\",10),window.webrtcMinimumVersion=0,window.webrtcDetectedType=null,window.webrtcDetectedBrowser=\"chrome\",window.webrtcDetectedDCSupport=null;else if(navigator.userAgent.indexOf(\"FxiOS\")>0)hasMatch=navigator.userAgent.match(/FxiOS\\/([0-9]+)\\./)||[],window.webrtcDetectedBrowser=\"firefox\",window.webrtcDetectedVersion=parseInt(hasMatch[1]||\"0\",10),window.webrtcMinimumVersion=0,window.webrtcDetectedType=null,window.webrtcDetectedDCSupport=null;else if(document.documentMode)hasMatch=/\\brv[ :]+(\\d+)/g.exec(navigator.userAgent)||[],window.webrtcDetectedBrowser=\"IE\",window.webrtcDetectedVersion=parseInt(hasMatch[1],10),window.webrtcMinimumVersion=9,window.webrtcDetectedType=\"plugin\",window.webrtcDetectedDCSupport=\"SCTP\",webrtcDetectedVersion||(hasMatch=/\\bMSIE[ :]+(\\d+)/g.exec(navigator.userAgent)||[],window.webrtcDetectedVersion=parseInt(hasMatch[1]||\"0\",10));else if(window.StyleMedia||navigator.userAgent.match(/Edge\\/(\\d+).(\\d+)$/))hasMatch=navigator.userAgent.match(/Edge\\/(\\d+).(\\d+)$/)||[],window.webrtcDetectedBrowser=\"edge\",window.webrtcDetectedVersion=parseFloat((hasMatch[0]||\"0/0\").split(\"/\")[1],10),window.webrtcMinimumVersion=13.10547,window.webrtcDetectedType=\"ms\",window.webrtcDetectedDCSupport=null;else if(\"undefined\"!=typeof InstallTrigger||navigator.userAgent.indexOf(\"irefox\")>0)hasMatch=navigator.userAgent.match(/Firefox\\/([0-9]+)\\./)||[],window.webrtcDetectedBrowser=\"firefox\",window.webrtcDetectedVersion=parseInt(hasMatch[1]||\"0\",10),window.webrtcMinimumVersion=33,window.webrtcDetectedType=\"moz\",window.webrtcDetectedDCSupport=\"SCTP\";else if(window.chrome&&window.chrome.webstore||navigator.userAgent.indexOf(\"Chrom\")>0)hasMatch=navigator.userAgent.match(/Chrom(e|ium)\\/([0-9]+)\\./i)||[],window.webrtcDetectedBrowser=\"chrome\",window.webrtcDetectedVersion=parseInt(hasMatch[2]||\"0\",10),window.webrtcMinimumVersion=38,window.webrtcDetectedType=\"webkit\",window.webrtcDetectedDCSupport=window.webrtcDetectedVersion>30?\"SCTP\":\"RTP\";else if(/constructor/i.test(window.HTMLElement)||function(p){return\"[object SafariRemoteNotification]\"===p.toString()}(!window.safari||safari.pushNotification)||navigator.userAgent.match(/AppleWebKit\\/(\\d+)\\./)||navigator.userAgent.match(/Version\\/(\\d+).(\\d+)/)){hasMatch=navigator.userAgent.match(/version\\/(\\d+)\\.(\\d+)/i)||[];var AppleWebKitBuild=navigator.userAgent.match(/AppleWebKit\\/(\\d+)/i)||[],isMobile=navigator.userAgent.match(/(iPhone|iPad)/gi),hasNativeImpl=AppleWebKitBuild.length>=1&&AppleWebKitBuild[1]>=604;if(window.webrtcDetectedBrowser=\"safari\",window.webrtcDetectedVersion=parseInt(hasMatch[1]||\"0\",10),window.webrtcMinimumVersion=7,isMobile)window.webrtcDetectedType=hasNativeImpl?\"AppleWebKit\":null;else{var majorVersion=window.webrtcDetectedVersion,minorVersion=parseInt(hasMatch[2]||\"0\",10),nativeImplIsOverridable=11==majorVersion&&minorVersion<2;window.webrtcDetectedType=!hasNativeImpl||AdapterJS.options.forceSafariPlugin&&nativeImplIsOverridable?\"plugin\":\"AppleWebKit\"}window.webrtcDetectedDCSupport=\"SCTP\"}AdapterJS.webrtcDetectedBrowser=window.webrtcDetectedBrowser,AdapterJS.webrtcDetectedVersion=window.webrtcDetectedVersion,AdapterJS.webrtcMinimumVersion=window.webrtcMinimumVersion,AdapterJS.webrtcDetectedType=window.webrtcDetectedType,AdapterJS.webrtcDetectedDCSupport=window.webrtcDetectedDCSupport},AdapterJS.addEvent=function(elem,evnt,func){elem.addEventListener?elem.addEventListener(evnt,func,!1):elem.attachEvent?elem.attachEvent(\"on\"+evnt,func):elem[evnt]=func},AdapterJS.renderNotificationBar=function(message,buttonText,buttonCallback){if(AdapterJS.documentReady()){var w=window,i=document.createElement(\"iframe\");i.name=\"adapterjs-alert\",i.style.position=\"fixed\",i.style.top=\"-41px\",i.style.left=0,i.style.right=0,i.style.width=\"100%\",i.style.height=\"40px\",i.style.backgroundColor=\"#ffffe1\",i.style.border=\"none\",i.style.borderBottom=\"1px solid #888888\",i.style.zIndex=\"9999999\",\"string\"==typeof i.style.webkitTransition?i.style.webkitTransition=\"all .5s ease-out\":\"string\"==typeof i.style.transition&&(i.style.transition=\"all .5s ease-out\"),document.body.appendChild(i);var c=i.contentWindow?i.contentWindow:i.contentDocument.document?i.contentDocument.document:i.contentDocument;c.document.open(),c.document.write(''+message+\"\"),buttonText&&\"function\"==typeof buttonCallback?(c.document.write(''),c.document.close(),AdapterJS.addEvent(c.document.getElementById(\"okay\"),\"click\",function(e){e.preventDefault();try{e.cancelBubble=!0}catch(error){}buttonCallback(e)}),AdapterJS.addEvent(c.document.getElementById(\"cancel\"),\"click\",function(e){w.document.body.removeChild(i)})):c.document.close(),setTimeout(function(){\"string\"==typeof i.style.webkitTransform?i.style.webkitTransform=\"translateY(40px)\":\"string\"==typeof i.style.transform?i.style.transform=\"translateY(40px)\":i.style.top=\"0px\"},300)}},window.requestUserMedia=\"function\"==typeof requestUserMedia?requestUserMedia:null,AdapterJS.parseWebrtcDetectedBrowser(),[\"webkit\",\"moz\",\"ms\",\"AppleWebKit\"].indexOf(AdapterJS.webrtcDetectedType)>-1){navigator.userAgent.match(/Edge\\/(\\d+).(\\d+)$/)&&window.RTCPeerConnection&&(window.msRTCPeerConnection=window.RTCPeerConnection),function(f){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=f();else if(\"function\"==typeof define&&define.amd)define([],f);else{var g;g=\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this,g.adapter=f()}}(function(){return function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=\"function\"==typeof require&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n||e)},l,l.exports,e,t,n,r)}return n[o].exports}for(var i=\"function\"==typeof require&&require,o=0;o=14393&&-1===url.indexOf(\"?transport=udp\"):(hasTurn=!0,!0)}),delete server.url,server.urls=isString?urls[0]:urls,!!urls.length}})}function getCommonCapabilities(localCapabilities,remoteCapabilities){var commonCapabilities={codecs:[],headerExtensions:[],fecMechanisms:[]},findCodecByPayloadType=function(pt,codecs){pt=parseInt(pt,10);for(var i=0;i0;i--)this._iceGatherers.push(new window.RTCIceGatherer({iceServers:config.iceServers,gatherPolicy:config.iceTransportPolicy}));else config.iceCandidatePoolSize=0;this._config=config,this.transceivers=[],this._sdpSessionId=SDPUtils.generateSessionId(),this._sdpSessionVersion=0,this._dtlsRole=void 0,this._isClosed=!1};Object.defineProperty(RTCPeerConnection.prototype,\"localDescription\",{configurable:!0,get:function(){return this._localDescription}}),Object.defineProperty(RTCPeerConnection.prototype,\"remoteDescription\",{configurable:!0,get:function(){return this._remoteDescription}}),RTCPeerConnection.prototype.onicecandidate=null,RTCPeerConnection.prototype.onaddstream=null,RTCPeerConnection.prototype.ontrack=null,RTCPeerConnection.prototype.onremovestream=null,RTCPeerConnection.prototype.onsignalingstatechange=null,RTCPeerConnection.prototype.oniceconnectionstatechange=null,RTCPeerConnection.prototype.onconnectionstatechange=null,RTCPeerConnection.prototype.onicegatheringstatechange=null,RTCPeerConnection.prototype.onnegotiationneeded=null,RTCPeerConnection.prototype.ondatachannel=null,RTCPeerConnection.prototype._dispatchEvent=function(name,event){this._isClosed||(this.dispatchEvent(event),\"function\"==typeof this[\"on\"+name]&&this[\"on\"+name](event))},RTCPeerConnection.prototype._emitGatheringStateChange=function(){var event=new Event(\"icegatheringstatechange\");this._dispatchEvent(\"icegatheringstatechange\",event)},RTCPeerConnection.prototype.getConfiguration=function(){return this._config},RTCPeerConnection.prototype.getLocalStreams=function(){return this.localStreams},RTCPeerConnection.prototype.getRemoteStreams=function(){return this.remoteStreams},RTCPeerConnection.prototype._createTransceiver=function(kind,doNotAdd){var hasBundleTransport=this.transceivers.length>0,transceiver={track:null,iceGatherer:null,iceTransport:null,dtlsTransport:null,localCapabilities:null,remoteCapabilities:null,rtpSender:null,rtpReceiver:null,kind:kind,mid:null,sendEncodingParameters:null,recvEncodingParameters:null,stream:null,associatedRemoteMediaStreams:[],wantReceive:!0};if(this.usingBundle&&hasBundleTransport)transceiver.iceTransport=this.transceivers[0].iceTransport,transceiver.dtlsTransport=this.transceivers[0].dtlsTransport;else{var transports=this._createIceAndDtlsTransports();transceiver.iceTransport=transports.iceTransport,transceiver.dtlsTransport=transports.dtlsTransport}return doNotAdd||this.transceivers.push(transceiver),transceiver},RTCPeerConnection.prototype.addTrack=function(track,stream){if(this._isClosed)throw makeError(\"InvalidStateError\",\"Attempted to call addTrack on a closed peerconnection.\");if(this.transceivers.find(function(s){return s.track===track}))throw makeError(\"InvalidAccessError\",\"Track already exists.\");for(var transceiver,i=0;i=15025)stream.getTracks().forEach(function(track){pc.addTrack(track,stream)});else{var clonedStream=stream.clone();stream.getTracks().forEach(function(track,idx){var clonedTrack=clonedStream.getTracks()[idx];track.addEventListener(\"enabled\",function(event){clonedTrack.enabled=event.enabled})}),clonedStream.getTracks().forEach(function(track){pc.addTrack(track,clonedStream)})}},RTCPeerConnection.prototype.removeTrack=function(sender){if(this._isClosed)throw makeError(\"InvalidStateError\",\"Attempted to call removeTrack on a closed peerconnection.\");if(!(sender instanceof window.RTCRtpSender))throw new TypeError(\"Argument 1 of RTCPeerConnection.removeTrack does not implement interface RTCRtpSender.\");var transceiver=this.transceivers.find(function(t){return t.rtpSender===sender});if(!transceiver)throw makeError(\"InvalidAccessError\",\"Sender was not created by this connection.\");var stream=transceiver.stream;transceiver.rtpSender.stop(),transceiver.rtpSender=null,transceiver.track=null,transceiver.stream=null,-1===this.transceivers.map(function(t){return t.stream}).indexOf(stream)&&this.localStreams.indexOf(stream)>-1&&this.localStreams.splice(this.localStreams.indexOf(stream),1),this._maybeFireNegotiationNeeded()},RTCPeerConnection.prototype.removeStream=function(stream){var pc=this;stream.getTracks().forEach(function(track){var sender=pc.getSenders().find(function(s){return s.track===track});sender&&pc.removeTrack(sender)})},RTCPeerConnection.prototype.getSenders=function(){return this.transceivers.filter(function(transceiver){return!!transceiver.rtpSender}).map(function(transceiver){return transceiver.rtpSender})},RTCPeerConnection.prototype.getReceivers=function(){return this.transceivers.filter(function(transceiver){return!!transceiver.rtpReceiver}).map(function(transceiver){return transceiver.rtpReceiver})},RTCPeerConnection.prototype._createIceGatherer=function(sdpMLineIndex,usingBundle){var pc=this;if(usingBundle&&sdpMLineIndex>0)return this.transceivers[0].iceGatherer;if(this._iceGatherers.length)return this._iceGatherers.shift();var iceGatherer=new window.RTCIceGatherer({iceServers:this._config.iceServers,gatherPolicy:this._config.iceTransportPolicy});return Object.defineProperty(iceGatherer,\"state\",{value:\"new\",writable:!0}),this.transceivers[sdpMLineIndex].bufferedCandidateEvents=[],this.transceivers[sdpMLineIndex].bufferCandidates=function(event){var end=!event.candidate||0===Object.keys(event.candidate).length;iceGatherer.state=end?\"completed\":\"gathering\",null!==pc.transceivers[sdpMLineIndex].bufferedCandidateEvents&&pc.transceivers[sdpMLineIndex].bufferedCandidateEvents.push(event)},iceGatherer.addEventListener(\"localcandidate\",this.transceivers[sdpMLineIndex].bufferCandidates),iceGatherer},RTCPeerConnection.prototype._gather=function(mid,sdpMLineIndex){var pc=this,iceGatherer=this.transceivers[sdpMLineIndex].iceGatherer;if(!iceGatherer.onlocalcandidate){var bufferedCandidateEvents=this.transceivers[sdpMLineIndex].bufferedCandidateEvents;this.transceivers[sdpMLineIndex].bufferedCandidateEvents=null,iceGatherer.removeEventListener(\"localcandidate\",this.transceivers[sdpMLineIndex].bufferCandidates),iceGatherer.onlocalcandidate=function(evt){if(!(pc.usingBundle&&sdpMLineIndex>0)){var event=new Event(\"icecandidate\");event.candidate={sdpMid:mid,sdpMLineIndex:sdpMLineIndex};var cand=evt.candidate,end=!cand||0===Object.keys(cand).length;if(end)\"new\"!==iceGatherer.state&&\"gathering\"!==iceGatherer.state||(iceGatherer.state=\"completed\");else{\"new\"===iceGatherer.state&&(iceGatherer.state=\"gathering\"),cand.component=1,cand.ufrag=iceGatherer.getLocalParameters().usernameFragment;var serializedCandidate=SDPUtils.writeCandidate(cand);event.candidate=Object.assign(event.candidate,SDPUtils.parseCandidate(serializedCandidate)),event.candidate.candidate=serializedCandidate,event.candidate.toJSON=function(){return{candidate:event.candidate.candidate,sdpMid:event.candidate.sdpMid,sdpMLineIndex:event.candidate.sdpMLineIndex,usernameFragment:event.candidate.usernameFragment}}}var sections=SDPUtils.getMediaSections(pc._localDescription.sdp);sections[event.candidate.sdpMLineIndex]+=end?\"a=end-of-candidates\\r\\n\":\"a=\"+event.candidate.candidate+\"\\r\\n\",pc._localDescription.sdp=SDPUtils.getDescription(pc._localDescription.sdp)+sections.join(\"\");var complete=pc.transceivers.every(function(transceiver){return transceiver.iceGatherer&&\"completed\"===transceiver.iceGatherer.state});\"gathering\"!==pc.iceGatheringState&&(pc.iceGatheringState=\"gathering\",pc._emitGatheringStateChange()),end||pc._dispatchEvent(\"icecandidate\",event),complete&&(pc._dispatchEvent(\"icecandidate\",new Event(\"icecandidate\")),pc.iceGatheringState=\"complete\",pc._emitGatheringStateChange())}},window.setTimeout(function(){bufferedCandidateEvents.forEach(function(e){iceGatherer.onlocalcandidate(e)})},0)}},RTCPeerConnection.prototype._createIceAndDtlsTransports=function(){var pc=this,iceTransport=new window.RTCIceTransport(null);iceTransport.onicestatechange=function(){pc._updateIceConnectionState(),pc._updateConnectionState()};var dtlsTransport=new window.RTCDtlsTransport(iceTransport);return dtlsTransport.ondtlsstatechange=function(){pc._updateConnectionState()},dtlsTransport.onerror=function(){Object.defineProperty(dtlsTransport,\"state\",{value:\"failed\",writable:!0}),pc._updateConnectionState()},{iceTransport:iceTransport,dtlsTransport:dtlsTransport}},RTCPeerConnection.prototype._disposeIceAndDtlsTransports=function(sdpMLineIndex){var iceGatherer=this.transceivers[sdpMLineIndex].iceGatherer;iceGatherer&&(delete iceGatherer.onlocalcandidate,delete this.transceivers[sdpMLineIndex].iceGatherer);var iceTransport=this.transceivers[sdpMLineIndex].iceTransport;iceTransport&&(delete iceTransport.onicestatechange,delete this.transceivers[sdpMLineIndex].iceTransport);var dtlsTransport=this.transceivers[sdpMLineIndex].dtlsTransport;dtlsTransport&&(delete dtlsTransport.ondtlsstatechange,delete dtlsTransport.onerror,delete this.transceivers[sdpMLineIndex].dtlsTransport)},RTCPeerConnection.prototype._transceive=function(transceiver,send,recv){var params=getCommonCapabilities(transceiver.localCapabilities,transceiver.remoteCapabilities);send&&transceiver.rtpSender&&(params.encodings=transceiver.sendEncodingParameters,params.rtcp={cname:SDPUtils.localCName,compound:transceiver.rtcpParameters.compound},transceiver.recvEncodingParameters.length&&(params.rtcp.ssrc=transceiver.recvEncodingParameters[0].ssrc),transceiver.rtpSender.send(params)),recv&&transceiver.rtpReceiver&¶ms.codecs.length>0&&(\"video\"===transceiver.kind&&transceiver.recvEncodingParameters&&edgeVersion<15019&&transceiver.recvEncodingParameters.forEach(function(p){delete p.rtx}),transceiver.recvEncodingParameters.length?params.encodings=transceiver.recvEncodingParameters:params.encodings=[{}],params.rtcp={compound:transceiver.rtcpParameters.compound},transceiver.rtcpParameters.cname&&(params.rtcp.cname=transceiver.rtcpParameters.cname),transceiver.sendEncodingParameters.length&&(params.rtcp.ssrc=transceiver.sendEncodingParameters[0].ssrc),transceiver.rtpReceiver.receive(params))},RTCPeerConnection.prototype.setLocalDescription=function(description){var pc=this;if(-1===[\"offer\",\"answer\"].indexOf(description.type))return Promise.reject(makeError(\"TypeError\",'Unsupported type \"'+description.type+'\"'));if(!isActionAllowedInSignalingState(\"setLocalDescription\",description.type,pc.signalingState)||pc._isClosed)return Promise.reject(makeError(\"InvalidStateError\",\"Can not set local \"+description.type+\" in state \"+pc.signalingState));var sections,sessionpart;if(\"offer\"===description.type)sections=SDPUtils.splitSections(description.sdp),sessionpart=sections.shift(),sections.forEach(function(mediaSection,sdpMLineIndex){var caps=SDPUtils.parseRtpParameters(mediaSection);pc.transceivers[sdpMLineIndex].localCapabilities=caps}),pc.transceivers.forEach(function(transceiver,sdpMLineIndex){pc._gather(transceiver.mid,sdpMLineIndex)});else if(\"answer\"===description.type){sections=SDPUtils.splitSections(pc._remoteDescription.sdp),sessionpart=sections.shift();var isIceLite=SDPUtils.matchPrefix(sessionpart,\"a=ice-lite\").length>0;sections.forEach(function(mediaSection,sdpMLineIndex){var transceiver=pc.transceivers[sdpMLineIndex],iceGatherer=transceiver.iceGatherer,iceTransport=transceiver.iceTransport,dtlsTransport=transceiver.dtlsTransport,localCapabilities=transceiver.localCapabilities,remoteCapabilities=transceiver.remoteCapabilities;if(!(SDPUtils.isRejected(mediaSection)&&0===SDPUtils.matchPrefix(mediaSection,\"a=bundle-only\").length||transceiver.rejected)){var remoteIceParameters=SDPUtils.getIceParameters(mediaSection,sessionpart),remoteDtlsParameters=SDPUtils.getDtlsParameters(mediaSection,sessionpart);isIceLite&&(remoteDtlsParameters.role=\"server\"),pc.usingBundle&&0!==sdpMLineIndex||(pc._gather(transceiver.mid,sdpMLineIndex),\"new\"===iceTransport.state&&iceTransport.start(iceGatherer,remoteIceParameters,isIceLite?\"controlling\":\"controlled\"),\"new\"===dtlsTransport.state&&dtlsTransport.start(remoteDtlsParameters));var params=getCommonCapabilities(localCapabilities,remoteCapabilities);pc._transceive(transceiver,params.codecs.length>0,!1)}})}return pc._localDescription={type:description.type,sdp:description.sdp},\"offer\"===description.type?pc._updateSignalingState(\"have-local-offer\"):pc._updateSignalingState(\"stable\"),Promise.resolve()},RTCPeerConnection.prototype.setRemoteDescription=function(description){var pc=this;if(-1===[\"offer\",\"answer\"].indexOf(description.type))return Promise.reject(makeError(\"TypeError\",'Unsupported type \"'+description.type+'\"'))\n;if(!isActionAllowedInSignalingState(\"setRemoteDescription\",description.type,pc.signalingState)||pc._isClosed)return Promise.reject(makeError(\"InvalidStateError\",\"Can not set remote \"+description.type+\" in state \"+pc.signalingState));var streams={};pc.remoteStreams.forEach(function(stream){streams[stream.id]=stream});var receiverList=[],sections=SDPUtils.splitSections(description.sdp),sessionpart=sections.shift(),isIceLite=SDPUtils.matchPrefix(sessionpart,\"a=ice-lite\").length>0,usingBundle=SDPUtils.matchPrefix(sessionpart,\"a=group:BUNDLE \").length>0;pc.usingBundle=usingBundle;var iceOptions=SDPUtils.matchPrefix(sessionpart,\"a=ice-options:\")[0];return pc.canTrickleIceCandidates=!!iceOptions&&iceOptions.substr(14).split(\" \").indexOf(\"trickle\")>=0,sections.forEach(function(mediaSection,sdpMLineIndex){var lines=SDPUtils.splitLines(mediaSection),kind=SDPUtils.getKind(mediaSection),rejected=SDPUtils.isRejected(mediaSection)&&0===SDPUtils.matchPrefix(mediaSection,\"a=bundle-only\").length,protocol=lines[0].substr(2).split(\" \")[2],direction=SDPUtils.getDirection(mediaSection,sessionpart),remoteMsid=SDPUtils.parseMsid(mediaSection),mid=SDPUtils.getMid(mediaSection)||SDPUtils.generateIdentifier();if(rejected||\"application\"===kind&&(\"DTLS/SCTP\"===protocol||\"UDP/DTLS/SCTP\"===protocol))return void(pc.transceivers[sdpMLineIndex]={mid:mid,kind:kind,protocol:protocol,rejected:!0});!rejected&&pc.transceivers[sdpMLineIndex]&&pc.transceivers[sdpMLineIndex].rejected&&(pc.transceivers[sdpMLineIndex]=pc._createTransceiver(kind,!0));var transceiver,iceGatherer,iceTransport,dtlsTransport,rtpReceiver,sendEncodingParameters,recvEncodingParameters,localCapabilities,track,remoteIceParameters,remoteDtlsParameters,remoteCapabilities=SDPUtils.parseRtpParameters(mediaSection);rejected||(remoteIceParameters=SDPUtils.getIceParameters(mediaSection,sessionpart),remoteDtlsParameters=SDPUtils.getDtlsParameters(mediaSection,sessionpart),remoteDtlsParameters.role=\"client\"),recvEncodingParameters=SDPUtils.parseRtpEncodingParameters(mediaSection);var rtcpParameters=SDPUtils.parseRtcpParameters(mediaSection),isComplete=SDPUtils.matchPrefix(mediaSection,\"a=end-of-candidates\",sessionpart).length>0,cands=SDPUtils.matchPrefix(mediaSection,\"a=candidate:\").map(function(cand){return SDPUtils.parseCandidate(cand)}).filter(function(cand){return 1===cand.component});if((\"offer\"===description.type||\"answer\"===description.type)&&!rejected&&usingBundle&&sdpMLineIndex>0&&pc.transceivers[sdpMLineIndex]&&(pc._disposeIceAndDtlsTransports(sdpMLineIndex),pc.transceivers[sdpMLineIndex].iceGatherer=pc.transceivers[0].iceGatherer,pc.transceivers[sdpMLineIndex].iceTransport=pc.transceivers[0].iceTransport,pc.transceivers[sdpMLineIndex].dtlsTransport=pc.transceivers[0].dtlsTransport,pc.transceivers[sdpMLineIndex].rtpSender&&pc.transceivers[sdpMLineIndex].rtpSender.setTransport(pc.transceivers[0].dtlsTransport),pc.transceivers[sdpMLineIndex].rtpReceiver&&pc.transceivers[sdpMLineIndex].rtpReceiver.setTransport(pc.transceivers[0].dtlsTransport)),\"offer\"!==description.type||rejected)\"answer\"!==description.type||rejected||(transceiver=pc.transceivers[sdpMLineIndex],iceGatherer=transceiver.iceGatherer,iceTransport=transceiver.iceTransport,dtlsTransport=transceiver.dtlsTransport,rtpReceiver=transceiver.rtpReceiver,sendEncodingParameters=transceiver.sendEncodingParameters,localCapabilities=transceiver.localCapabilities,pc.transceivers[sdpMLineIndex].recvEncodingParameters=recvEncodingParameters,pc.transceivers[sdpMLineIndex].remoteCapabilities=remoteCapabilities,pc.transceivers[sdpMLineIndex].rtcpParameters=rtcpParameters,cands.length&&\"new\"===iceTransport.state&&(!isIceLite&&!isComplete||usingBundle&&0!==sdpMLineIndex?cands.forEach(function(candidate){maybeAddCandidate(transceiver.iceTransport,candidate)}):iceTransport.setRemoteCandidates(cands)),usingBundle&&0!==sdpMLineIndex||(\"new\"===iceTransport.state&&iceTransport.start(iceGatherer,remoteIceParameters,\"controlling\"),\"new\"===dtlsTransport.state&&dtlsTransport.start(remoteDtlsParameters)),pc._transceive(transceiver,\"sendrecv\"===direction||\"recvonly\"===direction,\"sendrecv\"===direction||\"sendonly\"===direction),!rtpReceiver||\"sendrecv\"!==direction&&\"sendonly\"!==direction?delete transceiver.rtpReceiver:(track=rtpReceiver.track,remoteMsid?(streams[remoteMsid.stream]||(streams[remoteMsid.stream]=new window.MediaStream),addTrackToStreamAndFireEvent(track,streams[remoteMsid.stream]),receiverList.push([track,rtpReceiver,streams[remoteMsid.stream]])):(streams.default||(streams.default=new window.MediaStream),addTrackToStreamAndFireEvent(track,streams.default),receiverList.push([track,rtpReceiver,streams.default]))));else{transceiver=pc.transceivers[sdpMLineIndex]||pc._createTransceiver(kind),transceiver.mid=mid,transceiver.iceGatherer||(transceiver.iceGatherer=pc._createIceGatherer(sdpMLineIndex,usingBundle)),cands.length&&\"new\"===transceiver.iceTransport.state&&(!isComplete||usingBundle&&0!==sdpMLineIndex?cands.forEach(function(candidate){maybeAddCandidate(transceiver.iceTransport,candidate)}):transceiver.iceTransport.setRemoteCandidates(cands)),localCapabilities=window.RTCRtpReceiver.getCapabilities(kind),edgeVersion<15019&&(localCapabilities.codecs=localCapabilities.codecs.filter(function(codec){return\"rtx\"!==codec.name})),sendEncodingParameters=transceiver.sendEncodingParameters||[{ssrc:1001*(2*sdpMLineIndex+2)}];var isNewTrack=!1;if(\"sendrecv\"===direction||\"sendonly\"===direction){if(isNewTrack=!transceiver.rtpReceiver,rtpReceiver=transceiver.rtpReceiver||new window.RTCRtpReceiver(transceiver.dtlsTransport,kind),isNewTrack){var stream;track=rtpReceiver.track,remoteMsid&&\"-\"===remoteMsid.stream||(remoteMsid?(streams[remoteMsid.stream]||(streams[remoteMsid.stream]=new window.MediaStream,Object.defineProperty(streams[remoteMsid.stream],\"id\",{get:function(){return remoteMsid.stream}})),Object.defineProperty(track,\"id\",{get:function(){return remoteMsid.track}}),stream=streams[remoteMsid.stream]):(streams.default||(streams.default=new window.MediaStream),stream=streams.default)),stream&&(addTrackToStreamAndFireEvent(track,stream),transceiver.associatedRemoteMediaStreams.push(stream)),receiverList.push([track,rtpReceiver,stream])}}else transceiver.rtpReceiver&&transceiver.rtpReceiver.track&&(transceiver.associatedRemoteMediaStreams.forEach(function(s){var nativeTrack=s.getTracks().find(function(t){return t.id===transceiver.rtpReceiver.track.id});nativeTrack&&removeTrackFromStreamAndFireEvent(nativeTrack,s)}),transceiver.associatedRemoteMediaStreams=[]);transceiver.localCapabilities=localCapabilities,transceiver.remoteCapabilities=remoteCapabilities,transceiver.rtpReceiver=rtpReceiver,transceiver.rtcpParameters=rtcpParameters,transceiver.sendEncodingParameters=sendEncodingParameters,transceiver.recvEncodingParameters=recvEncodingParameters,pc._transceive(pc.transceivers[sdpMLineIndex],!1,isNewTrack)}}),void 0===pc._dtlsRole&&(pc._dtlsRole=\"offer\"===description.type?\"active\":\"passive\"),pc._remoteDescription={type:description.type,sdp:description.sdp},\"offer\"===description.type?pc._updateSignalingState(\"have-remote-offer\"):pc._updateSignalingState(\"stable\"),Object.keys(streams).forEach(function(sid){var stream=streams[sid];if(stream.getTracks().length){if(-1===pc.remoteStreams.indexOf(stream)){pc.remoteStreams.push(stream);var event=new Event(\"addstream\");event.stream=stream,window.setTimeout(function(){pc._dispatchEvent(\"addstream\",event)})}receiverList.forEach(function(item){var track=item[0],receiver=item[1];stream.id===item[2].id&&fireAddTrack(pc,track,receiver,[stream])})}}),receiverList.forEach(function(item){item[2]||fireAddTrack(pc,item[0],item[1],[])}),window.setTimeout(function(){pc&&pc.transceivers&&pc.transceivers.forEach(function(transceiver){transceiver.iceTransport&&\"new\"===transceiver.iceTransport.state&&transceiver.iceTransport.getRemoteCandidates().length>0&&transceiver.iceTransport.addRemoteCandidate({})})},4e3),Promise.resolve()},RTCPeerConnection.prototype.close=function(){this.transceivers.forEach(function(transceiver){transceiver.iceTransport&&transceiver.iceTransport.stop(),transceiver.dtlsTransport&&transceiver.dtlsTransport.stop(),transceiver.rtpSender&&transceiver.rtpSender.stop(),transceiver.rtpReceiver&&transceiver.rtpReceiver.stop()}),this._isClosed=!0,this._updateSignalingState(\"closed\")},RTCPeerConnection.prototype._updateSignalingState=function(newState){this.signalingState=newState;var event=new Event(\"signalingstatechange\");this._dispatchEvent(\"signalingstatechange\",event)},RTCPeerConnection.prototype._maybeFireNegotiationNeeded=function(){var pc=this;\"stable\"===this.signalingState&&!0!==this.needNegotiation&&(this.needNegotiation=!0,window.setTimeout(function(){if(pc.needNegotiation){pc.needNegotiation=!1;var event=new Event(\"negotiationneeded\");pc._dispatchEvent(\"negotiationneeded\",event)}},0))},RTCPeerConnection.prototype._updateIceConnectionState=function(){var newState,states={new:0,closed:0,checking:0,connected:0,completed:0,disconnected:0,failed:0};if(this.transceivers.forEach(function(transceiver){states[transceiver.iceTransport.state]++}),newState=\"new\",states.failed>0?newState=\"failed\":states.checking>0?newState=\"checking\":states.disconnected>0?newState=\"disconnected\":states.new>0?newState=\"new\":states.connected>0?newState=\"connected\":states.completed>0&&(newState=\"completed\"),newState!==this.iceConnectionState){this.iceConnectionState=newState;var event=new Event(\"iceconnectionstatechange\");this._dispatchEvent(\"iceconnectionstatechange\",event)}},RTCPeerConnection.prototype._updateConnectionState=function(){var newState,states={new:0,closed:0,connecting:0,connected:0,completed:0,disconnected:0,failed:0};if(this.transceivers.forEach(function(transceiver){states[transceiver.iceTransport.state]++,states[transceiver.dtlsTransport.state]++}),states.connected+=states.completed,newState=\"new\",states.failed>0?newState=\"failed\":states.connecting>0?newState=\"connecting\":states.disconnected>0?newState=\"disconnected\":states.new>0?newState=\"new\":states.connected>0&&(newState=\"connected\"),newState!==this.connectionState){this.connectionState=newState;var event=new Event(\"connectionstatechange\");this._dispatchEvent(\"connectionstatechange\",event)}},RTCPeerConnection.prototype.createOffer=function(){var pc=this;if(pc._isClosed)return Promise.reject(makeError(\"InvalidStateError\",\"Can not call createOffer after close\"));var numAudioTracks=pc.transceivers.filter(function(t){return\"audio\"===t.kind}).length,numVideoTracks=pc.transceivers.filter(function(t){return\"video\"===t.kind}).length,offerOptions=arguments[0];if(offerOptions){if(offerOptions.mandatory||offerOptions.optional)throw new TypeError(\"Legacy mandatory/optional constraints not supported.\");void 0!==offerOptions.offerToReceiveAudio&&(numAudioTracks=!0===offerOptions.offerToReceiveAudio?1:!1===offerOptions.offerToReceiveAudio?0:offerOptions.offerToReceiveAudio),void 0!==offerOptions.offerToReceiveVideo&&(numVideoTracks=!0===offerOptions.offerToReceiveVideo?1:!1===offerOptions.offerToReceiveVideo?0:offerOptions.offerToReceiveVideo)}for(pc.transceivers.forEach(function(transceiver){\"audio\"===transceiver.kind?--numAudioTracks<0&&(transceiver.wantReceive=!1):\"video\"===transceiver.kind&&--numVideoTracks<0&&(transceiver.wantReceive=!1)});numAudioTracks>0||numVideoTracks>0;)numAudioTracks>0&&(pc._createTransceiver(\"audio\"),numAudioTracks--),numVideoTracks>0&&(pc._createTransceiver(\"video\"),numVideoTracks--);var sdp=SDPUtils.writeSessionBoilerplate(pc._sdpSessionId,pc._sdpSessionVersion++);pc.transceivers.forEach(function(transceiver,sdpMLineIndex){var track=transceiver.track,kind=transceiver.kind,mid=transceiver.mid||SDPUtils.generateIdentifier();transceiver.mid=mid,transceiver.iceGatherer||(transceiver.iceGatherer=pc._createIceGatherer(sdpMLineIndex,pc.usingBundle));var localCapabilities=window.RTCRtpSender.getCapabilities(kind);edgeVersion<15019&&(localCapabilities.codecs=localCapabilities.codecs.filter(function(codec){return\"rtx\"!==codec.name})),localCapabilities.codecs.forEach(function(codec){\"H264\"===codec.name&&void 0===codec.parameters[\"level-asymmetry-allowed\"]&&(codec.parameters[\"level-asymmetry-allowed\"]=\"1\"),transceiver.remoteCapabilities&&transceiver.remoteCapabilities.codecs&&transceiver.remoteCapabilities.codecs.forEach(function(remoteCodec){codec.name.toLowerCase()===remoteCodec.name.toLowerCase()&&codec.clockRate===remoteCodec.clockRate&&(codec.preferredPayloadType=remoteCodec.payloadType)})}),localCapabilities.headerExtensions.forEach(function(hdrExt){(transceiver.remoteCapabilities&&transceiver.remoteCapabilities.headerExtensions||[]).forEach(function(rHdrExt){hdrExt.uri===rHdrExt.uri&&(hdrExt.id=rHdrExt.id)})});var sendEncodingParameters=transceiver.sendEncodingParameters||[{ssrc:1001*(2*sdpMLineIndex+1)}];track&&edgeVersion>=15019&&\"video\"===kind&&!sendEncodingParameters[0].rtx&&(sendEncodingParameters[0].rtx={ssrc:sendEncodingParameters[0].ssrc+1}),transceiver.wantReceive&&(transceiver.rtpReceiver=new window.RTCRtpReceiver(transceiver.dtlsTransport,kind)),transceiver.localCapabilities=localCapabilities,transceiver.sendEncodingParameters=sendEncodingParameters}),\"max-compat\"!==pc._config.bundlePolicy&&(sdp+=\"a=group:BUNDLE \"+pc.transceivers.map(function(t){return t.mid}).join(\" \")+\"\\r\\n\"),sdp+=\"a=ice-options:trickle\\r\\n\",pc.transceivers.forEach(function(transceiver,sdpMLineIndex){sdp+=writeMediaSection(transceiver,transceiver.localCapabilities,\"offer\",transceiver.stream,pc._dtlsRole),sdp+=\"a=rtcp-rsize\\r\\n\",!transceiver.iceGatherer||\"new\"===pc.iceGatheringState||0!==sdpMLineIndex&&pc.usingBundle||(transceiver.iceGatherer.getLocalCandidates().forEach(function(cand){cand.component=1,sdp+=\"a=\"+SDPUtils.writeCandidate(cand)+\"\\r\\n\"}),\"completed\"===transceiver.iceGatherer.state&&(sdp+=\"a=end-of-candidates\\r\\n\"))});var desc=new window.RTCSessionDescription({type:\"offer\",sdp:sdp});return Promise.resolve(desc)},RTCPeerConnection.prototype.createAnswer=function(){var pc=this;if(pc._isClosed)return Promise.reject(makeError(\"InvalidStateError\",\"Can not call createAnswer after close\"));if(\"have-remote-offer\"!==pc.signalingState&&\"have-local-pranswer\"!==pc.signalingState)return Promise.reject(makeError(\"InvalidStateError\",\"Can not call createAnswer in signalingState \"+pc.signalingState));var sdp=SDPUtils.writeSessionBoilerplate(pc._sdpSessionId,pc._sdpSessionVersion++);pc.usingBundle&&(sdp+=\"a=group:BUNDLE \"+pc.transceivers.map(function(t){return t.mid}).join(\" \")+\"\\r\\n\");var mediaSectionsInOffer=SDPUtils.getMediaSections(pc._remoteDescription.sdp).length;pc.transceivers.forEach(function(transceiver,sdpMLineIndex){if(!(sdpMLineIndex+1>mediaSectionsInOffer)){if(transceiver.rejected)return\"application\"===transceiver.kind?\"DTLS/SCTP\"===transceiver.protocol?sdp+=\"m=application 0 DTLS/SCTP 5000\\r\\n\":sdp+=\"m=application 0 \"+transceiver.protocol+\" webrtc-datachannel\\r\\n\":\"audio\"===transceiver.kind?sdp+=\"m=audio 0 UDP/TLS/RTP/SAVPF 0\\r\\na=rtpmap:0 PCMU/8000\\r\\n\":\"video\"===transceiver.kind&&(sdp+=\"m=video 0 UDP/TLS/RTP/SAVPF 120\\r\\na=rtpmap:120 VP8/90000\\r\\n\"),void(sdp+=\"c=IN IP4 0.0.0.0\\r\\na=inactive\\r\\na=mid:\"+transceiver.mid+\"\\r\\n\");if(transceiver.stream){var localTrack;\"audio\"===transceiver.kind?localTrack=transceiver.stream.getAudioTracks()[0]:\"video\"===transceiver.kind&&(localTrack=transceiver.stream.getVideoTracks()[0]),localTrack&&edgeVersion>=15019&&\"video\"===transceiver.kind&&!transceiver.sendEncodingParameters[0].rtx&&(transceiver.sendEncodingParameters[0].rtx={ssrc:transceiver.sendEncodingParameters[0].ssrc+1})}var commonCapabilities=getCommonCapabilities(transceiver.localCapabilities,transceiver.remoteCapabilities);!commonCapabilities.codecs.filter(function(c){return\"rtx\"===c.name.toLowerCase()}).length&&transceiver.sendEncodingParameters[0].rtx&&delete transceiver.sendEncodingParameters[0].rtx,sdp+=writeMediaSection(transceiver,commonCapabilities,\"answer\",transceiver.stream,pc._dtlsRole),transceiver.rtcpParameters&&transceiver.rtcpParameters.reducedSize&&(sdp+=\"a=rtcp-rsize\\r\\n\")}});var desc=new window.RTCSessionDescription({type:\"answer\",sdp:sdp});return Promise.resolve(desc)},RTCPeerConnection.prototype.addIceCandidate=function(candidate){var sections,pc=this;return candidate&&void 0===candidate.sdpMLineIndex&&!candidate.sdpMid?Promise.reject(new TypeError(\"sdpMLineIndex or sdpMid required\")):new Promise(function(resolve,reject){if(!pc._remoteDescription)return reject(makeError(\"InvalidStateError\",\"Can not add ICE candidate without a remote description\"));if(candidate&&\"\"!==candidate.candidate){var sdpMLineIndex=candidate.sdpMLineIndex;if(candidate.sdpMid)for(var i=0;i0?SDPUtils.parseCandidate(candidate.candidate):{};if(\"tcp\"===cand.protocol&&(0===cand.port||9===cand.port))return resolve();if(cand.component&&1!==cand.component)return resolve();if((0===sdpMLineIndex||sdpMLineIndex>0&&transceiver.iceTransport!==pc.transceivers[0].iceTransport)&&!maybeAddCandidate(transceiver.iceTransport,cand))return reject(makeError(\"OperationError\",\"Can not add ICE candidate\"));var candidateString=candidate.candidate.trim();0===candidateString.indexOf(\"a=\")&&(candidateString=candidateString.substr(2)),sections=SDPUtils.getMediaSections(pc._remoteDescription.sdp),sections[sdpMLineIndex]+=\"a=\"+(cand.type?candidateString:\"end-of-candidates\")+\"\\r\\n\",pc._remoteDescription.sdp=SDPUtils.getDescription(pc._remoteDescription.sdp)+sections.join(\"\")}else for(var j=0;j0?\"m=\"+part:part).trim()+\"\\r\\n\"})},SDPUtils.getDescription=function(blob){var sections=SDPUtils.splitSections(blob);return sections&§ions[0]},SDPUtils.getMediaSections=function(blob){var sections=SDPUtils.splitSections(blob);return sections.shift(),sections},SDPUtils.matchPrefix=function(blob,prefix){return SDPUtils.splitLines(blob).filter(function(line){return 0===line.indexOf(prefix)})},SDPUtils.parseCandidate=function(line){var parts;parts=0===line.indexOf(\"a=candidate:\")?line.substring(12).split(\" \"):line.substring(10).split(\" \");for(var candidate={foundation:parts[0],component:parseInt(parts[1],10),protocol:parts[2].toLowerCase(),priority:parseInt(parts[3],10),ip:parts[4],port:parseInt(parts[5],10),type:parts[7]},i=8;i0?parts[0].split(\"/\")[1]:\"sendrecv\",uri:parts[1]}},SDPUtils.writeExtmap=function(headerExtension){return\"a=extmap:\"+(headerExtension.id||headerExtension.preferredId)+(headerExtension.direction&&\"sendrecv\"!==headerExtension.direction?\"/\"+headerExtension.direction:\"\")+\" \"+headerExtension.uri+\"\\r\\n\"},SDPUtils.parseFmtp=function(line){for(var kv,parsed={},parts=line.substr(line.indexOf(\" \")+1).split(\";\"),j=0;j-1?(parts.attribute=line.substr(sp+1,colon-sp-1),parts.value=line.substr(colon+1)):parts.attribute=line.substr(sp+1),parts},SDPUtils.parseSsrcGroup=function(line){var parts=line.substr(13).split(\" \");return{semantics:parts.shift(),ssrcs:parts.map(function(ssrc){return parseInt(ssrc,10)})}},SDPUtils.getMid=function(mediaSection){var mid=SDPUtils.matchPrefix(mediaSection,\"a=mid:\")[0];if(mid)return mid.substr(6)},SDPUtils.parseFingerprint=function(line){var parts=line.substr(14).split(\" \");return{algorithm:parts[0].toLowerCase(),value:parts[1]}},SDPUtils.getDtlsParameters=function(mediaSection,sessionpart){return{role:\"auto\",fingerprints:SDPUtils.matchPrefix(mediaSection+sessionpart,\"a=fingerprint:\").map(SDPUtils.parseFingerprint)}},SDPUtils.writeDtlsParameters=function(params,setupType){var sdp=\"a=setup:\"+setupType+\"\\r\\n\";return params.fingerprints.forEach(function(fp){sdp+=\"a=fingerprint:\"+fp.algorithm+\" \"+fp.value+\"\\r\\n\"}),sdp},SDPUtils.getIceParameters=function(mediaSection,sessionpart){var lines=SDPUtils.splitLines(mediaSection);return lines=lines.concat(SDPUtils.splitLines(sessionpart)),{usernameFragment:lines.filter(function(line){return 0===line.indexOf(\"a=ice-ufrag:\")})[0].substr(12),password:lines.filter(function(line){return 0===line.indexOf(\"a=ice-pwd:\")})[0].substr(10)}},SDPUtils.writeIceParameters=function(params){return\"a=ice-ufrag:\"+params.usernameFragment+\"\\r\\na=ice-pwd:\"+params.password+\"\\r\\n\"},SDPUtils.parseRtpParameters=function(mediaSection){for(var description={codecs:[],headerExtensions:[],fecMechanisms:[],rtcp:[]},lines=SDPUtils.splitLines(mediaSection),mline=lines[0].split(\" \"),i=3;i0?\"9\":\"0\",sdp+=\" UDP/TLS/RTP/SAVPF \",sdp+=caps.codecs.map(function(codec){return void 0!==codec.preferredPayloadType?codec.preferredPayloadType:codec.payloadType}).join(\" \")+\"\\r\\n\",sdp+=\"c=IN IP4 0.0.0.0\\r\\n\",sdp+=\"a=rtcp:9 IN IP4 0.0.0.0\\r\\n\",caps.codecs.forEach(function(codec){sdp+=SDPUtils.writeRtpMap(codec),sdp+=SDPUtils.writeFmtp(codec),sdp+=SDPUtils.writeRtcpFb(codec)});var maxptime=0;return caps.codecs.forEach(function(codec){codec.maxptime>maxptime&&(maxptime=codec.maxptime)}),maxptime>0&&(sdp+=\"a=maxptime:\"+maxptime+\"\\r\\n\"),sdp+=\"a=rtcp-mux\\r\\n\",caps.headerExtensions&&caps.headerExtensions.forEach(function(extension){sdp+=SDPUtils.writeExtmap(extension)}),sdp},SDPUtils.parseRtpEncodingParameters=function(mediaSection){var secondarySsrc,encodingParameters=[],description=SDPUtils.parseRtpParameters(mediaSection),hasRed=-1!==description.fecMechanisms.indexOf(\"RED\"),hasUlpfec=-1!==description.fecMechanisms.indexOf(\"ULPFEC\"),ssrcs=SDPUtils.matchPrefix(mediaSection,\"a=ssrc:\").map(function(line){return SDPUtils.parseSsrcMedia(line)}).filter(function(parts){return\"cname\"===parts.attribute}),primarySsrc=ssrcs.length>0&&ssrcs[0].ssrc,flows=SDPUtils.matchPrefix(mediaSection,\"a=ssrc-group:FID\").map(function(line){return line.substr(17).split(\" \").map(function(part){return parseInt(part,10)})});flows.length>0&&flows[0].length>1&&flows[0][0]===primarySsrc&&(secondarySsrc=flows[0][1]),description.codecs.forEach(function(codec){if(\"RTX\"===codec.name.toUpperCase()&&codec.parameters.apt){var encParam={ssrc:primarySsrc,codecPayloadType:parseInt(codec.parameters.apt,10)};primarySsrc&&secondarySsrc&&(encParam.rtx={ssrc:secondarySsrc}),encodingParameters.push(encParam),hasRed&&(encParam=JSON.parse(JSON.stringify(encParam)),encParam.fec={ssrc:secondarySsrc,mechanism:hasUlpfec?\"red+ulpfec\":\"red\"},encodingParameters.push(encParam))}}),0===encodingParameters.length&&primarySsrc&&encodingParameters.push({ssrc:primarySsrc});var bandwidth=SDPUtils.matchPrefix(mediaSection,\"b=\");return bandwidth.length&&(bandwidth=0===bandwidth[0].indexOf(\"b=TIAS:\")?parseInt(bandwidth[0].substr(7),10):0===bandwidth[0].indexOf(\"b=AS:\")?1e3*parseInt(bandwidth[0].substr(5),10)*.95-16e3:void 0,encodingParameters.forEach(function(params){params.maxBitrate=bandwidth})),encodingParameters},SDPUtils.parseRtcpParameters=function(mediaSection){var rtcpParameters={},remoteSsrc=SDPUtils.matchPrefix(mediaSection,\"a=ssrc:\").map(function(line){return SDPUtils.parseSsrcMedia(line)}).filter(function(obj){return\"cname\"===obj.attribute})[0];remoteSsrc&&(rtcpParameters.cname=remoteSsrc.value,rtcpParameters.ssrc=remoteSsrc.ssrc);var rsize=SDPUtils.matchPrefix(mediaSection,\"a=rtcp-rsize\");rtcpParameters.reducedSize=rsize.length>0,rtcpParameters.compound=0===rsize.length;var mux=SDPUtils.matchPrefix(mediaSection,\"a=rtcp-mux\");return rtcpParameters.mux=mux.length>0,rtcpParameters},SDPUtils.parseMsid=function(mediaSection){var parts,spec=SDPUtils.matchPrefix(mediaSection,\"a=msid:\");if(1===spec.length)return parts=spec[0].substr(7).split(\" \"),{stream:parts[0],track:parts[1]};var planB=SDPUtils.matchPrefix(mediaSection,\"a=ssrc:\").map(function(line){return SDPUtils.parseSsrcMedia(line)}).filter(function(msidParts){return\"msid\"===msidParts.attribute});return planB.length>0?(parts=planB[0].value.split(\" \"),{stream:parts[0],track:parts[1]}):void 0},SDPUtils.generateSessionId=function(){return Math.random().toString().substr(2,21)},SDPUtils.writeSessionBoilerplate=function(sessId,sessVer){var version=void 0!==sessVer?sessVer:2;return\"v=0\\r\\no=thisisadapterortc \"+(sessId||SDPUtils.generateSessionId())+\" \"+version+\" IN IP4 127.0.0.1\\r\\ns=-\\r\\nt=0 0\\r\\n\"},SDPUtils.writeMediaSection=function(transceiver,caps,type,stream){var sdp=SDPUtils.writeRtpDescription(transceiver.kind,caps);if(sdp+=SDPUtils.writeIceParameters(transceiver.iceGatherer.getLocalParameters()),sdp+=SDPUtils.writeDtlsParameters(transceiver.dtlsTransport.getLocalParameters(),\"offer\"===type?\"actpass\":\"active\"),sdp+=\"a=mid:\"+transceiver.mid+\"\\r\\n\",\ntransceiver.direction?sdp+=\"a=\"+transceiver.direction+\"\\r\\n\":transceiver.rtpSender&&transceiver.rtpReceiver?sdp+=\"a=sendrecv\\r\\n\":transceiver.rtpSender?sdp+=\"a=sendonly\\r\\n\":transceiver.rtpReceiver?sdp+=\"a=recvonly\\r\\n\":sdp+=\"a=inactive\\r\\n\",transceiver.rtpSender){var msid=\"msid:\"+stream.id+\" \"+transceiver.rtpSender.track.id+\"\\r\\n\";sdp+=\"a=\"+msid,sdp+=\"a=ssrc:\"+transceiver.sendEncodingParameters[0].ssrc+\" \"+msid,transceiver.sendEncodingParameters[0].rtx&&(sdp+=\"a=ssrc:\"+transceiver.sendEncodingParameters[0].rtx.ssrc+\" \"+msid,sdp+=\"a=ssrc-group:FID \"+transceiver.sendEncodingParameters[0].ssrc+\" \"+transceiver.sendEncodingParameters[0].rtx.ssrc+\"\\r\\n\")}return sdp+=\"a=ssrc:\"+transceiver.sendEncodingParameters[0].ssrc+\" cname:\"+SDPUtils.localCName+\"\\r\\n\",transceiver.rtpSender&&transceiver.sendEncodingParameters[0].rtx&&(sdp+=\"a=ssrc:\"+transceiver.sendEncodingParameters[0].rtx.ssrc+\" cname:\"+SDPUtils.localCName+\"\\r\\n\"),sdp},SDPUtils.getDirection=function(mediaSection,sessionpart){for(var lines=SDPUtils.splitLines(mediaSection),i=0;i0&&arguments[0]instanceof window.MediaStreamTrack){var sender,receiver,err,track=arguments[0];return pc.getSenders().forEach(function(s){s.track===track&&(sender?err=!0:sender=s)}),pc.getReceivers().forEach(function(r){return r.track===track&&(receiver?err=!0:receiver=r),r.track===track}),err||sender&&receiver?Promise.reject(new DOMException(\"There are more than one sender or receiver for the track.\",\"InvalidAccessError\")):sender?sender.getStats():receiver?receiver.getStats():Promise.reject(new DOMException(\"There is no sender or receiver for the track.\",\"InvalidAccessError\"))}return origGetStats.apply(pc,arguments)}}}},shimSourceObject:function(window){var URL=window&&window.URL;\"object\"==typeof window&&(!window.HTMLMediaElement||\"srcObject\"in window.HTMLMediaElement.prototype||Object.defineProperty(window.HTMLMediaElement.prototype,\"srcObject\",{get:function(){return this._srcObject},set:function(stream){var self=this;if(this._srcObject=stream,this.src&&URL.revokeObjectURL(this.src),!stream)return void(this.src=\"\");this.src=URL.createObjectURL(stream),stream.addEventListener(\"addtrack\",function(){self.src&&URL.revokeObjectURL(self.src),self.src=URL.createObjectURL(stream)}),stream.addEventListener(\"removetrack\",function(){self.src&&URL.revokeObjectURL(self.src),self.src=URL.createObjectURL(stream)})}}))},shimAddTrackRemoveTrackWithNative:function(window){window.RTCPeerConnection.prototype.getLocalStreams=function(){var pc=this;return this._shimmedLocalStreams=this._shimmedLocalStreams||{},Object.keys(this._shimmedLocalStreams).map(function(streamId){return pc._shimmedLocalStreams[streamId][0]})};var origAddTrack=window.RTCPeerConnection.prototype.addTrack;window.RTCPeerConnection.prototype.addTrack=function(track,stream){if(!stream)return origAddTrack.apply(this,arguments);this._shimmedLocalStreams=this._shimmedLocalStreams||{};var sender=origAddTrack.apply(this,arguments);return this._shimmedLocalStreams[stream.id]?-1===this._shimmedLocalStreams[stream.id].indexOf(sender)&&this._shimmedLocalStreams[stream.id].push(sender):this._shimmedLocalStreams[stream.id]=[stream,sender],sender};var origAddStream=window.RTCPeerConnection.prototype.addStream;window.RTCPeerConnection.prototype.addStream=function(stream){var pc=this;this._shimmedLocalStreams=this._shimmedLocalStreams||{},stream.getTracks().forEach(function(track){if(pc.getSenders().find(function(s){return s.track===track}))throw new DOMException(\"Track already exists.\",\"InvalidAccessError\")});var existingSenders=pc.getSenders();origAddStream.apply(this,arguments);var newSenders=pc.getSenders().filter(function(newSender){return-1===existingSenders.indexOf(newSender)});this._shimmedLocalStreams[stream.id]=[stream].concat(newSenders)};var origRemoveStream=window.RTCPeerConnection.prototype.removeStream;window.RTCPeerConnection.prototype.removeStream=function(stream){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},delete this._shimmedLocalStreams[stream.id],origRemoveStream.apply(this,arguments)};var origRemoveTrack=window.RTCPeerConnection.prototype.removeTrack;window.RTCPeerConnection.prototype.removeTrack=function(sender){var pc=this;return this._shimmedLocalStreams=this._shimmedLocalStreams||{},sender&&Object.keys(this._shimmedLocalStreams).forEach(function(streamId){var idx=pc._shimmedLocalStreams[streamId].indexOf(sender);-1!==idx&&pc._shimmedLocalStreams[streamId].splice(idx,1),1===pc._shimmedLocalStreams[streamId].length&&delete pc._shimmedLocalStreams[streamId]}),origRemoveTrack.apply(this,arguments)}},shimAddTrackRemoveTrack:function(window){function replaceInternalStreamId(pc,description){var sdp=description.sdp;return Object.keys(pc._reverseStreams||[]).forEach(function(internalId){var externalStream=pc._reverseStreams[internalId],internalStream=pc._streams[externalStream.id];sdp=sdp.replace(new RegExp(internalStream.id,\"g\"),externalStream.id)}),new RTCSessionDescription({type:description.type,sdp:sdp})}function replaceExternalStreamId(pc,description){var sdp=description.sdp;return Object.keys(pc._reverseStreams||[]).forEach(function(internalId){var externalStream=pc._reverseStreams[internalId],internalStream=pc._streams[externalStream.id];sdp=sdp.replace(new RegExp(externalStream.id,\"g\"),internalStream.id)}),new RTCSessionDescription({type:description.type,sdp:sdp})}var browserDetails=utils.detectBrowser(window);if(window.RTCPeerConnection.prototype.addTrack&&browserDetails.version>=65)return this.shimAddTrackRemoveTrackWithNative(window);var origGetLocalStreams=window.RTCPeerConnection.prototype.getLocalStreams;window.RTCPeerConnection.prototype.getLocalStreams=function(){var pc=this,nativeStreams=origGetLocalStreams.apply(this);return pc._reverseStreams=pc._reverseStreams||{},nativeStreams.map(function(stream){return pc._reverseStreams[stream.id]})};var origAddStream=window.RTCPeerConnection.prototype.addStream;window.RTCPeerConnection.prototype.addStream=function(stream){var pc=this;if(pc._streams=pc._streams||{},pc._reverseStreams=pc._reverseStreams||{},stream.getTracks().forEach(function(track){if(pc.getSenders().find(function(s){return s.track===track}))throw new DOMException(\"Track already exists.\",\"InvalidAccessError\")}),!pc._reverseStreams[stream.id]){var newStream=new window.MediaStream(stream.getTracks());pc._streams[stream.id]=newStream,pc._reverseStreams[newStream.id]=stream,stream=newStream}origAddStream.apply(pc,[stream])};var origRemoveStream=window.RTCPeerConnection.prototype.removeStream;window.RTCPeerConnection.prototype.removeStream=function(stream){var pc=this;pc._streams=pc._streams||{},pc._reverseStreams=pc._reverseStreams||{},origRemoveStream.apply(pc,[pc._streams[stream.id]||stream]),delete pc._reverseStreams[pc._streams[stream.id]?pc._streams[stream.id].id:stream.id],delete pc._streams[stream.id]},window.RTCPeerConnection.prototype.addTrack=function(track,stream){var pc=this;if(\"closed\"===pc.signalingState)throw new DOMException(\"The RTCPeerConnection's signalingState is 'closed'.\",\"InvalidStateError\");var streams=[].slice.call(arguments,1);if(1!==streams.length||!streams[0].getTracks().find(function(t){return t===track}))throw new DOMException(\"The adapter.js addTrack polyfill only supports a single stream which is associated with the specified track.\",\"NotSupportedError\");if(pc.getSenders().find(function(s){return s.track===track}))throw new DOMException(\"Track already exists.\",\"InvalidAccessError\");pc._streams=pc._streams||{},pc._reverseStreams=pc._reverseStreams||{};var oldStream=pc._streams[stream.id];if(oldStream)oldStream.addTrack(track),Promise.resolve().then(function(){pc.dispatchEvent(new Event(\"negotiationneeded\"))});else{var newStream=new window.MediaStream([track]);pc._streams[stream.id]=newStream,pc._reverseStreams[newStream.id]=stream,pc.addStream(newStream)}return pc.getSenders().find(function(s){return s.track===track})},[\"createOffer\",\"createAnswer\"].forEach(function(method){var nativeMethod=window.RTCPeerConnection.prototype[method];window.RTCPeerConnection.prototype[method]=function(){var pc=this,args=arguments;return arguments.length&&\"function\"==typeof arguments[0]?nativeMethod.apply(pc,[function(description){var desc=replaceInternalStreamId(pc,description);args[0].apply(null,[desc])},function(err){args[1]&&args[1].apply(null,err)},arguments[2]]):nativeMethod.apply(pc,arguments).then(function(description){return replaceInternalStreamId(pc,description)})}});var origSetLocalDescription=window.RTCPeerConnection.prototype.setLocalDescription;window.RTCPeerConnection.prototype.setLocalDescription=function(){var pc=this;return arguments.length&&arguments[0].type?(arguments[0]=replaceExternalStreamId(pc,arguments[0]),origSetLocalDescription.apply(pc,arguments)):origSetLocalDescription.apply(pc,arguments)};var origLocalDescription=Object.getOwnPropertyDescriptor(window.RTCPeerConnection.prototype,\"localDescription\");Object.defineProperty(window.RTCPeerConnection.prototype,\"localDescription\",{get:function(){var pc=this,description=origLocalDescription.get.apply(this);return\"\"===description.type?description:replaceInternalStreamId(pc,description)}}),window.RTCPeerConnection.prototype.removeTrack=function(sender){var pc=this;if(\"closed\"===pc.signalingState)throw new DOMException(\"The RTCPeerConnection's signalingState is 'closed'.\",\"InvalidStateError\");if(!sender._pc)throw new DOMException(\"Argument 1 of RTCPeerConnection.removeTrack does not implement interface RTCRtpSender.\",\"TypeError\");if(sender._pc!==pc)throw new DOMException(\"Sender was not created by this connection.\",\"InvalidAccessError\");pc._streams=pc._streams||{};var stream;Object.keys(pc._streams).forEach(function(streamid){pc._streams[streamid].getTracks().find(function(track){return sender.track===track})&&(stream=pc._streams[streamid])}),stream&&(1===stream.getTracks().length?pc.removeStream(pc._reverseStreams[stream.id]):stream.removeTrack(sender.track),pc.dispatchEvent(new Event(\"negotiationneeded\")))}},shimPeerConnection:function(window){var browserDetails=utils.detectBrowser(window);if(!window.RTCPeerConnection&&window.webkitRTCPeerConnection)window.RTCPeerConnection=function(pcConfig,pcConstraints){return logging(\"PeerConnection\"),pcConfig&&pcConfig.iceTransportPolicy&&(pcConfig.iceTransports=pcConfig.iceTransportPolicy),new window.webkitRTCPeerConnection(pcConfig,pcConstraints)},window.RTCPeerConnection.prototype=window.webkitRTCPeerConnection.prototype,window.webkitRTCPeerConnection.generateCertificate&&Object.defineProperty(window.RTCPeerConnection,\"generateCertificate\",{get:function(){return window.webkitRTCPeerConnection.generateCertificate}});else{var OrigPeerConnection=window.RTCPeerConnection;window.RTCPeerConnection=function(pcConfig,pcConstraints){if(pcConfig&&pcConfig.iceServers){for(var newIceServers=[],i=0;i0&&\"function\"==typeof selector)return origGetStats.apply(this,arguments);if(0===origGetStats.length&&(0===arguments.length||\"function\"!=typeof arguments[0]))return origGetStats.apply(this,[]);var fixChromeStats_=function(response){var standardReport={};return response.result().forEach(function(report){var standardStats={id:report.id,timestamp:report.timestamp,type:{localcandidate:\"local-candidate\",remotecandidate:\"remote-candidate\"}[report.type]||report.type};report.names().forEach(function(name){standardStats[name]=report.stat(name)}),standardReport[standardStats.id]=standardStats}),standardReport},makeMapStats=function(stats){return new Map(Object.keys(stats).map(function(key){return[key,stats[key]]}))};if(arguments.length>=2){var successCallbackWrapper_=function(response){args[1](makeMapStats(fixChromeStats_(response)))};return origGetStats.apply(this,[successCallbackWrapper_,arguments[0]])}return new Promise(function(resolve,reject){origGetStats.apply(pc,[function(response){resolve(makeMapStats(fixChromeStats_(response)))},reject])}).then(successCallback,errorCallback)},browserDetails.version<51&&[\"setLocalDescription\",\"setRemoteDescription\",\"addIceCandidate\"].forEach(function(method){var nativeMethod=window.RTCPeerConnection.prototype[method];window.RTCPeerConnection.prototype[method]=function(){var args=arguments,pc=this,promise=new Promise(function(resolve,reject){nativeMethod.apply(pc,[args[0],resolve,reject])});return args.length<2?promise:promise.then(function(){args[1].apply(null,[])},function(err){args.length>=3&&args[2].apply(null,[err])})}}),browserDetails.version<52&&[\"createOffer\",\"createAnswer\"].forEach(function(method){var nativeMethod=window.RTCPeerConnection.prototype[method];window.RTCPeerConnection.prototype[method]=function(){var pc=this;if(arguments.length<1||1===arguments.length&&\"object\"==typeof arguments[0]){var opts=1===arguments.length?arguments[0]:void 0;return new Promise(function(resolve,reject){nativeMethod.apply(pc,[resolve,reject,opts])})}return nativeMethod.apply(this,arguments)}}),[\"setLocalDescription\",\"setRemoteDescription\",\"addIceCandidate\"].forEach(function(method){var nativeMethod=window.RTCPeerConnection.prototype[method];window.RTCPeerConnection.prototype[method]=function(){return arguments[0]=new(\"addIceCandidate\"===method?window.RTCIceCandidate:window.RTCSessionDescription)(arguments[0]),nativeMethod.apply(this,arguments)}});var nativeAddIceCandidate=window.RTCPeerConnection.prototype.addIceCandidate;window.RTCPeerConnection.prototype.addIceCandidate=function(){return arguments[0]?nativeAddIceCandidate.apply(this,arguments):(arguments[1]&&arguments[1].apply(null),Promise.resolve())}},fixNegotiationNeeded:function(window){utils.wrapPeerConnectionEvent(window,\"negotiationneeded\",function(e){if(\"stable\"===e.target.signalingState)return e})},shimGetDisplayMedia:function(window,getSourceId){\"getDisplayMedia\"in window.navigator||\"function\"==typeof getSourceId&&(navigator.getDisplayMedia=function(constraints){return getSourceId(constraints).then(function(sourceId){return constraints.video={mandatory:{chromeMediaSource:\"desktop\",chromeMediaSourceId:sourceId,maxFrameRate:constraints.video.frameRate||3}},navigator.mediaDevices.getUserMedia(constraints)})})}}},{\"../utils.js\":14,\"./getusermedia\":6}],6:[function(requirecopy,module,exports){var utils=requirecopy(\"../utils.js\"),logging=utils.log;module.exports=function(window){var browserDetails=utils.detectBrowser(window),navigator=window&&window.navigator,constraintsToChrome_=function(c){if(\"object\"!=typeof c||c.mandatory||c.optional)return c;var cc={};return Object.keys(c).forEach(function(key){if(\"require\"!==key&&\"advanced\"!==key&&\"mediaSource\"!==key){var r=\"object\"==typeof c[key]?c[key]:{ideal:c[key]};void 0!==r.exact&&\"number\"==typeof r.exact&&(r.min=r.max=r.exact);var oldname_=function(prefix,name){return prefix?prefix+name.charAt(0).toUpperCase()+name.slice(1):\"deviceId\"===name?\"sourceId\":name};if(void 0!==r.ideal){cc.optional=cc.optional||[];var oc={};\"number\"==typeof r.ideal?(oc[oldname_(\"min\",key)]=r.ideal,cc.optional.push(oc),oc={},oc[oldname_(\"max\",key)]=r.ideal,cc.optional.push(oc)):(oc[oldname_(\"\",key)]=r.ideal,cc.optional.push(oc))}void 0!==r.exact&&\"number\"!=typeof r.exact?(cc.mandatory=cc.mandatory||{},cc.mandatory[oldname_(\"\",key)]=r.exact):[\"min\",\"max\"].forEach(function(mix){void 0!==r[mix]&&(cc.mandatory=cc.mandatory||{},cc.mandatory[oldname_(mix,key)]=r[mix])})}}),c.advanced&&(cc.optional=(cc.optional||[]).concat(c.advanced)),cc},shimConstraints_=function(constraints,func){if(browserDetails.version>=61)return func(constraints);if((constraints=JSON.parse(JSON.stringify(constraints)))&&\"object\"==typeof constraints.audio){var remap=function(obj,a,b){a in obj&&!(b in obj)&&(obj[b]=obj[a],delete obj[a])};constraints=JSON.parse(JSON.stringify(constraints)),remap(constraints.audio,\"autoGainControl\",\"googAutoGainControl\"),remap(constraints.audio,\"noiseSuppression\",\"googNoiseSuppression\"),constraints.audio=constraintsToChrome_(constraints.audio)}if(constraints&&\"object\"==typeof constraints.video){var face=constraints.video.facingMode;face=face&&(\"object\"==typeof face?face:{ideal:face});var getSupportedFacingModeLies=browserDetails.version<66;if(face&&(\"user\"===face.exact||\"environment\"===face.exact||\"user\"===face.ideal||\"environment\"===face.ideal)&&(!navigator.mediaDevices.getSupportedConstraints||!navigator.mediaDevices.getSupportedConstraints().facingMode||getSupportedFacingModeLies)){delete constraints.video.facingMode;var matches;if(\"environment\"===face.exact||\"environment\"===face.ideal?matches=[\"back\",\"rear\"]:\"user\"!==face.exact&&\"user\"!==face.ideal||(matches=[\"front\"]),matches)return navigator.mediaDevices.enumerateDevices().then(function(devices){devices=devices.filter(function(d){return\"videoinput\"===d.kind});var dev=devices.find(function(d){return matches.some(function(match){return-1!==d.label.toLowerCase().indexOf(match)})});return!dev&&devices.length&&-1!==matches.indexOf(\"back\")&&(dev=devices[devices.length-1]),dev&&(constraints.video.deviceId=face.exact?{exact:dev.deviceId}:{ideal:dev.deviceId}),constraints.video=constraintsToChrome_(constraints.video),logging(\"chrome: \"+JSON.stringify(constraints)),func(constraints)})}constraints.video=constraintsToChrome_(constraints.video)}return logging(\"chrome: \"+JSON.stringify(constraints)),func(constraints)},shimError_=function(e){return browserDetails.version>=64?e:{name:{PermissionDeniedError:\"NotAllowedError\",PermissionDismissedError:\"NotAllowedError\",InvalidStateError:\"NotAllowedError\",DevicesNotFoundError:\"NotFoundError\",ConstraintNotSatisfiedError:\"OverconstrainedError\",TrackStartError:\"NotReadableError\",MediaDeviceFailedDueToShutdown:\"NotAllowedError\",MediaDeviceKillSwitchOn:\"NotAllowedError\",TabCaptureError:\"AbortError\",ScreenCaptureError:\"AbortError\",DeviceCaptureError:\"AbortError\"}[e.name]||e.name,message:e.message,constraint:e.constraint||e.constraintName,toString:function(){return this.name+(this.message&&\": \")+this.message}}},getUserMedia_=function(constraints,onSuccess,onError){shimConstraints_(constraints,function(c){navigator.webkitGetUserMedia(c,onSuccess,function(e){onError&&onError(shimError_(e))})})};navigator.getUserMedia=getUserMedia_;var getUserMediaPromise_=function(constraints){return new Promise(function(resolve,reject){navigator.getUserMedia(constraints,resolve,reject)})};if(navigator.mediaDevices||(navigator.mediaDevices={getUserMedia:getUserMediaPromise_,enumerateDevices:function(){return new Promise(function(resolve){var kinds={audio:\"audioinput\",video:\"videoinput\"};return window.MediaStreamTrack.getSources(function(devices){resolve(devices.map(function(device){return{label:device.label,kind:kinds[device.kind],deviceId:device.id,groupId:\"\"}}))})})},getSupportedConstraints:function(){return{deviceId:!0,echoCancellation:!0,facingMode:!0,frameRate:!0,height:!0,width:!0}}}),navigator.mediaDevices.getUserMedia){var origGetUserMedia=navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);navigator.mediaDevices.getUserMedia=function(cs){return shimConstraints_(cs,function(c){return origGetUserMedia(c).then(function(stream){if(c.audio&&!stream.getAudioTracks().length||c.video&&!stream.getVideoTracks().length)throw stream.getTracks().forEach(function(track){track.stop()}),new DOMException(\"\",\"NotFoundError\");return stream},function(e){return Promise.reject(shimError_(e))})})}}else navigator.mediaDevices.getUserMedia=function(constraints){return getUserMediaPromise_(constraints)}\n;void 0===navigator.mediaDevices.addEventListener&&(navigator.mediaDevices.addEventListener=function(){logging(\"Dummy mediaDevices.addEventListener called.\")}),void 0===navigator.mediaDevices.removeEventListener&&(navigator.mediaDevices.removeEventListener=function(){logging(\"Dummy mediaDevices.removeEventListener called.\")})}},{\"../utils.js\":14}],7:[function(requirecopy,module,exports){var SDPUtils=requirecopy(\"sdp\"),utils=requirecopy(\"./utils\");module.exports={shimRTCIceCandidate:function(window){if(window.RTCIceCandidate&&!(window.RTCIceCandidate&&\"foundation\"in window.RTCIceCandidate.prototype)){var NativeRTCIceCandidate=window.RTCIceCandidate;window.RTCIceCandidate=function(args){if(\"object\"==typeof args&&args.candidate&&0===args.candidate.indexOf(\"a=\")&&(args=JSON.parse(JSON.stringify(args)),args.candidate=args.candidate.substr(2)),args.candidate&&args.candidate.length){var nativeCandidate=new NativeRTCIceCandidate(args),parsedCandidate=SDPUtils.parseCandidate(args.candidate),augmentedCandidate=Object.assign(nativeCandidate,parsedCandidate);return augmentedCandidate.toJSON=function(){return{candidate:augmentedCandidate.candidate,sdpMid:augmentedCandidate.sdpMid,sdpMLineIndex:augmentedCandidate.sdpMLineIndex,usernameFragment:augmentedCandidate.usernameFragment}},augmentedCandidate}return new NativeRTCIceCandidate(args)},window.RTCIceCandidate.prototype=NativeRTCIceCandidate.prototype,utils.wrapPeerConnectionEvent(window,\"icecandidate\",function(e){return e.candidate&&Object.defineProperty(e,\"candidate\",{value:new window.RTCIceCandidate(e.candidate),writable:\"false\"}),e})}},shimCreateObjectURL:function(window){var URL=window&&window.URL;if(\"object\"==typeof window&&window.HTMLMediaElement&&\"srcObject\"in window.HTMLMediaElement.prototype&&URL.createObjectURL&&URL.revokeObjectURL){var nativeCreateObjectURL=URL.createObjectURL.bind(URL),nativeRevokeObjectURL=URL.revokeObjectURL.bind(URL),streams=new Map,newId=0;URL.createObjectURL=function(stream){if(\"getTracks\"in stream){var url=\"polyblob:\"+ ++newId;return streams.set(url,stream),utils.deprecated(\"URL.createObjectURL(stream)\",\"elem.srcObject = stream\"),url}return nativeCreateObjectURL(stream)},URL.revokeObjectURL=function(url){nativeRevokeObjectURL(url),streams.delete(url)};var dsc=Object.getOwnPropertyDescriptor(window.HTMLMediaElement.prototype,\"src\");Object.defineProperty(window.HTMLMediaElement.prototype,\"src\",{get:function(){return dsc.get.apply(this)},set:function(url){return this.srcObject=streams.get(url)||null,dsc.set.apply(this,[url])}});var nativeSetAttribute=window.HTMLMediaElement.prototype.setAttribute;window.HTMLMediaElement.prototype.setAttribute=function(){return 2===arguments.length&&\"src\"===(\"\"+arguments[0]).toLowerCase()&&(this.srcObject=streams.get(arguments[1])||null),nativeSetAttribute.apply(this,arguments)}}},shimMaxMessageSize:function(window){if(!window.RTCSctpTransport&&window.RTCPeerConnection){var browserDetails=utils.detectBrowser(window);\"sctp\"in window.RTCPeerConnection.prototype||Object.defineProperty(window.RTCPeerConnection.prototype,\"sctp\",{get:function(){return void 0===this._sctp?null:this._sctp}});var sctpInDescription=function(description){var sections=SDPUtils.splitSections(description.sdp);return sections.shift(),sections.some(function(mediaSection){var mLine=SDPUtils.parseMLine(mediaSection);return mLine&&\"application\"===mLine.kind&&-1!==mLine.protocol.indexOf(\"SCTP\")})},getRemoteFirefoxVersion=function(description){var match=description.sdp.match(/mozilla...THIS_IS_SDPARTA-(\\d+)/);if(null===match||match.length<2)return-1;var version=parseInt(match[1],10);return version!==version?-1:version},getCanSendMaxMessageSize=function(remoteIsFirefox){var canSendMaxMessageSize=65536;return\"firefox\"===browserDetails.browser&&(canSendMaxMessageSize=browserDetails.version<57?-1===remoteIsFirefox?16384:2147483637:browserDetails.version<60?57===browserDetails.version?65535:65536:2147483637),canSendMaxMessageSize},getMaxMessageSize=function(description,remoteIsFirefox){var maxMessageSize=65536;\"firefox\"===browserDetails.browser&&57===browserDetails.version&&(maxMessageSize=65535);var match=SDPUtils.matchPrefix(description.sdp,\"a=max-message-size:\");return match.length>0?maxMessageSize=parseInt(match[0].substr(19),10):\"firefox\"===browserDetails.browser&&-1!==remoteIsFirefox&&(maxMessageSize=2147483637),maxMessageSize},origSetRemoteDescription=window.RTCPeerConnection.prototype.setRemoteDescription;window.RTCPeerConnection.prototype.setRemoteDescription=function(){var pc=this;if(pc._sctp=null,sctpInDescription(arguments[0])){var maxMessageSize,isFirefox=getRemoteFirefoxVersion(arguments[0]),canSendMMS=getCanSendMaxMessageSize(isFirefox),remoteMMS=getMaxMessageSize(arguments[0],isFirefox);maxMessageSize=0===canSendMMS&&0===remoteMMS?Number.POSITIVE_INFINITY:0===canSendMMS||0===remoteMMS?Math.max(canSendMMS,remoteMMS):Math.min(canSendMMS,remoteMMS);var sctp={};Object.defineProperty(sctp,\"maxMessageSize\",{get:function(){return maxMessageSize}}),pc._sctp=sctp}return origSetRemoteDescription.apply(pc,arguments)}}},shimSendThrowTypeError:function(window){function wrapDcSend(dc,pc){var origDataChannelSend=dc.send;dc.send=function(){var data=arguments[0],length=data.length||data.size||data.byteLength;if(\"open\"===dc.readyState&&pc.sctp&&length>pc.sctp.maxMessageSize)throw new TypeError(\"Message too large (can send a maximum of \"+pc.sctp.maxMessageSize+\" bytes)\");return origDataChannelSend.apply(dc,arguments)}}if(window.RTCPeerConnection&&\"createDataChannel\"in window.RTCPeerConnection.prototype){var origCreateDataChannel=window.RTCPeerConnection.prototype.createDataChannel;window.RTCPeerConnection.prototype.createDataChannel=function(){var pc=this,dataChannel=origCreateDataChannel.apply(pc,arguments);return wrapDcSend(dataChannel,pc),dataChannel},utils.wrapPeerConnectionEvent(window,\"datachannel\",function(e){return wrapDcSend(e.channel,e.target),e})}}}},{\"./utils\":14,sdp:2}],8:[function(requirecopy,module,exports){var utils=requirecopy(\"../utils\"),filterIceServers=requirecopy(\"./filtericeservers\"),shimRTCPeerConnection=requirecopy(\"rtcpeerconnection-shim\");module.exports={shimGetUserMedia:requirecopy(\"./getusermedia\"),shimPeerConnection:function(window){var browserDetails=utils.detectBrowser(window);if(window.RTCIceGatherer&&(window.RTCIceCandidate||(window.RTCIceCandidate=function(args){return args}),window.RTCSessionDescription||(window.RTCSessionDescription=function(args){return args}),browserDetails.version<15025)){var origMSTEnabled=Object.getOwnPropertyDescriptor(window.MediaStreamTrack.prototype,\"enabled\");Object.defineProperty(window.MediaStreamTrack.prototype,\"enabled\",{set:function(value){origMSTEnabled.set.call(this,value);var ev=new Event(\"enabled\");ev.enabled=value,this.dispatchEvent(ev)}})}!window.RTCRtpSender||\"dtmf\"in window.RTCRtpSender.prototype||Object.defineProperty(window.RTCRtpSender.prototype,\"dtmf\",{get:function(){return void 0===this._dtmf&&(\"audio\"===this.track.kind?this._dtmf=new window.RTCDtmfSender(this):\"video\"===this.track.kind&&(this._dtmf=null)),this._dtmf}}),window.RTCDtmfSender&&!window.RTCDTMFSender&&(window.RTCDTMFSender=window.RTCDtmfSender);var RTCPeerConnectionShim=shimRTCPeerConnection(window,browserDetails.version);window.RTCPeerConnection=function(config){return config&&config.iceServers&&(config.iceServers=filterIceServers(config.iceServers)),new RTCPeerConnectionShim(config)},window.RTCPeerConnection.prototype=RTCPeerConnectionShim.prototype},shimReplaceTrack:function(window){!window.RTCRtpSender||\"replaceTrack\"in window.RTCRtpSender.prototype||(window.RTCRtpSender.prototype.replaceTrack=window.RTCRtpSender.prototype.setTrack)}}},{\"../utils\":14,\"./filtericeservers\":9,\"./getusermedia\":10,\"rtcpeerconnection-shim\":1}],9:[function(requirecopy,module,exports){var utils=requirecopy(\"../utils\");module.exports=function(iceServers,edgeVersion){var hasTurn=!1;return iceServers=JSON.parse(JSON.stringify(iceServers)),iceServers.filter(function(server){if(server&&(server.urls||server.url)){var urls=server.urls||server.url;server.url&&!server.urls&&utils.deprecated(\"RTCIceServer.url\",\"RTCIceServer.urls\");var isString=\"string\"==typeof urls;return isString&&(urls=[urls]),urls=urls.filter(function(url){return 0!==url.indexOf(\"turn:\")||-1===url.indexOf(\"transport=udp\")||-1!==url.indexOf(\"turn:[\")||hasTurn?0===url.indexOf(\"stun:\")&&edgeVersion>=14393&&-1===url.indexOf(\"?transport=udp\"):(hasTurn=!0,!0)}),delete server.url,server.urls=isString?urls[0]:urls,!!urls.length}})}},{\"../utils\":14}],10:[function(requirecopy,module,exports){module.exports=function(window){var navigator=window&&window.navigator,shimError_=function(e){return{name:{PermissionDeniedError:\"NotAllowedError\"}[e.name]||e.name,message:e.message,constraint:e.constraint,toString:function(){return this.name}}},origGetUserMedia=navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);navigator.mediaDevices.getUserMedia=function(c){return origGetUserMedia(c).catch(function(e){return Promise.reject(shimError_(e))})}}},{}],11:[function(requirecopy,module,exports){var utils=requirecopy(\"../utils\");module.exports={shimGetUserMedia:requirecopy(\"./getusermedia\"),shimOnTrack:function(window){\"object\"!=typeof window||!window.RTCPeerConnection||\"ontrack\"in window.RTCPeerConnection.prototype||Object.defineProperty(window.RTCPeerConnection.prototype,\"ontrack\",{get:function(){return this._ontrack},set:function(f){this._ontrack&&(this.removeEventListener(\"track\",this._ontrack),this.removeEventListener(\"addstream\",this._ontrackpoly)),this.addEventListener(\"track\",this._ontrack=f),this.addEventListener(\"addstream\",this._ontrackpoly=function(e){e.stream.getTracks().forEach(function(track){var event=new Event(\"track\");event.track=track,event.receiver={track:track},event.transceiver={receiver:event.receiver},event.streams=[e.stream],this.dispatchEvent(event)}.bind(this))}.bind(this))},enumerable:!0,configurable:!0}),\"object\"==typeof window&&window.RTCTrackEvent&&\"receiver\"in window.RTCTrackEvent.prototype&&!(\"transceiver\"in window.RTCTrackEvent.prototype)&&Object.defineProperty(window.RTCTrackEvent.prototype,\"transceiver\",{get:function(){return{receiver:this.receiver}}})},shimSourceObject:function(window){\"object\"==typeof window&&(!window.HTMLMediaElement||\"srcObject\"in window.HTMLMediaElement.prototype||Object.defineProperty(window.HTMLMediaElement.prototype,\"srcObject\",{get:function(){return this.mozSrcObject},set:function(stream){this.mozSrcObject=stream}}))},shimPeerConnection:function(window){var browserDetails=utils.detectBrowser(window);if(\"object\"==typeof window&&(window.RTCPeerConnection||window.mozRTCPeerConnection)){window.RTCPeerConnection||(window.RTCPeerConnection=function(pcConfig,pcConstraints){if(browserDetails.version<38&&pcConfig&&pcConfig.iceServers){for(var newIceServers=[],i=0;i55&&\"autoGainControl\"in navigator.mediaDevices.getSupportedConstraints())){var remap=function(obj,a,b){a in obj&&!(b in obj)&&(obj[b]=obj[a],delete obj[a])},nativeGetUserMedia=navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);if(navigator.mediaDevices.getUserMedia=function(c){return\"object\"==typeof c&&\"object\"==typeof c.audio&&(c=JSON.parse(JSON.stringify(c)),remap(c.audio,\"autoGainControl\",\"mozAutoGainControl\"),remap(c.audio,\"noiseSuppression\",\"mozNoiseSuppression\")),nativeGetUserMedia(c)},MediaStreamTrack&&MediaStreamTrack.prototype.getSettings){var nativeGetSettings=MediaStreamTrack.prototype.getSettings;MediaStreamTrack.prototype.getSettings=function(){var obj=nativeGetSettings.apply(this,arguments);return remap(obj,\"mozAutoGainControl\",\"autoGainControl\"),remap(obj,\"mozNoiseSuppression\",\"noiseSuppression\"),obj}}if(MediaStreamTrack&&MediaStreamTrack.prototype.applyConstraints){var nativeApplyConstraints=MediaStreamTrack.prototype.applyConstraints;MediaStreamTrack.prototype.applyConstraints=function(c){return\"audio\"===this.kind&&\"object\"==typeof c&&(c=JSON.parse(JSON.stringify(c)),remap(c,\"autoGainControl\",\"mozAutoGainControl\"),remap(c,\"noiseSuppression\",\"mozNoiseSuppression\")),nativeApplyConstraints.apply(this,[c])}}}navigator.getUserMedia=function(constraints,onSuccess,onError){if(browserDetails.version<44)return getUserMedia_(constraints,onSuccess,onError);utils.deprecated(\"navigator.getUserMedia\",\"navigator.mediaDevices.getUserMedia\"),navigator.mediaDevices.getUserMedia(constraints).then(onSuccess,onError)}}},{\"../utils\":14}],13:[function(requirecopy,module,exports){var utils=requirecopy(\"../utils\");module.exports={shimLocalStreamsAPI:function(window){if(\"object\"==typeof window&&window.RTCPeerConnection){if(\"getLocalStreams\"in window.RTCPeerConnection.prototype||(window.RTCPeerConnection.prototype.getLocalStreams=function(){return this._localStreams||(this._localStreams=[]),this._localStreams}),\"getStreamById\"in window.RTCPeerConnection.prototype||(window.RTCPeerConnection.prototype.getStreamById=function(id){var result=null;return this._localStreams&&this._localStreams.forEach(function(stream){stream.id===id&&(result=stream)}),this._remoteStreams&&this._remoteStreams.forEach(function(stream){stream.id===id&&(result=stream)}),result}),!(\"addStream\"in window.RTCPeerConnection.prototype)){var _addTrack=window.RTCPeerConnection.prototype.addTrack;window.RTCPeerConnection.prototype.addStream=function(stream){this._localStreams||(this._localStreams=[]),-1===this._localStreams.indexOf(stream)&&this._localStreams.push(stream);var pc=this;stream.getTracks().forEach(function(track){_addTrack.call(pc,track,stream)})},window.RTCPeerConnection.prototype.addTrack=function(track,stream){return stream&&(this._localStreams?-1===this._localStreams.indexOf(stream)&&this._localStreams.push(stream):this._localStreams=[stream]),_addTrack.call(this,track,stream)}}\"removeStream\"in window.RTCPeerConnection.prototype||(window.RTCPeerConnection.prototype.removeStream=function(stream){this._localStreams||(this._localStreams=[]);var index=this._localStreams.indexOf(stream);if(-1!==index){this._localStreams.splice(index,1);var pc=this,tracks=stream.getTracks();this.getSenders().forEach(function(sender){-1!==tracks.indexOf(sender.track)&&pc.removeTrack(sender)})}})}},shimRemoteStreamsAPI:function(window){if(\"object\"==typeof window&&window.RTCPeerConnection&&(\"getRemoteStreams\"in window.RTCPeerConnection.prototype||(window.RTCPeerConnection.prototype.getRemoteStreams=function(){return this._remoteStreams?this._remoteStreams:[]}),!(\"onaddstream\"in window.RTCPeerConnection.prototype))){Object.defineProperty(window.RTCPeerConnection.prototype,\"onaddstream\",{get:function(){return this._onaddstream},set:function(f){this._onaddstream&&this.removeEventListener(\"addstream\",this._onaddstream),this.addEventListener(\"addstream\",this._onaddstream=f)}});var origSetRemoteDescription=window.RTCPeerConnection.prototype.setRemoteDescription;window.RTCPeerConnection.prototype.setRemoteDescription=function(){var pc=this;return this._onaddstreampoly||this.addEventListener(\"track\",this._onaddstreampoly=function(e){e.streams.forEach(function(stream){if(pc._remoteStreams||(pc._remoteStreams=[]),!(pc._remoteStreams.indexOf(stream)>=0)){pc._remoteStreams.push(stream);var event=new Event(\"addstream\");event.stream=stream,pc.dispatchEvent(event)}})}),origSetRemoteDescription.apply(pc,arguments)}}},shimCallbacksAPI:function(window){if(\"object\"==typeof window&&window.RTCPeerConnection){var prototype=window.RTCPeerConnection.prototype,createOffer=prototype.createOffer,createAnswer=prototype.createAnswer,setLocalDescription=prototype.setLocalDescription,setRemoteDescription=prototype.setRemoteDescription,addIceCandidate=prototype.addIceCandidate;prototype.createOffer=function(successCallback,failureCallback){var options=arguments.length>=2?arguments[2]:arguments[0],promise=createOffer.apply(this,[options]);return failureCallback?(promise.then(successCallback,failureCallback),Promise.resolve()):promise},prototype.createAnswer=function(successCallback,failureCallback){var options=arguments.length>=2?arguments[2]:arguments[0],promise=createAnswer.apply(this,[options]);return failureCallback?(promise.then(successCallback,failureCallback),Promise.resolve()):promise};var withCallback=function(description,successCallback,failureCallback){var promise=setLocalDescription.apply(this,[description]);return failureCallback?(promise.then(successCallback,failureCallback),Promise.resolve()):promise};prototype.setLocalDescription=withCallback,withCallback=function(description,successCallback,failureCallback){var promise=setRemoteDescription.apply(this,[description]);return failureCallback?(promise.then(successCallback,failureCallback),Promise.resolve()):promise},prototype.setRemoteDescription=withCallback,withCallback=function(candidate,successCallback,failureCallback){var promise=addIceCandidate.apply(this,[candidate]);return failureCallback?(promise.then(successCallback,failureCallback),Promise.resolve()):promise},prototype.addIceCandidate=withCallback}},shimGetUserMedia:function(window){var navigator=window&&window.navigator;navigator.getUserMedia||(navigator.webkitGetUserMedia?navigator.getUserMedia=navigator.webkitGetUserMedia.bind(navigator):navigator.mediaDevices&&navigator.mediaDevices.getUserMedia&&(navigator.getUserMedia=function(constraints,cb,errcb){navigator.mediaDevices.getUserMedia(constraints).then(cb,errcb)}.bind(navigator)))},shimRTCIceServerUrls:function(window){var OrigPeerConnection=window.RTCPeerConnection;window.RTCPeerConnection=function(pcConfig,pcConstraints){if(pcConfig&&pcConfig.iceServers){for(var newIceServers=[],i=0;i=pos&&parseInt(match[pos],10)}function wrapPeerConnectionEvent(window,eventNameToWrap,wrapper){if(window.RTCPeerConnection){var proto=window.RTCPeerConnection.prototype,nativeAddEventListener=proto.addEventListener;proto.addEventListener=function(nativeEventName,cb){if(nativeEventName!==eventNameToWrap)return nativeAddEventListener.apply(this,arguments);var wrappedCallback=function(e){var modifiedEvent=wrapper(e);modifiedEvent&&cb(modifiedEvent)};return this._eventMap=this._eventMap||{},this._eventMap[cb]=wrappedCallback,nativeAddEventListener.apply(this,[nativeEventName,wrappedCallback])};var nativeRemoveEventListener=proto.removeEventListener;proto.removeEventListener=function(nativeEventName,cb){if(nativeEventName!==eventNameToWrap||!this._eventMap||!this._eventMap[cb])return nativeRemoveEventListener.apply(this,arguments);var unwrappedCb=this._eventMap[cb];return delete this._eventMap[cb],nativeRemoveEventListener.apply(this,[nativeEventName,unwrappedCb])},Object.defineProperty(proto,\"on\"+eventNameToWrap,{get:function(){return this[\"_on\"+eventNameToWrap]},set:function(cb){this[\"_on\"+eventNameToWrap]&&(this.removeEventListener(eventNameToWrap,this[\"_on\"+eventNameToWrap]),delete this[\"_on\"+eventNameToWrap]),cb&&this.addEventListener(eventNameToWrap,this[\"_on\"+eventNameToWrap]=cb)},enumerable:!0,configurable:!0})}}var logDisabled_=!0,deprecationWarnings_=!0;module.exports={extractVersion:extractVersion,wrapPeerConnectionEvent:wrapPeerConnectionEvent,disableLog:function(bool){return\"boolean\"!=typeof bool?new Error(\"Argument type: \"+typeof bool+\". Please use a boolean.\"):(logDisabled_=bool,bool?\"adapter.js logging disabled\":\"adapter.js logging enabled\")},disableWarnings:function(bool){return\"boolean\"!=typeof bool?new Error(\"Argument type: \"+typeof bool+\". Please use a boolean.\"):(deprecationWarnings_=!bool,\"adapter.js deprecation warnings \"+(bool?\"disabled\":\"enabled\"))},log:function(){if(\"object\"==typeof window){if(logDisabled_)return;\"undefined\"!=typeof console&&console.log}},deprecated:function(oldMethod,newMethod){},detectBrowser:function(window){var navigator=window&&window.navigator,result={};if(result.browser=null,result.version=null,void 0===window||!window.navigator)return result.browser=\"Not a browser.\",result;if(navigator.mozGetUserMedia)result.browser=\"firefox\",result.version=extractVersion(navigator.userAgent,/Firefox\\/(\\d+)\\./,1);else if(navigator.webkitGetUserMedia)result.browser=\"chrome\",result.version=extractVersion(navigator.userAgent,/Chrom(e|ium)\\/(\\d+)\\./,2);else if(navigator.mediaDevices&&navigator.userAgent.match(/Edge\\/(\\d+).(\\d+)$/))result.browser=\"edge\",result.version=extractVersion(navigator.userAgent,/Edge\\/(\\d+).(\\d+)$/,2);else{if(!window.RTCPeerConnection||!navigator.userAgent.match(/AppleWebKit\\/(\\d+)\\./))return result.browser=\"Not a supported browser.\",result;result.browser=\"safari\",result.version=extractVersion(navigator.userAgent,/AppleWebKit\\/(\\d+)\\./,1)}return result}}},{}]},{},[3])(3)}),navigator.mozGetUserMedia?(MediaStreamTrack.getSources=function(successCb){setTimeout(function(){successCb([{kind:\"audio\",id:\"default\",label:\"\",facing:\"\"},{kind:\"video\",id:\"default\",label:\"\",facing:\"\"}])},0)},attachMediaStream=function(element,stream){return element.srcObject=stream,element},reattachMediaStream=function(to,from){return to.srcObject=from.srcObject,to}):navigator.webkitGetUserMedia?(attachMediaStream=function(element,stream){return AdapterJS.webrtcDetectedVersion>=43?element.srcObject=stream:void 0!==element.src&&(element.src=URL.createObjectURL(stream)),element},reattachMediaStream=function(to,from){return AdapterJS.webrtcDetectedVersion>=43?to.srcObject=from.srcObject:to.src=from.src,to}):\"AppleWebKit\"===AdapterJS.webrtcDetectedType?(attachMediaStream=function(element,stream){return element.srcObject=stream,element\n},reattachMediaStream=function(to,from){return to.srcObject=from.srcObject,to},navigator.mediaDevices&&navigator.mediaDevices.getUserMedia&&(navigator.getUserMedia=getUserMedia=function(constraints,successCb,errorCb){navigator.mediaDevices.getUserMedia(constraints).then(successCb).catch(errorCb)})):navigator.mediaDevices&&navigator.userAgent.match(/Edge\\/(\\d+).(\\d+)$/)&&(attachMediaStream=function(element,stream){return element.srcObject=stream,element},reattachMediaStream=function(to,from){return to.srcObject=from.srcObject,to});var attachMediaStream_base=attachMediaStream;\"opera\"===AdapterJS.webrtcDetectedBrowser&&(attachMediaStream_base=function(element,stream){AdapterJS.webrtcDetectedVersion>38?element.srcObject=stream:void 0!==element.src&&(element.src=URL.createObjectURL(stream))}),attachMediaStream=function(element,stream){return\"chrome\"!==AdapterJS.webrtcDetectedBrowser&&\"opera\"!==AdapterJS.webrtcDetectedBrowser||stream?attachMediaStream_base(element,stream):element.src=\"\",element};var reattachMediaStream_base=reattachMediaStream;reattachMediaStream=function(to,from){return reattachMediaStream_base(to,from),to},window.attachMediaStream=attachMediaStream,window.reattachMediaStream=reattachMediaStream,window.getUserMedia=function(constraints,onSuccess,onFailure){navigator.getUserMedia(constraints,onSuccess,onFailure)},AdapterJS.attachMediaStream=attachMediaStream,AdapterJS.reattachMediaStream=reattachMediaStream,AdapterJS.getUserMedia=getUserMedia,\"undefined\"==typeof Promise&&(requestUserMedia=null),AdapterJS.maybeThroughWebRTCReady()}else\"object\"==typeof console&&\"function\"==typeof console.log||(console={}||console,console.log=function(arg){},console.info=function(arg){},console.error=function(arg){},console.dir=function(arg){},console.exception=function(arg){},console.trace=function(arg){},console.warn=function(arg){},console.count=function(arg){},console.debug=function(arg){},console.count=function(arg){},console.time=function(arg){},console.timeEnd=function(arg){},console.group=function(arg){},console.groupCollapsed=function(arg){},console.groupEnd=function(arg){}),AdapterJS.WebRTCPlugin.WaitForPluginReady=function(){for(;AdapterJS.WebRTCPlugin.pluginState!==AdapterJS.WebRTCPlugin.PLUGIN_STATES.READY;);},AdapterJS.WebRTCPlugin.callWhenPluginReady=function(callback){if(AdapterJS.WebRTCPlugin.pluginState===AdapterJS.WebRTCPlugin.PLUGIN_STATES.READY)callback();else var checkPluginReadyState=setInterval(function(){AdapterJS.WebRTCPlugin.pluginState===AdapterJS.WebRTCPlugin.PLUGIN_STATES.READY&&(clearInterval(checkPluginReadyState),callback())},100)},AdapterJS.WebRTCPlugin.setLogLevel=function(logLevel){AdapterJS.WebRTCPlugin.callWhenPluginReady(function(){AdapterJS.WebRTCPlugin.plugin.setLogLevel(logLevel)})},AdapterJS.WebRTCPlugin.injectPlugin=function(){if(AdapterJS.documentReady()&&AdapterJS.WebRTCPlugin.pluginState===AdapterJS.WebRTCPlugin.PLUGIN_STATES.INITIALIZING){AdapterJS.WebRTCPlugin.pluginState=AdapterJS.WebRTCPlugin.PLUGIN_STATES.INJECTING;var existing=document.getElementById(AdapterJS.WebRTCPlugin.pluginInfo.pluginId);if(existing)if(AdapterJS.WebRTCPlugin.plugin=existing,AdapterJS.WebRTCPlugin.pluginState=AdapterJS.WebRTCPlugin.PLUGIN_STATES.INJECTED,AdapterJS.WebRTCPlugin.plugin.valid)window[AdapterJS.WebRTCPlugin.pluginInfo.onload]();else var pluginValidInterval=setInterval(function(){AdapterJS.WebRTCPlugin.plugin.valid&&(clearInterval(pluginValidInterval),window[AdapterJS.WebRTCPlugin.pluginInfo.onload]())},100);else{if(\"IE\"===AdapterJS.webrtcDetectedBrowser&&AdapterJS.webrtcDetectedVersion<=10){var frag=document.createDocumentFragment();for(AdapterJS.WebRTCPlugin.plugin=document.createElement(\"div\"),AdapterJS.WebRTCPlugin.plugin.innerHTML=' '+(AdapterJS.options.getAllCams?'':\"\")+\"\";AdapterJS.WebRTCPlugin.plugin.firstChild;)frag.appendChild(AdapterJS.WebRTCPlugin.plugin.firstChild);document.body.appendChild(frag),AdapterJS.WebRTCPlugin.plugin=document.getElementById(AdapterJS.WebRTCPlugin.pluginInfo.pluginId)}else AdapterJS.WebRTCPlugin.plugin=document.createElement(\"object\"),AdapterJS.WebRTCPlugin.plugin.id=AdapterJS.WebRTCPlugin.pluginInfo.pluginId,\"IE\"===AdapterJS.webrtcDetectedBrowser?(AdapterJS.WebRTCPlugin.plugin.width=\"1px\",AdapterJS.WebRTCPlugin.plugin.height=\"1px\"):(AdapterJS.WebRTCPlugin.plugin.width=\"0px\",AdapterJS.WebRTCPlugin.plugin.height=\"0px\"),AdapterJS.WebRTCPlugin.plugin.type=AdapterJS.WebRTCPlugin.pluginInfo.type,AdapterJS.WebRTCPlugin.plugin.innerHTML=' '+(AdapterJS.options.getAllCams?'':\"\")+'',document.body.appendChild(AdapterJS.WebRTCPlugin.plugin);AdapterJS.WebRTCPlugin.pluginState=AdapterJS.WebRTCPlugin.PLUGIN_STATES.INJECTED}}},AdapterJS.WebRTCPlugin.isPluginInstalled=function(comName,plugName,plugType,installedCb,notInstalledCb){if(\"IE\"!==AdapterJS.webrtcDetectedBrowser){var pluginArray=navigator.mimeTypes;if(void 0!==pluginArray){for(var i=0;i=0)return void installedCb();notInstalledCb()}else AdapterJS.renderNotificationBar(AdapterJS.TEXT.PLUGIN.NOT_SUPPORTED)}else{try{new ActiveXObject(comName+\".\"+plugName)}catch(e){return void notInstalledCb()}installedCb()}},AdapterJS.WebRTCPlugin.defineWebRTCInterface=function(){if(AdapterJS.WebRTCPlugin.pluginState!==AdapterJS.WebRTCPlugin.PLUGIN_STATES.READY){AdapterJS.WebRTCPlugin.pluginState=AdapterJS.WebRTCPlugin.PLUGIN_STATES.INITIALIZING,AdapterJS.isDefined=function(variable){return null!==variable&&void 0!==variable},RTCSessionDescription=function(info){return AdapterJS.WebRTCPlugin.WaitForPluginReady(),AdapterJS.WebRTCPlugin.plugin.ConstructSessionDescription(info.type,info.sdp)},MediaStream=function(mediaStreamOrTracks){return AdapterJS.WebRTCPlugin.WaitForPluginReady(),AdapterJS.WebRTCPlugin.plugin.MediaStream(mediaStreamOrTracks)},RTCPeerConnection=function(servers,constraints){if(void 0!==servers&&null!==servers&&!Array.isArray(servers.iceServers))throw new Error(\"Failed to construct 'RTCPeerConnection': Malformed RTCConfiguration\");if(void 0!==constraints&&null!==constraints){var invalidConstraits=!1;if(invalidConstraits|=\"object\"!=typeof constraints,invalidConstraits|=constraints.hasOwnProperty(\"mandatory\")&&void 0!==constraints.mandatory&&null!==constraints.mandatory&&constraints.mandatory.constructor!==Object,invalidConstraits|=constraints.hasOwnProperty(\"optional\")&&void 0!==constraints.optional&&null!==constraints.optional&&!Array.isArray(constraints.optional))throw new Error(\"Failed to construct 'RTCPeerConnection': Malformed constraints object\")}AdapterJS.WebRTCPlugin.WaitForPluginReady();var iceServers=null;if(servers&&Array.isArray(servers.iceServers)){iceServers=servers.iceServers;for(var i=0;i1)return iceServers&&(servers.iceServers=iceServers),AdapterJS.WebRTCPlugin.plugin.PeerConnection(servers);var mandatory=constraints&&constraints.mandatory?constraints.mandatory:null,optional=constraints&&constraints.optional?constraints.optional:null;return AdapterJS.WebRTCPlugin.plugin.PeerConnection(AdapterJS.WebRTCPlugin.pageId,iceServers,mandatory,optional)},MediaStreamTrack=function(){},MediaStreamTrack.getSources=function(callback){AdapterJS.WebRTCPlugin.callWhenPluginReady(function(){AdapterJS.WebRTCPlugin.plugin.GetSources(callback)})};var constraintsToPlugin=function(c){if(\"object\"!=typeof c||c.mandatory||c.optional)return c;var cc={};return Object.keys(c).forEach(function(key){if(\"require\"!==key&&\"advanced\"!==key){if(\"string\"==typeof c[key])return void(cc[key]=c[key]);var r=\"object\"==typeof c[key]?c[key]:{ideal:c[key]};void 0!==r.exact&&\"number\"==typeof r.exact&&(r.min=r.max=r.exact);var oldname=function(prefix,name){return prefix?prefix+name.charAt(0).toUpperCase()+name.slice(1):\"deviceId\"===name?\"sourceId\":name};if(\"sourceId\"===oldname(\"\",key)&&void 0!==r.exact&&(r.ideal=r.exact,r.exact=void 0),void 0!==r.ideal){cc.optional=cc.optional||[];var oc={};\"number\"==typeof r.ideal?(oc[oldname(\"min\",key)]=r.ideal,cc.optional.push(oc),oc={},oc[oldname(\"max\",key)]=r.ideal,cc.optional.push(oc)):(oc[oldname(\"\",key)]=r.ideal,cc.optional.push(oc))}void 0!==r.exact&&\"number\"!=typeof r.exact?(cc.mandatory=cc.mandatory||{},cc.mandatory[oldname(\"\",key)]=r.exact):[\"min\",\"max\"].forEach(function(mix){void 0!==r[mix]&&(cc.mandatory=cc.mandatory||{},cc.mandatory[oldname(mix,key)]=r[mix])})}}),c.advanced&&(cc.optional=(cc.optional||[]).concat(c.advanced)),cc};getUserMedia=function(constraints,successCallback,failureCallback){var cc={};cc.audio=!!constraints.audio&&constraintsToPlugin(constraints.audio),cc.video=!!constraints.video&&constraintsToPlugin(constraints.video),AdapterJS.WebRTCPlugin.callWhenPluginReady(function(){AdapterJS.WebRTCPlugin.plugin.getUserMedia(cc,successCallback,failureCallback)})},window.navigator.getUserMedia=getUserMedia,\"undefined\"!=typeof Promise&&(requestUserMedia=function(constraints){return new Promise(function(resolve,reject){try{getUserMedia(constraints,resolve,reject)}catch(error){reject(error)}})},void 0===navigator.mediaDevices&&(navigator.mediaDevices={}),navigator.mediaDevices.getUserMedia=requestUserMedia,navigator.mediaDevices.enumerateDevices=function(){return new Promise(function(resolve){var kinds={audio:\"audioinput\",video:\"videoinput\"};return MediaStreamTrack.getSources(function(devices){resolve(devices.map(function(device){return{label:device.label,kind:kinds[device.kind],id:device.id,deviceId:device.id,groupId:\"\"}}))})})}),attachMediaStream=function(element,stream){if(element&&element.parentNode){var streamId;null===stream?streamId=\"\":(void 0!==stream.enableSoundTracks&&stream.enableSoundTracks(!0),streamId=stream.id);var elementId=0===element.id.length?Math.random().toString(36).slice(2):element.id,nodeName=element.nodeName.toLowerCase();if(\"object\"!==nodeName){var tag;switch(nodeName){case\"audio\":tag=AdapterJS.WebRTCPlugin.TAGS.AUDIO;break;case\"video\":tag=AdapterJS.WebRTCPlugin.TAGS.VIDEO;break;default:tag=AdapterJS.WebRTCPlugin.TAGS.NONE}var frag=document.createDocumentFragment(),temp=document.createElement(\"div\"),classHTML=\"\";for(element.className?classHTML='class=\"'+element.className+'\" ':element.attributes&&element.attributes.class&&(classHTML='class=\"'+element.attributes.class.value+'\" '),temp.innerHTML=' ';temp.firstChild;)frag.appendChild(temp.firstChild);var height=\"\",width=\"\";element.clientWidth||element.clientHeight?(width=element.clientWidth,height=element.clientHeight):(element.width||element.height)&&(width=element.width,height=element.height),element.parentNode.insertBefore(frag,element),frag=document.getElementById(elementId),frag.width=width,frag.height=height,element.parentNode.removeChild(element)}else{for(var children=element.children,i=0;i!==children.length;++i)if(\"streamId\"===children[i].name){children[i].value=streamId;break}element.setStreamId(streamId)}var newElement=document.getElementById(elementId);return AdapterJS.forwardEventHandlers(newElement,element,Object.getPrototypeOf(element)),newElement}},reattachMediaStream=function(to,from){for(var stream=null,children=from.children,i=0;i!==children.length;++i)if(\"streamId\"===children[i].name){AdapterJS.WebRTCPlugin.WaitForPluginReady(),stream=AdapterJS.WebRTCPlugin.plugin.getStreamWithId(AdapterJS.WebRTCPlugin.pageId,children[i].value);break}if(null!==stream)return attachMediaStream(to,stream)},window.attachMediaStream=attachMediaStream,window.reattachMediaStream=reattachMediaStream,window.getUserMedia=getUserMedia,AdapterJS.attachMediaStream=attachMediaStream,AdapterJS.reattachMediaStream=reattachMediaStream,AdapterJS.getUserMedia=getUserMedia,AdapterJS.forwardEventHandlers=function(destElem,srcElem,prototype){var properties=Object.getOwnPropertyNames(prototype);for(var prop in properties)if(prop){var propName=properties[prop];\"function\"==typeof propName.slice&&\"on\"===propName.slice(0,2)&&\"function\"==typeof srcElem[propName]&&AdapterJS.addEvent(destElem,propName.slice(2),srcElem[propName])}var subPrototype=Object.getPrototypeOf(prototype);subPrototype&&AdapterJS.forwardEventHandlers(destElem,srcElem,subPrototype)},RTCIceCandidate=function(candidate){return candidate.sdpMid||(candidate.sdpMid=\"\"),AdapterJS.WebRTCPlugin.WaitForPluginReady(),AdapterJS.WebRTCPlugin.plugin.ConstructIceCandidate(candidate.sdpMid,candidate.sdpMLineIndex,candidate.candidate)},AdapterJS.addEvent(document,\"readystatechange\",AdapterJS.WebRTCPlugin.injectPlugin),AdapterJS.WebRTCPlugin.injectPlugin()}},AdapterJS.WebRTCPlugin.pluginNeededButNotInstalledCb=AdapterJS.WebRTCPlugin.pluginNeededButNotInstalledCb||function(){AdapterJS.addEvent(document,\"readystatechange\",AdapterJS.WebRTCPlugin.pluginNeededButNotInstalledCbPriv),AdapterJS.WebRTCPlugin.pluginNeededButNotInstalledCbPriv()},AdapterJS.WebRTCPlugin.pluginNeededButNotInstalledCbPriv=function(){if(AdapterJS.documentReady()&&(document.removeEventListener(\"readystatechange\",AdapterJS.WebRTCPlugin.pluginNeededButNotInstalledCbPriv),!AdapterJS.options.hidePluginInstallPrompt)){var downloadLink=AdapterJS.WebRTCPlugin.pluginInfo.downloadLink;if(downloadLink){var popupString;AdapterJS.WebRTCPlugin.pluginInfo.companyName?(popupString=\"This website requires you to install the \",AdapterJS.WebRTCPlugin.pluginInfo.portalLink?popupString+=' '+AdapterJS.WebRTCPlugin.pluginInfo.companyName+\" WebRTC Plugin\":popupString+=AdapterJS.WebRTCPlugin.pluginInfo.companyName+\" WebRTC Plugin\",popupString+=\" to work on this browser.\"):popupString=AdapterJS.TEXT.PLUGIN.REQUIRE_INSTALLATION,AdapterJS.renderNotificationBar(popupString,AdapterJS.TEXT.PLUGIN.BUTTON,function(){if(window.open(downloadLink,\"_top\"),\"safari\"===webrtcDetectedBrowser&&11==webrtcDetectedVersion)AdapterJS.renderNotificationBar(AdapterJS.TEXT.PLUGIN.REQUIRE_RESTART);else var pluginInstallInterval=setInterval(function(){\"IE\"!==AdapterJS.webrtcDetectedBrowser&&navigator.plugins.refresh(!1),AdapterJS.WebRTCPlugin.isPluginInstalled(AdapterJS.WebRTCPlugin.pluginInfo.prefix,AdapterJS.WebRTCPlugin.pluginInfo.plugName,AdapterJS.WebRTCPlugin.pluginInfo.type,function(){clearInterval(pluginInstallInterval),AdapterJS.WebRTCPlugin.defineWebRTCInterface()},function(){})},500)})}else AdapterJS.renderNotificationBar(AdapterJS.TEXT.PLUGIN.NOT_SUPPORTED)}},AdapterJS.WebRTCPlugin.isPluginInstalled(AdapterJS.WebRTCPlugin.pluginInfo.prefix,AdapterJS.WebRTCPlugin.pluginInfo.plugName,AdapterJS.WebRTCPlugin.pluginInfo.type,AdapterJS.WebRTCPlugin.defineWebRTCInterface,AdapterJS.WebRTCPlugin.pluginNeededButNotInstalledCb);\"undefined\"!=typeof exports&&(module.exports=AdapterJS);","// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n};\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nimport { LogLevel } from \"./ILogger\";\r\nimport { NullLogger } from \"./Loggers\";\r\n// Version token that will be replaced by the prepack command\r\n/** The version of the SignalR client. */\r\nexport var VERSION = \"5.0.6\";\r\n/** @private */\r\nvar Arg = /** @class */ (function () {\r\n function Arg() {\r\n }\r\n Arg.isRequired = function (val, name) {\r\n if (val === null || val === undefined) {\r\n throw new Error(\"The '\" + name + \"' argument is required.\");\r\n }\r\n };\r\n Arg.isNotEmpty = function (val, name) {\r\n if (!val || val.match(/^\\s*$/)) {\r\n throw new Error(\"The '\" + name + \"' argument should not be empty.\");\r\n }\r\n };\r\n Arg.isIn = function (val, values, name) {\r\n // TypeScript enums have keys for **both** the name and the value of each enum member on the type itself.\r\n if (!(val in values)) {\r\n throw new Error(\"Unknown \" + name + \" value: \" + val + \".\");\r\n }\r\n };\r\n return Arg;\r\n}());\r\nexport { Arg };\r\n/** @private */\r\nvar Platform = /** @class */ (function () {\r\n function Platform() {\r\n }\r\n Object.defineProperty(Platform, \"isBrowser\", {\r\n get: function () {\r\n return typeof window === \"object\";\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Platform, \"isWebWorker\", {\r\n get: function () {\r\n return typeof self === \"object\" && \"importScripts\" in self;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Platform, \"isNode\", {\r\n get: function () {\r\n return !this.isBrowser && !this.isWebWorker;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return Platform;\r\n}());\r\nexport { Platform };\r\n/** @private */\r\nexport function getDataDetail(data, includeContent) {\r\n var detail = \"\";\r\n if (isArrayBuffer(data)) {\r\n detail = \"Binary data of length \" + data.byteLength;\r\n if (includeContent) {\r\n detail += \". Content: '\" + formatArrayBuffer(data) + \"'\";\r\n }\r\n }\r\n else if (typeof data === \"string\") {\r\n detail = \"String data of length \" + data.length;\r\n if (includeContent) {\r\n detail += \". Content: '\" + data + \"'\";\r\n }\r\n }\r\n return detail;\r\n}\r\n/** @private */\r\nexport function formatArrayBuffer(data) {\r\n var view = new Uint8Array(data);\r\n // Uint8Array.map only supports returning another Uint8Array?\r\n var str = \"\";\r\n view.forEach(function (num) {\r\n var pad = num < 16 ? \"0\" : \"\";\r\n str += \"0x\" + pad + num.toString(16) + \" \";\r\n });\r\n // Trim of trailing space.\r\n return str.substr(0, str.length - 1);\r\n}\r\n// Also in signalr-protocol-msgpack/Utils.ts\r\n/** @private */\r\nexport function isArrayBuffer(val) {\r\n return val && typeof ArrayBuffer !== \"undefined\" &&\r\n (val instanceof ArrayBuffer ||\r\n // Sometimes we get an ArrayBuffer that doesn't satisfy instanceof\r\n (val.constructor && val.constructor.name === \"ArrayBuffer\"));\r\n}\r\n/** @private */\r\nexport function sendMessage(logger, transportName, httpClient, url, accessTokenFactory, content, logMessageContent, withCredentials, defaultHeaders) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var _a, headers, token, _b, name, value, responseType, response;\r\n return __generator(this, function (_c) {\r\n switch (_c.label) {\r\n case 0:\r\n headers = {};\r\n if (!accessTokenFactory) return [3 /*break*/, 2];\r\n return [4 /*yield*/, accessTokenFactory()];\r\n case 1:\r\n token = _c.sent();\r\n if (token) {\r\n headers = (_a = {},\r\n _a[\"Authorization\"] = \"Bearer \" + token,\r\n _a);\r\n }\r\n _c.label = 2;\r\n case 2:\r\n _b = getUserAgentHeader(), name = _b[0], value = _b[1];\r\n headers[name] = value;\r\n logger.log(LogLevel.Trace, \"(\" + transportName + \" transport) sending data. \" + getDataDetail(content, logMessageContent) + \".\");\r\n responseType = isArrayBuffer(content) ? \"arraybuffer\" : \"text\";\r\n return [4 /*yield*/, httpClient.post(url, {\r\n content: content,\r\n headers: __assign({}, headers, defaultHeaders),\r\n responseType: responseType,\r\n withCredentials: withCredentials,\r\n })];\r\n case 3:\r\n response = _c.sent();\r\n logger.log(LogLevel.Trace, \"(\" + transportName + \" transport) request complete. Response status: \" + response.statusCode + \".\");\r\n return [2 /*return*/];\r\n }\r\n });\r\n });\r\n}\r\n/** @private */\r\nexport function createLogger(logger) {\r\n if (logger === undefined) {\r\n return new ConsoleLogger(LogLevel.Information);\r\n }\r\n if (logger === null) {\r\n return NullLogger.instance;\r\n }\r\n if (logger.log) {\r\n return logger;\r\n }\r\n return new ConsoleLogger(logger);\r\n}\r\n/** @private */\r\nvar SubjectSubscription = /** @class */ (function () {\r\n function SubjectSubscription(subject, observer) {\r\n this.subject = subject;\r\n this.observer = observer;\r\n }\r\n SubjectSubscription.prototype.dispose = function () {\r\n var index = this.subject.observers.indexOf(this.observer);\r\n if (index > -1) {\r\n this.subject.observers.splice(index, 1);\r\n }\r\n if (this.subject.observers.length === 0 && this.subject.cancelCallback) {\r\n this.subject.cancelCallback().catch(function (_) { });\r\n }\r\n };\r\n return SubjectSubscription;\r\n}());\r\nexport { SubjectSubscription };\r\n/** @private */\r\nvar ConsoleLogger = /** @class */ (function () {\r\n function ConsoleLogger(minimumLogLevel) {\r\n this.minimumLogLevel = minimumLogLevel;\r\n this.outputConsole = console;\r\n }\r\n ConsoleLogger.prototype.log = function (logLevel, message) {\r\n if (logLevel >= this.minimumLogLevel) {\r\n switch (logLevel) {\r\n case LogLevel.Critical:\r\n case LogLevel.Error:\r\n this.outputConsole.error(\"[\" + new Date().toISOString() + \"] \" + LogLevel[logLevel] + \": \" + message);\r\n break;\r\n case LogLevel.Warning:\r\n this.outputConsole.warn(\"[\" + new Date().toISOString() + \"] \" + LogLevel[logLevel] + \": \" + message);\r\n break;\r\n case LogLevel.Information:\r\n this.outputConsole.info(\"[\" + new Date().toISOString() + \"] \" + LogLevel[logLevel] + \": \" + message);\r\n break;\r\n default:\r\n // console.debug only goes to attached debuggers in Node, so we use console.log for Trace and Debug\r\n this.outputConsole.log(\"[\" + new Date().toISOString() + \"] \" + LogLevel[logLevel] + \": \" + message);\r\n break;\r\n }\r\n }\r\n };\r\n return ConsoleLogger;\r\n}());\r\nexport { ConsoleLogger };\r\n/** @private */\r\nexport function getUserAgentHeader() {\r\n var userAgentHeaderName = \"X-SignalR-User-Agent\";\r\n if (Platform.isNode) {\r\n userAgentHeaderName = \"User-Agent\";\r\n }\r\n return [userAgentHeaderName, constructUserAgent(VERSION, getOsName(), getRuntime(), getRuntimeVersion())];\r\n}\r\n/** @private */\r\nexport function constructUserAgent(version, os, runtime, runtimeVersion) {\r\n // Microsoft SignalR/[Version] ([Detailed Version]; [Operating System]; [Runtime]; [Runtime Version])\r\n var userAgent = \"Microsoft SignalR/\";\r\n var majorAndMinor = version.split(\".\");\r\n userAgent += majorAndMinor[0] + \".\" + majorAndMinor[1];\r\n userAgent += \" (\" + version + \"; \";\r\n if (os && os !== \"\") {\r\n userAgent += os + \"; \";\r\n }\r\n else {\r\n userAgent += \"Unknown OS; \";\r\n }\r\n userAgent += \"\" + runtime;\r\n if (runtimeVersion) {\r\n userAgent += \"; \" + runtimeVersion;\r\n }\r\n else {\r\n userAgent += \"; Unknown Runtime Version\";\r\n }\r\n userAgent += \")\";\r\n return userAgent;\r\n}\r\nfunction getOsName() {\r\n if (Platform.isNode) {\r\n switch (process.platform) {\r\n case \"win32\":\r\n return \"Windows NT\";\r\n case \"darwin\":\r\n return \"macOS\";\r\n case \"linux\":\r\n return \"Linux\";\r\n default:\r\n return process.platform;\r\n }\r\n }\r\n else {\r\n return \"\";\r\n }\r\n}\r\nfunction getRuntimeVersion() {\r\n if (Platform.isNode) {\r\n return process.versions.node;\r\n }\r\n return undefined;\r\n}\r\nfunction getRuntime() {\r\n if (Platform.isNode) {\r\n return \"NodeJS\";\r\n }\r\n else {\r\n return \"Browser\";\r\n }\r\n}\r\n//# sourceMappingURL=Utils.js.map","module.exports = require(\"core-js/library/fn/object/define-property\");","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","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!./ParticipantBlock.vue?vue&type=style&index=0&lang=css&\"","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!./ControlMenu.vue?vue&type=style&index=0&lang=css&\"","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return ''\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n","// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\n/** A logger that does nothing when log messages are sent to it. */\r\nvar NullLogger = /** @class */ (function () {\r\n function NullLogger() {\r\n }\r\n /** @inheritDoc */\r\n // tslint:disable-next-line\r\n NullLogger.prototype.log = function (_logLevel, _message) {\r\n };\r\n /** The singleton instance of the {@link @microsoft/signalr.NullLogger}. */\r\n NullLogger.instance = new NullLogger();\r\n return NullLogger;\r\n}());\r\nexport { NullLogger };\r\n//# sourceMappingURL=Loggers.js.map","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","'use strict';\r\n\r\n// Last time updated: 2019-06-15 4:26:11 PM UTC\r\n\r\n// _________________________\r\n// RTCMultiConnection v3.6.9\r\n\r\n// Open-Sourced: https://github.com/muaz-khan/RTCMultiConnection\r\n\r\n// --------------------------------------------------\r\n// Muaz Khan - www.MuazKhan.com\r\n// MIT License - www.WebRTC-Experiment.com/licence\r\n// --------------------------------------------------\r\n\r\nvar RTCMultiConnection = function(roomid, forceOptions) {\r\n\r\n var browserFakeUserAgent = 'Fake/5.0 (FakeOS) AppleWebKit/123 (KHTML, like Gecko) Fake/12.3.4567.89 Fake/123.45';\r\n\r\n (function(that) {\r\n if (!that) {\r\n return;\r\n }\r\n\r\n if (typeof window !== 'undefined') {\r\n return;\r\n }\r\n\r\n if (typeof global === 'undefined') {\r\n return;\r\n }\r\n\r\n global.navigator = {\r\n userAgent: browserFakeUserAgent,\r\n getUserMedia: function() {}\r\n };\r\n\r\n if (!global.console) {\r\n global.console = {};\r\n }\r\n\r\n if (typeof global.console.debug === 'undefined') {\r\n global.console.debug = global.console.info = global.console.error = global.console.log = global.console.log || function() {\r\n console.log(arguments);\r\n };\r\n }\r\n\r\n if (typeof document === 'undefined') {\r\n /*global document:true */\r\n that.document = {};\r\n\r\n document.createElement = document.captureStream = document.mozCaptureStream = function() {\r\n var obj = {\r\n getContext: function() {\r\n return obj;\r\n },\r\n play: function() {},\r\n pause: function() {},\r\n drawImage: function() {},\r\n toDataURL: function() {\r\n return '';\r\n }\r\n };\r\n return obj;\r\n };\r\n\r\n document.addEventListener = document.removeEventListener = that.addEventListener = that.removeEventListener = function() {};\r\n\r\n that.HTMLVideoElement = that.HTMLMediaElement = function() {};\r\n }\r\n\r\n if (typeof io === 'undefined') {\r\n that.io = function() {\r\n return {\r\n on: function(eventName, callback) {\r\n callback = callback || function() {};\r\n\r\n if (eventName === 'connect') {\r\n callback();\r\n }\r\n },\r\n emit: function(eventName, data, callback) {\r\n callback = callback || function() {};\r\n if (eventName === 'open-room' || eventName === 'join-room') {\r\n callback(true, data.sessionid, null);\r\n }\r\n }\r\n };\r\n };\r\n }\r\n\r\n if (typeof location === 'undefined') {\r\n /*global location:true */\r\n that.location = {\r\n protocol: 'file:',\r\n href: '',\r\n hash: '',\r\n origin: 'self'\r\n };\r\n }\r\n\r\n if (typeof screen === 'undefined') {\r\n /*global screen:true */\r\n that.screen = {\r\n width: 0,\r\n height: 0\r\n };\r\n }\r\n\r\n if (typeof URL === 'undefined') {\r\n /*global screen:true */\r\n that.URL = {\r\n createObjectURL: function() {\r\n return '';\r\n },\r\n revokeObjectURL: function() {\r\n return '';\r\n }\r\n };\r\n }\r\n\r\n /*global window:true */\r\n that.window = global;\r\n })(typeof global !== 'undefined' ? global : null);\r\n\r\n function SocketConnection(connection, connectCallback) {\r\n function isData(session) {\r\n return !session.audio && !session.video && !session.screen && session.data;\r\n }\r\n\r\n var parameters = '';\r\n\r\n parameters += '?userid=' + connection.userid;\r\n parameters += '&sessionid=' + connection.sessionid;\r\n parameters += '&msgEvent=' + connection.socketMessageEvent;\r\n parameters += '&socketCustomEvent=' + connection.socketCustomEvent;\r\n parameters += '&autoCloseEntireSession=' + !!connection.autoCloseEntireSession;\r\n\r\n if (connection.session.broadcast === true) {\r\n parameters += '&oneToMany=true';\r\n }\r\n\r\n parameters += '&maxParticipantsAllowed=' + connection.maxParticipantsAllowed;\r\n\r\n if (connection.enableScalableBroadcast) {\r\n parameters += '&enableScalableBroadcast=true';\r\n parameters += '&maxRelayLimitPerUser=' + (connection.maxRelayLimitPerUser || 2);\r\n }\r\n\r\n parameters += '&extra=' + JSON.stringify(connection.extra || {});\r\n\r\n if (connection.socketCustomParameters) {\r\n parameters += connection.socketCustomParameters;\r\n }\r\n\r\n try {\r\n io.sockets = {};\r\n } catch (e) {};\r\n\r\n if (!connection.socketURL) {\r\n connection.socketURL = '/';\r\n }\r\n\r\n if (connection.socketURL.substr(connection.socketURL.length - 1, 1) != '/') {\r\n // connection.socketURL = 'https://domain.com:9001/';\r\n throw '\"socketURL\" MUST end with a slash.';\r\n }\r\n\r\n if (connection.enableLogs) {\r\n if (connection.socketURL == '/') {\r\n console.info('socket.io url is: ', location.origin + '/');\r\n } else {\r\n console.info('socket.io url is: ', connection.socketURL);\r\n }\r\n }\r\n\r\n try {\r\n connection.socket = io(connection.socketURL + parameters);\r\n } catch (e) {\r\n connection.socket = io.connect(connection.socketURL + parameters, connection.socketOptions);\r\n }\r\n\r\n var mPeer = connection.multiPeersHandler;\r\n\r\n connection.socket.on('extra-data-updated', function(remoteUserId, extra) {\r\n if (!connection.peers[remoteUserId]) return;\r\n connection.peers[remoteUserId].extra = extra;\r\n\r\n connection.onExtraDataUpdated({\r\n userid: remoteUserId,\r\n extra: extra\r\n });\r\n\r\n updateExtraBackup(remoteUserId, extra);\r\n });\r\n\r\n function updateExtraBackup(remoteUserId, extra) {\r\n if (!connection.peersBackup[remoteUserId]) {\r\n connection.peersBackup[remoteUserId] = {\r\n userid: remoteUserId,\r\n extra: {}\r\n };\r\n }\r\n\r\n connection.peersBackup[remoteUserId].extra = extra;\r\n }\r\n\r\n function onMessageEvent(message) {\r\n if (message.remoteUserId != connection.userid) return;\r\n\r\n if (connection.peers[message.sender] && connection.peers[message.sender].extra != message.message.extra) {\r\n connection.peers[message.sender].extra = message.extra;\r\n connection.onExtraDataUpdated({\r\n userid: message.sender,\r\n extra: message.extra\r\n });\r\n\r\n updateExtraBackup(message.sender, message.extra);\r\n }\r\n\r\n if (message.message.streamSyncNeeded && connection.peers[message.sender]) {\r\n var stream = connection.streamEvents[message.message.streamid];\r\n if (!stream || !stream.stream) {\r\n return;\r\n }\r\n\r\n var action = message.message.action;\r\n\r\n if (action === 'ended' || action === 'inactive' || action === 'stream-removed') {\r\n if (connection.peersBackup[stream.userid]) {\r\n stream.extra = connection.peersBackup[stream.userid].extra;\r\n }\r\n connection.onstreamended(stream);\r\n return;\r\n }\r\n\r\n var type = message.message.type != 'both' ? message.message.type : null;\r\n\r\n if (typeof stream.stream[action] == 'function') {\r\n stream.stream[action](type);\r\n }\r\n return;\r\n }\r\n\r\n if (message.message === 'dropPeerConnection') {\r\n connection.deletePeer(message.sender);\r\n return;\r\n }\r\n\r\n if (message.message.allParticipants) {\r\n if (message.message.allParticipants.indexOf(message.sender) === -1) {\r\n message.message.allParticipants.push(message.sender);\r\n }\r\n\r\n message.message.allParticipants.forEach(function(participant) {\r\n mPeer[!connection.peers[participant] ? 'createNewPeer' : 'renegotiatePeer'](participant, {\r\n localPeerSdpConstraints: {\r\n OfferToReceiveAudio: connection.sdpConstraints.mandatory.OfferToReceiveAudio,\r\n OfferToReceiveVideo: connection.sdpConstraints.mandatory.OfferToReceiveVideo\r\n },\r\n remotePeerSdpConstraints: {\r\n OfferToReceiveAudio: connection.session.oneway ? !!connection.session.audio : connection.sdpConstraints.mandatory.OfferToReceiveAudio,\r\n OfferToReceiveVideo: connection.session.oneway ? !!connection.session.video || !!connection.session.screen : connection.sdpConstraints.mandatory.OfferToReceiveVideo\r\n },\r\n isOneWay: !!connection.session.oneway || connection.direction === 'one-way',\r\n isDataOnly: isData(connection.session)\r\n });\r\n });\r\n return;\r\n }\r\n\r\n if (message.message.newParticipant) {\r\n if (message.message.newParticipant == connection.userid) return;\r\n if (!!connection.peers[message.message.newParticipant]) return;\r\n\r\n mPeer.createNewPeer(message.message.newParticipant, message.message.userPreferences || {\r\n localPeerSdpConstraints: {\r\n OfferToReceiveAudio: connection.sdpConstraints.mandatory.OfferToReceiveAudio,\r\n OfferToReceiveVideo: connection.sdpConstraints.mandatory.OfferToReceiveVideo\r\n },\r\n remotePeerSdpConstraints: {\r\n OfferToReceiveAudio: connection.session.oneway ? !!connection.session.audio : connection.sdpConstraints.mandatory.OfferToReceiveAudio,\r\n OfferToReceiveVideo: connection.session.oneway ? !!connection.session.video || !!connection.session.screen : connection.sdpConstraints.mandatory.OfferToReceiveVideo\r\n },\r\n isOneWay: !!connection.session.oneway || connection.direction === 'one-way',\r\n isDataOnly: isData(connection.session)\r\n });\r\n return;\r\n }\r\n\r\n if (message.message.readyForOffer) {\r\n if (connection.attachStreams.length) {\r\n connection.waitingForLocalMedia = false;\r\n }\r\n\r\n if (connection.waitingForLocalMedia) {\r\n // if someone is waiting to join you\r\n // make sure that we've local media before making a handshake\r\n setTimeout(function() {\r\n onMessageEvent(message);\r\n }, 1);\r\n return;\r\n }\r\n }\r\n\r\n if (message.message.newParticipationRequest && message.sender !== connection.userid) {\r\n if (connection.peers[message.sender]) {\r\n connection.deletePeer(message.sender);\r\n }\r\n\r\n var userPreferences = {\r\n extra: message.extra || {},\r\n localPeerSdpConstraints: message.message.remotePeerSdpConstraints || {\r\n OfferToReceiveAudio: connection.sdpConstraints.mandatory.OfferToReceiveAudio,\r\n OfferToReceiveVideo: connection.sdpConstraints.mandatory.OfferToReceiveVideo\r\n },\r\n remotePeerSdpConstraints: message.message.localPeerSdpConstraints || {\r\n OfferToReceiveAudio: connection.session.oneway ? !!connection.session.audio : connection.sdpConstraints.mandatory.OfferToReceiveAudio,\r\n OfferToReceiveVideo: connection.session.oneway ? !!connection.session.video || !!connection.session.screen : connection.sdpConstraints.mandatory.OfferToReceiveVideo\r\n },\r\n isOneWay: typeof message.message.isOneWay !== 'undefined' ? message.message.isOneWay : !!connection.session.oneway || connection.direction === 'one-way',\r\n isDataOnly: typeof message.message.isDataOnly !== 'undefined' ? message.message.isDataOnly : isData(connection.session),\r\n dontGetRemoteStream: typeof message.message.isOneWay !== 'undefined' ? message.message.isOneWay : !!connection.session.oneway || connection.direction === 'one-way',\r\n dontAttachLocalStream: !!message.message.dontGetRemoteStream,\r\n connectionDescription: message,\r\n successCallback: function() {}\r\n };\r\n\r\n connection.onNewParticipant(message.sender, userPreferences);\r\n return;\r\n }\r\n\r\n if (message.message.changedUUID) {\r\n if (connection.peers[message.message.oldUUID]) {\r\n connection.peers[message.message.newUUID] = connection.peers[message.message.oldUUID];\r\n delete connection.peers[message.message.oldUUID];\r\n }\r\n }\r\n\r\n if (message.message.userLeft) {\r\n mPeer.onUserLeft(message.sender);\r\n\r\n if (!!message.message.autoCloseEntireSession) {\r\n connection.leave();\r\n }\r\n\r\n return;\r\n }\r\n\r\n mPeer.addNegotiatedMessage(message.message, message.sender);\r\n }\r\n\r\n connection.socket.on(connection.socketMessageEvent, onMessageEvent);\r\n\r\n var alreadyConnected = false;\r\n\r\n connection.socket.resetProps = function() {\r\n alreadyConnected = false;\r\n };\r\n\r\n connection.socket.on('connect', function() {\r\n if (alreadyConnected) {\r\n return;\r\n }\r\n alreadyConnected = true;\r\n\r\n if (connection.enableLogs) {\r\n console.info('socket.io connection is opened.');\r\n }\r\n\r\n setTimeout(function() {\r\n connection.socket.emit('extra-data-updated', connection.extra);\r\n }, 1000);\r\n\r\n if (connectCallback) {\r\n connectCallback(connection.socket);\r\n }\r\n });\r\n\r\n connection.socket.on('disconnect', function(event) {\r\n connection.onSocketDisconnect(event);\r\n });\r\n\r\n connection.socket.on('error', function(event) {\r\n connection.onSocketError(event);\r\n });\r\n\r\n connection.socket.on('user-disconnected', function(remoteUserId) {\r\n if (remoteUserId === connection.userid) {\r\n return;\r\n }\r\n\r\n connection.onUserStatusChanged({\r\n userid: remoteUserId,\r\n status: 'offline',\r\n extra: connection.peers[remoteUserId] ? connection.peers[remoteUserId].extra || {} : {}\r\n });\r\n\r\n connection.deletePeer(remoteUserId);\r\n });\r\n\r\n connection.socket.on('user-connected', function(userid) {\r\n if (userid === connection.userid) {\r\n return;\r\n }\r\n\r\n connection.onUserStatusChanged({\r\n userid: userid,\r\n status: 'online',\r\n extra: connection.peers[userid] ? connection.peers[userid].extra || {} : {}\r\n });\r\n });\r\n\r\n connection.socket.on('closed-entire-session', function(sessionid, extra) {\r\n connection.leave();\r\n connection.onEntireSessionClosed({\r\n sessionid: sessionid,\r\n userid: sessionid,\r\n extra: extra\r\n });\r\n });\r\n\r\n connection.socket.on('userid-already-taken', function(useridAlreadyTaken, yourNewUserId) {\r\n connection.onUserIdAlreadyTaken(useridAlreadyTaken, yourNewUserId);\r\n });\r\n\r\n connection.socket.on('logs', function(log) {\r\n if (!connection.enableLogs) return;\r\n console.debug('server-logs', log);\r\n });\r\n\r\n connection.socket.on('number-of-broadcast-viewers-updated', function(data) {\r\n connection.onNumberOfBroadcastViewersUpdated(data);\r\n });\r\n\r\n connection.socket.on('set-isInitiator-true', function(sessionid) {\r\n if (sessionid != connection.sessionid) return;\r\n connection.isInitiator = true;\r\n });\r\n }\r\n\r\n function MultiPeers(connection) {\r\n var self = this;\r\n\r\n var skipPeers = ['getAllParticipants', 'getLength', 'selectFirst', 'streams', 'send', 'forEach'];\r\n connection.peers = {\r\n getLength: function() {\r\n var numberOfPeers = 0;\r\n for (var peer in this) {\r\n if (skipPeers.indexOf(peer) == -1) {\r\n numberOfPeers++;\r\n }\r\n }\r\n return numberOfPeers;\r\n },\r\n selectFirst: function() {\r\n var firstPeer;\r\n for (var peer in this) {\r\n if (skipPeers.indexOf(peer) == -1) {\r\n firstPeer = this[peer];\r\n }\r\n }\r\n return firstPeer;\r\n },\r\n getAllParticipants: function(sender) {\r\n var allPeers = [];\r\n for (var peer in this) {\r\n if (skipPeers.indexOf(peer) == -1 && peer != sender) {\r\n allPeers.push(peer);\r\n }\r\n }\r\n return allPeers;\r\n },\r\n forEach: function(callbcak) {\r\n this.getAllParticipants().forEach(function(participant) {\r\n callbcak(connection.peers[participant]);\r\n });\r\n },\r\n send: function(data, remoteUserId) {\r\n var that = this;\r\n\r\n if (!isNull(data.size) && !isNull(data.type)) {\r\n if (connection.enableFileSharing) {\r\n self.shareFile(data, remoteUserId);\r\n return;\r\n }\r\n\r\n if (typeof data !== 'string') {\r\n data = JSON.stringify(data);\r\n }\r\n }\r\n\r\n if (data.type !== 'text' && !(data instanceof ArrayBuffer) && !(data instanceof DataView)) {\r\n TextSender.send({\r\n text: data,\r\n channel: this,\r\n connection: connection,\r\n remoteUserId: remoteUserId\r\n });\r\n return;\r\n }\r\n\r\n if (data.type === 'text') {\r\n data = JSON.stringify(data);\r\n }\r\n\r\n if (remoteUserId) {\r\n var remoteUser = connection.peers[remoteUserId];\r\n if (remoteUser) {\r\n if (!remoteUser.channels.length) {\r\n connection.peers[remoteUserId].createDataChannel();\r\n connection.renegotiate(remoteUserId);\r\n setTimeout(function() {\r\n that.send(data, remoteUserId);\r\n }, 3000);\r\n return;\r\n }\r\n\r\n remoteUser.channels.forEach(function(channel) {\r\n channel.send(data);\r\n });\r\n return;\r\n }\r\n }\r\n\r\n this.getAllParticipants().forEach(function(participant) {\r\n if (!that[participant].channels.length) {\r\n connection.peers[participant].createDataChannel();\r\n connection.renegotiate(participant);\r\n setTimeout(function() {\r\n that[participant].channels.forEach(function(channel) {\r\n channel.send(data);\r\n });\r\n }, 3000);\r\n return;\r\n }\r\n\r\n that[participant].channels.forEach(function(channel) {\r\n channel.send(data);\r\n });\r\n });\r\n }\r\n };\r\n\r\n this.uuid = connection.userid;\r\n\r\n this.getLocalConfig = function(remoteSdp, remoteUserId, userPreferences) {\r\n if (!userPreferences) {\r\n userPreferences = {};\r\n }\r\n\r\n return {\r\n streamsToShare: userPreferences.streamsToShare || {},\r\n rtcMultiConnection: connection,\r\n connectionDescription: userPreferences.connectionDescription,\r\n userid: remoteUserId,\r\n localPeerSdpConstraints: userPreferences.localPeerSdpConstraints,\r\n remotePeerSdpConstraints: userPreferences.remotePeerSdpConstraints,\r\n dontGetRemoteStream: !!userPreferences.dontGetRemoteStream,\r\n dontAttachLocalStream: !!userPreferences.dontAttachLocalStream,\r\n renegotiatingPeer: !!userPreferences.renegotiatingPeer,\r\n peerRef: userPreferences.peerRef,\r\n channels: userPreferences.channels || [],\r\n onLocalSdp: function(localSdp) {\r\n self.onNegotiationNeeded(localSdp, remoteUserId);\r\n },\r\n onLocalCandidate: function(localCandidate) {\r\n localCandidate = OnIceCandidateHandler.processCandidates(connection, localCandidate)\r\n if (localCandidate) {\r\n self.onNegotiationNeeded(localCandidate, remoteUserId);\r\n }\r\n },\r\n remoteSdp: remoteSdp,\r\n onDataChannelMessage: function(message) {\r\n if (!connection.fbr && connection.enableFileSharing) initFileBufferReader();\r\n\r\n if (typeof message == 'string' || !connection.enableFileSharing) {\r\n self.onDataChannelMessage(message, remoteUserId);\r\n return;\r\n }\r\n\r\n var that = this;\r\n\r\n if (message instanceof ArrayBuffer || message instanceof DataView) {\r\n connection.fbr.convertToObject(message, function(object) {\r\n that.onDataChannelMessage(object);\r\n });\r\n return;\r\n }\r\n\r\n if (message.readyForNextChunk) {\r\n connection.fbr.getNextChunk(message, function(nextChunk, isLastChunk) {\r\n connection.peers[remoteUserId].channels.forEach(function(channel) {\r\n channel.send(nextChunk);\r\n });\r\n }, remoteUserId);\r\n return;\r\n }\r\n\r\n if (message.chunkMissing) {\r\n connection.fbr.chunkMissing(message);\r\n return;\r\n }\r\n\r\n connection.fbr.addChunk(message, function(promptNextChunk) {\r\n connection.peers[remoteUserId].peer.channel.send(promptNextChunk);\r\n });\r\n },\r\n onDataChannelError: function(error) {\r\n self.onDataChannelError(error, remoteUserId);\r\n },\r\n onDataChannelOpened: function(channel) {\r\n self.onDataChannelOpened(channel, remoteUserId);\r\n },\r\n onDataChannelClosed: function(event) {\r\n self.onDataChannelClosed(event, remoteUserId);\r\n },\r\n onRemoteStream: function(stream) {\r\n if (connection.peers[remoteUserId]) {\r\n connection.peers[remoteUserId].streams.push(stream);\r\n }\r\n\r\n self.onGettingRemoteMedia(stream, remoteUserId);\r\n },\r\n onRemoteStreamRemoved: function(stream) {\r\n self.onRemovingRemoteMedia(stream, remoteUserId);\r\n },\r\n onPeerStateChanged: function(states) {\r\n self.onPeerStateChanged(states);\r\n\r\n if (states.iceConnectionState === 'new') {\r\n self.onNegotiationStarted(remoteUserId, states);\r\n }\r\n\r\n if (states.iceConnectionState === 'connected') {\r\n self.onNegotiationCompleted(remoteUserId, states);\r\n }\r\n\r\n if (states.iceConnectionState.search(/closed|failed/gi) !== -1) {\r\n self.onUserLeft(remoteUserId);\r\n self.disconnectWith(remoteUserId);\r\n }\r\n }\r\n };\r\n };\r\n\r\n this.createNewPeer = function(remoteUserId, userPreferences) {\r\n if (connection.maxParticipantsAllowed <= connection.getAllParticipants().length) {\r\n return;\r\n }\r\n\r\n userPreferences = userPreferences || {};\r\n\r\n if (connection.isInitiator && !!connection.session.audio && connection.session.audio === 'two-way' && !userPreferences.streamsToShare) {\r\n userPreferences.isOneWay = false;\r\n userPreferences.isDataOnly = false;\r\n userPreferences.session = connection.session;\r\n }\r\n\r\n if (!userPreferences.isOneWay && !userPreferences.isDataOnly) {\r\n userPreferences.isOneWay = true;\r\n this.onNegotiationNeeded({\r\n enableMedia: true,\r\n userPreferences: userPreferences\r\n }, remoteUserId);\r\n return;\r\n }\r\n\r\n userPreferences = connection.setUserPreferences(userPreferences, remoteUserId);\r\n var localConfig = this.getLocalConfig(null, remoteUserId, userPreferences);\r\n connection.peers[remoteUserId] = new PeerInitiator(localConfig);\r\n };\r\n\r\n this.createAnsweringPeer = function(remoteSdp, remoteUserId, userPreferences) {\r\n userPreferences = connection.setUserPreferences(userPreferences || {}, remoteUserId);\r\n\r\n var localConfig = this.getLocalConfig(remoteSdp, remoteUserId, userPreferences);\r\n connection.peers[remoteUserId] = new PeerInitiator(localConfig);\r\n };\r\n\r\n this.renegotiatePeer = function(remoteUserId, userPreferences, remoteSdp) {\r\n if (!connection.peers[remoteUserId]) {\r\n if (connection.enableLogs) {\r\n console.error('Peer (' + remoteUserId + ') does not exist. Renegotiation skipped.');\r\n }\r\n return;\r\n }\r\n\r\n if (!userPreferences) {\r\n userPreferences = {};\r\n }\r\n\r\n userPreferences.renegotiatingPeer = true;\r\n userPreferences.peerRef = connection.peers[remoteUserId].peer;\r\n userPreferences.channels = connection.peers[remoteUserId].channels;\r\n\r\n var localConfig = this.getLocalConfig(remoteSdp, remoteUserId, userPreferences);\r\n\r\n connection.peers[remoteUserId] = new PeerInitiator(localConfig);\r\n };\r\n\r\n this.replaceTrack = function(track, remoteUserId, isVideoTrack) {\r\n if (!connection.peers[remoteUserId]) {\r\n throw 'This peer (' + remoteUserId + ') does not exist.';\r\n }\r\n\r\n var peer = connection.peers[remoteUserId].peer;\r\n\r\n if (!!peer.getSenders && typeof peer.getSenders === 'function' && peer.getSenders().length) {\r\n peer.getSenders().forEach(function(rtpSender) {\r\n if (isVideoTrack && rtpSender.track.kind === 'video') {\r\n connection.peers[remoteUserId].peer.lastVideoTrack = rtpSender.track;\r\n rtpSender.replaceTrack(track);\r\n }\r\n\r\n if (!isVideoTrack && rtpSender.track.kind === 'audio') {\r\n connection.peers[remoteUserId].peer.lastAudioTrack = rtpSender.track;\r\n rtpSender.replaceTrack(track);\r\n }\r\n });\r\n return;\r\n }\r\n\r\n console.warn('RTPSender.replaceTrack is NOT supported.');\r\n this.renegotiatePeer(remoteUserId);\r\n };\r\n\r\n this.onNegotiationNeeded = function(message, remoteUserId) {};\r\n this.addNegotiatedMessage = function(message, remoteUserId) {\r\n if (message.type && message.sdp) {\r\n if (message.type == 'answer') {\r\n if (connection.peers[remoteUserId]) {\r\n connection.peers[remoteUserId].addRemoteSdp(message);\r\n }\r\n }\r\n\r\n if (message.type == 'offer') {\r\n if (message.renegotiatingPeer) {\r\n this.renegotiatePeer(remoteUserId, null, message);\r\n } else {\r\n this.createAnsweringPeer(message, remoteUserId);\r\n }\r\n }\r\n\r\n if (connection.enableLogs) {\r\n console.log('Remote peer\\'s sdp:', message.sdp);\r\n }\r\n return;\r\n }\r\n\r\n if (message.candidate) {\r\n if (connection.peers[remoteUserId]) {\r\n connection.peers[remoteUserId].addRemoteCandidate(message);\r\n }\r\n\r\n if (connection.enableLogs) {\r\n console.log('Remote peer\\'s candidate pairs:', message.candidate);\r\n }\r\n return;\r\n }\r\n\r\n if (message.enableMedia) {\r\n connection.session = message.userPreferences.session || connection.session;\r\n\r\n if (connection.session.oneway && connection.attachStreams.length) {\r\n connection.attachStreams = [];\r\n }\r\n\r\n if (message.userPreferences.isDataOnly && connection.attachStreams.length) {\r\n connection.attachStreams.length = [];\r\n }\r\n\r\n var streamsToShare = {};\r\n connection.attachStreams.forEach(function(stream) {\r\n streamsToShare[stream.streamid] = {\r\n isAudio: !!stream.isAudio,\r\n isVideo: !!stream.isVideo,\r\n isScreen: !!stream.isScreen\r\n };\r\n });\r\n message.userPreferences.streamsToShare = streamsToShare;\r\n\r\n self.onNegotiationNeeded({\r\n readyForOffer: true,\r\n userPreferences: message.userPreferences\r\n }, remoteUserId);\r\n }\r\n\r\n if (message.readyForOffer) {\r\n connection.onReadyForOffer(remoteUserId, message.userPreferences);\r\n }\r\n\r\n function cb(stream) {\r\n gumCallback(stream, message, remoteUserId);\r\n }\r\n };\r\n\r\n function gumCallback(stream, message, remoteUserId) {\r\n var streamsToShare = {};\r\n connection.attachStreams.forEach(function(stream) {\r\n streamsToShare[stream.streamid] = {\r\n isAudio: !!stream.isAudio,\r\n isVideo: !!stream.isVideo,\r\n isScreen: !!stream.isScreen\r\n };\r\n });\r\n message.userPreferences.streamsToShare = streamsToShare;\r\n\r\n self.onNegotiationNeeded({\r\n readyForOffer: true,\r\n userPreferences: message.userPreferences\r\n }, remoteUserId);\r\n }\r\n\r\n this.onGettingRemoteMedia = function(stream, remoteUserId) {};\r\n this.onRemovingRemoteMedia = function(stream, remoteUserId) {};\r\n this.onGettingLocalMedia = function(localStream) {};\r\n this.onLocalMediaError = function(error, constraints) {\r\n connection.onMediaError(error, constraints);\r\n };\r\n\r\n function initFileBufferReader() {\r\n connection.fbr = new FileBufferReader();\r\n connection.fbr.onProgress = function(chunk) {\r\n connection.onFileProgress(chunk);\r\n };\r\n connection.fbr.onBegin = function(file) {\r\n connection.onFileStart(file);\r\n };\r\n connection.fbr.onEnd = function(file) {\r\n connection.onFileEnd(file);\r\n };\r\n }\r\n\r\n this.shareFile = function(file, remoteUserId) {\r\n initFileBufferReader();\r\n\r\n connection.fbr.readAsArrayBuffer(file, function(uuid) {\r\n var arrayOfUsers = connection.getAllParticipants();\r\n\r\n if (remoteUserId) {\r\n arrayOfUsers = [remoteUserId];\r\n }\r\n\r\n arrayOfUsers.forEach(function(participant) {\r\n connection.fbr.getNextChunk(uuid, function(nextChunk) {\r\n connection.peers[participant].channels.forEach(function(channel) {\r\n channel.send(nextChunk);\r\n });\r\n }, participant);\r\n });\r\n }, {\r\n userid: connection.userid,\r\n // extra: connection.extra,\r\n chunkSize: DetectRTC.browser.name === 'Firefox' ? 15 * 1000 : connection.chunkSize || 0\r\n });\r\n };\r\n\r\n if (typeof 'TextReceiver' !== 'undefined') {\r\n var textReceiver = new TextReceiver(connection);\r\n }\r\n\r\n this.onDataChannelMessage = function(message, remoteUserId) {\r\n textReceiver.receive(JSON.parse(message), remoteUserId, connection.peers[remoteUserId] ? connection.peers[remoteUserId].extra : {});\r\n };\r\n\r\n this.onDataChannelClosed = function(event, remoteUserId) {\r\n event.userid = remoteUserId;\r\n event.extra = connection.peers[remoteUserId] ? connection.peers[remoteUserId].extra : {};\r\n connection.onclose(event);\r\n };\r\n\r\n this.onDataChannelError = function(error, remoteUserId) {\r\n error.userid = remoteUserId;\r\n event.extra = connection.peers[remoteUserId] ? connection.peers[remoteUserId].extra : {};\r\n connection.onerror(error);\r\n };\r\n\r\n this.onDataChannelOpened = function(channel, remoteUserId) {\r\n // keep last channel only; we are not expecting parallel/channels channels\r\n if (connection.peers[remoteUserId].channels.length) {\r\n connection.peers[remoteUserId].channels = [channel];\r\n return;\r\n }\r\n\r\n connection.peers[remoteUserId].channels.push(channel);\r\n connection.onopen({\r\n userid: remoteUserId,\r\n extra: connection.peers[remoteUserId] ? connection.peers[remoteUserId].extra : {},\r\n channel: channel\r\n });\r\n };\r\n\r\n this.onPeerStateChanged = function(state) {\r\n connection.onPeerStateChanged(state);\r\n };\r\n\r\n this.onNegotiationStarted = function(remoteUserId, states) {};\r\n this.onNegotiationCompleted = function(remoteUserId, states) {};\r\n\r\n this.getRemoteStreams = function(remoteUserId) {\r\n remoteUserId = remoteUserId || connection.peers.getAllParticipants()[0];\r\n return connection.peers[remoteUserId] ? connection.peers[remoteUserId].streams : [];\r\n };\r\n }\r\n\r\n 'use strict';\r\n\r\n // Last Updated On: 2019-01-10 5:32:55 AM UTC\r\n\r\n // ________________\r\n // DetectRTC v1.3.9\r\n\r\n // Open-Sourced: https://github.com/muaz-khan/DetectRTC\r\n\r\n // --------------------------------------------------\r\n // Muaz Khan - www.MuazKhan.com\r\n // MIT License - www.WebRTC-Experiment.com/licence\r\n // --------------------------------------------------\r\n\r\n (function() {\r\n\r\n var browserFakeUserAgent = 'Fake/5.0 (FakeOS) AppleWebKit/123 (KHTML, like Gecko) Fake/12.3.4567.89 Fake/123.45';\r\n\r\n var isNodejs = typeof process === 'object' && typeof process.versions === 'object' && process.versions.node && /*node-process*/ !process.browser;\r\n if (isNodejs) {\r\n var version = process.versions.node.toString().replace('v', '');\r\n browserFakeUserAgent = 'Nodejs/' + version + ' (NodeOS) AppleWebKit/' + version + ' (KHTML, like Gecko) Nodejs/' + version + ' Nodejs/' + version\r\n }\r\n\r\n (function(that) {\r\n if (typeof window !== 'undefined') {\r\n return;\r\n }\r\n\r\n if (typeof window === 'undefined' && typeof global !== 'undefined') {\r\n global.navigator = {\r\n userAgent: browserFakeUserAgent,\r\n getUserMedia: function() {}\r\n };\r\n\r\n /*global window:true */\r\n that.window = global;\r\n } else if (typeof window === 'undefined') {\r\n // window = this;\r\n }\r\n\r\n if (typeof location === 'undefined') {\r\n /*global location:true */\r\n that.location = {\r\n protocol: 'file:',\r\n href: '',\r\n hash: ''\r\n };\r\n }\r\n\r\n if (typeof screen === 'undefined') {\r\n /*global screen:true */\r\n that.screen = {\r\n width: 0,\r\n height: 0\r\n };\r\n }\r\n })(typeof global !== 'undefined' ? global : window);\r\n\r\n /*global navigator:true */\r\n var navigator = window.navigator;\r\n\r\n if (typeof navigator !== 'undefined') {\r\n if (typeof navigator.webkitGetUserMedia !== 'undefined') {\r\n navigator.getUserMedia = navigator.webkitGetUserMedia;\r\n }\r\n\r\n if (typeof navigator.mozGetUserMedia !== 'undefined') {\r\n navigator.getUserMedia = navigator.mozGetUserMedia;\r\n }\r\n } else {\r\n navigator = {\r\n getUserMedia: function() {},\r\n userAgent: browserFakeUserAgent\r\n };\r\n }\r\n\r\n var isMobileDevice = !!(/Android|webOS|iPhone|iPad|iPod|BB10|BlackBerry|IEMobile|Opera Mini|Mobile|mobile/i.test(navigator.userAgent || ''));\r\n\r\n var isEdge = navigator.userAgent.indexOf('Edge') !== -1 && (!!navigator.msSaveOrOpenBlob || !!navigator.msSaveBlob);\r\n\r\n var isOpera = !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;\r\n var isFirefox = typeof window.InstallTrigger !== 'undefined';\r\n var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\r\n var isChrome = !!window.chrome && !isOpera;\r\n var isIE = typeof document !== 'undefined' && !!document.documentMode && !isEdge;\r\n\r\n // this one can also be used:\r\n // https://www.websocket.org/js/stuff.js (DetectBrowser.js)\r\n\r\n function getBrowserInfo() {\r\n var nVer = navigator.appVersion;\r\n var nAgt = navigator.userAgent;\r\n var browserName = navigator.appName;\r\n var fullVersion = '' + parseFloat(navigator.appVersion);\r\n var majorVersion = parseInt(navigator.appVersion, 10);\r\n var nameOffset, verOffset, ix;\r\n\r\n // both and safri and chrome has same userAgent\r\n if (isSafari && !isChrome && nAgt.indexOf('CriOS') !== -1) {\r\n isSafari = false;\r\n isChrome = true;\r\n }\r\n\r\n // In Opera, the true version is after 'Opera' or after 'Version'\r\n if (isOpera) {\r\n browserName = 'Opera';\r\n try {\r\n fullVersion = navigator.userAgent.split('OPR/')[1].split(' ')[0];\r\n majorVersion = fullVersion.split('.')[0];\r\n } catch (e) {\r\n fullVersion = '0.0.0.0';\r\n majorVersion = 0;\r\n }\r\n }\r\n // In MSIE version <=10, the true version is after 'MSIE' in userAgent\r\n // In IE 11, look for the string after 'rv:'\r\n else if (isIE) {\r\n verOffset = nAgt.indexOf('rv:');\r\n if (verOffset > 0) { //IE 11\r\n fullVersion = nAgt.substring(verOffset + 3);\r\n } else { //IE 10 or earlier\r\n verOffset = nAgt.indexOf('MSIE');\r\n fullVersion = nAgt.substring(verOffset + 5);\r\n }\r\n browserName = 'IE';\r\n }\r\n // In Chrome, the true version is after 'Chrome' \r\n else if (isChrome) {\r\n verOffset = nAgt.indexOf('Chrome');\r\n browserName = 'Chrome';\r\n fullVersion = nAgt.substring(verOffset + 7);\r\n }\r\n // In Safari, the true version is after 'Safari' or after 'Version' \r\n else if (isSafari) {\r\n verOffset = nAgt.indexOf('Safari');\r\n\r\n browserName = 'Safari';\r\n fullVersion = nAgt.substring(verOffset + 7);\r\n\r\n if ((verOffset = nAgt.indexOf('Version')) !== -1) {\r\n fullVersion = nAgt.substring(verOffset + 8);\r\n }\r\n\r\n if (navigator.userAgent.indexOf('Version/') !== -1) {\r\n fullVersion = navigator.userAgent.split('Version/')[1].split(' ')[0];\r\n }\r\n }\r\n // In Firefox, the true version is after 'Firefox' \r\n else if (isFirefox) {\r\n verOffset = nAgt.indexOf('Firefox');\r\n browserName = 'Firefox';\r\n fullVersion = nAgt.substring(verOffset + 8);\r\n }\r\n\r\n // In most other browsers, 'name/version' is at the end of userAgent \r\n else if ((nameOffset = nAgt.lastIndexOf(' ') + 1) < (verOffset = nAgt.lastIndexOf('/'))) {\r\n browserName = nAgt.substring(nameOffset, verOffset);\r\n fullVersion = nAgt.substring(verOffset + 1);\r\n\r\n if (browserName.toLowerCase() === browserName.toUpperCase()) {\r\n browserName = navigator.appName;\r\n }\r\n }\r\n\r\n if (isEdge) {\r\n browserName = 'Edge';\r\n fullVersion = navigator.userAgent.split('Edge/')[1];\r\n // fullVersion = parseInt(navigator.userAgent.match(/Edge\\/(\\d+).(\\d+)$/)[2], 10).toString();\r\n }\r\n\r\n // trim the fullVersion string at semicolon/space/bracket if present\r\n if ((ix = fullVersion.search(/[; \\)]/)) !== -1) {\r\n fullVersion = fullVersion.substring(0, ix);\r\n }\r\n\r\n majorVersion = parseInt('' + fullVersion, 10);\r\n\r\n if (isNaN(majorVersion)) {\r\n fullVersion = '' + parseFloat(navigator.appVersion);\r\n majorVersion = parseInt(navigator.appVersion, 10);\r\n }\r\n\r\n return {\r\n fullVersion: fullVersion,\r\n version: majorVersion,\r\n name: browserName,\r\n isPrivateBrowsing: false\r\n };\r\n }\r\n\r\n // via: https://gist.github.com/cou929/7973956\r\n\r\n function retry(isDone, next) {\r\n var currentTrial = 0,\r\n maxRetry = 50,\r\n interval = 10,\r\n isTimeout = false;\r\n var id = window.setInterval(\r\n function() {\r\n if (isDone()) {\r\n window.clearInterval(id);\r\n next(isTimeout);\r\n }\r\n if (currentTrial++ > maxRetry) {\r\n window.clearInterval(id);\r\n isTimeout = true;\r\n next(isTimeout);\r\n }\r\n },\r\n 10\r\n );\r\n }\r\n\r\n function isIE10OrLater(userAgent) {\r\n var ua = userAgent.toLowerCase();\r\n if (ua.indexOf('msie') === 0 && ua.indexOf('trident') === 0) {\r\n return false;\r\n }\r\n var match = /(?:msie|rv:)\\s?([\\d\\.]+)/.exec(ua);\r\n if (match && parseInt(match[1], 10) >= 10) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n function detectPrivateMode(callback) {\r\n var isPrivate;\r\n\r\n try {\r\n\r\n if (window.webkitRequestFileSystem) {\r\n window.webkitRequestFileSystem(\r\n window.TEMPORARY, 1,\r\n function() {\r\n isPrivate = false;\r\n },\r\n function(e) {\r\n isPrivate = true;\r\n }\r\n );\r\n } else if (window.indexedDB && /Firefox/.test(window.navigator.userAgent)) {\r\n var db;\r\n try {\r\n db = window.indexedDB.open('test');\r\n db.onerror = function() {\r\n return true;\r\n };\r\n } catch (e) {\r\n isPrivate = true;\r\n }\r\n\r\n if (typeof isPrivate === 'undefined') {\r\n retry(\r\n function isDone() {\r\n return db.readyState === 'done' ? true : false;\r\n },\r\n function next(isTimeout) {\r\n if (!isTimeout) {\r\n isPrivate = db.result ? false : true;\r\n }\r\n }\r\n );\r\n }\r\n } else if (isIE10OrLater(window.navigator.userAgent)) {\r\n isPrivate = false;\r\n try {\r\n if (!window.indexedDB) {\r\n isPrivate = true;\r\n }\r\n } catch (e) {\r\n isPrivate = true;\r\n }\r\n } else if (window.localStorage && /Safari/.test(window.navigator.userAgent)) {\r\n try {\r\n window.localStorage.setItem('test', 1);\r\n } catch (e) {\r\n isPrivate = true;\r\n }\r\n\r\n if (typeof isPrivate === 'undefined') {\r\n isPrivate = false;\r\n window.localStorage.removeItem('test');\r\n }\r\n }\r\n\r\n } catch (e) {\r\n isPrivate = false;\r\n }\r\n\r\n retry(\r\n function isDone() {\r\n return typeof isPrivate !== 'undefined' ? true : false;\r\n },\r\n function next(isTimeout) {\r\n callback(isPrivate);\r\n }\r\n );\r\n }\r\n\r\n var isMobile = {\r\n Android: function() {\r\n return navigator.userAgent.match(/Android/i);\r\n },\r\n BlackBerry: function() {\r\n return navigator.userAgent.match(/BlackBerry|BB10/i);\r\n },\r\n iOS: function() {\r\n return navigator.userAgent.match(/iPhone|iPad|iPod/i);\r\n },\r\n Opera: function() {\r\n return navigator.userAgent.match(/Opera Mini/i);\r\n },\r\n Windows: function() {\r\n return navigator.userAgent.match(/IEMobile/i);\r\n },\r\n any: function() {\r\n return (isMobile.Android() || isMobile.BlackBerry() || isMobile.iOS() || isMobile.Opera() || isMobile.Windows());\r\n },\r\n getOsName: function() {\r\n var osName = 'Unknown OS';\r\n if (isMobile.Android()) {\r\n osName = 'Android';\r\n }\r\n\r\n if (isMobile.BlackBerry()) {\r\n osName = 'BlackBerry';\r\n }\r\n\r\n if (isMobile.iOS()) {\r\n osName = 'iOS';\r\n }\r\n\r\n if (isMobile.Opera()) {\r\n osName = 'Opera Mini';\r\n }\r\n\r\n if (isMobile.Windows()) {\r\n osName = 'Windows';\r\n }\r\n\r\n return osName;\r\n }\r\n };\r\n\r\n // via: http://jsfiddle.net/ChristianL/AVyND/\r\n function detectDesktopOS() {\r\n var unknown = '-';\r\n\r\n var nVer = navigator.appVersion;\r\n var nAgt = navigator.userAgent;\r\n\r\n var os = unknown;\r\n var clientStrings = [{\r\n s: 'Windows 10',\r\n r: /(Windows 10.0|Windows NT 10.0)/\r\n }, {\r\n s: 'Windows 8.1',\r\n r: /(Windows 8.1|Windows NT 6.3)/\r\n }, {\r\n s: 'Windows 8',\r\n r: /(Windows 8|Windows NT 6.2)/\r\n }, {\r\n s: 'Windows 7',\r\n r: /(Windows 7|Windows NT 6.1)/\r\n }, {\r\n s: 'Windows Vista',\r\n r: /Windows NT 6.0/\r\n }, {\r\n s: 'Windows Server 2003',\r\n r: /Windows NT 5.2/\r\n }, {\r\n s: 'Windows XP',\r\n r: /(Windows NT 5.1|Windows XP)/\r\n }, {\r\n s: 'Windows 2000',\r\n r: /(Windows NT 5.0|Windows 2000)/\r\n }, {\r\n s: 'Windows ME',\r\n r: /(Win 9x 4.90|Windows ME)/\r\n }, {\r\n s: 'Windows 98',\r\n r: /(Windows 98|Win98)/\r\n }, {\r\n s: 'Windows 95',\r\n r: /(Windows 95|Win95|Windows_95)/\r\n }, {\r\n s: 'Windows NT 4.0',\r\n r: /(Windows NT 4.0|WinNT4.0|WinNT|Windows NT)/\r\n }, {\r\n s: 'Windows CE',\r\n r: /Windows CE/\r\n }, {\r\n s: 'Windows 3.11',\r\n r: /Win16/\r\n }, {\r\n s: 'Android',\r\n r: /Android/\r\n }, {\r\n s: 'Open BSD',\r\n r: /OpenBSD/\r\n }, {\r\n s: 'Sun OS',\r\n r: /SunOS/\r\n }, {\r\n s: 'Linux',\r\n r: /(Linux|X11)/\r\n }, {\r\n s: 'iOS',\r\n r: /(iPhone|iPad|iPod)/\r\n }, {\r\n s: 'Mac OS X',\r\n r: /Mac OS X/\r\n }, {\r\n s: 'Mac OS',\r\n r: /(MacPPC|MacIntel|Mac_PowerPC|Macintosh)/\r\n }, {\r\n s: 'QNX',\r\n r: /QNX/\r\n }, {\r\n s: 'UNIX',\r\n r: /UNIX/\r\n }, {\r\n s: 'BeOS',\r\n r: /BeOS/\r\n }, {\r\n s: 'OS/2',\r\n r: /OS\\/2/\r\n }, {\r\n s: 'Search Bot',\r\n r: /(nuhk|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask Jeeves\\/Teoma|ia_archiver)/\r\n }];\r\n for (var i = 0, cs; cs = clientStrings[i]; i++) {\r\n if (cs.r.test(nAgt)) {\r\n os = cs.s;\r\n break;\r\n }\r\n }\r\n\r\n var osVersion = unknown;\r\n\r\n if (/Windows/.test(os)) {\r\n if (/Windows (.*)/.test(os)) {\r\n osVersion = /Windows (.*)/.exec(os)[1];\r\n }\r\n os = 'Windows';\r\n }\r\n\r\n switch (os) {\r\n case 'Mac OS X':\r\n if (/Mac OS X (10[\\.\\_\\d]+)/.test(nAgt)) {\r\n osVersion = /Mac OS X (10[\\.\\_\\d]+)/.exec(nAgt)[1];\r\n }\r\n break;\r\n case 'Android':\r\n if (/Android ([\\.\\_\\d]+)/.test(nAgt)) {\r\n osVersion = /Android ([\\.\\_\\d]+)/.exec(nAgt)[1];\r\n }\r\n break;\r\n case 'iOS':\r\n if (/OS (\\d+)_(\\d+)_?(\\d+)?/.test(nAgt)) {\r\n osVersion = /OS (\\d+)_(\\d+)_?(\\d+)?/.exec(nVer);\r\n osVersion = osVersion[1] + '.' + osVersion[2] + '.' + (osVersion[3] | 0);\r\n }\r\n break;\r\n }\r\n\r\n return {\r\n osName: os,\r\n osVersion: osVersion\r\n };\r\n }\r\n\r\n var osName = 'Unknown OS';\r\n var osVersion = 'Unknown OS Version';\r\n\r\n function getAndroidVersion(ua) {\r\n ua = (ua || navigator.userAgent).toLowerCase();\r\n var match = ua.match(/android\\s([0-9\\.]*)/);\r\n return match ? match[1] : false;\r\n }\r\n\r\n var osInfo = detectDesktopOS();\r\n\r\n if (osInfo && osInfo.osName && osInfo.osName != '-') {\r\n osName = osInfo.osName;\r\n osVersion = osInfo.osVersion;\r\n } else if (isMobile.any()) {\r\n osName = isMobile.getOsName();\r\n\r\n if (osName == 'Android') {\r\n osVersion = getAndroidVersion();\r\n }\r\n }\r\n\r\n var isNodejs = typeof process === 'object' && typeof process.versions === 'object' && process.versions.node;\r\n\r\n if (osName === 'Unknown OS' && isNodejs) {\r\n osName = 'Nodejs';\r\n osVersion = process.versions.node.toString().replace('v', '');\r\n }\r\n\r\n var isCanvasSupportsStreamCapturing = false;\r\n var isVideoSupportsStreamCapturing = false;\r\n ['captureStream', 'mozCaptureStream', 'webkitCaptureStream'].forEach(function(item) {\r\n if (typeof document === 'undefined' || typeof document.createElement !== 'function') {\r\n return;\r\n }\r\n\r\n if (!isCanvasSupportsStreamCapturing && item in document.createElement('canvas')) {\r\n isCanvasSupportsStreamCapturing = true;\r\n }\r\n\r\n if (!isVideoSupportsStreamCapturing && item in document.createElement('video')) {\r\n isVideoSupportsStreamCapturing = true;\r\n }\r\n });\r\n\r\n var regexIpv4Local = /^(192\\.168\\.|169\\.254\\.|10\\.|172\\.(1[6-9]|2\\d|3[01]))/,\r\n regexIpv4 = /([0-9]{1,3}(\\.[0-9]{1,3}){3})/,\r\n regexIpv6 = /[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7}/;\r\n\r\n // via: https://github.com/diafygi/webrtc-ips\r\n function DetectLocalIPAddress(callback, stream) {\r\n if (!DetectRTC.isWebRTCSupported) {\r\n return;\r\n }\r\n\r\n var isPublic = true,\r\n isIpv4 = true;\r\n getIPs(function(ip) {\r\n if (!ip) {\r\n callback(); // Pass nothing to tell that ICE-gathering-ended\r\n } else if (ip.match(regexIpv4Local)) {\r\n isPublic = false;\r\n callback('Local: ' + ip, isPublic, isIpv4);\r\n } else if (ip.match(regexIpv6)) { //via https://ourcodeworld.com/articles/read/257/how-to-get-the-client-ip-address-with-javascript-only\r\n isIpv4 = false;\r\n callback('Public: ' + ip, isPublic, isIpv4);\r\n } else {\r\n callback('Public: ' + ip, isPublic, isIpv4);\r\n }\r\n }, stream);\r\n }\r\n\r\n function getIPs(callback, stream) {\r\n if (typeof document === 'undefined' || typeof document.getElementById !== 'function') {\r\n return;\r\n }\r\n\r\n var ipDuplicates = {};\r\n\r\n var RTCPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;\r\n\r\n if (!RTCPeerConnection) {\r\n var iframe = document.getElementById('iframe');\r\n if (!iframe) {\r\n return;\r\n }\r\n var win = iframe.contentWindow;\r\n RTCPeerConnection = win.RTCPeerConnection || win.mozRTCPeerConnection || win.webkitRTCPeerConnection;\r\n }\r\n\r\n if (!RTCPeerConnection) {\r\n return;\r\n }\r\n\r\n var peerConfig = null;\r\n\r\n if (DetectRTC.browser === 'Chrome' && DetectRTC.browser.version < 58) {\r\n // todo: add support for older Opera\r\n peerConfig = {\r\n optional: [{\r\n RtpDataChannels: true\r\n }]\r\n };\r\n }\r\n\r\n var servers = {\r\n iceServers: [{\r\n urls: 'stun:stun.l.google.com:19302'\r\n }]\r\n };\r\n\r\n var pc = new RTCPeerConnection(servers, peerConfig);\r\n\r\n if (stream) {\r\n if (pc.addStream) {\r\n pc.addStream(stream);\r\n } else if (pc.addTrack && stream.getTracks()[0]) {\r\n pc.addTrack(stream.getTracks()[0], stream);\r\n }\r\n }\r\n\r\n function handleCandidate(candidate) {\r\n if (!candidate) {\r\n callback(); // Pass nothing to tell that ICE-gathering-ended\r\n return;\r\n }\r\n\r\n var match = regexIpv4.exec(candidate);\r\n if (!match) {\r\n return;\r\n }\r\n var ipAddress = match[1];\r\n var isPublic = (candidate.match(regexIpv4Local)),\r\n isIpv4 = true;\r\n\r\n if (ipDuplicates[ipAddress] === undefined) {\r\n callback(ipAddress, isPublic, isIpv4);\r\n }\r\n\r\n ipDuplicates[ipAddress] = true;\r\n }\r\n\r\n // listen for candidate events\r\n pc.onicecandidate = function(event) {\r\n if (event.candidate && event.candidate.candidate) {\r\n handleCandidate(event.candidate.candidate);\r\n } else {\r\n handleCandidate(); // Pass nothing to tell that ICE-gathering-ended\r\n }\r\n };\r\n\r\n // create data channel\r\n if (!stream) {\r\n try {\r\n pc.createDataChannel('sctp', {});\r\n } catch (e) {}\r\n }\r\n\r\n // create an offer sdp\r\n if (DetectRTC.isPromisesSupported) {\r\n pc.createOffer().then(function(result) {\r\n pc.setLocalDescription(result).then(afterCreateOffer);\r\n });\r\n } else {\r\n pc.createOffer(function(result) {\r\n pc.setLocalDescription(result, afterCreateOffer, function() {});\r\n }, function() {});\r\n }\r\n\r\n function afterCreateOffer() {\r\n var lines = pc.localDescription.sdp.split('\\n');\r\n\r\n lines.forEach(function(line) {\r\n if (line && line.indexOf('a=candidate:') === 0) {\r\n handleCandidate(line);\r\n }\r\n });\r\n }\r\n }\r\n\r\n var MediaDevices = [];\r\n\r\n var audioInputDevices = [];\r\n var audioOutputDevices = [];\r\n var videoInputDevices = [];\r\n\r\n if (navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {\r\n // Firefox 38+ seems having support of enumerateDevices\r\n // Thanks @xdumaine/enumerateDevices\r\n navigator.enumerateDevices = function(callback) {\r\n var enumerateDevices = navigator.mediaDevices.enumerateDevices();\r\n if (enumerateDevices && enumerateDevices.then) {\r\n navigator.mediaDevices.enumerateDevices().then(callback).catch(function() {\r\n callback([]);\r\n });\r\n } else {\r\n callback([]);\r\n }\r\n };\r\n }\r\n\r\n // Media Devices detection\r\n var canEnumerate = false;\r\n\r\n /*global MediaStreamTrack:true */\r\n if (typeof MediaStreamTrack !== 'undefined' && 'getSources' in MediaStreamTrack) {\r\n canEnumerate = true;\r\n } else if (navigator.mediaDevices && !!navigator.mediaDevices.enumerateDevices) {\r\n canEnumerate = true;\r\n }\r\n\r\n var hasMicrophone = false;\r\n var hasSpeakers = false;\r\n var hasWebcam = false;\r\n\r\n var isWebsiteHasMicrophonePermissions = false;\r\n var isWebsiteHasWebcamPermissions = false;\r\n\r\n // http://dev.w3.org/2011/webrtc/editor/getusermedia.html#mediadevices\r\n function checkDeviceSupport(callback) {\r\n if (!canEnumerate) {\r\n if (callback) {\r\n callback();\r\n }\r\n return;\r\n }\r\n\r\n if (!navigator.enumerateDevices && window.MediaStreamTrack && window.MediaStreamTrack.getSources) {\r\n navigator.enumerateDevices = window.MediaStreamTrack.getSources.bind(window.MediaStreamTrack);\r\n }\r\n\r\n if (!navigator.enumerateDevices && navigator.enumerateDevices) {\r\n navigator.enumerateDevices = navigator.enumerateDevices.bind(navigator);\r\n }\r\n\r\n if (!navigator.enumerateDevices) {\r\n if (callback) {\r\n callback();\r\n }\r\n return;\r\n }\r\n\r\n MediaDevices = [];\r\n\r\n audioInputDevices = [];\r\n audioOutputDevices = [];\r\n videoInputDevices = [];\r\n\r\n hasMicrophone = false;\r\n hasSpeakers = false;\r\n hasWebcam = false;\r\n\r\n isWebsiteHasMicrophonePermissions = false;\r\n isWebsiteHasWebcamPermissions = false;\r\n\r\n // to prevent duplication\r\n var alreadyUsedDevices = {};\r\n\r\n navigator.enumerateDevices(function(devices) {\r\n devices.forEach(function(_device) {\r\n var device = {};\r\n for (var d in _device) {\r\n try {\r\n if (typeof _device[d] !== 'function') {\r\n device[d] = _device[d];\r\n }\r\n } catch (e) {}\r\n }\r\n\r\n if (alreadyUsedDevices[device.deviceId + device.label + device.kind]) {\r\n return;\r\n }\r\n\r\n // if it is MediaStreamTrack.getSources\r\n if (device.kind === 'audio') {\r\n device.kind = 'audioinput';\r\n }\r\n\r\n if (device.kind === 'video') {\r\n device.kind = 'videoinput';\r\n }\r\n\r\n if (!device.deviceId) {\r\n device.deviceId = device.id;\r\n }\r\n\r\n if (!device.id) {\r\n device.id = device.deviceId;\r\n }\r\n\r\n if (!device.label) {\r\n device.isCustomLabel = true;\r\n\r\n if (device.kind === 'videoinput') {\r\n device.label = 'Camera ' + (videoInputDevices.length + 1);\r\n } else if (device.kind === 'audioinput') {\r\n device.label = 'Microphone ' + (audioInputDevices.length + 1);\r\n } else if (device.kind === 'audiooutput') {\r\n device.label = 'Speaker ' + (audioOutputDevices.length + 1);\r\n } else {\r\n device.label = 'Please invoke getUserMedia once.';\r\n }\r\n\r\n if (typeof DetectRTC !== 'undefined' && DetectRTC.browser.isChrome && DetectRTC.browser.version >= 46 && !/^(https:|chrome-extension:)$/g.test(location.protocol || '')) {\r\n if (typeof document !== 'undefined' && typeof document.domain === 'string' && document.domain.search && document.domain.search(/localhost|127.0./g) === -1) {\r\n device.label = 'HTTPs is required to get label of this ' + device.kind + ' device.';\r\n }\r\n }\r\n } else {\r\n // Firefox on Android still returns empty label\r\n if (device.kind === 'videoinput' && !isWebsiteHasWebcamPermissions) {\r\n isWebsiteHasWebcamPermissions = true;\r\n }\r\n\r\n if (device.kind === 'audioinput' && !isWebsiteHasMicrophonePermissions) {\r\n isWebsiteHasMicrophonePermissions = true;\r\n }\r\n }\r\n\r\n if (device.kind === 'audioinput') {\r\n hasMicrophone = true;\r\n\r\n if (audioInputDevices.indexOf(device) === -1) {\r\n audioInputDevices.push(device);\r\n }\r\n }\r\n\r\n if (device.kind === 'audiooutput') {\r\n hasSpeakers = true;\r\n\r\n if (audioOutputDevices.indexOf(device) === -1) {\r\n audioOutputDevices.push(device);\r\n }\r\n }\r\n\r\n if (device.kind === 'videoinput') {\r\n hasWebcam = true;\r\n\r\n if (videoInputDevices.indexOf(device) === -1) {\r\n videoInputDevices.push(device);\r\n }\r\n }\r\n\r\n // there is no 'videoouput' in the spec.\r\n MediaDevices.push(device);\r\n\r\n alreadyUsedDevices[device.deviceId + device.label + device.kind] = device;\r\n });\r\n\r\n if (typeof DetectRTC !== 'undefined') {\r\n // to sync latest outputs\r\n DetectRTC.MediaDevices = MediaDevices;\r\n DetectRTC.hasMicrophone = hasMicrophone;\r\n DetectRTC.hasSpeakers = hasSpeakers;\r\n DetectRTC.hasWebcam = hasWebcam;\r\n\r\n DetectRTC.isWebsiteHasWebcamPermissions = isWebsiteHasWebcamPermissions;\r\n DetectRTC.isWebsiteHasMicrophonePermissions = isWebsiteHasMicrophonePermissions;\r\n\r\n DetectRTC.audioInputDevices = audioInputDevices;\r\n DetectRTC.audioOutputDevices = audioOutputDevices;\r\n DetectRTC.videoInputDevices = videoInputDevices;\r\n }\r\n\r\n if (callback) {\r\n callback();\r\n }\r\n });\r\n }\r\n\r\n var DetectRTC = window.DetectRTC || {};\r\n\r\n // ----------\r\n // DetectRTC.browser.name || DetectRTC.browser.version || DetectRTC.browser.fullVersion\r\n DetectRTC.browser = getBrowserInfo();\r\n\r\n detectPrivateMode(function(isPrivateBrowsing) {\r\n DetectRTC.browser.isPrivateBrowsing = !!isPrivateBrowsing;\r\n });\r\n\r\n // DetectRTC.isChrome || DetectRTC.isFirefox || DetectRTC.isEdge\r\n DetectRTC.browser['is' + DetectRTC.browser.name] = true;\r\n\r\n // -----------\r\n DetectRTC.osName = osName;\r\n DetectRTC.osVersion = osVersion;\r\n\r\n var isNodeWebkit = typeof process === 'object' && typeof process.versions === 'object' && process.versions['node-webkit'];\r\n\r\n // --------- Detect if system supports WebRTC 1.0 or WebRTC 1.1.\r\n var isWebRTCSupported = false;\r\n ['RTCPeerConnection', 'webkitRTCPeerConnection', 'mozRTCPeerConnection', 'RTCIceGatherer'].forEach(function(item) {\r\n if (isWebRTCSupported) {\r\n return;\r\n }\r\n\r\n if (item in window) {\r\n isWebRTCSupported = true;\r\n }\r\n });\r\n DetectRTC.isWebRTCSupported = isWebRTCSupported;\r\n\r\n //-------\r\n DetectRTC.isORTCSupported = typeof RTCIceGatherer !== 'undefined';\r\n\r\n // --------- Detect if system supports screen capturing API\r\n var isScreenCapturingSupported = false;\r\n if (DetectRTC.browser.isChrome && DetectRTC.browser.version >= 35) {\r\n isScreenCapturingSupported = true;\r\n } else if (DetectRTC.browser.isFirefox && DetectRTC.browser.version >= 34) {\r\n isScreenCapturingSupported = true;\r\n } else if (DetectRTC.browser.isEdge && DetectRTC.browser.version >= 17) {\r\n isScreenCapturingSupported = true; // navigator.getDisplayMedia\r\n } else if (DetectRTC.osName === 'Android' && DetectRTC.browser.isChrome) {\r\n isScreenCapturingSupported = true;\r\n }\r\n\r\n if (!/^(https:|chrome-extension:)$/g.test(location.protocol || '')) {\r\n var isNonLocalHost = typeof document !== 'undefined' && typeof document.domain === 'string' && document.domain.search && document.domain.search(/localhost|127.0./g) === -1;\r\n if (isNonLocalHost && (DetectRTC.browser.isChrome || DetectRTC.browser.isEdge || DetectRTC.browser.isOpera)) {\r\n isScreenCapturingSupported = false;\r\n } else if (DetectRTC.browser.isFirefox) {\r\n isScreenCapturingSupported = false;\r\n }\r\n }\r\n DetectRTC.isScreenCapturingSupported = isScreenCapturingSupported;\r\n\r\n // --------- Detect if WebAudio API are supported\r\n var webAudio = {\r\n isSupported: false,\r\n isCreateMediaStreamSourceSupported: false\r\n };\r\n\r\n ['AudioContext', 'webkitAudioContext', 'mozAudioContext', 'msAudioContext'].forEach(function(item) {\r\n if (webAudio.isSupported) {\r\n return;\r\n }\r\n\r\n if (item in window) {\r\n webAudio.isSupported = true;\r\n\r\n if (window[item] && 'createMediaStreamSource' in window[item].prototype) {\r\n webAudio.isCreateMediaStreamSourceSupported = true;\r\n }\r\n }\r\n });\r\n DetectRTC.isAudioContextSupported = webAudio.isSupported;\r\n DetectRTC.isCreateMediaStreamSourceSupported = webAudio.isCreateMediaStreamSourceSupported;\r\n\r\n // ---------- Detect if SCTP/RTP channels are supported.\r\n\r\n var isRtpDataChannelsSupported = false;\r\n if (DetectRTC.browser.isChrome && DetectRTC.browser.version > 31) {\r\n isRtpDataChannelsSupported = true;\r\n }\r\n DetectRTC.isRtpDataChannelsSupported = isRtpDataChannelsSupported;\r\n\r\n var isSCTPSupportd = false;\r\n if (DetectRTC.browser.isFirefox && DetectRTC.browser.version > 28) {\r\n isSCTPSupportd = true;\r\n } else if (DetectRTC.browser.isChrome && DetectRTC.browser.version > 25) {\r\n isSCTPSupportd = true;\r\n } else if (DetectRTC.browser.isOpera && DetectRTC.browser.version >= 11) {\r\n isSCTPSupportd = true;\r\n }\r\n DetectRTC.isSctpDataChannelsSupported = isSCTPSupportd;\r\n\r\n // ---------\r\n\r\n DetectRTC.isMobileDevice = isMobileDevice; // \"isMobileDevice\" boolean is defined in \"getBrowserInfo.js\"\r\n\r\n // ------\r\n var isGetUserMediaSupported = false;\r\n if (navigator.getUserMedia) {\r\n isGetUserMediaSupported = true;\r\n } else if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\r\n isGetUserMediaSupported = true;\r\n }\r\n\r\n if (DetectRTC.browser.isChrome && DetectRTC.browser.version >= 46 && !/^(https:|chrome-extension:)$/g.test(location.protocol || '')) {\r\n if (typeof document !== 'undefined' && typeof document.domain === 'string' && document.domain.search && document.domain.search(/localhost|127.0./g) === -1) {\r\n isGetUserMediaSupported = 'Requires HTTPs';\r\n }\r\n }\r\n\r\n if (DetectRTC.osName === 'Nodejs') {\r\n isGetUserMediaSupported = false;\r\n }\r\n DetectRTC.isGetUserMediaSupported = isGetUserMediaSupported;\r\n\r\n var displayResolution = '';\r\n if (screen.width) {\r\n var width = (screen.width) ? screen.width : '';\r\n var height = (screen.height) ? screen.height : '';\r\n displayResolution += '' + width + ' x ' + height;\r\n }\r\n DetectRTC.displayResolution = displayResolution;\r\n\r\n function getAspectRatio(w, h) {\r\n function gcd(a, b) {\r\n return (b == 0) ? a : gcd(b, a % b);\r\n }\r\n var r = gcd(w, h);\r\n return (w / r) / (h / r);\r\n }\r\n\r\n DetectRTC.displayAspectRatio = getAspectRatio(screen.width, screen.height).toFixed(2);\r\n\r\n // ----------\r\n DetectRTC.isCanvasSupportsStreamCapturing = isCanvasSupportsStreamCapturing;\r\n DetectRTC.isVideoSupportsStreamCapturing = isVideoSupportsStreamCapturing;\r\n\r\n if (DetectRTC.browser.name == 'Chrome' && DetectRTC.browser.version >= 53) {\r\n if (!DetectRTC.isCanvasSupportsStreamCapturing) {\r\n DetectRTC.isCanvasSupportsStreamCapturing = 'Requires chrome flag: enable-experimental-web-platform-features';\r\n }\r\n\r\n if (!DetectRTC.isVideoSupportsStreamCapturing) {\r\n DetectRTC.isVideoSupportsStreamCapturing = 'Requires chrome flag: enable-experimental-web-platform-features';\r\n }\r\n }\r\n\r\n // ------\r\n DetectRTC.DetectLocalIPAddress = DetectLocalIPAddress;\r\n\r\n DetectRTC.isWebSocketsSupported = 'WebSocket' in window && 2 === window.WebSocket.CLOSING;\r\n DetectRTC.isWebSocketsBlocked = !DetectRTC.isWebSocketsSupported;\r\n\r\n if (DetectRTC.osName === 'Nodejs') {\r\n DetectRTC.isWebSocketsSupported = true;\r\n DetectRTC.isWebSocketsBlocked = false;\r\n }\r\n\r\n DetectRTC.checkWebSocketsSupport = function(callback) {\r\n callback = callback || function() {};\r\n try {\r\n var starttime;\r\n var websocket = new WebSocket('wss://echo.websocket.org:443/');\r\n websocket.onopen = function() {\r\n DetectRTC.isWebSocketsBlocked = false;\r\n starttime = (new Date).getTime();\r\n websocket.send('ping');\r\n };\r\n websocket.onmessage = function() {\r\n DetectRTC.WebsocketLatency = (new Date).getTime() - starttime + 'ms';\r\n callback();\r\n websocket.close();\r\n websocket = null;\r\n };\r\n websocket.onerror = function() {\r\n DetectRTC.isWebSocketsBlocked = true;\r\n callback();\r\n };\r\n } catch (e) {\r\n DetectRTC.isWebSocketsBlocked = true;\r\n callback();\r\n }\r\n };\r\n\r\n // -------\r\n DetectRTC.load = function(callback) {\r\n callback = callback || function() {};\r\n checkDeviceSupport(callback);\r\n };\r\n\r\n // check for microphone/camera support!\r\n if (typeof checkDeviceSupport === 'function') {\r\n // checkDeviceSupport();\r\n }\r\n\r\n if (typeof MediaDevices !== 'undefined') {\r\n DetectRTC.MediaDevices = MediaDevices;\r\n } else {\r\n DetectRTC.MediaDevices = [];\r\n }\r\n\r\n DetectRTC.hasMicrophone = hasMicrophone;\r\n DetectRTC.hasSpeakers = hasSpeakers;\r\n DetectRTC.hasWebcam = hasWebcam;\r\n\r\n DetectRTC.isWebsiteHasWebcamPermissions = isWebsiteHasWebcamPermissions;\r\n DetectRTC.isWebsiteHasMicrophonePermissions = isWebsiteHasMicrophonePermissions;\r\n\r\n DetectRTC.audioInputDevices = audioInputDevices;\r\n DetectRTC.audioOutputDevices = audioOutputDevices;\r\n DetectRTC.videoInputDevices = videoInputDevices;\r\n\r\n // ------\r\n var isSetSinkIdSupported = false;\r\n if (typeof document !== 'undefined' && typeof document.createElement === 'function' && 'setSinkId' in document.createElement('video')) {\r\n isSetSinkIdSupported = true;\r\n }\r\n DetectRTC.isSetSinkIdSupported = isSetSinkIdSupported;\r\n\r\n // -----\r\n var isRTPSenderReplaceTracksSupported = false;\r\n if (DetectRTC.browser.isFirefox && typeof mozRTCPeerConnection !== 'undefined' /*&& DetectRTC.browser.version > 39*/ ) {\r\n /*global mozRTCPeerConnection:true */\r\n if ('getSenders' in mozRTCPeerConnection.prototype) {\r\n isRTPSenderReplaceTracksSupported = true;\r\n }\r\n } else if (DetectRTC.browser.isChrome && typeof webkitRTCPeerConnection !== 'undefined') {\r\n /*global webkitRTCPeerConnection:true */\r\n if ('getSenders' in webkitRTCPeerConnection.prototype) {\r\n isRTPSenderReplaceTracksSupported = true;\r\n }\r\n }\r\n DetectRTC.isRTPSenderReplaceTracksSupported = isRTPSenderReplaceTracksSupported;\r\n\r\n //------\r\n var isRemoteStreamProcessingSupported = false;\r\n if (DetectRTC.browser.isFirefox && DetectRTC.browser.version > 38) {\r\n isRemoteStreamProcessingSupported = true;\r\n }\r\n DetectRTC.isRemoteStreamProcessingSupported = isRemoteStreamProcessingSupported;\r\n\r\n //-------\r\n var isApplyConstraintsSupported = false;\r\n\r\n /*global MediaStreamTrack:true */\r\n if (typeof MediaStreamTrack !== 'undefined' && 'applyConstraints' in MediaStreamTrack.prototype) {\r\n isApplyConstraintsSupported = true;\r\n }\r\n DetectRTC.isApplyConstraintsSupported = isApplyConstraintsSupported;\r\n\r\n //-------\r\n var isMultiMonitorScreenCapturingSupported = false;\r\n if (DetectRTC.browser.isFirefox && DetectRTC.browser.version >= 43) {\r\n // version 43 merely supports platforms for multi-monitors\r\n // version 44 will support exact multi-monitor selection i.e. you can select any monitor for screen capturing.\r\n isMultiMonitorScreenCapturingSupported = true;\r\n }\r\n DetectRTC.isMultiMonitorScreenCapturingSupported = isMultiMonitorScreenCapturingSupported;\r\n\r\n DetectRTC.isPromisesSupported = !!('Promise' in window);\r\n\r\n // version is generated by \"grunt\"\r\n DetectRTC.version = '1.3.9';\r\n\r\n if (typeof DetectRTC === 'undefined') {\r\n window.DetectRTC = {};\r\n }\r\n\r\n var MediaStream = window.MediaStream;\r\n\r\n if (typeof MediaStream === 'undefined' && typeof webkitMediaStream !== 'undefined') {\r\n MediaStream = webkitMediaStream;\r\n }\r\n\r\n if (typeof MediaStream !== 'undefined' && typeof MediaStream === 'function') {\r\n DetectRTC.MediaStream = Object.keys(MediaStream.prototype);\r\n } else DetectRTC.MediaStream = false;\r\n\r\n if (typeof MediaStreamTrack !== 'undefined') {\r\n DetectRTC.MediaStreamTrack = Object.keys(MediaStreamTrack.prototype);\r\n } else DetectRTC.MediaStreamTrack = false;\r\n\r\n var RTCPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;\r\n\r\n if (typeof RTCPeerConnection !== 'undefined') {\r\n DetectRTC.RTCPeerConnection = Object.keys(RTCPeerConnection.prototype);\r\n } else DetectRTC.RTCPeerConnection = false;\r\n\r\n window.DetectRTC = DetectRTC;\r\n\r\n if (typeof module !== 'undefined' /* && !!module.exports*/ ) {\r\n module.exports = DetectRTC;\r\n }\r\n\r\n if (typeof define === 'function' && define.amd) {\r\n define('DetectRTC', [], function() {\r\n return DetectRTC;\r\n });\r\n }\r\n })();\r\n\r\n // globals.js\r\n\r\n if (typeof cordova !== 'undefined') {\r\n DetectRTC.isMobileDevice = true;\r\n DetectRTC.browser.name = 'Chrome';\r\n }\r\n\r\n if (navigator && navigator.userAgent && navigator.userAgent.indexOf('Crosswalk') !== -1) {\r\n DetectRTC.isMobileDevice = true;\r\n DetectRTC.browser.name = 'Chrome';\r\n }\r\n\r\n function fireEvent(obj, eventName, args) {\r\n if (typeof CustomEvent === 'undefined') {\r\n return;\r\n }\r\n\r\n var eventDetail = {\r\n arguments: args,\r\n __exposedProps__: args\r\n };\r\n\r\n var event = new CustomEvent(eventName, eventDetail);\r\n obj.dispatchEvent(event);\r\n }\r\n\r\n function setHarkEvents(connection, streamEvent) {\r\n if (!streamEvent.stream || !getTracks(streamEvent.stream, 'audio').length) return;\r\n\r\n if (!connection || !streamEvent) {\r\n throw 'Both arguments are required.';\r\n }\r\n\r\n if (!connection.onspeaking || !connection.onsilence) {\r\n return;\r\n }\r\n\r\n if (typeof hark === 'undefined') {\r\n throw 'hark.js not found.';\r\n }\r\n\r\n hark(streamEvent.stream, {\r\n onspeaking: function() {\r\n connection.onspeaking(streamEvent);\r\n },\r\n onsilence: function() {\r\n connection.onsilence(streamEvent);\r\n },\r\n onvolumechange: function(volume, threshold) {\r\n if (!connection.onvolumechange) {\r\n return;\r\n }\r\n connection.onvolumechange(merge({\r\n volume: volume,\r\n threshold: threshold\r\n }, streamEvent));\r\n }\r\n });\r\n }\r\n\r\n function setMuteHandlers(connection, streamEvent) {\r\n if (!streamEvent.stream || !streamEvent.stream || !streamEvent.stream.addEventListener) return;\r\n\r\n streamEvent.stream.addEventListener('mute', function(event) {\r\n event = connection.streamEvents[streamEvent.streamid];\r\n\r\n event.session = {\r\n audio: event.muteType === 'audio',\r\n video: event.muteType === 'video'\r\n };\r\n\r\n connection.onmute(event);\r\n }, false);\r\n\r\n streamEvent.stream.addEventListener('unmute', function(event) {\r\n event = connection.streamEvents[streamEvent.streamid];\r\n\r\n event.session = {\r\n audio: event.unmuteType === 'audio',\r\n video: event.unmuteType === 'video'\r\n };\r\n\r\n connection.onunmute(event);\r\n }, false);\r\n }\r\n\r\n function getRandomString() {\r\n if (window.crypto && window.crypto.getRandomValues && navigator.userAgent.indexOf('Safari') === -1) {\r\n var a = window.crypto.getRandomValues(new Uint32Array(3)),\r\n token = '';\r\n for (var i = 0, l = a.length; i < l; i++) {\r\n token += a[i].toString(36);\r\n }\r\n return token;\r\n } else {\r\n return (Math.random() * new Date().getTime()).toString(36).replace(/\\./g, '');\r\n }\r\n }\r\n\r\n // Get HTMLAudioElement/HTMLVideoElement accordingly\r\n // todo: add API documentation for connection.autoCreateMediaElement\r\n\r\n function getRMCMediaElement(stream, callback, connection) {\r\n if (!connection.autoCreateMediaElement) {\r\n callback({});\r\n return;\r\n }\r\n\r\n var isAudioOnly = false;\r\n if (!getTracks(stream, 'video').length && !stream.isVideo && !stream.isScreen) {\r\n isAudioOnly = true;\r\n }\r\n\r\n if (DetectRTC.browser.name === 'Firefox') {\r\n if (connection.session.video || connection.session.screen) {\r\n isAudioOnly = false;\r\n }\r\n }\r\n\r\n var mediaElement = document.createElement(isAudioOnly ? 'audio' : 'video');\r\n\r\n mediaElement.srcObject = stream;\r\n\r\n mediaElement.setAttribute('autoplay', true);\r\n mediaElement.setAttribute('playsinline', true);\r\n mediaElement.setAttribute('controls', true);\r\n mediaElement.setAttribute('muted', false);\r\n mediaElement.setAttribute('volume', 1);\r\n\r\n // http://goo.gl/WZ5nFl\r\n // Firefox don't yet support onended for any stream (remote/local)\r\n if (DetectRTC.browser.name === 'Firefox') {\r\n var streamEndedEvent = 'ended';\r\n\r\n if ('oninactive' in mediaElement) {\r\n streamEndedEvent = 'inactive';\r\n }\r\n\r\n mediaElement.addEventListener(streamEndedEvent, function() {\r\n // fireEvent(stream, streamEndedEvent, stream);\r\n currentUserMediaRequest.remove(stream.idInstance);\r\n\r\n if (stream.type === 'local') {\r\n streamEndedEvent = 'ended';\r\n\r\n if ('oninactive' in stream) {\r\n streamEndedEvent = 'inactive';\r\n }\r\n\r\n StreamsHandler.onSyncNeeded(stream.streamid, streamEndedEvent);\r\n\r\n connection.attachStreams.forEach(function(aStream, idx) {\r\n if (stream.streamid === aStream.streamid) {\r\n delete connection.attachStreams[idx];\r\n }\r\n });\r\n\r\n var newStreamsArray = [];\r\n connection.attachStreams.forEach(function(aStream) {\r\n if (aStream) {\r\n newStreamsArray.push(aStream);\r\n }\r\n });\r\n connection.attachStreams = newStreamsArray;\r\n\r\n var streamEvent = connection.streamEvents[stream.streamid];\r\n\r\n if (streamEvent) {\r\n connection.onstreamended(streamEvent);\r\n return;\r\n }\r\n if (this.parentNode) {\r\n this.parentNode.removeChild(this);\r\n }\r\n }\r\n }, false);\r\n }\r\n\r\n var played = mediaElement.play();\r\n if (typeof played !== 'undefined') {\r\n var cbFired = false;\r\n setTimeout(function() {\r\n if (!cbFired) {\r\n cbFired = true;\r\n callback(mediaElement);\r\n }\r\n }, 1000);\r\n played.then(function() {\r\n if (cbFired) return;\r\n cbFired = true;\r\n callback(mediaElement);\r\n }).catch(function(error) {\r\n if (cbFired) return;\r\n cbFired = true;\r\n callback(mediaElement);\r\n });\r\n } else {\r\n callback(mediaElement);\r\n }\r\n }\r\n\r\n // if IE\r\n if (!window.addEventListener) {\r\n window.addEventListener = function(el, eventName, eventHandler) {\r\n if (!el.attachEvent) {\r\n return;\r\n }\r\n el.attachEvent('on' + eventName, eventHandler);\r\n };\r\n }\r\n\r\n function listenEventHandler(eventName, eventHandler) {\r\n window.removeEventListener(eventName, eventHandler);\r\n window.addEventListener(eventName, eventHandler, false);\r\n }\r\n\r\n window.attachEventListener = function(video, type, listener, useCapture) {\r\n video.addEventListener(type, listener, useCapture);\r\n };\r\n\r\n function removeNullEntries(array) {\r\n var newArray = [];\r\n array.forEach(function(item) {\r\n if (item) {\r\n newArray.push(item);\r\n }\r\n });\r\n return newArray;\r\n }\r\n\r\n\r\n function isData(session) {\r\n return !session.audio && !session.video && !session.screen && session.data;\r\n }\r\n\r\n function isNull(obj) {\r\n return typeof obj === 'undefined';\r\n }\r\n\r\n function isString(obj) {\r\n return typeof obj === 'string';\r\n }\r\n\r\n var MediaStream = window.MediaStream;\r\n\r\n if (typeof MediaStream === 'undefined' && typeof webkitMediaStream !== 'undefined') {\r\n MediaStream = webkitMediaStream;\r\n }\r\n\r\n /*global MediaStream:true */\r\n if (typeof MediaStream !== 'undefined') {\r\n if (!('stop' in MediaStream.prototype)) {\r\n MediaStream.prototype.stop = function() {\r\n this.getTracks().forEach(function(track) {\r\n track.stop();\r\n });\r\n };\r\n }\r\n }\r\n\r\n function isAudioPlusTab(connection, audioPlusTab) {\r\n if (connection.session.audio && connection.session.audio === 'two-way') {\r\n return false;\r\n }\r\n\r\n if (DetectRTC.browser.name === 'Firefox' && audioPlusTab !== false) {\r\n return true;\r\n }\r\n\r\n if (DetectRTC.browser.name !== 'Chrome' || DetectRTC.browser.version < 50) return false;\r\n\r\n if (typeof audioPlusTab === true) {\r\n return true;\r\n }\r\n\r\n if (typeof audioPlusTab === 'undefined' && connection.session.audio && connection.session.screen && !connection.session.video) {\r\n audioPlusTab = true;\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n function getAudioScreenConstraints(screen_constraints) {\r\n if (DetectRTC.browser.name === 'Firefox') {\r\n return true;\r\n }\r\n\r\n if (DetectRTC.browser.name !== 'Chrome') return false;\r\n\r\n return {\r\n mandatory: {\r\n chromeMediaSource: screen_constraints.mandatory.chromeMediaSource,\r\n chromeMediaSourceId: screen_constraints.mandatory.chromeMediaSourceId\r\n }\r\n };\r\n }\r\n\r\n window.iOSDefaultAudioOutputDevice = window.iOSDefaultAudioOutputDevice || 'speaker'; // earpiece or speaker\r\n\r\n function getTracks(stream, kind) {\r\n if (!stream || !stream.getTracks) {\r\n return [];\r\n }\r\n\r\n return stream.getTracks().filter(function(t) {\r\n return t.kind === (kind || 'audio');\r\n });\r\n }\r\n\r\n function isUnifiedPlanSupportedDefault() {\r\n var canAddTransceiver = false;\r\n\r\n try {\r\n if (typeof RTCRtpTransceiver === 'undefined') return false;\r\n if (!('currentDirection' in RTCRtpTransceiver.prototype)) return false;\r\n\r\n var tempPc = new RTCPeerConnection();\r\n\r\n try {\r\n tempPc.addTransceiver('audio');\r\n canAddTransceiver = true;\r\n } catch (e) {}\r\n\r\n tempPc.close();\r\n } catch (e) {\r\n canAddTransceiver = false;\r\n }\r\n\r\n return canAddTransceiver && isUnifiedPlanSuppored();\r\n }\r\n\r\n function isUnifiedPlanSuppored() {\r\n var isUnifiedPlanSupported = false;\r\n\r\n try {\r\n var pc = new RTCPeerConnection({\r\n sdpSemantics: 'unified-plan'\r\n });\r\n\r\n try {\r\n var config = pc.getConfiguration();\r\n if (config.sdpSemantics == 'unified-plan')\r\n isUnifiedPlanSupported = true;\r\n else if (config.sdpSemantics == 'plan-b')\r\n isUnifiedPlanSupported = false;\r\n else\r\n isUnifiedPlanSupported = false;\r\n } catch (e) {\r\n isUnifiedPlanSupported = false;\r\n }\r\n } catch (e) {\r\n isUnifiedPlanSupported = false;\r\n }\r\n\r\n return isUnifiedPlanSupported;\r\n }\r\n\r\n // ios-hacks.js\r\n\r\n function setCordovaAPIs() {\r\n // if (DetectRTC.osName !== 'iOS') return;\r\n if (typeof cordova === 'undefined' || typeof cordova.plugins === 'undefined' || typeof cordova.plugins.iosrtc === 'undefined') return;\r\n\r\n var iosrtc = cordova.plugins.iosrtc;\r\n window.webkitRTCPeerConnection = iosrtc.RTCPeerConnection;\r\n window.RTCSessionDescription = iosrtc.RTCSessionDescription;\r\n window.RTCIceCandidate = iosrtc.RTCIceCandidate;\r\n window.MediaStream = iosrtc.MediaStream;\r\n window.MediaStreamTrack = iosrtc.MediaStreamTrack;\r\n navigator.getUserMedia = navigator.webkitGetUserMedia = iosrtc.getUserMedia;\r\n\r\n iosrtc.debug.enable('iosrtc*');\r\n if (typeof iosrtc.selectAudioOutput == 'function') {\r\n iosrtc.selectAudioOutput(window.iOSDefaultAudioOutputDevice || 'speaker'); // earpiece or speaker\r\n }\r\n iosrtc.registerGlobals();\r\n }\r\n\r\n document.addEventListener('deviceready', setCordovaAPIs, false);\r\n setCordovaAPIs();\r\n\r\n // RTCPeerConnection.js\r\n\r\n var defaults = {};\r\n\r\n function setSdpConstraints(config) {\r\n var sdpConstraints = {\r\n OfferToReceiveAudio: !!config.OfferToReceiveAudio,\r\n OfferToReceiveVideo: !!config.OfferToReceiveVideo\r\n };\r\n\r\n return sdpConstraints;\r\n }\r\n\r\n var RTCPeerConnection;\r\n if (typeof window.RTCPeerConnection !== 'undefined') {\r\n RTCPeerConnection = window.RTCPeerConnection;\r\n } else if (typeof mozRTCPeerConnection !== 'undefined') {\r\n RTCPeerConnection = mozRTCPeerConnection;\r\n } else if (typeof webkitRTCPeerConnection !== 'undefined') {\r\n RTCPeerConnection = webkitRTCPeerConnection;\r\n }\r\n\r\n var RTCSessionDescription = window.RTCSessionDescription || window.mozRTCSessionDescription;\r\n var RTCIceCandidate = window.RTCIceCandidate || window.mozRTCIceCandidate;\r\n var MediaStreamTrack = window.MediaStreamTrack;\r\n\r\n function PeerInitiator(config) {\r\n if (typeof window.RTCPeerConnection !== 'undefined') {\r\n RTCPeerConnection = window.RTCPeerConnection;\r\n } else if (typeof mozRTCPeerConnection !== 'undefined') {\r\n RTCPeerConnection = mozRTCPeerConnection;\r\n } else if (typeof webkitRTCPeerConnection !== 'undefined') {\r\n RTCPeerConnection = webkitRTCPeerConnection;\r\n }\r\n\r\n RTCSessionDescription = window.RTCSessionDescription || window.mozRTCSessionDescription;\r\n RTCIceCandidate = window.RTCIceCandidate || window.mozRTCIceCandidate;\r\n MediaStreamTrack = window.MediaStreamTrack;\r\n\r\n if (!RTCPeerConnection) {\r\n throw 'WebRTC 1.0 (RTCPeerConnection) API are NOT available in this browser.';\r\n }\r\n\r\n var connection = config.rtcMultiConnection;\r\n\r\n this.extra = config.remoteSdp ? config.remoteSdp.extra : connection.extra;\r\n this.userid = config.userid;\r\n this.streams = [];\r\n this.channels = config.channels || [];\r\n this.connectionDescription = config.connectionDescription;\r\n\r\n this.addStream = function(session) {\r\n connection.addStream(session, self.userid);\r\n };\r\n\r\n this.removeStream = function(streamid) {\r\n connection.removeStream(streamid, self.userid);\r\n };\r\n\r\n var self = this;\r\n\r\n if (config.remoteSdp) {\r\n this.connectionDescription = config.remoteSdp.connectionDescription;\r\n }\r\n\r\n var allRemoteStreams = {};\r\n\r\n defaults.sdpConstraints = setSdpConstraints({\r\n OfferToReceiveAudio: true,\r\n OfferToReceiveVideo: true\r\n });\r\n\r\n var peer;\r\n\r\n var renegotiatingPeer = !!config.renegotiatingPeer;\r\n if (config.remoteSdp) {\r\n renegotiatingPeer = !!config.remoteSdp.renegotiatingPeer;\r\n }\r\n\r\n var localStreams = [];\r\n connection.attachStreams.forEach(function(stream) {\r\n if (!!stream) {\r\n localStreams.push(stream);\r\n }\r\n });\r\n\r\n if (!renegotiatingPeer) {\r\n var iceTransports = 'all';\r\n if (connection.candidates.turn || connection.candidates.relay) {\r\n if (!connection.candidates.stun && !connection.candidates.reflexive && !connection.candidates.host) {\r\n iceTransports = 'relay';\r\n }\r\n }\r\n\r\n try {\r\n // ref: developer.mozilla.org/en-US/docs/Web/API/RTCConfiguration\r\n var params = {\r\n iceServers: connection.iceServers,\r\n iceTransportPolicy: connection.iceTransportPolicy || iceTransports\r\n };\r\n\r\n if (typeof connection.iceCandidatePoolSize !== 'undefined') {\r\n params.iceCandidatePoolSize = connection.iceCandidatePoolSize;\r\n }\r\n\r\n if (typeof connection.bundlePolicy !== 'undefined') {\r\n params.bundlePolicy = connection.bundlePolicy;\r\n }\r\n\r\n if (typeof connection.rtcpMuxPolicy !== 'undefined') {\r\n params.rtcpMuxPolicy = connection.rtcpMuxPolicy;\r\n }\r\n\r\n if (!!connection.sdpSemantics) {\r\n params.sdpSemantics = connection.sdpSemantics || 'unified-plan';\r\n }\r\n\r\n if (!connection.iceServers || !connection.iceServers.length) {\r\n params = null;\r\n connection.optionalArgument = null;\r\n }\r\n\r\n peer = new RTCPeerConnection(params, connection.optionalArgument);\r\n } catch (e) {\r\n try {\r\n var params = {\r\n iceServers: connection.iceServers\r\n };\r\n\r\n peer = new RTCPeerConnection(params);\r\n } catch (e) {\r\n peer = new RTCPeerConnection();\r\n }\r\n }\r\n } else {\r\n peer = config.peerRef;\r\n }\r\n\r\n if (!peer.getRemoteStreams && peer.getReceivers) {\r\n peer.getRemoteStreams = function() {\r\n var stream = new MediaStream();\r\n peer.getReceivers().forEach(function(receiver) {\r\n stream.addTrack(receiver.track);\r\n });\r\n return [stream];\r\n };\r\n }\r\n\r\n if (!peer.getLocalStreams && peer.getSenders) {\r\n peer.getLocalStreams = function() {\r\n var stream = new MediaStream();\r\n peer.getSenders().forEach(function(sender) {\r\n stream.addTrack(sender.track);\r\n });\r\n return [stream];\r\n };\r\n }\r\n\r\n peer.onicecandidate = function(event) {\r\n if (!event.candidate) {\r\n if (!connection.trickleIce) {\r\n var localSdp = peer.localDescription;\r\n config.onLocalSdp({\r\n type: localSdp.type,\r\n sdp: localSdp.sdp,\r\n remotePeerSdpConstraints: config.remotePeerSdpConstraints || false,\r\n renegotiatingPeer: !!config.renegotiatingPeer || false,\r\n connectionDescription: self.connectionDescription,\r\n dontGetRemoteStream: !!config.dontGetRemoteStream,\r\n extra: connection ? connection.extra : {},\r\n streamsToShare: streamsToShare\r\n });\r\n }\r\n return;\r\n }\r\n\r\n if (!connection.trickleIce) return;\r\n config.onLocalCandidate({\r\n candidate: event.candidate.candidate,\r\n sdpMid: event.candidate.sdpMid,\r\n sdpMLineIndex: event.candidate.sdpMLineIndex\r\n });\r\n };\r\n\r\n localStreams.forEach(function(localStream) {\r\n if (config.remoteSdp && config.remoteSdp.remotePeerSdpConstraints && config.remoteSdp.remotePeerSdpConstraints.dontGetRemoteStream) {\r\n return;\r\n }\r\n\r\n if (config.dontAttachLocalStream) {\r\n return;\r\n }\r\n\r\n localStream = connection.beforeAddingStream(localStream, self);\r\n\r\n if (!localStream) return;\r\n\r\n peer.getLocalStreams().forEach(function(stream) {\r\n if (localStream && stream.id == localStream.id) {\r\n localStream = null;\r\n }\r\n });\r\n\r\n if (localStream && localStream.getTracks) {\r\n localStream.getTracks().forEach(function(track) {\r\n try {\r\n // last parameter is redundant for unified-plan\r\n // starting from chrome version 72\r\n peer.addTrack(track, localStream);\r\n } catch (e) {}\r\n });\r\n }\r\n });\r\n\r\n peer.oniceconnectionstatechange = peer.onsignalingstatechange = function() {\r\n var extra = self.extra;\r\n if (connection.peers[self.userid]) {\r\n extra = connection.peers[self.userid].extra || extra;\r\n }\r\n\r\n if (!peer) {\r\n return;\r\n }\r\n\r\n config.onPeerStateChanged({\r\n iceConnectionState: peer.iceConnectionState,\r\n iceGatheringState: peer.iceGatheringState,\r\n signalingState: peer.signalingState,\r\n extra: extra,\r\n userid: self.userid\r\n });\r\n\r\n if (peer && peer.iceConnectionState && peer.iceConnectionState.search(/closed|failed/gi) !== -1 && self.streams instanceof Array) {\r\n self.streams.forEach(function(stream) {\r\n var streamEvent = connection.streamEvents[stream.id] || {\r\n streamid: stream.id,\r\n stream: stream,\r\n type: 'remote'\r\n };\r\n\r\n connection.onstreamended(streamEvent);\r\n });\r\n }\r\n };\r\n\r\n var sdpConstraints = {\r\n OfferToReceiveAudio: !!localStreams.length,\r\n OfferToReceiveVideo: !!localStreams.length\r\n };\r\n\r\n if (config.localPeerSdpConstraints) sdpConstraints = config.localPeerSdpConstraints;\r\n\r\n defaults.sdpConstraints = setSdpConstraints(sdpConstraints);\r\n\r\n var streamObject;\r\n var dontDuplicate = {};\r\n\r\n peer.ontrack = function(event) {\r\n if (!event || event.type !== 'track') return;\r\n\r\n event.stream = event.streams[event.streams.length - 1];\r\n\r\n if (!event.stream.id) {\r\n event.stream.id = event.track.id;\r\n }\r\n\r\n if (dontDuplicate[event.stream.id] && DetectRTC.browser.name !== 'Safari') {\r\n if (event.track) {\r\n event.track.onended = function() { // event.track.onmute = \r\n peer && peer.onremovestream(event);\r\n };\r\n }\r\n return;\r\n }\r\n\r\n dontDuplicate[event.stream.id] = event.stream.id;\r\n\r\n var streamsToShare = {};\r\n if (config.remoteSdp && config.remoteSdp.streamsToShare) {\r\n streamsToShare = config.remoteSdp.streamsToShare;\r\n } else if (config.streamsToShare) {\r\n streamsToShare = config.streamsToShare;\r\n }\r\n\r\n var streamToShare = streamsToShare[event.stream.id];\r\n if (streamToShare) {\r\n event.stream.isAudio = streamToShare.isAudio;\r\n event.stream.isVideo = streamToShare.isVideo;\r\n event.stream.isScreen = streamToShare.isScreen;\r\n } else {\r\n event.stream.isVideo = !!getTracks(event.stream, 'video').length;\r\n event.stream.isAudio = !event.stream.isVideo;\r\n event.stream.isScreen = false;\r\n }\r\n\r\n event.stream.streamid = event.stream.id;\r\n\r\n allRemoteStreams[event.stream.id] = event.stream;\r\n config.onRemoteStream(event.stream);\r\n\r\n event.stream.getTracks().forEach(function(track) {\r\n track.onended = function() { // track.onmute = \r\n peer && peer.onremovestream(event);\r\n };\r\n });\r\n\r\n event.stream.onremovetrack = function() {\r\n peer && peer.onremovestream(event);\r\n };\r\n };\r\n\r\n peer.onremovestream = function(event) {\r\n // this event doesn't works anymore\r\n event.stream.streamid = event.stream.id;\r\n\r\n if (allRemoteStreams[event.stream.id]) {\r\n delete allRemoteStreams[event.stream.id];\r\n }\r\n\r\n config.onRemoteStreamRemoved(event.stream);\r\n };\r\n\r\n if (typeof peer.removeStream !== 'function') {\r\n // removeStream backward compatibility\r\n peer.removeStream = function(stream) {\r\n stream.getTracks().forEach(function(track) {\r\n peer.removeTrack(track, stream);\r\n });\r\n };\r\n }\r\n\r\n this.addRemoteCandidate = function(remoteCandidate) {\r\n peer.addIceCandidate(new RTCIceCandidate(remoteCandidate));\r\n };\r\n\r\n function oldAddRemoteSdp(remoteSdp, cb) {\r\n cb = cb || function() {};\r\n\r\n if (DetectRTC.browser.name !== 'Safari') {\r\n remoteSdp.sdp = connection.processSdp(remoteSdp.sdp);\r\n }\r\n peer.setRemoteDescription(new RTCSessionDescription(remoteSdp), cb, function(error) {\r\n if (!!connection.enableLogs) {\r\n console.error('setRemoteDescription failed', '\\n', error, '\\n', remoteSdp.sdp);\r\n }\r\n\r\n cb();\r\n });\r\n }\r\n\r\n this.addRemoteSdp = function(remoteSdp, cb) {\r\n cb = cb || function() {};\r\n\r\n if (DetectRTC.browser.name !== 'Safari') {\r\n remoteSdp.sdp = connection.processSdp(remoteSdp.sdp);\r\n }\r\n\r\n peer.setRemoteDescription(new RTCSessionDescription(remoteSdp)).then(cb, function(error) {\r\n if (!!connection.enableLogs) {\r\n console.error('setRemoteDescription failed', '\\n', error, '\\n', remoteSdp.sdp);\r\n }\r\n\r\n cb();\r\n }).catch(function(error) {\r\n if (!!connection.enableLogs) {\r\n console.error('setRemoteDescription failed', '\\n', error, '\\n', remoteSdp.sdp);\r\n }\r\n\r\n cb();\r\n });\r\n };\r\n\r\n var isOfferer = true;\r\n\r\n if (config.remoteSdp) {\r\n isOfferer = false;\r\n }\r\n\r\n this.createDataChannel = function() {\r\n var channel = peer.createDataChannel('sctp', {});\r\n setChannelEvents(channel);\r\n };\r\n\r\n if (connection.session.data === true && !renegotiatingPeer) {\r\n if (!isOfferer) {\r\n peer.ondatachannel = function(event) {\r\n var channel = event.channel;\r\n setChannelEvents(channel);\r\n };\r\n } else {\r\n this.createDataChannel();\r\n }\r\n }\r\n\r\n this.enableDisableVideoEncoding = function(enable) {\r\n var rtcp;\r\n peer.getSenders().forEach(function(sender) {\r\n if (!rtcp && sender.track.kind === 'video') {\r\n rtcp = sender;\r\n }\r\n });\r\n\r\n if (!rtcp || !rtcp.getParameters) return;\r\n\r\n var parameters = rtcp.getParameters();\r\n parameters.encodings[1] && (parameters.encodings[1].active = !!enable);\r\n parameters.encodings[2] && (parameters.encodings[2].active = !!enable);\r\n rtcp.setParameters(parameters);\r\n };\r\n\r\n if (config.remoteSdp) {\r\n if (config.remoteSdp.remotePeerSdpConstraints) {\r\n sdpConstraints = config.remoteSdp.remotePeerSdpConstraints;\r\n }\r\n defaults.sdpConstraints = setSdpConstraints(sdpConstraints);\r\n this.addRemoteSdp(config.remoteSdp, function() {\r\n createOfferOrAnswer('createAnswer');\r\n });\r\n }\r\n\r\n function setChannelEvents(channel) {\r\n // force ArrayBuffer in Firefox; which uses \"Blob\" by default.\r\n channel.binaryType = 'arraybuffer';\r\n\r\n channel.onmessage = function(event) {\r\n config.onDataChannelMessage(event.data);\r\n };\r\n\r\n channel.onopen = function() {\r\n config.onDataChannelOpened(channel);\r\n };\r\n\r\n channel.onerror = function(error) {\r\n config.onDataChannelError(error);\r\n };\r\n\r\n channel.onclose = function(event) {\r\n config.onDataChannelClosed(event);\r\n };\r\n\r\n channel.internalSend = channel.send;\r\n channel.send = function(data) {\r\n if (channel.readyState !== 'open') {\r\n return;\r\n }\r\n\r\n channel.internalSend(data);\r\n };\r\n\r\n peer.channel = channel;\r\n }\r\n\r\n if (connection.session.audio == 'two-way' || connection.session.video == 'two-way' || connection.session.screen == 'two-way') {\r\n defaults.sdpConstraints = setSdpConstraints({\r\n OfferToReceiveAudio: connection.session.audio == 'two-way' || (config.remoteSdp && config.remoteSdp.remotePeerSdpConstraints && config.remoteSdp.remotePeerSdpConstraints.OfferToReceiveAudio),\r\n OfferToReceiveVideo: connection.session.video == 'two-way' || connection.session.screen == 'two-way' || (config.remoteSdp && config.remoteSdp.remotePeerSdpConstraints && config.remoteSdp.remotePeerSdpConstraints.OfferToReceiveAudio)\r\n });\r\n }\r\n\r\n var streamsToShare = {};\r\n peer.getLocalStreams().forEach(function(stream) {\r\n streamsToShare[stream.streamid] = {\r\n isAudio: !!stream.isAudio,\r\n isVideo: !!stream.isVideo,\r\n isScreen: !!stream.isScreen\r\n };\r\n });\r\n\r\n function oldCreateOfferOrAnswer(_method) {\r\n peer[_method](function(localSdp) {\r\n if (DetectRTC.browser.name !== 'Safari') {\r\n localSdp.sdp = connection.processSdp(localSdp.sdp);\r\n }\r\n peer.setLocalDescription(localSdp, function() {\r\n if (!connection.trickleIce) return;\r\n\r\n config.onLocalSdp({\r\n type: localSdp.type,\r\n sdp: localSdp.sdp,\r\n remotePeerSdpConstraints: config.remotePeerSdpConstraints || false,\r\n renegotiatingPeer: !!config.renegotiatingPeer || false,\r\n connectionDescription: self.connectionDescription,\r\n dontGetRemoteStream: !!config.dontGetRemoteStream,\r\n extra: connection ? connection.extra : {},\r\n streamsToShare: streamsToShare\r\n });\r\n\r\n connection.onSettingLocalDescription(self);\r\n }, function(error) {\r\n if (!!connection.enableLogs) {\r\n console.error('setLocalDescription-error', error);\r\n }\r\n });\r\n }, function(error) {\r\n if (!!connection.enableLogs) {\r\n console.error('sdp-' + _method + '-error', error);\r\n }\r\n }, defaults.sdpConstraints);\r\n }\r\n\r\n function createOfferOrAnswer(_method) {\r\n peer[_method](defaults.sdpConstraints).then(function(localSdp) {\r\n if (DetectRTC.browser.name !== 'Safari') {\r\n localSdp.sdp = connection.processSdp(localSdp.sdp);\r\n }\r\n peer.setLocalDescription(localSdp).then(function() {\r\n if (!connection.trickleIce) return;\r\n\r\n config.onLocalSdp({\r\n type: localSdp.type,\r\n sdp: localSdp.sdp,\r\n remotePeerSdpConstraints: config.remotePeerSdpConstraints || false,\r\n renegotiatingPeer: !!config.renegotiatingPeer || false,\r\n connectionDescription: self.connectionDescription,\r\n dontGetRemoteStream: !!config.dontGetRemoteStream,\r\n extra: connection ? connection.extra : {},\r\n streamsToShare: streamsToShare\r\n });\r\n\r\n connection.onSettingLocalDescription(self);\r\n }, function(error) {\r\n if (!connection.enableLogs) return;\r\n console.error('setLocalDescription error', error);\r\n });\r\n }, function(error) {\r\n if (!!connection.enableLogs) {\r\n console.error('sdp-error', error);\r\n }\r\n });\r\n }\r\n\r\n if (isOfferer) {\r\n createOfferOrAnswer('createOffer');\r\n }\r\n\r\n peer.nativeClose = peer.close;\r\n peer.close = function() {\r\n if (!peer) {\r\n return;\r\n }\r\n\r\n try {\r\n if (peer.nativeClose !== peer.close) {\r\n peer.nativeClose();\r\n }\r\n } catch (e) {}\r\n\r\n peer = null;\r\n self.peer = null;\r\n };\r\n\r\n this.peer = peer;\r\n }\r\n\r\n // CodecsHandler.js\r\n\r\n var CodecsHandler = (function() {\r\n function preferCodec(sdp, codecName) {\r\n var info = splitLines(sdp);\r\n\r\n if (!info.videoCodecNumbers) {\r\n return sdp;\r\n }\r\n\r\n if (codecName === 'vp8' && info.vp8LineNumber === info.videoCodecNumbers[0]) {\r\n return sdp;\r\n }\r\n\r\n if (codecName === 'vp9' && info.vp9LineNumber === info.videoCodecNumbers[0]) {\r\n return sdp;\r\n }\r\n\r\n if (codecName === 'h264' && info.h264LineNumber === info.videoCodecNumbers[0]) {\r\n return sdp;\r\n }\r\n\r\n sdp = preferCodecHelper(sdp, codecName, info);\r\n\r\n return sdp;\r\n }\r\n\r\n function preferCodecHelper(sdp, codec, info, ignore) {\r\n var preferCodecNumber = '';\r\n\r\n if (codec === 'vp8') {\r\n if (!info.vp8LineNumber) {\r\n return sdp;\r\n }\r\n preferCodecNumber = info.vp8LineNumber;\r\n }\r\n\r\n if (codec === 'vp9') {\r\n if (!info.vp9LineNumber) {\r\n return sdp;\r\n }\r\n preferCodecNumber = info.vp9LineNumber;\r\n }\r\n\r\n if (codec === 'h264') {\r\n if (!info.h264LineNumber) {\r\n return sdp;\r\n }\r\n\r\n preferCodecNumber = info.h264LineNumber;\r\n }\r\n\r\n var newLine = info.videoCodecNumbersOriginal.split('SAVPF')[0] + 'SAVPF ';\r\n\r\n var newOrder = [preferCodecNumber];\r\n\r\n if (ignore) {\r\n newOrder = [];\r\n }\r\n\r\n info.videoCodecNumbers.forEach(function(codecNumber) {\r\n if (codecNumber === preferCodecNumber) return;\r\n newOrder.push(codecNumber);\r\n });\r\n\r\n newLine += newOrder.join(' ');\r\n\r\n sdp = sdp.replace(info.videoCodecNumbersOriginal, newLine);\r\n return sdp;\r\n }\r\n\r\n function splitLines(sdp) {\r\n var info = {};\r\n sdp.split('\\n').forEach(function(line) {\r\n if (line.indexOf('m=video') === 0) {\r\n info.videoCodecNumbers = [];\r\n line.split('SAVPF')[1].split(' ').forEach(function(codecNumber) {\r\n codecNumber = codecNumber.trim();\r\n if (!codecNumber || !codecNumber.length) return;\r\n info.videoCodecNumbers.push(codecNumber);\r\n info.videoCodecNumbersOriginal = line;\r\n });\r\n }\r\n\r\n if (line.indexOf('VP8/90000') !== -1 && !info.vp8LineNumber) {\r\n info.vp8LineNumber = line.replace('a=rtpmap:', '').split(' ')[0];\r\n }\r\n\r\n if (line.indexOf('VP9/90000') !== -1 && !info.vp9LineNumber) {\r\n info.vp9LineNumber = line.replace('a=rtpmap:', '').split(' ')[0];\r\n }\r\n\r\n if (line.indexOf('H264/90000') !== -1 && !info.h264LineNumber) {\r\n info.h264LineNumber = line.replace('a=rtpmap:', '').split(' ')[0];\r\n }\r\n });\r\n\r\n return info;\r\n }\r\n\r\n function removeVPX(sdp) {\r\n var info = splitLines(sdp);\r\n\r\n // last parameter below means: ignore these codecs\r\n sdp = preferCodecHelper(sdp, 'vp9', info, true);\r\n sdp = preferCodecHelper(sdp, 'vp8', info, true);\r\n\r\n return sdp;\r\n }\r\n\r\n function disableNACK(sdp) {\r\n if (!sdp || typeof sdp !== 'string') {\r\n throw 'Invalid arguments.';\r\n }\r\n\r\n sdp = sdp.replace('a=rtcp-fb:126 nack\\r\\n', '');\r\n sdp = sdp.replace('a=rtcp-fb:126 nack pli\\r\\n', 'a=rtcp-fb:126 pli\\r\\n');\r\n sdp = sdp.replace('a=rtcp-fb:97 nack\\r\\n', '');\r\n sdp = sdp.replace('a=rtcp-fb:97 nack pli\\r\\n', 'a=rtcp-fb:97 pli\\r\\n');\r\n\r\n return sdp;\r\n }\r\n\r\n function prioritize(codecMimeType, peer) {\r\n if (!peer || !peer.getSenders || !peer.getSenders().length) {\r\n return;\r\n }\r\n\r\n if (!codecMimeType || typeof codecMimeType !== 'string') {\r\n throw 'Invalid arguments.';\r\n }\r\n\r\n peer.getSenders().forEach(function(sender) {\r\n var params = sender.getParameters();\r\n for (var i = 0; i < params.codecs.length; i++) {\r\n if (params.codecs[i].mimeType == codecMimeType) {\r\n params.codecs.unshift(params.codecs.splice(i, 1));\r\n break;\r\n }\r\n }\r\n sender.setParameters(params);\r\n });\r\n }\r\n\r\n function removeNonG722(sdp) {\r\n return sdp.replace(/m=audio ([0-9]+) RTP\\/SAVPF ([0-9 ]*)/g, 'm=audio $1 RTP\\/SAVPF 9');\r\n }\r\n\r\n function setBAS(sdp, bandwidth, isScreen) {\r\n if (!bandwidth) {\r\n return sdp;\r\n }\r\n\r\n if (typeof isFirefox !== 'undefined' && isFirefox) {\r\n return sdp;\r\n }\r\n\r\n if (isScreen) {\r\n if (!bandwidth.screen) {\r\n console.warn('It seems that you are not using bandwidth for screen. Screen sharing is expected to fail.');\r\n } else if (bandwidth.screen < 300) {\r\n console.warn('It seems that you are using wrong bandwidth value for screen. Screen sharing is expected to fail.');\r\n }\r\n }\r\n\r\n // if screen; must use at least 300kbs\r\n if (bandwidth.screen && isScreen) {\r\n sdp = sdp.replace(/b=AS([^\\r\\n]+\\r\\n)/g, '');\r\n sdp = sdp.replace(/a=mid:video\\r\\n/g, 'a=mid:video\\r\\nb=AS:' + bandwidth.screen + '\\r\\n');\r\n }\r\n\r\n // remove existing bandwidth lines\r\n if (bandwidth.audio || bandwidth.video) {\r\n sdp = sdp.replace(/b=AS([^\\r\\n]+\\r\\n)/g, '');\r\n }\r\n\r\n if (bandwidth.audio) {\r\n sdp = sdp.replace(/a=mid:audio\\r\\n/g, 'a=mid:audio\\r\\nb=AS:' + bandwidth.audio + '\\r\\n');\r\n }\r\n\r\n if (bandwidth.screen) {\r\n sdp = sdp.replace(/a=mid:video\\r\\n/g, 'a=mid:video\\r\\nb=AS:' + bandwidth.screen + '\\r\\n');\r\n } else if (bandwidth.video) {\r\n sdp = sdp.replace(/a=mid:video\\r\\n/g, 'a=mid:video\\r\\nb=AS:' + bandwidth.video + '\\r\\n');\r\n }\r\n\r\n return sdp;\r\n }\r\n\r\n // Find the line in sdpLines that starts with |prefix|, and, if specified,\r\n // contains |substr| (case-insensitive search).\r\n function findLine(sdpLines, prefix, substr) {\r\n return findLineInRange(sdpLines, 0, -1, prefix, substr);\r\n }\r\n\r\n // Find the line in sdpLines[startLine...endLine - 1] that starts with |prefix|\r\n // and, if specified, contains |substr| (case-insensitive search).\r\n function findLineInRange(sdpLines, startLine, endLine, prefix, substr) {\r\n var realEndLine = endLine !== -1 ? endLine : sdpLines.length;\r\n for (var i = startLine; i < realEndLine; ++i) {\r\n if (sdpLines[i].indexOf(prefix) === 0) {\r\n if (!substr ||\r\n sdpLines[i].toLowerCase().indexOf(substr.toLowerCase()) !== -1) {\r\n return i;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n // Gets the codec payload type from an a=rtpmap:X line.\r\n function getCodecPayloadType(sdpLine) {\r\n var pattern = new RegExp('a=rtpmap:(\\\\d+) \\\\w+\\\\/\\\\d+');\r\n var result = sdpLine.match(pattern);\r\n return (result && result.length === 2) ? result[1] : null;\r\n }\r\n\r\n function setVideoBitrates(sdp, params) {\r\n params = params || {};\r\n var xgoogle_min_bitrate = params.min;\r\n var xgoogle_max_bitrate = params.max;\r\n\r\n var sdpLines = sdp.split('\\r\\n');\r\n\r\n // VP8\r\n var vp8Index = findLine(sdpLines, 'a=rtpmap', 'VP8/90000');\r\n var vp8Payload;\r\n if (vp8Index) {\r\n vp8Payload = getCodecPayloadType(sdpLines[vp8Index]);\r\n }\r\n\r\n if (!vp8Payload) {\r\n return sdp;\r\n }\r\n\r\n var rtxIndex = findLine(sdpLines, 'a=rtpmap', 'rtx/90000');\r\n var rtxPayload;\r\n if (rtxIndex) {\r\n rtxPayload = getCodecPayloadType(sdpLines[rtxIndex]);\r\n }\r\n\r\n if (!rtxIndex) {\r\n return sdp;\r\n }\r\n\r\n var rtxFmtpLineIndex = findLine(sdpLines, 'a=fmtp:' + rtxPayload.toString());\r\n if (rtxFmtpLineIndex !== null) {\r\n var appendrtxNext = '\\r\\n';\r\n appendrtxNext += 'a=fmtp:' + vp8Payload + ' x-google-min-bitrate=' + (xgoogle_min_bitrate || '228') + '; x-google-max-bitrate=' + (xgoogle_max_bitrate || '228');\r\n sdpLines[rtxFmtpLineIndex] = sdpLines[rtxFmtpLineIndex].concat(appendrtxNext);\r\n sdp = sdpLines.join('\\r\\n');\r\n }\r\n\r\n return sdp;\r\n }\r\n\r\n function setOpusAttributes(sdp, params) {\r\n params = params || {};\r\n\r\n var sdpLines = sdp.split('\\r\\n');\r\n\r\n // Opus\r\n var opusIndex = findLine(sdpLines, 'a=rtpmap', 'opus/48000');\r\n var opusPayload;\r\n if (opusIndex) {\r\n opusPayload = getCodecPayloadType(sdpLines[opusIndex]);\r\n }\r\n\r\n if (!opusPayload) {\r\n return sdp;\r\n }\r\n\r\n var opusFmtpLineIndex = findLine(sdpLines, 'a=fmtp:' + opusPayload.toString());\r\n if (opusFmtpLineIndex === null) {\r\n return sdp;\r\n }\r\n\r\n var appendOpusNext = '';\r\n appendOpusNext += '; stereo=' + (typeof params.stereo != 'undefined' ? params.stereo : '1');\r\n appendOpusNext += '; sprop-stereo=' + (typeof params['sprop-stereo'] != 'undefined' ? params['sprop-stereo'] : '1');\r\n\r\n if (typeof params.maxaveragebitrate != 'undefined') {\r\n appendOpusNext += '; maxaveragebitrate=' + (params.maxaveragebitrate || 128 * 1024 * 8);\r\n }\r\n\r\n if (typeof params.maxplaybackrate != 'undefined') {\r\n appendOpusNext += '; maxplaybackrate=' + (params.maxplaybackrate || 128 * 1024 * 8);\r\n }\r\n\r\n if (typeof params.cbr != 'undefined') {\r\n appendOpusNext += '; cbr=' + (typeof params.cbr != 'undefined' ? params.cbr : '1');\r\n }\r\n\r\n if (typeof params.useinbandfec != 'undefined') {\r\n appendOpusNext += '; useinbandfec=' + params.useinbandfec;\r\n }\r\n\r\n if (typeof params.usedtx != 'undefined') {\r\n appendOpusNext += '; usedtx=' + params.usedtx;\r\n }\r\n\r\n if (typeof params.maxptime != 'undefined') {\r\n appendOpusNext += '\\r\\na=maxptime:' + params.maxptime;\r\n }\r\n\r\n sdpLines[opusFmtpLineIndex] = sdpLines[opusFmtpLineIndex].concat(appendOpusNext);\r\n\r\n sdp = sdpLines.join('\\r\\n');\r\n return sdp;\r\n }\r\n\r\n // forceStereoAudio => via webrtcexample.com\r\n // requires getUserMedia => echoCancellation:false\r\n function forceStereoAudio(sdp) {\r\n var sdpLines = sdp.split('\\r\\n');\r\n var fmtpLineIndex = null;\r\n for (var i = 0; i < sdpLines.length; i++) {\r\n if (sdpLines[i].search('opus/48000') !== -1) {\r\n var opusPayload = extractSdp(sdpLines[i], /:(\\d+) opus\\/48000/i);\r\n break;\r\n }\r\n }\r\n for (var i = 0; i < sdpLines.length; i++) {\r\n if (sdpLines[i].search('a=fmtp') !== -1) {\r\n var payload = extractSdp(sdpLines[i], /a=fmtp:(\\d+)/);\r\n if (payload === opusPayload) {\r\n fmtpLineIndex = i;\r\n break;\r\n }\r\n }\r\n }\r\n if (fmtpLineIndex === null) return sdp;\r\n sdpLines[fmtpLineIndex] = sdpLines[fmtpLineIndex].concat('; stereo=1; sprop-stereo=1');\r\n sdp = sdpLines.join('\\r\\n');\r\n return sdp;\r\n }\r\n\r\n return {\r\n removeVPX: removeVPX,\r\n disableNACK: disableNACK,\r\n prioritize: prioritize,\r\n removeNonG722: removeNonG722,\r\n setApplicationSpecificBandwidth: function(sdp, bandwidth, isScreen) {\r\n return setBAS(sdp, bandwidth, isScreen);\r\n },\r\n setVideoBitrates: function(sdp, params) {\r\n return setVideoBitrates(sdp, params);\r\n },\r\n setOpusAttributes: function(sdp, params) {\r\n return setOpusAttributes(sdp, params);\r\n },\r\n preferVP9: function(sdp) {\r\n return preferCodec(sdp, 'vp9');\r\n },\r\n preferCodec: preferCodec,\r\n forceStereoAudio: forceStereoAudio\r\n };\r\n })();\r\n\r\n // backward compatibility\r\n window.BandwidthHandler = CodecsHandler;\r\n\r\n // OnIceCandidateHandler.js\r\n\r\n var OnIceCandidateHandler = (function() {\r\n function processCandidates(connection, icePair) {\r\n var candidate = icePair.candidate;\r\n\r\n var iceRestrictions = connection.candidates;\r\n var stun = iceRestrictions.stun;\r\n var turn = iceRestrictions.turn;\r\n\r\n if (!isNull(iceRestrictions.reflexive)) {\r\n stun = iceRestrictions.reflexive;\r\n }\r\n\r\n if (!isNull(iceRestrictions.relay)) {\r\n turn = iceRestrictions.relay;\r\n }\r\n\r\n if (!iceRestrictions.host && !!candidate.match(/typ host/g)) {\r\n return;\r\n }\r\n\r\n if (!turn && !!candidate.match(/typ relay/g)) {\r\n return;\r\n }\r\n\r\n if (!stun && !!candidate.match(/typ srflx/g)) {\r\n return;\r\n }\r\n\r\n var protocol = connection.iceProtocols;\r\n\r\n if (!protocol.udp && !!candidate.match(/ udp /g)) {\r\n return;\r\n }\r\n\r\n if (!protocol.tcp && !!candidate.match(/ tcp /g)) {\r\n return;\r\n }\r\n\r\n if (connection.enableLogs) {\r\n console.debug('Your candidate pairs:', candidate);\r\n }\r\n\r\n return {\r\n candidate: candidate,\r\n sdpMid: icePair.sdpMid,\r\n sdpMLineIndex: icePair.sdpMLineIndex\r\n };\r\n }\r\n\r\n return {\r\n processCandidates: processCandidates\r\n };\r\n })();\r\n\r\n // IceServersHandler.js\r\n\r\n var IceServersHandler = (function() {\r\n function getIceServers(connection) {\r\n // resiprocate: 3344+4433\r\n // pions: 7575\r\n var iceServers = [{\r\n 'urls': [\r\n 'stun:stun.l.google.com:19302',\r\n 'stun:stun1.l.google.com:19302',\r\n 'stun:stun2.l.google.com:19302',\r\n 'stun:stun.l.google.com:19302?transport=udp',\r\n ]\r\n }];\r\n\r\n return iceServers;\r\n }\r\n\r\n return {\r\n getIceServers: getIceServers\r\n };\r\n })();\r\n\r\n // getUserMediaHandler.js\r\n\r\n function setStreamType(constraints, stream) {\r\n if (constraints.mandatory && constraints.mandatory.chromeMediaSource) {\r\n stream.isScreen = true;\r\n } else if (constraints.mozMediaSource || constraints.mediaSource) {\r\n stream.isScreen = true;\r\n } else if (constraints.video) {\r\n stream.isVideo = true;\r\n } else if (constraints.audio) {\r\n stream.isAudio = true;\r\n }\r\n }\r\n\r\n // allow users to manage this object (to support re-capturing of screen/etc.)\r\n window.currentUserMediaRequest = {\r\n streams: [],\r\n mutex: false,\r\n queueRequests: [],\r\n remove: function(idInstance) {\r\n this.mutex = false;\r\n\r\n var stream = this.streams[idInstance];\r\n if (!stream) {\r\n return;\r\n }\r\n\r\n stream = stream.stream;\r\n\r\n var options = stream.currentUserMediaRequestOptions;\r\n\r\n if (this.queueRequests.indexOf(options)) {\r\n delete this.queueRequests[this.queueRequests.indexOf(options)];\r\n this.queueRequests = removeNullEntries(this.queueRequests);\r\n }\r\n\r\n this.streams[idInstance].stream = null;\r\n delete this.streams[idInstance];\r\n }\r\n };\r\n\r\n function getUserMediaHandler(options) {\r\n if (currentUserMediaRequest.mutex === true) {\r\n currentUserMediaRequest.queueRequests.push(options);\r\n return;\r\n }\r\n currentUserMediaRequest.mutex = true;\r\n\r\n // easy way to match\r\n var idInstance = JSON.stringify(options.localMediaConstraints);\r\n\r\n function streaming(stream, returnBack) {\r\n setStreamType(options.localMediaConstraints, stream);\r\n\r\n var streamEndedEvent = 'ended';\r\n\r\n if ('oninactive' in stream) {\r\n streamEndedEvent = 'inactive';\r\n }\r\n stream.addEventListener(streamEndedEvent, function() {\r\n delete currentUserMediaRequest.streams[idInstance];\r\n\r\n currentUserMediaRequest.mutex = false;\r\n if (currentUserMediaRequest.queueRequests.indexOf(options)) {\r\n delete currentUserMediaRequest.queueRequests[currentUserMediaRequest.queueRequests.indexOf(options)];\r\n currentUserMediaRequest.queueRequests = removeNullEntries(currentUserMediaRequest.queueRequests);\r\n }\r\n }, false);\r\n\r\n currentUserMediaRequest.streams[idInstance] = {\r\n stream: stream\r\n };\r\n currentUserMediaRequest.mutex = false;\r\n\r\n if (currentUserMediaRequest.queueRequests.length) {\r\n getUserMediaHandler(currentUserMediaRequest.queueRequests.shift());\r\n }\r\n\r\n // callback\r\n options.onGettingLocalMedia(stream, returnBack);\r\n }\r\n\r\n if (currentUserMediaRequest.streams[idInstance]) {\r\n streaming(currentUserMediaRequest.streams[idInstance].stream, true);\r\n } else {\r\n var isBlackBerry = !!(/BB10|BlackBerry/i.test(navigator.userAgent || ''));\r\n if (isBlackBerry || typeof navigator.mediaDevices === 'undefined' || typeof navigator.mediaDevices.getUserMedia !== 'function') {\r\n navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia;\r\n navigator.getUserMedia(options.localMediaConstraints, function(stream) {\r\n stream.streamid = stream.streamid || stream.id || getRandomString();\r\n stream.idInstance = idInstance;\r\n streaming(stream);\r\n }, function(error) {\r\n options.onLocalMediaError(error, options.localMediaConstraints);\r\n });\r\n return;\r\n }\r\n\r\n if (typeof navigator.mediaDevices === 'undefined') {\r\n navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia;\r\n var getUserMediaSuccess = function() {};\r\n var getUserMediaFailure = function() {};\r\n\r\n var getUserMediaStream, getUserMediaError;\r\n navigator.mediaDevices = {\r\n getUserMedia: function(hints) {\r\n navigator.getUserMedia(hints, function(getUserMediaSuccess) {\r\n getUserMediaSuccess(stream);\r\n getUserMediaStream = stream;\r\n }, function(error) {\r\n getUserMediaFailure(error);\r\n getUserMediaError = error;\r\n });\r\n\r\n return {\r\n then: function(successCB) {\r\n if (getUserMediaStream) {\r\n successCB(getUserMediaStream);\r\n return;\r\n }\r\n\r\n getUserMediaSuccess = successCB;\r\n\r\n return {\r\n then: function(failureCB) {\r\n if (getUserMediaError) {\r\n failureCB(getUserMediaError);\r\n return;\r\n }\r\n\r\n getUserMediaFailure = failureCB;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n };\r\n }\r\n\r\n if (options.localMediaConstraints.isScreen === true) {\r\n if (navigator.mediaDevices.getDisplayMedia) {\r\n navigator.mediaDevices.getDisplayMedia(options.localMediaConstraints).then(function(stream) {\r\n stream.streamid = stream.streamid || stream.id || getRandomString();\r\n stream.idInstance = idInstance;\r\n\r\n streaming(stream);\r\n }).catch(function(error) {\r\n options.onLocalMediaError(error, options.localMediaConstraints);\r\n });\r\n } else if (navigator.getDisplayMedia) {\r\n navigator.getDisplayMedia(options.localMediaConstraints).then(function(stream) {\r\n stream.streamid = stream.streamid || stream.id || getRandomString();\r\n stream.idInstance = idInstance;\r\n\r\n streaming(stream);\r\n }).catch(function(error) {\r\n options.onLocalMediaError(error, options.localMediaConstraints);\r\n });\r\n } else {\r\n throw new Error('getDisplayMedia API is not availabe in this browser.');\r\n }\r\n return;\r\n }\r\n\r\n navigator.mediaDevices.getUserMedia(options.localMediaConstraints).then(function(stream) {\r\n stream.streamid = stream.streamid || stream.id || getRandomString();\r\n stream.idInstance = idInstance;\r\n\r\n streaming(stream);\r\n }).catch(function(error) {\r\n options.onLocalMediaError(error, options.localMediaConstraints);\r\n });\r\n }\r\n }\r\n\r\n // StreamsHandler.js\r\n\r\n var StreamsHandler = (function() {\r\n function handleType(type) {\r\n if (!type) {\r\n return;\r\n }\r\n\r\n if (typeof type === 'string' || typeof type === 'undefined') {\r\n return type;\r\n }\r\n\r\n if (type.audio && type.video) {\r\n return null;\r\n }\r\n\r\n if (type.audio) {\r\n return 'audio';\r\n }\r\n\r\n if (type.video) {\r\n return 'video';\r\n }\r\n\r\n return;\r\n }\r\n\r\n function setHandlers(stream, syncAction, connection) {\r\n if (!stream || !stream.addEventListener) return;\r\n\r\n if (typeof syncAction == 'undefined' || syncAction == true) {\r\n var streamEndedEvent = 'ended';\r\n\r\n if ('oninactive' in stream) {\r\n streamEndedEvent = 'inactive';\r\n }\r\n\r\n stream.addEventListener(streamEndedEvent, function() {\r\n StreamsHandler.onSyncNeeded(this.streamid, streamEndedEvent);\r\n }, false);\r\n }\r\n\r\n stream.mute = function(type, isSyncAction) {\r\n type = handleType(type);\r\n\r\n if (typeof isSyncAction !== 'undefined') {\r\n syncAction = isSyncAction;\r\n }\r\n\r\n if (typeof type == 'undefined' || type == 'audio') {\r\n getTracks(stream, 'audio').forEach(function(track) {\r\n track.enabled = false;\r\n connection.streamEvents[stream.streamid].isAudioMuted = true;\r\n });\r\n }\r\n\r\n if (typeof type == 'undefined' || type == 'video') {\r\n getTracks(stream, 'video').forEach(function(track) {\r\n track.enabled = false;\r\n });\r\n }\r\n\r\n if (typeof syncAction == 'undefined' || syncAction == true) {\r\n StreamsHandler.onSyncNeeded(stream.streamid, 'mute', type);\r\n }\r\n\r\n connection.streamEvents[stream.streamid].muteType = type || 'both';\r\n\r\n fireEvent(stream, 'mute', type);\r\n };\r\n\r\n stream.unmute = function(type, isSyncAction) {\r\n type = handleType(type);\r\n\r\n if (typeof isSyncAction !== 'undefined') {\r\n syncAction = isSyncAction;\r\n }\r\n\r\n graduallyIncreaseVolume();\r\n\r\n if (typeof type == 'undefined' || type == 'audio') {\r\n getTracks(stream, 'audio').forEach(function(track) {\r\n track.enabled = true;\r\n connection.streamEvents[stream.streamid].isAudioMuted = false;\r\n });\r\n }\r\n\r\n if (typeof type == 'undefined' || type == 'video') {\r\n getTracks(stream, 'video').forEach(function(track) {\r\n track.enabled = true;\r\n });\r\n\r\n // make sure that video unmute doesn't affects audio\r\n if (typeof type !== 'undefined' && type == 'video' && connection.streamEvents[stream.streamid].isAudioMuted) {\r\n (function looper(times) {\r\n if (!times) {\r\n times = 0;\r\n }\r\n\r\n times++;\r\n\r\n // check until five-seconds\r\n if (times < 100 && connection.streamEvents[stream.streamid].isAudioMuted) {\r\n stream.mute('audio');\r\n\r\n setTimeout(function() {\r\n looper(times);\r\n }, 50);\r\n }\r\n })();\r\n }\r\n }\r\n\r\n if (typeof syncAction == 'undefined' || syncAction == true) {\r\n StreamsHandler.onSyncNeeded(stream.streamid, 'unmute', type);\r\n }\r\n\r\n connection.streamEvents[stream.streamid].unmuteType = type || 'both';\r\n\r\n fireEvent(stream, 'unmute', type);\r\n };\r\n\r\n function graduallyIncreaseVolume() {\r\n if (!connection.streamEvents[stream.streamid].mediaElement) {\r\n return;\r\n }\r\n\r\n var mediaElement = connection.streamEvents[stream.streamid].mediaElement;\r\n mediaElement.volume = 0;\r\n afterEach(200, 5, function() {\r\n try {\r\n mediaElement.volume += .20;\r\n } catch (e) {\r\n mediaElement.volume = 1;\r\n }\r\n });\r\n }\r\n }\r\n\r\n function afterEach(setTimeoutInteval, numberOfTimes, callback, startedTimes) {\r\n startedTimes = (startedTimes || 0) + 1;\r\n if (startedTimes >= numberOfTimes) return;\r\n\r\n setTimeout(function() {\r\n callback();\r\n afterEach(setTimeoutInteval, numberOfTimes, callback, startedTimes);\r\n }, setTimeoutInteval);\r\n }\r\n\r\n return {\r\n setHandlers: setHandlers,\r\n onSyncNeeded: function(streamid, action, type) {}\r\n };\r\n })();\r\n\r\n // TextReceiver.js & TextSender.js\r\n\r\n function TextReceiver(connection) {\r\n var content = {};\r\n\r\n function receive(data, userid, extra) {\r\n // uuid is used to uniquely identify sending instance\r\n var uuid = data.uuid;\r\n if (!content[uuid]) {\r\n content[uuid] = [];\r\n }\r\n\r\n content[uuid].push(data.message);\r\n\r\n if (data.last) {\r\n var message = content[uuid].join('');\r\n if (data.isobject) {\r\n message = JSON.parse(message);\r\n }\r\n\r\n // latency detection\r\n var receivingTime = new Date().getTime();\r\n var latency = receivingTime - data.sendingTime;\r\n\r\n var e = {\r\n data: message,\r\n userid: userid,\r\n extra: extra,\r\n latency: latency\r\n };\r\n\r\n if (connection.autoTranslateText) {\r\n e.original = e.data;\r\n connection.Translator.TranslateText(e.data, function(translatedText) {\r\n e.data = translatedText;\r\n connection.onmessage(e);\r\n });\r\n } else {\r\n connection.onmessage(e);\r\n }\r\n\r\n delete content[uuid];\r\n }\r\n }\r\n\r\n return {\r\n receive: receive\r\n };\r\n }\r\n\r\n // TextSender.js\r\n var TextSender = {\r\n send: function(config) {\r\n var connection = config.connection;\r\n\r\n var channel = config.channel,\r\n remoteUserId = config.remoteUserId,\r\n initialText = config.text,\r\n packetSize = connection.chunkSize || 1000,\r\n textToTransfer = '',\r\n isobject = false;\r\n\r\n if (!isString(initialText)) {\r\n isobject = true;\r\n initialText = JSON.stringify(initialText);\r\n }\r\n\r\n // uuid is used to uniquely identify sending instance\r\n var uuid = getRandomString();\r\n var sendingTime = new Date().getTime();\r\n\r\n sendText(initialText);\r\n\r\n function sendText(textMessage, text) {\r\n var data = {\r\n type: 'text',\r\n uuid: uuid,\r\n sendingTime: sendingTime\r\n };\r\n\r\n if (textMessage) {\r\n text = textMessage;\r\n data.packets = parseInt(text.length / packetSize);\r\n }\r\n\r\n if (text.length > packetSize) {\r\n data.message = text.slice(0, packetSize);\r\n } else {\r\n data.message = text;\r\n data.last = true;\r\n data.isobject = isobject;\r\n }\r\n\r\n channel.send(data, remoteUserId);\r\n\r\n textToTransfer = text.slice(data.message.length);\r\n\r\n if (textToTransfer.length) {\r\n setTimeout(function() {\r\n sendText(null, textToTransfer);\r\n }, connection.chunkInterval || 100);\r\n }\r\n }\r\n }\r\n };\r\n\r\n // FileProgressBarHandler.js\r\n\r\n var FileProgressBarHandler = (function() {\r\n function handle(connection) {\r\n var progressHelper = {};\r\n\r\n // www.RTCMultiConnection.org/docs/onFileStart/\r\n connection.onFileStart = function(file) {\r\n var div = document.createElement('div');\r\n div.title = file.name;\r\n div.innerHTML = ' ';\r\n\r\n if (file.remoteUserId) {\r\n div.innerHTML += ' (Sharing with:' + file.remoteUserId + ')';\r\n }\r\n\r\n if (!connection.filesContainer) {\r\n connection.filesContainer = document.body || document.documentElement;\r\n }\r\n\r\n connection.filesContainer.insertBefore(div, connection.filesContainer.firstChild);\r\n\r\n if (!file.remoteUserId) {\r\n progressHelper[file.uuid] = {\r\n div: div,\r\n progress: div.querySelector('progress'),\r\n label: div.querySelector('label')\r\n };\r\n progressHelper[file.uuid].progress.max = file.maxChunks;\r\n return;\r\n }\r\n\r\n if (!progressHelper[file.uuid]) {\r\n progressHelper[file.uuid] = {};\r\n }\r\n\r\n progressHelper[file.uuid][file.remoteUserId] = {\r\n div: div,\r\n progress: div.querySelector('progress'),\r\n label: div.querySelector('label')\r\n };\r\n progressHelper[file.uuid][file.remoteUserId].progress.max = file.maxChunks;\r\n };\r\n\r\n // www.RTCMultiConnection.org/docs/onFileProgress/\r\n connection.onFileProgress = function(chunk) {\r\n var helper = progressHelper[chunk.uuid];\r\n if (!helper) {\r\n return;\r\n }\r\n if (chunk.remoteUserId) {\r\n helper = progressHelper[chunk.uuid][chunk.remoteUserId];\r\n if (!helper) {\r\n return;\r\n }\r\n }\r\n\r\n helper.progress.value = chunk.currentPosition || chunk.maxChunks || helper.progress.max;\r\n updateLabel(helper.progress, helper.label);\r\n };\r\n\r\n // www.RTCMultiConnection.org/docs/onFileEnd/\r\n connection.onFileEnd = function(file) {\r\n var helper = progressHelper[file.uuid];\r\n if (!helper) {\r\n console.error('No such progress-helper element exist.', file);\r\n return;\r\n }\r\n\r\n if (file.remoteUserId) {\r\n helper = progressHelper[file.uuid][file.remoteUserId];\r\n if (!helper) {\r\n return;\r\n }\r\n }\r\n\r\n var div = helper.div;\r\n if (file.type.indexOf('image') != -1) {\r\n div.innerHTML = 'Download ' + file.name + '
';\r\n } else {\r\n div.innerHTML = 'Download ' + file.name + '
';\r\n }\r\n };\r\n\r\n function updateLabel(progress, label) {\r\n if (progress.position === -1) {\r\n return;\r\n }\r\n\r\n var position = +progress.position.toFixed(2).split('.')[1] || 100;\r\n label.innerHTML = position + '%';\r\n }\r\n }\r\n\r\n return {\r\n handle: handle\r\n };\r\n })();\r\n\r\n // TranslationHandler.js\r\n\r\n var TranslationHandler = (function() {\r\n function handle(connection) {\r\n connection.autoTranslateText = false;\r\n connection.language = 'en';\r\n connection.googKey = 'AIzaSyCgB5hmFY74WYB-EoWkhr9cAGr6TiTHrEE';\r\n\r\n // www.RTCMultiConnection.org/docs/Translator/\r\n connection.Translator = {\r\n TranslateText: function(text, callback) {\r\n // if(location.protocol === 'https:') return callback(text);\r\n\r\n var newScript = document.createElement('script');\r\n newScript.type = 'text/javascript';\r\n\r\n var sourceText = encodeURIComponent(text); // escape\r\n\r\n var randomNumber = 'method' + connection.token();\r\n window[randomNumber] = function(response) {\r\n if (response.data && response.data.translations[0] && callback) {\r\n callback(response.data.translations[0].translatedText);\r\n return;\r\n }\r\n\r\n if (response.error && response.error.message === 'Daily Limit Exceeded') {\r\n console.error('Text translation failed. Error message: \"Daily Limit Exceeded.\"');\r\n return;\r\n }\r\n\r\n if (response.error) {\r\n console.error(response.error.message);\r\n return;\r\n }\r\n\r\n console.error(response);\r\n };\r\n\r\n var source = 'https://www.googleapis.com/language/translate/v2?key=' + connection.googKey + '&target=' + (connection.language || 'en-US') + '&callback=window.' + randomNumber + '&q=' + sourceText;\r\n newScript.src = source;\r\n document.getElementsByTagName('head')[0].appendChild(newScript);\r\n },\r\n getListOfLanguages: function(callback) {\r\n var xhr = new XMLHttpRequest();\r\n xhr.onreadystatechange = function() {\r\n if (xhr.readyState == XMLHttpRequest.DONE) {\r\n var response = JSON.parse(xhr.responseText);\r\n\r\n if (response && response.data && response.data.languages) {\r\n callback(response.data.languages);\r\n return;\r\n }\r\n\r\n if (response.error && response.error.message === 'Daily Limit Exceeded') {\r\n console.error('Text translation failed. Error message: \"Daily Limit Exceeded.\"');\r\n return;\r\n }\r\n\r\n if (response.error) {\r\n console.error(response.error.message);\r\n return;\r\n }\r\n\r\n console.error(response);\r\n }\r\n }\r\n var url = 'https://www.googleapis.com/language/translate/v2/languages?key=' + connection.googKey + '&target=en';\r\n xhr.open('GET', url, true);\r\n xhr.send(null);\r\n }\r\n };\r\n }\r\n\r\n return {\r\n handle: handle\r\n };\r\n })();\r\n\r\n // _____________________\r\n // RTCMultiConnection.js\r\n\r\n (function(connection) {\r\n forceOptions = forceOptions || {\r\n useDefaultDevices: true\r\n };\r\n\r\n connection.channel = connection.sessionid = (roomid || location.href.replace(/\\/|:|#|\\?|\\$|\\^|%|\\.|`|~|!|\\+|@|\\[|\\||]|\\|*. /g, '').split('\\n').join('').split('\\r').join('')) + '';\r\n\r\n var mPeer = new MultiPeers(connection);\r\n\r\n var preventDuplicateOnStreamEvents = {};\r\n mPeer.onGettingLocalMedia = function(stream, callback) {\r\n callback = callback || function() {};\r\n\r\n if (preventDuplicateOnStreamEvents[stream.streamid]) {\r\n callback();\r\n return;\r\n }\r\n preventDuplicateOnStreamEvents[stream.streamid] = true;\r\n\r\n try {\r\n stream.type = 'local';\r\n } catch (e) {}\r\n\r\n connection.setStreamEndHandler(stream);\r\n\r\n getRMCMediaElement(stream, function(mediaElement) {\r\n mediaElement.id = stream.streamid;\r\n mediaElement.muted = true;\r\n mediaElement.volume = 0;\r\n\r\n if (connection.attachStreams.indexOf(stream) === -1) {\r\n connection.attachStreams.push(stream);\r\n }\r\n\r\n if (typeof StreamsHandler !== 'undefined') {\r\n StreamsHandler.setHandlers(stream, true, connection);\r\n }\r\n\r\n connection.streamEvents[stream.streamid] = {\r\n stream: stream,\r\n type: 'local',\r\n mediaElement: mediaElement,\r\n userid: connection.userid,\r\n extra: connection.extra,\r\n streamid: stream.streamid,\r\n isAudioMuted: true\r\n };\r\n\r\n try {\r\n setHarkEvents(connection, connection.streamEvents[stream.streamid]);\r\n setMuteHandlers(connection, connection.streamEvents[stream.streamid]);\r\n\r\n connection.onstream(connection.streamEvents[stream.streamid]);\r\n } catch (e) {\r\n //\r\n }\r\n\r\n callback();\r\n }, connection);\r\n };\r\n\r\n mPeer.onGettingRemoteMedia = function(stream, remoteUserId) {\r\n try {\r\n stream.type = 'remote';\r\n } catch (e) {}\r\n\r\n connection.setStreamEndHandler(stream, 'remote-stream');\r\n\r\n getRMCMediaElement(stream, function(mediaElement) {\r\n mediaElement.id = stream.streamid;\r\n\r\n if (typeof StreamsHandler !== 'undefined') {\r\n StreamsHandler.setHandlers(stream, false, connection);\r\n }\r\n\r\n connection.streamEvents[stream.streamid] = {\r\n stream: stream,\r\n type: 'remote',\r\n userid: remoteUserId,\r\n extra: connection.peers[remoteUserId] ? connection.peers[remoteUserId].extra : {},\r\n mediaElement: mediaElement,\r\n streamid: stream.streamid\r\n };\r\n\r\n setMuteHandlers(connection, connection.streamEvents[stream.streamid]);\r\n\r\n connection.onstream(connection.streamEvents[stream.streamid]);\r\n }, connection);\r\n };\r\n\r\n mPeer.onRemovingRemoteMedia = function(stream, remoteUserId) {\r\n var streamEvent = connection.streamEvents[stream.streamid];\r\n if (!streamEvent) {\r\n streamEvent = {\r\n stream: stream,\r\n type: 'remote',\r\n userid: remoteUserId,\r\n extra: connection.peers[remoteUserId] ? connection.peers[remoteUserId].extra : {},\r\n streamid: stream.streamid,\r\n mediaElement: connection.streamEvents[stream.streamid] ? connection.streamEvents[stream.streamid].mediaElement : null\r\n };\r\n }\r\n\r\n if (connection.peersBackup[streamEvent.userid]) {\r\n streamEvent.extra = connection.peersBackup[streamEvent.userid].extra;\r\n }\r\n\r\n connection.onstreamended(streamEvent);\r\n\r\n delete connection.streamEvents[stream.streamid];\r\n };\r\n\r\n mPeer.onNegotiationNeeded = function(message, remoteUserId, callback) {\r\n callback = callback || function() {};\r\n\r\n remoteUserId = remoteUserId || message.remoteUserId;\r\n message = message || '';\r\n\r\n // usually a message looks like this\r\n var messageToDeliver = {\r\n remoteUserId: remoteUserId,\r\n message: message,\r\n sender: connection.userid\r\n };\r\n\r\n if (message.remoteUserId && message.message && message.sender) {\r\n // if a code is manually passing required data\r\n messageToDeliver = message;\r\n }\r\n\r\n connectSocket(function() {\r\n connection.socket.emit(connection.socketMessageEvent, messageToDeliver, callback);\r\n });\r\n };\r\n\r\n function onUserLeft(remoteUserId) {\r\n connection.deletePeer(remoteUserId);\r\n }\r\n\r\n mPeer.onUserLeft = onUserLeft;\r\n mPeer.disconnectWith = function(remoteUserId, callback) {\r\n if (connection.socket) {\r\n connection.socket.emit('disconnect-with', remoteUserId, callback || function() {});\r\n }\r\n\r\n connection.deletePeer(remoteUserId);\r\n };\r\n\r\n connection.socketOptions = {\r\n // 'force new connection': true, // For SocketIO version < 1.0\r\n // 'forceNew': true, // For SocketIO version >= 1.0\r\n 'transport': 'polling' // fixing transport:unknown issues\r\n };\r\n\r\n function connectSocket(connectCallback) {\r\n connection.socketAutoReConnect = true;\r\n\r\n if (connection.socket) { // todo: check here readySate/etc. to make sure socket is still opened\r\n if (connectCallback) {\r\n connectCallback(connection.socket);\r\n }\r\n return;\r\n }\r\n\r\n if (typeof SocketConnection === 'undefined') {\r\n if (typeof FirebaseConnection !== 'undefined') {\r\n window.SocketConnection = FirebaseConnection;\r\n } else if (typeof PubNubConnection !== 'undefined') {\r\n window.SocketConnection = PubNubConnection;\r\n } else {\r\n throw 'SocketConnection.js seems missed.';\r\n }\r\n }\r\n\r\n new SocketConnection(connection, function(s) {\r\n if (connectCallback) {\r\n connectCallback(connection.socket);\r\n }\r\n });\r\n }\r\n\r\n // 1st paramter is roomid\r\n // 2rd paramter is a callback function\r\n connection.openOrJoin = function(roomid, callback) {\r\n callback = callback || function() {};\r\n\r\n connection.checkPresence(roomid, function(isRoomExist, roomid) {\r\n if (isRoomExist) {\r\n connection.sessionid = roomid;\r\n\r\n var localPeerSdpConstraints = false;\r\n var remotePeerSdpConstraints = false;\r\n var isOneWay = !!connection.session.oneway;\r\n var isDataOnly = isData(connection.session);\r\n\r\n remotePeerSdpConstraints = {\r\n OfferToReceiveAudio: connection.sdpConstraints.mandatory.OfferToReceiveAudio,\r\n OfferToReceiveVideo: connection.sdpConstraints.mandatory.OfferToReceiveVideo\r\n }\r\n\r\n localPeerSdpConstraints = {\r\n OfferToReceiveAudio: isOneWay ? !!connection.session.audio : connection.sdpConstraints.mandatory.OfferToReceiveAudio,\r\n OfferToReceiveVideo: isOneWay ? !!connection.session.video || !!connection.session.screen : connection.sdpConstraints.mandatory.OfferToReceiveVideo\r\n }\r\n\r\n var connectionDescription = {\r\n remoteUserId: connection.sessionid,\r\n message: {\r\n newParticipationRequest: true,\r\n isOneWay: isOneWay,\r\n isDataOnly: isDataOnly,\r\n localPeerSdpConstraints: localPeerSdpConstraints,\r\n remotePeerSdpConstraints: remotePeerSdpConstraints\r\n },\r\n sender: connection.userid\r\n };\r\n\r\n beforeJoin(connectionDescription.message, function() {\r\n joinRoom(connectionDescription, callback);\r\n });\r\n return;\r\n }\r\n\r\n connection.waitingForLocalMedia = true;\r\n connection.isInitiator = true;\r\n\r\n connection.sessionid = roomid || connection.sessionid;\r\n\r\n if (isData(connection.session)) {\r\n openRoom(callback);\r\n return;\r\n }\r\n\r\n connection.captureUserMedia(function() {\r\n openRoom(callback);\r\n });\r\n });\r\n };\r\n\r\n // don't allow someone to join this person until he has the media\r\n connection.waitingForLocalMedia = false;\r\n\r\n connection.open = function(roomid, callback) {\r\n callback = callback || function() {};\r\n\r\n connection.waitingForLocalMedia = true;\r\n connection.isInitiator = true;\r\n\r\n connection.sessionid = roomid || connection.sessionid;\r\n\r\n connectSocket(function() {\r\n if (isData(connection.session)) {\r\n openRoom(callback);\r\n return;\r\n }\r\n\r\n connection.captureUserMedia(function() {\r\n openRoom(callback);\r\n });\r\n });\r\n };\r\n\r\n // this object keeps extra-data records for all connected users\r\n // this object is never cleared so you can always access extra-data even if a user left\r\n connection.peersBackup = {};\r\n\r\n connection.deletePeer = function(remoteUserId) {\r\n if (!remoteUserId || !connection.peers[remoteUserId]) {\r\n return;\r\n }\r\n\r\n var eventObject = {\r\n userid: remoteUserId,\r\n extra: connection.peers[remoteUserId] ? connection.peers[remoteUserId].extra : {}\r\n };\r\n\r\n if (connection.peersBackup[eventObject.userid]) {\r\n eventObject.extra = connection.peersBackup[eventObject.userid].extra;\r\n }\r\n\r\n connection.onleave(eventObject);\r\n\r\n if (!!connection.peers[remoteUserId]) {\r\n connection.peers[remoteUserId].streams.forEach(function(stream) {\r\n stream.stop();\r\n });\r\n\r\n var peer = connection.peers[remoteUserId].peer;\r\n if (peer && peer.iceConnectionState !== 'closed') {\r\n try {\r\n peer.close();\r\n } catch (e) {}\r\n }\r\n\r\n if (connection.peers[remoteUserId]) {\r\n connection.peers[remoteUserId].peer = null;\r\n delete connection.peers[remoteUserId];\r\n }\r\n }\r\n }\r\n\r\n connection.rejoin = function(connectionDescription) {\r\n if (connection.isInitiator || !connectionDescription || !Object.keys(connectionDescription).length) {\r\n return;\r\n }\r\n\r\n var extra = {};\r\n\r\n if (connection.peers[connectionDescription.remoteUserId]) {\r\n extra = connection.peers[connectionDescription.remoteUserId].extra;\r\n connection.deletePeer(connectionDescription.remoteUserId);\r\n }\r\n\r\n if (connectionDescription && connectionDescription.remoteUserId) {\r\n connection.join(connectionDescription.remoteUserId);\r\n\r\n connection.onReConnecting({\r\n userid: connectionDescription.remoteUserId,\r\n extra: extra\r\n });\r\n }\r\n };\r\n\r\n connection.join = function(remoteUserId, options) {\r\n connection.sessionid = (remoteUserId ? remoteUserId.sessionid || remoteUserId.remoteUserId || remoteUserId : false) || connection.sessionid;\r\n connection.sessionid += '';\r\n\r\n var localPeerSdpConstraints = false;\r\n var remotePeerSdpConstraints = false;\r\n var isOneWay = false;\r\n var isDataOnly = false;\r\n\r\n if ((remoteUserId && remoteUserId.session) || !remoteUserId || typeof remoteUserId === 'string') {\r\n var session = remoteUserId ? remoteUserId.session || connection.session : connection.session;\r\n\r\n isOneWay = !!session.oneway;\r\n isDataOnly = isData(session);\r\n\r\n remotePeerSdpConstraints = {\r\n OfferToReceiveAudio: connection.sdpConstraints.mandatory.OfferToReceiveAudio,\r\n OfferToReceiveVideo: connection.sdpConstraints.mandatory.OfferToReceiveVideo\r\n };\r\n\r\n localPeerSdpConstraints = {\r\n OfferToReceiveAudio: isOneWay ? !!connection.session.audio : connection.sdpConstraints.mandatory.OfferToReceiveAudio,\r\n OfferToReceiveVideo: isOneWay ? !!connection.session.video || !!connection.session.screen : connection.sdpConstraints.mandatory.OfferToReceiveVideo\r\n };\r\n }\r\n\r\n options = options || {};\r\n\r\n var cb = function() {};\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n if (typeof options.localPeerSdpConstraints !== 'undefined') {\r\n localPeerSdpConstraints = options.localPeerSdpConstraints;\r\n }\r\n\r\n if (typeof options.remotePeerSdpConstraints !== 'undefined') {\r\n remotePeerSdpConstraints = options.remotePeerSdpConstraints;\r\n }\r\n\r\n if (typeof options.isOneWay !== 'undefined') {\r\n isOneWay = options.isOneWay;\r\n }\r\n\r\n if (typeof options.isDataOnly !== 'undefined') {\r\n isDataOnly = options.isDataOnly;\r\n }\r\n\r\n var connectionDescription = {\r\n remoteUserId: connection.sessionid,\r\n message: {\r\n newParticipationRequest: true,\r\n isOneWay: isOneWay,\r\n isDataOnly: isDataOnly,\r\n localPeerSdpConstraints: localPeerSdpConstraints,\r\n remotePeerSdpConstraints: remotePeerSdpConstraints\r\n },\r\n sender: connection.userid\r\n };\r\n\r\n beforeJoin(connectionDescription.message, function() {\r\n connectSocket(function() {\r\n joinRoom(connectionDescription, cb);\r\n });\r\n });\r\n return connectionDescription;\r\n };\r\n\r\n function joinRoom(connectionDescription, cb) {\r\n connection.socket.emit('join-room', {\r\n sessionid: connection.sessionid,\r\n session: connection.session,\r\n mediaConstraints: connection.mediaConstraints,\r\n sdpConstraints: connection.sdpConstraints,\r\n streams: getStreamInfoForAdmin(),\r\n extra: connection.extra,\r\n password: typeof connection.password !== 'undefined' && typeof connection.password !== 'object' ? connection.password : ''\r\n }, function(isRoomJoined, error) {\r\n if (isRoomJoined === true) {\r\n if (connection.enableLogs) {\r\n console.log('isRoomJoined: ', isRoomJoined, ' roomid: ', connection.sessionid);\r\n }\r\n\r\n if (!!connection.peers[connection.sessionid]) {\r\n // on socket disconnect & reconnect\r\n return;\r\n }\r\n\r\n mPeer.onNegotiationNeeded(connectionDescription);\r\n }\r\n\r\n if (isRoomJoined === false) {\r\n if (connection.enableLogs) {\r\n console.warn('isRoomJoined: ', error, ' roomid: ', connection.sessionid);\r\n }\r\n\r\n // [disabled] retry after 3 seconds\r\n false && setTimeout(function() {\r\n joinRoom(connectionDescription, cb);\r\n }, 3000);\r\n }\r\n\r\n cb(isRoomJoined, connection.sessionid, error);\r\n });\r\n }\r\n\r\n connection.publicRoomIdentifier = '';\r\n\r\n function openRoom(callback) {\r\n if (connection.enableLogs) {\r\n console.log('Sending open-room signal to socket.io');\r\n }\r\n\r\n connection.waitingForLocalMedia = false;\r\n connection.socket.emit('open-room', {\r\n sessionid: connection.sessionid,\r\n session: connection.session,\r\n mediaConstraints: connection.mediaConstraints,\r\n sdpConstraints: connection.sdpConstraints,\r\n streams: getStreamInfoForAdmin(),\r\n extra: connection.extra,\r\n identifier: connection.publicRoomIdentifier,\r\n password: typeof connection.password !== 'undefined' && typeof connection.password !== 'object' ? connection.password : ''\r\n }, function(isRoomOpened, error) {\r\n if (isRoomOpened === true) {\r\n if (connection.enableLogs) {\r\n console.log('isRoomOpened: ', isRoomOpened, ' roomid: ', connection.sessionid);\r\n }\r\n callback(isRoomOpened, connection.sessionid);\r\n }\r\n\r\n if (isRoomOpened === false) {\r\n if (connection.enableLogs) {\r\n console.warn('isRoomOpened: ', error, ' roomid: ', connection.sessionid);\r\n }\r\n\r\n callback(isRoomOpened, connection.sessionid, error);\r\n }\r\n });\r\n }\r\n\r\n function getStreamInfoForAdmin() {\r\n try {\r\n return connection.streamEvents.selectAll('local').map(function(event) {\r\n return {\r\n streamid: event.streamid,\r\n tracks: event.stream.getTracks().length\r\n };\r\n });\r\n } catch (e) {\r\n return [];\r\n }\r\n }\r\n\r\n function beforeJoin(userPreferences, callback) {\r\n if (connection.dontCaptureUserMedia || userPreferences.isDataOnly) {\r\n callback();\r\n return;\r\n }\r\n\r\n var localMediaConstraints = {};\r\n\r\n if (userPreferences.localPeerSdpConstraints.OfferToReceiveAudio) {\r\n localMediaConstraints.audio = connection.mediaConstraints.audio;\r\n }\r\n\r\n if (userPreferences.localPeerSdpConstraints.OfferToReceiveVideo) {\r\n localMediaConstraints.video = connection.mediaConstraints.video;\r\n }\r\n\r\n var session = userPreferences.session || connection.session;\r\n\r\n if (session.oneway && session.audio !== 'two-way' && session.video !== 'two-way' && session.screen !== 'two-way') {\r\n callback();\r\n return;\r\n }\r\n\r\n if (session.oneway && session.audio && session.audio === 'two-way') {\r\n session = {\r\n audio: true\r\n };\r\n }\r\n\r\n if (session.audio || session.video || session.screen) {\r\n if (session.screen) {\r\n if (DetectRTC.browser.name === 'Edge') {\r\n navigator.getDisplayMedia({\r\n video: true,\r\n audio: isAudioPlusTab(connection)\r\n }).then(function(screen) {\r\n screen.isScreen = true;\r\n mPeer.onGettingLocalMedia(screen);\r\n\r\n if ((session.audio || session.video) && !isAudioPlusTab(connection)) {\r\n connection.invokeGetUserMedia(null, callback);\r\n } else {\r\n callback(screen);\r\n }\r\n }, function(error) {\r\n console.error('Unable to capture screen on Edge. HTTPs and version 17+ is required.');\r\n });\r\n } else {\r\n connection.invokeGetUserMedia({\r\n audio: isAudioPlusTab(connection),\r\n video: true,\r\n isScreen: true\r\n }, (session.audio || session.video) && !isAudioPlusTab(connection) ? connection.invokeGetUserMedia(null, callback) : callback);\r\n }\r\n } else if (session.audio || session.video) {\r\n connection.invokeGetUserMedia(null, callback, session);\r\n }\r\n }\r\n }\r\n\r\n connection.getUserMedia = connection.captureUserMedia = function(callback, sessionForced) {\r\n callback = callback || function() {};\r\n var session = sessionForced || connection.session;\r\n\r\n if (connection.dontCaptureUserMedia || isData(session)) {\r\n callback();\r\n return;\r\n }\r\n\r\n if (session.audio || session.video || session.screen) {\r\n if (session.screen) {\r\n if (DetectRTC.browser.name === 'Edge') {\r\n navigator.getDisplayMedia({\r\n video: true,\r\n audio: isAudioPlusTab(connection)\r\n }).then(function(screen) {\r\n screen.isScreen = true;\r\n mPeer.onGettingLocalMedia(screen);\r\n\r\n if ((session.audio || session.video) && !isAudioPlusTab(connection)) {\r\n var nonScreenSession = {};\r\n for (var s in session) {\r\n if (s !== 'screen') {\r\n nonScreenSession[s] = session[s];\r\n }\r\n }\r\n connection.invokeGetUserMedia(sessionForced, callback, nonScreenSession);\r\n return;\r\n }\r\n callback(screen);\r\n }, function(error) {\r\n console.error('Unable to capture screen on Edge. HTTPs and version 17+ is required.');\r\n });\r\n } else {\r\n connection.invokeGetUserMedia({\r\n audio: isAudioPlusTab(connection),\r\n video: true,\r\n isScreen: true\r\n }, function(stream) {\r\n if ((session.audio || session.video) && !isAudioPlusTab(connection)) {\r\n var nonScreenSession = {};\r\n for (var s in session) {\r\n if (s !== 'screen') {\r\n nonScreenSession[s] = session[s];\r\n }\r\n }\r\n connection.invokeGetUserMedia(sessionForced, callback, nonScreenSession);\r\n return;\r\n }\r\n callback(stream);\r\n });\r\n }\r\n } else if (session.audio || session.video) {\r\n connection.invokeGetUserMedia(sessionForced, callback, session);\r\n }\r\n }\r\n };\r\n\r\n connection.onbeforeunload = function(arg1, dontCloseSocket) {\r\n if (!connection.closeBeforeUnload) {\r\n return;\r\n }\r\n\r\n connection.peers.getAllParticipants().forEach(function(participant) {\r\n mPeer.onNegotiationNeeded({\r\n userLeft: true\r\n }, participant);\r\n\r\n if (connection.peers[participant] && connection.peers[participant].peer) {\r\n connection.peers[participant].peer.close();\r\n }\r\n\r\n delete connection.peers[participant];\r\n });\r\n\r\n if (!dontCloseSocket) {\r\n connection.closeSocket();\r\n }\r\n\r\n connection.isInitiator = false;\r\n };\r\n\r\n if (!window.ignoreBeforeUnload) {\r\n // user can implement its own version of window.onbeforeunload\r\n connection.closeBeforeUnload = true;\r\n window.addEventListener('beforeunload', connection.onbeforeunload, false);\r\n } else {\r\n connection.closeBeforeUnload = false;\r\n }\r\n\r\n connection.userid = getRandomString();\r\n connection.changeUserId = function(newUserId, callback) {\r\n callback = callback || function() {};\r\n connection.userid = newUserId || getRandomString();\r\n connection.socket.emit('changed-uuid', connection.userid, callback);\r\n };\r\n\r\n connection.extra = {};\r\n connection.attachStreams = [];\r\n\r\n connection.session = {\r\n audio: true,\r\n video: true\r\n };\r\n\r\n connection.enableFileSharing = false;\r\n\r\n // all values in kbps\r\n connection.bandwidth = {\r\n screen: false,\r\n audio: false,\r\n video: false\r\n };\r\n\r\n connection.codecs = {\r\n audio: 'opus',\r\n video: 'VP9'\r\n };\r\n\r\n connection.processSdp = function(sdp) {\r\n // ignore SDP modification if unified-pan is supported\r\n if (isUnifiedPlanSupportedDefault()) {\r\n return sdp;\r\n }\r\n\r\n if (DetectRTC.browser.name === 'Safari') {\r\n return sdp;\r\n }\r\n\r\n if (connection.codecs.video.toUpperCase() === 'VP8') {\r\n sdp = CodecsHandler.preferCodec(sdp, 'vp8');\r\n }\r\n\r\n if (connection.codecs.video.toUpperCase() === 'VP9') {\r\n sdp = CodecsHandler.preferCodec(sdp, 'vp9');\r\n }\r\n\r\n if (connection.codecs.video.toUpperCase() === 'H264') {\r\n sdp = CodecsHandler.preferCodec(sdp, 'h264');\r\n }\r\n\r\n if (connection.codecs.audio === 'G722') {\r\n sdp = CodecsHandler.removeNonG722(sdp);\r\n }\r\n\r\n if (DetectRTC.browser.name === 'Firefox') {\r\n return sdp;\r\n }\r\n\r\n if (connection.bandwidth.video || connection.bandwidth.screen) {\r\n sdp = CodecsHandler.setApplicationSpecificBandwidth(sdp, connection.bandwidth, !!connection.session.screen);\r\n }\r\n\r\n if (connection.bandwidth.video) {\r\n sdp = CodecsHandler.setVideoBitrates(sdp, {\r\n min: connection.bandwidth.video * 8 * 1024,\r\n max: connection.bandwidth.video * 8 * 1024\r\n });\r\n }\r\n\r\n if (connection.bandwidth.audio) {\r\n sdp = CodecsHandler.setOpusAttributes(sdp, {\r\n maxaveragebitrate: connection.bandwidth.audio * 8 * 1024,\r\n maxplaybackrate: connection.bandwidth.audio * 8 * 1024,\r\n stereo: 1,\r\n maxptime: 3\r\n });\r\n }\r\n\r\n return sdp;\r\n };\r\n\r\n if (typeof CodecsHandler !== 'undefined') {\r\n connection.BandwidthHandler = connection.CodecsHandler = CodecsHandler;\r\n }\r\n\r\n connection.mediaConstraints = {\r\n audio: {\r\n mandatory: {},\r\n optional: connection.bandwidth.audio ? [{\r\n bandwidth: connection.bandwidth.audio * 8 * 1024 || 128 * 8 * 1024\r\n }] : []\r\n },\r\n video: {\r\n mandatory: {},\r\n optional: connection.bandwidth.video ? [{\r\n bandwidth: connection.bandwidth.video * 8 * 1024 || 128 * 8 * 1024\r\n }, {\r\n facingMode: 'user'\r\n }] : [{\r\n facingMode: 'user'\r\n }]\r\n }\r\n };\r\n\r\n if (DetectRTC.browser.name === 'Firefox') {\r\n connection.mediaConstraints = {\r\n audio: true,\r\n video: true\r\n };\r\n }\r\n\r\n if (!forceOptions.useDefaultDevices && !DetectRTC.isMobileDevice) {\r\n DetectRTC.load(function() {\r\n var lastAudioDevice, lastVideoDevice;\r\n // it will force RTCMultiConnection to capture last-devices\r\n // i.e. if external microphone is attached to system, we should prefer it over built-in devices.\r\n DetectRTC.MediaDevices.forEach(function(device) {\r\n if (device.kind === 'audioinput' && connection.mediaConstraints.audio !== false) {\r\n lastAudioDevice = device;\r\n }\r\n\r\n if (device.kind === 'videoinput' && connection.mediaConstraints.video !== false) {\r\n lastVideoDevice = device;\r\n }\r\n });\r\n\r\n if (lastAudioDevice) {\r\n if (DetectRTC.browser.name === 'Firefox') {\r\n if (connection.mediaConstraints.audio !== true) {\r\n connection.mediaConstraints.audio.deviceId = lastAudioDevice.id;\r\n } else {\r\n connection.mediaConstraints.audio = {\r\n deviceId: lastAudioDevice.id\r\n }\r\n }\r\n return;\r\n }\r\n\r\n if (connection.mediaConstraints.audio == true) {\r\n connection.mediaConstraints.audio = {\r\n mandatory: {},\r\n optional: []\r\n }\r\n }\r\n\r\n if (!connection.mediaConstraints.audio.optional) {\r\n connection.mediaConstraints.audio.optional = [];\r\n }\r\n\r\n var optional = [{\r\n sourceId: lastAudioDevice.id\r\n }];\r\n\r\n connection.mediaConstraints.audio.optional = optional.concat(connection.mediaConstraints.audio.optional);\r\n }\r\n\r\n if (lastVideoDevice) {\r\n if (DetectRTC.browser.name === 'Firefox') {\r\n if (connection.mediaConstraints.video !== true) {\r\n connection.mediaConstraints.video.deviceId = lastVideoDevice.id;\r\n } else {\r\n connection.mediaConstraints.video = {\r\n deviceId: lastVideoDevice.id\r\n }\r\n }\r\n return;\r\n }\r\n\r\n if (connection.mediaConstraints.video == true) {\r\n connection.mediaConstraints.video = {\r\n mandatory: {},\r\n optional: []\r\n }\r\n }\r\n\r\n if (!connection.mediaConstraints.video.optional) {\r\n connection.mediaConstraints.video.optional = [];\r\n }\r\n\r\n var optional = [{\r\n sourceId: lastVideoDevice.id\r\n }];\r\n\r\n connection.mediaConstraints.video.optional = optional.concat(connection.mediaConstraints.video.optional);\r\n }\r\n });\r\n }\r\n\r\n connection.sdpConstraints = {\r\n mandatory: {\r\n OfferToReceiveAudio: true,\r\n OfferToReceiveVideo: true\r\n },\r\n optional: [{\r\n VoiceActivityDetection: false\r\n }]\r\n };\r\n\r\n connection.sdpSemantics = null; // \"unified-plan\" or \"plan-b\", ref: webrtc.org/web-apis/chrome/unified-plan/\r\n connection.iceCandidatePoolSize = null; // 0\r\n connection.bundlePolicy = null; // max-bundle\r\n connection.rtcpMuxPolicy = null; // \"require\" or \"negotiate\"\r\n connection.iceTransportPolicy = null; // \"relay\" or \"all\"\r\n connection.optionalArgument = {\r\n optional: [{\r\n DtlsSrtpKeyAgreement: true\r\n }, {\r\n googImprovedWifiBwe: true\r\n }, {\r\n googScreencastMinBitrate: 300\r\n }, {\r\n googIPv6: true\r\n }, {\r\n googDscp: true\r\n }, {\r\n googCpuUnderuseThreshold: 55\r\n }, {\r\n googCpuOveruseThreshold: 85\r\n }, {\r\n googSuspendBelowMinBitrate: true\r\n }, {\r\n googCpuOveruseDetection: true\r\n }],\r\n mandatory: {}\r\n };\r\n\r\n connection.iceServers = IceServersHandler.getIceServers(connection);\r\n\r\n connection.candidates = {\r\n host: true,\r\n stun: true,\r\n turn: true\r\n };\r\n\r\n connection.iceProtocols = {\r\n tcp: true,\r\n udp: true\r\n };\r\n\r\n // EVENTs\r\n connection.onopen = function(event) {\r\n if (!!connection.enableLogs) {\r\n console.info('Data connection has been opened between you & ', event.userid);\r\n }\r\n };\r\n\r\n connection.onclose = function(event) {\r\n if (!!connection.enableLogs) {\r\n console.warn('Data connection has been closed between you & ', event.userid);\r\n }\r\n };\r\n\r\n connection.onerror = function(error) {\r\n if (!!connection.enableLogs) {\r\n console.error(error.userid, 'data-error', error);\r\n }\r\n };\r\n\r\n connection.onmessage = function(event) {\r\n if (!!connection.enableLogs) {\r\n console.debug('data-message', event.userid, event.data);\r\n }\r\n };\r\n\r\n connection.send = function(data, remoteUserId) {\r\n connection.peers.send(data, remoteUserId);\r\n };\r\n\r\n connection.close = connection.disconnect = connection.leave = function() {\r\n connection.onbeforeunload(false, true);\r\n };\r\n\r\n connection.closeEntireSession = function(callback) {\r\n callback = callback || function() {};\r\n connection.socket.emit('close-entire-session', function looper() {\r\n if (connection.getAllParticipants().length) {\r\n setTimeout(looper, 100);\r\n return;\r\n }\r\n\r\n connection.onEntireSessionClosed({\r\n sessionid: connection.sessionid,\r\n userid: connection.userid,\r\n extra: connection.extra\r\n });\r\n\r\n connection.changeUserId(null, function() {\r\n connection.close();\r\n callback();\r\n });\r\n });\r\n };\r\n\r\n connection.onEntireSessionClosed = function(event) {\r\n if (!connection.enableLogs) return;\r\n console.info('Entire session is closed: ', event.sessionid, event.extra);\r\n };\r\n\r\n connection.onstream = function(e) {\r\n var parentNode = connection.videosContainer;\r\n parentNode.insertBefore(e.mediaElement, parentNode.firstChild);\r\n var played = e.mediaElement.play();\r\n\r\n if (typeof played !== 'undefined') {\r\n played.catch(function() {\r\n /*** iOS 11 doesn't allow automatic play and rejects ***/\r\n }).then(function() {\r\n setTimeout(function() {\r\n e.mediaElement.play();\r\n }, 2000);\r\n });\r\n return;\r\n }\r\n\r\n setTimeout(function() {\r\n e.mediaElement.play();\r\n }, 2000);\r\n };\r\n\r\n connection.onstreamended = function(e) {\r\n if (!e.mediaElement) {\r\n e.mediaElement = document.getElementById(e.streamid);\r\n }\r\n\r\n if (!e.mediaElement || !e.mediaElement.parentNode) {\r\n return;\r\n }\r\n\r\n e.mediaElement.parentNode.removeChild(e.mediaElement);\r\n };\r\n\r\n connection.direction = 'many-to-many';\r\n\r\n connection.removeStream = function(streamid, remoteUserId) {\r\n var stream;\r\n connection.attachStreams.forEach(function(localStream) {\r\n if (localStream.id === streamid) {\r\n stream = localStream;\r\n }\r\n });\r\n\r\n if (!stream) {\r\n console.warn('No such stream exist.', streamid);\r\n return;\r\n }\r\n\r\n connection.peers.getAllParticipants().forEach(function(participant) {\r\n if (remoteUserId && participant !== remoteUserId) {\r\n return;\r\n }\r\n\r\n var user = connection.peers[participant];\r\n try {\r\n user.peer.removeStream(stream);\r\n } catch (e) {}\r\n });\r\n\r\n connection.renegotiate();\r\n };\r\n\r\n connection.addStream = function(session, remoteUserId) {\r\n if (!!session.getTracks) {\r\n if (connection.attachStreams.indexOf(session) === -1) {\r\n if (!session.streamid) {\r\n session.streamid = session.id;\r\n }\r\n\r\n connection.attachStreams.push(session);\r\n }\r\n connection.renegotiate(remoteUserId);\r\n return;\r\n }\r\n\r\n if (isData(session)) {\r\n connection.renegotiate(remoteUserId);\r\n return;\r\n }\r\n\r\n if (session.audio || session.video || session.screen) {\r\n if (session.screen) {\r\n if (DetectRTC.browser.name === 'Edge') {\r\n navigator.getDisplayMedia({\r\n video: true,\r\n audio: isAudioPlusTab(connection)\r\n }).then(function(screen) {\r\n screen.isScreen = true;\r\n mPeer.onGettingLocalMedia(screen);\r\n\r\n if ((session.audio || session.video) && !isAudioPlusTab(connection)) {\r\n connection.invokeGetUserMedia(null, function(stream) {\r\n gumCallback(stream);\r\n });\r\n } else {\r\n gumCallback(screen);\r\n }\r\n }, function(error) {\r\n console.error('Unable to capture screen on Edge. HTTPs and version 17+ is required.');\r\n });\r\n } else {\r\n connection.invokeGetUserMedia({\r\n audio: isAudioPlusTab(connection),\r\n video: true,\r\n isScreen: true\r\n }, function(stream) {\r\n if ((session.audio || session.video) && !isAudioPlusTab(connection)) {\r\n connection.invokeGetUserMedia(null, function(stream) {\r\n gumCallback(stream);\r\n });\r\n } else {\r\n gumCallback(stream);\r\n }\r\n });\r\n }\r\n } else if (session.audio || session.video) {\r\n connection.invokeGetUserMedia(null, gumCallback);\r\n }\r\n }\r\n\r\n function gumCallback(stream) {\r\n if (session.streamCallback) {\r\n session.streamCallback(stream);\r\n }\r\n\r\n connection.renegotiate(remoteUserId);\r\n }\r\n };\r\n\r\n connection.invokeGetUserMedia = function(localMediaConstraints, callback, session) {\r\n if (!session) {\r\n session = connection.session;\r\n }\r\n\r\n if (!localMediaConstraints) {\r\n localMediaConstraints = connection.mediaConstraints;\r\n }\r\n\r\n getUserMediaHandler({\r\n onGettingLocalMedia: function(stream) {\r\n var videoConstraints = localMediaConstraints.video;\r\n if (videoConstraints) {\r\n if (videoConstraints.mediaSource || videoConstraints.mozMediaSource) {\r\n stream.isScreen = true;\r\n } else if (videoConstraints.mandatory && videoConstraints.mandatory.chromeMediaSource) {\r\n stream.isScreen = true;\r\n }\r\n }\r\n\r\n if (!stream.isScreen) {\r\n stream.isVideo = !!getTracks(stream, 'video').length;\r\n stream.isAudio = !stream.isVideo && getTracks(stream, 'audio').length;\r\n }\r\n\r\n mPeer.onGettingLocalMedia(stream, function() {\r\n if (typeof callback === 'function') {\r\n callback(stream);\r\n }\r\n });\r\n },\r\n onLocalMediaError: function(error, constraints) {\r\n mPeer.onLocalMediaError(error, constraints);\r\n },\r\n localMediaConstraints: localMediaConstraints || {\r\n audio: session.audio ? localMediaConstraints.audio : false,\r\n video: session.video ? localMediaConstraints.video : false\r\n }\r\n });\r\n };\r\n\r\n function applyConstraints(stream, mediaConstraints) {\r\n if (!stream) {\r\n if (!!connection.enableLogs) {\r\n console.error('No stream to applyConstraints.');\r\n }\r\n return;\r\n }\r\n\r\n if (mediaConstraints.audio) {\r\n getTracks(stream, 'audio').forEach(function(track) {\r\n track.applyConstraints(mediaConstraints.audio);\r\n });\r\n }\r\n\r\n if (mediaConstraints.video) {\r\n getTracks(stream, 'video').forEach(function(track) {\r\n track.applyConstraints(mediaConstraints.video);\r\n });\r\n }\r\n }\r\n\r\n connection.applyConstraints = function(mediaConstraints, streamid) {\r\n if (!MediaStreamTrack || !MediaStreamTrack.prototype.applyConstraints) {\r\n alert('track.applyConstraints is NOT supported in your browser.');\r\n return;\r\n }\r\n\r\n if (streamid) {\r\n var stream;\r\n if (connection.streamEvents[streamid]) {\r\n stream = connection.streamEvents[streamid].stream;\r\n }\r\n applyConstraints(stream, mediaConstraints);\r\n return;\r\n }\r\n\r\n connection.attachStreams.forEach(function(stream) {\r\n applyConstraints(stream, mediaConstraints);\r\n });\r\n };\r\n\r\n function replaceTrack(track, remoteUserId, isVideoTrack) {\r\n if (remoteUserId) {\r\n mPeer.replaceTrack(track, remoteUserId, isVideoTrack);\r\n return;\r\n }\r\n\r\n connection.peers.getAllParticipants().forEach(function(participant) {\r\n mPeer.replaceTrack(track, participant, isVideoTrack);\r\n });\r\n }\r\n\r\n connection.replaceTrack = function(session, remoteUserId, isVideoTrack) {\r\n session = session || {};\r\n\r\n if (!RTCPeerConnection.prototype.getSenders) {\r\n connection.addStream(session);\r\n return;\r\n }\r\n\r\n if (session instanceof MediaStreamTrack) {\r\n replaceTrack(session, remoteUserId, isVideoTrack);\r\n return;\r\n }\r\n\r\n if (session instanceof MediaStream) {\r\n if (getTracks(session, 'video').length) {\r\n replaceTrack(getTracks(session, 'video')[0], remoteUserId, true);\r\n }\r\n\r\n if (getTracks(session, 'audio').length) {\r\n replaceTrack(getTracks(session, 'audio')[0], remoteUserId, false);\r\n }\r\n return;\r\n }\r\n\r\n if (isData(session)) {\r\n throw 'connection.replaceTrack requires audio and/or video and/or screen.';\r\n return;\r\n }\r\n\r\n if (session.audio || session.video || session.screen) {\r\n if (session.screen) {\r\n if (DetectRTC.browser.name === 'Edge') {\r\n navigator.getDisplayMedia({\r\n video: true,\r\n audio: isAudioPlusTab(connection)\r\n }).then(function(screen) {\r\n screen.isScreen = true;\r\n mPeer.onGettingLocalMedia(screen);\r\n\r\n if ((session.audio || session.video) && !isAudioPlusTab(connection)) {\r\n connection.invokeGetUserMedia(null, gumCallback);\r\n } else {\r\n gumCallback(screen);\r\n }\r\n }, function(error) {\r\n console.error('Unable to capture screen on Edge. HTTPs and version 17+ is required.');\r\n });\r\n } else {\r\n connection.invokeGetUserMedia({\r\n audio: isAudioPlusTab(connection),\r\n video: true,\r\n isScreen: true\r\n }, (session.audio || session.video) && !isAudioPlusTab(connection) ? connection.invokeGetUserMedia(null, gumCallback) : gumCallback);\r\n }\r\n } else if (session.audio || session.video) {\r\n connection.invokeGetUserMedia(null, gumCallback);\r\n }\r\n }\r\n\r\n function gumCallback(stream) {\r\n connection.replaceTrack(stream, remoteUserId, isVideoTrack || session.video || session.screen);\r\n }\r\n };\r\n\r\n connection.resetTrack = function(remoteUsersIds, isVideoTrack) {\r\n if (!remoteUsersIds) {\r\n remoteUsersIds = connection.getAllParticipants();\r\n }\r\n\r\n if (typeof remoteUsersIds == 'string') {\r\n remoteUsersIds = [remoteUsersIds];\r\n }\r\n\r\n remoteUsersIds.forEach(function(participant) {\r\n var peer = connection.peers[participant].peer;\r\n\r\n if ((typeof isVideoTrack === 'undefined' || isVideoTrack === true) && peer.lastVideoTrack) {\r\n connection.replaceTrack(peer.lastVideoTrack, participant, true);\r\n }\r\n\r\n if ((typeof isVideoTrack === 'undefined' || isVideoTrack === false) && peer.lastAudioTrack) {\r\n connection.replaceTrack(peer.lastAudioTrack, participant, false);\r\n }\r\n });\r\n };\r\n\r\n connection.renegotiate = function(remoteUserId) {\r\n if (remoteUserId) {\r\n mPeer.renegotiatePeer(remoteUserId);\r\n return;\r\n }\r\n\r\n connection.peers.getAllParticipants().forEach(function(participant) {\r\n mPeer.renegotiatePeer(participant);\r\n });\r\n };\r\n\r\n connection.setStreamEndHandler = function(stream, isRemote) {\r\n if (!stream || !stream.addEventListener) return;\r\n\r\n isRemote = !!isRemote;\r\n\r\n if (stream.alreadySetEndHandler) {\r\n return;\r\n }\r\n stream.alreadySetEndHandler = true;\r\n\r\n var streamEndedEvent = 'ended';\r\n\r\n if ('oninactive' in stream) {\r\n streamEndedEvent = 'inactive';\r\n }\r\n\r\n stream.addEventListener(streamEndedEvent, function() {\r\n if (stream.idInstance) {\r\n currentUserMediaRequest.remove(stream.idInstance);\r\n }\r\n\r\n if (!isRemote) {\r\n // reset attachStreams\r\n var streams = [];\r\n connection.attachStreams.forEach(function(s) {\r\n if (s.id != stream.id) {\r\n streams.push(s);\r\n }\r\n });\r\n connection.attachStreams = streams;\r\n }\r\n\r\n // connection.renegotiate();\r\n\r\n var streamEvent = connection.streamEvents[stream.streamid];\r\n if (!streamEvent) {\r\n streamEvent = {\r\n stream: stream,\r\n streamid: stream.streamid,\r\n type: isRemote ? 'remote' : 'local',\r\n userid: connection.userid,\r\n extra: connection.extra,\r\n mediaElement: connection.streamEvents[stream.streamid] ? connection.streamEvents[stream.streamid].mediaElement : null\r\n };\r\n }\r\n\r\n if (isRemote && connection.peers[streamEvent.userid]) {\r\n // reset remote \"streams\"\r\n var peer = connection.peers[streamEvent.userid].peer;\r\n var streams = [];\r\n peer.getRemoteStreams().forEach(function(s) {\r\n if (s.id != stream.id) {\r\n streams.push(s);\r\n }\r\n });\r\n connection.peers[streamEvent.userid].streams = streams;\r\n }\r\n\r\n if (streamEvent.userid === connection.userid && streamEvent.type === 'remote') {\r\n return;\r\n }\r\n\r\n if (connection.peersBackup[streamEvent.userid]) {\r\n streamEvent.extra = connection.peersBackup[streamEvent.userid].extra;\r\n }\r\n\r\n connection.onstreamended(streamEvent);\r\n\r\n delete connection.streamEvents[stream.streamid];\r\n }, false);\r\n };\r\n\r\n connection.onMediaError = function(error, constraints) {\r\n if (!!connection.enableLogs) {\r\n console.error(error, constraints);\r\n }\r\n };\r\n\r\n connection.autoCloseEntireSession = false;\r\n\r\n connection.filesContainer = connection.videosContainer = document.body || document.documentElement;\r\n connection.isInitiator = false;\r\n\r\n connection.shareFile = mPeer.shareFile;\r\n if (typeof FileProgressBarHandler !== 'undefined') {\r\n FileProgressBarHandler.handle(connection);\r\n }\r\n\r\n if (typeof TranslationHandler !== 'undefined') {\r\n TranslationHandler.handle(connection);\r\n }\r\n\r\n connection.token = getRandomString;\r\n\r\n connection.onNewParticipant = function(participantId, userPreferences) {\r\n connection.acceptParticipationRequest(participantId, userPreferences);\r\n };\r\n\r\n connection.acceptParticipationRequest = function(participantId, userPreferences) {\r\n if (userPreferences.successCallback) {\r\n userPreferences.successCallback();\r\n delete userPreferences.successCallback;\r\n }\r\n\r\n mPeer.createNewPeer(participantId, userPreferences);\r\n };\r\n\r\n if (typeof StreamsHandler !== 'undefined') {\r\n connection.StreamsHandler = StreamsHandler;\r\n }\r\n\r\n connection.onleave = function(userid) {};\r\n\r\n connection.invokeSelectFileDialog = function(callback) {\r\n var selector = new FileSelector();\r\n selector.accept = '*.*';\r\n selector.selectSingleFile(callback);\r\n };\r\n\r\n connection.onmute = function(e) {\r\n if (!e || !e.mediaElement) {\r\n return;\r\n }\r\n\r\n if (e.muteType === 'both' || e.muteType === 'video') {\r\n e.mediaElement.src = null;\r\n var paused = e.mediaElement.pause();\r\n if (typeof paused !== 'undefined') {\r\n paused.then(function() {\r\n e.mediaElement.poster = e.snapshot || 'https://cdn.webrtc-experiment.com/images/muted.png';\r\n });\r\n } else {\r\n e.mediaElement.poster = e.snapshot || 'https://cdn.webrtc-experiment.com/images/muted.png';\r\n }\r\n } else if (e.muteType === 'audio') {\r\n e.mediaElement.muted = true;\r\n }\r\n };\r\n\r\n connection.onunmute = function(e) {\r\n if (!e || !e.mediaElement || !e.stream) {\r\n return;\r\n }\r\n\r\n if (e.unmuteType === 'both' || e.unmuteType === 'video') {\r\n e.mediaElement.poster = null;\r\n e.mediaElement.srcObject = e.stream;\r\n e.mediaElement.play();\r\n } else if (e.unmuteType === 'audio') {\r\n e.mediaElement.muted = false;\r\n }\r\n };\r\n\r\n connection.onExtraDataUpdated = function(event) {\r\n event.status = 'online';\r\n connection.onUserStatusChanged(event, true);\r\n };\r\n\r\n connection.getAllParticipants = function(sender) {\r\n return connection.peers.getAllParticipants(sender);\r\n };\r\n\r\n if (typeof StreamsHandler !== 'undefined') {\r\n StreamsHandler.onSyncNeeded = function(streamid, action, type) {\r\n connection.peers.getAllParticipants().forEach(function(participant) {\r\n mPeer.onNegotiationNeeded({\r\n streamid: streamid,\r\n action: action,\r\n streamSyncNeeded: true,\r\n type: type || 'both'\r\n }, participant);\r\n });\r\n };\r\n }\r\n\r\n connection.connectSocket = function(callback) {\r\n connectSocket(callback);\r\n };\r\n\r\n connection.closeSocket = function() {\r\n try {\r\n io.sockets = {};\r\n } catch (e) {};\r\n\r\n if (!connection.socket) return;\r\n\r\n if (typeof connection.socket.disconnect === 'function') {\r\n connection.socket.disconnect();\r\n }\r\n\r\n if (typeof connection.socket.resetProps === 'function') {\r\n connection.socket.resetProps();\r\n }\r\n\r\n connection.socket = null;\r\n };\r\n\r\n connection.getSocket = function(callback) {\r\n if (!callback && connection.enableLogs) {\r\n console.warn('getSocket.callback paramter is required.');\r\n }\r\n\r\n callback = callback || function() {};\r\n\r\n if (!connection.socket) {\r\n connectSocket(function() {\r\n callback(connection.socket);\r\n });\r\n } else {\r\n callback(connection.socket);\r\n }\r\n\r\n return connection.socket; // callback is preferred over return-statement\r\n };\r\n\r\n connection.getRemoteStreams = mPeer.getRemoteStreams;\r\n\r\n var skipStreams = ['selectFirst', 'selectAll', 'forEach'];\r\n\r\n connection.streamEvents = {\r\n selectFirst: function(options) {\r\n return connection.streamEvents.selectAll(options)[0];\r\n },\r\n selectAll: function(options) {\r\n if (!options) {\r\n // default will always be all streams\r\n options = {\r\n local: true,\r\n remote: true,\r\n isScreen: true,\r\n isAudio: true,\r\n isVideo: true\r\n };\r\n }\r\n\r\n if (options == 'local') {\r\n options = {\r\n local: true\r\n };\r\n }\r\n\r\n if (options == 'remote') {\r\n options = {\r\n remote: true\r\n };\r\n }\r\n\r\n if (options == 'screen') {\r\n options = {\r\n isScreen: true\r\n };\r\n }\r\n\r\n if (options == 'audio') {\r\n options = {\r\n isAudio: true\r\n };\r\n }\r\n\r\n if (options == 'video') {\r\n options = {\r\n isVideo: true\r\n };\r\n }\r\n\r\n var streams = [];\r\n Object.keys(connection.streamEvents).forEach(function(key) {\r\n var event = connection.streamEvents[key];\r\n\r\n if (skipStreams.indexOf(key) !== -1) return;\r\n var ignore = true;\r\n\r\n if (options.local && event.type === 'local') {\r\n ignore = false;\r\n }\r\n\r\n if (options.remote && event.type === 'remote') {\r\n ignore = false;\r\n }\r\n\r\n if (options.isScreen && event.stream.isScreen) {\r\n ignore = false;\r\n }\r\n\r\n if (options.isVideo && event.stream.isVideo) {\r\n ignore = false;\r\n }\r\n\r\n if (options.isAudio && event.stream.isAudio) {\r\n ignore = false;\r\n }\r\n\r\n if (options.userid && event.userid === options.userid) {\r\n ignore = false;\r\n }\r\n\r\n if (ignore === false) {\r\n streams.push(event);\r\n }\r\n });\r\n\r\n return streams;\r\n }\r\n };\r\n\r\n connection.socketURL = '/'; // generated via config.json\r\n connection.socketMessageEvent = 'RTCMultiConnection-Message'; // generated via config.json\r\n connection.socketCustomEvent = 'RTCMultiConnection-Custom-Message'; // generated via config.json\r\n connection.DetectRTC = DetectRTC;\r\n\r\n connection.setCustomSocketEvent = function(customEvent) {\r\n if (customEvent) {\r\n connection.socketCustomEvent = customEvent;\r\n }\r\n\r\n if (!connection.socket) {\r\n return;\r\n }\r\n\r\n connection.socket.emit('set-custom-socket-event-listener', connection.socketCustomEvent);\r\n };\r\n\r\n connection.getNumberOfBroadcastViewers = function(broadcastId, callback) {\r\n if (!connection.socket || !broadcastId || !callback) return;\r\n\r\n connection.socket.emit('get-number-of-users-in-specific-broadcast', broadcastId, callback);\r\n };\r\n\r\n connection.onNumberOfBroadcastViewersUpdated = function(event) {\r\n if (!connection.enableLogs || !connection.isInitiator) return;\r\n console.info('Number of broadcast (', event.broadcastId, ') viewers', event.numberOfBroadcastViewers);\r\n };\r\n\r\n connection.onUserStatusChanged = function(event, dontWriteLogs) {\r\n if (!!connection.enableLogs && !dontWriteLogs) {\r\n console.info(event.userid, event.status);\r\n }\r\n };\r\n\r\n connection.getUserMediaHandler = getUserMediaHandler;\r\n connection.multiPeersHandler = mPeer;\r\n connection.enableLogs = true;\r\n connection.setCustomSocketHandler = function(customSocketHandler) {\r\n if (typeof SocketConnection !== 'undefined') {\r\n SocketConnection = customSocketHandler;\r\n }\r\n };\r\n\r\n // default value should be 15k because [old]Firefox's receiving limit is 16k!\r\n // however 64k works chrome-to-chrome\r\n connection.chunkSize = 40 * 1000;\r\n\r\n connection.maxParticipantsAllowed = 1000;\r\n\r\n // eject or leave single user\r\n connection.disconnectWith = mPeer.disconnectWith;\r\n\r\n // check if room exist on server\r\n // we will pass roomid to the server and wait for callback (i.e. server's response)\r\n connection.checkPresence = function(roomid, callback) {\r\n roomid = roomid || connection.sessionid;\r\n\r\n if (SocketConnection.name === 'SSEConnection') {\r\n SSEConnection.checkPresence(roomid, function(isRoomExist, _roomid, extra) {\r\n if (!connection.socket) {\r\n if (!isRoomExist) {\r\n connection.userid = _roomid;\r\n }\r\n\r\n connection.connectSocket(function() {\r\n callback(isRoomExist, _roomid, extra);\r\n });\r\n return;\r\n }\r\n callback(isRoomExist, _roomid);\r\n });\r\n return;\r\n }\r\n\r\n if (!connection.socket) {\r\n connection.connectSocket(function() {\r\n connection.checkPresence(roomid, callback);\r\n });\r\n return;\r\n }\r\n\r\n connection.socket.emit('check-presence', roomid + '', function(isRoomExist, _roomid, extra) {\r\n if (connection.enableLogs) {\r\n console.log('checkPresence.isRoomExist: ', isRoomExist, ' roomid: ', _roomid);\r\n }\r\n callback(isRoomExist, _roomid, extra);\r\n });\r\n };\r\n\r\n connection.onReadyForOffer = function(remoteUserId, userPreferences) {\r\n connection.multiPeersHandler.createNewPeer(remoteUserId, userPreferences);\r\n };\r\n\r\n connection.setUserPreferences = function(userPreferences) {\r\n if (connection.dontAttachStream) {\r\n userPreferences.dontAttachLocalStream = true;\r\n }\r\n\r\n if (connection.dontGetRemoteStream) {\r\n userPreferences.dontGetRemoteStream = true;\r\n }\r\n\r\n return userPreferences;\r\n };\r\n\r\n connection.updateExtraData = function() {\r\n connection.socket.emit('extra-data-updated', connection.extra);\r\n };\r\n\r\n connection.enableScalableBroadcast = false;\r\n connection.maxRelayLimitPerUser = 3; // each broadcast should serve only 3 users\r\n\r\n connection.dontCaptureUserMedia = false;\r\n connection.dontAttachStream = false;\r\n connection.dontGetRemoteStream = false;\r\n\r\n connection.onReConnecting = function(event) {\r\n if (connection.enableLogs) {\r\n console.info('ReConnecting with', event.userid, '...');\r\n }\r\n };\r\n\r\n connection.beforeAddingStream = function(stream) {\r\n return stream;\r\n };\r\n\r\n connection.beforeRemovingStream = function(stream) {\r\n return stream;\r\n };\r\n\r\n if (typeof isChromeExtensionAvailable !== 'undefined') {\r\n connection.checkIfChromeExtensionAvailable = isChromeExtensionAvailable;\r\n }\r\n\r\n if (typeof isFirefoxExtensionAvailable !== 'undefined') {\r\n connection.checkIfChromeExtensionAvailable = isFirefoxExtensionAvailable;\r\n }\r\n\r\n if (typeof getChromeExtensionStatus !== 'undefined') {\r\n connection.getChromeExtensionStatus = getChromeExtensionStatus;\r\n }\r\n\r\n connection.modifyScreenConstraints = function(screen_constraints) {\r\n return screen_constraints;\r\n };\r\n\r\n connection.onPeerStateChanged = function(state) {\r\n if (connection.enableLogs) {\r\n if (state.iceConnectionState.search(/closed|failed/gi) !== -1) {\r\n console.error('Peer connection is closed between you & ', state.userid, state.extra, 'state:', state.iceConnectionState);\r\n }\r\n }\r\n };\r\n\r\n connection.isOnline = true;\r\n\r\n listenEventHandler('online', function() {\r\n connection.isOnline = true;\r\n });\r\n\r\n listenEventHandler('offline', function() {\r\n connection.isOnline = false;\r\n });\r\n\r\n connection.isLowBandwidth = false;\r\n if (navigator && navigator.connection && navigator.connection.type) {\r\n connection.isLowBandwidth = navigator.connection.type.toString().toLowerCase().search(/wifi|cell/g) !== -1;\r\n if (connection.isLowBandwidth) {\r\n connection.bandwidth = {\r\n audio: false,\r\n video: false,\r\n screen: false\r\n };\r\n\r\n if (connection.mediaConstraints.audio && connection.mediaConstraints.audio.optional && connection.mediaConstraints.audio.optional.length) {\r\n var newArray = [];\r\n connection.mediaConstraints.audio.optional.forEach(function(opt) {\r\n if (typeof opt.bandwidth === 'undefined') {\r\n newArray.push(opt);\r\n }\r\n });\r\n connection.mediaConstraints.audio.optional = newArray;\r\n }\r\n\r\n if (connection.mediaConstraints.video && connection.mediaConstraints.video.optional && connection.mediaConstraints.video.optional.length) {\r\n var newArray = [];\r\n connection.mediaConstraints.video.optional.forEach(function(opt) {\r\n if (typeof opt.bandwidth === 'undefined') {\r\n newArray.push(opt);\r\n }\r\n });\r\n connection.mediaConstraints.video.optional = newArray;\r\n }\r\n }\r\n }\r\n\r\n connection.getExtraData = function(remoteUserId, callback) {\r\n if (!remoteUserId) throw 'remoteUserId is required.';\r\n\r\n if (typeof callback === 'function') {\r\n connection.socket.emit('get-remote-user-extra-data', remoteUserId, function(extra, remoteUserId, error) {\r\n callback(extra, remoteUserId, error);\r\n });\r\n return;\r\n }\r\n\r\n if (!connection.peers[remoteUserId]) {\r\n if (connection.peersBackup[remoteUserId]) {\r\n return connection.peersBackup[remoteUserId].extra;\r\n }\r\n return {};\r\n }\r\n\r\n return connection.peers[remoteUserId].extra;\r\n };\r\n\r\n if (!!forceOptions.autoOpenOrJoin) {\r\n connection.openOrJoin(connection.sessionid);\r\n }\r\n\r\n connection.onUserIdAlreadyTaken = function(useridAlreadyTaken, yourNewUserId) {\r\n // via #683\r\n connection.close();\r\n connection.closeSocket();\r\n\r\n connection.isInitiator = false;\r\n connection.userid = connection.token();\r\n\r\n connection.join(connection.sessionid);\r\n\r\n if (connection.enableLogs) {\r\n console.warn('Userid already taken.', useridAlreadyTaken, 'Your new userid:', connection.userid);\r\n }\r\n };\r\n\r\n connection.trickleIce = true;\r\n connection.version = '3.6.9';\r\n\r\n connection.onSettingLocalDescription = function(event) {\r\n if (connection.enableLogs) {\r\n console.info('Set local description for remote user', event.userid);\r\n }\r\n };\r\n\r\n connection.resetScreen = function() {\r\n sourceId = null;\r\n if (DetectRTC && DetectRTC.screen) {\r\n delete DetectRTC.screen.sourceId;\r\n }\r\n\r\n currentUserMediaRequest = {\r\n streams: [],\r\n mutex: false,\r\n queueRequests: []\r\n };\r\n };\r\n\r\n // if disabled, \"event.mediaElement\" for \"onstream\" will be NULL\r\n connection.autoCreateMediaElement = true;\r\n\r\n // set password\r\n connection.password = null;\r\n\r\n // set password\r\n connection.setPassword = function(password, callback) {\r\n callback = callback || function() {};\r\n if (connection.socket) {\r\n connection.socket.emit('set-password', password, callback);\r\n } else {\r\n connection.password = password;\r\n callback(true, connection.sessionid, null);\r\n }\r\n };\r\n\r\n connection.onSocketDisconnect = function(event) {\r\n if (connection.enableLogs) {\r\n console.warn('socket.io connection is closed');\r\n }\r\n };\r\n\r\n connection.onSocketError = function(event) {\r\n if (connection.enableLogs) {\r\n console.warn('socket.io connection is failed');\r\n }\r\n };\r\n\r\n // error messages\r\n connection.errors = {\r\n ROOM_NOT_AVAILABLE: 'Room not available',\r\n INVALID_PASSWORD: 'Invalid password',\r\n USERID_NOT_AVAILABLE: 'User ID does not exist',\r\n ROOM_PERMISSION_DENIED: 'Room permission denied',\r\n ROOM_FULL: 'Room full',\r\n DID_NOT_JOIN_ANY_ROOM: 'Did not join any room yet',\r\n INVALID_SOCKET: 'Invalid socket',\r\n PUBLIC_IDENTIFIER_MISSING: 'publicRoomIdentifier is required',\r\n INVALID_ADMIN_CREDENTIAL: 'Invalid username or password attempted'\r\n };\r\n })(this);\r\n\r\n};\r\n\r\nif (typeof module !== 'undefined' /* && !!module.exports*/ ) {\r\n module.exports = exports = RTCMultiConnection;\r\n}\r\n\r\nif (typeof define === 'function' && define.amd) {\r\n define('RTCMultiConnection', [], function() {\r\n return RTCMultiConnection;\r\n });\r\n}\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","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!./ControlBar.vue?vue&type=style&index=0&lang=css&\"","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n"],"sourceRoot":""}