diff --git a/Source/HTTPServer.js b/Source/HTTPServer.js index ab99942..e7067f0 100644 --- a/Source/HTTPServer.js +++ b/Source/HTTPServer.js @@ -4,6 +4,8 @@ let http = require("http"); let express = require("express"); let compression = require("compression"); let {resolve} = require("path"); +let auth = require("express-basic-auth"); + const { termoutput } = require("./config"); let server = http.createServer(); const stats = require("./stats"); @@ -21,6 +23,13 @@ server.addListener("error",(err)=> { }) exports.http = server; +let authorize = auth({ + users:{ + saqut: "yum81633" + }, + challenge: true +}); + app.get("/script",(request, response)=>{ response.sendFile(resolve("./script/index.js")) }); @@ -35,10 +44,10 @@ app.get("/stream",(request, response)=>{ }); app.use("/stream",express.static(resolve("./public"))); -app.get("/",(request, response)=>{ +app.get("/",authorize,(request, response)=>{ response.sendFile(resolve("./script/index.html")) }); -app.post("/stats",(request, response)=>{ +app.post("/stats",authorize,(request, response)=>{ response.json(stats.others); }); app.get("*",(request, response)=>{ diff --git a/Source/Services/Room.js b/Source/Services/Room.js index 752e419..04cb4ae 100644 --- a/Source/Services/Room.js +++ b/Source/Services/Room.js @@ -78,7 +78,7 @@ function Room() /** * @param {Room} room */ -Room.prototype.publish = function(room){ +Room.prototype.publish = function(){ stats.mwse_rooms++; Room.rooms.set(this.id, this); ROOM_CREATED(this); diff --git a/frontend/Room.ts b/frontend/Room.ts index 6e19cc6..bd71cf5 100644 --- a/frontend/Room.ts +++ b/frontend/Room.ts @@ -125,7 +125,7 @@ export default class Room extends EventTarget return count; }else{ let {status, peers} = await this.mwse.EventPooling.request({ - type:'room/peer-count', + type:'room-peers', roomId: this.roomId, filter: filter || {} }) as {status:"success"|"fail", peers: string[]}; diff --git a/index.js b/index.js index a6fc7d4..b29e170 100644 --- a/index.js +++ b/index.js @@ -6,7 +6,7 @@ let {randomUUID} = require("crypto"); /** * Use Round Robin algorithm for cluster process load balancer */ -cluster.schedulingPolicy = cluster.SCHED_RR; +// cluster.schedulingPolicy = cluster.SCHED_RR; async function main() { diff --git a/package.json b/package.json index dd25ffe..b502511 100644 --- a/package.json +++ b/package.json @@ -41,12 +41,13 @@ "dependencies": { "compression": "^1.7.4", "express": "^4.18.2", - "joi": "^17.7.0", - "knex": "^2.3.0", - "sqlite3": "^5.1.2", - "systemjs": "^6.13.0", + "express-basic-auth": "^1.2.1", + "joi": "^17.9.2", + "knex": "^2.4.2", + "sqlite3": "^5.1.6", + "systemjs": "^6.14.1", "terminal-kit": "^3.0.0", - "typescript": "^4.9.3", + "typescript": "^5.1.3", "webrtc-adapter": "^8.2.2", "websocket": "^1.0.34" }, diff --git a/script/index.html b/script/index.html index 4b08831..c9ac489 100644 --- a/script/index.html +++ b/script/index.html @@ -669,39 +669,44 @@ let meters = new Map(); async function reloadData() { - let data = await fetchData(); - setTimeout(reloadData, 3000) + while(1) + { + await fetchData(); + await new Promise(ok => { + setTimeout(() => ok(), 3000) + }) + } }; let isFirst = true; async function fetchData() { - let response = await fetch("/stats",{ - method: "post", - credentials: "same-origin", - cache: "no-cache", - mode:"no-cors" - }).then(e => e.json()); - for (const { - ws_total_packs, - core, - mwse_rooms, - mwse_clients - } of response) { - if(!meters.has(core)) - { - let meter = CreateMeter(); - let container = meter.createCanvas(); - elem.appendChild(container); - meters.set(core, meter) - }; - let _meter = meters.get(core); - _meter.update( + let response = await fetch("/stats",{ + method: "post", + credentials: "same-origin", + cache: "no-cache", + mode:"no-cors" + }).then(e => e.json()); + for (const { ws_total_packs, - ws_total_packs < 30 ? 0 : ws_total_packs < 60 ? 1 : ws_total_packs < 90 ? 2 : 3, - "RM: "+mwse_rooms, - "CL: "+mwse_clients - ); - } + core, + mwse_rooms, + mwse_clients + } of response) { + if(!meters.has(core)) + { + let meter = CreateMeter(); + let container = meter.createCanvas(); + elem.appendChild(container); + meters.set(core, meter) + }; + let _meter = meters.get(core); + _meter.update( + ws_total_packs, + ws_total_packs < 30 ? 0 : ws_total_packs < 60 ? 1 : ws_total_packs < 90 ? 2 : 3, + "RM: "+mwse_rooms, + "CL: "+mwse_clients + ); + } } reloadData(); diff --git a/script/index.js b/script/index.js index 4635df5..ec40d59 100644 --- a/script/index.js +++ b/script/index.js @@ -1,2 +1,4113 @@ -(()=>{function e(e,t,r,n){Object.defineProperty(e,t,{get:r,set:n,enumerable:!0,configurable:!0})}function t(e){return e&&e.__esModule?e.default:e}class r{ws;endpoint;autoPair=!1;connected=!1;autoReconnect=!0;autoReconnectTimeout=3e3;autoReconnectTimer;constructor(e){this.endpoint=new URL(e.endpoint),"boolean"==typeof e.autoReconnect?this.autoReconnect=!0:e.autoReconnect&&(this.autoReconnect=!0,this.autoReconnectTimeout=e.autoReconnect.timeout)}connect(){this.autoReconnectTimer&&clearTimeout(this.autoReconnectTimer),this.ws=new WebSocket(this.endpoint.href),this.addWSEvents()}disconnect(){this.ws.close()}addWSEvents(){this.ws.addEventListener("open",()=>this.eventOpen()),this.ws.addEventListener("close",()=>this.eventClose()),this.ws.addEventListener("error",()=>this.eventError()),this.ws.addEventListener("message",({data:e})=>this.eventMessage(e))}eventOpen(){for(let e of(this.connected=!0,this.activeConnectionEvent))e(void 0)}eventClose(){this.connected=!1,this.autoReconnect&&(this.autoReconnectTimer=setTimeout(this.connect,this.autoReconnectTimeout))}eventError(){this.connected=!1}recaivePackEvent=[];onRecaivePack(e){this.recaivePackEvent.push(e)}activeConnectionEvent=[];onActive(e){this.connected?e():this.activeConnectionEvent.push(e)}eventMessage(e){if("string"==typeof e){let t=JSON.parse(e);for(let e of this.recaivePackEvent)e(t)}}tranferToServer(e){this.connected&&this.ws.send(JSON.stringify(e))}}class n{wsts;events=new Map;signals=new Map;requests=new Map;count=0;constructor(e){this.wsts=e}request(e){return new Promise((t,r)=>{let n=++this.count;this.wsts.WSTSProtocol.SendRequest(e,n),this.events.set(n,[e=>{t(e)},e=>{r(e)}])})}stream(e,t){let r=++this.count;this.wsts.WSTSProtocol.StartStream(e,r),this.events.set(r,[e=>{t(e)},()=>{}])}signal(e,t){let r=this.signals.get(e);r?r.push(t):this.signals.set(e,[t])}}class i{events={};emit(e,...t){if(this.events[e])for(let r of this.events[e])r(...t)}on(e,t){this.events[e]?this.events[e].push(t):this.events[e]=[t]}activeScope=!1;scope(e){this.activeScope?e():this.on("scope",e)}}class s{mwse;APNumber;APShortCode;APIPAddress;constructor(e){this.mwse=e}async allocAPIPAddress(){let{status:e,ip:t}=await this.mwse.EventPooling.request({type:"alloc/APIPAddress"});if("success"==e)return this.APIPAddress=t,t;throw Error("Error Allocated Access Point IP Address")}async allocAPNumber(){let{status:e,number:t}=await this.mwse.EventPooling.request({type:"alloc/APNumber"});if("success"==e)return this.APNumber=t,t;throw Error("Error Allocated Access Point Number")}async allocAPShortCode(){let{status:e,code:t}=await this.mwse.EventPooling.request({type:"alloc/APShortCode"});if("success"==e)return this.APShortCode=t,t;throw Error("Error Allocated Access Point Short Code")}async reallocAPIPAddress(){let{status:e,ip:t}=await this.mwse.EventPooling.request({type:"realloc/APIPAddress"});if("success"==e)return this.APIPAddress=t,t;throw Error("Error Reallocated Access Point IP Address")}async reallocAPNumber(){let{status:e,number:t}=await this.mwse.EventPooling.request({type:"realloc/APNumber"});if("success"==e)return this.APNumber=t,t;throw Error("Error Reallocated Access Point Number")}async reallocAPShortCode(){let{status:e,code:t}=await this.mwse.EventPooling.request({type:"realloc/APShortCode"});if("success"==e)return this.APShortCode=t,t;throw Error("Error Reallocated Access Point Short Code")}async releaseAPIPAddress(){let{status:e}=await this.mwse.EventPooling.request({type:"release/APIPAddress"});if("success"==e)this.APIPAddress=void 0;else throw Error("Error release Access Point IP Address")}async releaseAPNumber(){let{status:e}=await this.mwse.EventPooling.request({type:"release/APNumber"});if("success"==e)this.APNumber=void 0;else throw Error("Error release Access Point Number")}async releaseAPShortCode(){let{status:e}=await this.mwse.EventPooling.request({type:"release/APShortCode"});if("success"==e)this.APShortCode=void 0;else throw Error("Error release Access Point Short Code")}async queryAPIPAddress(e){let{status:t,socket:r}=await this.mwse.EventPooling.request({type:"whois/APIPAddress",whois:e});return"success"==t?r:null}async queryAPNumber(e){let{status:t,socket:r}=await this.mwse.EventPooling.request({type:"whois/APNumber",whois:e});return"success"==t?r:null}async queryAPShortCode(e){let{status:t,socket:r}=await this.mwse.EventPooling.request({type:"whois/APShortCode",whois:e});return"success"==t?r:null}}class o{peer;info={};constructor(e){this.peer=e}async fetch(e){if(e){let t=await this.peer.mwse.EventPooling.request({type:"peer/info",peer:this.peer.socketId,name:e});"success"==t.status?this.info=t.info:console.warn(t.message)}else{let e=await this.peer.mwse.EventPooling.request({type:"peer/info",peer:this.peer.socketId});"success"==e.status?this.info=e.info:console.warn(e.message)}return this.info}set(e,t){this.info[e]=t,this.peer.mwse.WSTSProtocol.SendOnly({type:"auth/info",name:e,value:t})}get(e){return e?this.info[e]:this.info}}"use strict";let a=!0,c=!0;function p(e,t,r){let n=e.match(t);return n&&n.length>=r&&parseInt(n[r],10)}function d(e,t,r){if(!e.RTCPeerConnection)return;let n=e.RTCPeerConnection.prototype,i=n.addEventListener;n.addEventListener=function(e,n){if(e!==t)return i.apply(this,arguments);let s=e=>{let t=r(e);t&&(n.handleEvent?n.handleEvent(t):n(t))};return this._eventMap=this._eventMap||{},this._eventMap[t]||(this._eventMap[t]=new Map),this._eventMap[t].set(n,s),i.apply(this,[e,s])};let s=n.removeEventListener;n.removeEventListener=function(e,r){if(e!==t||!this._eventMap||!this._eventMap[t]||!this._eventMap[t].has(r))return s.apply(this,arguments);let n=this._eventMap[t].get(r);return this._eventMap[t].delete(r),0===this._eventMap[t].size&&delete this._eventMap[t],0===Object.keys(this._eventMap).length&&delete this._eventMap,s.apply(this,[e,n])},Object.defineProperty(n,"on"+t,{get(){return this["_on"+t]},set(e){this["_on"+t]&&(this.removeEventListener(t,this["_on"+t]),delete this["_on"+t]),e&&this.addEventListener(t,this["_on"+t]=e)},enumerable:!0,configurable:!0})}function l(e){return"boolean"!=typeof e?Error("Argument type: "+typeof e+". Please use a boolean."):(a=e,e?"adapter.js logging disabled":"adapter.js logging enabled")}function h(e){return"boolean"!=typeof e?Error("Argument type: "+typeof e+". Please use a boolean."):(c=!e,"adapter.js deprecation warnings "+(e?"disabled":"enabled"))}function m(){"object"!=typeof window||a||"undefined"==typeof console||"function"!=typeof console.log||console.log.apply(console,arguments)}function u(e,t){c&&console.warn(e+" is deprecated, please use "+t+" instead.")}function f(e){return"[object Object]"===Object.prototype.toString.call(e)}function y(e,t,r){let n=r?"outbound-rtp":"inbound-rtp",i=new Map;if(null===t)return i;let s=[];return e.forEach(e=>{"track"===e.type&&e.trackIdentifier===t.id&&s.push(e)}),s.forEach(t=>{e.forEach(r=>{r.type===n&&r.trackId===t.id&&function e(t,r,n){!r||n.has(r.id)||(n.set(r.id,r),Object.keys(r).forEach(i=>{i.endsWith("Id")?e(t,t.get(r[i]),n):i.endsWith("Ids")&&r[i].forEach(r=>{e(t,t.get(r),n)})}))}(e,r,i)})}),i}"use strict";var g,v={};function C(e,t){let r=e&&e.navigator;if(!r.mediaDevices)return;let n=function(e){if("object"!=typeof e||e.mandatory||e.optional)return e;let t={};return Object.keys(e).forEach(r=>{if("require"===r||"advanced"===r||"mediaSource"===r)return;let n="object"==typeof e[r]?e[r]:{ideal:e[r]};void 0!==n.exact&&"number"==typeof n.exact&&(n.min=n.max=n.exact);let i=function(e,t){return e?e+t.charAt(0).toUpperCase()+t.slice(1):"deviceId"===t?"sourceId":t};if(void 0!==n.ideal){t.optional=t.optional||[];let e={};"number"==typeof n.ideal?(e[i("min",r)]=n.ideal,t.optional.push(e),(e={})[i("max",r)]=n.ideal,t.optional.push(e)):(e[i("",r)]=n.ideal,t.optional.push(e))}void 0!==n.exact&&"number"!=typeof n.exact?(t.mandatory=t.mandatory||{},t.mandatory[i("",r)]=n.exact):["min","max"].forEach(e=>{void 0!==n[e]&&(t.mandatory=t.mandatory||{},t.mandatory[i(e,r)]=n[e])})}),e.advanced&&(t.optional=(t.optional||[]).concat(e.advanced)),t},i=function(e,i){if(t.version>=61)return i(e);if((e=JSON.parse(JSON.stringify(e)))&&"object"==typeof e.audio){let t=function(e,t,r){t in e&&!(r in e)&&(e[r]=e[t],delete e[t])};t((e=JSON.parse(JSON.stringify(e))).audio,"autoGainControl","googAutoGainControl"),t(e.audio,"noiseSuppression","googNoiseSuppression"),e.audio=n(e.audio)}if(e&&"object"==typeof e.video){let s=e.video.facingMode;s=s&&("object"==typeof s?s:{ideal:s});let o=t.version<66;if(s&&("user"===s.exact||"environment"===s.exact||"user"===s.ideal||"environment"===s.ideal)&&!(r.mediaDevices.getSupportedConstraints&&r.mediaDevices.getSupportedConstraints().facingMode&&!o)){let t;if(delete e.video.facingMode,"environment"===s.exact||"environment"===s.ideal?t=["back","rear"]:("user"===s.exact||"user"===s.ideal)&&(t=["front"]),t)return r.mediaDevices.enumerateDevices().then(r=>{let o=(r=r.filter(e=>"videoinput"===e.kind)).find(e=>t.some(t=>e.label.toLowerCase().includes(t)));return!o&&r.length&&t.includes("back")&&(o=r[r.length-1]),o&&(e.video.deviceId=s.exact?{exact:o.deviceId}:{ideal:o.deviceId}),e.video=n(e.video),m("chrome: "+JSON.stringify(e)),i(e)})}e.video=n(e.video)}return m("chrome: "+JSON.stringify(e)),i(e)},s=function(e){return t.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(){return this.name+(this.message&&": ")+this.message}}};if(r.getUserMedia=(function(e,t,n){i(e,e=>{r.webkitGetUserMedia(e,t,e=>{n&&n(s(e))})})}).bind(r),r.mediaDevices.getUserMedia){let e=r.mediaDevices.getUserMedia.bind(r.mediaDevices);r.mediaDevices.getUserMedia=function(t){return i(t,t=>e(t).then(e=>{if(t.audio&&!e.getAudioTracks().length||t.video&&!e.getVideoTracks().length)throw e.getTracks().forEach(e=>{e.stop()}),new DOMException("","NotFoundError");return e},e=>Promise.reject(s(e))))}}}"use strict";function P(e,t){if((!e.navigator.mediaDevices||!("getDisplayMedia"in e.navigator.mediaDevices))&&e.navigator.mediaDevices){if("function"!=typeof t){console.error("shimGetDisplayMedia: getSourceId argument is not a function");return}e.navigator.mediaDevices.getDisplayMedia=function(r){return t(r).then(t=>{let n=r.video&&r.video.width,i=r.video&&r.video.height,s=r.video&&r.video.frameRate;return r.video={mandatory:{chromeMediaSource:"desktop",chromeMediaSourceId:t,maxFrameRate:s||3}},n&&(r.video.mandatory.maxWidth=n),i&&(r.video.mandatory.maxHeight=i),e.navigator.mediaDevices.getUserMedia(r)})}}}"use strict";function S(e){e.MediaStream=e.MediaStream||e.webkitMediaStream}function T(e){if("object"!=typeof e||!e.RTCPeerConnection||"ontrack"in e.RTCPeerConnection.prototype)d(e,"track",e=>(e.transceiver||Object.defineProperty(e,"transceiver",{value:{receiver:e.receiver}}),e));else{Object.defineProperty(e.RTCPeerConnection.prototype,"ontrack",{get(){return this._ontrack},set(e){this._ontrack&&this.removeEventListener("track",this._ontrack),this.addEventListener("track",this._ontrack=e)},enumerable:!0,configurable:!0});let t=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(){return this._ontrackpoly||(this._ontrackpoly=t=>{t.stream.addEventListener("addtrack",r=>{let n;n=e.RTCPeerConnection.prototype.getReceivers?this.getReceivers().find(e=>e.track&&e.track.id===r.track.id):{track:r.track};let i=new Event("track");i.track=r.track,i.receiver=n,i.transceiver={receiver:n},i.streams=[t.stream],this.dispatchEvent(i)}),t.stream.getTracks().forEach(r=>{let n;n=e.RTCPeerConnection.prototype.getReceivers?this.getReceivers().find(e=>e.track&&e.track.id===r.id):{track:r};let i=new Event("track");i.track=r,i.receiver=n,i.transceiver={receiver:n},i.streams=[t.stream],this.dispatchEvent(i)})},this.addEventListener("addstream",this._ontrackpoly)),t.apply(this,arguments)}}}function R(e){if("object"==typeof e&&e.RTCPeerConnection&&!("getSenders"in e.RTCPeerConnection.prototype)&&"createDTMFSender"in e.RTCPeerConnection.prototype){let t=function(e,t){return{track:t,get dtmf(){return void 0===this._dtmf&&("audio"===t.kind?this._dtmf=e.createDTMFSender(t):this._dtmf=null),this._dtmf},_pc:e}};if(!e.RTCPeerConnection.prototype.getSenders){e.RTCPeerConnection.prototype.getSenders=function(){return this._senders=this._senders||[],this._senders.slice()};let r=e.RTCPeerConnection.prototype.addTrack;e.RTCPeerConnection.prototype.addTrack=function(e,n){let i=r.apply(this,arguments);return i||(i=t(this,e),this._senders.push(i)),i};let n=e.RTCPeerConnection.prototype.removeTrack;e.RTCPeerConnection.prototype.removeTrack=function(e){n.apply(this,arguments);let t=this._senders.indexOf(e);-1!==t&&this._senders.splice(t,1)}}let r=e.RTCPeerConnection.prototype.addStream;e.RTCPeerConnection.prototype.addStream=function(e){this._senders=this._senders||[],r.apply(this,[e]),e.getTracks().forEach(e=>{this._senders.push(t(this,e))})};let n=e.RTCPeerConnection.prototype.removeStream;e.RTCPeerConnection.prototype.removeStream=function(e){this._senders=this._senders||[],n.apply(this,[e]),e.getTracks().forEach(e=>{let t=this._senders.find(t=>t.track===e);t&&this._senders.splice(this._senders.indexOf(t),1)})}}else if("object"==typeof e&&e.RTCPeerConnection&&"getSenders"in e.RTCPeerConnection.prototype&&"createDTMFSender"in e.RTCPeerConnection.prototype&&e.RTCRtpSender&&!("dtmf"in e.RTCRtpSender.prototype)){let t=e.RTCPeerConnection.prototype.getSenders;e.RTCPeerConnection.prototype.getSenders=function(){let e=t.apply(this,[]);return e.forEach(e=>e._pc=this),e},Object.defineProperty(e.RTCRtpSender.prototype,"dtmf",{get(){return void 0===this._dtmf&&("audio"===this.track.kind?this._dtmf=this._pc.createDTMFSender(this.track):this._dtmf=null),this._dtmf}})}}function w(e){if(!e.RTCPeerConnection)return;let t=e.RTCPeerConnection.prototype.getStats;e.RTCPeerConnection.prototype.getStats=function(){let[e,r,n]=arguments;if(arguments.length>0&&"function"==typeof e)return t.apply(this,arguments);if(0===t.length&&(0==arguments.length||"function"!=typeof e))return t.apply(this,[]);let i=function(e){let t={},r=e.result();return r.forEach(e=>{let r={id:e.id,timestamp:e.timestamp,type:{localcandidate:"local-candidate",remotecandidate:"remote-candidate"}[e.type]||e.type};e.names().forEach(t=>{r[t]=e.stat(t)}),t[r.id]=r}),t},s=function(e){return new Map(Object.keys(e).map(t=>[t,e[t]]))};return arguments.length>=2?t.apply(this,[function(e){r(s(i(e)))},e]):new Promise((e,r)=>{t.apply(this,[function(t){e(s(i(t)))},r])}).then(r,n)}}function E(e){if(!("object"==typeof e&&e.RTCPeerConnection&&e.RTCRtpSender&&e.RTCRtpReceiver))return;if(!("getStats"in e.RTCRtpSender.prototype)){let t=e.RTCPeerConnection.prototype.getSenders;t&&(e.RTCPeerConnection.prototype.getSenders=function(){let e=t.apply(this,[]);return e.forEach(e=>e._pc=this),e});let r=e.RTCPeerConnection.prototype.addTrack;r&&(e.RTCPeerConnection.prototype.addTrack=function(){let e=r.apply(this,arguments);return e._pc=this,e}),e.RTCRtpSender.prototype.getStats=function(){let e=this;return this._pc.getStats().then(t=>y(t,e.track,!0))}}if(!("getStats"in e.RTCRtpReceiver.prototype)){let t=e.RTCPeerConnection.prototype.getReceivers;t&&(e.RTCPeerConnection.prototype.getReceivers=function(){let e=t.apply(this,[]);return e.forEach(e=>e._pc=this),e}),d(e,"track",e=>(e.receiver._pc=e.srcElement,e)),e.RTCRtpReceiver.prototype.getStats=function(){let e=this;return this._pc.getStats().then(t=>y(t,e.track,!1))}}if(!("getStats"in e.RTCRtpSender.prototype&&"getStats"in e.RTCRtpReceiver.prototype))return;let t=e.RTCPeerConnection.prototype.getStats;e.RTCPeerConnection.prototype.getStats=function(){if(arguments.length>0&&arguments[0]instanceof e.MediaStreamTrack){let e,t,r;let n=arguments[0];return(this.getSenders().forEach(t=>{t.track===n&&(e?r=!0:e=t)}),this.getReceivers().forEach(e=>(e.track===n&&(t?r=!0:t=e),e.track===n)),r||e&&t)?Promise.reject(new DOMException("There are more than one sender or receiver for the track.","InvalidAccessError")):e?e.getStats():t?t.getStats():Promise.reject(new DOMException("There is no sender or receiver for the track.","InvalidAccessError"))}return t.apply(this,arguments)}}function b(e){e.RTCPeerConnection.prototype.getLocalStreams=function(){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},Object.keys(this._shimmedLocalStreams).map(e=>this._shimmedLocalStreams[e][0])};let t=e.RTCPeerConnection.prototype.addTrack;e.RTCPeerConnection.prototype.addTrack=function(e,r){if(!r)return t.apply(this,arguments);this._shimmedLocalStreams=this._shimmedLocalStreams||{};let n=t.apply(this,arguments);return this._shimmedLocalStreams[r.id]?-1===this._shimmedLocalStreams[r.id].indexOf(n)&&this._shimmedLocalStreams[r.id].push(n):this._shimmedLocalStreams[r.id]=[r,n],n};let r=e.RTCPeerConnection.prototype.addStream;e.RTCPeerConnection.prototype.addStream=function(e){this._shimmedLocalStreams=this._shimmedLocalStreams||{},e.getTracks().forEach(e=>{let t=this.getSenders().find(t=>t.track===e);if(t)throw new DOMException("Track already exists.","InvalidAccessError")});let t=this.getSenders();r.apply(this,arguments);let n=this.getSenders().filter(e=>-1===t.indexOf(e));this._shimmedLocalStreams[e.id]=[e].concat(n)};let n=e.RTCPeerConnection.prototype.removeStream;e.RTCPeerConnection.prototype.removeStream=function(e){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},delete this._shimmedLocalStreams[e.id],n.apply(this,arguments)};let i=e.RTCPeerConnection.prototype.removeTrack;e.RTCPeerConnection.prototype.removeTrack=function(e){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},e&&Object.keys(this._shimmedLocalStreams).forEach(t=>{let r=this._shimmedLocalStreams[t].indexOf(e);-1!==r&&this._shimmedLocalStreams[t].splice(r,1),1===this._shimmedLocalStreams[t].length&&delete this._shimmedLocalStreams[t]}),i.apply(this,arguments)}}function k(e,t){if(!e.RTCPeerConnection)return;if(e.RTCPeerConnection.prototype.addTrack&&t.version>=65)return b(e);let r=e.RTCPeerConnection.prototype.getLocalStreams;e.RTCPeerConnection.prototype.getLocalStreams=function(){let e=r.apply(this);return this._reverseStreams=this._reverseStreams||{},e.map(e=>this._reverseStreams[e.id])};let n=e.RTCPeerConnection.prototype.addStream;e.RTCPeerConnection.prototype.addStream=function(t){if(this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},t.getTracks().forEach(e=>{let t=this.getSenders().find(t=>t.track===e);if(t)throw new DOMException("Track already exists.","InvalidAccessError")}),!this._reverseStreams[t.id]){let r=new e.MediaStream(t.getTracks());this._streams[t.id]=r,this._reverseStreams[r.id]=t,t=r}n.apply(this,[t])};let i=e.RTCPeerConnection.prototype.removeStream;function s(e,t){let r=t.sdp;return Object.keys(e._reverseStreams||[]).forEach(t=>{let n=e._reverseStreams[t],i=e._streams[n.id];r=r.replace(RegExp(i.id,"g"),n.id)}),new RTCSessionDescription({type:t.type,sdp:r})}e.RTCPeerConnection.prototype.removeStream=function(e){this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},i.apply(this,[this._streams[e.id]||e]),delete this._reverseStreams[this._streams[e.id]?this._streams[e.id].id:e.id],delete this._streams[e.id]},e.RTCPeerConnection.prototype.addTrack=function(t,r){if("closed"===this.signalingState)throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");let n=[].slice.call(arguments,1);if(1!==n.length||!n[0].getTracks().find(e=>e===t))throw new DOMException("The adapter.js addTrack polyfill only supports a single stream which is associated with the specified track.","NotSupportedError");let i=this.getSenders().find(e=>e.track===t);if(i)throw new DOMException("Track already exists.","InvalidAccessError");this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{};let s=this._streams[r.id];if(s)s.addTrack(t),Promise.resolve().then(()=>{this.dispatchEvent(new Event("negotiationneeded"))});else{let n=new e.MediaStream([t]);this._streams[r.id]=n,this._reverseStreams[n.id]=r,this.addStream(n)}return this.getSenders().find(e=>e.track===t)},["createOffer","createAnswer"].forEach(function(t){let r=e.RTCPeerConnection.prototype[t];e.RTCPeerConnection.prototype[t]=({[t](){let e=arguments,t=arguments.length&&"function"==typeof arguments[0];return t?r.apply(this,[t=>{let r=s(this,t);e[0].apply(null,[r])},t=>{e[1]&&e[1].apply(null,t)},arguments[2]]):r.apply(this,arguments).then(e=>s(this,e))}})[t]});let o=e.RTCPeerConnection.prototype.setLocalDescription;e.RTCPeerConnection.prototype.setLocalDescription=function(){var e,t;let r;return arguments.length&&arguments[0].type&&(arguments[0]=(e=this,t=arguments[0],r=t.sdp,Object.keys(e._reverseStreams||[]).forEach(t=>{let n=e._reverseStreams[t],i=e._streams[n.id];r=r.replace(RegExp(n.id,"g"),i.id)}),new RTCSessionDescription({type:t.type,sdp:r}))),o.apply(this,arguments)};let a=Object.getOwnPropertyDescriptor(e.RTCPeerConnection.prototype,"localDescription");Object.defineProperty(e.RTCPeerConnection.prototype,"localDescription",{get(){let e=a.get.apply(this);return""===e.type?e:s(this,e)}}),e.RTCPeerConnection.prototype.removeTrack=function(e){let t;if("closed"===this.signalingState)throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");if(!e._pc)throw new DOMException("Argument 1 of RTCPeerConnection.removeTrack does not implement interface RTCRtpSender.","TypeError");let r=e._pc===this;if(!r)throw new DOMException("Sender was not created by this connection.","InvalidAccessError");this._streams=this._streams||{},Object.keys(this._streams).forEach(r=>{let n=this._streams[r].getTracks().find(t=>e.track===t);n&&(t=this._streams[r])}),t&&(1===t.getTracks().length?this.removeStream(this._reverseStreams[t.id]):t.removeTrack(e.track),this.dispatchEvent(new Event("negotiationneeded")))}}function _(e,t){!e.RTCPeerConnection&&e.webkitRTCPeerConnection&&(e.RTCPeerConnection=e.webkitRTCPeerConnection),e.RTCPeerConnection&&t.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach(function(t){let r=e.RTCPeerConnection.prototype[t];e.RTCPeerConnection.prototype[t]=({[t](){return arguments[0]=new("addIceCandidate"===t?e.RTCIceCandidate:e.RTCSessionDescription)(arguments[0]),r.apply(this,arguments)}})[t]})}function I(e,t){d(e,"negotiationneeded",e=>{let r=e.target;if(!(t.version<72)&&(!r.getConfiguration||"plan-b"!==r.getConfiguration().sdpSemantics)||"stable"===r.signalingState)return e})}"use strict";e(v,"shimMediaStream",()=>S),e(v,"shimOnTrack",()=>T),e(v,"shimGetSendersWithDtmf",()=>R),e(v,"shimGetStats",()=>w),e(v,"shimSenderReceiverGetStats",()=>E),e(v,"shimAddTrackRemoveTrackWithNative",()=>b),e(v,"shimAddTrackRemoveTrack",()=>k),e(v,"shimPeerConnection",()=>_),e(v,"fixNegotiationNeeded",()=>I),e(v,"shimGetUserMedia",()=>C),e(v,"shimGetDisplayMedia",()=>P);var A={};function D(e,t){let r=e&&e.navigator,n=e&&e.MediaStreamTrack;if(r.getUserMedia=function(e,t,n){u("navigator.getUserMedia","navigator.mediaDevices.getUserMedia"),r.mediaDevices.getUserMedia(e).then(t,n)},!(t.version>55&&"autoGainControl"in r.mediaDevices.getSupportedConstraints())){let e=function(e,t,r){t in e&&!(r in e)&&(e[r]=e[t],delete e[t])},t=r.mediaDevices.getUserMedia.bind(r.mediaDevices);if(r.mediaDevices.getUserMedia=function(r){return"object"==typeof r&&"object"==typeof r.audio&&(e((r=JSON.parse(JSON.stringify(r))).audio,"autoGainControl","mozAutoGainControl"),e(r.audio,"noiseSuppression","mozNoiseSuppression")),t(r)},n&&n.prototype.getSettings){let t=n.prototype.getSettings;n.prototype.getSettings=function(){let r=t.apply(this,arguments);return e(r,"mozAutoGainControl","autoGainControl"),e(r,"mozNoiseSuppression","noiseSuppression"),r}}if(n&&n.prototype.applyConstraints){let t=n.prototype.applyConstraints;n.prototype.applyConstraints=function(r){return"audio"===this.kind&&"object"==typeof r&&(e(r=JSON.parse(JSON.stringify(r)),"autoGainControl","mozAutoGainControl"),e(r,"noiseSuppression","mozNoiseSuppression")),t.apply(this,[r])}}}}"use strict";function M(e,t){e.navigator.mediaDevices&&"getDisplayMedia"in e.navigator.mediaDevices||!e.navigator.mediaDevices||(e.navigator.mediaDevices.getDisplayMedia=function(r){if(!(r&&r.video)){let e=new DOMException("getDisplayMedia without video constraints is undefined");return e.name="NotFoundError",e.code=8,Promise.reject(e)}return!0===r.video?r.video={mediaSource:t}:r.video.mediaSource=t,e.navigator.mediaDevices.getUserMedia(r)})}"use strict";function x(e){"object"==typeof e&&e.RTCTrackEvent&&"receiver"in e.RTCTrackEvent.prototype&&!("transceiver"in e.RTCTrackEvent.prototype)&&Object.defineProperty(e.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function O(e,t){if("object"!=typeof e||!(e.RTCPeerConnection||e.mozRTCPeerConnection))return;!e.RTCPeerConnection&&e.mozRTCPeerConnection&&(e.RTCPeerConnection=e.mozRTCPeerConnection),t.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach(function(t){let r=e.RTCPeerConnection.prototype[t];e.RTCPeerConnection.prototype[t]=({[t](){return arguments[0]=new("addIceCandidate"===t?e.RTCIceCandidate:e.RTCSessionDescription)(arguments[0]),r.apply(this,arguments)}})[t]});let r={inboundrtp:"inbound-rtp",outboundrtp:"outbound-rtp",candidatepair:"candidate-pair",localcandidate:"local-candidate",remotecandidate:"remote-candidate"},n=e.RTCPeerConnection.prototype.getStats;e.RTCPeerConnection.prototype.getStats=function(){let[e,i,s]=arguments;return n.apply(this,[e||null]).then(e=>{if(t.version<53&&!i)try{e.forEach(e=>{e.type=r[e.type]||e.type})}catch(t){if("TypeError"!==t.name)throw t;e.forEach((t,n)=>{e.set(n,Object.assign({},t,{type:r[t.type]||t.type}))})}return e}).then(i,s)}}function L(e){if(!("object"==typeof e&&e.RTCPeerConnection&&e.RTCRtpSender)||e.RTCRtpSender&&"getStats"in e.RTCRtpSender.prototype)return;let t=e.RTCPeerConnection.prototype.getSenders;t&&(e.RTCPeerConnection.prototype.getSenders=function(){let e=t.apply(this,[]);return e.forEach(e=>e._pc=this),e});let r=e.RTCPeerConnection.prototype.addTrack;r&&(e.RTCPeerConnection.prototype.addTrack=function(){let e=r.apply(this,arguments);return e._pc=this,e}),e.RTCRtpSender.prototype.getStats=function(){return this.track?this._pc.getStats(this.track):Promise.resolve(new Map)}}function j(e){if(!("object"==typeof e&&e.RTCPeerConnection&&e.RTCRtpSender)||e.RTCRtpSender&&"getStats"in e.RTCRtpReceiver.prototype)return;let t=e.RTCPeerConnection.prototype.getReceivers;t&&(e.RTCPeerConnection.prototype.getReceivers=function(){let e=t.apply(this,[]);return e.forEach(e=>e._pc=this),e}),d(e,"track",e=>(e.receiver._pc=e.srcElement,e)),e.RTCRtpReceiver.prototype.getStats=function(){return this._pc.getStats(this.track)}}function N(e){!e.RTCPeerConnection||"removeStream"in e.RTCPeerConnection.prototype||(e.RTCPeerConnection.prototype.removeStream=function(e){u("removeStream","removeTrack"),this.getSenders().forEach(t=>{t.track&&e.getTracks().includes(t.track)&&this.removeTrack(t)})})}function F(e){e.DataChannel&&!e.RTCDataChannel&&(e.RTCDataChannel=e.DataChannel)}function q(e){if(!("object"==typeof e&&e.RTCPeerConnection))return;let t=e.RTCPeerConnection.prototype.addTransceiver;t&&(e.RTCPeerConnection.prototype.addTransceiver=function(){this.setParametersPromises=[];let e=arguments[1]&&arguments[1].sendEncodings;void 0===e&&(e=[]),e=[...e];let r=e.length>0;r&&e.forEach(e=>{if("rid"in e&&!/^[a-z0-9]{0,16}$/i.test(e.rid))throw TypeError("Invalid RID value provided.");if("scaleResolutionDownBy"in e&&!(parseFloat(e.scaleResolutionDownBy)>=1))throw RangeError("scale_resolution_down_by must be >= 1.0");if("maxFramerate"in e&&!(parseFloat(e.maxFramerate)>=0))throw RangeError("max_framerate must be >= 0.0")});let n=t.apply(this,arguments);if(r){let{sender:t}=n,r=t.getParameters();"encodings"in r&&(1!==r.encodings.length||0!==Object.keys(r.encodings[0]).length)||(r.encodings=e,t.sendEncodings=e,this.setParametersPromises.push(t.setParameters(r).then(()=>{delete t.sendEncodings}).catch(()=>{delete t.sendEncodings})))}return n})}function U(e){if(!("object"==typeof e&&e.RTCRtpSender))return;let t=e.RTCRtpSender.prototype.getParameters;t&&(e.RTCRtpSender.prototype.getParameters=function(){let e=t.apply(this,arguments);return"encodings"in e||(e.encodings=[].concat(this.sendEncodings||[{}])),e})}function z(e){if(!("object"==typeof e&&e.RTCPeerConnection))return;let t=e.RTCPeerConnection.prototype.createOffer;e.RTCPeerConnection.prototype.createOffer=function(){return this.setParametersPromises&&this.setParametersPromises.length?Promise.all(this.setParametersPromises).then(()=>t.apply(this,arguments)).finally(()=>{this.setParametersPromises=[]}):t.apply(this,arguments)}}function G(e){if(!("object"==typeof e&&e.RTCPeerConnection))return;let t=e.RTCPeerConnection.prototype.createAnswer;e.RTCPeerConnection.prototype.createAnswer=function(){return this.setParametersPromises&&this.setParametersPromises.length?Promise.all(this.setParametersPromises).then(()=>t.apply(this,arguments)).finally(()=>{this.setParametersPromises=[]}):t.apply(this,arguments)}}"use strict";e(A,"shimOnTrack",()=>x),e(A,"shimPeerConnection",()=>O),e(A,"shimSenderGetStats",()=>L),e(A,"shimReceiverGetStats",()=>j),e(A,"shimRemoveStream",()=>N),e(A,"shimRTCDataChannel",()=>F),e(A,"shimAddTransceiver",()=>q),e(A,"shimGetParameters",()=>U),e(A,"shimCreateOffer",()=>z),e(A,"shimCreateAnswer",()=>G),e(A,"shimGetUserMedia",()=>D),e(A,"shimGetDisplayMedia",()=>M);var J={};function W(e){if("object"==typeof e&&e.RTCPeerConnection){if("getLocalStreams"in e.RTCPeerConnection.prototype||(e.RTCPeerConnection.prototype.getLocalStreams=function(){return this._localStreams||(this._localStreams=[]),this._localStreams}),!("addStream"in e.RTCPeerConnection.prototype)){let t=e.RTCPeerConnection.prototype.addTrack;e.RTCPeerConnection.prototype.addStream=function(e){this._localStreams||(this._localStreams=[]),this._localStreams.includes(e)||this._localStreams.push(e),e.getAudioTracks().forEach(r=>t.call(this,r,e)),e.getVideoTracks().forEach(r=>t.call(this,r,e))},e.RTCPeerConnection.prototype.addTrack=function(e,...r){return r&&r.forEach(e=>{this._localStreams?this._localStreams.includes(e)||this._localStreams.push(e):this._localStreams=[e]}),t.apply(this,arguments)}}"removeStream"in e.RTCPeerConnection.prototype||(e.RTCPeerConnection.prototype.removeStream=function(e){this._localStreams||(this._localStreams=[]);let t=this._localStreams.indexOf(e);if(-1===t)return;this._localStreams.splice(t,1);let r=e.getTracks();this.getSenders().forEach(e=>{r.includes(e.track)&&this.removeTrack(e)})})}}function V(e){if("object"==typeof e&&e.RTCPeerConnection&&("getRemoteStreams"in e.RTCPeerConnection.prototype||(e.RTCPeerConnection.prototype.getRemoteStreams=function(){return this._remoteStreams?this._remoteStreams:[]}),!("onaddstream"in e.RTCPeerConnection.prototype))){Object.defineProperty(e.RTCPeerConnection.prototype,"onaddstream",{get(){return this._onaddstream},set(e){this._onaddstream&&(this.removeEventListener("addstream",this._onaddstream),this.removeEventListener("track",this._onaddstreampoly)),this.addEventListener("addstream",this._onaddstream=e),this.addEventListener("track",this._onaddstreampoly=e=>{e.streams.forEach(e=>{if(this._remoteStreams||(this._remoteStreams=[]),this._remoteStreams.includes(e))return;this._remoteStreams.push(e);let t=new Event("addstream");t.stream=e,this.dispatchEvent(t)})})}});let t=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(){let e=this;return this._onaddstreampoly||this.addEventListener("track",this._onaddstreampoly=function(t){t.streams.forEach(t=>{if(e._remoteStreams||(e._remoteStreams=[]),e._remoteStreams.indexOf(t)>=0)return;e._remoteStreams.push(t);let r=new Event("addstream");r.stream=t,e.dispatchEvent(r)})}),t.apply(e,arguments)}}}function B(e){if("object"!=typeof e||!e.RTCPeerConnection)return;let t=e.RTCPeerConnection.prototype,r=t.createOffer,n=t.createAnswer,i=t.setLocalDescription,s=t.setRemoteDescription,o=t.addIceCandidate;t.createOffer=function(e,t){let n=arguments.length>=2?arguments[2]:arguments[0],i=r.apply(this,[n]);return t?(i.then(e,t),Promise.resolve()):i},t.createAnswer=function(e,t){let r=arguments.length>=2?arguments[2]:arguments[0],i=n.apply(this,[r]);return t?(i.then(e,t),Promise.resolve()):i};let a=function(e,t,r){let n=i.apply(this,[e]);return r?(n.then(t,r),Promise.resolve()):n};t.setLocalDescription=a,a=function(e,t,r){let n=s.apply(this,[e]);return r?(n.then(t,r),Promise.resolve()):n},t.setRemoteDescription=a,a=function(e,t,r){let n=o.apply(this,[e]);return r?(n.then(t,r),Promise.resolve()):n},t.addIceCandidate=a}function K(e){let t=e&&e.navigator;if(t.mediaDevices&&t.mediaDevices.getUserMedia){let e=t.mediaDevices,r=e.getUserMedia.bind(e);t.mediaDevices.getUserMedia=e=>r(Y(e))}!t.getUserMedia&&t.mediaDevices&&t.mediaDevices.getUserMedia&&(t.getUserMedia=(function(e,r,n){t.mediaDevices.getUserMedia(e).then(r,n)}).bind(t))}function Y(e){return e&&void 0!==e.video?Object.assign({},e,{video:function e(t){return f(t)?Object.keys(t).reduce(function(r,n){let i=f(t[n]),s=i?e(t[n]):t[n],o=i&&!Object.keys(s).length;return void 0===s||o?r:Object.assign(r,{[n]:s})},{}):t}(e.video)}):e}function H(e){if(!e.RTCPeerConnection)return;let t=e.RTCPeerConnection;e.RTCPeerConnection=function(e,r){if(e&&e.iceServers){let t=[];for(let r=0;rt.generateCertificate})}function X(e){"object"==typeof e&&e.RTCTrackEvent&&"receiver"in e.RTCTrackEvent.prototype&&!("transceiver"in e.RTCTrackEvent.prototype)&&Object.defineProperty(e.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function Q(e){let t=e.RTCPeerConnection.prototype.createOffer;e.RTCPeerConnection.prototype.createOffer=function(e){if(e){void 0!==e.offerToReceiveAudio&&(e.offerToReceiveAudio=!!e.offerToReceiveAudio);let t=this.getTransceivers().find(e=>"audio"===e.receiver.track.kind);!1===e.offerToReceiveAudio&&t?"sendrecv"===t.direction?t.setDirection?t.setDirection("sendonly"):t.direction="sendonly":"recvonly"===t.direction&&(t.setDirection?t.setDirection("inactive"):t.direction="inactive"):!0!==e.offerToReceiveAudio||t||this.addTransceiver("audio",{direction:"recvonly"}),void 0!==e.offerToReceiveVideo&&(e.offerToReceiveVideo=!!e.offerToReceiveVideo);let r=this.getTransceivers().find(e=>"video"===e.receiver.track.kind);!1===e.offerToReceiveVideo&&r?"sendrecv"===r.direction?r.setDirection?r.setDirection("sendonly"):r.direction="sendonly":"recvonly"===r.direction&&(r.setDirection?r.setDirection("inactive"):r.direction="inactive"):!0!==e.offerToReceiveVideo||r||this.addTransceiver("video",{direction:"recvonly"})}return t.apply(this,arguments)}}function $(e){"object"!=typeof e||e.AudioContext||(e.AudioContext=e.webkitAudioContext)}e(J,"shimLocalStreamsAPI",()=>W),e(J,"shimRemoteStreamsAPI",()=>V),e(J,"shimCallbacksAPI",()=>B),e(J,"shimGetUserMedia",()=>K),e(J,"shimConstraints",()=>Y),e(J,"shimRTCIceServerUrls",()=>H),e(J,"shimTrackEventTransceiver",()=>X),e(J,"shimCreateOfferLegacy",()=>Q),e(J,"shimAudioContext",()=>$);var Z={};"use strict";e(Z,"shimRTCIceCandidate",()=>er),e(Z,"shimRTCIceCandidateRelayProtocol",()=>en),e(Z,"shimMaxMessageSize",()=>ei),e(Z,"shimSendThrowTypeError",()=>es),e(Z,"shimConnectionState",()=>eo),e(Z,"removeExtmapAllowMixed",()=>ea),e(Z,"shimAddIceCandidateNullOrEmpty",()=>ec),e(Z,"shimParameterlessSetLocalDescription",()=>ep);var ee={};"use strict";let et={};function er(e){if(!e.RTCIceCandidate||e.RTCIceCandidate&&"foundation"in e.RTCIceCandidate.prototype)return;let r=e.RTCIceCandidate;e.RTCIceCandidate=function(e){if("object"==typeof e&&e.candidate&&0===e.candidate.indexOf("a=")&&((e=JSON.parse(JSON.stringify(e))).candidate=e.candidate.substring(2)),e.candidate&&e.candidate.length){let n=new r(e),i=t(ee).parseCandidate(e.candidate);for(let e in i)e in n||Object.defineProperty(n,e,{value:i[e]});return n.toJSON=function(){return{candidate:n.candidate,sdpMid:n.sdpMid,sdpMLineIndex:n.sdpMLineIndex,usernameFragment:n.usernameFragment}},n}return new r(e)},e.RTCIceCandidate.prototype=r.prototype,d(e,"icecandidate",t=>(t.candidate&&Object.defineProperty(t,"candidate",{value:new e.RTCIceCandidate(t.candidate),writable:"false"}),t))}function en(e){!e.RTCIceCandidate||e.RTCIceCandidate&&"relayProtocol"in e.RTCIceCandidate.prototype||d(e,"icecandidate",e=>{if(e.candidate){let r=t(ee).parseCandidate(e.candidate.candidate);"relay"===r.type&&(e.candidate.relayProtocol=({0:"tls",1:"tcp",2:"udp"})[r.priority>>24])}return e})}function ei(e,r){if(!e.RTCPeerConnection)return;"sctp"in e.RTCPeerConnection.prototype||Object.defineProperty(e.RTCPeerConnection.prototype,"sctp",{get(){return void 0===this._sctp?null:this._sctp}});let n=function(e){if(!e||!e.sdp)return!1;let r=t(ee).splitSections(e.sdp);return r.shift(),r.some(e=>{let r=t(ee).parseMLine(e);return r&&"application"===r.kind&&-1!==r.protocol.indexOf("SCTP")})},i=function(e){let t=e.sdp.match(/mozilla...THIS_IS_SDPARTA-(\d+)/);if(null===t||t.length<2)return -1;let r=parseInt(t[1],10);return r!=r?-1:r},s=function(e){let t=65536;return"firefox"===r.browser&&(t=r.version<57?-1===e?16384:2147483637:r.version<60?57===r.version?65535:65536:2147483637),t},o=function(e,n){let i=65536;"firefox"===r.browser&&57===r.version&&(i=65535);let s=t(ee).matchPrefix(e.sdp,"a=max-message-size:");return s.length>0?i=parseInt(s[0].substring(19),10):"firefox"===r.browser&&-1!==n&&(i=2147483637),i},a=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(){if(this._sctp=null,"chrome"===r.browser&&r.version>=76){let{sdpSemantics:e}=this.getConfiguration();"plan-b"===e&&Object.defineProperty(this,"sctp",{get(){return void 0===this._sctp?null:this._sctp},enumerable:!0,configurable:!0})}if(n(arguments[0])){let e;let t=i(arguments[0]),r=s(t),n=o(arguments[0],t);e=0===r&&0===n?Number.POSITIVE_INFINITY:0===r||0===n?Math.max(r,n):Math.min(r,n);let a={};Object.defineProperty(a,"maxMessageSize",{get:()=>e}),this._sctp=a}return a.apply(this,arguments)}}function es(e){if(!(e.RTCPeerConnection&&"createDataChannel"in e.RTCPeerConnection.prototype))return;function t(e,t){let r=e.send;e.send=function(){let n=arguments[0],i=n.length||n.size||n.byteLength;if("open"===e.readyState&&t.sctp&&i>t.sctp.maxMessageSize)throw TypeError("Message too large (can send a maximum of "+t.sctp.maxMessageSize+" bytes)");return r.apply(e,arguments)}}let r=e.RTCPeerConnection.prototype.createDataChannel;e.RTCPeerConnection.prototype.createDataChannel=function(){let e=r.apply(this,arguments);return t(e,this),e},d(e,"datachannel",e=>(t(e.channel,e.target),e))}function eo(e){if(!e.RTCPeerConnection||"connectionState"in e.RTCPeerConnection.prototype)return;let t=e.RTCPeerConnection.prototype;Object.defineProperty(t,"connectionState",{get(){return({completed:"connected",checking:"connecting"})[this.iceConnectionState]||this.iceConnectionState},enumerable:!0,configurable:!0}),Object.defineProperty(t,"onconnectionstatechange",{get(){return this._onconnectionstatechange||null},set(e){this._onconnectionstatechange&&(this.removeEventListener("connectionstatechange",this._onconnectionstatechange),delete this._onconnectionstatechange),e&&this.addEventListener("connectionstatechange",this._onconnectionstatechange=e)},enumerable:!0,configurable:!0}),["setLocalDescription","setRemoteDescription"].forEach(e=>{let r=t[e];t[e]=function(){return this._connectionstatechangepoly||(this._connectionstatechangepoly=e=>{let t=e.target;if(t._lastConnectionState!==t.connectionState){t._lastConnectionState=t.connectionState;let r=new Event("connectionstatechange",e);t.dispatchEvent(r)}return e},this.addEventListener("iceconnectionstatechange",this._connectionstatechangepoly)),r.apply(this,arguments)}})}function ea(e,t){if(!e.RTCPeerConnection||"chrome"===t.browser&&t.version>=71||"safari"===t.browser&&t.version>=605)return;let r=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(t){if(t&&t.sdp&&-1!==t.sdp.indexOf("\na=extmap-allow-mixed")){let r=t.sdp.split("\n").filter(e=>"a=extmap-allow-mixed"!==e.trim()).join("\n");e.RTCSessionDescription&&t instanceof e.RTCSessionDescription?arguments[0]=new e.RTCSessionDescription({type:t.type,sdp:r}):t.sdp=r}return r.apply(this,arguments)}}function ec(e,t){if(!(e.RTCPeerConnection&&e.RTCPeerConnection.prototype))return;let r=e.RTCPeerConnection.prototype.addIceCandidate;r&&0!==r.length&&(e.RTCPeerConnection.prototype.addIceCandidate=function(){return arguments[0]?("chrome"===t.browser&&t.version<78||"firefox"===t.browser&&t.version<68||"safari"===t.browser)&&arguments[0]&&""===arguments[0].candidate?Promise.resolve():r.apply(this,arguments):(arguments[1]&&arguments[1].apply(null),Promise.resolve())})}function ep(e,t){if(!(e.RTCPeerConnection&&e.RTCPeerConnection.prototype))return;let r=e.RTCPeerConnection.prototype.setLocalDescription;r&&0!==r.length&&(e.RTCPeerConnection.prototype.setLocalDescription=function(){let e=arguments[0]||{};if("object"!=typeof e||e.type&&e.sdp)return r.apply(this,arguments);if(!(e={type:e.type,sdp:e.sdp}).type)switch(this.signalingState){case"stable":case"have-local-offer":case"have-remote-pranswer":e.type="offer";break;default:e.type="answer"}if(e.sdp||"offer"!==e.type&&"answer"!==e.type)return r.apply(this,[e]);let t="offer"===e.type?this.createOffer:this.createAnswer;return t.apply(this).then(e=>r.apply(this,[e]))})}"use strict";et.generateIdentifier=function(){return Math.random().toString(36).substring(2,12)},et.localCName=et.generateIdentifier(),et.splitLines=function(e){return e.trim().split("\n").map(e=>e.trim())},et.splitSections=function(e){let t=e.split("\nm=");return t.map((e,t)=>(t>0?"m="+e:e).trim()+"\r\n")},et.getDescription=function(e){let t=et.splitSections(e);return t&&t[0]},et.getMediaSections=function(e){let t=et.splitSections(e);return t.shift(),t},et.matchPrefix=function(e,t){return et.splitLines(e).filter(e=>0===e.indexOf(t))},et.parseCandidate=function(e){let t;t=0===e.indexOf("a=candidate:")?e.substring(12).split(" "):e.substring(10).split(" ");let r={foundation:t[0],component:{1:"rtp",2:"rtcp"}[t[1]]||t[1],protocol:t[2].toLowerCase(),priority:parseInt(t[3],10),ip:t[4],address:t[4],port:parseInt(t[5],10),type:t[7]};for(let e=8;e0?t[0].split("/")[1]:"sendrecv",uri:t[1],attributes:t.slice(2).join(" ")}},et.writeExtmap=function(e){return"a=extmap:"+(e.id||e.preferredId)+(e.direction&&"sendrecv"!==e.direction?"/"+e.direction:"")+" "+e.uri+(e.attributes?" "+e.attributes:"")+"\r\n"},et.parseFmtp=function(e){let t;let r={},n=e.substring(e.indexOf(" ")+1).split(";");for(let e=0;e{void 0!==e.parameters[t]?n.push(t+"="+e.parameters[t]):n.push(t)}),t+="a=fmtp:"+r+" "+n.join(";")+"\r\n"}return t},et.parseRtcpFb=function(e){let t=e.substring(e.indexOf(" ")+1).split(" ");return{type:t.shift(),parameter:t.join(" ")}},et.writeRtcpFb=function(e){let t="",r=e.payloadType;return void 0!==e.preferredPayloadType&&(r=e.preferredPayloadType),e.rtcpFeedback&&e.rtcpFeedback.length&&e.rtcpFeedback.forEach(e=>{t+="a=rtcp-fb:"+r+" "+e.type+(e.parameter&&e.parameter.length?" "+e.parameter:"")+"\r\n"}),t},et.parseSsrcMedia=function(e){let t=e.indexOf(" "),r={ssrc:parseInt(e.substring(7,t),10)},n=e.indexOf(":",t);return n>-1?(r.attribute=e.substring(t+1,n),r.value=e.substring(n+1)):r.attribute=e.substring(t+1),r},et.parseSsrcGroup=function(e){let t=e.substring(13).split(" ");return{semantics:t.shift(),ssrcs:t.map(e=>parseInt(e,10))}},et.getMid=function(e){let t=et.matchPrefix(e,"a=mid:")[0];if(t)return t.substring(6)},et.parseFingerprint=function(e){let t=e.substring(14).split(" ");return{algorithm:t[0].toLowerCase(),value:t[1].toUpperCase()}},et.getDtlsParameters=function(e,t){let r=et.matchPrefix(e+t,"a=fingerprint:");return{role:"auto",fingerprints:r.map(et.parseFingerprint)}},et.writeDtlsParameters=function(e,t){let r="a=setup:"+t+"\r\n";return e.fingerprints.forEach(e=>{r+="a=fingerprint:"+e.algorithm+" "+e.value+"\r\n"}),r},et.parseCryptoLine=function(e){let t=e.substring(9).split(" ");return{tag:parseInt(t[0],10),cryptoSuite:t[1],keyParams:t[2],sessionParams:t.slice(3)}},et.writeCryptoLine=function(e){return"a=crypto:"+e.tag+" "+e.cryptoSuite+" "+("object"==typeof e.keyParams?et.writeCryptoKeyParams(e.keyParams):e.keyParams)+(e.sessionParams?" "+e.sessionParams.join(" "):"")+"\r\n"},et.parseCryptoKeyParams=function(e){if(0!==e.indexOf("inline:"))return null;let t=e.substring(7).split("|");return{keyMethod:"inline",keySalt:t[0],lifeTime:t[1],mkiValue:t[2]?t[2].split(":")[0]:void 0,mkiLength:t[2]?t[2].split(":")[1]:void 0}},et.writeCryptoKeyParams=function(e){return e.keyMethod+":"+e.keySalt+(e.lifeTime?"|"+e.lifeTime:"")+(e.mkiValue&&e.mkiLength?"|"+e.mkiValue+":"+e.mkiLength:"")},et.getCryptoParameters=function(e,t){let r=et.matchPrefix(e+t,"a=crypto:");return r.map(et.parseCryptoLine)},et.getIceParameters=function(e,t){let r=et.matchPrefix(e+t,"a=ice-ufrag:")[0],n=et.matchPrefix(e+t,"a=ice-pwd:")[0];return r&&n?{usernameFragment:r.substring(12),password:n.substring(10)}:null},et.writeIceParameters=function(e){let t="a=ice-ufrag:"+e.usernameFragment+"\r\na=ice-pwd:"+e.password+"\r\n";return e.iceLite&&(t+="a=ice-lite\r\n"),t},et.parseRtpParameters=function(e){let t={codecs:[],headerExtensions:[],fecMechanisms:[],rtcp:[]},r=et.splitLines(e),n=r[0].split(" ");t.profile=n[2];for(let r=3;r{t.headerExtensions.push(et.parseExtmap(e))});let i=et.matchPrefix(e,"a=rtcp-fb:* ").map(et.parseRtcpFb);return t.codecs.forEach(e=>{i.forEach(t=>{let r=e.rtcpFeedback.find(e=>e.type===t.type&&e.parameter===t.parameter);r||e.rtcpFeedback.push(t)})}),t},et.writeRtpDescription=function(e,t){let r="";r+="m="+e+" "+(t.codecs.length>0?"9":"0")+" "+(t.profile||"UDP/TLS/RTP/SAVPF")+" "+t.codecs.map(e=>void 0!==e.preferredPayloadType?e.preferredPayloadType:e.payloadType).join(" ")+"\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\n",t.codecs.forEach(e=>{r+=et.writeRtpMap(e)+et.writeFmtp(e)+et.writeRtcpFb(e)});let n=0;return t.codecs.forEach(e=>{e.maxptime>n&&(n=e.maxptime)}),n>0&&(r+="a=maxptime:"+n+"\r\n"),t.headerExtensions&&t.headerExtensions.forEach(e=>{r+=et.writeExtmap(e)}),r},et.parseRtpEncodingParameters=function(e){let t;let r=[],n=et.parseRtpParameters(e),i=-1!==n.fecMechanisms.indexOf("RED"),s=-1!==n.fecMechanisms.indexOf("ULPFEC"),o=et.matchPrefix(e,"a=ssrc:").map(e=>et.parseSsrcMedia(e)).filter(e=>"cname"===e.attribute),a=o.length>0&&o[0].ssrc,c=et.matchPrefix(e,"a=ssrc-group:FID").map(e=>{let t=e.substring(17).split(" ");return t.map(e=>parseInt(e,10))});c.length>0&&c[0].length>1&&c[0][0]===a&&(t=c[0][1]),n.codecs.forEach(e=>{if("RTX"===e.name.toUpperCase()&&e.parameters.apt){let n={ssrc:a,codecPayloadType:parseInt(e.parameters.apt,10)};a&&t&&(n.rtx={ssrc:t}),r.push(n),i&&((n=JSON.parse(JSON.stringify(n))).fec={ssrc:a,mechanism:s?"red+ulpfec":"red"},r.push(n))}}),0===r.length&&a&&r.push({ssrc:a});let p=et.matchPrefix(e,"b=");return p.length&&(p=0===p[0].indexOf("b=TIAS:")?parseInt(p[0].substring(7),10):0===p[0].indexOf("b=AS:")?950*parseInt(p[0].substring(5),10)-16e3:void 0,r.forEach(e=>{e.maxBitrate=p})),r},et.parseRtcpParameters=function(e){let t={},r=et.matchPrefix(e,"a=ssrc:").map(e=>et.parseSsrcMedia(e)).filter(e=>"cname"===e.attribute)[0];r&&(t.cname=r.value,t.ssrc=r.ssrc);let n=et.matchPrefix(e,"a=rtcp-rsize");t.reducedSize=n.length>0,t.compound=0===n.length;let i=et.matchPrefix(e,"a=rtcp-mux");return t.mux=i.length>0,t},et.writeRtcpParameters=function(e){let t="";return e.reducedSize&&(t+="a=rtcp-rsize\r\n"),e.mux&&(t+="a=rtcp-mux\r\n"),void 0!==e.ssrc&&e.cname&&(t+="a=ssrc:"+e.ssrc+" cname:"+e.cname+"\r\n"),t},et.parseMsid=function(e){let t;let r=et.matchPrefix(e,"a=msid:");if(1===r.length)return{stream:(t=r[0].substring(7).split(" "))[0],track:t[1]};let n=et.matchPrefix(e,"a=ssrc:").map(e=>et.parseSsrcMedia(e)).filter(e=>"msid"===e.attribute);if(n.length>0)return{stream:(t=n[0].value.split(" "))[0],track:t[1]}},et.parseSctpDescription=function(e){let t;let r=et.parseMLine(e),n=et.matchPrefix(e,"a=max-message-size:");n.length>0&&(t=parseInt(n[0].substring(19),10)),isNaN(t)&&(t=65536);let i=et.matchPrefix(e,"a=sctp-port:");if(i.length>0)return{port:parseInt(i[0].substring(12),10),protocol:r.fmt,maxMessageSize:t};let s=et.matchPrefix(e,"a=sctpmap:");if(s.length>0){let e=s[0].substring(10).split(" ");return{port:parseInt(e[0],10),protocol:e[1],maxMessageSize:t}}},et.writeSctpDescription=function(e,t){let r=[];return r="DTLS/SCTP"!==e.protocol?["m="+e.kind+" 9 "+e.protocol+" "+t.protocol+"\r\n","c=IN IP4 0.0.0.0\r\n","a=sctp-port:"+t.port+"\r\n"]:["m="+e.kind+" 9 "+e.protocol+" "+t.port+"\r\n","c=IN IP4 0.0.0.0\r\n","a=sctpmap:"+t.port+" "+t.protocol+" 65535\r\n"],void 0!==t.maxMessageSize&&r.push("a=max-message-size:"+t.maxMessageSize+"\r\n"),r.join("")},et.generateSessionId=function(){return Math.random().toString().substr(2,22)},et.writeSessionBoilerplate=function(e,t,r){return"v=0\r\no="+(r||"thisisadapterortc")+" "+(e||et.generateSessionId())+" "+(void 0!==t?t:2)+" IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\n"},et.getDirection=function(e,t){let r=et.splitLines(e);for(let e=0;e{let n=0,o=0,a=0,c=[];e.onmessage=function({data:t}){if(0==o){let{size:r,part:n}=JSON.parse(t);o=r,a=n,e.send("READY")}else n+=t.byteLength,c.push(t),n==o&&(s[a]=new Blob(c),c=[],o=0,a=0,n=0,e.send("TOTAL_RECAIVED"))},e.onclose=()=>{0==--r&&i(new File(s,t.name,{type:t.type,lastModified:+new Date}))}})}async SendFile(e,t){this.isSending=!0,this.isStarted=!0;let r=await e.arrayBuffer(),n=Math.ceil(r.byteLength/1e7),i=Math.min(5,n);if("connected"!=this.webrtc.iceStatus)throw Error("WebRTC is a not ready");this.peer.send({type:"file",name:e.name,size:e.size,mimetype:e.type,partCount:n,channelCount:i,metadata:t});let s=[];for(let e=0;e{t.onopen=()=>{e(void 0)}}),s.push(t)}let o=0,a=()=>o{for(let t=0;t{0==--c&&(this.isSending=!1,this.isStarted=!1,e(void 0))})})}sendPartition(e,t,r,n){let[i,s]=t(),o=0,a=()=>{if(!(i instanceof ArrayBuffer))return;let e=i.slice(16e3*o,16e3*o+16e3);if(o++,0!=e.byteLength)return e};e.addEventListener("message",({data:r})=>{"READY"==r&&this.sendFileChannel(e,a),"TOTAL_RECAIVED"==r&&([i,s]=t(),o=0,!1!=i?e.send(JSON.stringify({size:i.byteLength,part:s})):(e.close(),n()))}),e.send(JSON.stringify({size:i.byteLength,part:s}))}sendFileChannel(e,t){e.addEventListener("bufferedamountlow",function(){let r=t();r&&e.send(r)}),e.bufferedAmountLowThreshold=15999;let r=t();r&&e.send(r)}}class el{static channels=new Map;static requireGC=!1;id;active=!1;connectionStatus="new";iceStatus="new";gatheringStatus="new";signalingStatus="";rtc;recaivingStream=new Map;sendingStream=new Map;events={};channel;static defaultRTCConfig={iceCandidatePoolSize:0,iceTransportPolicy:"all",rtcpMuxPolicy:"require"};static defaultICEServers=[{urls:"stun:stun.l.google.com:19302"},{urls:"stun:stun1.l.google.com:19302"},{urls:"stun:stun2.l.google.com:19302"},{urls:"stun:stun3.l.google.com:19302"},{urls:"stun:stun4.l.google.com:19302"}];peer;FileTransportChannel;constructor(e,t){let r={};e?Object.assign(r,el.defaultRTCConfig,e):Object.assign(r,el.defaultRTCConfig),r.iceServers=t||el.defaultICEServers,this.rtc=new RTCPeerConnection(r),this.rtc.addEventListener("connectionstatechange",()=>{this.eventConnectionState()}),this.rtc.addEventListener("icecandidate",(...e)=>{this.eventIcecandidate(...e)}),this.rtc.addEventListener("iceconnectionstatechange",()=>{this.eventICEConnectionState()}),this.rtc.addEventListener("icegatheringstatechange",()=>{this.eventICEGatherinState()}),this.rtc.addEventListener("negotiationneeded",()=>{this.eventNogationNeeded()}),this.rtc.addEventListener("signalingstatechange",()=>{this.eventSignalingState()}),this.rtc.addEventListener("track",(...e)=>{this.eventTrack(...e)}),this.rtc.addEventListener("datachannel",(...e)=>{this.eventDatachannel(...e)}),this.on("input",async e=>{switch(e.type){case"icecandidate":await this.rtc.addIceCandidate(new RTCIceCandidate(e.value));break;case"offer":{await this.rtc.setRemoteDescription(new RTCSessionDescription(e.value));let t=await this.rtc.createAnswer({offerToReceiveAudio:!0,offerToReceiveVideo:!0});await this.rtc.setLocalDescription(t),this.send({type:"answer",value:t});break}case"answer":await this.rtc.setRemoteDescription(new RTCSessionDescription(e.value));break;case"streamInfo":{let{id:t,value:r}=e,n=this.recaivingStream.get(t);n?this.recaivingStream.set(t,{...n,...r}):this.recaivingStream.set(t,r),this.send({type:"streamAccept",id:t});break}case"streamRemoved":{let{id:t}=e;this.emit("stream:stopped",this.recaivingStream.get(t)),this.sendingStream.delete(t);break}case"streamAccept":{let{id:t}=e,r=this.sendingStream.get(t),n=[];if(r&&r.stream){for(let e of r.stream.getTracks())n.push(this.rtc.addTrack(e,r.stream));r.senders=n}break}case"message":this.emit("message",e.payload)}})}addEventListener(e,t){(this.events[e]||(this.events[e]=[])).push(t)}on(e,t){this.addEventListener(e,t)}async dispatch(e,...t){if(this.events[e])for(let r of this.events[e])await r(...t)}async emit(e,...t){await this.dispatch(e,...t)}connect(){this.channel||this.createDefaultDataChannel()}sendMessage(e){this.send({type:"message",payload:e})}createDefaultDataChannel(){let e=this.rtc.createDataChannel(":default:",{ordered:!0});e.addEventListener("open",()=>{this.channel=e,el.channels.set(this.id,this),this.active=!0}),e.addEventListener("message",({data:e})=>{let t=JSON.parse(e);this.emit("input",t)}),e.addEventListener("close",()=>{this.channel=void 0,this.active=!1})}destroy(){this.active=!1,this.channel&&(this.channel.close(),this.channel=void 0),this.rtc&&this.rtc.close(),this.emit("disconnected"),el.channels.delete(this.id)}eventDatachannel(e){":default:"==e.channel.label?(el.channels.set(this.id,this),this.channel=e.channel,this.active=!0,e.channel.addEventListener("message",({data:e})=>{let t=JSON.parse(e);this.emit("input",t)}),e.channel.addEventListener("close",()=>{this.channel=void 0,el.channels.delete(this.id),el.requireGC=!0})):this.emit("datachannel",e.channel)}send(e){this.channel?.readyState=="open"?this.channel.send(JSON.stringify(e)):this.emit("output",e)}eventConnectionState(){this.connectionStatus=this.rtc.connectionState,"connected"==this.connectionStatus&&!1==this.active&&this.emit("connected"),("failed"==this.connectionStatus||"disconnected"==this.connectionStatus||"closed"==this.connectionStatus)&&this.active&&this.destroy()}eventIcecandidate(e){e.candidate&&this.send({type:"icecandidate",value:e.candidate})}eventICEConnectionState(){this.iceStatus=this.rtc.iceConnectionState}eventICEGatherinState(){this.gatheringStatus=this.rtc.iceGatheringState}async eventNogationNeeded(){let e=await this.rtc.createOffer({iceRestart:!0,offerToReceiveAudio:!0,offerToReceiveVideo:!0});await this.rtc.setLocalDescription(e),this.send({type:"offer",value:e})}eventSignalingState(){this.signalingStatus=this.rtc.signalingState}eventTrack(e){let t=e.receiver;if(e.streams.length)for(let r of e.streams){let e=this.recaivingStream.get(r.id);(e.recaivers||(e.recaivers=[])).push(t),null==this.recaivingStream.get(r.id).stream?(e.stream=r,this.emit("stream:added",this.recaivingStream.get(r.id))):e.stream=r}}sendStream(e,t,r){this.send({type:"streamInfo",id:e.id,value:{...r,name:t}}),this.sendingStream.set(e.id,{...r,id:e.id,name:t,stream:e})}stopStream(e){if("connected"==this.connectionStatus&&this.sendingStream.has(e.id)){let{stream:t}=this.sendingStream.get(e.id);for(let e of t.getTracks())for(let t of this.rtc.getSenders())t.track?.id==e.id&&this.rtc.removeTrack(t);this.send({type:"streamRemoved",id:t.id}),this.sendingStream.delete(e.id)}}stopAllStreams(){if("connected"==this.connectionStatus){for(let[,{stream:e}]of this.sendingStream)if(void 0!=e){for(let t of e.getTracks())for(let e of this.rtc.getSenders())e.track?.id==t.id&&this.rtc.removeTrack(e);this.send({type:"streamRemoved",id:e.id})}this.sendingStream.clear()}}async SendFile(e,t){if(!this.peer)throw Error("Peer is not ready");this.FileTransportChannel=new ed(this,this.peer),await this.FileTransportChannel.SendFile(e,t)}async RecaiveFile(e,t,r){if(!this.peer)throw Error("Peer is not ready");return this.FileTransportChannel=new ed(this,this.peer),await new Promise(n=>{this.FileTransportChannel&&this.FileTransportChannel.RecaiveFile(this.rtc,t,e,r,e=>{n(e)})})}}el.requireGC=!1,setInterval(()=>{if(!1==el.requireGC)return;let e=document.createElement("img");e.src=window.URL.createObjectURL(new Blob([new ArrayBuffer(5e7)])),e.onerror=function(){window.URL.revokeObjectURL(this.src)},el.requireGC=!1},3e3),function(e){e[e.PayloadMessagePack=-12873.54]="PayloadMessagePack",e[e.PayloadRTCBasePack=-12884.54]="PayloadRTCBasePack"}(g||(g={}));class eh extends i{mwse;options={};socketId;selfSocket=!1;active=!1;info;rtc;peerConnection=!1;primaryChannel="datachannel";constructor(e){super(),this.mwse=e,this.info=new o(this),this.on("pack",e=>{if(":rtcbase_pack:"==e.type)return this.rtc?this.rtc.emit("input",e.payload):console.warn("Not active rtc but recaived rtc packs");this.emit("message",e)})}createRTC(e,t){return this.rtc=new el(e,t),this.rtc.peer=this,this.rtc.on("connected",()=>{this.peerConnection=!0}),this.rtc.on("disconnected",()=>{this.peerConnection=!1}),this.rtc.on("output",e=>{this.send({type:":rtcbase_pack:",payload:e})}),this.rtc.on("message",e=>{this.emit("pack",e)}),this.rtc}setPeerOptions(e){"string"==typeof e?this.setSocketId(e):this.options=e}setSocketId(e){this.socketId=e}async metadata(){if("me"==this.socketId){let e=await this.mwse.EventPooling.request({type:"my/socketid"});return this.selfSocket=!0,this.active||=!0,this.socketId=e,this.emit("scope"),this.activeScope=!0,e}}async request(e){if(this.active)return await this.mwse.request(this.socketId,e)}equalTo(e){return this.socketId==e.socketId}async isReachable(){return await this.mwse.EventPooling.request({type:"is/reachable",to:this.socketId})}async enablePairAuth(){await this.mwse.EventPooling.request({type:"auth/pair-system",value:"everybody"})}async disablePairAuth(){await this.mwse.EventPooling.request({type:"auth/pair-system",value:"disable"})}async requestPair(){let{message:e,status:t}=await this.mwse.EventPooling.request({type:"request/pair",to:this.socketId});return("ALREADY-PAIRED"==e||"ALREADY-REQUESTED"==e)&&console.warn("Already paired or pair requested"),"fail"!=t||(console.error("Request Pair Error",t,e),!1)}async endPair(){await this.mwse.EventPooling.request({type:"end/pair",to:this.socketId}),this.forget()}async acceptPair(){let{message:e,status:t}=await this.mwse.EventPooling.request({type:"accept/pair",to:this.socketId});return"fail"!=t||(console.error("Pair Error",t,e),!1)}async rejectPair(){let{message:e,status:t}=await this.mwse.EventPooling.request({type:"reject/pair",to:this.socketId});return"fail"!=t||(console.error("Pair Error",t,e),!1)}async getPairedList(){let{value:e}=await this.mwse.EventPooling.request({type:"pair/list",to:this.socketId});return e}async send(e){let t=this.peerConnection&&this.rtc?.active,r=this.mwse.server.connected;"websocket"==(t&&r?"websocket"==this.primaryChannel?"websocket":"datachannel":r?"websocket":"datachannel")?await this.mwse.EventPooling.request({type:"pack/to",pack:e,to:this.socketId}):this.rtc?.sendMessage(e)}async forget(){this.mwse.peers.delete(this.socketId),this.mwse.pairs.delete(this.socketId)}}class em extends i{mwse;options;roomId;accessType;description;joinType;name;owner;peers=new Map;constructor(e){super(),this.mwse=e}setRoomOptions(e){if("string"==typeof e)this.roomId=e;else{let t={joinType:"free",ifexistsJoin:!0,accessType:"private",notifyActionInvite:!0,notifyActionJoined:!0,notifyActionEjected:!0};Object.assign(t,e),this.options=t}}setRoomId(e){this.roomId=e}async createRoom(e){let t=this.options||e,r=await this.mwse.EventPooling.request({type:"create-room",...t});if("fail"==r.status){if("ALREADY-EXISTS"==r.message&&this.options.ifexistsJoin)return this.join();throw Error(r.message||r.messages)}this.options={...this.options,...r.room},this.roomId=r.room.id,this.mwse.rooms.set(this.roomId,this)}async join(){let e=await this.mwse.EventPooling.request({type:"joinroom",name:this.options.name,credential:this.options.credential});if("fail"==e.status)throw Error(e.message);this.options={...this.options,...e.room},this.roomId=e.room.id,this.mwse.rooms.set(this.roomId,this)}async eject(){let{type:e}=await this.mwse.EventPooling.request({type:"ejectroom",roomId:this.roomId});this.peers.clear(),"success"==e&&this.mwse.rooms.delete(this.roomId)}async send(e,t=!1){await this.mwse.EventPooling.request({type:"pack/room",pack:e,to:this.roomId,wom:t})}async fetchPeers(e,t=!1){if(t){let{count:t}=await this.mwse.EventPooling.request({type:"room/peer-count",roomId:this.roomId,filter:e||{}});return t}{let{status:t,peers:r}=await this.mwse.EventPooling.request({type:"room/peer-count",roomId:this.roomId,filter:e||{}}),n=[];if("fail"==t)throw Error("Cant using peers on room");if("success"==t)for(let e of r){let t=this.mwse.peer(e);n.push(t),this.peers.set(e,t)}return n}}}class eu{mwse;constructor(e){this.mwse=e,this.addListener()}addListener(){this.mwse.server?.onRecaivePack(e=>{this.PackAnalyze(e)})}SendRaw(e){this.mwse.server.tranferToServer(e)}SendOnly(e){this.mwse.server.tranferToServer([e,"R"])}SendRequest(e,t){this.mwse.server.tranferToServer([e,t,"R"])}StartStream(e,t){this.mwse.server.tranferToServer([e,t,"S"])}PackAnalyze(e){let[t,r,n]=e;if("number"==typeof r){let e=this.mwse.EventPooling.events.get(r);e?(e[0](t,n),"E"===n&&this.mwse.EventPooling.events.delete(r)):console.warn("Missing event sended from server")}else{let e=this.mwse.EventPooling.signals.get(r);if(e)for(let r of e)r(t);else console.warn("Missing event sended from server")}}}class ef extends i{static rtc;server;WSTSProtocol;EventPooling;rooms=new Map;pairs=new Map;peers=new Map;virtualPressure;me;constructor(e){super(),this.server=new r(e),this.WSTSProtocol=new eu(this),this.EventPooling=new n(this),this.virtualPressure=new s(this),this.server.connect(),this.me=new eh(this),this.me.scope(()=>{this.peers.set("me",this.me),this.peers.set(this.me.socketId,this.me)}),this.server.onActive(async()=>{this.me.setSocketId("me"),await this.me.metadata(),this.emit("scope"),this.activeScope=!0}),this.packMessagingSystem()}async request(e,t){let{pack:r}=await this.EventPooling.request({type:"request/to",to:e,pack:t});return r}async response(e,t,r){this.WSTSProtocol.SendOnly({type:"response/to",to:e,pack:r,id:t})}packMessagingSystem(){this.EventPooling.signal("pack",e=>{let{from:t,pack:r}=e;this.peer(t,!0).emit("pack",r)}),this.EventPooling.signal("request",e=>{let{from:t,pack:r,id:n}=e,i={body:r,response:e=>{this.response(t,n,e)},peer:this.peer(t,!0)};this.peer(t,!0).emit("request",i),this.peer("me").emit("request",i)}),this.EventPooling.signal("pack/room",e=>{let{from:t,pack:r}=e;this.room(t).emit("message",r)}),this.EventPooling.signal("room/joined",e=>{let{id:t,roomid:r}=e,n=this.room(r),i=this.peer(t,!0);n.peers.set(i.socketId,i),n.emit("join",i)}),this.EventPooling.signal("room/ejected",e=>{let{id:t,roomid:r}=e,n=this.room(r),i=this.peer(t);n.peers.delete(i.socketId),n.emit("eject",i)}),this.EventPooling.signal("room/closed",e=>{let{roomid:t}=e,r=this.room(t);r.peers.clear(),r.emit("close"),this.rooms.delete(t)}),this.EventPooling.signal("pair/info",e=>{let{from:t,name:r,value:n}=e,i=this.peer(t);i.info.info[r]=n,i.emit("info",r,n)}),this.EventPooling.signal("request/pair",e=>{let{from:t,info:r}=e,n=this.peer(t);n.info.info=r,n.emit("request/pair",n),this.peer("me").emit("request/pair",n)}),this.EventPooling.signal("accepted/pair",e=>{let{from:t,info:r}=e,n=this.peer(t);n.info.info=r,n.emit("accepted/pair",n),this.peer("me").emit("accepted/pairr",n)}),this.EventPooling.signal("end/pair",e=>{let{from:t,info:r}=e;this.peer(t).emit("endPair",r),this.peer("me").emit("endPair",t,r)})}room(e){if("string"==typeof e&&this.rooms.has(e))return this.rooms.get(e);let t=new em(this);return t.setRoomOptions(e),this.emit("room"),t}peer(e,t=!1){if("string"==typeof e){if(this.peers.has(e))return this.peers.get(e);if(this.pairs.has(e))return this.pairs.get(e)}let r=new eh(this);return r.setPeerOptions(e),r.active=t,this.peers.set(r.socketId,r),this.emit("peer",r),r}}window.MWSE=ef})(); +// modules are defined as an array +// [ module function, map of requires ] +// +// map of requires is short require name -> numeric require +// +// anything defined in a previous bundle is accessed via the +// orig method which is the require for previous bundles + +(function (modules, entry, mainEntry, parcelRequireName, globalName) { + /* eslint-disable no-undef */ + var globalObject = + typeof globalThis !== 'undefined' + ? globalThis + : typeof self !== 'undefined' + ? self + : typeof window !== 'undefined' + ? window + : typeof global !== 'undefined' + ? global + : {}; + /* eslint-enable no-undef */ + + // Save the require from previous bundle to this closure if any + var previousRequire = + typeof globalObject[parcelRequireName] === 'function' && + globalObject[parcelRequireName]; + + var cache = previousRequire.cache || {}; + // Do not use `require` to prevent Webpack from trying to bundle this call + var nodeRequire = + typeof module !== 'undefined' && + typeof module.require === 'function' && + module.require.bind(module); + + function newRequire(name, jumped) { + if (!cache[name]) { + if (!modules[name]) { + // if we cannot find the module within our internal map or + // cache jump to the current global require ie. the last bundle + // that was added to the page. + var currentRequire = + typeof globalObject[parcelRequireName] === 'function' && + globalObject[parcelRequireName]; + if (!jumped && currentRequire) { + return currentRequire(name, true); + } + + // If there are other bundles on this page the require from the + // previous one is saved to 'previousRequire'. Repeat this as + // many times as there are bundles until the module is found or + // we exhaust the require chain. + if (previousRequire) { + return previousRequire(name, true); + } + + // Try the node require function if it exists. + if (nodeRequire && typeof name === 'string') { + return nodeRequire(name); + } + + var err = new Error("Cannot find module '" + name + "'"); + err.code = 'MODULE_NOT_FOUND'; + throw err; + } + + localRequire.resolve = resolve; + localRequire.cache = {}; + + var module = (cache[name] = new newRequire.Module(name)); + + modules[name][0].call( + module.exports, + localRequire, + module, + module.exports, + this + ); + } + + return cache[name].exports; + + function localRequire(x) { + var res = localRequire.resolve(x); + return res === false ? {} : newRequire(res); + } + + function resolve(x) { + var id = modules[name][1][x]; + return id != null ? id : x; + } + } + + function Module(moduleName) { + this.id = moduleName; + this.bundle = newRequire; + this.exports = {}; + } + + newRequire.isParcelRequire = true; + newRequire.Module = Module; + newRequire.modules = modules; + newRequire.cache = cache; + newRequire.parent = previousRequire; + newRequire.register = function (id, exports) { + modules[id] = [ + function (require, module) { + module.exports = exports; + }, + {}, + ]; + }; + + Object.defineProperty(newRequire, 'root', { + get: function () { + return globalObject[parcelRequireName]; + }, + }); + + globalObject[parcelRequireName] = newRequire; + + for (var i = 0; i < entry.length; i++) { + newRequire(entry[i]); + } + + if (mainEntry) { + // Expose entry point to Node, AMD or browser globals + // Based on https://github.com/ForbesLindesay/umd/blob/master/template.js + var mainExports = newRequire(mainEntry); + + // CommonJS + if (typeof exports === 'object' && typeof module !== 'undefined') { + module.exports = mainExports; + + // RequireJS + } else if (typeof define === 'function' && define.amd) { + define(function () { + return mainExports; + }); + + //