diff --git a/Source/Client.js b/Source/Client.js index 8d7bc42..f5aa137 100644 --- a/Source/Client.js +++ b/Source/Client.js @@ -36,7 +36,6 @@ function Client() this.APNumber = 0; this.APShortCode = 0; this.APIPAddress = 0; - this.isProxy = false; this.proxyProcess = null; diff --git a/Source/Services/DataTransfer.js b/Source/Services/DataTransfer.js index 6de3334..9cf3038 100644 --- a/Source/Services/DataTransfer.js +++ b/Source/Services/DataTransfer.js @@ -95,7 +95,8 @@ addService(({ }; Room.rooms.get(to).send([{ from: to, - pack: pack + pack: pack, + sender: client.id }, 'pack/room'], wom ? client.id : void 0); handshake && end({ type: 'success' diff --git a/Source/Services/Room.js b/Source/Services/Room.js index 6c2e556..76d68a7 100644 --- a/Source/Services/Room.js +++ b/Source/Services/Room.js @@ -403,7 +403,7 @@ addService(({ break; } case 'joinroom':{ - let {name} = message; + let {name,autoFetchInfo} = message; let roomId; for (const [_roomId,{name:RoomName}] of Room.rooms) { if(name == RoomName) @@ -680,7 +680,7 @@ addService(({ // Odanın varlığının kontrolü if(!Room.rooms.has(roomId)) { - end({ + return end({ status : "fail", message : "NOT-FOUND-ROOM" }) @@ -692,19 +692,19 @@ addService(({ { return end({ status : "fail", - message : "NO-jıoned-ROOM" + message : "NO-JOINED-ROOM" }) } room.info.set(name, value); - for (const [,peer] of room.clients) - { - peer.send([{ - from: client.id, + room.send([ + { name, - value - },"room/info"]); - } + value, + roomId:room.id + }, + "room/info" + ], client.id); return end({ status: "success" diff --git a/frontend/Connection.ts b/frontend/Connection.ts index d8cd196..22f616c 100644 --- a/frontend/Connection.ts +++ b/frontend/Connection.ts @@ -57,7 +57,7 @@ export class Connection this.connected = false; if(this.autoReconnect) { - this.autoReconnectTimer = setTimeout(this.connect, this.autoReconnectTimeout) + this.autoReconnectTimer = setTimeout(() => this.connect(), this.autoReconnectTimeout) } } private eventError() diff --git a/frontend/Peer.ts b/frontend/Peer.ts index c0c1d3d..743eec2 100644 --- a/frontend/Peer.ts +++ b/frontend/Peer.ts @@ -29,7 +29,9 @@ export default class Peer extends EventTarget super(); this.mwse = wsts; this.info = new PeerInfo(this); - + this.on('updateinfo',(name:string,value:any) => { + this.info.info[name] = value; + }) this.on('pack',(data:{type?:string,action?:IMessageSymbase,payload?:any}) => { if(data.type == ':rtcbase_pack:') { diff --git a/frontend/RoomInfo.ts b/frontend/RoomInfo.ts index 4cc6342..beb2248 100644 --- a/frontend/RoomInfo.ts +++ b/frontend/RoomInfo.ts @@ -37,6 +37,7 @@ export class RoomInfo this.info[name] = value; this.room.mwse.WSTSProtocol.SendOnly({ type: "room/setinfo", + roomId: this.room.roomId, name, value }); diff --git a/frontend/index.ts b/frontend/index.ts index cd08b17..3e7fbf0 100644 --- a/frontend/index.ts +++ b/frontend/index.ts @@ -6,6 +6,7 @@ import Peer from "./Peer"; import Room, { IRoomOptions } from "./Room"; import WSTSProtocol, { Message } from "./WSTSProtocol"; import WebRTC from "./WebRTC"; +//import {Gzip} from "fflate"; export default class MWSE extends EventTarget { public static rtc : WebRTC; public server! : Connection; @@ -16,6 +17,21 @@ export default class MWSE extends EventTarget { public peers : Map = new Map(); public virtualPressure : IPPressure; public me! : Peer; + /*public static compress(message:string, callback:(e:any) => any) + { + let u : any= []; + let C = new Gzip({ + level: 9, + mem: 12 + },(stream,isLast) => { + u.push(stream); + if(isLast) + { + callback(u); + } + }); + C.push(new TextEncoder().encode(message), true); + }*/ constructor(options: IConnection){ super(); this.server = new Connection(options); @@ -72,9 +88,9 @@ export default class MWSE extends EventTarget { this.peer(from, true).emit('request', scope); this.peer('me').emit('request', scope); }) - this.EventPooling.signal('pack/room',(payload : {from:string,pack:any}) => { - let {from,pack} = payload; - this.room(from).emit('message', pack); + this.EventPooling.signal('pack/room',(payload : {from:string,pack:any,sender:string}) => { + let {from,pack,sender} = payload; + this.room(from).emit('message', pack, this.peer(sender)); }) this.EventPooling.signal('room/joined',(payload : {id:string,roomid:any,ownerid:string}) => { let {id,roomid} = payload; @@ -83,6 +99,10 @@ export default class MWSE extends EventTarget { room.peers.set(peer.socketId as string, peer); room.emit('join', peer); }) + this.EventPooling.signal('room/info',(payload : {roomId:string,value:any,name:string}) => { + let {roomId,name,value} = payload; + this.room(roomId).emit('updateinfo', name,value); + }) this.EventPooling.signal('room/ejected',(payload : {id:string,roomid:any,ownerid:string}) => { let {id,roomid} = payload; let room = this.room(roomid); @@ -135,7 +155,6 @@ export default class MWSE extends EventTarget { } let room = new Room(this); room.setRoomOptions(options); - // this.rooms.set(room.roomId as string, room); this.emit('room'); return room; } diff --git a/incoming-features.md b/incoming-features.md new file mode 100644 index 0000000..efdac40 --- /dev/null +++ b/incoming-features.md @@ -0,0 +1,5 @@ +/ Odaların kendi verilerinin bulunması +> HTTP ile kişilere mesaj (request) mesaj iletimi +> HTTP ile odalar ve kişiler hakkında veri alınabilmesi +> Websoket ile http proxy uygulama (WSAuth) +> Session WSAuth \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index e51d98b..adb04cf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,6 +12,7 @@ "compression": "^1.7.4", "express": "^4.18.2", "express-basic-auth": "^1.2.1", + "fflate": "^0.8.0", "joi": "^17.9.2", "knex": "^2.4.2", "sqlite3": "^5.1.6", @@ -1768,6 +1769,11 @@ "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" }, + "node_modules/fflate": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.0.tgz", + "integrity": "sha512-FAdS4qMuFjsJj6XHbBaZeXOgaypXp8iw/Tpyuq/w3XA41jjLHT8NPA+n7czH/DDhdncq0nAyDZmPeWXh2qmdIg==" + }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -4930,6 +4936,11 @@ } } }, + "fflate": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.0.tgz", + "integrity": "sha512-FAdS4qMuFjsJj6XHbBaZeXOgaypXp8iw/Tpyuq/w3XA41jjLHT8NPA+n7czH/DDhdncq0nAyDZmPeWXh2qmdIg==" + }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", diff --git a/package.json b/package.json index a7ac00d..8d00c1b 100644 --- a/package.json +++ b/package.json @@ -42,6 +42,7 @@ "compression": "^1.7.4", "express": "^4.18.2", "express-basic-auth": "^1.2.1", + "fflate": "^0.8.0", "joi": "^17.9.2", "knex": "^2.4.2", "sqlite3": "^5.1.6", diff --git a/public/session.html b/public/session.html new file mode 100644 index 0000000..a8fd6c0 --- /dev/null +++ b/public/session.html @@ -0,0 +1,13 @@ + + + + + + + saQüt Video Streaming + + + + + + \ No newline at end of file diff --git a/public/test.js b/public/test.js new file mode 100644 index 0000000..892c373 --- /dev/null +++ b/public/test.js @@ -0,0 +1,32 @@ +let mwse = new MWSE({ + endpoint: "ws://localhost:7707" +}); + +mwse.scope(beginEngine); + +async function beginEngine() +{ + room = mwse.room({ + name: "Naber", + joinType: "free", + accessType: "private", + description: "Private free joined room", + ifexistsJoin: false, + notifyActionEjected: true, + notifyActionInvite: false, + notifyActionJoined: true + }); + try{ + await room.createRoom(); + let time = 0; + setInterval(()=>{ + room.info.set("set time",time); + time++; + },1000); + }catch{ + await room.join(); + } + room.on('updateinfo',(name, value) => { + console.log("read",name,value) + }) +} \ No newline at end of file diff --git a/script/index.js b/script/index.js index 627556b..42fb7fa 100644 --- a/script/index.js +++ b/script/index.js @@ -1,2 +1,2 @@ -(()=>{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{room;info={};constructor(e){this.room=e}async fetch(e){if(e){let t=await this.room.mwse.EventPooling.request({type:"room/getinfo",roomId:this.room.roomId,name:e});"success"==t.status?this.info=t.info:console.warn(t.message)}else{let e=await this.room.mwse.EventPooling.request({type:"peer/info",peer:this.room.roomId});"success"==e.status?this.info=e.info:console.warn(e.message)}return this.info}set(e,t){this.info[e]=t,this.room.mwse.WSTSProtocol.SendOnly({type:"room/setinfo",name:e,value:t})}get(e){return e?this.info[e]:this.info}}class eu extends i{mwse;options;roomId;accessType;description;joinType;name;owner;peers=new Map;info;constructor(e){super(),this.mwse=e,this.info=new em(this)}setRoomOptions(e){if("string"==typeof e)this.roomId=e;else{let t={joinType:"free",ifexistsJoin:!0,accessType:"private",notifyActionInvite:!0,notifyActionJoined:!0,notifyActionEjected:!0,autoFetchInfo:!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,autoFetchInfo:this.options.autoFetchInfo||!1});if("fail"==e.status)throw Error(e.message);this.options={...this.options,...e.room},e.info&&(this.info.info=e.info),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-peers",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 ef{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 ey 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 ef(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 eu(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=ey})(); +(()=>{function e(e,t,r,i){Object.defineProperty(e,t,{get:r,set:i,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 i{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 i=++this.count;this.wsts.WSTSProtocol.SendRequest(e,i),this.events.set(i,[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 n{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 i=e.match(t);return i&&i.length>=r&&parseInt(i[r],10)}function d(e,t,r){if(!e.RTCPeerConnection)return;let i=e.RTCPeerConnection.prototype,n=i.addEventListener;i.addEventListener=function(e,i){if(e!==t)return n.apply(this,arguments);let s=e=>{let t=r(e);t&&(i.handleEvent?i.handleEvent(t):i(t))};return this._eventMap=this._eventMap||{},this._eventMap[t]||(this._eventMap[t]=new Map),this._eventMap[t].set(i,s),n.apply(this,[e,s])};let s=i.removeEventListener;i.removeEventListener=function(e,r){if(e!==t||!this._eventMap||!this._eventMap[t]||!this._eventMap[t].has(r))return s.apply(this,arguments);let i=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,i])},Object.defineProperty(i,"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(){"object"!=typeof window||a||"undefined"==typeof console||"function"!=typeof console.log||console.log.apply(console,arguments)}function h(e,t){c&&console.warn(e+" is deprecated, please use "+t+" instead.")}function m(e){return"[object Object]"===Object.prototype.toString.call(e)}function u(e,t,r){let i=r?"outbound-rtp":"inbound-rtp",n=new Map;if(null===t)return n;let s=[];return e.forEach(e=>{"track"===e.type&&e.trackIdentifier===t.id&&s.push(e)}),s.forEach(t=>{e.forEach(r=>{r.type===i&&r.trackId===t.id&&function e(t,r,i){!r||i.has(r.id)||(i.set(r.id,r),Object.keys(r).forEach(n=>{n.endsWith("Id")?e(t,t.get(r[n]),i):n.endsWith("Ids")&&r[n].forEach(r=>{e(t,t.get(r),i)})}))}(e,r,n)})}),n}"use strict";var f,y={};function v(e,t){let r=e&&e.navigator;if(!r.mediaDevices)return;let i=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 i="object"==typeof e[r]?e[r]:{ideal:e[r]};void 0!==i.exact&&"number"==typeof i.exact&&(i.min=i.max=i.exact);let n=function(e,t){return e?e+t.charAt(0).toUpperCase()+t.slice(1):"deviceId"===t?"sourceId":t};if(void 0!==i.ideal){t.optional=t.optional||[];let e={};"number"==typeof i.ideal?(e[n("min",r)]=i.ideal,t.optional.push(e),(e={})[n("max",r)]=i.ideal):e[n("",r)]=i.ideal,t.optional.push(e)}void 0!==i.exact&&"number"!=typeof i.exact?(t.mandatory=t.mandatory||{},t.mandatory[n("",r)]=i.exact):["min","max"].forEach(e=>{void 0!==i[e]&&(t.mandatory=t.mandatory||{},t.mandatory[n(e,r)]=i[e])})}),e.advanced&&(t.optional=(t.optional||[]).concat(e.advanced)),t},n=function(e,n){if(t.version>=61)return n(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=i(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=i(e.video),l("chrome: "+JSON.stringify(e)),n(e)})}e.video=i(e.video)}return l("chrome: "+JSON.stringify(e)),n(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,i){n(e,e=>{r.webkitGetUserMedia(e,t,e=>{i&&i(s(e))})})}).bind(r),r.mediaDevices.getUserMedia){let e=r.mediaDevices.getUserMedia.bind(r.mediaDevices);r.mediaDevices.getUserMedia=function(t){return n(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 g(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 i=r.video&&r.video.width,n=r.video&&r.video.height,s=r.video&&r.video.frameRate;return r.video={mandatory:{chromeMediaSource:"desktop",chromeMediaSourceId:t,maxFrameRate:s||3}},i&&(r.video.mandatory.maxWidth=i),n&&(r.video.mandatory.maxHeight=n),e.navigator.mediaDevices.getUserMedia(r)})}}}"use strict";function C(e){e.MediaStream=e.MediaStream||e.webkitMediaStream}function P(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 i;i=e.RTCPeerConnection.prototype.getReceivers?this.getReceivers().find(e=>e.track&&e.track.id===r.track.id):{track:r.track};let n=new Event("track");n.track=r.track,n.receiver=i,n.transceiver={receiver:i},n.streams=[t.stream],this.dispatchEvent(n)}),t.stream.getTracks().forEach(r=>{let i;i=e.RTCPeerConnection.prototype.getReceivers?this.getReceivers().find(e=>e.track&&e.track.id===r.id):{track:r};let n=new Event("track");n.track=r,n.receiver=i,n.transceiver={receiver:i},n.streams=[t.stream],this.dispatchEvent(n)})},this.addEventListener("addstream",this._ontrackpoly)),t.apply(this,arguments)}}}function S(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,i){let n=r.apply(this,arguments);return n||(n=t(this,e),this._senders.push(n)),n};let i=e.RTCPeerConnection.prototype.removeTrack;e.RTCPeerConnection.prototype.removeTrack=function(e){i.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 i=e.RTCPeerConnection.prototype.removeStream;e.RTCPeerConnection.prototype.removeStream=function(e){this._senders=this._senders||[],i.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 T(e){if(!e.RTCPeerConnection)return;let t=e.RTCPeerConnection.prototype.getStats;e.RTCPeerConnection.prototype.getStats=function(){let[e,r,i]=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 n=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(n(e)))},e]):new Promise((e,r)=>{t.apply(this,[function(t){e(s(n(t)))},r])}).then(r,i)}}function R(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=>u(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=>u(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 i=arguments[0];return(this.getSenders().forEach(t=>{t.track===i&&(e?r=!0:e=t)}),this.getReceivers().forEach(e=>(e.track===i&&(t?r=!0:t=e),e.track===i)),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 w(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 i=t.apply(this,arguments);return this._shimmedLocalStreams[r.id]?-1===this._shimmedLocalStreams[r.id].indexOf(i)&&this._shimmedLocalStreams[r.id].push(i):this._shimmedLocalStreams[r.id]=[r,i],i};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 i=this.getSenders().filter(e=>-1===t.indexOf(e));this._shimmedLocalStreams[e.id]=[e].concat(i)};let i=e.RTCPeerConnection.prototype.removeStream;e.RTCPeerConnection.prototype.removeStream=function(e){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},delete this._shimmedLocalStreams[e.id],i.apply(this,arguments)};let n=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]}),n.apply(this,arguments)}}function E(e,t){if(!e.RTCPeerConnection)return;if(e.RTCPeerConnection.prototype.addTrack&&t.version>=65)return w(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 i=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}i.apply(this,[t])};let n=e.RTCPeerConnection.prototype.removeStream;function s(e,t){let r=t.sdp;return Object.keys(e._reverseStreams||[]).forEach(t=>{let i=e._reverseStreams[t],n=e._streams[i.id];r=r.replace(RegExp(n.id,"g"),i.id)}),new RTCSessionDescription({type:t.type,sdp:r})}e.RTCPeerConnection.prototype.removeStream=function(e){this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},n.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 i=[].slice.call(arguments,1);if(1!==i.length||!i[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 n=this.getSenders().find(e=>e.track===t);if(n)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 i=new e.MediaStream([t]);this._streams[r.id]=i,this._reverseStreams[i.id]=r,this.addStream(i)}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 i=e._reverseStreams[t],n=e._streams[i.id];r=r.replace(RegExp(i.id,"g"),n.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 i=this._streams[r].getTracks().find(t=>e.track===t);i&&(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 k(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 b(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(y,"shimMediaStream",()=>C),e(y,"shimOnTrack",()=>P),e(y,"shimGetSendersWithDtmf",()=>S),e(y,"shimGetStats",()=>T),e(y,"shimSenderReceiverGetStats",()=>R),e(y,"shimAddTrackRemoveTrackWithNative",()=>w),e(y,"shimAddTrackRemoveTrack",()=>E),e(y,"shimPeerConnection",()=>k),e(y,"fixNegotiationNeeded",()=>b),e(y,"shimGetUserMedia",()=>v),e(y,"shimGetDisplayMedia",()=>g);var I={};function _(e,t){let r=e&&e.navigator,i=e&&e.MediaStreamTrack;if(r.getUserMedia=function(e,t,i){h("navigator.getUserMedia","navigator.mediaDevices.getUserMedia"),r.mediaDevices.getUserMedia(e).then(t,i)},!(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)},i&&i.prototype.getSettings){let t=i.prototype.getSettings;i.prototype.getSettings=function(){let r=t.apply(this,arguments);return e(r,"mozAutoGainControl","autoGainControl"),e(r,"mozNoiseSuppression","noiseSuppression"),r}}if(i&&i.prototype.applyConstraints){let t=i.prototype.applyConstraints;i.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 A(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 D(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 M(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"},i=e.RTCPeerConnection.prototype.getStats;e.RTCPeerConnection.prototype.getStats=function(){let[e,n,s]=arguments;return i.apply(this,[e||null]).then(e=>{if(t.version<53&&!n)try{e.forEach(e=>{e.type=r[e.type]||e.type})}catch(t){if("TypeError"!==t.name)throw t;e.forEach((t,i)=>{e.set(i,Object.assign({},t,{type:r[t.type]||t.type}))})}return e}).then(n,s)}}function x(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 O(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 L(e){!e.RTCPeerConnection||"removeStream"in e.RTCPeerConnection.prototype||(e.RTCPeerConnection.prototype.removeStream=function(e){h("removeStream","removeTrack"),this.getSenders().forEach(t=>{t.track&&e.getTracks().includes(t.track)&&this.removeTrack(t)})})}function j(e){e.DataChannel&&!e.RTCDataChannel&&(e.RTCDataChannel=e.DataChannel)}function N(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 i=t.apply(this,arguments);if(r){let{sender:t}=i,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 i})}function F(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 q(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 U(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(I,"shimOnTrack",()=>D),e(I,"shimPeerConnection",()=>M),e(I,"shimSenderGetStats",()=>x),e(I,"shimReceiverGetStats",()=>O),e(I,"shimRemoveStream",()=>L),e(I,"shimRTCDataChannel",()=>j),e(I,"shimAddTransceiver",()=>N),e(I,"shimGetParameters",()=>F),e(I,"shimCreateOffer",()=>q),e(I,"shimCreateAnswer",()=>U),e(I,"shimGetUserMedia",()=>_),e(I,"shimGetDisplayMedia",()=>A);var z={};function G(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 J(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 W(e){if("object"!=typeof e||!e.RTCPeerConnection)return;let t=e.RTCPeerConnection.prototype,r=t.createOffer,i=t.createAnswer,n=t.setLocalDescription,s=t.setRemoteDescription,o=t.addIceCandidate;t.createOffer=function(e,t){let i=arguments.length>=2?arguments[2]:arguments[0],n=r.apply(this,[i]);return t?(n.then(e,t),Promise.resolve()):n},t.createAnswer=function(e,t){let r=arguments.length>=2?arguments[2]:arguments[0],n=i.apply(this,[r]);return t?(n.then(e,t),Promise.resolve()):n};let a=function(e,t,r){let i=n.apply(this,[e]);return r?(i.then(t,r),Promise.resolve()):i};t.setLocalDescription=a,a=function(e,t,r){let i=s.apply(this,[e]);return r?(i.then(t,r),Promise.resolve()):i},t.setRemoteDescription=a,a=function(e,t,r){let i=o.apply(this,[e]);return r?(i.then(t,r),Promise.resolve()):i},t.addIceCandidate=a}function V(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(B(e))}!t.getUserMedia&&t.mediaDevices&&t.mediaDevices.getUserMedia&&(t.getUserMedia=(function(e,r,i){t.mediaDevices.getUserMedia(e).then(r,i)}).bind(t))}function B(e){return e&&void 0!==e.video?Object.assign({},e,{video:function e(t){return m(t)?Object.keys(t).reduce(function(r,i){let n=m(t[i]),s=n?e(t[i]):t[i],o=n&&!Object.keys(s).length;return void 0===s||o?r:Object.assign(r,{[i]:s})},{}):t}(e.video)}):e}function K(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 Y(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 H(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 X(e){"object"!=typeof e||e.AudioContext||(e.AudioContext=e.webkitAudioContext)}e(z,"shimLocalStreamsAPI",()=>G),e(z,"shimRemoteStreamsAPI",()=>J),e(z,"shimCallbacksAPI",()=>W),e(z,"shimGetUserMedia",()=>V),e(z,"shimConstraints",()=>B),e(z,"shimRTCIceServerUrls",()=>K),e(z,"shimTrackEventTransceiver",()=>Y),e(z,"shimCreateOfferLegacy",()=>H),e(z,"shimAudioContext",()=>X);var Q={};"use strict";e(Q,"shimRTCIceCandidate",()=>ee),e(Q,"shimRTCIceCandidateRelayProtocol",()=>et),e(Q,"shimMaxMessageSize",()=>er),e(Q,"shimSendThrowTypeError",()=>ei),e(Q,"shimConnectionState",()=>en),e(Q,"removeExtmapAllowMixed",()=>es),e(Q,"shimAddIceCandidateNullOrEmpty",()=>eo),e(Q,"shimParameterlessSetLocalDescription",()=>ea);var $={};"use strict";let Z={};function ee(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 i=new r(e),n=t($).parseCandidate(e.candidate);for(let e in n)e in i||Object.defineProperty(i,e,{value:n[e]});return i.toJSON=function(){return{candidate:i.candidate,sdpMid:i.sdpMid,sdpMLineIndex:i.sdpMLineIndex,usernameFragment:i.usernameFragment}},i}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 et(e){!e.RTCIceCandidate||e.RTCIceCandidate&&"relayProtocol"in e.RTCIceCandidate.prototype||d(e,"icecandidate",e=>{if(e.candidate){let r=t($).parseCandidate(e.candidate.candidate);"relay"===r.type&&(e.candidate.relayProtocol=({0:"tls",1:"tcp",2:"udp"})[r.priority>>24])}return e})}function er(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 i=function(e){if(!e||!e.sdp)return!1;let r=t($).splitSections(e.sdp);return r.shift(),r.some(e=>{let r=t($).parseMLine(e);return r&&"application"===r.kind&&-1!==r.protocol.indexOf("SCTP")})},n=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,i){let n=65536;"firefox"===r.browser&&57===r.version&&(n=65535);let s=t($).matchPrefix(e.sdp,"a=max-message-size:");return s.length>0?n=parseInt(s[0].substring(19),10):"firefox"===r.browser&&-1!==i&&(n=2147483637),n},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(i(arguments[0])){let e;let t=n(arguments[0]),r=s(t),i=o(arguments[0],t);e=0===r&&0===i?Number.POSITIVE_INFINITY:0===r||0===i?Math.max(r,i):Math.min(r,i);let a={};Object.defineProperty(a,"maxMessageSize",{get:()=>e}),this._sctp=a}return a.apply(this,arguments)}}function ei(e){if(!(e.RTCPeerConnection&&"createDataChannel"in e.RTCPeerConnection.prototype))return;function t(e,t){let r=e.send;e.send=function(){let i=arguments[0],n=i.length||i.size||i.byteLength;if("open"===e.readyState&&t.sctp&&n>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 en(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 es(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 eo(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 ea(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";Z.generateIdentifier=function(){return Math.random().toString(36).substring(2,12)},Z.localCName=Z.generateIdentifier(),Z.splitLines=function(e){return e.trim().split("\n").map(e=>e.trim())},Z.splitSections=function(e){let t=e.split("\nm=");return t.map((e,t)=>(t>0?"m="+e:e).trim()+"\r\n")},Z.getDescription=function(e){let t=Z.splitSections(e);return t&&t[0]},Z.getMediaSections=function(e){let t=Z.splitSections(e);return t.shift(),t},Z.matchPrefix=function(e,t){return Z.splitLines(e).filter(e=>0===e.indexOf(t))},Z.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(" ")}},Z.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"},Z.parseFmtp=function(e){let t;let r={},i=e.substring(e.indexOf(" ")+1).split(";");for(let e=0;e{void 0!==e.parameters[t]?i.push(t+"="+e.parameters[t]):i.push(t)}),t+="a=fmtp:"+r+" "+i.join(";")+"\r\n"}return t},Z.parseRtcpFb=function(e){let t=e.substring(e.indexOf(" ")+1).split(" ");return{type:t.shift(),parameter:t.join(" ")}},Z.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},Z.parseSsrcMedia=function(e){let t=e.indexOf(" "),r={ssrc:parseInt(e.substring(7,t),10)},i=e.indexOf(":",t);return i>-1?(r.attribute=e.substring(t+1,i),r.value=e.substring(i+1)):r.attribute=e.substring(t+1),r},Z.parseSsrcGroup=function(e){let t=e.substring(13).split(" ");return{semantics:t.shift(),ssrcs:t.map(e=>parseInt(e,10))}},Z.getMid=function(e){let t=Z.matchPrefix(e,"a=mid:")[0];if(t)return t.substring(6)},Z.parseFingerprint=function(e){let t=e.substring(14).split(" ");return{algorithm:t[0].toLowerCase(),value:t[1].toUpperCase()}},Z.getDtlsParameters=function(e,t){let r=Z.matchPrefix(e+t,"a=fingerprint:");return{role:"auto",fingerprints:r.map(Z.parseFingerprint)}},Z.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},Z.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)}},Z.writeCryptoLine=function(e){return"a=crypto:"+e.tag+" "+e.cryptoSuite+" "+("object"==typeof e.keyParams?Z.writeCryptoKeyParams(e.keyParams):e.keyParams)+(e.sessionParams?" "+e.sessionParams.join(" "):"")+"\r\n"},Z.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}},Z.writeCryptoKeyParams=function(e){return e.keyMethod+":"+e.keySalt+(e.lifeTime?"|"+e.lifeTime:"")+(e.mkiValue&&e.mkiLength?"|"+e.mkiValue+":"+e.mkiLength:"")},Z.getCryptoParameters=function(e,t){let r=Z.matchPrefix(e+t,"a=crypto:");return r.map(Z.parseCryptoLine)},Z.getIceParameters=function(e,t){let r=Z.matchPrefix(e+t,"a=ice-ufrag:")[0],i=Z.matchPrefix(e+t,"a=ice-pwd:")[0];return r&&i?{usernameFragment:r.substring(12),password:i.substring(10)}:null},Z.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},Z.parseRtpParameters=function(e){let t={codecs:[],headerExtensions:[],fecMechanisms:[],rtcp:[]},r=Z.splitLines(e),i=r[0].split(" ");t.profile=i[2];for(let r=3;r{t.headerExtensions.push(Z.parseExtmap(e))});let n=Z.matchPrefix(e,"a=rtcp-fb:* ").map(Z.parseRtcpFb);return t.codecs.forEach(e=>{n.forEach(t=>{let r=e.rtcpFeedback.find(e=>e.type===t.type&&e.parameter===t.parameter);r||e.rtcpFeedback.push(t)})}),t},Z.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+=Z.writeRtpMap(e)+Z.writeFmtp(e)+Z.writeRtcpFb(e)});let i=0;return t.codecs.forEach(e=>{e.maxptime>i&&(i=e.maxptime)}),i>0&&(r+="a=maxptime:"+i+"\r\n"),t.headerExtensions&&t.headerExtensions.forEach(e=>{r+=Z.writeExtmap(e)}),r},Z.parseRtpEncodingParameters=function(e){let t;let r=[],i=Z.parseRtpParameters(e),n=-1!==i.fecMechanisms.indexOf("RED"),s=-1!==i.fecMechanisms.indexOf("ULPFEC"),o=Z.matchPrefix(e,"a=ssrc:").map(e=>Z.parseSsrcMedia(e)).filter(e=>"cname"===e.attribute),a=o.length>0&&o[0].ssrc,c=Z.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]),i.codecs.forEach(e=>{if("RTX"===e.name.toUpperCase()&&e.parameters.apt){let i={ssrc:a,codecPayloadType:parseInt(e.parameters.apt,10)};a&&t&&(i.rtx={ssrc:t}),r.push(i),n&&((i=JSON.parse(JSON.stringify(i))).fec={ssrc:a,mechanism:s?"red+ulpfec":"red"},r.push(i))}}),0===r.length&&a&&r.push({ssrc:a});let p=Z.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},Z.parseRtcpParameters=function(e){let t={},r=Z.matchPrefix(e,"a=ssrc:").map(e=>Z.parseSsrcMedia(e)).filter(e=>"cname"===e.attribute)[0];r&&(t.cname=r.value,t.ssrc=r.ssrc);let i=Z.matchPrefix(e,"a=rtcp-rsize");t.reducedSize=i.length>0,t.compound=0===i.length;let n=Z.matchPrefix(e,"a=rtcp-mux");return t.mux=n.length>0,t},Z.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},Z.parseMsid=function(e){let t;let r=Z.matchPrefix(e,"a=msid:");if(1===r.length)return{stream:(t=r[0].substring(7).split(" "))[0],track:t[1]};let i=Z.matchPrefix(e,"a=ssrc:").map(e=>Z.parseSsrcMedia(e)).filter(e=>"msid"===e.attribute);if(i.length>0)return{stream:(t=i[0].value.split(" "))[0],track:t[1]}},Z.parseSctpDescription=function(e){let t;let r=Z.parseMLine(e),i=Z.matchPrefix(e,"a=max-message-size:");i.length>0&&(t=parseInt(i[0].substring(19),10)),isNaN(t)&&(t=65536);let n=Z.matchPrefix(e,"a=sctp-port:");if(n.length>0)return{port:parseInt(n[0].substring(12),10),protocol:r.fmt,maxMessageSize:t};let s=Z.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}}},Z.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("")},Z.generateSessionId=function(){return Math.random().toString().substr(2,22)},Z.writeSessionBoilerplate=function(e,t,r){return"v=0\r\no="+(r||"thisisadapterortc")+" "+(e||Z.generateSessionId())+" "+(void 0!==t?t:2)+" IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\n"},Z.getDirection=function(e,t){let r=Z.splitLines(e);for(let e=0;e{let i=0,o=0,a=0,c=[];e.onmessage=function({data:t}){if(0==o){let{size:r,part:i}=JSON.parse(t);o=r,a=i,e.send("READY")}else i+=t.byteLength,c.push(t),i==o&&(s[a]=new Blob(c),c=[],o=0,a=0,i=0,e.send("TOTAL_RECAIVED"))},e.onclose=()=>{0==--r&&n(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(),i=Math.ceil(r.byteLength/1e7),n=Math.min(5,i);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:i,channelCount:n,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,i){let[n,s]=t(),o=0,a=()=>{if(!(n instanceof ArrayBuffer))return;let e=n.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&&([n,s]=t(),o=0,!1!=n?e.send(JSON.stringify({size:n.byteLength,part:s})):(e.close(),i()))}),e.send(JSON.stringify({size:n.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 ep{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,ep.defaultRTCConfig,e):Object.assign(r,ep.defaultRTCConfig),r.iceServers=t||ep.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,i=this.recaivingStream.get(t);i?this.recaivingStream.set(t,{...i,...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),i=[];if(r&&r.stream){for(let e of r.stream.getTracks())i.push(this.rtc.addTrack(e,r.stream));r.senders=i}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,ep.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"),ep.channels.delete(this.id)}eventDatachannel(e){":default:"==e.channel.label?(ep.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,ep.channels.delete(this.id),ep.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 ec(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 ec(this,this.peer),await new Promise(i=>{this.FileTransportChannel&&this.FileTransportChannel.RecaiveFile(this.rtc,t,e,r,e=>{i(e)})})}}ep.requireGC=!1,setInterval(()=>{if(!1==ep.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)},ep.requireGC=!1},3e3),function(e){e[e.PayloadMessagePack=-12873.54]="PayloadMessagePack",e[e.PayloadRTCBasePack=-12884.54]="PayloadRTCBasePack"}(f||(f={}));class ed extends n{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("updateinfo",(e,t)=>{this.info.info[e]=t}),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 ep(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 el{room;info={};constructor(e){this.room=e}async fetch(e){if(e){let t=await this.room.mwse.EventPooling.request({type:"room/getinfo",roomId:this.room.roomId,name:e});"success"==t.status?this.info=t.info:console.warn(t.message)}else{let e=await this.room.mwse.EventPooling.request({type:"peer/info",peer:this.room.roomId});"success"==e.status?this.info=e.info:console.warn(e.message)}return this.info}set(e,t){this.info[e]=t,this.room.mwse.WSTSProtocol.SendOnly({type:"room/setinfo",roomId:this.room.roomId,name:e,value:t})}get(e){return e?this.info[e]:this.info}}class eh extends n{mwse;options;roomId;accessType;description;joinType;name;owner;peers=new Map;info;constructor(e){super(),this.mwse=e,this.info=new el(this)}setRoomOptions(e){if("string"==typeof e)this.roomId=e;else{let t={joinType:"free",ifexistsJoin:!0,accessType:"private",notifyActionInvite:!0,notifyActionJoined:!0,notifyActionEjected:!0,autoFetchInfo:!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,autoFetchInfo:this.options.autoFetchInfo||!1});if("fail"==e.status)throw Error(e.message);this.options={...this.options,...e.room},e.info&&(this.info.info=e.info),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-peers",roomId:this.roomId,filter:e||{}}),i=[];if("fail"==t)throw Error("Cant using peers on room");if("success"==t)for(let e of r){let t=this.mwse.peer(e);i.push(t),this.peers.set(e,t)}return i}}}class em{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,i]=e;if("number"==typeof r){let e=this.mwse.EventPooling.events.get(r);e?(e[0](t,i),"E"===i&&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 eu extends n{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 em(this),this.EventPooling=new i(this),this.virtualPressure=new s(this),this.server.connect(),this.me=new ed(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:i}=e,n={body:r,response:e=>{this.response(t,i,e)},peer:this.peer(t,!0)};this.peer(t,!0).emit("request",n),this.peer("me").emit("request",n)}),this.EventPooling.signal("pack/room",e=>{let{from:t,pack:r,sender:i}=e;this.room(t).emit("message",r,this.peer(i))}),this.EventPooling.signal("room/joined",e=>{let{id:t,roomid:r}=e,i=this.room(r),n=this.peer(t,!0);i.peers.set(n.socketId,n),i.emit("join",n)}),this.EventPooling.signal("room/info",e=>{let{roomId:t,name:r,value:i}=e;this.room(t).emit("updateinfo",r,i)}),this.EventPooling.signal("room/ejected",e=>{let{id:t,roomid:r}=e,i=this.room(r),n=this.peer(t);i.peers.delete(n.socketId),i.emit("eject",n)}),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:i}=e,n=this.peer(t);n.info.info[r]=i,n.emit("info",r,i)}),this.EventPooling.signal("request/pair",e=>{let{from:t,info:r}=e,i=this.peer(t);i.info.info=r,i.emit("request/pair",i),this.peer("me").emit("request/pair",i)}),this.EventPooling.signal("accepted/pair",e=>{let{from:t,info:r}=e,i=this.peer(t);i.info.info=r,i.emit("accepted/pair",i),this.peer("me").emit("accepted/pairr",i)}),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 eh(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 ed(this);return r.setPeerOptions(e),r.active=t,this.peers.set(r.socketId,r),this.emit("peer",r),r}}window.MWSE=eu})(); //# sourceMappingURL=index.js.map diff --git a/script/index.js.map b/script/index.js.map index 7ecde9c..0a538c3 100644 --- a/script/index.js.map +++ b/script/index.js.map @@ -1 +1 @@ -{"mappings":"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","sources":["","frontend/index.ts","frontend/Connection.ts","frontend/EventPool.ts","frontend/EventTarget.ts","frontend/IPPressure.ts","frontend/Peer.ts","frontend/PeerInfo.ts","frontend/WebRTC.ts","frontend/P2PFileSender.ts","node_modules/webrtc-adapter/src/js/adapter_core.js","node_modules/webrtc-adapter/src/js/adapter_factory.js","node_modules/webrtc-adapter/src/js/utils.js","node_modules/webrtc-adapter/src/js/chrome/chrome_shim.js","node_modules/webrtc-adapter/src/js/chrome/getusermedia.js","node_modules/webrtc-adapter/src/js/chrome/getdisplaymedia.js","node_modules/webrtc-adapter/src/js/firefox/firefox_shim.js","node_modules/webrtc-adapter/src/js/firefox/getusermedia.js","node_modules/webrtc-adapter/src/js/firefox/getdisplaymedia.js","node_modules/webrtc-adapter/src/js/safari/safari_shim.js","node_modules/webrtc-adapter/src/js/common_shim.js","node_modules/sdp/sdp.js","frontend/Room.ts","frontend/RoomInfo.ts","frontend/WSTSProtocol.ts"],"sourcesContent":["(() => {\nfunction $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\nfunction $parcel$interopDefault(a) {\n return a && a.__esModule ? a.default : a;\n}\nclass $201ddc79d766b86c$export$98b66c25bb38499d {\n ws;\n endpoint;\n autoPair = false;\n connected = false;\n autoReconnect = true;\n autoReconnectTimeout = 3000;\n autoReconnectTimer;\n constructor(options){\n this.endpoint = new URL(options.endpoint);\n if (typeof options.autoReconnect == \"boolean\") this.autoReconnect = true;\n else if (options.autoReconnect) {\n this.autoReconnect = true;\n this.autoReconnectTimeout = options.autoReconnect.timeout;\n }\n }\n connect() {\n if (this.autoReconnectTimer) clearTimeout(this.autoReconnectTimer);\n this.ws = new WebSocket(this.endpoint.href);\n this.addWSEvents();\n }\n disconnect() {\n this.ws.close();\n }\n addWSEvents() {\n this.ws.addEventListener(\"open\", ()=>this.eventOpen());\n this.ws.addEventListener(\"close\", ()=>this.eventClose());\n this.ws.addEventListener(\"error\", ()=>this.eventError());\n this.ws.addEventListener(\"message\", ({ data: data })=>this.eventMessage(data));\n }\n eventOpen() {\n this.connected = true;\n for (const callback of this.activeConnectionEvent)callback(void 0);\n }\n eventClose() {\n this.connected = false;\n if (this.autoReconnect) this.autoReconnectTimer = setTimeout(this.connect, this.autoReconnectTimeout);\n }\n eventError() {\n this.connected = false;\n }\n recaivePackEvent = [];\n onRecaivePack(func) {\n this.recaivePackEvent.push(func);\n }\n activeConnectionEvent = [];\n onActive(func) {\n if (this.connected) func();\n else this.activeConnectionEvent.push(func);\n }\n eventMessage(data) {\n if (typeof data == \"string\") {\n let $data = JSON.parse(data);\n for (const callback of this.recaivePackEvent)callback($data);\n }\n }\n tranferToServer(data) {\n if (this.connected) this.ws.send(JSON.stringify(data));\n }\n}\n\n\nclass $7bc29f3852fca8a1$export$2e2bcd8739ae039 {\n wsts;\n events = new Map();\n signals = new Map();\n requests = new Map();\n count = 0;\n constructor(wsts){\n this.wsts = wsts;\n }\n request(msg) {\n return new Promise((ok, rej)=>{\n let id = ++this.count;\n this.wsts.WSTSProtocol.SendRequest(msg, id);\n this.events.set(id, [\n (data)=>{\n ok(data);\n },\n (data)=>{\n rej(data);\n }\n ]);\n });\n }\n stream(msg, callback) {\n let id = ++this.count;\n this.wsts.WSTSProtocol.StartStream(msg, id);\n this.events.set(id, [\n (data)=>{\n callback(data);\n },\n ()=>{}\n ]);\n }\n signal(event, callback) {\n let T = this.signals.get(event);\n if (!T) this.signals.set(event, [\n callback\n ]);\n else T.push(callback);\n }\n}\n\n\nclass $639a7a490074f3f2$export$2e2bcd8739ae039 {\n events = {};\n emit(eventName, ...args) {\n if (this.events[eventName]) for (const callback of this.events[eventName])callback(...args);\n }\n on(eventName, callback) {\n if (this.events[eventName]) this.events[eventName].push(callback);\n else this.events[eventName] = [\n callback\n ];\n }\n activeScope = false;\n scope(f) {\n if (this.activeScope) f();\n else this.on(\"scope\", f);\n }\n}\n\n\nclass $707287ab76ae8d6a$export$cd59d3e68ede65a1 {\n mwse;\n APNumber;\n APShortCode;\n APIPAddress;\n constructor(mwse){\n this.mwse = mwse;\n }\n async allocAPIPAddress() {\n let { status: status , ip: ip } = await this.mwse.EventPooling.request({\n type: \"alloc/APIPAddress\"\n });\n if (status == \"success\") {\n this.APIPAddress = ip;\n return ip;\n } else throw new Error(\"Error Allocated Access Point IP Address\");\n }\n async allocAPNumber() {\n let { status: status , number: number } = await this.mwse.EventPooling.request({\n type: \"alloc/APNumber\"\n });\n if (status == \"success\") {\n this.APNumber = number;\n return number;\n } else throw new Error(\"Error Allocated Access Point Number\");\n }\n async allocAPShortCode() {\n let { status: status , code: code } = await this.mwse.EventPooling.request({\n type: \"alloc/APShortCode\"\n });\n if (status == \"success\") {\n this.APShortCode = code;\n return code;\n } else throw new Error(\"Error Allocated Access Point Short Code\");\n }\n async reallocAPIPAddress() {\n let { status: status , ip: ip } = await this.mwse.EventPooling.request({\n type: \"realloc/APIPAddress\"\n });\n if (status == \"success\") {\n this.APIPAddress = ip;\n return ip;\n } else throw new Error(\"Error Reallocated Access Point IP Address\");\n }\n async reallocAPNumber() {\n let { status: status , number: number } = await this.mwse.EventPooling.request({\n type: \"realloc/APNumber\"\n });\n if (status == \"success\") {\n this.APNumber = number;\n return number;\n } else throw new Error(\"Error Reallocated Access Point Number\");\n }\n async reallocAPShortCode() {\n let { status: status , code: code } = await this.mwse.EventPooling.request({\n type: \"realloc/APShortCode\"\n });\n if (status == \"success\") {\n this.APShortCode = code;\n return code;\n } else throw new Error(\"Error Reallocated Access Point Short Code\");\n }\n async releaseAPIPAddress() {\n let { status: status } = await this.mwse.EventPooling.request({\n type: \"release/APIPAddress\"\n });\n if (status == \"success\") this.APIPAddress = undefined;\n else throw new Error(\"Error release Access Point IP Address\");\n }\n async releaseAPNumber() {\n let { status: status } = await this.mwse.EventPooling.request({\n type: \"release/APNumber\"\n });\n if (status == \"success\") this.APNumber = undefined;\n else throw new Error(\"Error release Access Point Number\");\n }\n async releaseAPShortCode() {\n let { status: status } = await this.mwse.EventPooling.request({\n type: \"release/APShortCode\"\n });\n if (status == \"success\") this.APShortCode = undefined;\n else throw new Error(\"Error release Access Point Short Code\");\n }\n async queryAPIPAddress(ip) {\n let { status: status , socket: socket } = await this.mwse.EventPooling.request({\n type: \"whois/APIPAddress\",\n whois: ip\n });\n if (status == \"success\") return socket;\n else return null;\n }\n async queryAPNumber(number) {\n let { status: status , socket: socket } = await this.mwse.EventPooling.request({\n type: \"whois/APNumber\",\n whois: number\n });\n if (status == \"success\") return socket;\n else return null;\n }\n async queryAPShortCode(code) {\n let { status: status , socket: socket } = await this.mwse.EventPooling.request({\n type: \"whois/APShortCode\",\n whois: code\n });\n if (status == \"success\") return socket;\n else return null;\n }\n}\n\n\n\nclass $d7d20b916ab000fe$export$f3bd5f68ae16de {\n peer;\n info = {};\n constructor(mwse){\n this.peer = mwse;\n }\n async fetch(name) {\n if (name) {\n let rinfo = await this.peer.mwse.EventPooling.request({\n type: \"peer/info\",\n peer: this.peer.socketId,\n name: name\n });\n if (rinfo.status == \"success\") this.info = rinfo.info;\n else console.warn(rinfo.message);\n } else {\n let rinfo = await this.peer.mwse.EventPooling.request({\n type: \"peer/info\",\n peer: this.peer.socketId\n });\n if (rinfo.status == \"success\") this.info = rinfo.info;\n else console.warn(rinfo.message);\n }\n return this.info;\n }\n set(name, value) {\n this.info[name] = value;\n this.peer.mwse.WSTSProtocol.SendOnly({\n type: \"auth/info\",\n name: name,\n value: value\n });\n }\n get(name) {\n return name ? this.info[name] : this.info;\n }\n}\n\n\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */ /* eslint-env node */ /*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */ /*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */ /* eslint-env node */ \"use strict\";\nlet $35583cf39f4111ff$var$logDisabled_ = true;\nlet $35583cf39f4111ff$var$deprecationWarnings_ = true;\nfunction $35583cf39f4111ff$export$e3c02be309be1f23(uastring, expr, pos) {\n const match = uastring.match(expr);\n return match && match.length >= pos && parseInt(match[pos], 10);\n}\nfunction $35583cf39f4111ff$export$1f48841962b828b1(window1, eventNameToWrap, wrapper) {\n if (!window1.RTCPeerConnection) return;\n const proto = window1.RTCPeerConnection.prototype;\n const nativeAddEventListener = proto.addEventListener;\n proto.addEventListener = function(nativeEventName, cb) {\n if (nativeEventName !== eventNameToWrap) return nativeAddEventListener.apply(this, arguments);\n const wrappedCallback = (e)=>{\n const modifiedEvent = wrapper(e);\n if (modifiedEvent) {\n if (cb.handleEvent) cb.handleEvent(modifiedEvent);\n else cb(modifiedEvent);\n }\n };\n this._eventMap = this._eventMap || {};\n if (!this._eventMap[eventNameToWrap]) this._eventMap[eventNameToWrap] = new Map();\n this._eventMap[eventNameToWrap].set(cb, wrappedCallback);\n return nativeAddEventListener.apply(this, [\n nativeEventName,\n wrappedCallback\n ]);\n };\n const nativeRemoveEventListener = proto.removeEventListener;\n proto.removeEventListener = function(nativeEventName, cb) {\n if (nativeEventName !== eventNameToWrap || !this._eventMap || !this._eventMap[eventNameToWrap]) return nativeRemoveEventListener.apply(this, arguments);\n if (!this._eventMap[eventNameToWrap].has(cb)) return nativeRemoveEventListener.apply(this, arguments);\n const unwrappedCb = this._eventMap[eventNameToWrap].get(cb);\n this._eventMap[eventNameToWrap].delete(cb);\n if (this._eventMap[eventNameToWrap].size === 0) delete this._eventMap[eventNameToWrap];\n if (Object.keys(this._eventMap).length === 0) delete this._eventMap;\n return nativeRemoveEventListener.apply(this, [\n nativeEventName,\n unwrappedCb\n ]);\n };\n Object.defineProperty(proto, \"on\" + eventNameToWrap, {\n get () {\n return this[\"_on\" + eventNameToWrap];\n },\n set (cb) {\n if (this[\"_on\" + eventNameToWrap]) {\n this.removeEventListener(eventNameToWrap, this[\"_on\" + eventNameToWrap]);\n delete this[\"_on\" + eventNameToWrap];\n }\n if (cb) this.addEventListener(eventNameToWrap, this[\"_on\" + eventNameToWrap] = cb);\n },\n enumerable: true,\n configurable: true\n });\n}\nfunction $35583cf39f4111ff$export$afbfee8cc06fd3e4(bool) {\n if (typeof bool !== \"boolean\") return new Error(\"Argument type: \" + typeof bool + \". Please use a boolean.\");\n $35583cf39f4111ff$var$logDisabled_ = bool;\n return bool ? \"adapter.js logging disabled\" : \"adapter.js logging enabled\";\n}\nfunction $35583cf39f4111ff$export$51516be4b019e41e(bool) {\n if (typeof bool !== \"boolean\") return new Error(\"Argument type: \" + typeof bool + \". Please use a boolean.\");\n $35583cf39f4111ff$var$deprecationWarnings_ = !bool;\n return \"adapter.js deprecation warnings \" + (bool ? \"disabled\" : \"enabled\");\n}\nfunction $35583cf39f4111ff$export$bef1f36f5486a6a3() {\n if (typeof window === \"object\") {\n if ($35583cf39f4111ff$var$logDisabled_) return;\n if (typeof console !== \"undefined\" && typeof console.log === \"function\") console.log.apply(console, arguments);\n }\n}\nfunction $35583cf39f4111ff$export$cdd73fc4100a6ef4(oldMethod, newMethod) {\n if (!$35583cf39f4111ff$var$deprecationWarnings_) return;\n console.warn(oldMethod + \" is deprecated, please use \" + newMethod + \" instead.\");\n}\nfunction $35583cf39f4111ff$export$2d31490a0c05f094(window1) {\n // Returned result object.\n const result = {\n browser: null,\n version: null\n };\n // Fail early if it's not a browser\n if (typeof window1 === \"undefined\" || !window1.navigator || !window1.navigator.userAgent) {\n result.browser = \"Not a browser.\";\n return result;\n }\n const { navigator: navigator } = window1;\n if (navigator.mozGetUserMedia) {\n result.browser = \"firefox\";\n result.version = $35583cf39f4111ff$export$e3c02be309be1f23(navigator.userAgent, /Firefox\\/(\\d+)\\./, 1);\n } else if (navigator.webkitGetUserMedia || window1.isSecureContext === false && window1.webkitRTCPeerConnection) {\n // Chrome, Chromium, Webview, Opera.\n // Version matches Chrome/WebRTC version.\n // Chrome 74 removed webkitGetUserMedia on http as well so we need the\n // more complicated fallback to webkitRTCPeerConnection.\n result.browser = \"chrome\";\n result.version = $35583cf39f4111ff$export$e3c02be309be1f23(navigator.userAgent, /Chrom(e|ium)\\/(\\d+)\\./, 2);\n } else if (window1.RTCPeerConnection && navigator.userAgent.match(/AppleWebKit\\/(\\d+)\\./)) {\n result.browser = \"safari\";\n result.version = $35583cf39f4111ff$export$e3c02be309be1f23(navigator.userAgent, /AppleWebKit\\/(\\d+)\\./, 1);\n result.supportsUnifiedPlan = window1.RTCRtpTransceiver && \"currentDirection\" in window1.RTCRtpTransceiver.prototype;\n } else {\n result.browser = \"Not a supported browser.\";\n return result;\n }\n return result;\n}\n/**\n * Checks if something is an object.\n *\n * @param {*} val The something you want to check.\n * @return true if val is an object, false otherwise.\n */ function $35583cf39f4111ff$var$isObject(val) {\n return Object.prototype.toString.call(val) === \"[object Object]\";\n}\nfunction $35583cf39f4111ff$export$15384eac40dc88c8(data) {\n if (!$35583cf39f4111ff$var$isObject(data)) return data;\n return Object.keys(data).reduce(function(accumulator, key) {\n const isObj = $35583cf39f4111ff$var$isObject(data[key]);\n const value = isObj ? $35583cf39f4111ff$export$15384eac40dc88c8(data[key]) : data[key];\n const isEmptyObject = isObj && !Object.keys(value).length;\n if (value === undefined || isEmptyObject) return accumulator;\n return Object.assign(accumulator, {\n [key]: value\n });\n }, {});\n}\nfunction $35583cf39f4111ff$export$571b373e75babb58(stats, base, resultSet) {\n if (!base || resultSet.has(base.id)) return;\n resultSet.set(base.id, base);\n Object.keys(base).forEach((name)=>{\n if (name.endsWith(\"Id\")) $35583cf39f4111ff$export$571b373e75babb58(stats, stats.get(base[name]), resultSet);\n else if (name.endsWith(\"Ids\")) base[name].forEach((id)=>{\n $35583cf39f4111ff$export$571b373e75babb58(stats, stats.get(id), resultSet);\n });\n });\n}\nfunction $35583cf39f4111ff$export$93439ffc3f787d51(result, track, outbound) {\n const streamStatsType = outbound ? \"outbound-rtp\" : \"inbound-rtp\";\n const filteredResult = new Map();\n if (track === null) return filteredResult;\n const trackStats = [];\n result.forEach((value)=>{\n if (value.type === \"track\" && value.trackIdentifier === track.id) trackStats.push(value);\n });\n trackStats.forEach((trackStat)=>{\n result.forEach((stats)=>{\n if (stats.type === streamStatsType && stats.trackId === trackStat.id) $35583cf39f4111ff$export$571b373e75babb58(result, stats, filteredResult);\n });\n });\n return filteredResult;\n}\n\n\nvar $e3f02d0a98ccb0db$exports = {};\n\n$parcel$export($e3f02d0a98ccb0db$exports, \"shimMediaStream\", () => $e3f02d0a98ccb0db$export$33ee24e7a300bcd1);\n$parcel$export($e3f02d0a98ccb0db$exports, \"shimOnTrack\", () => $e3f02d0a98ccb0db$export$f358708f68ab068);\n$parcel$export($e3f02d0a98ccb0db$exports, \"shimGetSendersWithDtmf\", () => $e3f02d0a98ccb0db$export$a41a030a2842f5d6);\n$parcel$export($e3f02d0a98ccb0db$exports, \"shimGetStats\", () => $e3f02d0a98ccb0db$export$90608323826f0b17);\n$parcel$export($e3f02d0a98ccb0db$exports, \"shimSenderReceiverGetStats\", () => $e3f02d0a98ccb0db$export$f2f0f2338114eb4b);\n$parcel$export($e3f02d0a98ccb0db$exports, \"shimAddTrackRemoveTrackWithNative\", () => $e3f02d0a98ccb0db$export$30e3cdd46f8d5100);\n$parcel$export($e3f02d0a98ccb0db$exports, \"shimAddTrackRemoveTrack\", () => $e3f02d0a98ccb0db$export$9588259fcf4ebc91);\n$parcel$export($e3f02d0a98ccb0db$exports, \"shimPeerConnection\", () => $e3f02d0a98ccb0db$export$852a08dda9a55ea7);\n$parcel$export($e3f02d0a98ccb0db$exports, \"fixNegotiationNeeded\", () => $e3f02d0a98ccb0db$export$341293bbeaae37cb);\n$parcel$export($e3f02d0a98ccb0db$exports, \"shimGetUserMedia\", () => $3b9679f8ab9bc604$export$1ed4910f4d37dc5e);\n$parcel$export($e3f02d0a98ccb0db$exports, \"shimGetDisplayMedia\", () => $26c6446bf842b72e$export$97270b87351d9c04);\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */ /* eslint-env node */ \n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */ /* eslint-env node */ \n\"use strict\";\nconst $3b9679f8ab9bc604$var$logging = $35583cf39f4111ff$export$bef1f36f5486a6a3;\nfunction $3b9679f8ab9bc604$export$1ed4910f4d37dc5e(window, browserDetails) {\n const navigator = window && window.navigator;\n if (!navigator.mediaDevices) return;\n const constraintsToChrome_ = function(c) {\n if (typeof c !== \"object\" || c.mandatory || c.optional) return c;\n const cc = {};\n Object.keys(c).forEach((key)=>{\n if (key === \"require\" || key === \"advanced\" || key === \"mediaSource\") return;\n const r = typeof c[key] === \"object\" ? c[key] : {\n ideal: c[key]\n };\n if (r.exact !== undefined && typeof r.exact === \"number\") r.min = r.max = r.exact;\n const oldname_ = function(prefix, name) {\n if (prefix) return prefix + name.charAt(0).toUpperCase() + name.slice(1);\n return name === \"deviceId\" ? \"sourceId\" : name;\n };\n if (r.ideal !== undefined) {\n cc.optional = cc.optional || [];\n let oc = {};\n if (typeof r.ideal === \"number\") {\n oc[oldname_(\"min\", key)] = r.ideal;\n cc.optional.push(oc);\n oc = {};\n oc[oldname_(\"max\", key)] = r.ideal;\n cc.optional.push(oc);\n } else {\n oc[oldname_(\"\", key)] = r.ideal;\n cc.optional.push(oc);\n }\n }\n if (r.exact !== undefined && typeof r.exact !== \"number\") {\n cc.mandatory = cc.mandatory || {};\n cc.mandatory[oldname_(\"\", key)] = r.exact;\n } else [\n \"min\",\n \"max\"\n ].forEach((mix)=>{\n if (r[mix] !== undefined) {\n cc.mandatory = cc.mandatory || {};\n cc.mandatory[oldname_(mix, key)] = r[mix];\n }\n });\n });\n if (c.advanced) cc.optional = (cc.optional || []).concat(c.advanced);\n return cc;\n };\n const shimConstraints_ = function(constraints, func) {\n if (browserDetails.version >= 61) return func(constraints);\n constraints = JSON.parse(JSON.stringify(constraints));\n if (constraints && typeof constraints.audio === \"object\") {\n const remap = function(obj, a, b) {\n if (a in obj && !(b in obj)) {\n obj[b] = obj[a];\n delete obj[a];\n }\n };\n constraints = JSON.parse(JSON.stringify(constraints));\n remap(constraints.audio, \"autoGainControl\", \"googAutoGainControl\");\n remap(constraints.audio, \"noiseSuppression\", \"googNoiseSuppression\");\n constraints.audio = constraintsToChrome_(constraints.audio);\n }\n if (constraints && typeof constraints.video === \"object\") {\n // Shim facingMode for mobile & surface pro.\n let face = constraints.video.facingMode;\n face = face && (typeof face === \"object\" ? face : {\n ideal: face\n });\n const getSupportedFacingModeLies = browserDetails.version < 66;\n if (face && (face.exact === \"user\" || face.exact === \"environment\" || face.ideal === \"user\" || face.ideal === \"environment\") && !(navigator.mediaDevices.getSupportedConstraints && navigator.mediaDevices.getSupportedConstraints().facingMode && !getSupportedFacingModeLies)) {\n delete constraints.video.facingMode;\n let matches;\n if (face.exact === \"environment\" || face.ideal === \"environment\") matches = [\n \"back\",\n \"rear\"\n ];\n else if (face.exact === \"user\" || face.ideal === \"user\") matches = [\n \"front\"\n ];\n if (matches) // Look for matches in label, or use last cam for back (typical).\n return navigator.mediaDevices.enumerateDevices().then((devices)=>{\n devices = devices.filter((d)=>d.kind === \"videoinput\");\n let dev = devices.find((d)=>matches.some((match)=>d.label.toLowerCase().includes(match)));\n if (!dev && devices.length && matches.includes(\"back\")) dev = devices[devices.length - 1]; // more likely the back cam\n if (dev) constraints.video.deviceId = face.exact ? {\n exact: dev.deviceId\n } : {\n ideal: dev.deviceId\n };\n constraints.video = constraintsToChrome_(constraints.video);\n $3b9679f8ab9bc604$var$logging(\"chrome: \" + JSON.stringify(constraints));\n return func(constraints);\n });\n }\n constraints.video = constraintsToChrome_(constraints.video);\n }\n $3b9679f8ab9bc604$var$logging(\"chrome: \" + JSON.stringify(constraints));\n return func(constraints);\n };\n const shimError_ = function(e) {\n if (browserDetails.version >= 64) return e;\n return {\n name: ({\n PermissionDeniedError: \"NotAllowedError\",\n PermissionDismissedError: \"NotAllowedError\",\n InvalidStateError: \"NotAllowedError\",\n DevicesNotFoundError: \"NotFoundError\",\n ConstraintNotSatisfiedError: \"OverconstrainedError\",\n TrackStartError: \"NotReadableError\",\n MediaDeviceFailedDueToShutdown: \"NotAllowedError\",\n MediaDeviceKillSwitchOn: \"NotAllowedError\",\n TabCaptureError: \"AbortError\",\n ScreenCaptureError: \"AbortError\",\n DeviceCaptureError: \"AbortError\"\n })[e.name] || e.name,\n message: e.message,\n constraint: e.constraint || e.constraintName,\n toString () {\n return this.name + (this.message && \": \") + this.message;\n }\n };\n };\n const getUserMedia_ = function(constraints, onSuccess, onError) {\n shimConstraints_(constraints, (c)=>{\n navigator.webkitGetUserMedia(c, onSuccess, (e)=>{\n if (onError) onError(shimError_(e));\n });\n });\n };\n navigator.getUserMedia = getUserMedia_.bind(navigator);\n // Even though Chrome 45 has navigator.mediaDevices and a getUserMedia\n // function which returns a Promise, it does not accept spec-style\n // constraints.\n if (navigator.mediaDevices.getUserMedia) {\n const origGetUserMedia = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);\n navigator.mediaDevices.getUserMedia = function(cs) {\n return shimConstraints_(cs, (c)=>origGetUserMedia(c).then((stream)=>{\n if (c.audio && !stream.getAudioTracks().length || c.video && !stream.getVideoTracks().length) {\n stream.getTracks().forEach((track)=>{\n track.stop();\n });\n throw new DOMException(\"\", \"NotFoundError\");\n }\n return stream;\n }, (e)=>Promise.reject(shimError_(e))));\n };\n }\n}\n\n\n/*\n * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */ /* eslint-env node */ \"use strict\";\nfunction $26c6446bf842b72e$export$97270b87351d9c04(window, getSourceId) {\n if (window.navigator.mediaDevices && \"getDisplayMedia\" in window.navigator.mediaDevices) return;\n if (!window.navigator.mediaDevices) return;\n // getSourceId is a function that returns a promise resolving with\n // the sourceId of the screen/window/tab to be shared.\n if (typeof getSourceId !== \"function\") {\n console.error(\"shimGetDisplayMedia: getSourceId argument is not a function\");\n return;\n }\n window.navigator.mediaDevices.getDisplayMedia = function getDisplayMedia(constraints) {\n return getSourceId(constraints).then((sourceId)=>{\n const widthSpecified = constraints.video && constraints.video.width;\n const heightSpecified = constraints.video && constraints.video.height;\n const frameRateSpecified = constraints.video && constraints.video.frameRate;\n constraints.video = {\n mandatory: {\n chromeMediaSource: \"desktop\",\n chromeMediaSourceId: sourceId,\n maxFrameRate: frameRateSpecified || 3\n }\n };\n if (widthSpecified) constraints.video.mandatory.maxWidth = widthSpecified;\n if (heightSpecified) constraints.video.mandatory.maxHeight = heightSpecified;\n return window.navigator.mediaDevices.getUserMedia(constraints);\n });\n };\n}\n\n\n\"use strict\";\nfunction $e3f02d0a98ccb0db$export$33ee24e7a300bcd1(window) {\n window.MediaStream = window.MediaStream || window.webkitMediaStream;\n}\nfunction $e3f02d0a98ccb0db$export$f358708f68ab068(window) {\n if (typeof window === \"object\" && window.RTCPeerConnection && !(\"ontrack\" in window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, \"ontrack\", {\n get () {\n return this._ontrack;\n },\n set (f) {\n if (this._ontrack) this.removeEventListener(\"track\", this._ontrack);\n this.addEventListener(\"track\", this._ontrack = f);\n },\n enumerable: true,\n configurable: true\n });\n const origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() {\n if (!this._ontrackpoly) {\n this._ontrackpoly = (e)=>{\n // onaddstream does not fire when a track is added to an existing\n // stream. But stream.onaddtrack is implemented so we use that.\n e.stream.addEventListener(\"addtrack\", (te)=>{\n let receiver;\n if (window.RTCPeerConnection.prototype.getReceivers) receiver = this.getReceivers().find((r)=>r.track && r.track.id === te.track.id);\n else receiver = {\n track: te.track\n };\n const event = new Event(\"track\");\n event.track = te.track;\n event.receiver = receiver;\n event.transceiver = {\n receiver: receiver\n };\n event.streams = [\n e.stream\n ];\n this.dispatchEvent(event);\n });\n e.stream.getTracks().forEach((track)=>{\n let receiver;\n if (window.RTCPeerConnection.prototype.getReceivers) receiver = this.getReceivers().find((r)=>r.track && r.track.id === track.id);\n else receiver = {\n track: track\n };\n const event = new Event(\"track\");\n event.track = track;\n event.receiver = receiver;\n event.transceiver = {\n receiver: receiver\n };\n event.streams = [\n e.stream\n ];\n this.dispatchEvent(event);\n });\n };\n this.addEventListener(\"addstream\", this._ontrackpoly);\n }\n return origSetRemoteDescription.apply(this, arguments);\n };\n } else // even if RTCRtpTransceiver is in window, it is only used and\n // emitted in unified-plan. Unfortunately this means we need\n // to unconditionally wrap the event.\n $35583cf39f4111ff$export$1f48841962b828b1(window, \"track\", (e)=>{\n if (!e.transceiver) Object.defineProperty(e, \"transceiver\", {\n value: {\n receiver: e.receiver\n }\n });\n return e;\n });\n}\nfunction $e3f02d0a98ccb0db$export$a41a030a2842f5d6(window) {\n // Overrides addTrack/removeTrack, depends on shimAddTrackRemoveTrack.\n if (typeof window === \"object\" && window.RTCPeerConnection && !(\"getSenders\" in window.RTCPeerConnection.prototype) && \"createDTMFSender\" in window.RTCPeerConnection.prototype) {\n const shimSenderWithDtmf = function(pc, track) {\n return {\n track: track,\n get dtmf () {\n if (this._dtmf === undefined) {\n if (track.kind === \"audio\") this._dtmf = pc.createDTMFSender(track);\n else this._dtmf = null;\n }\n return this._dtmf;\n },\n _pc: pc\n };\n };\n // augment addTrack when getSenders is not available.\n if (!window.RTCPeerConnection.prototype.getSenders) {\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n this._senders = this._senders || [];\n return this._senders.slice(); // return a copy of the internal state.\n };\n const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) {\n let sender = origAddTrack.apply(this, arguments);\n if (!sender) {\n sender = shimSenderWithDtmf(this, track);\n this._senders.push(sender);\n }\n return sender;\n };\n const origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack;\n window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) {\n origRemoveTrack.apply(this, arguments);\n const idx = this._senders.indexOf(sender);\n if (idx !== -1) this._senders.splice(idx, 1);\n };\n }\n const origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n this._senders = this._senders || [];\n origAddStream.apply(this, [\n stream\n ]);\n stream.getTracks().forEach((track)=>{\n this._senders.push(shimSenderWithDtmf(this, track));\n });\n };\n const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n this._senders = this._senders || [];\n origRemoveStream.apply(this, [\n stream\n ]);\n stream.getTracks().forEach((track)=>{\n const sender = this._senders.find((s)=>s.track === track);\n if (sender) this._senders.splice(this._senders.indexOf(sender), 1);\n });\n };\n } else if (typeof window === \"object\" && window.RTCPeerConnection && \"getSenders\" in window.RTCPeerConnection.prototype && \"createDTMFSender\" in window.RTCPeerConnection.prototype && window.RTCRtpSender && !(\"dtmf\" in window.RTCRtpSender.prototype)) {\n const origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n const senders = origGetSenders.apply(this, []);\n senders.forEach((sender)=>sender._pc = this);\n return senders;\n };\n Object.defineProperty(window.RTCRtpSender.prototype, \"dtmf\", {\n get () {\n if (this._dtmf === undefined) {\n if (this.track.kind === \"audio\") this._dtmf = this._pc.createDTMFSender(this.track);\n else this._dtmf = null;\n }\n return this._dtmf;\n }\n });\n }\n}\nfunction $e3f02d0a98ccb0db$export$90608323826f0b17(window) {\n if (!window.RTCPeerConnection) return;\n const origGetStats = window.RTCPeerConnection.prototype.getStats;\n window.RTCPeerConnection.prototype.getStats = function getStats() {\n const [selector, onSucc, onErr] = arguments;\n // If selector is a function then we are in the old style stats so just\n // pass back the original getStats format to avoid breaking old users.\n if (arguments.length > 0 && typeof selector === \"function\") return origGetStats.apply(this, arguments);\n // When spec-style getStats is supported, return those when called with\n // either no arguments or the selector argument is null.\n if (origGetStats.length === 0 && (arguments.length === 0 || typeof selector !== \"function\")) return origGetStats.apply(this, []);\n const fixChromeStats_ = function(response) {\n const standardReport = {};\n const reports = response.result();\n reports.forEach((report)=>{\n const standardStats = {\n id: report.id,\n timestamp: report.timestamp,\n type: {\n localcandidate: \"local-candidate\",\n remotecandidate: \"remote-candidate\"\n }[report.type] || report.type\n };\n report.names().forEach((name)=>{\n standardStats[name] = report.stat(name);\n });\n standardReport[standardStats.id] = standardStats;\n });\n return standardReport;\n };\n // shim getStats with maplike support\n const makeMapStats = function(stats) {\n return new Map(Object.keys(stats).map((key)=>[\n key,\n stats[key]\n ]));\n };\n if (arguments.length >= 2) {\n const successCallbackWrapper_ = function(response) {\n onSucc(makeMapStats(fixChromeStats_(response)));\n };\n return origGetStats.apply(this, [\n successCallbackWrapper_,\n selector\n ]);\n }\n // promise-support\n return new Promise((resolve, reject)=>{\n origGetStats.apply(this, [\n function(response) {\n resolve(makeMapStats(fixChromeStats_(response)));\n },\n reject\n ]);\n }).then(onSucc, onErr);\n };\n}\nfunction $e3f02d0a98ccb0db$export$f2f0f2338114eb4b(window) {\n if (!(typeof window === \"object\" && window.RTCPeerConnection && window.RTCRtpSender && window.RTCRtpReceiver)) return;\n // shim sender stats.\n if (!(\"getStats\" in window.RTCRtpSender.prototype)) {\n const origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n if (origGetSenders) window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n const senders = origGetSenders.apply(this, []);\n senders.forEach((sender)=>sender._pc = this);\n return senders;\n };\n const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n if (origAddTrack) window.RTCPeerConnection.prototype.addTrack = function addTrack() {\n const sender = origAddTrack.apply(this, arguments);\n sender._pc = this;\n return sender;\n };\n window.RTCRtpSender.prototype.getStats = function getStats() {\n const sender = this;\n return this._pc.getStats().then((result)=>/* Note: this will include stats of all senders that\n * send a track with the same id as sender.track as\n * it is not possible to identify the RTCRtpSender.\n */ $35583cf39f4111ff$export$93439ffc3f787d51(result, sender.track, true));\n };\n }\n // shim receiver stats.\n if (!(\"getStats\" in window.RTCRtpReceiver.prototype)) {\n const origGetReceivers = window.RTCPeerConnection.prototype.getReceivers;\n if (origGetReceivers) window.RTCPeerConnection.prototype.getReceivers = function getReceivers() {\n const receivers = origGetReceivers.apply(this, []);\n receivers.forEach((receiver)=>receiver._pc = this);\n return receivers;\n };\n $35583cf39f4111ff$export$1f48841962b828b1(window, \"track\", (e)=>{\n e.receiver._pc = e.srcElement;\n return e;\n });\n window.RTCRtpReceiver.prototype.getStats = function getStats() {\n const receiver = this;\n return this._pc.getStats().then((result)=>$35583cf39f4111ff$export$93439ffc3f787d51(result, receiver.track, false));\n };\n }\n if (!(\"getStats\" in window.RTCRtpSender.prototype && \"getStats\" in window.RTCRtpReceiver.prototype)) return;\n // shim RTCPeerConnection.getStats(track).\n const origGetStats = window.RTCPeerConnection.prototype.getStats;\n window.RTCPeerConnection.prototype.getStats = function getStats() {\n if (arguments.length > 0 && arguments[0] instanceof window.MediaStreamTrack) {\n const track = arguments[0];\n let sender;\n let receiver;\n let err;\n this.getSenders().forEach((s)=>{\n if (s.track === track) {\n if (sender) err = true;\n else sender = s;\n }\n });\n this.getReceivers().forEach((r)=>{\n if (r.track === track) {\n if (receiver) err = true;\n else receiver = r;\n }\n return r.track === track;\n });\n if (err || sender && receiver) return Promise.reject(new DOMException(\"There are more than one sender or receiver for the track.\", \"InvalidAccessError\"));\n else if (sender) return sender.getStats();\n else if (receiver) return receiver.getStats();\n return Promise.reject(new DOMException(\"There is no sender or receiver for the track.\", \"InvalidAccessError\"));\n }\n return origGetStats.apply(this, arguments);\n };\n}\nfunction $e3f02d0a98ccb0db$export$30e3cdd46f8d5100(window) {\n // shim addTrack/removeTrack with native variants in order to make\n // the interactions with legacy getLocalStreams behave as in other browsers.\n // Keeps a mapping stream.id => [stream, rtpsenders...]\n window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n return Object.keys(this._shimmedLocalStreams).map((streamId)=>this._shimmedLocalStreams[streamId][0]);\n };\n const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) {\n if (!stream) return origAddTrack.apply(this, arguments);\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n const sender = origAddTrack.apply(this, arguments);\n if (!this._shimmedLocalStreams[stream.id]) this._shimmedLocalStreams[stream.id] = [\n stream,\n sender\n ];\n else if (this._shimmedLocalStreams[stream.id].indexOf(sender) === -1) this._shimmedLocalStreams[stream.id].push(sender);\n return sender;\n };\n const origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n stream.getTracks().forEach((track)=>{\n const alreadyExists = this.getSenders().find((s)=>s.track === track);\n if (alreadyExists) throw new DOMException(\"Track already exists.\", \"InvalidAccessError\");\n });\n const existingSenders = this.getSenders();\n origAddStream.apply(this, arguments);\n const newSenders = this.getSenders().filter((newSender)=>existingSenders.indexOf(newSender) === -1);\n this._shimmedLocalStreams[stream.id] = [\n stream\n ].concat(newSenders);\n };\n const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n delete this._shimmedLocalStreams[stream.id];\n return origRemoveStream.apply(this, arguments);\n };\n const origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack;\n window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n if (sender) Object.keys(this._shimmedLocalStreams).forEach((streamId)=>{\n const idx = this._shimmedLocalStreams[streamId].indexOf(sender);\n if (idx !== -1) this._shimmedLocalStreams[streamId].splice(idx, 1);\n if (this._shimmedLocalStreams[streamId].length === 1) delete this._shimmedLocalStreams[streamId];\n });\n return origRemoveTrack.apply(this, arguments);\n };\n}\nfunction $e3f02d0a98ccb0db$export$9588259fcf4ebc91(window, browserDetails) {\n if (!window.RTCPeerConnection) return;\n // shim addTrack and removeTrack.\n if (window.RTCPeerConnection.prototype.addTrack && browserDetails.version >= 65) return $e3f02d0a98ccb0db$export$30e3cdd46f8d5100(window);\n // also shim pc.getLocalStreams when addTrack is shimmed\n // to return the original streams.\n const origGetLocalStreams = window.RTCPeerConnection.prototype.getLocalStreams;\n window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() {\n const nativeStreams = origGetLocalStreams.apply(this);\n this._reverseStreams = this._reverseStreams || {};\n return nativeStreams.map((stream)=>this._reverseStreams[stream.id]);\n };\n const origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n stream.getTracks().forEach((track)=>{\n const alreadyExists = this.getSenders().find((s)=>s.track === track);\n if (alreadyExists) throw new DOMException(\"Track already exists.\", \"InvalidAccessError\");\n });\n // Add identity mapping for consistency with addTrack.\n // Unless this is being used with a stream from addTrack.\n if (!this._reverseStreams[stream.id]) {\n const newStream = new window.MediaStream(stream.getTracks());\n this._streams[stream.id] = newStream;\n this._reverseStreams[newStream.id] = stream;\n stream = newStream;\n }\n origAddStream.apply(this, [\n stream\n ]);\n };\n const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n origRemoveStream.apply(this, [\n this._streams[stream.id] || stream\n ]);\n delete this._reverseStreams[this._streams[stream.id] ? this._streams[stream.id].id : stream.id];\n delete this._streams[stream.id];\n };\n window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) {\n if (this.signalingState === \"closed\") throw new DOMException(\"The RTCPeerConnection's signalingState is 'closed'.\", \"InvalidStateError\");\n const streams = [].slice.call(arguments, 1);\n if (streams.length !== 1 || !streams[0].getTracks().find((t)=>t === track)) // this is not fully correct but all we can manage without\n // [[associated MediaStreams]] internal slot.\n throw new DOMException(\"The adapter.js addTrack polyfill only supports a single stream which is associated with the specified track.\", \"NotSupportedError\");\n const alreadyExists = this.getSenders().find((s)=>s.track === track);\n if (alreadyExists) throw new DOMException(\"Track already exists.\", \"InvalidAccessError\");\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n const oldStream = this._streams[stream.id];\n if (oldStream) {\n // this is using odd Chrome behaviour, use with caution:\n // https://bugs.chromium.org/p/webrtc/issues/detail?id=7815\n // Note: we rely on the high-level addTrack/dtmf shim to\n // create the sender with a dtmf sender.\n oldStream.addTrack(track);\n // Trigger ONN async.\n Promise.resolve().then(()=>{\n this.dispatchEvent(new Event(\"negotiationneeded\"));\n });\n } else {\n const newStream = new window.MediaStream([\n track\n ]);\n this._streams[stream.id] = newStream;\n this._reverseStreams[newStream.id] = stream;\n this.addStream(newStream);\n }\n return this.getSenders().find((s)=>s.track === track);\n };\n // replace the internal stream id with the external one and\n // vice versa.\n function replaceInternalStreamId(pc, description) {\n let sdp = description.sdp;\n Object.keys(pc._reverseStreams || []).forEach((internalId)=>{\n const externalStream = pc._reverseStreams[internalId];\n const internalStream = pc._streams[externalStream.id];\n sdp = sdp.replace(new RegExp(internalStream.id, \"g\"), externalStream.id);\n });\n return new RTCSessionDescription({\n type: description.type,\n sdp: sdp\n });\n }\n function replaceExternalStreamId(pc, description) {\n let sdp = description.sdp;\n Object.keys(pc._reverseStreams || []).forEach((internalId)=>{\n const externalStream = pc._reverseStreams[internalId];\n const internalStream = pc._streams[externalStream.id];\n sdp = sdp.replace(new RegExp(externalStream.id, \"g\"), internalStream.id);\n });\n return new RTCSessionDescription({\n type: description.type,\n sdp: sdp\n });\n }\n [\n \"createOffer\",\n \"createAnswer\"\n ].forEach(function(method) {\n const nativeMethod = window.RTCPeerConnection.prototype[method];\n const methodObj = {\n [method] () {\n const args = arguments;\n const isLegacyCall = arguments.length && typeof arguments[0] === \"function\";\n if (isLegacyCall) return nativeMethod.apply(this, [\n (description)=>{\n const desc = replaceInternalStreamId(this, description);\n args[0].apply(null, [\n desc\n ]);\n },\n (err)=>{\n if (args[1]) args[1].apply(null, err);\n },\n arguments[2]\n ]);\n return nativeMethod.apply(this, arguments).then((description)=>replaceInternalStreamId(this, description));\n }\n };\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n const origSetLocalDescription = window.RTCPeerConnection.prototype.setLocalDescription;\n window.RTCPeerConnection.prototype.setLocalDescription = function setLocalDescription() {\n if (!arguments.length || !arguments[0].type) return origSetLocalDescription.apply(this, arguments);\n arguments[0] = replaceExternalStreamId(this, arguments[0]);\n return origSetLocalDescription.apply(this, arguments);\n };\n // TODO: mangle getStats: https://w3c.github.io/webrtc-stats/#dom-rtcmediastreamstats-streamidentifier\n const origLocalDescription = Object.getOwnPropertyDescriptor(window.RTCPeerConnection.prototype, \"localDescription\");\n Object.defineProperty(window.RTCPeerConnection.prototype, \"localDescription\", {\n get () {\n const description = origLocalDescription.get.apply(this);\n if (description.type === \"\") return description;\n return replaceInternalStreamId(this, description);\n }\n });\n window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) {\n if (this.signalingState === \"closed\") throw new DOMException(\"The RTCPeerConnection's signalingState is 'closed'.\", \"InvalidStateError\");\n // We can not yet check for sender instanceof RTCRtpSender\n // since we shim RTPSender. So we check if sender._pc is set.\n if (!sender._pc) throw new DOMException(\"Argument 1 of RTCPeerConnection.removeTrack does not implement interface RTCRtpSender.\", \"TypeError\");\n const isLocal = sender._pc === this;\n if (!isLocal) throw new DOMException(\"Sender was not created by this connection.\", \"InvalidAccessError\");\n // Search for the native stream the senders track belongs to.\n this._streams = this._streams || {};\n let stream;\n Object.keys(this._streams).forEach((streamid)=>{\n const hasTrack = this._streams[streamid].getTracks().find((track)=>sender.track === track);\n if (hasTrack) stream = this._streams[streamid];\n });\n if (stream) {\n if (stream.getTracks().length === 1) // if this is the last track of the stream, remove the stream. This\n // takes care of any shimmed _senders.\n this.removeStream(this._reverseStreams[stream.id]);\n else // relying on the same odd chrome behaviour as above.\n stream.removeTrack(sender.track);\n this.dispatchEvent(new Event(\"negotiationneeded\"));\n }\n };\n}\nfunction $e3f02d0a98ccb0db$export$852a08dda9a55ea7(window, browserDetails) {\n if (!window.RTCPeerConnection && window.webkitRTCPeerConnection) // very basic support for old versions.\n window.RTCPeerConnection = window.webkitRTCPeerConnection;\n if (!window.RTCPeerConnection) return;\n // shim implicit creation of RTCSessionDescription/RTCIceCandidate\n if (browserDetails.version < 53) [\n \"setLocalDescription\",\n \"setRemoteDescription\",\n \"addIceCandidate\"\n ].forEach(function(method) {\n const nativeMethod = window.RTCPeerConnection.prototype[method];\n const methodObj = {\n [method] () {\n arguments[0] = new (method === \"addIceCandidate\" ? window.RTCIceCandidate : window.RTCSessionDescription)(arguments[0]);\n return nativeMethod.apply(this, arguments);\n }\n };\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n}\nfunction $e3f02d0a98ccb0db$export$341293bbeaae37cb(window, browserDetails) {\n $35583cf39f4111ff$export$1f48841962b828b1(window, \"negotiationneeded\", (e)=>{\n const pc = e.target;\n if (browserDetails.version < 72 || pc.getConfiguration && pc.getConfiguration().sdpSemantics === \"plan-b\") {\n if (pc.signalingState !== \"stable\") return;\n }\n return e;\n });\n}\n\n\nvar $5c8245455fb0fb72$exports = {};\n\n$parcel$export($5c8245455fb0fb72$exports, \"shimOnTrack\", () => $5c8245455fb0fb72$export$f358708f68ab068);\n$parcel$export($5c8245455fb0fb72$exports, \"shimPeerConnection\", () => $5c8245455fb0fb72$export$852a08dda9a55ea7);\n$parcel$export($5c8245455fb0fb72$exports, \"shimSenderGetStats\", () => $5c8245455fb0fb72$export$f0525502095c04ef);\n$parcel$export($5c8245455fb0fb72$exports, \"shimReceiverGetStats\", () => $5c8245455fb0fb72$export$83d69126527b1171);\n$parcel$export($5c8245455fb0fb72$exports, \"shimRemoveStream\", () => $5c8245455fb0fb72$export$825e523ef749bd8c);\n$parcel$export($5c8245455fb0fb72$exports, \"shimRTCDataChannel\", () => $5c8245455fb0fb72$export$ff9cb3bc8990e8f7);\n$parcel$export($5c8245455fb0fb72$exports, \"shimAddTransceiver\", () => $5c8245455fb0fb72$export$70c77533b6e9908d);\n$parcel$export($5c8245455fb0fb72$exports, \"shimGetParameters\", () => $5c8245455fb0fb72$export$66238223c298fbaa);\n$parcel$export($5c8245455fb0fb72$exports, \"shimCreateOffer\", () => $5c8245455fb0fb72$export$51beccf0e777b843);\n$parcel$export($5c8245455fb0fb72$exports, \"shimCreateAnswer\", () => $5c8245455fb0fb72$export$df0b46e7cef08150);\n$parcel$export($5c8245455fb0fb72$exports, \"shimGetUserMedia\", () => $7252536737e6fa6d$export$1ed4910f4d37dc5e);\n$parcel$export($5c8245455fb0fb72$exports, \"shimGetDisplayMedia\", () => $f85cf98e09e9e2f6$export$97270b87351d9c04);\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */ /* eslint-env node */ \n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */ /* eslint-env node */ \n\"use strict\";\nfunction $7252536737e6fa6d$export$1ed4910f4d37dc5e(window, browserDetails) {\n const navigator = window && window.navigator;\n const MediaStreamTrack = window && window.MediaStreamTrack;\n navigator.getUserMedia = function(constraints, onSuccess, onError) {\n // Replace Firefox 44+'s deprecation warning with unprefixed version.\n $35583cf39f4111ff$export$cdd73fc4100a6ef4(\"navigator.getUserMedia\", \"navigator.mediaDevices.getUserMedia\");\n navigator.mediaDevices.getUserMedia(constraints).then(onSuccess, onError);\n };\n if (!(browserDetails.version > 55 && \"autoGainControl\" in navigator.mediaDevices.getSupportedConstraints())) {\n const remap = function(obj, a, b) {\n if (a in obj && !(b in obj)) {\n obj[b] = obj[a];\n delete obj[a];\n }\n };\n const nativeGetUserMedia = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);\n navigator.mediaDevices.getUserMedia = function(c) {\n if (typeof c === \"object\" && typeof c.audio === \"object\") {\n c = JSON.parse(JSON.stringify(c));\n remap(c.audio, \"autoGainControl\", \"mozAutoGainControl\");\n remap(c.audio, \"noiseSuppression\", \"mozNoiseSuppression\");\n }\n return nativeGetUserMedia(c);\n };\n if (MediaStreamTrack && MediaStreamTrack.prototype.getSettings) {\n const nativeGetSettings = MediaStreamTrack.prototype.getSettings;\n MediaStreamTrack.prototype.getSettings = function() {\n const obj = nativeGetSettings.apply(this, arguments);\n remap(obj, \"mozAutoGainControl\", \"autoGainControl\");\n remap(obj, \"mozNoiseSuppression\", \"noiseSuppression\");\n return obj;\n };\n }\n if (MediaStreamTrack && MediaStreamTrack.prototype.applyConstraints) {\n const nativeApplyConstraints = MediaStreamTrack.prototype.applyConstraints;\n MediaStreamTrack.prototype.applyConstraints = function(c) {\n if (this.kind === \"audio\" && typeof c === \"object\") {\n c = JSON.parse(JSON.stringify(c));\n remap(c, \"autoGainControl\", \"mozAutoGainControl\");\n remap(c, \"noiseSuppression\", \"mozNoiseSuppression\");\n }\n return nativeApplyConstraints.apply(this, [\n c\n ]);\n };\n }\n }\n}\n\n\n/*\n * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */ /* eslint-env node */ \"use strict\";\nfunction $f85cf98e09e9e2f6$export$97270b87351d9c04(window, preferredMediaSource) {\n if (window.navigator.mediaDevices && \"getDisplayMedia\" in window.navigator.mediaDevices) return;\n if (!window.navigator.mediaDevices) return;\n window.navigator.mediaDevices.getDisplayMedia = function getDisplayMedia(constraints) {\n if (!(constraints && constraints.video)) {\n const err = new DOMException(\"getDisplayMedia without video constraints is undefined\");\n err.name = \"NotFoundError\";\n // from https://heycam.github.io/webidl/#idl-DOMException-error-names\n err.code = 8;\n return Promise.reject(err);\n }\n if (constraints.video === true) constraints.video = {\n mediaSource: preferredMediaSource\n };\n else constraints.video.mediaSource = preferredMediaSource;\n return window.navigator.mediaDevices.getUserMedia(constraints);\n };\n}\n\n\n\"use strict\";\nfunction $5c8245455fb0fb72$export$f358708f68ab068(window) {\n if (typeof window === \"object\" && window.RTCTrackEvent && \"receiver\" in window.RTCTrackEvent.prototype && !(\"transceiver\" in window.RTCTrackEvent.prototype)) Object.defineProperty(window.RTCTrackEvent.prototype, \"transceiver\", {\n get () {\n return {\n receiver: this.receiver\n };\n }\n });\n}\nfunction $5c8245455fb0fb72$export$852a08dda9a55ea7(window, browserDetails) {\n if (typeof window !== \"object\" || !(window.RTCPeerConnection || window.mozRTCPeerConnection)) return; // probably media.peerconnection.enabled=false in about:config\n if (!window.RTCPeerConnection && window.mozRTCPeerConnection) // very basic support for old versions.\n window.RTCPeerConnection = window.mozRTCPeerConnection;\n if (browserDetails.version < 53) // shim away need for obsolete RTCIceCandidate/RTCSessionDescription.\n [\n \"setLocalDescription\",\n \"setRemoteDescription\",\n \"addIceCandidate\"\n ].forEach(function(method) {\n const nativeMethod = window.RTCPeerConnection.prototype[method];\n const methodObj = {\n [method] () {\n arguments[0] = new (method === \"addIceCandidate\" ? window.RTCIceCandidate : window.RTCSessionDescription)(arguments[0]);\n return nativeMethod.apply(this, arguments);\n }\n };\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n const modernStatsTypes = {\n inboundrtp: \"inbound-rtp\",\n outboundrtp: \"outbound-rtp\",\n candidatepair: \"candidate-pair\",\n localcandidate: \"local-candidate\",\n remotecandidate: \"remote-candidate\"\n };\n const nativeGetStats = window.RTCPeerConnection.prototype.getStats;\n window.RTCPeerConnection.prototype.getStats = function getStats() {\n const [selector, onSucc, onErr] = arguments;\n return nativeGetStats.apply(this, [\n selector || null\n ]).then((stats)=>{\n if (browserDetails.version < 53 && !onSucc) // Shim only promise getStats with spec-hyphens in type names\n // Leave callback version alone; misc old uses of forEach before Map\n try {\n stats.forEach((stat)=>{\n stat.type = modernStatsTypes[stat.type] || stat.type;\n });\n } catch (e) {\n if (e.name !== \"TypeError\") throw e;\n // Avoid TypeError: \"type\" is read-only, in old versions. 34-43ish\n stats.forEach((stat, i)=>{\n stats.set(i, Object.assign({}, stat, {\n type: modernStatsTypes[stat.type] || stat.type\n }));\n });\n }\n return stats;\n }).then(onSucc, onErr);\n };\n}\nfunction $5c8245455fb0fb72$export$f0525502095c04ef(window) {\n if (!(typeof window === \"object\" && window.RTCPeerConnection && window.RTCRtpSender)) return;\n if (window.RTCRtpSender && \"getStats\" in window.RTCRtpSender.prototype) return;\n const origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n if (origGetSenders) window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n const senders = origGetSenders.apply(this, []);\n senders.forEach((sender)=>sender._pc = this);\n return senders;\n };\n const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n if (origAddTrack) window.RTCPeerConnection.prototype.addTrack = function addTrack() {\n const sender = origAddTrack.apply(this, arguments);\n sender._pc = this;\n return sender;\n };\n window.RTCRtpSender.prototype.getStats = function getStats() {\n return this.track ? this._pc.getStats(this.track) : Promise.resolve(new Map());\n };\n}\nfunction $5c8245455fb0fb72$export$83d69126527b1171(window) {\n if (!(typeof window === \"object\" && window.RTCPeerConnection && window.RTCRtpSender)) return;\n if (window.RTCRtpSender && \"getStats\" in window.RTCRtpReceiver.prototype) return;\n const origGetReceivers = window.RTCPeerConnection.prototype.getReceivers;\n if (origGetReceivers) window.RTCPeerConnection.prototype.getReceivers = function getReceivers() {\n const receivers = origGetReceivers.apply(this, []);\n receivers.forEach((receiver)=>receiver._pc = this);\n return receivers;\n };\n $35583cf39f4111ff$export$1f48841962b828b1(window, \"track\", (e)=>{\n e.receiver._pc = e.srcElement;\n return e;\n });\n window.RTCRtpReceiver.prototype.getStats = function getStats() {\n return this._pc.getStats(this.track);\n };\n}\nfunction $5c8245455fb0fb72$export$825e523ef749bd8c(window) {\n if (!window.RTCPeerConnection || \"removeStream\" in window.RTCPeerConnection.prototype) return;\n window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n $35583cf39f4111ff$export$cdd73fc4100a6ef4(\"removeStream\", \"removeTrack\");\n this.getSenders().forEach((sender)=>{\n if (sender.track && stream.getTracks().includes(sender.track)) this.removeTrack(sender);\n });\n };\n}\nfunction $5c8245455fb0fb72$export$ff9cb3bc8990e8f7(window) {\n // rename DataChannel to RTCDataChannel (native fix in FF60):\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1173851\n if (window.DataChannel && !window.RTCDataChannel) window.RTCDataChannel = window.DataChannel;\n}\nfunction $5c8245455fb0fb72$export$70c77533b6e9908d(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!(typeof window === \"object\" && window.RTCPeerConnection)) return;\n const origAddTransceiver = window.RTCPeerConnection.prototype.addTransceiver;\n if (origAddTransceiver) window.RTCPeerConnection.prototype.addTransceiver = function addTransceiver() {\n this.setParametersPromises = [];\n // WebIDL input coercion and validation\n let sendEncodings = arguments[1] && arguments[1].sendEncodings;\n if (sendEncodings === undefined) sendEncodings = [];\n sendEncodings = [\n ...sendEncodings\n ];\n const shouldPerformCheck = sendEncodings.length > 0;\n if (shouldPerformCheck) // If sendEncodings params are provided, validate grammar\n sendEncodings.forEach((encodingParam)=>{\n if (\"rid\" in encodingParam) {\n const ridRegex = /^[a-z0-9]{0,16}$/i;\n if (!ridRegex.test(encodingParam.rid)) throw new TypeError(\"Invalid RID value provided.\");\n }\n if (\"scaleResolutionDownBy\" in encodingParam) {\n if (!(parseFloat(encodingParam.scaleResolutionDownBy) >= 1.0)) throw new RangeError(\"scale_resolution_down_by must be >= 1.0\");\n }\n if (\"maxFramerate\" in encodingParam) {\n if (!(parseFloat(encodingParam.maxFramerate) >= 0)) throw new RangeError(\"max_framerate must be >= 0.0\");\n }\n });\n const transceiver = origAddTransceiver.apply(this, arguments);\n if (shouldPerformCheck) {\n // Check if the init options were applied. If not we do this in an\n // asynchronous way and save the promise reference in a global object.\n // This is an ugly hack, but at the same time is way more robust than\n // checking the sender parameters before and after the createOffer\n // Also note that after the createoffer we are not 100% sure that\n // the params were asynchronously applied so we might miss the\n // opportunity to recreate offer.\n const { sender: sender } = transceiver;\n const params = sender.getParameters();\n if (!(\"encodings\" in params) || // Avoid being fooled by patched getParameters() below.\n params.encodings.length === 1 && Object.keys(params.encodings[0]).length === 0) {\n params.encodings = sendEncodings;\n sender.sendEncodings = sendEncodings;\n this.setParametersPromises.push(sender.setParameters(params).then(()=>{\n delete sender.sendEncodings;\n }).catch(()=>{\n delete sender.sendEncodings;\n }));\n }\n }\n return transceiver;\n };\n}\nfunction $5c8245455fb0fb72$export$66238223c298fbaa(window) {\n if (!(typeof window === \"object\" && window.RTCRtpSender)) return;\n const origGetParameters = window.RTCRtpSender.prototype.getParameters;\n if (origGetParameters) window.RTCRtpSender.prototype.getParameters = function getParameters() {\n const params = origGetParameters.apply(this, arguments);\n if (!(\"encodings\" in params)) params.encodings = [].concat(this.sendEncodings || [\n {}\n ]);\n return params;\n };\n}\nfunction $5c8245455fb0fb72$export$51beccf0e777b843(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!(typeof window === \"object\" && window.RTCPeerConnection)) return;\n const origCreateOffer = window.RTCPeerConnection.prototype.createOffer;\n window.RTCPeerConnection.prototype.createOffer = function createOffer() {\n if (this.setParametersPromises && this.setParametersPromises.length) return Promise.all(this.setParametersPromises).then(()=>{\n return origCreateOffer.apply(this, arguments);\n }).finally(()=>{\n this.setParametersPromises = [];\n });\n return origCreateOffer.apply(this, arguments);\n };\n}\nfunction $5c8245455fb0fb72$export$df0b46e7cef08150(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!(typeof window === \"object\" && window.RTCPeerConnection)) return;\n const origCreateAnswer = window.RTCPeerConnection.prototype.createAnswer;\n window.RTCPeerConnection.prototype.createAnswer = function createAnswer() {\n if (this.setParametersPromises && this.setParametersPromises.length) return Promise.all(this.setParametersPromises).then(()=>{\n return origCreateAnswer.apply(this, arguments);\n }).finally(()=>{\n this.setParametersPromises = [];\n });\n return origCreateAnswer.apply(this, arguments);\n };\n}\n\n\nvar $4bb6650df37cb8fe$exports = {};\n\n$parcel$export($4bb6650df37cb8fe$exports, \"shimLocalStreamsAPI\", () => $4bb6650df37cb8fe$export$8df41282f4fdcea2);\n$parcel$export($4bb6650df37cb8fe$exports, \"shimRemoteStreamsAPI\", () => $4bb6650df37cb8fe$export$762aa4cbb4f2f857);\n$parcel$export($4bb6650df37cb8fe$exports, \"shimCallbacksAPI\", () => $4bb6650df37cb8fe$export$da31df245debdd3);\n$parcel$export($4bb6650df37cb8fe$exports, \"shimGetUserMedia\", () => $4bb6650df37cb8fe$export$1ed4910f4d37dc5e);\n$parcel$export($4bb6650df37cb8fe$exports, \"shimConstraints\", () => $4bb6650df37cb8fe$export$494a01ac68ba81ac);\n$parcel$export($4bb6650df37cb8fe$exports, \"shimRTCIceServerUrls\", () => $4bb6650df37cb8fe$export$671a8b47b41b6f41);\n$parcel$export($4bb6650df37cb8fe$exports, \"shimTrackEventTransceiver\", () => $4bb6650df37cb8fe$export$85d53da088cb1b14);\n$parcel$export($4bb6650df37cb8fe$exports, \"shimCreateOfferLegacy\", () => $4bb6650df37cb8fe$export$d444266503fdd2d4);\n$parcel$export($4bb6650df37cb8fe$exports, \"shimAudioContext\", () => $4bb6650df37cb8fe$export$857cd739a7b795d2);\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */ \n\"use strict\";\nfunction $4bb6650df37cb8fe$export$8df41282f4fdcea2(window) {\n if (typeof window !== \"object\" || !window.RTCPeerConnection) return;\n if (!(\"getLocalStreams\" in window.RTCPeerConnection.prototype)) window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() {\n if (!this._localStreams) this._localStreams = [];\n return this._localStreams;\n };\n if (!(\"addStream\" in window.RTCPeerConnection.prototype)) {\n const _addTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n if (!this._localStreams) this._localStreams = [];\n if (!this._localStreams.includes(stream)) this._localStreams.push(stream);\n // Try to emulate Chrome's behaviour of adding in audio-video order.\n // Safari orders by track id.\n stream.getAudioTracks().forEach((track)=>_addTrack.call(this, track, stream));\n stream.getVideoTracks().forEach((track)=>_addTrack.call(this, track, stream));\n };\n window.RTCPeerConnection.prototype.addTrack = function addTrack(track, ...streams) {\n if (streams) streams.forEach((stream)=>{\n if (!this._localStreams) this._localStreams = [\n stream\n ];\n else if (!this._localStreams.includes(stream)) this._localStreams.push(stream);\n });\n return _addTrack.apply(this, arguments);\n };\n }\n if (!(\"removeStream\" in window.RTCPeerConnection.prototype)) window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n if (!this._localStreams) this._localStreams = [];\n const index = this._localStreams.indexOf(stream);\n if (index === -1) return;\n this._localStreams.splice(index, 1);\n const tracks = stream.getTracks();\n this.getSenders().forEach((sender)=>{\n if (tracks.includes(sender.track)) this.removeTrack(sender);\n });\n };\n}\nfunction $4bb6650df37cb8fe$export$762aa4cbb4f2f857(window) {\n if (typeof window !== \"object\" || !window.RTCPeerConnection) return;\n if (!(\"getRemoteStreams\" in window.RTCPeerConnection.prototype)) window.RTCPeerConnection.prototype.getRemoteStreams = function getRemoteStreams() {\n return this._remoteStreams ? this._remoteStreams : [];\n };\n if (!(\"onaddstream\" in window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, \"onaddstream\", {\n get () {\n return this._onaddstream;\n },\n set (f) {\n if (this._onaddstream) {\n this.removeEventListener(\"addstream\", this._onaddstream);\n this.removeEventListener(\"track\", this._onaddstreampoly);\n }\n this.addEventListener(\"addstream\", this._onaddstream = f);\n this.addEventListener(\"track\", this._onaddstreampoly = (e)=>{\n e.streams.forEach((stream)=>{\n if (!this._remoteStreams) this._remoteStreams = [];\n if (this._remoteStreams.includes(stream)) return;\n this._remoteStreams.push(stream);\n const event = new Event(\"addstream\");\n event.stream = stream;\n this.dispatchEvent(event);\n });\n });\n }\n });\n const origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() {\n const pc = this;\n if (!this._onaddstreampoly) this.addEventListener(\"track\", this._onaddstreampoly = function(e) {\n e.streams.forEach((stream)=>{\n if (!pc._remoteStreams) pc._remoteStreams = [];\n if (pc._remoteStreams.indexOf(stream) >= 0) return;\n pc._remoteStreams.push(stream);\n const event = new Event(\"addstream\");\n event.stream = stream;\n pc.dispatchEvent(event);\n });\n });\n return origSetRemoteDescription.apply(pc, arguments);\n };\n }\n}\nfunction $4bb6650df37cb8fe$export$da31df245debdd3(window) {\n if (typeof window !== \"object\" || !window.RTCPeerConnection) return;\n const prototype = window.RTCPeerConnection.prototype;\n const origCreateOffer = prototype.createOffer;\n const origCreateAnswer = prototype.createAnswer;\n const setLocalDescription = prototype.setLocalDescription;\n const setRemoteDescription = prototype.setRemoteDescription;\n const addIceCandidate = prototype.addIceCandidate;\n prototype.createOffer = function createOffer(successCallback, failureCallback) {\n const options = arguments.length >= 2 ? arguments[2] : arguments[0];\n const promise = origCreateOffer.apply(this, [\n options\n ]);\n if (!failureCallback) return promise;\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.createAnswer = function createAnswer(successCallback, failureCallback) {\n const options = arguments.length >= 2 ? arguments[2] : arguments[0];\n const promise = origCreateAnswer.apply(this, [\n options\n ]);\n if (!failureCallback) return promise;\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n let withCallback = function(description, successCallback, failureCallback) {\n const promise = setLocalDescription.apply(this, [\n description\n ]);\n if (!failureCallback) return promise;\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.setLocalDescription = withCallback;\n withCallback = function(description, successCallback, failureCallback) {\n const promise = setRemoteDescription.apply(this, [\n description\n ]);\n if (!failureCallback) return promise;\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.setRemoteDescription = withCallback;\n withCallback = function(candidate, successCallback, failureCallback) {\n const promise = addIceCandidate.apply(this, [\n candidate\n ]);\n if (!failureCallback) return promise;\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.addIceCandidate = withCallback;\n}\nfunction $4bb6650df37cb8fe$export$1ed4910f4d37dc5e(window) {\n const navigator = window && window.navigator;\n if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\n // shim not needed in Safari 12.1\n const mediaDevices = navigator.mediaDevices;\n const _getUserMedia = mediaDevices.getUserMedia.bind(mediaDevices);\n navigator.mediaDevices.getUserMedia = (constraints)=>{\n return _getUserMedia($4bb6650df37cb8fe$export$494a01ac68ba81ac(constraints));\n };\n }\n if (!navigator.getUserMedia && navigator.mediaDevices && navigator.mediaDevices.getUserMedia) navigator.getUserMedia = (function getUserMedia(constraints, cb, errcb) {\n navigator.mediaDevices.getUserMedia(constraints).then(cb, errcb);\n }).bind(navigator);\n}\nfunction $4bb6650df37cb8fe$export$494a01ac68ba81ac(constraints) {\n if (constraints && constraints.video !== undefined) return Object.assign({}, constraints, {\n video: $35583cf39f4111ff$export$15384eac40dc88c8(constraints.video)\n });\n return constraints;\n}\nfunction $4bb6650df37cb8fe$export$671a8b47b41b6f41(window) {\n if (!window.RTCPeerConnection) return;\n // migrate from non-spec RTCIceServer.url to RTCIceServer.urls\n const OrigPeerConnection = window.RTCPeerConnection;\n window.RTCPeerConnection = function RTCPeerConnection(pcConfig, pcConstraints) {\n if (pcConfig && pcConfig.iceServers) {\n const newIceServers = [];\n for(let i = 0; i < pcConfig.iceServers.length; i++){\n let server = pcConfig.iceServers[i];\n if (server.urls === undefined && server.url) {\n $35583cf39f4111ff$export$cdd73fc4100a6ef4(\"RTCIceServer.url\", \"RTCIceServer.urls\");\n server = JSON.parse(JSON.stringify(server));\n server.urls = server.url;\n delete server.url;\n newIceServers.push(server);\n } else newIceServers.push(pcConfig.iceServers[i]);\n }\n pcConfig.iceServers = newIceServers;\n }\n return new OrigPeerConnection(pcConfig, pcConstraints);\n };\n window.RTCPeerConnection.prototype = OrigPeerConnection.prototype;\n // wrap static methods. Currently just generateCertificate.\n if (\"generateCertificate\" in OrigPeerConnection) Object.defineProperty(window.RTCPeerConnection, \"generateCertificate\", {\n get () {\n return OrigPeerConnection.generateCertificate;\n }\n });\n}\nfunction $4bb6650df37cb8fe$export$85d53da088cb1b14(window) {\n // Add event.transceiver member over deprecated event.receiver\n if (typeof window === \"object\" && window.RTCTrackEvent && \"receiver\" in window.RTCTrackEvent.prototype && !(\"transceiver\" in window.RTCTrackEvent.prototype)) Object.defineProperty(window.RTCTrackEvent.prototype, \"transceiver\", {\n get () {\n return {\n receiver: this.receiver\n };\n }\n });\n}\nfunction $4bb6650df37cb8fe$export$d444266503fdd2d4(window) {\n const origCreateOffer = window.RTCPeerConnection.prototype.createOffer;\n window.RTCPeerConnection.prototype.createOffer = function createOffer(offerOptions) {\n if (offerOptions) {\n if (typeof offerOptions.offerToReceiveAudio !== \"undefined\") // support bit values\n offerOptions.offerToReceiveAudio = !!offerOptions.offerToReceiveAudio;\n const audioTransceiver = this.getTransceivers().find((transceiver)=>transceiver.receiver.track.kind === \"audio\");\n if (offerOptions.offerToReceiveAudio === false && audioTransceiver) {\n if (audioTransceiver.direction === \"sendrecv\") {\n if (audioTransceiver.setDirection) audioTransceiver.setDirection(\"sendonly\");\n else audioTransceiver.direction = \"sendonly\";\n } else if (audioTransceiver.direction === \"recvonly\") {\n if (audioTransceiver.setDirection) audioTransceiver.setDirection(\"inactive\");\n else audioTransceiver.direction = \"inactive\";\n }\n } else if (offerOptions.offerToReceiveAudio === true && !audioTransceiver) this.addTransceiver(\"audio\", {\n direction: \"recvonly\"\n });\n if (typeof offerOptions.offerToReceiveVideo !== \"undefined\") // support bit values\n offerOptions.offerToReceiveVideo = !!offerOptions.offerToReceiveVideo;\n const videoTransceiver = this.getTransceivers().find((transceiver)=>transceiver.receiver.track.kind === \"video\");\n if (offerOptions.offerToReceiveVideo === false && videoTransceiver) {\n if (videoTransceiver.direction === \"sendrecv\") {\n if (videoTransceiver.setDirection) videoTransceiver.setDirection(\"sendonly\");\n else videoTransceiver.direction = \"sendonly\";\n } else if (videoTransceiver.direction === \"recvonly\") {\n if (videoTransceiver.setDirection) videoTransceiver.setDirection(\"inactive\");\n else videoTransceiver.direction = \"inactive\";\n }\n } else if (offerOptions.offerToReceiveVideo === true && !videoTransceiver) this.addTransceiver(\"video\", {\n direction: \"recvonly\"\n });\n }\n return origCreateOffer.apply(this, arguments);\n };\n}\nfunction $4bb6650df37cb8fe$export$857cd739a7b795d2(window) {\n if (typeof window !== \"object\" || window.AudioContext) return;\n window.AudioContext = window.webkitAudioContext;\n}\n\n\nvar $8080a560a280724d$exports = {};\n\n$parcel$export($8080a560a280724d$exports, \"shimRTCIceCandidate\", () => $8080a560a280724d$export$cf133661e444ccfe);\n$parcel$export($8080a560a280724d$exports, \"shimRTCIceCandidateRelayProtocol\", () => $8080a560a280724d$export$fdafb8d8280e29b5);\n$parcel$export($8080a560a280724d$exports, \"shimMaxMessageSize\", () => $8080a560a280724d$export$a99147c78a56edc4);\n$parcel$export($8080a560a280724d$exports, \"shimSendThrowTypeError\", () => $8080a560a280724d$export$d461c8d5c5db5da7);\n$parcel$export($8080a560a280724d$exports, \"shimConnectionState\", () => $8080a560a280724d$export$63bb816cc75460);\n$parcel$export($8080a560a280724d$exports, \"removeExtmapAllowMixed\", () => $8080a560a280724d$export$a57d114344295149);\n$parcel$export($8080a560a280724d$exports, \"shimAddIceCandidateNullOrEmpty\", () => $8080a560a280724d$export$51d5e40b48c771c7);\n$parcel$export($8080a560a280724d$exports, \"shimParameterlessSetLocalDescription\", () => $8080a560a280724d$export$7170d04e59f9d553);\n/*\n * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */ /* eslint-env node */ var $257b6346d6d1b15f$exports = {};\n/* eslint-env node */ \"use strict\";\n// SDP helpers.\nconst $257b6346d6d1b15f$var$SDPUtils = {};\n// Generate an alphanumeric identifier for cname or mids.\n// TODO: use UUIDs instead? https://gist.github.com/jed/982883\n$257b6346d6d1b15f$var$SDPUtils.generateIdentifier = function() {\n return Math.random().toString(36).substring(2, 12);\n};\n// The RTCP CNAME used by all peerconnections from the same JS.\n$257b6346d6d1b15f$var$SDPUtils.localCName = $257b6346d6d1b15f$var$SDPUtils.generateIdentifier();\n// Splits SDP into lines, dealing with both CRLF and LF.\n$257b6346d6d1b15f$var$SDPUtils.splitLines = function(blob) {\n return blob.trim().split(\"\\n\").map((line)=>line.trim());\n};\n// Splits SDP into sessionpart and mediasections. Ensures CRLF.\n$257b6346d6d1b15f$var$SDPUtils.splitSections = function(blob) {\n const parts = blob.split(\"\\nm=\");\n return parts.map((part, index)=>(index > 0 ? \"m=\" + part : part).trim() + \"\\r\\n\");\n};\n// Returns the session description.\n$257b6346d6d1b15f$var$SDPUtils.getDescription = function(blob) {\n const sections = $257b6346d6d1b15f$var$SDPUtils.splitSections(blob);\n return sections && sections[0];\n};\n// Returns the individual media sections.\n$257b6346d6d1b15f$var$SDPUtils.getMediaSections = function(blob) {\n const sections = $257b6346d6d1b15f$var$SDPUtils.splitSections(blob);\n sections.shift();\n return sections;\n};\n// Returns lines that start with a certain prefix.\n$257b6346d6d1b15f$var$SDPUtils.matchPrefix = function(blob, prefix) {\n return $257b6346d6d1b15f$var$SDPUtils.splitLines(blob).filter((line)=>line.indexOf(prefix) === 0);\n};\n// Parses an ICE candidate line. Sample input:\n// candidate:702786350 2 udp 41819902 8.8.8.8 60769 typ relay raddr 8.8.8.8\n// rport 55996\"\n// Input can be prefixed with a=.\n$257b6346d6d1b15f$var$SDPUtils.parseCandidate = function(line) {\n let parts;\n // Parse both variants.\n if (line.indexOf(\"a=candidate:\") === 0) parts = line.substring(12).split(\" \");\n else parts = line.substring(10).split(\" \");\n const candidate = {\n foundation: parts[0],\n component: {\n 1: \"rtp\",\n 2: \"rtcp\"\n }[parts[1]] || parts[1],\n protocol: parts[2].toLowerCase(),\n priority: parseInt(parts[3], 10),\n ip: parts[4],\n address: parts[4],\n port: parseInt(parts[5], 10),\n // skip parts[6] == 'typ'\n type: parts[7]\n };\n for(let i = 8; i < parts.length; i += 2)switch(parts[i]){\n case \"raddr\":\n candidate.relatedAddress = parts[i + 1];\n break;\n case \"rport\":\n candidate.relatedPort = parseInt(parts[i + 1], 10);\n break;\n case \"tcptype\":\n candidate.tcpType = parts[i + 1];\n break;\n case \"ufrag\":\n candidate.ufrag = parts[i + 1]; // for backward compatibility.\n candidate.usernameFragment = parts[i + 1];\n break;\n default:\n if (candidate[parts[i]] === undefined) candidate[parts[i]] = parts[i + 1];\n break;\n }\n return candidate;\n};\n// Translates a candidate object into SDP candidate attribute.\n// This does not include the a= prefix!\n$257b6346d6d1b15f$var$SDPUtils.writeCandidate = function(candidate) {\n const sdp = [];\n sdp.push(candidate.foundation);\n const component = candidate.component;\n if (component === \"rtp\") sdp.push(1);\n else if (component === \"rtcp\") sdp.push(2);\n else sdp.push(component);\n sdp.push(candidate.protocol.toUpperCase());\n sdp.push(candidate.priority);\n sdp.push(candidate.address || candidate.ip);\n sdp.push(candidate.port);\n const type = candidate.type;\n sdp.push(\"typ\");\n sdp.push(type);\n if (type !== \"host\" && candidate.relatedAddress && candidate.relatedPort) {\n sdp.push(\"raddr\");\n sdp.push(candidate.relatedAddress);\n sdp.push(\"rport\");\n sdp.push(candidate.relatedPort);\n }\n if (candidate.tcpType && candidate.protocol.toLowerCase() === \"tcp\") {\n sdp.push(\"tcptype\");\n sdp.push(candidate.tcpType);\n }\n if (candidate.usernameFragment || candidate.ufrag) {\n sdp.push(\"ufrag\");\n sdp.push(candidate.usernameFragment || candidate.ufrag);\n }\n return \"candidate:\" + sdp.join(\" \");\n};\n// Parses an ice-options line, returns an array of option tags.\n// Sample input:\n// a=ice-options:foo bar\n$257b6346d6d1b15f$var$SDPUtils.parseIceOptions = function(line) {\n return line.substring(14).split(\" \");\n};\n// Parses a rtpmap line, returns RTCRtpCoddecParameters. Sample input:\n// a=rtpmap:111 opus/48000/2\n$257b6346d6d1b15f$var$SDPUtils.parseRtpMap = function(line) {\n let parts = line.substring(9).split(\" \");\n const parsed = {\n payloadType: parseInt(parts.shift(), 10)\n };\n parts = parts[0].split(\"/\");\n parsed.name = parts[0];\n parsed.clockRate = parseInt(parts[1], 10); // was: clockrate\n parsed.channels = parts.length === 3 ? parseInt(parts[2], 10) : 1;\n // legacy alias, got renamed back to channels in ORTC.\n parsed.numChannels = parsed.channels;\n return parsed;\n};\n// Generates a rtpmap line from RTCRtpCodecCapability or\n// RTCRtpCodecParameters.\n$257b6346d6d1b15f$var$SDPUtils.writeRtpMap = function(codec) {\n let pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) pt = codec.preferredPayloadType;\n const channels = codec.channels || codec.numChannels || 1;\n return \"a=rtpmap:\" + pt + \" \" + codec.name + \"/\" + codec.clockRate + (channels !== 1 ? \"/\" + channels : \"\") + \"\\r\\n\";\n};\n// Parses a extmap line (headerextension from RFC 5285). Sample input:\n// a=extmap:2 urn:ietf:params:rtp-hdrext:toffset\n// a=extmap:2/sendonly urn:ietf:params:rtp-hdrext:toffset\n$257b6346d6d1b15f$var$SDPUtils.parseExtmap = function(line) {\n const parts = line.substring(9).split(\" \");\n return {\n id: parseInt(parts[0], 10),\n direction: parts[0].indexOf(\"/\") > 0 ? parts[0].split(\"/\")[1] : \"sendrecv\",\n uri: parts[1],\n attributes: parts.slice(2).join(\" \")\n };\n};\n// Generates an extmap line from RTCRtpHeaderExtensionParameters or\n// RTCRtpHeaderExtension.\n$257b6346d6d1b15f$var$SDPUtils.writeExtmap = function(headerExtension) {\n return \"a=extmap:\" + (headerExtension.id || headerExtension.preferredId) + (headerExtension.direction && headerExtension.direction !== \"sendrecv\" ? \"/\" + headerExtension.direction : \"\") + \" \" + headerExtension.uri + (headerExtension.attributes ? \" \" + headerExtension.attributes : \"\") + \"\\r\\n\";\n};\n// Parses a fmtp line, returns dictionary. Sample input:\n// a=fmtp:96 vbr=on;cng=on\n// Also deals with vbr=on; cng=on\n$257b6346d6d1b15f$var$SDPUtils.parseFmtp = function(line) {\n const parsed = {};\n let kv;\n const parts = line.substring(line.indexOf(\" \") + 1).split(\";\");\n for(let j = 0; j < parts.length; j++){\n kv = parts[j].trim().split(\"=\");\n parsed[kv[0].trim()] = kv[1];\n }\n return parsed;\n};\n// Generates a fmtp line from RTCRtpCodecCapability or RTCRtpCodecParameters.\n$257b6346d6d1b15f$var$SDPUtils.writeFmtp = function(codec) {\n let line = \"\";\n let pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) pt = codec.preferredPayloadType;\n if (codec.parameters && Object.keys(codec.parameters).length) {\n const params = [];\n Object.keys(codec.parameters).forEach((param)=>{\n if (codec.parameters[param] !== undefined) params.push(param + \"=\" + codec.parameters[param]);\n else params.push(param);\n });\n line += \"a=fmtp:\" + pt + \" \" + params.join(\";\") + \"\\r\\n\";\n }\n return line;\n};\n// Parses a rtcp-fb line, returns RTCPRtcpFeedback object. Sample input:\n// a=rtcp-fb:98 nack rpsi\n$257b6346d6d1b15f$var$SDPUtils.parseRtcpFb = function(line) {\n const parts = line.substring(line.indexOf(\" \") + 1).split(\" \");\n return {\n type: parts.shift(),\n parameter: parts.join(\" \")\n };\n};\n// Generate a=rtcp-fb lines from RTCRtpCodecCapability or RTCRtpCodecParameters.\n$257b6346d6d1b15f$var$SDPUtils.writeRtcpFb = function(codec) {\n let lines = \"\";\n let pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) pt = codec.preferredPayloadType;\n if (codec.rtcpFeedback && codec.rtcpFeedback.length) // FIXME: special handling for trr-int?\n codec.rtcpFeedback.forEach((fb)=>{\n lines += \"a=rtcp-fb:\" + pt + \" \" + fb.type + (fb.parameter && fb.parameter.length ? \" \" + fb.parameter : \"\") + \"\\r\\n\";\n });\n return lines;\n};\n// Parses a RFC 5576 ssrc media attribute. Sample input:\n// a=ssrc:3735928559 cname:something\n$257b6346d6d1b15f$var$SDPUtils.parseSsrcMedia = function(line) {\n const sp = line.indexOf(\" \");\n const parts = {\n ssrc: parseInt(line.substring(7, sp), 10)\n };\n const colon = line.indexOf(\":\", sp);\n if (colon > -1) {\n parts.attribute = line.substring(sp + 1, colon);\n parts.value = line.substring(colon + 1);\n } else parts.attribute = line.substring(sp + 1);\n return parts;\n};\n// Parse a ssrc-group line (see RFC 5576). Sample input:\n// a=ssrc-group:semantics 12 34\n$257b6346d6d1b15f$var$SDPUtils.parseSsrcGroup = function(line) {\n const parts = line.substring(13).split(\" \");\n return {\n semantics: parts.shift(),\n ssrcs: parts.map((ssrc)=>parseInt(ssrc, 10))\n };\n};\n// Extracts the MID (RFC 5888) from a media section.\n// Returns the MID or undefined if no mid line was found.\n$257b6346d6d1b15f$var$SDPUtils.getMid = function(mediaSection) {\n const mid = $257b6346d6d1b15f$var$SDPUtils.matchPrefix(mediaSection, \"a=mid:\")[0];\n if (mid) return mid.substring(6);\n};\n// Parses a fingerprint line for DTLS-SRTP.\n$257b6346d6d1b15f$var$SDPUtils.parseFingerprint = function(line) {\n const parts = line.substring(14).split(\" \");\n return {\n algorithm: parts[0].toLowerCase(),\n value: parts[1].toUpperCase()\n };\n};\n// Extracts DTLS parameters from SDP media section or sessionpart.\n// FIXME: for consistency with other functions this should only\n// get the fingerprint line as input. See also getIceParameters.\n$257b6346d6d1b15f$var$SDPUtils.getDtlsParameters = function(mediaSection, sessionpart) {\n const lines = $257b6346d6d1b15f$var$SDPUtils.matchPrefix(mediaSection + sessionpart, \"a=fingerprint:\");\n // Note: a=setup line is ignored since we use the 'auto' role in Edge.\n return {\n role: \"auto\",\n fingerprints: lines.map($257b6346d6d1b15f$var$SDPUtils.parseFingerprint)\n };\n};\n// Serializes DTLS parameters to SDP.\n$257b6346d6d1b15f$var$SDPUtils.writeDtlsParameters = function(params, setupType) {\n let sdp = \"a=setup:\" + setupType + \"\\r\\n\";\n params.fingerprints.forEach((fp)=>{\n sdp += \"a=fingerprint:\" + fp.algorithm + \" \" + fp.value + \"\\r\\n\";\n });\n return sdp;\n};\n// Parses a=crypto lines into\n// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#dictionary-rtcsrtpsdesparameters-members\n$257b6346d6d1b15f$var$SDPUtils.parseCryptoLine = function(line) {\n const parts = line.substring(9).split(\" \");\n return {\n tag: parseInt(parts[0], 10),\n cryptoSuite: parts[1],\n keyParams: parts[2],\n sessionParams: parts.slice(3)\n };\n};\n$257b6346d6d1b15f$var$SDPUtils.writeCryptoLine = function(parameters) {\n return \"a=crypto:\" + parameters.tag + \" \" + parameters.cryptoSuite + \" \" + (typeof parameters.keyParams === \"object\" ? $257b6346d6d1b15f$var$SDPUtils.writeCryptoKeyParams(parameters.keyParams) : parameters.keyParams) + (parameters.sessionParams ? \" \" + parameters.sessionParams.join(\" \") : \"\") + \"\\r\\n\";\n};\n// Parses the crypto key parameters into\n// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#rtcsrtpkeyparam*\n$257b6346d6d1b15f$var$SDPUtils.parseCryptoKeyParams = function(keyParams) {\n if (keyParams.indexOf(\"inline:\") !== 0) return null;\n const parts = keyParams.substring(7).split(\"|\");\n return {\n keyMethod: \"inline\",\n keySalt: parts[0],\n lifeTime: parts[1],\n mkiValue: parts[2] ? parts[2].split(\":\")[0] : undefined,\n mkiLength: parts[2] ? parts[2].split(\":\")[1] : undefined\n };\n};\n$257b6346d6d1b15f$var$SDPUtils.writeCryptoKeyParams = function(keyParams) {\n return keyParams.keyMethod + \":\" + keyParams.keySalt + (keyParams.lifeTime ? \"|\" + keyParams.lifeTime : \"\") + (keyParams.mkiValue && keyParams.mkiLength ? \"|\" + keyParams.mkiValue + \":\" + keyParams.mkiLength : \"\");\n};\n// Extracts all SDES parameters.\n$257b6346d6d1b15f$var$SDPUtils.getCryptoParameters = function(mediaSection, sessionpart) {\n const lines = $257b6346d6d1b15f$var$SDPUtils.matchPrefix(mediaSection + sessionpart, \"a=crypto:\");\n return lines.map($257b6346d6d1b15f$var$SDPUtils.parseCryptoLine);\n};\n// Parses ICE information from SDP media section or sessionpart.\n// FIXME: for consistency with other functions this should only\n// get the ice-ufrag and ice-pwd lines as input.\n$257b6346d6d1b15f$var$SDPUtils.getIceParameters = function(mediaSection, sessionpart) {\n const ufrag = $257b6346d6d1b15f$var$SDPUtils.matchPrefix(mediaSection + sessionpart, \"a=ice-ufrag:\")[0];\n const pwd = $257b6346d6d1b15f$var$SDPUtils.matchPrefix(mediaSection + sessionpart, \"a=ice-pwd:\")[0];\n if (!(ufrag && pwd)) return null;\n return {\n usernameFragment: ufrag.substring(12),\n password: pwd.substring(10)\n };\n};\n// Serializes ICE parameters to SDP.\n$257b6346d6d1b15f$var$SDPUtils.writeIceParameters = function(params) {\n let sdp = \"a=ice-ufrag:\" + params.usernameFragment + \"\\r\\n\" + \"a=ice-pwd:\" + params.password + \"\\r\\n\";\n if (params.iceLite) sdp += \"a=ice-lite\\r\\n\";\n return sdp;\n};\n// Parses the SDP media section and returns RTCRtpParameters.\n$257b6346d6d1b15f$var$SDPUtils.parseRtpParameters = function(mediaSection) {\n const description = {\n codecs: [],\n headerExtensions: [],\n fecMechanisms: [],\n rtcp: []\n };\n const lines = $257b6346d6d1b15f$var$SDPUtils.splitLines(mediaSection);\n const mline = lines[0].split(\" \");\n description.profile = mline[2];\n for(let i = 3; i < mline.length; i++){\n const pt = mline[i];\n const rtpmapline = $257b6346d6d1b15f$var$SDPUtils.matchPrefix(mediaSection, \"a=rtpmap:\" + pt + \" \")[0];\n if (rtpmapline) {\n const codec = $257b6346d6d1b15f$var$SDPUtils.parseRtpMap(rtpmapline);\n const fmtps = $257b6346d6d1b15f$var$SDPUtils.matchPrefix(mediaSection, \"a=fmtp:\" + pt + \" \");\n // Only the first a=fmtp: is considered.\n codec.parameters = fmtps.length ? $257b6346d6d1b15f$var$SDPUtils.parseFmtp(fmtps[0]) : {};\n codec.rtcpFeedback = $257b6346d6d1b15f$var$SDPUtils.matchPrefix(mediaSection, \"a=rtcp-fb:\" + pt + \" \").map($257b6346d6d1b15f$var$SDPUtils.parseRtcpFb);\n description.codecs.push(codec);\n // parse FEC mechanisms from rtpmap lines.\n switch(codec.name.toUpperCase()){\n case \"RED\":\n case \"ULPFEC\":\n description.fecMechanisms.push(codec.name.toUpperCase());\n break;\n default:\n break;\n }\n }\n }\n $257b6346d6d1b15f$var$SDPUtils.matchPrefix(mediaSection, \"a=extmap:\").forEach((line)=>{\n description.headerExtensions.push($257b6346d6d1b15f$var$SDPUtils.parseExtmap(line));\n });\n const wildcardRtcpFb = $257b6346d6d1b15f$var$SDPUtils.matchPrefix(mediaSection, \"a=rtcp-fb:* \").map($257b6346d6d1b15f$var$SDPUtils.parseRtcpFb);\n description.codecs.forEach((codec)=>{\n wildcardRtcpFb.forEach((fb)=>{\n const duplicate = codec.rtcpFeedback.find((existingFeedback)=>{\n return existingFeedback.type === fb.type && existingFeedback.parameter === fb.parameter;\n });\n if (!duplicate) codec.rtcpFeedback.push(fb);\n });\n });\n // FIXME: parse rtcp.\n return description;\n};\n// Generates parts of the SDP media section describing the capabilities /\n// parameters.\n$257b6346d6d1b15f$var$SDPUtils.writeRtpDescription = function(kind, caps) {\n let sdp = \"\";\n // Build the mline.\n sdp += \"m=\" + kind + \" \";\n sdp += caps.codecs.length > 0 ? \"9\" : \"0\"; // reject if no codecs.\n sdp += \" \" + (caps.profile || \"UDP/TLS/RTP/SAVPF\") + \" \";\n sdp += caps.codecs.map((codec)=>{\n if (codec.preferredPayloadType !== undefined) return codec.preferredPayloadType;\n return codec.payloadType;\n }).join(\" \") + \"\\r\\n\";\n sdp += \"c=IN IP4 0.0.0.0\\r\\n\";\n sdp += \"a=rtcp:9 IN IP4 0.0.0.0\\r\\n\";\n // Add a=rtpmap lines for each codec. Also fmtp and rtcp-fb.\n caps.codecs.forEach((codec)=>{\n sdp += $257b6346d6d1b15f$var$SDPUtils.writeRtpMap(codec);\n sdp += $257b6346d6d1b15f$var$SDPUtils.writeFmtp(codec);\n sdp += $257b6346d6d1b15f$var$SDPUtils.writeRtcpFb(codec);\n });\n let maxptime = 0;\n caps.codecs.forEach((codec)=>{\n if (codec.maxptime > maxptime) maxptime = codec.maxptime;\n });\n if (maxptime > 0) sdp += \"a=maxptime:\" + maxptime + \"\\r\\n\";\n if (caps.headerExtensions) caps.headerExtensions.forEach((extension)=>{\n sdp += $257b6346d6d1b15f$var$SDPUtils.writeExtmap(extension);\n });\n // FIXME: write fecMechanisms.\n return sdp;\n};\n// Parses the SDP media section and returns an array of\n// RTCRtpEncodingParameters.\n$257b6346d6d1b15f$var$SDPUtils.parseRtpEncodingParameters = function(mediaSection) {\n const encodingParameters = [];\n const description = $257b6346d6d1b15f$var$SDPUtils.parseRtpParameters(mediaSection);\n const hasRed = description.fecMechanisms.indexOf(\"RED\") !== -1;\n const hasUlpfec = description.fecMechanisms.indexOf(\"ULPFEC\") !== -1;\n // filter a=ssrc:... cname:, ignore PlanB-msid\n const ssrcs = $257b6346d6d1b15f$var$SDPUtils.matchPrefix(mediaSection, \"a=ssrc:\").map((line)=>$257b6346d6d1b15f$var$SDPUtils.parseSsrcMedia(line)).filter((parts)=>parts.attribute === \"cname\");\n const primarySsrc = ssrcs.length > 0 && ssrcs[0].ssrc;\n let secondarySsrc;\n const flows = $257b6346d6d1b15f$var$SDPUtils.matchPrefix(mediaSection, \"a=ssrc-group:FID\").map((line)=>{\n const parts = line.substring(17).split(\" \");\n return parts.map((part)=>parseInt(part, 10));\n });\n if (flows.length > 0 && flows[0].length > 1 && flows[0][0] === primarySsrc) secondarySsrc = flows[0][1];\n description.codecs.forEach((codec)=>{\n if (codec.name.toUpperCase() === \"RTX\" && codec.parameters.apt) {\n let encParam = {\n ssrc: primarySsrc,\n codecPayloadType: parseInt(codec.parameters.apt, 10)\n };\n if (primarySsrc && secondarySsrc) encParam.rtx = {\n ssrc: secondarySsrc\n };\n encodingParameters.push(encParam);\n if (hasRed) {\n encParam = JSON.parse(JSON.stringify(encParam));\n encParam.fec = {\n ssrc: primarySsrc,\n mechanism: hasUlpfec ? \"red+ulpfec\" : \"red\"\n };\n encodingParameters.push(encParam);\n }\n }\n });\n if (encodingParameters.length === 0 && primarySsrc) encodingParameters.push({\n ssrc: primarySsrc\n });\n // we support both b=AS and b=TIAS but interpret AS as TIAS.\n let bandwidth = $257b6346d6d1b15f$var$SDPUtils.matchPrefix(mediaSection, \"b=\");\n if (bandwidth.length) {\n if (bandwidth[0].indexOf(\"b=TIAS:\") === 0) bandwidth = parseInt(bandwidth[0].substring(7), 10);\n else if (bandwidth[0].indexOf(\"b=AS:\") === 0) // use formula from JSEP to convert b=AS to TIAS value.\n bandwidth = parseInt(bandwidth[0].substring(5), 10) * 950 - 16000;\n else bandwidth = undefined;\n encodingParameters.forEach((params)=>{\n params.maxBitrate = bandwidth;\n });\n }\n return encodingParameters;\n};\n// parses http://draft.ortc.org/#rtcrtcpparameters*\n$257b6346d6d1b15f$var$SDPUtils.parseRtcpParameters = function(mediaSection) {\n const rtcpParameters = {};\n // Gets the first SSRC. Note that with RTX there might be multiple\n // SSRCs.\n const remoteSsrc = $257b6346d6d1b15f$var$SDPUtils.matchPrefix(mediaSection, \"a=ssrc:\").map((line)=>$257b6346d6d1b15f$var$SDPUtils.parseSsrcMedia(line)).filter((obj)=>obj.attribute === \"cname\")[0];\n if (remoteSsrc) {\n rtcpParameters.cname = remoteSsrc.value;\n rtcpParameters.ssrc = remoteSsrc.ssrc;\n }\n // Edge uses the compound attribute instead of reducedSize\n // compound is !reducedSize\n const rsize = $257b6346d6d1b15f$var$SDPUtils.matchPrefix(mediaSection, \"a=rtcp-rsize\");\n rtcpParameters.reducedSize = rsize.length > 0;\n rtcpParameters.compound = rsize.length === 0;\n // parses the rtcp-mux attrіbute.\n // Note that Edge does not support unmuxed RTCP.\n const mux = $257b6346d6d1b15f$var$SDPUtils.matchPrefix(mediaSection, \"a=rtcp-mux\");\n rtcpParameters.mux = mux.length > 0;\n return rtcpParameters;\n};\n$257b6346d6d1b15f$var$SDPUtils.writeRtcpParameters = function(rtcpParameters) {\n let sdp = \"\";\n if (rtcpParameters.reducedSize) sdp += \"a=rtcp-rsize\\r\\n\";\n if (rtcpParameters.mux) sdp += \"a=rtcp-mux\\r\\n\";\n if (rtcpParameters.ssrc !== undefined && rtcpParameters.cname) sdp += \"a=ssrc:\" + rtcpParameters.ssrc + \" cname:\" + rtcpParameters.cname + \"\\r\\n\";\n return sdp;\n};\n// parses either a=msid: or a=ssrc:... msid lines and returns\n// the id of the MediaStream and MediaStreamTrack.\n$257b6346d6d1b15f$var$SDPUtils.parseMsid = function(mediaSection) {\n let parts;\n const spec = $257b6346d6d1b15f$var$SDPUtils.matchPrefix(mediaSection, \"a=msid:\");\n if (spec.length === 1) {\n parts = spec[0].substring(7).split(\" \");\n return {\n stream: parts[0],\n track: parts[1]\n };\n }\n const planB = $257b6346d6d1b15f$var$SDPUtils.matchPrefix(mediaSection, \"a=ssrc:\").map((line)=>$257b6346d6d1b15f$var$SDPUtils.parseSsrcMedia(line)).filter((msidParts)=>msidParts.attribute === \"msid\");\n if (planB.length > 0) {\n parts = planB[0].value.split(\" \");\n return {\n stream: parts[0],\n track: parts[1]\n };\n }\n};\n// SCTP\n// parses draft-ietf-mmusic-sctp-sdp-26 first and falls back\n// to draft-ietf-mmusic-sctp-sdp-05\n$257b6346d6d1b15f$var$SDPUtils.parseSctpDescription = function(mediaSection) {\n const mline = $257b6346d6d1b15f$var$SDPUtils.parseMLine(mediaSection);\n const maxSizeLine = $257b6346d6d1b15f$var$SDPUtils.matchPrefix(mediaSection, \"a=max-message-size:\");\n let maxMessageSize;\n if (maxSizeLine.length > 0) maxMessageSize = parseInt(maxSizeLine[0].substring(19), 10);\n if (isNaN(maxMessageSize)) maxMessageSize = 65536;\n const sctpPort = $257b6346d6d1b15f$var$SDPUtils.matchPrefix(mediaSection, \"a=sctp-port:\");\n if (sctpPort.length > 0) return {\n port: parseInt(sctpPort[0].substring(12), 10),\n protocol: mline.fmt,\n maxMessageSize: maxMessageSize\n };\n const sctpMapLines = $257b6346d6d1b15f$var$SDPUtils.matchPrefix(mediaSection, \"a=sctpmap:\");\n if (sctpMapLines.length > 0) {\n const parts = sctpMapLines[0].substring(10).split(\" \");\n return {\n port: parseInt(parts[0], 10),\n protocol: parts[1],\n maxMessageSize: maxMessageSize\n };\n }\n};\n// SCTP\n// outputs the draft-ietf-mmusic-sctp-sdp-26 version that all browsers\n// support by now receiving in this format, unless we originally parsed\n// as the draft-ietf-mmusic-sctp-sdp-05 format (indicated by the m-line\n// protocol of DTLS/SCTP -- without UDP/ or TCP/)\n$257b6346d6d1b15f$var$SDPUtils.writeSctpDescription = function(media, sctp) {\n let output = [];\n if (media.protocol !== \"DTLS/SCTP\") output = [\n \"m=\" + media.kind + \" 9 \" + media.protocol + \" \" + sctp.protocol + \"\\r\\n\",\n \"c=IN IP4 0.0.0.0\\r\\n\",\n \"a=sctp-port:\" + sctp.port + \"\\r\\n\"\n ];\n else output = [\n \"m=\" + media.kind + \" 9 \" + media.protocol + \" \" + sctp.port + \"\\r\\n\",\n \"c=IN IP4 0.0.0.0\\r\\n\",\n \"a=sctpmap:\" + sctp.port + \" \" + sctp.protocol + \" 65535\\r\\n\"\n ];\n if (sctp.maxMessageSize !== undefined) output.push(\"a=max-message-size:\" + sctp.maxMessageSize + \"\\r\\n\");\n return output.join(\"\");\n};\n// Generate a session ID for SDP.\n// https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-20#section-5.2.1\n// recommends using a cryptographically random +ve 64-bit value\n// but right now this should be acceptable and within the right range\n$257b6346d6d1b15f$var$SDPUtils.generateSessionId = function() {\n return Math.random().toString().substr(2, 22);\n};\n// Write boiler plate for start of SDP\n// sessId argument is optional - if not supplied it will\n// be generated randomly\n// sessVersion is optional and defaults to 2\n// sessUser is optional and defaults to 'thisisadapterortc'\n$257b6346d6d1b15f$var$SDPUtils.writeSessionBoilerplate = function(sessId, sessVer, sessUser) {\n let sessionId;\n const version = sessVer !== undefined ? sessVer : 2;\n if (sessId) sessionId = sessId;\n else sessionId = $257b6346d6d1b15f$var$SDPUtils.generateSessionId();\n const user = sessUser || \"thisisadapterortc\";\n // FIXME: sess-id should be an NTP timestamp.\n return \"v=0\\r\\no=\" + user + \" \" + sessionId + \" \" + version + \" IN IP4 127.0.0.1\\r\\n\" + \"s=-\\r\\n\" + \"t=0 0\\r\\n\";\n};\n// Gets the direction from the mediaSection or the sessionpart.\n$257b6346d6d1b15f$var$SDPUtils.getDirection = function(mediaSection, sessionpart) {\n // Look for sendrecv, sendonly, recvonly, inactive, default to sendrecv.\n const lines = $257b6346d6d1b15f$var$SDPUtils.splitLines(mediaSection);\n for(let i = 0; i < lines.length; i++)switch(lines[i]){\n case \"a=sendrecv\":\n case \"a=sendonly\":\n case \"a=recvonly\":\n case \"a=inactive\":\n return lines[i].substring(2);\n default:\n }\n if (sessionpart) return $257b6346d6d1b15f$var$SDPUtils.getDirection(sessionpart);\n return \"sendrecv\";\n};\n$257b6346d6d1b15f$var$SDPUtils.getKind = function(mediaSection) {\n const lines = $257b6346d6d1b15f$var$SDPUtils.splitLines(mediaSection);\n const mline = lines[0].split(\" \");\n return mline[0].substring(2);\n};\n$257b6346d6d1b15f$var$SDPUtils.isRejected = function(mediaSection) {\n return mediaSection.split(\" \", 2)[1] === \"0\";\n};\n$257b6346d6d1b15f$var$SDPUtils.parseMLine = function(mediaSection) {\n const lines = $257b6346d6d1b15f$var$SDPUtils.splitLines(mediaSection);\n const parts = lines[0].substring(2).split(\" \");\n return {\n kind: parts[0],\n port: parseInt(parts[1], 10),\n protocol: parts[2],\n fmt: parts.slice(3).join(\" \")\n };\n};\n$257b6346d6d1b15f$var$SDPUtils.parseOLine = function(mediaSection) {\n const line = $257b6346d6d1b15f$var$SDPUtils.matchPrefix(mediaSection, \"o=\")[0];\n const parts = line.substring(2).split(\" \");\n return {\n username: parts[0],\n sessionId: parts[1],\n sessionVersion: parseInt(parts[2], 10),\n netType: parts[3],\n addressType: parts[4],\n address: parts[5]\n };\n};\n// a very naive interpretation of a valid SDP.\n$257b6346d6d1b15f$var$SDPUtils.isValidSDP = function(blob) {\n if (typeof blob !== \"string\" || blob.length === 0) return false;\n const lines = $257b6346d6d1b15f$var$SDPUtils.splitLines(blob);\n for(let i = 0; i < lines.length; i++){\n if (lines[i].length < 2 || lines[i].charAt(1) !== \"=\") return false;\n // TODO: check the modifier a bit more.\n }\n return true;\n};\n$257b6346d6d1b15f$exports = $257b6346d6d1b15f$var$SDPUtils;\n\n\n\n\"use strict\";\nfunction $8080a560a280724d$export$cf133661e444ccfe(window) {\n // foundation is arbitrarily chosen as an indicator for full support for\n // https://w3c.github.io/webrtc-pc/#rtcicecandidate-interface\n if (!window.RTCIceCandidate || window.RTCIceCandidate && \"foundation\" in window.RTCIceCandidate.prototype) return;\n const NativeRTCIceCandidate = window.RTCIceCandidate;\n window.RTCIceCandidate = function RTCIceCandidate(args) {\n // Remove the a= which shouldn't be part of the candidate string.\n if (typeof args === \"object\" && args.candidate && args.candidate.indexOf(\"a=\") === 0) {\n args = JSON.parse(JSON.stringify(args));\n args.candidate = args.candidate.substring(2);\n }\n if (args.candidate && args.candidate.length) {\n // Augment the native candidate with the parsed fields.\n const nativeCandidate = new NativeRTCIceCandidate(args);\n const parsedCandidate = (0, (/*@__PURE__*/$parcel$interopDefault($257b6346d6d1b15f$exports))).parseCandidate(args.candidate);\n for(const key in parsedCandidate)if (!(key in nativeCandidate)) Object.defineProperty(nativeCandidate, key, {\n value: parsedCandidate[key]\n });\n // Override serializer to not serialize the extra attributes.\n nativeCandidate.toJSON = function toJSON() {\n return {\n candidate: nativeCandidate.candidate,\n sdpMid: nativeCandidate.sdpMid,\n sdpMLineIndex: nativeCandidate.sdpMLineIndex,\n usernameFragment: nativeCandidate.usernameFragment\n };\n };\n return nativeCandidate;\n }\n return new NativeRTCIceCandidate(args);\n };\n window.RTCIceCandidate.prototype = NativeRTCIceCandidate.prototype;\n // Hook up the augmented candidate in onicecandidate and\n // addEventListener('icecandidate', ...)\n $35583cf39f4111ff$export$1f48841962b828b1(window, \"icecandidate\", (e)=>{\n if (e.candidate) Object.defineProperty(e, \"candidate\", {\n value: new window.RTCIceCandidate(e.candidate),\n writable: \"false\"\n });\n return e;\n });\n}\nfunction $8080a560a280724d$export$fdafb8d8280e29b5(window) {\n if (!window.RTCIceCandidate || window.RTCIceCandidate && \"relayProtocol\" in window.RTCIceCandidate.prototype) return;\n // Hook up the augmented candidate in onicecandidate and\n // addEventListener('icecandidate', ...)\n $35583cf39f4111ff$export$1f48841962b828b1(window, \"icecandidate\", (e)=>{\n if (e.candidate) {\n const parsedCandidate = (0, (/*@__PURE__*/$parcel$interopDefault($257b6346d6d1b15f$exports))).parseCandidate(e.candidate.candidate);\n if (parsedCandidate.type === \"relay\") // This is a libwebrtc-specific mapping of local type preference\n // to relayProtocol.\n e.candidate.relayProtocol = ({\n 0: \"tls\",\n 1: \"tcp\",\n 2: \"udp\"\n })[parsedCandidate.priority >> 24];\n }\n return e;\n });\n}\nfunction $8080a560a280724d$export$a99147c78a56edc4(window, browserDetails) {\n if (!window.RTCPeerConnection) return;\n if (!(\"sctp\" in window.RTCPeerConnection.prototype)) Object.defineProperty(window.RTCPeerConnection.prototype, \"sctp\", {\n get () {\n return typeof this._sctp === \"undefined\" ? null : this._sctp;\n }\n });\n const sctpInDescription = function(description) {\n if (!description || !description.sdp) return false;\n const sections = (0, (/*@__PURE__*/$parcel$interopDefault($257b6346d6d1b15f$exports))).splitSections(description.sdp);\n sections.shift();\n return sections.some((mediaSection)=>{\n const mLine = (0, (/*@__PURE__*/$parcel$interopDefault($257b6346d6d1b15f$exports))).parseMLine(mediaSection);\n return mLine && mLine.kind === \"application\" && mLine.protocol.indexOf(\"SCTP\") !== -1;\n });\n };\n const getRemoteFirefoxVersion = function(description) {\n // TODO: Is there a better solution for detecting Firefox?\n const match = description.sdp.match(/mozilla...THIS_IS_SDPARTA-(\\d+)/);\n if (match === null || match.length < 2) return -1;\n const version = parseInt(match[1], 10);\n // Test for NaN (yes, this is ugly)\n return version !== version ? -1 : version;\n };\n const getCanSendMaxMessageSize = function(remoteIsFirefox) {\n // Every implementation we know can send at least 64 KiB.\n // Note: Although Chrome is technically able to send up to 256 KiB, the\n // data does not reach the other peer reliably.\n // See: https://bugs.chromium.org/p/webrtc/issues/detail?id=8419\n let canSendMaxMessageSize = 65536;\n if (browserDetails.browser === \"firefox\") {\n if (browserDetails.version < 57) {\n if (remoteIsFirefox === -1) // FF < 57 will send in 16 KiB chunks using the deprecated PPID\n // fragmentation.\n canSendMaxMessageSize = 16384;\n else // However, other FF (and RAWRTC) can reassemble PPID-fragmented\n // messages. Thus, supporting ~2 GiB when sending.\n canSendMaxMessageSize = 2147483637;\n } else if (browserDetails.version < 60) // Currently, all FF >= 57 will reset the remote maximum message size\n // to the default value when a data channel is created at a later\n // stage. :(\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831\n canSendMaxMessageSize = browserDetails.version === 57 ? 65535 : 65536;\n else // FF >= 60 supports sending ~2 GiB\n canSendMaxMessageSize = 2147483637;\n }\n return canSendMaxMessageSize;\n };\n const getMaxMessageSize = function(description, remoteIsFirefox) {\n // Note: 65536 bytes is the default value from the SDP spec. Also,\n // every implementation we know supports receiving 65536 bytes.\n let maxMessageSize = 65536;\n // FF 57 has a slightly incorrect default remote max message size, so\n // we need to adjust it here to avoid a failure when sending.\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1425697\n if (browserDetails.browser === \"firefox\" && browserDetails.version === 57) maxMessageSize = 65535;\n const match = (0, (/*@__PURE__*/$parcel$interopDefault($257b6346d6d1b15f$exports))).matchPrefix(description.sdp, \"a=max-message-size:\");\n if (match.length > 0) maxMessageSize = parseInt(match[0].substring(19), 10);\n else if (browserDetails.browser === \"firefox\" && remoteIsFirefox !== -1) // If the maximum message size is not present in the remote SDP and\n // both local and remote are Firefox, the remote peer can receive\n // ~2 GiB.\n maxMessageSize = 2147483637;\n return maxMessageSize;\n };\n const origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() {\n this._sctp = null;\n // Chrome decided to not expose .sctp in plan-b mode.\n // As usual, adapter.js has to do an 'ugly worakaround'\n // to cover up the mess.\n if (browserDetails.browser === \"chrome\" && browserDetails.version >= 76) {\n const { sdpSemantics: sdpSemantics } = this.getConfiguration();\n if (sdpSemantics === \"plan-b\") Object.defineProperty(this, \"sctp\", {\n get () {\n return typeof this._sctp === \"undefined\" ? null : this._sctp;\n },\n enumerable: true,\n configurable: true\n });\n }\n if (sctpInDescription(arguments[0])) {\n // Check if the remote is FF.\n const isFirefox = getRemoteFirefoxVersion(arguments[0]);\n // Get the maximum message size the local peer is capable of sending\n const canSendMMS = getCanSendMaxMessageSize(isFirefox);\n // Get the maximum message size of the remote peer.\n const remoteMMS = getMaxMessageSize(arguments[0], isFirefox);\n // Determine final maximum message size\n let maxMessageSize;\n if (canSendMMS === 0 && remoteMMS === 0) maxMessageSize = Number.POSITIVE_INFINITY;\n else if (canSendMMS === 0 || remoteMMS === 0) maxMessageSize = Math.max(canSendMMS, remoteMMS);\n else maxMessageSize = Math.min(canSendMMS, remoteMMS);\n // Create a dummy RTCSctpTransport object and the 'maxMessageSize'\n // attribute.\n const sctp = {};\n Object.defineProperty(sctp, \"maxMessageSize\", {\n get () {\n return maxMessageSize;\n }\n });\n this._sctp = sctp;\n }\n return origSetRemoteDescription.apply(this, arguments);\n };\n}\nfunction $8080a560a280724d$export$d461c8d5c5db5da7(window) {\n if (!(window.RTCPeerConnection && \"createDataChannel\" in window.RTCPeerConnection.prototype)) return;\n // Note: Although Firefox >= 57 has a native implementation, the maximum\n // message size can be reset for all data channels at a later stage.\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831\n function wrapDcSend(dc, pc) {\n const origDataChannelSend = dc.send;\n dc.send = function send() {\n const data = arguments[0];\n const length = data.length || data.size || data.byteLength;\n if (dc.readyState === \"open\" && pc.sctp && length > pc.sctp.maxMessageSize) throw new TypeError(\"Message too large (can send a maximum of \" + pc.sctp.maxMessageSize + \" bytes)\");\n return origDataChannelSend.apply(dc, arguments);\n };\n }\n const origCreateDataChannel = window.RTCPeerConnection.prototype.createDataChannel;\n window.RTCPeerConnection.prototype.createDataChannel = function createDataChannel() {\n const dataChannel = origCreateDataChannel.apply(this, arguments);\n wrapDcSend(dataChannel, this);\n return dataChannel;\n };\n $35583cf39f4111ff$export$1f48841962b828b1(window, \"datachannel\", (e)=>{\n wrapDcSend(e.channel, e.target);\n return e;\n });\n}\nfunction $8080a560a280724d$export$63bb816cc75460(window) {\n if (!window.RTCPeerConnection || \"connectionState\" in window.RTCPeerConnection.prototype) return;\n const proto = window.RTCPeerConnection.prototype;\n Object.defineProperty(proto, \"connectionState\", {\n get () {\n return ({\n completed: \"connected\",\n checking: \"connecting\"\n })[this.iceConnectionState] || this.iceConnectionState;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(proto, \"onconnectionstatechange\", {\n get () {\n return this._onconnectionstatechange || null;\n },\n set (cb) {\n if (this._onconnectionstatechange) {\n this.removeEventListener(\"connectionstatechange\", this._onconnectionstatechange);\n delete this._onconnectionstatechange;\n }\n if (cb) this.addEventListener(\"connectionstatechange\", this._onconnectionstatechange = cb);\n },\n enumerable: true,\n configurable: true\n });\n [\n \"setLocalDescription\",\n \"setRemoteDescription\"\n ].forEach((method)=>{\n const origMethod = proto[method];\n proto[method] = function() {\n if (!this._connectionstatechangepoly) {\n this._connectionstatechangepoly = (e)=>{\n const pc = e.target;\n if (pc._lastConnectionState !== pc.connectionState) {\n pc._lastConnectionState = pc.connectionState;\n const newEvent = new Event(\"connectionstatechange\", e);\n pc.dispatchEvent(newEvent);\n }\n return e;\n };\n this.addEventListener(\"iceconnectionstatechange\", this._connectionstatechangepoly);\n }\n return origMethod.apply(this, arguments);\n };\n });\n}\nfunction $8080a560a280724d$export$a57d114344295149(window, browserDetails) {\n /* remove a=extmap-allow-mixed for webrtc.org < M71 */ if (!window.RTCPeerConnection) return;\n if (browserDetails.browser === \"chrome\" && browserDetails.version >= 71) return;\n if (browserDetails.browser === \"safari\" && browserDetails.version >= 605) return;\n const nativeSRD = window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription(desc) {\n if (desc && desc.sdp && desc.sdp.indexOf(\"\\na=extmap-allow-mixed\") !== -1) {\n const sdp = desc.sdp.split(\"\\n\").filter((line)=>{\n return line.trim() !== \"a=extmap-allow-mixed\";\n }).join(\"\\n\");\n // Safari enforces read-only-ness of RTCSessionDescription fields.\n if (window.RTCSessionDescription && desc instanceof window.RTCSessionDescription) arguments[0] = new window.RTCSessionDescription({\n type: desc.type,\n sdp: sdp\n });\n else desc.sdp = sdp;\n }\n return nativeSRD.apply(this, arguments);\n };\n}\nfunction $8080a560a280724d$export$51d5e40b48c771c7(window, browserDetails) {\n // Support for addIceCandidate(null or undefined)\n // as well as addIceCandidate({candidate: \"\", ...})\n // https://bugs.chromium.org/p/chromium/issues/detail?id=978582\n // Note: must be called before other polyfills which change the signature.\n if (!(window.RTCPeerConnection && window.RTCPeerConnection.prototype)) return;\n const nativeAddIceCandidate = window.RTCPeerConnection.prototype.addIceCandidate;\n if (!nativeAddIceCandidate || nativeAddIceCandidate.length === 0) return;\n window.RTCPeerConnection.prototype.addIceCandidate = function addIceCandidate() {\n if (!arguments[0]) {\n if (arguments[1]) arguments[1].apply(null);\n return Promise.resolve();\n }\n // Firefox 68+ emits and processes {candidate: \"\", ...}, ignore\n // in older versions.\n // Native support for ignoring exists for Chrome M77+.\n // Safari ignores as well, exact version unknown but works in the same\n // version that also ignores addIceCandidate(null).\n if ((browserDetails.browser === \"chrome\" && browserDetails.version < 78 || browserDetails.browser === \"firefox\" && browserDetails.version < 68 || browserDetails.browser === \"safari\") && arguments[0] && arguments[0].candidate === \"\") return Promise.resolve();\n return nativeAddIceCandidate.apply(this, arguments);\n };\n}\nfunction $8080a560a280724d$export$7170d04e59f9d553(window, browserDetails) {\n if (!(window.RTCPeerConnection && window.RTCPeerConnection.prototype)) return;\n const nativeSetLocalDescription = window.RTCPeerConnection.prototype.setLocalDescription;\n if (!nativeSetLocalDescription || nativeSetLocalDescription.length === 0) return;\n window.RTCPeerConnection.prototype.setLocalDescription = function setLocalDescription() {\n let desc = arguments[0] || {};\n if (typeof desc !== \"object\" || desc.type && desc.sdp) return nativeSetLocalDescription.apply(this, arguments);\n // The remaining steps should technically happen when SLD comes off the\n // RTCPeerConnection's operations chain (not ahead of going on it), but\n // this is too difficult to shim. Instead, this shim only covers the\n // common case where the operations chain is empty. This is imperfect, but\n // should cover many cases. Rationale: Even if we can't reduce the glare\n // window to zero on imperfect implementations, there's value in tapping\n // into the perfect negotiation pattern that several browsers support.\n desc = {\n type: desc.type,\n sdp: desc.sdp\n };\n if (!desc.type) switch(this.signalingState){\n case \"stable\":\n case \"have-local-offer\":\n case \"have-remote-pranswer\":\n desc.type = \"offer\";\n break;\n default:\n desc.type = \"answer\";\n break;\n }\n if (desc.sdp || desc.type !== \"offer\" && desc.type !== \"answer\") return nativeSetLocalDescription.apply(this, [\n desc\n ]);\n const func = desc.type === \"offer\" ? this.createOffer : this.createAnswer;\n return func.apply(this).then((d)=>nativeSetLocalDescription.apply(this, [\n d\n ]));\n };\n}\n\n\n\nfunction $bfdf465d320daaf1$export$e77bf46c04ac7d12({ window: window } = {}, options = {\n shimChrome: true,\n shimFirefox: true,\n shimSafari: true\n}) {\n // Utils.\n const logging = $35583cf39f4111ff$export$bef1f36f5486a6a3;\n const browserDetails = $35583cf39f4111ff$export$2d31490a0c05f094(window);\n const adapter = {\n browserDetails: browserDetails,\n commonShim: $8080a560a280724d$exports,\n extractVersion: $35583cf39f4111ff$export$e3c02be309be1f23,\n disableLog: $35583cf39f4111ff$export$afbfee8cc06fd3e4,\n disableWarnings: $35583cf39f4111ff$export$51516be4b019e41e,\n sdp: // Expose sdp as a convenience. For production apps include directly.\n $257b6346d6d1b15f$exports\n };\n // Shim browser if found.\n switch(browserDetails.browser){\n case \"chrome\":\n if (!$e3f02d0a98ccb0db$exports || !$e3f02d0a98ccb0db$exports.shimPeerConnection || !options.shimChrome) {\n logging(\"Chrome shim is not included in this adapter release.\");\n return adapter;\n }\n if (browserDetails.version === null) {\n logging(\"Chrome shim can not determine version, not shimming.\");\n return adapter;\n }\n logging(\"adapter.js shimming chrome.\");\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = $e3f02d0a98ccb0db$exports;\n // Must be called before shimPeerConnection.\n $8080a560a280724d$export$51d5e40b48c771c7(window, browserDetails);\n $8080a560a280724d$export$7170d04e59f9d553(window, browserDetails);\n $e3f02d0a98ccb0db$exports.shimGetUserMedia(window, browserDetails);\n $e3f02d0a98ccb0db$exports.shimMediaStream(window, browserDetails);\n $e3f02d0a98ccb0db$exports.shimPeerConnection(window, browserDetails);\n $e3f02d0a98ccb0db$exports.shimOnTrack(window, browserDetails);\n $e3f02d0a98ccb0db$exports.shimAddTrackRemoveTrack(window, browserDetails);\n $e3f02d0a98ccb0db$exports.shimGetSendersWithDtmf(window, browserDetails);\n $e3f02d0a98ccb0db$exports.shimGetStats(window, browserDetails);\n $e3f02d0a98ccb0db$exports.shimSenderReceiverGetStats(window, browserDetails);\n $e3f02d0a98ccb0db$exports.fixNegotiationNeeded(window, browserDetails);\n $8080a560a280724d$export$cf133661e444ccfe(window, browserDetails);\n $8080a560a280724d$export$fdafb8d8280e29b5(window, browserDetails);\n $8080a560a280724d$export$63bb816cc75460(window, browserDetails);\n $8080a560a280724d$export$a99147c78a56edc4(window, browserDetails);\n $8080a560a280724d$export$d461c8d5c5db5da7(window, browserDetails);\n $8080a560a280724d$export$a57d114344295149(window, browserDetails);\n break;\n case \"firefox\":\n if (!$5c8245455fb0fb72$exports || !$5c8245455fb0fb72$exports.shimPeerConnection || !options.shimFirefox) {\n logging(\"Firefox shim is not included in this adapter release.\");\n return adapter;\n }\n logging(\"adapter.js shimming firefox.\");\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = $5c8245455fb0fb72$exports;\n // Must be called before shimPeerConnection.\n $8080a560a280724d$export$51d5e40b48c771c7(window, browserDetails);\n $8080a560a280724d$export$7170d04e59f9d553(window, browserDetails);\n $5c8245455fb0fb72$exports.shimGetUserMedia(window, browserDetails);\n $5c8245455fb0fb72$exports.shimPeerConnection(window, browserDetails);\n $5c8245455fb0fb72$exports.shimOnTrack(window, browserDetails);\n $5c8245455fb0fb72$exports.shimRemoveStream(window, browserDetails);\n $5c8245455fb0fb72$exports.shimSenderGetStats(window, browserDetails);\n $5c8245455fb0fb72$exports.shimReceiverGetStats(window, browserDetails);\n $5c8245455fb0fb72$exports.shimRTCDataChannel(window, browserDetails);\n $5c8245455fb0fb72$exports.shimAddTransceiver(window, browserDetails);\n $5c8245455fb0fb72$exports.shimGetParameters(window, browserDetails);\n $5c8245455fb0fb72$exports.shimCreateOffer(window, browserDetails);\n $5c8245455fb0fb72$exports.shimCreateAnswer(window, browserDetails);\n $8080a560a280724d$export$cf133661e444ccfe(window, browserDetails);\n $8080a560a280724d$export$63bb816cc75460(window, browserDetails);\n $8080a560a280724d$export$a99147c78a56edc4(window, browserDetails);\n $8080a560a280724d$export$d461c8d5c5db5da7(window, browserDetails);\n break;\n case \"safari\":\n if (!$4bb6650df37cb8fe$exports || !options.shimSafari) {\n logging(\"Safari shim is not included in this adapter release.\");\n return adapter;\n }\n logging(\"adapter.js shimming safari.\");\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = $4bb6650df37cb8fe$exports;\n // Must be called before shimCallbackAPI.\n $8080a560a280724d$export$51d5e40b48c771c7(window, browserDetails);\n $8080a560a280724d$export$7170d04e59f9d553(window, browserDetails);\n $4bb6650df37cb8fe$exports.shimRTCIceServerUrls(window, browserDetails);\n $4bb6650df37cb8fe$exports.shimCreateOfferLegacy(window, browserDetails);\n $4bb6650df37cb8fe$exports.shimCallbacksAPI(window, browserDetails);\n $4bb6650df37cb8fe$exports.shimLocalStreamsAPI(window, browserDetails);\n $4bb6650df37cb8fe$exports.shimRemoteStreamsAPI(window, browserDetails);\n $4bb6650df37cb8fe$exports.shimTrackEventTransceiver(window, browserDetails);\n $4bb6650df37cb8fe$exports.shimGetUserMedia(window, browserDetails);\n $4bb6650df37cb8fe$exports.shimAudioContext(window, browserDetails);\n $8080a560a280724d$export$cf133661e444ccfe(window, browserDetails);\n $8080a560a280724d$export$fdafb8d8280e29b5(window, browserDetails);\n $8080a560a280724d$export$a99147c78a56edc4(window, browserDetails);\n $8080a560a280724d$export$d461c8d5c5db5da7(window, browserDetails);\n $8080a560a280724d$export$a57d114344295149(window, browserDetails);\n break;\n default:\n logging(\"Unsupported browser!\");\n break;\n }\n return adapter;\n}\n\n\n\"use strict\";\nconst $c8e074d8a8847700$var$adapter = (0, $bfdf465d320daaf1$export$e77bf46c04ac7d12)({\n window: typeof window === \"undefined\" ? undefined : window\n});\nvar $c8e074d8a8847700$export$2e2bcd8739ae039 = $c8e074d8a8847700$var$adapter;\n\n\nclass $b318be68d2b2c029$export$2e2bcd8739ae039 {\n rtc;\n peer;\n webrtc;\n totalSize = 0;\n isReady = false;\n isStarted = false;\n isSending = false;\n isRecaiving = false;\n processedSize = 0;\n recaivedFile;\n bufferSizePerChannel = 10e6;\n bufferSizePerPack = 10e3;\n safeBufferSizePerPack = 9999;\n constructor(webrtc, peer){\n this.webrtc = webrtc;\n this.rtc = webrtc.rtc;\n this.peer = peer;\n }\n async RecaiveFile(_rtc, fileMetadata, channelCount, _totalSize, onEnded) {\n //let totals = {};\n // let index = 0;\n /*setChannelStatus(Array.from({length:channelCount}).map((e, index) => {\n return {\n name: `${index+1}. Kanal`,\n current: 0,\n currentTotal: 0,\n total: 0\n }\n }));*/ let parts = [];\n this.webrtc.on(\"datachannel\", (datachannel)=>{\n //let channelIndex = index++;\n let current = 0;\n let totalSize = 0;\n let currentPart = 0;\n let bufferAmount = [];\n datachannel.onmessage = function({ data: data }) {\n if (totalSize == 0) {\n let { size: size , part: part } = JSON.parse(data);\n totalSize = size;\n currentPart = part;\n /*updateChannelStatus(channelIndex, n => {\n return {\n ...n,\n total: totalSize,\n current: 0\n }\n });*/ datachannel.send(\"READY\");\n } else {\n current += data.byteLength;\n bufferAmount.push(data);\n /*updateChannelStatus(channelIndex, n => {\n return {\n ...n,\n current: data.byteLength + n.current,\n currentTotal: data.byteLength + n.currentTotal,\n }\n });\n setProcessedSize(n => n + data.byteLength);*/ if (current == totalSize) {\n parts[currentPart] = new Blob(bufferAmount);\n bufferAmount = [];\n //totals[datachannel.label] += totalSize;\n totalSize = 0;\n currentPart = 0;\n current = 0;\n datachannel.send(\"TOTAL_RECAIVED\");\n }\n }\n };\n datachannel.onclose = ()=>{\n channelCount--;\n if (channelCount == 0) {\n let file = new File(parts, fileMetadata.name, {\n type: fileMetadata.type,\n lastModified: +new Date\n });\n onEnded(file);\n }\n };\n });\n }\n async SendFile(file, metadata) {\n this.isSending = true;\n this.isStarted = true;\n let buffer = await file.arrayBuffer();\n let partCount = Math.ceil(buffer.byteLength / 10e6);\n let channelCount = Math.min(5, partCount);\n if (this.webrtc.iceStatus != \"connected\") throw new Error(\"WebRTC is a not ready\");\n this.peer.send({\n type: \"file\",\n name: file.name,\n size: file.size,\n mimetype: file.type,\n partCount: partCount,\n channelCount: channelCount,\n metadata: metadata\n });\n let channels = [];\n for(let channelIndex = 0; channelIndex < channelCount; channelIndex++){\n let channel = this.rtc.createDataChannel(\"\\\\?\\\\file_\" + channelIndex);\n channel.binaryType = \"arraybuffer\";\n await new Promise((ok)=>{\n channel.onopen = ()=>{\n ok(void 0);\n };\n });\n channels.push(channel);\n }\n let currentPart = 0;\n let next = ()=>{\n if (currentPart < partCount) {\n let bufferPart = buffer.slice(currentPart * 10e6, currentPart * 10e6 + 10e6);\n currentPart++;\n return [\n bufferPart,\n currentPart - 1\n ];\n }\n return [\n false,\n 0\n ];\n };\n let spyChannelIndex = channels.length;\n await new Promise((ok)=>{\n for(let channelIndex = 0; channelIndex < channels.length; channelIndex++)this.sendPartition(channels[channelIndex], next, channelIndex, ()=>{\n spyChannelIndex--;\n if (spyChannelIndex == 0) {\n this.isSending = false;\n this.isStarted = false;\n ok(undefined);\n }\n });\n });\n }\n sendPartition(channel, nextblob10mb, _channelIndex, onEnded) {\n let [currentBuffer, currentPartition] = nextblob10mb();\n let currentPart = 0;\n let next = ()=>{\n if (!(currentBuffer instanceof ArrayBuffer)) return;\n let bufferPart = currentBuffer.slice(currentPart * 16e3, currentPart * 16e3 + 16e3);\n currentPart++;\n if (bufferPart.byteLength != 0) /*\n updateChannelStatus(channelIndex, n => {\n return {\n ...n,\n current: bufferPart.byteLength + n.current,\n currentTotal: bufferPart.byteLength + n.currentTotal\n }\n });\n setProcessedSize(n => n + bufferPart.byteLength);\n */ return bufferPart;\n };\n channel.addEventListener(\"message\", ({ data: data })=>{\n if (data == \"READY\") this.sendFileChannel(channel, next);\n if (data == \"TOTAL_RECAIVED\") {\n [currentBuffer, currentPartition] = nextblob10mb();\n currentPart = 0;\n if (currentBuffer != false) /*updateChannelStatus(channelIndex, n => {\n return {\n ...n,\n total: currentBuffer.byteLength,\n current: 0,\n }\n });*/ channel.send(JSON.stringify({\n size: currentBuffer.byteLength,\n part: currentPartition\n }));\n else {\n channel.close();\n onEnded();\n }\n }\n });\n channel.send(JSON.stringify({\n size: currentBuffer.byteLength,\n part: currentPartition\n }));\n }\n sendFileChannel(channel, getNextBlob) {\n channel.addEventListener(\"bufferedamountlow\", function() {\n let buffer = getNextBlob();\n if (buffer) channel.send(buffer);\n });\n channel.bufferedAmountLowThreshold = 15999;\n let c = getNextBlob();\n c && channel.send(c);\n }\n}\n\n\n\nclass $895bfe3da380c655$export$2e2bcd8739ae039 {\n static channels = new Map();\n static requireGC = false;\n id;\n active = false;\n connectionStatus = \"new\";\n iceStatus = \"new\";\n gatheringStatus = \"new\";\n signalingStatus = \"\";\n rtc;\n recaivingStream = new Map();\n sendingStream = new Map();\n events = {};\n channel;\n static defaultRTCConfig = {\n iceCandidatePoolSize: 0,\n iceTransportPolicy: \"all\",\n rtcpMuxPolicy: \"require\"\n };\n static defaultICEServers = [\n {\n urls: \"stun:stun.l.google.com:19302\"\n },\n {\n urls: \"stun:stun1.l.google.com:19302\"\n },\n {\n urls: \"stun:stun2.l.google.com:19302\"\n },\n {\n urls: \"stun:stun3.l.google.com:19302\"\n },\n {\n urls: \"stun:stun4.l.google.com:19302\"\n }\n ];\n peer;\n FileTransportChannel;\n constructor(rtcConfig, rtcServers){\n let config = {};\n if (rtcConfig) Object.assign(config, $895bfe3da380c655$export$2e2bcd8739ae039.defaultRTCConfig, rtcConfig);\n else Object.assign(config, $895bfe3da380c655$export$2e2bcd8739ae039.defaultRTCConfig);\n config.iceServers = rtcServers || $895bfe3da380c655$export$2e2bcd8739ae039.defaultICEServers;\n this.rtc = new RTCPeerConnection(config);\n this.rtc.addEventListener(\"connectionstatechange\", ()=>{\n this.eventConnectionState();\n });\n this.rtc.addEventListener(\"icecandidate\", (...args)=>{\n this.eventIcecandidate(...args);\n });\n this.rtc.addEventListener(\"iceconnectionstatechange\", ()=>{\n this.eventICEConnectionState();\n });\n this.rtc.addEventListener(\"icegatheringstatechange\", ()=>{\n this.eventICEGatherinState();\n });\n this.rtc.addEventListener(\"negotiationneeded\", ()=>{\n this.eventNogationNeeded();\n });\n this.rtc.addEventListener(\"signalingstatechange\", ()=>{\n this.eventSignalingState();\n });\n this.rtc.addEventListener(\"track\", (...args)=>{\n this.eventTrack(...args);\n });\n this.rtc.addEventListener(\"datachannel\", (...args)=>{\n this.eventDatachannel(...args);\n });\n this.on(\"input\", async (data)=>{\n switch(data.type){\n case \"icecandidate\":\n await this.rtc.addIceCandidate(new RTCIceCandidate(data.value));\n break;\n case \"offer\":\n {\n await this.rtc.setRemoteDescription(new RTCSessionDescription(data.value));\n let answer = await this.rtc.createAnswer({\n offerToReceiveAudio: true,\n offerToReceiveVideo: true\n });\n await this.rtc.setLocalDescription(answer);\n this.send({\n type: \"answer\",\n value: answer\n });\n break;\n }\n case \"answer\":\n await this.rtc.setRemoteDescription(new RTCSessionDescription(data.value));\n break;\n case \"streamInfo\":\n {\n let { id: id , value: value } = data;\n let streamInfo = this.recaivingStream.get(id);\n if (!streamInfo) this.recaivingStream.set(id, value);\n else this.recaivingStream.set(id, {\n ...streamInfo,\n ...value\n });\n this.send({\n type: \"streamAccept\",\n id: id\n });\n break;\n }\n case \"streamRemoved\":\n {\n let { id: id } = data;\n this.emit(\"stream:stopped\", this.recaivingStream.get(id));\n this.sendingStream.delete(id);\n break;\n }\n case \"streamAccept\":\n {\n let { id: id } = data;\n let sendingStream = this.sendingStream.get(id);\n let senders = [];\n if (sendingStream && sendingStream.stream) {\n for (const track of sendingStream.stream.getTracks())senders.push(this.rtc.addTrack(track, sendingStream.stream));\n sendingStream.senders = senders;\n }\n break;\n }\n case \"message\":\n this.emit(\"message\", data.payload);\n break;\n }\n });\n }\n addEventListener(event, callback) {\n (this.events[event] || (this.events[event] = [])).push(callback);\n }\n on(event, callback) {\n this.addEventListener(event, callback);\n }\n async dispatch(event, ...args) {\n if (this.events[event]) for (const callback of this.events[event])await callback(...args);\n }\n async emit(event, ...args) {\n await this.dispatch(event, ...args);\n }\n connect() {\n if (!this.channel) this.createDefaultDataChannel();\n }\n sendMessage(data) {\n this.send({\n type: \"message\",\n payload: data\n });\n }\n createDefaultDataChannel() {\n let dt = this.rtc.createDataChannel(\":default:\", {\n ordered: true\n });\n dt.addEventListener(\"open\", ()=>{\n this.channel = dt;\n $895bfe3da380c655$export$2e2bcd8739ae039.channels.set(this.id, this);\n this.active = true;\n });\n dt.addEventListener(\"message\", ({ data: data })=>{\n let pack = JSON.parse(data);\n this.emit(\"input\", pack);\n });\n dt.addEventListener(\"close\", ()=>{\n this.channel = undefined;\n this.active = false;\n });\n }\n destroy() {\n this.active = false;\n if (this.channel) {\n this.channel.close();\n this.channel = undefined;\n }\n if (this.rtc) this.rtc.close();\n this.emit(\"disconnected\");\n $895bfe3da380c655$export$2e2bcd8739ae039.channels.delete(this.id);\n }\n eventDatachannel(event) {\n if (event.channel.label == \":default:\") {\n $895bfe3da380c655$export$2e2bcd8739ae039.channels.set(this.id, this);\n this.channel = event.channel;\n this.active = true;\n event.channel.addEventListener(\"message\", ({ data: data })=>{\n let pack = JSON.parse(data);\n this.emit(\"input\", pack);\n });\n event.channel.addEventListener(\"close\", ()=>{\n this.channel = undefined;\n $895bfe3da380c655$export$2e2bcd8739ae039.channels.delete(this.id);\n $895bfe3da380c655$export$2e2bcd8739ae039.requireGC = true;\n });\n } else this.emit(\"datachannel\", event.channel);\n }\n send(data) {\n if (this.channel?.readyState == \"open\") this.channel.send(JSON.stringify(data));\n else this.emit(\"output\", data);\n }\n eventConnectionState() {\n this.connectionStatus = this.rtc.connectionState;\n if (this.connectionStatus == \"connected\") {\n if (this.active == false) this.emit(\"connected\");\n }\n if (this.connectionStatus == \"failed\" || this.connectionStatus == \"disconnected\" || this.connectionStatus == \"closed\") {\n if (this.active) this.destroy();\n }\n }\n eventIcecandidate(event) {\n if (event.candidate) this.send({\n type: \"icecandidate\",\n value: event.candidate\n });\n }\n eventICEConnectionState() {\n this.iceStatus = this.rtc.iceConnectionState;\n }\n eventICEGatherinState() {\n this.gatheringStatus = this.rtc.iceGatheringState;\n }\n async eventNogationNeeded() {\n let offer = await this.rtc.createOffer({\n iceRestart: true,\n offerToReceiveAudio: true,\n offerToReceiveVideo: true\n });\n await this.rtc.setLocalDescription(offer);\n this.send({\n type: \"offer\",\n value: offer\n });\n }\n eventSignalingState() {\n this.signalingStatus = this.rtc.signalingState;\n }\n eventTrack(event) {\n let rtpRecaiver = event.receiver;\n if (event.streams.length) for (const stream of event.streams){\n let streamInfo = this.recaivingStream.get(stream.id);\n (streamInfo.recaivers || (streamInfo.recaivers = [])).push(rtpRecaiver);\n if (this.recaivingStream.get(stream.id).stream == null) {\n streamInfo.stream = stream;\n this.emit(\"stream:added\", this.recaivingStream.get(stream.id));\n } else streamInfo.stream = stream;\n }\n }\n sendStream(stream, name, info) {\n this.send({\n type: \"streamInfo\",\n id: stream.id,\n value: {\n ...info,\n name: name\n }\n });\n this.sendingStream.set(stream.id, {\n ...info,\n id: stream.id,\n name: name,\n stream: stream\n });\n }\n stopStream(_stream) {\n if (this.connectionStatus != \"connected\") return;\n if (this.sendingStream.has(_stream.id)) {\n let { stream: stream } = this.sendingStream.get(_stream.id);\n for (const track of stream.getTracks()){\n for (const RTCPSender of this.rtc.getSenders())if (RTCPSender.track?.id == track.id) this.rtc.removeTrack(RTCPSender);\n }\n this.send({\n type: \"streamRemoved\",\n id: stream.id\n });\n this.sendingStream.delete(_stream.id);\n }\n }\n stopAllStreams() {\n if (this.connectionStatus != \"connected\") return;\n for (const [, { stream: stream }] of this.sendingStream){\n if (stream == undefined) continue;\n for (const track of stream.getTracks()){\n for (const RTCPSender of this.rtc.getSenders())if (RTCPSender.track?.id == track.id) this.rtc.removeTrack(RTCPSender);\n }\n this.send({\n type: \"streamRemoved\",\n id: stream.id\n });\n }\n this.sendingStream.clear();\n }\n async SendFile(file, meta) {\n if (!this.peer) throw new Error(\"Peer is not ready\");\n this.FileTransportChannel = new (0, $b318be68d2b2c029$export$2e2bcd8739ae039)(this, this.peer);\n await this.FileTransportChannel.SendFile(file, meta);\n }\n async RecaiveFile(chnlCount, filemeta, totalSize) {\n if (!this.peer) throw new Error(\"Peer is not ready\");\n this.FileTransportChannel = new (0, $b318be68d2b2c029$export$2e2bcd8739ae039)(this, this.peer);\n return await new Promise((recaivedFile)=>{\n if (this.FileTransportChannel) this.FileTransportChannel.RecaiveFile(this.rtc, filemeta, chnlCount, totalSize, (file)=>{\n recaivedFile(file);\n });\n });\n }\n}\n$895bfe3da380c655$export$2e2bcd8739ae039.requireGC = false;\nsetInterval(()=>{\n if ($895bfe3da380c655$export$2e2bcd8739ae039.requireGC == false) return;\n let img = document.createElement(\"img\");\n img.src = window.URL.createObjectURL(new Blob([\n new ArrayBuffer(5e+7)\n ]));\n img.onerror = function() {\n window.URL.revokeObjectURL(this.src);\n };\n $895bfe3da380c655$export$2e2bcd8739ae039.requireGC = false;\n}, 3000);\n\n\nvar $9f6c30de484136d4$var$IMessageSymbase;\n(function($9f6c30de484136d4$var$IMessageSymbase) {\n $9f6c30de484136d4$var$IMessageSymbase[$9f6c30de484136d4$var$IMessageSymbase[\"PayloadMessagePack\"] = -12873.54] = \"PayloadMessagePack\";\n $9f6c30de484136d4$var$IMessageSymbase[$9f6c30de484136d4$var$IMessageSymbase[\"PayloadRTCBasePack\"] = -12884.54] = \"PayloadRTCBasePack\";\n})($9f6c30de484136d4$var$IMessageSymbase || ($9f6c30de484136d4$var$IMessageSymbase = {}));\nclass $9f6c30de484136d4$export$2e2bcd8739ae039 extends (0, $639a7a490074f3f2$export$2e2bcd8739ae039) {\n mwse;\n options = {};\n socketId;\n selfSocket = false;\n active = false;\n info;\n rtc;\n peerConnection = false;\n primaryChannel = \"datachannel\";\n constructor(wsts){\n super();\n this.mwse = wsts;\n this.info = new (0, $d7d20b916ab000fe$export$f3bd5f68ae16de)(this);\n this.on(\"pack\", (data)=>{\n if (data.type == \":rtcbase_pack:\") {\n if (this.rtc) return this.rtc.emit(\"input\", data.payload);\n return console.warn(\"Not active rtc but recaived rtc packs\");\n }\n this.emit(\"message\", data);\n });\n }\n createRTC(rtcConfig, rtcServers) {\n this.rtc = new (0, $895bfe3da380c655$export$2e2bcd8739ae039)(rtcConfig, rtcServers);\n this.rtc.peer = this;\n this.rtc.on(\"connected\", ()=>{\n this.peerConnection = true;\n });\n this.rtc.on(\"disconnected\", ()=>{\n this.peerConnection = false;\n });\n this.rtc.on(\"output\", (payload)=>{\n this.send({\n type: \":rtcbase_pack:\",\n payload: payload\n });\n });\n this.rtc.on(\"message\", (payload)=>{\n this.emit(\"pack\", payload);\n });\n return this.rtc;\n }\n setPeerOptions(options) {\n if (typeof options == \"string\") this.setSocketId(options);\n else this.options = options;\n }\n setSocketId(uuid) {\n this.socketId = uuid;\n }\n async metadata() {\n if (this.socketId == \"me\") {\n let result = await this.mwse.EventPooling.request({\n type: \"my/socketid\"\n });\n this.selfSocket = true;\n this.active ||= true;\n this.socketId = result;\n this.emit(\"scope\");\n this.activeScope = true;\n return result;\n }\n }\n async request(pack) {\n if (this.active) return await this.mwse.request(this.socketId, pack);\n }\n equalTo(peer) {\n return this.socketId == peer.socketId;\n }\n async isReachable() {\n return await this.mwse.EventPooling.request({\n type: \"is/reachable\",\n to: this.socketId\n });\n }\n async enablePairAuth() {\n await this.mwse.EventPooling.request({\n type: \"auth/pair-system\",\n value: \"everybody\"\n });\n }\n async disablePairAuth() {\n await this.mwse.EventPooling.request({\n type: \"auth/pair-system\",\n value: \"disable\"\n });\n }\n async requestPair() {\n let { message: message , status: status } = await this.mwse.EventPooling.request({\n type: \"request/pair\",\n to: this.socketId\n });\n if (message == \"ALREADY-PAIRED\" || message == \"ALREADY-REQUESTED\") console.warn(\"Already paired or pair requested\");\n if (status == \"fail\") {\n console.error(\"Request Pair Error\", status, message);\n return false;\n }\n return true;\n }\n async endPair() {\n await this.mwse.EventPooling.request({\n type: \"end/pair\",\n to: this.socketId\n });\n this.forget();\n }\n async acceptPair() {\n let { message: message , status: status } = await this.mwse.EventPooling.request({\n type: \"accept/pair\",\n to: this.socketId\n });\n if (status == \"fail\") {\n console.error(\"Pair Error\", status, message);\n return false;\n }\n return true;\n }\n async rejectPair() {\n let { message: message , status: status } = await this.mwse.EventPooling.request({\n type: \"reject/pair\",\n to: this.socketId\n });\n if (status == \"fail\") {\n console.error(\"Pair Error\", status, message);\n return false;\n }\n return true;\n }\n async getPairedList() {\n let { value: value } = await this.mwse.EventPooling.request({\n type: \"pair/list\",\n to: this.socketId\n });\n return value;\n }\n async send(pack) {\n let isOpenedP2P = this.peerConnection && this.rtc?.active;\n let isOpenedServer = this.mwse.server.connected;\n let sendChannel;\n if (isOpenedP2P && isOpenedServer) {\n if (this.primaryChannel == \"websocket\") sendChannel = \"websocket\";\n else sendChannel = \"datachannel\";\n } else if (isOpenedServer) sendChannel = \"websocket\";\n else sendChannel = \"datachannel\";\n if (sendChannel == \"websocket\") await this.mwse.EventPooling.request({\n type: \"pack/to\",\n pack: pack,\n to: this.socketId\n });\n else this.rtc?.sendMessage(pack);\n }\n async forget() {\n this.mwse.peers.delete(this.socketId);\n this.mwse.pairs.delete(this.socketId);\n }\n}\n\n\n\nclass $59e4377e2cc5e2be$export$f106f681f3286480 {\n room;\n info = {};\n constructor(room){\n this.room = room;\n }\n async fetch(name) {\n if (name) {\n let rinfo = await this.room.mwse.EventPooling.request({\n type: \"room/getinfo\",\n roomId: this.room.roomId,\n name: name\n });\n if (rinfo.status == \"success\") this.info = rinfo.info;\n else console.warn(rinfo.message);\n } else {\n let rinfo = await this.room.mwse.EventPooling.request({\n type: \"peer/info\",\n peer: this.room.roomId\n });\n if (rinfo.status == \"success\") this.info = rinfo.info;\n else console.warn(rinfo.message);\n }\n return this.info;\n }\n set(name, value) {\n this.info[name] = value;\n this.room.mwse.WSTSProtocol.SendOnly({\n type: \"room/setinfo\",\n name: name,\n value: value\n });\n }\n get(name) {\n return name ? this.info[name] : this.info;\n }\n}\n\n\nclass $4415e33c9749fde6$export$2e2bcd8739ae039 extends (0, $639a7a490074f3f2$export$2e2bcd8739ae039) {\n mwse;\n options;\n roomId;\n accessType;\n description;\n joinType;\n name;\n owner;\n peers = new Map();\n info;\n constructor(wsts){\n super();\n this.mwse = wsts;\n this.info = new (0, $59e4377e2cc5e2be$export$f106f681f3286480)(this);\n }\n setRoomOptions(options) {\n if (typeof options == \"string\") this.roomId = options;\n else {\n let defaultOptions = {\n joinType: \"free\",\n ifexistsJoin: true,\n accessType: \"private\",\n notifyActionInvite: true,\n notifyActionJoined: true,\n notifyActionEjected: true,\n autoFetchInfo: true\n };\n Object.assign(defaultOptions, options);\n this.options = defaultOptions;\n }\n }\n setRoomId(uuid) {\n this.roomId = uuid;\n }\n async createRoom(roomOptions) {\n let options = this.options || roomOptions;\n let result = await this.mwse.EventPooling.request({\n type: \"create-room\",\n ...options\n });\n if (result.status == \"fail\") {\n if (result.message == \"ALREADY-EXISTS\" && this.options.ifexistsJoin) return this.join();\n throw new Error(result.message || result.messages);\n } else {\n this.options = {\n ...this.options,\n ...result.room\n };\n this.roomId = result.room.id;\n this.mwse.rooms.set(this.roomId, this);\n }\n }\n async join() {\n let result = await this.mwse.EventPooling.request({\n type: \"joinroom\",\n name: this.options.name,\n credential: this.options.credential,\n autoFetchInfo: this.options.autoFetchInfo || false\n });\n if (result.status == \"fail\") throw new Error(result.message);\n else {\n this.options = {\n ...this.options,\n ...result.room\n };\n if (result.info) this.info.info = result.info;\n this.roomId = result.room.id;\n this.mwse.rooms.set(this.roomId, this);\n }\n }\n async eject() {\n let { type: type } = await this.mwse.EventPooling.request({\n type: \"ejectroom\",\n roomId: this.roomId\n });\n this.peers.clear();\n if (type == \"success\") this.mwse.rooms.delete(this.roomId);\n }\n async send(pack, wom = false) {\n await this.mwse.EventPooling.request({\n type: \"pack/room\",\n pack: pack,\n to: this.roomId,\n wom: wom\n });\n }\n async fetchPeers(filter, onlyNumber = false) {\n if (onlyNumber) {\n let { count: count } = await this.mwse.EventPooling.request({\n type: \"room/peer-count\",\n roomId: this.roomId,\n filter: filter || {}\n });\n return count;\n } else {\n let { status: status , peers: peers } = await this.mwse.EventPooling.request({\n type: \"room-peers\",\n roomId: this.roomId,\n filter: filter || {}\n });\n let cup = [];\n if (status == \"fail\") throw new Error(\"Cant using peers on room\");\n else if (status == \"success\") for (const peerid of peers){\n let peer = this.mwse.peer(peerid);\n cup.push(peer);\n this.peers.set(peerid, peer);\n }\n return cup;\n }\n }\n}\n\n\nclass $023568b0c88ffd16$export$2e2bcd8739ae039 {\n mwse;\n constructor(wsts){\n this.mwse = wsts;\n this.addListener();\n }\n addListener() {\n this.mwse.server?.onRecaivePack((pack)=>{\n this.PackAnalyze(pack);\n });\n }\n SendRaw(pack) {\n this.mwse.server.tranferToServer(pack);\n }\n SendOnly(pack) {\n this.mwse.server.tranferToServer([\n pack,\n \"R\"\n ]);\n }\n SendRequest(pack, id) {\n this.mwse.server.tranferToServer([\n pack,\n id,\n \"R\"\n ]);\n }\n StartStream(pack, id) {\n this.mwse.server.tranferToServer([\n pack,\n id,\n \"S\"\n ]);\n }\n PackAnalyze(data) {\n let [payload, id, action] = data;\n if (typeof id === \"number\") {\n let callback = this.mwse.EventPooling.events.get(id);\n if (callback) {\n callback[0](payload, action);\n switch(action){\n case \"E\":\n this.mwse.EventPooling.events.delete(id);\n break;\n case \"S\":\n default:\n break;\n }\n } else console.warn(\"Missing event sended from server\");\n } else {\n let signals = this.mwse.EventPooling.signals.get(id);\n if (signals) for (const callback of signals)callback(payload);\n else console.warn(\"Missing event sended from server\");\n }\n }\n}\n\n\nclass $1ed8c0121ddb51e7$export$2e2bcd8739ae039 extends (0, $639a7a490074f3f2$export$2e2bcd8739ae039) {\n static rtc;\n server;\n WSTSProtocol;\n EventPooling;\n rooms = new Map();\n pairs = new Map();\n peers = new Map();\n virtualPressure;\n me;\n constructor(options){\n super();\n this.server = new (0, $201ddc79d766b86c$export$98b66c25bb38499d)(options);\n this.WSTSProtocol = new (0, $023568b0c88ffd16$export$2e2bcd8739ae039)(this);\n this.EventPooling = new (0, $7bc29f3852fca8a1$export$2e2bcd8739ae039)(this);\n this.virtualPressure = new (0, $707287ab76ae8d6a$export$cd59d3e68ede65a1)(this);\n this.server.connect();\n this.me = new (0, $9f6c30de484136d4$export$2e2bcd8739ae039)(this);\n this.me.scope(()=>{\n this.peers.set(\"me\", this.me);\n this.peers.set(this.me.socketId, this.me);\n });\n this.server.onActive(async ()=>{\n this.me.setSocketId(\"me\");\n await this.me.metadata();\n this.emit(\"scope\");\n this.activeScope = true;\n });\n this.packMessagingSystem();\n }\n async request(peerId, pack) {\n let { pack: answer } = await this.EventPooling.request({\n type: \"request/to\",\n to: peerId,\n pack: pack\n });\n return answer;\n }\n async response(peerId, requestId, pack) {\n this.WSTSProtocol.SendOnly({\n type: \"response/to\",\n to: peerId,\n pack: pack,\n id: requestId\n });\n }\n packMessagingSystem() {\n this.EventPooling.signal(\"pack\", (payload)=>{\n let { from: from , pack: pack } = payload;\n this.peer(from, true).emit(\"pack\", pack);\n });\n this.EventPooling.signal(\"request\", (payload)=>{\n let { from: from , pack: pack , id: id } = payload;\n let scope = {\n body: pack,\n response: (pack)=>{\n this.response(from, id, pack);\n },\n peer: this.peer(from, true)\n };\n this.peer(from, true).emit(\"request\", scope);\n this.peer(\"me\").emit(\"request\", scope);\n });\n this.EventPooling.signal(\"pack/room\", (payload)=>{\n let { from: from , pack: pack } = payload;\n this.room(from).emit(\"message\", pack);\n });\n this.EventPooling.signal(\"room/joined\", (payload)=>{\n let { id: id , roomid: roomid } = payload;\n let room = this.room(roomid);\n let peer = this.peer(id, true);\n room.peers.set(peer.socketId, peer);\n room.emit(\"join\", peer);\n });\n this.EventPooling.signal(\"room/ejected\", (payload)=>{\n let { id: id , roomid: roomid } = payload;\n let room = this.room(roomid);\n let peer = this.peer(id);\n room.peers.delete(peer.socketId);\n room.emit(\"eject\", peer);\n });\n this.EventPooling.signal(\"room/closed\", (payload)=>{\n let { roomid: roomid } = payload;\n let room = this.room(roomid);\n room.peers.clear();\n room.emit(\"close\");\n this.rooms.delete(roomid);\n });\n this.EventPooling.signal(\"pair/info\", (payload)=>{\n let { from: from , name: name , value: value } = payload;\n let peer = this.peer(from);\n peer.info.info[name] = value;\n peer.emit(\"info\", name, value);\n });\n this.EventPooling.signal(\"request/pair\", (payload)=>{\n let { from: from , info: info } = payload;\n let peer = this.peer(from);\n peer.info.info = info;\n peer.emit(\"request/pair\", peer);\n this.peer(\"me\").emit(\"request/pair\", peer);\n });\n this.EventPooling.signal(\"accepted/pair\", (payload)=>{\n let { from: from , info: info } = payload;\n let peer = this.peer(from);\n peer.info.info = info;\n peer.emit(\"accepted/pair\", peer);\n this.peer(\"me\").emit(\"accepted/pairr\", peer);\n });\n this.EventPooling.signal(\"end/pair\", (payload)=>{\n let { from: from , info: info } = payload;\n let peer = this.peer(from);\n peer.emit(\"endPair\", info);\n this.peer(\"me\").emit(\"endPair\", from, info);\n });\n }\n room(options) {\n if (typeof options == \"string\") {\n if (this.rooms.has(options)) return this.rooms.get(options);\n }\n let room = new (0, $4415e33c9749fde6$export$2e2bcd8739ae039)(this);\n room.setRoomOptions(options);\n // this.rooms.set(room.roomId as string, room);\n this.emit(\"room\");\n return room;\n }\n peer(options, isActive = false) {\n if (typeof options == \"string\") {\n if (this.peers.has(options)) return this.peers.get(options);\n if (this.pairs.has(options)) return this.pairs.get(options);\n }\n let peer = new (0, $9f6c30de484136d4$export$2e2bcd8739ae039)(this);\n peer.setPeerOptions(options);\n peer.active = isActive;\n this.peers.set(peer.socketId, peer);\n this.emit(\"peer\", peer);\n return peer;\n }\n}\nwindow.MWSE = $1ed8c0121ddb51e7$export$2e2bcd8739ae039;\n\n})();\n//# sourceMappingURL=index.js.map\n","import {Connection,IConnection} from \"./Connection\";\nimport EventPool from \"./EventPool\";\nimport EventTarget from \"./EventTarget\";\nimport { IPPressure } from \"./IPPressure\";\nimport Peer from \"./Peer\";\nimport Room, { IRoomOptions } from \"./Room\";\nimport WSTSProtocol, { Message } from \"./WSTSProtocol\";\nimport WebRTC from \"./WebRTC\";\nexport default class MWSE extends EventTarget {\n public static rtc : WebRTC;\n public server! : Connection;\n public WSTSProtocol! : WSTSProtocol;\n public EventPooling! : EventPool;\n public rooms : Map = new Map();\n public pairs : Map = new Map();\n public peers : Map = new Map();\n public virtualPressure : IPPressure;\n public me! : Peer;\n constructor(options: IConnection){\n super();\n this.server = new Connection(options);\n this.WSTSProtocol = new WSTSProtocol(this);\n this.EventPooling = new EventPool(this);\n this.virtualPressure = new IPPressure(this);\n this.server.connect();\n this.me = new Peer(this);\n this.me.scope(()=>{\n this.peers.set('me', this.me);\n this.peers.set(this.me.socketId as string, this.me);\n })\n this.server.onActive(async ()=>{\n this.me.setSocketId('me');\n await this.me.metadata();\n this.emit('scope');\n this.activeScope = true;\n });\n this.packMessagingSystem();\n }\n public async request(peerId: string, pack:Message)\n {\n let {pack:answer} = await this.EventPooling.request({\n type: 'request/to',\n to: peerId,\n pack\n });\n return answer;\n }\n public async response(peerId: string, requestId:number, pack:Message)\n {\n this.WSTSProtocol.SendOnly({\n type: 'response/to',\n to: peerId,\n pack,\n id: requestId\n })\n }\n private packMessagingSystem()\n {\n this.EventPooling.signal('pack',(payload : {from:string,pack:any}) => {\n let {from,pack} = payload;\n this.peer(from, true).emit('pack', pack);\n })\n this.EventPooling.signal('request',(payload : {from:string,pack:any,id:number}) => {\n let {from,pack, id} = payload;\n let scope = {\n body: pack,\n response: (pack: Message) => {\n this.response(from, id, pack);\n },\n peer: this.peer(from, true)\n };\n this.peer(from, true).emit('request', scope);\n this.peer('me').emit('request', scope);\n })\n this.EventPooling.signal('pack/room',(payload : {from:string,pack:any}) => {\n let {from,pack} = payload;\n this.room(from).emit('message', pack);\n })\n this.EventPooling.signal('room/joined',(payload : {id:string,roomid:any,ownerid:string}) => {\n let {id,roomid} = payload;\n let room = this.room(roomid);\n let peer = this.peer(id, true);\n room.peers.set(peer.socketId as string, peer);\n room.emit('join', peer);\n })\n this.EventPooling.signal('room/ejected',(payload : {id:string,roomid:any,ownerid:string}) => {\n let {id,roomid} = payload;\n let room = this.room(roomid);\n let peer = this.peer(id);\n room.peers.delete(peer.socketId as string);\n room.emit('eject', peer);\n })\n this.EventPooling.signal('room/closed',(payload : {roomid:any}) => {\n let {roomid} = payload;\n let room = this.room(roomid);\n room.peers.clear();\n room.emit('close');\n this.rooms.delete(roomid);\n })\n this.EventPooling.signal(\"pair/info\", (payload : {from : string,name: string, value: string | number | boolean}) => {\n let {from, name, value} = payload;\n let peer = this.peer(from);\n peer.info.info[name] = value;\n peer.emit(\"info\", name, value);\n })\n this.EventPooling.signal(\"request/pair\", (payload : {from : string,info: any}) => {\n let {from, info} = payload;\n let peer = this.peer(from);\n peer.info.info = info;\n peer.emit(\"request/pair\", peer);\n this.peer('me').emit('request/pair', peer);\n })\n this.EventPooling.signal(\"accepted/pair\", (payload : {from : string,info: any}) => {\n let {from, info} = payload;\n let peer = this.peer(from);\n peer.info.info = info;\n peer.emit(\"accepted/pair\", peer);\n this.peer('me').emit('accepted/pairr', peer);\n })\n this.EventPooling.signal(\"end/pair\", (payload : {from : string,info: any}) => {\n let {from, info} = payload;\n let peer = this.peer(from);\n peer.emit(\"endPair\", info);\n this.peer('me').emit('endPair', from, info);\n })\n }\n public room(options: IRoomOptions | string) : Room\n {\n if(typeof options == \"string\")\n {\n if(this.rooms.has(options))\n {\n return this.rooms.get(options) as Room\n }\n }\n let room = new Room(this);\n room.setRoomOptions(options);\n // this.rooms.set(room.roomId as string, room);\n this.emit('room');\n return room;\n }\n public peer(options: string | IRoomOptions, isActive = false) : Peer\n {\n if(typeof options == \"string\")\n {\n if(this.peers.has(options))\n {\n return this.peers.get(options) as Peer\n }\n if(this.pairs.has(options))\n {\n return this.pairs.get(options) as Peer\n }\n }\n let peer = new Peer(this);\n peer.setPeerOptions(options);\n peer.active = isActive;\n this.peers.set(peer.socketId as string, peer);\n this.emit('peer', peer);\n return peer;\n }\n};\n\ndeclare global {\n interface Window {\n MWSE: any;\n }\n}\n\nwindow.MWSE = MWSE;","export interface IConnection{\n endpoint: string;\n autoReconnect?: boolean | {\n timeout: number;\n }\n}\nexport class Connection\n{\n public ws! : WebSocket;\n public endpoint : URL;\n public autoPair : boolean = false;\n public connected : boolean = false;\n\n public autoReconnect : boolean = true;\n public autoReconnectTimeout : number = 3000;\n public autoReconnectTimer? : number;\n constructor(options: IConnection){\n this.endpoint = new URL(options.endpoint);\n if(typeof options.autoReconnect == \"boolean\")\n {\n this.autoReconnect = true;\n }else if(options.autoReconnect)\n {\n this.autoReconnect = true;\n this.autoReconnectTimeout = options.autoReconnect.timeout;\n }\n }\n public connect()\n {\n if(this.autoReconnectTimer)\n {\n clearTimeout(this.autoReconnectTimer)\n };\n this.ws = new WebSocket(this.endpoint.href);\n this.addWSEvents();\n }\n public disconnect()\n {\n this.ws.close();\n }\n public addWSEvents()\n {\n this.ws.addEventListener(\"open\", () => this.eventOpen());\n this.ws.addEventListener(\"close\", () => this.eventClose());\n this.ws.addEventListener(\"error\", () => this.eventError());\n this.ws.addEventListener(\"message\", ({data}) => this.eventMessage(data as string | ArrayBuffer));\n }\n private eventOpen()\n {\n this.connected = true;\n for (const callback of this.activeConnectionEvent) {\n callback(void 0);\n }\n }\n private eventClose()\n {\n this.connected = false;\n if(this.autoReconnect)\n {\n this.autoReconnectTimer = setTimeout(this.connect, this.autoReconnectTimeout)\n }\n }\n private eventError()\n {\n this.connected = false;\n }\n private recaivePackEvent : ((data:any) => any)[] = [];\n public onRecaivePack(func:(data:any) => any)\n {\n this.recaivePackEvent.push(func);\n }\n private activeConnectionEvent : Function[] = [];\n public onActive(func:Function)\n {\n if(this.connected)\n {\n func()\n }else{\n this.activeConnectionEvent.push(func);\n }\n }\n private eventMessage(data: string | ArrayBuffer)\n {\n if(typeof data == \"string\")\n {\n let $data = JSON.parse(data);\n for (const callback of this.recaivePackEvent) {\n callback($data);\n }\n }\n }\n public tranferToServer(data:any)\n {\n if(this.connected)\n {\n this.ws.send(JSON.stringify(data));\n }\n }\n}","import MWSE from \"./index\";\nimport { Message } from \"./WSTSProtocol\";\n\nexport default class EventPool\n{\n public wsts : MWSE;\n public events : Map = new Map();\n public signals : Map = new Map();\n\n public requests : Map = new Map();\n\n public count = 0;\n constructor(wsts:MWSE){\n this.wsts = wsts;\n }\n public request(msg: Message) : Promise\n {\n return new Promise((ok,rej) => {\n let id = ++this.count;\n this.wsts.WSTSProtocol.SendRequest(msg, id);\n this.events.set(id,[\n (data:any) => {\n ok(data);\n },\n (data:any) => {\n rej(data);\n }\n ]);\n })\n }\n public stream(msg: Message, callback: Function)\n {\n let id = ++this.count;\n this.wsts.WSTSProtocol.StartStream(msg, id);\n this.events.set(id,[\n (data:any) => {\n callback(data);\n },\n () => { }\n ]);\n }\n public signal(event: string, callback: Function)\n {\n let T = this.signals.get(event);\n if(!T)\n {\n this.signals.set(event, [callback]);\n }else{\n T.push(callback);\n }\n }\n}","export default class EventTarget\n{\n private events : {[key:string]:Function[]} = {};\n public emit(eventName :string, ...args:any[])\n {\n if(this.events[eventName])\n {\n for (const callback of this.events[eventName]) {\n callback(...args);\n }\n }\n }\n public on(eventName :string, callback:Function)\n {\n if(this.events[eventName])\n {\n this.events[eventName].push(callback)\n }else{\n this.events[eventName] = [callback];\n }\n }\n public activeScope : boolean = false;\n scope(f:Function)\n {\n if(this.activeScope)\n {\n f()\n }else{\n this.on('scope', f)\n }\n }\n}","import MWSE from \"frontend\";\n\nexport class IPPressure\n{\n public mwse : MWSE;\n public APNumber? : number;\n public APShortCode? : string;\n public APIPAddress? : string;\n constructor(mwse : MWSE){\n this.mwse = mwse;\n };\n public async allocAPIPAddress()\n {\n let {status,ip} = await this.mwse.EventPooling.request({\n type: 'alloc/APIPAddress'\n }) as {\n status:\"fail\"|\"success\",\n ip?:string\n };\n if(status == 'success')\n {\n this.APIPAddress = ip;\n return ip;\n }else{\n throw new Error(\"Error Allocated Access Point IP Address\");\n }\n }\n public async allocAPNumber()\n {\n let {status,number} = await this.mwse.EventPooling.request({\n type: 'alloc/APNumber'\n }) as {\n status:\"fail\"|\"success\",\n number?:number\n };\n if(status == 'success')\n {\n this.APNumber = number;\n return number;\n }else{\n throw new Error(\"Error Allocated Access Point Number\");\n }\n }\n public async allocAPShortCode()\n {\n let {status,code} = await this.mwse.EventPooling.request({\n type: 'alloc/APShortCode'\n }) as {\n status:\"fail\"|\"success\",\n code?:string\n };\n if(status == 'success')\n {\n this.APShortCode = code;\n return code;\n }else{\n throw new Error(\"Error Allocated Access Point Short Code\");\n }\n }\n public async reallocAPIPAddress()\n {\n let {status,ip} = await this.mwse.EventPooling.request({\n type: 'realloc/APIPAddress'\n }) as {\n status:\"fail\"|\"success\",\n ip?:string\n };\n if(status == 'success')\n {\n this.APIPAddress = ip;\n return ip;\n }else{\n throw new Error(\"Error Reallocated Access Point IP Address\");\n }\n }\n public async reallocAPNumber()\n {\n let {status,number} = await this.mwse.EventPooling.request({\n type: 'realloc/APNumber'\n }) as {\n status:\"fail\"|\"success\",\n number?:number\n };\n if(status == 'success')\n {\n this.APNumber = number;\n return number;\n }else{\n throw new Error(\"Error Reallocated Access Point Number\");\n }\n }\n public async reallocAPShortCode()\n {\n let {status,code} = await this.mwse.EventPooling.request({\n type: 'realloc/APShortCode'\n }) as {\n status:\"fail\"|\"success\",\n code?:string\n };\n if(status == 'success')\n {\n this.APShortCode = code;\n return code;\n }else{\n throw new Error(\"Error Reallocated Access Point Short Code\");\n }\n }\n public async releaseAPIPAddress()\n {\n let {status} = await this.mwse.EventPooling.request({\n type: 'release/APIPAddress'\n }) as {\n status:\"fail\"|\"success\",\n };\n if(status == 'success')\n {\n this.APIPAddress = undefined;\n }else{\n throw new Error(\"Error release Access Point IP Address\");\n }\n }\n public async releaseAPNumber()\n {\n let {status} = await this.mwse.EventPooling.request({\n type: 'release/APNumber'\n }) as {\n status:\"fail\"|\"success\",\n };\n if(status == 'success')\n {\n this.APNumber = undefined;\n }else{\n throw new Error(\"Error release Access Point Number\");\n }\n }\n public async releaseAPShortCode()\n {\n let {status} = await this.mwse.EventPooling.request({\n type: 'release/APShortCode'\n }) as {\n status:string\n };\n if(status == 'success')\n {\n this.APShortCode = undefined;\n }else{\n throw new Error(\"Error release Access Point Short Code\");\n }\n }\n public async queryAPIPAddress(ip:string)\n {\n let {status,socket} = await this.mwse.EventPooling.request({\n type: 'whois/APIPAddress',\n whois: ip\n }) as {\n status:\"fail\"|\"success\",\n socket?:string\n };\n if(status == \"success\")\n {\n return socket;\n }else{\n return null;\n }\n }\n public async queryAPNumber(number:number)\n {\n let {status,socket} = await this.mwse.EventPooling.request({\n type: 'whois/APNumber',\n whois: number\n }) as {\n status:\"fail\"|\"success\",\n socket?:string\n };\n if(status == \"success\")\n {\n return socket;\n }else{\n return null;\n }\n }\n public async queryAPShortCode(code:string)\n {\n let {status,socket} = await this.mwse.EventPooling.request({\n type: 'whois/APShortCode',\n whois: code\n }) as {\n status:\"fail\"|\"success\",\n socket?:string\n };\n if(status == \"success\")\n {\n return socket;\n }else{\n return null;\n }\n }\n}","import EventTarget from \"./EventTarget\";\nimport { PeerInfo } from \"./PeerInfo\";\nimport WebRTC from \"./WebRTC\";\nimport MWSE from \"./index\";\n\ninterface IPeerOptions{\n\n};\n\nenum IMessageSymbase\n{\n PayloadMessagePack = -12873.54,\n PayloadRTCBasePack = -12884.54\n}\n\n\nexport default class Peer extends EventTarget\n{\n public mwse : MWSE;\n public options : IPeerOptions = {};\n public socketId? : string;\n public selfSocket : boolean = false;\n public active : boolean = false;\n public info : PeerInfo;\n public rtc? : WebRTC;\n public peerConnection : boolean = false;\n public primaryChannel : \"websocket\" | \"datachannel\" = \"datachannel\";\n constructor(wsts:MWSE){\n super();\n this.mwse = wsts;\n this.info = new PeerInfo(this);\n\n this.on('pack',(data:{type?:string,action?:IMessageSymbase,payload?:any}) => {\n if(data.type == ':rtcbase_pack:')\n {\n if(this.rtc)\n {\n return this.rtc.emit(\"input\", data.payload)\n }\n return console.warn(\"Not active rtc but recaived rtc packs\")\n };\n this.emit(\"message\", data);\n });\n }\n public createRTC(rtcConfig?: RTCConfiguration | undefined, rtcServers?: RTCIceServer[] | undefined) : WebRTC\n {\n this.rtc = new WebRTC(rtcConfig,rtcServers);\n this.rtc.peer = this;\n this.rtc.on(\"connected\", () => {\n this.peerConnection = true;\n });\n this.rtc.on('disconnected', () => {\n this.peerConnection = false;\n })\n this.rtc.on(\"output\",(payload:object) => {\n this.send({\n type: ':rtcbase_pack:',\n payload: payload\n })\n });\n this.rtc.on(\"message\",(payload:object) => {\n this.emit(\"pack\",payload);\n });\n return this.rtc;\n }\n public setPeerOptions(options: string | IPeerOptions){\n if(typeof options == \"string\")\n {\n this.setSocketId(options)\n }else{\n this.options = options;\n }\n }\n public setSocketId(uuid: string){\n this.socketId = uuid;\n }\n async metadata() : Promise\n {\n if(this.socketId == 'me')\n {\n let result = await this.mwse.EventPooling.request({\n type:'my/socketid'\n });\n this.selfSocket = true;\n this.active ||= true;\n this.socketId = result;\n this.emit('scope');\n this.activeScope = true;\n return result;\n }\n };\n \n async request(pack:any){\n if(this.active)\n {\n return await this.mwse.request(this.socketId as string, pack);\n }\n };\n equalTo(peer : Peer | {socketId: string})\n {\n return this.socketId == peer.socketId;\n }\n async isReachable()\n {\n return await this.mwse.EventPooling.request({\n type:'is/reachable',\n to: this.socketId\n });\n }\n async enablePairAuth(){\n await this.mwse.EventPooling.request({\n type:'auth/pair-system',\n value: 'everybody'\n });\n }\n async disablePairAuth(){\n await this.mwse.EventPooling.request({\n type:'auth/pair-system',\n value: 'disable'\n });\n }\n async requestPair()\n {\n let {message,status} = await this.mwse.EventPooling.request({\n type:'request/pair',\n to: this.socketId\n });\n if(\n message == \"ALREADY-PAIRED\" ||\n message == \"ALREADY-REQUESTED\"\n )\n {\n console.warn(\"Already paired or pair requested\")\n };\n if(status == \"fail\")\n {\n console.error(\"Request Pair Error\",status, message);\n return false;\n }\n return true;\n }\n async endPair()\n {\n await this.mwse.EventPooling.request({\n type:'end/pair',\n to: this.socketId\n });\n this.forget();\n }\n async acceptPair()\n {\n let {message,status} = await this.mwse.EventPooling.request({\n type:'accept/pair',\n to: this.socketId\n });\n if(status == \"fail\")\n {\n console.error(\"Pair Error\",status, message);\n return false;\n }\n return true;\n }\n async rejectPair()\n {\n let {message,status} = await this.mwse.EventPooling.request({\n type:'reject/pair',\n to: this.socketId\n });\n if(status == \"fail\")\n {\n console.error(\"Pair Error\",status, message);\n return false;\n }\n return true;\n }\n async getPairedList() : Promise\n {\n let {value} = await this.mwse.EventPooling.request({\n type:'pair/list',\n to: this.socketId\n });\n return value;\n }\n async send(pack: any){\n let isOpenedP2P = this.peerConnection && this.rtc?.active;\n let isOpenedServer = this.mwse.server.connected;\n let sendChannel : \"websocket\" | \"datachannel\";\n if(isOpenedP2P && isOpenedServer)\n {\n if(this.primaryChannel == \"websocket\")\n {\n sendChannel = \"websocket\"\n }else\n {\n sendChannel = \"datachannel\"\n }\n }else if(isOpenedServer){\n sendChannel = \"websocket\"\n }else{\n sendChannel = \"datachannel\"\n }\n\n if(sendChannel == \"websocket\")\n {\n await this.mwse.EventPooling.request({\n type:'pack/to',\n pack,\n to: this.socketId\n });\n }else{\n this.rtc?.sendMessage(pack)\n }\n }\n async forget(){\n this.mwse.peers.delete(this.socketId as string);\n this.mwse.pairs.delete(this.socketId as string);\n }\n} ","import Peer from \"./Peer\";\n\nexport class PeerInfo\n{\n public peer : Peer;\n public info : {[key:string]: any} = {};\n constructor(mwse : Peer){\n this.peer = mwse;\n };\n public async fetch(name?:string)\n {\n if(name)\n {\n let rinfo = await this.peer.mwse.EventPooling.request(({\n type: \"peer/info\",\n peer: this.peer.socketId,\n name\n }));\n if(rinfo.status == \"success\")\n {\n this.info = rinfo.info;\n }else console.warn(rinfo.message);\n }else{\n let rinfo = await this.peer.mwse.EventPooling.request(({\n type: \"peer/info\",\n peer: this.peer.socketId\n }));\n if(rinfo.status == \"success\")\n {\n this.info = rinfo.info;\n }else console.warn(rinfo.message);\n };\n return this.info;\n }\n public set(name: string, value: string | number)\n {\n this.info[name] = value;\n this.peer.mwse.WSTSProtocol.SendOnly({\n type: \"auth/info\",\n name,\n value\n });\n }\n public get(name?:string)\n {\n return name ? this.info[name] : this.info;\n }\n}","import P2PFileSender from \"./P2PFileSender\";\nimport Peer from \"./Peer\";\nimport \"webrtc-adapter\";\ninterface TransferStreamInfo\n{\n senders : RTCRtpSender[];\n recaivers : RTCRtpReceiver[];\n stream:MediaStream | undefined;\n id:string;\n name:string;\n}\n\nexport default class WebRTC\n{\n public static channels : Map = new Map();\n public static requireGC : boolean = false;\n public id : any;\n public active : boolean = false;\n public connectionStatus : \"closed\" | \"connected\" | \"connecting\" | \"disconnected\" | \"failed\" | \"new\" = \"new\";\n public iceStatus : \"checking\" | \"closed\" | \"completed\" | \"connected\" | \"disconnected\" | \"failed\" | \"new\" = \"new\";\n public gatheringStatus : \"complete\" | \"gathering\" | \"new\" = \"new\";\n public signalingStatus : \"\" | \"closed\" | \"have-local-offer\" | \"have-local-pranswer\" | \"have-remote-offer\" | \"have-remote-pranswer\" | \"stable\" = \"\"\n public rtc! : RTCPeerConnection;\n public recaivingStream : Map = new Map();\n public sendingStream : Map = new Map();\n public events : { [eventname:string]: Function[] } = {};\n public channel : RTCDataChannel | undefined;\n\n public static defaultRTCConfig : RTCConfiguration = {\n iceCandidatePoolSize: 0,\n iceTransportPolicy:\"all\",\n rtcpMuxPolicy:\"require\",\n };\n\n\n public static defaultICEServers : RTCIceServer[] = [{\n urls: \"stun:stun.l.google.com:19302\"\n },{\n urls: \"stun:stun1.l.google.com:19302\"\n },{\n urls: \"stun:stun2.l.google.com:19302\"\n },{\n urls: \"stun:stun3.l.google.com:19302\"\n },{\n urls: \"stun:stun4.l.google.com:19302\"\n }];\n\n public peer? : Peer;\n\n public FileTransportChannel? : P2PFileSender;\n\n constructor(\n rtcConfig?: RTCConfiguration,\n rtcServers?: RTCIceServer[]\n )\n {\n let config : any = {};\n\n if(rtcConfig)\n {\n Object.assign(\n config,\n WebRTC.defaultRTCConfig,\n rtcConfig\n )\n }else{\n Object.assign(\n config,\n WebRTC.defaultRTCConfig\n )\n }\n\n config.iceServers = rtcServers || WebRTC.defaultICEServers;\n\n this.rtc = new RTCPeerConnection(config as RTCConfiguration);\n this.rtc.addEventListener(\"connectionstatechange\",()=>{\n this.eventConnectionState();\n })\n this.rtc.addEventListener(\"icecandidate\",(...args)=>{\n this.eventIcecandidate(...args);\n })\n this.rtc.addEventListener(\"iceconnectionstatechange\",()=>{\n this.eventICEConnectionState();\n })\n this.rtc.addEventListener(\"icegatheringstatechange\",()=>{\n this.eventICEGatherinState();\n })\n this.rtc.addEventListener(\"negotiationneeded\",()=>{\n this.eventNogationNeeded();\n })\n this.rtc.addEventListener(\"signalingstatechange\",()=>{\n this.eventSignalingState();\n })\n this.rtc.addEventListener(\"track\",(...args)=>{\n this.eventTrack(...args);\n })\n this.rtc.addEventListener(\"datachannel\",(...args)=>{\n this.eventDatachannel(...args);\n })\n this.on('input',async (data:{[key:string]:any})=>{\n switch(data.type)\n {\n case \"icecandidate\":{\n await this.rtc.addIceCandidate(new RTCIceCandidate(data.value));\n break;\n }\n case \"offer\":{\n await this.rtc.setRemoteDescription(new RTCSessionDescription(data.value));\n let answer = await this.rtc.createAnswer({\n offerToReceiveAudio: true,\n offerToReceiveVideo: true\n })\n await this.rtc.setLocalDescription(answer);\n this.send({\n type: 'answer',\n value: answer\n });\n break;\n }\n case \"answer\":{\n await this.rtc.setRemoteDescription(new RTCSessionDescription(data.value))\n break;\n }\n case \"streamInfo\":{\n let {id,value} = data;\n let streamInfo = this.recaivingStream.get(id);\n if(!streamInfo)\n {\n this.recaivingStream.set(id,value as TransferStreamInfo);\n }else{\n this.recaivingStream.set(id,{\n ...streamInfo,\n ...value\n } as TransferStreamInfo);\n }\n this.send({\n type:'streamAccept',\n id\n })\n break;\n }\n case \"streamRemoved\":{\n let {id} = data;\n this.emit('stream:stopped', this.recaivingStream.get(id));\n this.sendingStream.delete(id);\n break;\n }\n case \"streamAccept\":{\n let {id} = data;\n let sendingStream = this.sendingStream.get(id) as TransferStreamInfo;\n let senders = [];\n if(sendingStream && sendingStream.stream)\n {\n for (const track of sendingStream.stream.getTracks()) {\n senders.push(this.rtc.addTrack(track, sendingStream.stream));\n };\n sendingStream.senders = senders;\n }\n break;\n }\n case \"message\":{\n this.emit('message', data.payload);\n break;\n }\n }\n })\n }\n public addEventListener(event:string,callback: Function){\n (this.events[event] || (this.events[event]=[])).push(callback);\n };\n public on(event:string,callback: Function){\n this.addEventListener(event, callback)\n };\n public async dispatch(event:string,...args:any[]) : Promise {\n if(this.events[event])\n {\n for (const callback of this.events[event])\n {\n await callback(...args)\n }\n }\n }\n public async emit(event:string,...args:any[]) : Promise {\n await this.dispatch(event, ...args)\n }\n public connect()\n {\n if(!this.channel)\n {\n this.createDefaultDataChannel();\n }\n }\n public sendMessage(data: any)\n {\n this.send({\n type: 'message',\n payload: data\n });\n }\n public createDefaultDataChannel()\n {\n let dt = this.rtc.createDataChannel(':default:',{\n ordered: true\n });\n dt.addEventListener(\"open\",()=>{\n this.channel = dt;\n WebRTC.channels.set(this.id, this);\n this.active = true;\n });\n dt.addEventListener(\"message\",({data})=>{\n let pack = JSON.parse(data);\n this.emit('input', pack);\n })\n dt.addEventListener(\"close\",()=>{\n this.channel = undefined;\n this.active = false;\n })\n }\n public destroy()\n {\n this.active = false;\n if(this.channel)\n {\n this.channel.close();\n this.channel = undefined;\n }\n if(this.rtc)\n {\n this.rtc.close();\n //this.rtc = undefined;\n };\n this.emit('disconnected');\n WebRTC.channels.delete(this.id);\n }\n public eventDatachannel(event: RTCDataChannelEvent)\n {\n if(event.channel.label == ':default:'){\n WebRTC.channels.set(this.id, this);\n this.channel = event.channel;\n this.active = true;\n event.channel.addEventListener(\"message\",({data})=>{\n let pack = JSON.parse(data);\n this.emit('input', pack);\n })\n event.channel.addEventListener(\"close\",()=>{\n this.channel = undefined;\n WebRTC.channels.delete(this.id);\n WebRTC.requireGC = true;\n })\n }else{\n this.emit('datachannel', event.channel);\n }\n }\n public send(data:object)\n {\n if(this.channel?.readyState == \"open\")\n {\n this.channel.send(JSON.stringify(data));\n }else{\n this.emit('output', data);\n }\n }\n public eventConnectionState()\n {\n this.connectionStatus = this.rtc.connectionState;\n if(this.connectionStatus == 'connected')\n {\n if(this.active == false)\n {\n this.emit('connected');\n }\n };\n if(this.connectionStatus == 'failed' || this.connectionStatus == \"disconnected\" || this.connectionStatus == \"closed\")\n {\n if(this.active)\n {\n this.destroy();\n }\n }\n }\n public eventIcecandidate(event: RTCPeerConnectionIceEvent)\n {\n if(event.candidate)\n {\n this.send({\n type:'icecandidate',\n value: event.candidate\n })\n }\n }\n public eventICEConnectionState()\n {\n this.iceStatus = this.rtc.iceConnectionState;\n }\n public eventICEGatherinState()\n {\n this.gatheringStatus = this.rtc.iceGatheringState;\n }\n public async eventNogationNeeded()\n {\n let offer = await this.rtc.createOffer({\n iceRestart: true,\n offerToReceiveAudio: true,\n offerToReceiveVideo: true\n });\n await this.rtc.setLocalDescription(offer);\n this.send({\n type: 'offer',\n value: offer\n });\n }\n public eventSignalingState()\n {\n this.signalingStatus = this.rtc.signalingState;\n }\n public eventTrack(event: RTCTrackEvent)\n {\n let rtpRecaiver = event.receiver;\n if(event.streams.length)\n {\n for (const stream of event.streams) {\n let streamInfo = this.recaivingStream.get(stream.id) as TransferStreamInfo;\n (streamInfo.recaivers || (streamInfo.recaivers = [])).push(rtpRecaiver);\n if((this.recaivingStream.get(stream.id) as {stream : MediaStream | undefined}).stream == null)\n {\n streamInfo.stream = stream;\n this.emit('stream:added', this.recaivingStream.get(stream.id));\n }else{\n streamInfo.stream = stream;\n }\n }\n }\n }\n public sendStream(stream:MediaStream,name:string,info:{[key:string]:any}){\n this.send({\n type: 'streamInfo',\n id: stream.id,\n value: {\n ...info,\n name: name\n }\n });\n this.sendingStream.set(stream.id,{\n ...info,\n id:stream.id,\n name: name,\n stream\n } as TransferStreamInfo);\n };\n public stopStream(_stream:MediaStream){\n if(this.connectionStatus != 'connected'){\n return\n }\n if(this.sendingStream.has(_stream.id))\n {\n let {stream} = this.sendingStream.get(_stream.id) as {stream:MediaStream};\n \n for (const track of stream.getTracks()) {\n for (const RTCPSender of this.rtc.getSenders()) {\n if(RTCPSender.track?.id == track.id)\n {\n this.rtc.removeTrack(RTCPSender);\n }\n }\n }\n \n this.send({\n type: 'streamRemoved',\n id: stream.id\n });\n this.sendingStream.delete(_stream.id)\n }\n }\n public stopAllStreams()\n {\n if(this.connectionStatus != 'connected'){\n return\n }\n for (const [, {stream}] of this.sendingStream) {\n if(stream == undefined)\n {\n continue;\n }\n for (const track of stream.getTracks()) {\n for (const RTCPSender of this.rtc.getSenders()) {\n if(RTCPSender.track?.id == track.id)\n {\n this.rtc.removeTrack(RTCPSender);\n }\n }\n }\n this.send({\n type: 'streamRemoved',\n id: stream.id\n });\n };\n \n this.sendingStream.clear();\n }\n public async SendFile(file:File, meta: object)\n {\n if(!this.peer)\n {\n throw new Error(\"Peer is not ready\");\n }\n this.FileTransportChannel = new P2PFileSender(this, this.peer);\n\n await this.FileTransportChannel.SendFile(file, meta);\n }\n public async RecaiveFile(\n chnlCount:number,\n filemeta: {\n name: string;\n type: string;\n },\n totalSize: number\n ) : Promise\n {\n if(!this.peer)\n {\n throw new Error(\"Peer is not ready\");\n }\n this.FileTransportChannel = new P2PFileSender(this, this.peer);\n\n return await new Promise(recaivedFile => {\n if(this.FileTransportChannel)\n {\n this.FileTransportChannel.RecaiveFile(\n this.rtc,\n filemeta,\n chnlCount,\n totalSize,\n (file: File) => {\n recaivedFile(file)\n }\n );\n }\n })\n }\n}\n\nWebRTC.requireGC = false;\nsetInterval(()=>{\n if(WebRTC.requireGC == false) return;\n let img = document.createElement(\"img\");\n img.src = window.URL.createObjectURL(new Blob([new ArrayBuffer(5e+7)]));\n img.onerror = function() {\n window.URL.revokeObjectURL(this.src);\n };\n WebRTC.requireGC = false;\n}, 3000)\n\ndeclare global {\n interface MediaStream {\n senders : RTCRtpSender[];\n }\n}","import \"webrtc-adapter\";\nimport WebRTC from \"./WebRTC\";\nimport Peer from \"./Peer\";\n\n\n\nexport default class P2PFileSender\n{\n public rtc : RTCPeerConnection;\n public peer : Peer;\n public webrtc : WebRTC;\n\n public totalSize : number = 0;\n public isReady : boolean = false;\n public isStarted : boolean = false;\n public isSending : boolean = false;\n public isRecaiving : boolean = false;\n public processedSize : number = 0;\n public recaivedFile? : File;\n\n public bufferSizePerChannel : number = 10e6;\n public bufferSizePerPack : number = 10e3;\n public safeBufferSizePerPack : number = 10e3 - 1;\n\n public constructor(webrtc : WebRTC, peer : Peer)\n {\n this.webrtc = webrtc;\n this.rtc = webrtc.rtc;\n this.peer = peer;\n }\n public async RecaiveFile(\n _rtc: RTCPeerConnection,\n fileMetadata: {name:string, type:string},\n channelCount: number,\n _totalSize: number,\n onEnded: Function\n )\n {\n //let totals = {};\n // let index = 0;\n /*setChannelStatus(Array.from({length:channelCount}).map((e, index) => {\n return {\n name: `${index+1}. Kanal`,\n current: 0,\n currentTotal: 0,\n total: 0\n }\n }));*/\n let parts : Blob[] = [];\n this.webrtc.on('datachannel',(datachannel:RTCDataChannel) => {\n //let channelIndex = index++;\n let current = 0;\n let totalSize = 0;\n let currentPart = 0;\n let bufferAmount : ArrayBuffer[] = [];\n datachannel.onmessage = function({data}){\n if(totalSize == 0)\n {\n let {\n size,\n part,\n } = JSON.parse(data);\n totalSize = size;\n currentPart = part;\n /*updateChannelStatus(channelIndex, n => {\n return {\n ...n,\n total: totalSize,\n current: 0\n }\n });*/\n datachannel.send(\"READY\");\n }else{\n current += data.byteLength;\n bufferAmount.push(data);\n /*updateChannelStatus(channelIndex, n => {\n return {\n ...n,\n current: data.byteLength + n.current,\n currentTotal: data.byteLength + n.currentTotal,\n }\n });\n setProcessedSize(n => n + data.byteLength);*/\n if(current == totalSize)\n {\n parts[currentPart] = new Blob(bufferAmount);\n bufferAmount = []; \n //totals[datachannel.label] += totalSize;\n totalSize = 0;\n currentPart = 0;\n current = 0;\n datachannel.send(\"TOTAL_RECAIVED\");\n }\n }\n };\n datachannel.onclose = () => {\n channelCount--;\n if(channelCount == 0)\n {\n let file = new File(parts, fileMetadata.name, {\n type: fileMetadata.type,\n lastModified: +new Date\n });\n onEnded(file);\n }\n };\n })\n }\n public async SendFile(\n file: File,\n metadata: object\n )\n {\n this.isSending = true;\n this.isStarted = true;\n\n\n let buffer = await file.arrayBuffer();\n let partCount = Math.ceil(buffer.byteLength / 10e6);\n let channelCount = Math.min(5, partCount);\n\n if(this.webrtc.iceStatus != \"connected\")\n {\n throw new Error(\"WebRTC is a not ready\")\n }\n\n this.peer.send({\n type: 'file',\n name: file.name,\n size: file.size,\n mimetype: file.type,\n partCount,\n channelCount,\n metadata: metadata\n });\n\n let channels : RTCDataChannel[] = [];\n\n for(let channelIndex = 0; channelIndex < channelCount; channelIndex++)\n {\n let channel = this.rtc.createDataChannel(\"\\\\?\\\\file_\" + channelIndex);\n channel.binaryType = \"arraybuffer\";\n await new Promise(ok => {\n channel.onopen = () => {\n ok(void 0);\n }\n });\n channels.push(channel);\n };\n\n let currentPart = 0;\n let next = () => {\n if(currentPart < partCount)\n {\n let bufferPart = buffer.slice(currentPart * 10e6, currentPart * 10e6 + 10e6)\n currentPart++;\n return [bufferPart, currentPart - 1];\n };\n return [false,0];\n };\n let spyChannelIndex = channels.length;\n await new Promise(ok => {\n for (let channelIndex = 0; channelIndex < channels.length; channelIndex++)\n {\n this.sendPartition(\n channels[channelIndex],\n next,\n channelIndex,\n () => {\n spyChannelIndex--;\n if(spyChannelIndex == 0)\n {\n this.isSending = false;\n this.isStarted = false;\n ok(undefined)\n }\n }\n );\n }\n })\n }\n protected sendPartition(\n channel: RTCDataChannel,\n nextblob10mb: () => (number | ArrayBuffer)[] | (number | boolean)[],\n _channelIndex: number,\n onEnded: Function\n )\n {\n let [currentBuffer,currentPartition] = nextblob10mb();\n let currentPart = 0;\n let next = () => {\n if(!(currentBuffer instanceof ArrayBuffer))\n {\n return;\n }\n let bufferPart = currentBuffer.slice(currentPart * 16e3, currentPart * 16e3 + 16e3)\n currentPart++;\n if(bufferPart.byteLength != 0)\n {\n /*\n updateChannelStatus(channelIndex, n => {\n return {\n ...n,\n current: bufferPart.byteLength + n.current,\n currentTotal: bufferPart.byteLength + n.currentTotal\n }\n });\n setProcessedSize(n => n + bufferPart.byteLength);\n */\n return bufferPart\n }\n };\n channel.addEventListener(\"message\",({data}) => {\n if(data == \"READY\")\n {\n this.sendFileChannel(channel, next)\n }\n if(data == \"TOTAL_RECAIVED\")\n {\n [currentBuffer,currentPartition] = nextblob10mb();\n currentPart = 0;\n if(currentBuffer != false)\n {\n /*updateChannelStatus(channelIndex, n => {\n return {\n ...n,\n total: currentBuffer.byteLength,\n current: 0,\n }\n });*/\n channel.send(JSON.stringify({\n size: (currentBuffer as ArrayBuffer).byteLength,\n part: currentPartition\n }))\n }else{\n channel.close();\n onEnded();\n }\n }\n });\n channel.send(JSON.stringify({\n size: (currentBuffer as ArrayBuffer).byteLength,\n part: currentPartition\n }))\n }\n protected sendFileChannel(\n channel: RTCDataChannel,\n getNextBlob: () => ArrayBuffer | undefined\n )\n {\n channel.addEventListener(\"bufferedamountlow\",function(){\n let buffer = getNextBlob();\n if(buffer)\n {\n channel.send(buffer);\n }\n });\n channel.bufferedAmountLowThreshold = 16e3 - 1;\n let c = getNextBlob();\n c && channel.send(c);\n }\n};","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n\n'use strict';\n\nimport {adapterFactory} from './adapter_factory.js';\n\nconst adapter =\n adapterFactory({window: typeof window === 'undefined' ? undefined : window});\nexport default adapter;\n","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\nimport * as utils from './utils';\n\n// Browser shims.\nimport * as chromeShim from './chrome/chrome_shim';\nimport * as firefoxShim from './firefox/firefox_shim';\nimport * as safariShim from './safari/safari_shim';\nimport * as commonShim from './common_shim';\nimport * as sdp from 'sdp';\n\n// Shimming starts here.\nexport function adapterFactory({window} = {}, options = {\n shimChrome: true,\n shimFirefox: true,\n shimSafari: true,\n}) {\n // Utils.\n const logging = utils.log;\n const browserDetails = utils.detectBrowser(window);\n\n const adapter = {\n browserDetails,\n commonShim,\n extractVersion: utils.extractVersion,\n disableLog: utils.disableLog,\n disableWarnings: utils.disableWarnings,\n // Expose sdp as a convenience. For production apps include directly.\n sdp,\n };\n\n // Shim browser if found.\n switch (browserDetails.browser) {\n case 'chrome':\n if (!chromeShim || !chromeShim.shimPeerConnection ||\n !options.shimChrome) {\n logging('Chrome shim is not included in this adapter release.');\n return adapter;\n }\n if (browserDetails.version === null) {\n logging('Chrome shim can not determine version, not shimming.');\n return adapter;\n }\n logging('adapter.js shimming chrome.');\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = chromeShim;\n\n // Must be called before shimPeerConnection.\n commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails);\n commonShim.shimParameterlessSetLocalDescription(window, browserDetails);\n\n chromeShim.shimGetUserMedia(window, browserDetails);\n chromeShim.shimMediaStream(window, browserDetails);\n chromeShim.shimPeerConnection(window, browserDetails);\n chromeShim.shimOnTrack(window, browserDetails);\n chromeShim.shimAddTrackRemoveTrack(window, browserDetails);\n chromeShim.shimGetSendersWithDtmf(window, browserDetails);\n chromeShim.shimGetStats(window, browserDetails);\n chromeShim.shimSenderReceiverGetStats(window, browserDetails);\n chromeShim.fixNegotiationNeeded(window, browserDetails);\n\n commonShim.shimRTCIceCandidate(window, browserDetails);\n commonShim.shimRTCIceCandidateRelayProtocol(window, browserDetails);\n commonShim.shimConnectionState(window, browserDetails);\n commonShim.shimMaxMessageSize(window, browserDetails);\n commonShim.shimSendThrowTypeError(window, browserDetails);\n commonShim.removeExtmapAllowMixed(window, browserDetails);\n break;\n case 'firefox':\n if (!firefoxShim || !firefoxShim.shimPeerConnection ||\n !options.shimFirefox) {\n logging('Firefox shim is not included in this adapter release.');\n return adapter;\n }\n logging('adapter.js shimming firefox.');\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = firefoxShim;\n\n // Must be called before shimPeerConnection.\n commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails);\n commonShim.shimParameterlessSetLocalDescription(window, browserDetails);\n\n firefoxShim.shimGetUserMedia(window, browserDetails);\n firefoxShim.shimPeerConnection(window, browserDetails);\n firefoxShim.shimOnTrack(window, browserDetails);\n firefoxShim.shimRemoveStream(window, browserDetails);\n firefoxShim.shimSenderGetStats(window, browserDetails);\n firefoxShim.shimReceiverGetStats(window, browserDetails);\n firefoxShim.shimRTCDataChannel(window, browserDetails);\n firefoxShim.shimAddTransceiver(window, browserDetails);\n firefoxShim.shimGetParameters(window, browserDetails);\n firefoxShim.shimCreateOffer(window, browserDetails);\n firefoxShim.shimCreateAnswer(window, browserDetails);\n\n commonShim.shimRTCIceCandidate(window, browserDetails);\n commonShim.shimConnectionState(window, browserDetails);\n commonShim.shimMaxMessageSize(window, browserDetails);\n commonShim.shimSendThrowTypeError(window, browserDetails);\n break;\n case 'safari':\n if (!safariShim || !options.shimSafari) {\n logging('Safari shim is not included in this adapter release.');\n return adapter;\n }\n logging('adapter.js shimming safari.');\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = safariShim;\n\n // Must be called before shimCallbackAPI.\n commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails);\n commonShim.shimParameterlessSetLocalDescription(window, browserDetails);\n\n safariShim.shimRTCIceServerUrls(window, browserDetails);\n safariShim.shimCreateOfferLegacy(window, browserDetails);\n safariShim.shimCallbacksAPI(window, browserDetails);\n safariShim.shimLocalStreamsAPI(window, browserDetails);\n safariShim.shimRemoteStreamsAPI(window, browserDetails);\n safariShim.shimTrackEventTransceiver(window, browserDetails);\n safariShim.shimGetUserMedia(window, browserDetails);\n safariShim.shimAudioContext(window, browserDetails);\n\n commonShim.shimRTCIceCandidate(window, browserDetails);\n commonShim.shimRTCIceCandidateRelayProtocol(window, browserDetails);\n commonShim.shimMaxMessageSize(window, browserDetails);\n commonShim.shimSendThrowTypeError(window, browserDetails);\n commonShim.removeExtmapAllowMixed(window, browserDetails);\n break;\n default:\n logging('Unsupported browser!');\n break;\n }\n\n return adapter;\n}\n","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\n\nlet logDisabled_ = true;\nlet deprecationWarnings_ = true;\n\n/**\n * Extract browser version out of the provided user agent string.\n *\n * @param {!string} uastring userAgent string.\n * @param {!string} expr Regular expression used as match criteria.\n * @param {!number} pos position in the version string to be returned.\n * @return {!number} browser version.\n */\nexport function extractVersion(uastring, expr, pos) {\n const match = uastring.match(expr);\n return match && match.length >= pos && parseInt(match[pos], 10);\n}\n\n// Wraps the peerconnection event eventNameToWrap in a function\n// which returns the modified event object (or false to prevent\n// the event).\nexport function wrapPeerConnectionEvent(window, eventNameToWrap, wrapper) {\n if (!window.RTCPeerConnection) {\n return;\n }\n const proto = window.RTCPeerConnection.prototype;\n const nativeAddEventListener = proto.addEventListener;\n proto.addEventListener = function(nativeEventName, cb) {\n if (nativeEventName !== eventNameToWrap) {\n return nativeAddEventListener.apply(this, arguments);\n }\n const wrappedCallback = (e) => {\n const modifiedEvent = wrapper(e);\n if (modifiedEvent) {\n if (cb.handleEvent) {\n cb.handleEvent(modifiedEvent);\n } else {\n cb(modifiedEvent);\n }\n }\n };\n this._eventMap = this._eventMap || {};\n if (!this._eventMap[eventNameToWrap]) {\n this._eventMap[eventNameToWrap] = new Map();\n }\n this._eventMap[eventNameToWrap].set(cb, wrappedCallback);\n return nativeAddEventListener.apply(this, [nativeEventName,\n wrappedCallback]);\n };\n\n const nativeRemoveEventListener = proto.removeEventListener;\n proto.removeEventListener = function(nativeEventName, cb) {\n if (nativeEventName !== eventNameToWrap || !this._eventMap\n || !this._eventMap[eventNameToWrap]) {\n return nativeRemoveEventListener.apply(this, arguments);\n }\n if (!this._eventMap[eventNameToWrap].has(cb)) {\n return nativeRemoveEventListener.apply(this, arguments);\n }\n const unwrappedCb = this._eventMap[eventNameToWrap].get(cb);\n this._eventMap[eventNameToWrap].delete(cb);\n if (this._eventMap[eventNameToWrap].size === 0) {\n delete this._eventMap[eventNameToWrap];\n }\n if (Object.keys(this._eventMap).length === 0) {\n delete this._eventMap;\n }\n return nativeRemoveEventListener.apply(this, [nativeEventName,\n unwrappedCb]);\n };\n\n Object.defineProperty(proto, 'on' + eventNameToWrap, {\n get() {\n return this['_on' + eventNameToWrap];\n },\n set(cb) {\n if (this['_on' + eventNameToWrap]) {\n this.removeEventListener(eventNameToWrap,\n this['_on' + eventNameToWrap]);\n delete this['_on' + eventNameToWrap];\n }\n if (cb) {\n this.addEventListener(eventNameToWrap,\n this['_on' + eventNameToWrap] = cb);\n }\n },\n enumerable: true,\n configurable: true\n });\n}\n\nexport function disableLog(bool) {\n if (typeof bool !== 'boolean') {\n return new Error('Argument type: ' + typeof bool +\n '. Please use a boolean.');\n }\n logDisabled_ = bool;\n return (bool) ? 'adapter.js logging disabled' :\n 'adapter.js logging enabled';\n}\n\n/**\n * Disable or enable deprecation warnings\n * @param {!boolean} bool set to true to disable warnings.\n */\nexport function disableWarnings(bool) {\n if (typeof bool !== 'boolean') {\n return new Error('Argument type: ' + typeof bool +\n '. Please use a boolean.');\n }\n deprecationWarnings_ = !bool;\n return 'adapter.js deprecation warnings ' + (bool ? 'disabled' : 'enabled');\n}\n\nexport function log() {\n if (typeof window === 'object') {\n if (logDisabled_) {\n return;\n }\n if (typeof console !== 'undefined' && typeof console.log === 'function') {\n console.log.apply(console, arguments);\n }\n }\n}\n\n/**\n * Shows a deprecation warning suggesting the modern and spec-compatible API.\n */\nexport function deprecated(oldMethod, newMethod) {\n if (!deprecationWarnings_) {\n return;\n }\n console.warn(oldMethod + ' is deprecated, please use ' + newMethod +\n ' instead.');\n}\n\n/**\n * Browser detector.\n *\n * @return {object} result containing browser and version\n * properties.\n */\nexport function detectBrowser(window) {\n // Returned result object.\n const result = {browser: null, version: null};\n\n // Fail early if it's not a browser\n if (typeof window === 'undefined' || !window.navigator ||\n !window.navigator.userAgent) {\n result.browser = 'Not a browser.';\n return result;\n }\n\n const {navigator} = window;\n\n if (navigator.mozGetUserMedia) { // Firefox.\n result.browser = 'firefox';\n result.version = extractVersion(navigator.userAgent,\n /Firefox\\/(\\d+)\\./, 1);\n } else if (navigator.webkitGetUserMedia ||\n (window.isSecureContext === false && window.webkitRTCPeerConnection)) {\n // Chrome, Chromium, Webview, Opera.\n // Version matches Chrome/WebRTC version.\n // Chrome 74 removed webkitGetUserMedia on http as well so we need the\n // more complicated fallback to webkitRTCPeerConnection.\n result.browser = 'chrome';\n result.version = extractVersion(navigator.userAgent,\n /Chrom(e|ium)\\/(\\d+)\\./, 2);\n } else if (window.RTCPeerConnection &&\n navigator.userAgent.match(/AppleWebKit\\/(\\d+)\\./)) { // Safari.\n result.browser = 'safari';\n result.version = extractVersion(navigator.userAgent,\n /AppleWebKit\\/(\\d+)\\./, 1);\n result.supportsUnifiedPlan = window.RTCRtpTransceiver &&\n 'currentDirection' in window.RTCRtpTransceiver.prototype;\n } else { // Default fallthrough: not supported.\n result.browser = 'Not a supported browser.';\n return result;\n }\n\n return result;\n}\n\n/**\n * Checks if something is an object.\n *\n * @param {*} val The something you want to check.\n * @return true if val is an object, false otherwise.\n */\nfunction isObject(val) {\n return Object.prototype.toString.call(val) === '[object Object]';\n}\n\n/**\n * Remove all empty objects and undefined values\n * from a nested object -- an enhanced and vanilla version\n * of Lodash's `compact`.\n */\nexport function compactObject(data) {\n if (!isObject(data)) {\n return data;\n }\n\n return Object.keys(data).reduce(function(accumulator, key) {\n const isObj = isObject(data[key]);\n const value = isObj ? compactObject(data[key]) : data[key];\n const isEmptyObject = isObj && !Object.keys(value).length;\n if (value === undefined || isEmptyObject) {\n return accumulator;\n }\n return Object.assign(accumulator, {[key]: value});\n }, {});\n}\n\n/* iterates the stats graph recursively. */\nexport function walkStats(stats, base, resultSet) {\n if (!base || resultSet.has(base.id)) {\n return;\n }\n resultSet.set(base.id, base);\n Object.keys(base).forEach(name => {\n if (name.endsWith('Id')) {\n walkStats(stats, stats.get(base[name]), resultSet);\n } else if (name.endsWith('Ids')) {\n base[name].forEach(id => {\n walkStats(stats, stats.get(id), resultSet);\n });\n }\n });\n}\n\n/* filter getStats for a sender/receiver track. */\nexport function filterStats(result, track, outbound) {\n const streamStatsType = outbound ? 'outbound-rtp' : 'inbound-rtp';\n const filteredResult = new Map();\n if (track === null) {\n return filteredResult;\n }\n const trackStats = [];\n result.forEach(value => {\n if (value.type === 'track' &&\n value.trackIdentifier === track.id) {\n trackStats.push(value);\n }\n });\n trackStats.forEach(trackStat => {\n result.forEach(stats => {\n if (stats.type === streamStatsType && stats.trackId === trackStat.id) {\n walkStats(result, stats, filteredResult);\n }\n });\n });\n return filteredResult;\n}\n\n","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\nimport * as utils from '../utils.js';\n\nexport {shimGetUserMedia} from './getusermedia';\nexport {shimGetDisplayMedia} from './getdisplaymedia';\n\nexport function shimMediaStream(window) {\n window.MediaStream = window.MediaStream || window.webkitMediaStream;\n}\n\nexport function shimOnTrack(window) {\n if (typeof window === 'object' && window.RTCPeerConnection && !('ontrack' in\n window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, 'ontrack', {\n get() {\n return this._ontrack;\n },\n set(f) {\n if (this._ontrack) {\n this.removeEventListener('track', this._ontrack);\n }\n this.addEventListener('track', this._ontrack = f);\n },\n enumerable: true,\n configurable: true\n });\n const origSetRemoteDescription =\n window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription =\n function setRemoteDescription() {\n if (!this._ontrackpoly) {\n this._ontrackpoly = (e) => {\n // onaddstream does not fire when a track is added to an existing\n // stream. But stream.onaddtrack is implemented so we use that.\n e.stream.addEventListener('addtrack', te => {\n let receiver;\n if (window.RTCPeerConnection.prototype.getReceivers) {\n receiver = this.getReceivers()\n .find(r => r.track && r.track.id === te.track.id);\n } else {\n receiver = {track: te.track};\n }\n\n const event = new Event('track');\n event.track = te.track;\n event.receiver = receiver;\n event.transceiver = {receiver};\n event.streams = [e.stream];\n this.dispatchEvent(event);\n });\n e.stream.getTracks().forEach(track => {\n let receiver;\n if (window.RTCPeerConnection.prototype.getReceivers) {\n receiver = this.getReceivers()\n .find(r => r.track && r.track.id === track.id);\n } else {\n receiver = {track};\n }\n const event = new Event('track');\n event.track = track;\n event.receiver = receiver;\n event.transceiver = {receiver};\n event.streams = [e.stream];\n this.dispatchEvent(event);\n });\n };\n this.addEventListener('addstream', this._ontrackpoly);\n }\n return origSetRemoteDescription.apply(this, arguments);\n };\n } else {\n // even if RTCRtpTransceiver is in window, it is only used and\n // emitted in unified-plan. Unfortunately this means we need\n // to unconditionally wrap the event.\n utils.wrapPeerConnectionEvent(window, 'track', e => {\n if (!e.transceiver) {\n Object.defineProperty(e, 'transceiver',\n {value: {receiver: e.receiver}});\n }\n return e;\n });\n }\n}\n\nexport function shimGetSendersWithDtmf(window) {\n // Overrides addTrack/removeTrack, depends on shimAddTrackRemoveTrack.\n if (typeof window === 'object' && window.RTCPeerConnection &&\n !('getSenders' in window.RTCPeerConnection.prototype) &&\n 'createDTMFSender' in window.RTCPeerConnection.prototype) {\n const shimSenderWithDtmf = function(pc, track) {\n return {\n track,\n get dtmf() {\n if (this._dtmf === undefined) {\n if (track.kind === 'audio') {\n this._dtmf = pc.createDTMFSender(track);\n } else {\n this._dtmf = null;\n }\n }\n return this._dtmf;\n },\n _pc: pc\n };\n };\n\n // augment addTrack when getSenders is not available.\n if (!window.RTCPeerConnection.prototype.getSenders) {\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n this._senders = this._senders || [];\n return this._senders.slice(); // return a copy of the internal state.\n };\n const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addTrack =\n function addTrack(track, stream) {\n let sender = origAddTrack.apply(this, arguments);\n if (!sender) {\n sender = shimSenderWithDtmf(this, track);\n this._senders.push(sender);\n }\n return sender;\n };\n\n const origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack;\n window.RTCPeerConnection.prototype.removeTrack =\n function removeTrack(sender) {\n origRemoveTrack.apply(this, arguments);\n const idx = this._senders.indexOf(sender);\n if (idx !== -1) {\n this._senders.splice(idx, 1);\n }\n };\n }\n const origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n this._senders = this._senders || [];\n origAddStream.apply(this, [stream]);\n stream.getTracks().forEach(track => {\n this._senders.push(shimSenderWithDtmf(this, track));\n });\n };\n\n const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream =\n function removeStream(stream) {\n this._senders = this._senders || [];\n origRemoveStream.apply(this, [stream]);\n\n stream.getTracks().forEach(track => {\n const sender = this._senders.find(s => s.track === track);\n if (sender) { // remove sender\n this._senders.splice(this._senders.indexOf(sender), 1);\n }\n });\n };\n } else if (typeof window === 'object' && window.RTCPeerConnection &&\n 'getSenders' in window.RTCPeerConnection.prototype &&\n 'createDTMFSender' in window.RTCPeerConnection.prototype &&\n window.RTCRtpSender &&\n !('dtmf' in window.RTCRtpSender.prototype)) {\n const origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n const senders = origGetSenders.apply(this, []);\n senders.forEach(sender => sender._pc = this);\n return senders;\n };\n\n Object.defineProperty(window.RTCRtpSender.prototype, 'dtmf', {\n get() {\n if (this._dtmf === undefined) {\n if (this.track.kind === 'audio') {\n this._dtmf = this._pc.createDTMFSender(this.track);\n } else {\n this._dtmf = null;\n }\n }\n return this._dtmf;\n }\n });\n }\n}\n\nexport function shimGetStats(window) {\n if (!window.RTCPeerConnection) {\n return;\n }\n\n const origGetStats = window.RTCPeerConnection.prototype.getStats;\n window.RTCPeerConnection.prototype.getStats = function getStats() {\n const [selector, onSucc, onErr] = arguments;\n\n // If selector is a function then we are in the old style stats so just\n // pass back the original getStats format to avoid breaking old users.\n if (arguments.length > 0 && typeof selector === 'function') {\n return origGetStats.apply(this, arguments);\n }\n\n // When spec-style getStats is supported, return those when called with\n // either no arguments or the selector argument is null.\n if (origGetStats.length === 0 && (arguments.length === 0 ||\n typeof selector !== 'function')) {\n return origGetStats.apply(this, []);\n }\n\n const fixChromeStats_ = function(response) {\n const standardReport = {};\n const reports = response.result();\n reports.forEach(report => {\n const standardStats = {\n id: report.id,\n timestamp: report.timestamp,\n type: {\n localcandidate: 'local-candidate',\n remotecandidate: 'remote-candidate'\n }[report.type] || report.type\n };\n report.names().forEach(name => {\n standardStats[name] = report.stat(name);\n });\n standardReport[standardStats.id] = standardStats;\n });\n\n return standardReport;\n };\n\n // shim getStats with maplike support\n const makeMapStats = function(stats) {\n return new Map(Object.keys(stats).map(key => [key, stats[key]]));\n };\n\n if (arguments.length >= 2) {\n const successCallbackWrapper_ = function(response) {\n onSucc(makeMapStats(fixChromeStats_(response)));\n };\n\n return origGetStats.apply(this, [successCallbackWrapper_,\n selector]);\n }\n\n // promise-support\n return new Promise((resolve, reject) => {\n origGetStats.apply(this, [\n function(response) {\n resolve(makeMapStats(fixChromeStats_(response)));\n }, reject]);\n }).then(onSucc, onErr);\n };\n}\n\nexport function shimSenderReceiverGetStats(window) {\n if (!(typeof window === 'object' && window.RTCPeerConnection &&\n window.RTCRtpSender && window.RTCRtpReceiver)) {\n return;\n }\n\n // shim sender stats.\n if (!('getStats' in window.RTCRtpSender.prototype)) {\n const origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n if (origGetSenders) {\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n const senders = origGetSenders.apply(this, []);\n senders.forEach(sender => sender._pc = this);\n return senders;\n };\n }\n\n const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n if (origAddTrack) {\n window.RTCPeerConnection.prototype.addTrack = function addTrack() {\n const sender = origAddTrack.apply(this, arguments);\n sender._pc = this;\n return sender;\n };\n }\n window.RTCRtpSender.prototype.getStats = function getStats() {\n const sender = this;\n return this._pc.getStats().then(result =>\n /* Note: this will include stats of all senders that\n * send a track with the same id as sender.track as\n * it is not possible to identify the RTCRtpSender.\n */\n utils.filterStats(result, sender.track, true));\n };\n }\n\n // shim receiver stats.\n if (!('getStats' in window.RTCRtpReceiver.prototype)) {\n const origGetReceivers = window.RTCPeerConnection.prototype.getReceivers;\n if (origGetReceivers) {\n window.RTCPeerConnection.prototype.getReceivers =\n function getReceivers() {\n const receivers = origGetReceivers.apply(this, []);\n receivers.forEach(receiver => receiver._pc = this);\n return receivers;\n };\n }\n utils.wrapPeerConnectionEvent(window, 'track', e => {\n e.receiver._pc = e.srcElement;\n return e;\n });\n window.RTCRtpReceiver.prototype.getStats = function getStats() {\n const receiver = this;\n return this._pc.getStats().then(result =>\n utils.filterStats(result, receiver.track, false));\n };\n }\n\n if (!('getStats' in window.RTCRtpSender.prototype &&\n 'getStats' in window.RTCRtpReceiver.prototype)) {\n return;\n }\n\n // shim RTCPeerConnection.getStats(track).\n const origGetStats = window.RTCPeerConnection.prototype.getStats;\n window.RTCPeerConnection.prototype.getStats = function getStats() {\n if (arguments.length > 0 &&\n arguments[0] instanceof window.MediaStreamTrack) {\n const track = arguments[0];\n let sender;\n let receiver;\n let err;\n this.getSenders().forEach(s => {\n if (s.track === track) {\n if (sender) {\n err = true;\n } else {\n sender = s;\n }\n }\n });\n this.getReceivers().forEach(r => {\n if (r.track === track) {\n if (receiver) {\n err = true;\n } else {\n receiver = r;\n }\n }\n return r.track === track;\n });\n if (err || (sender && receiver)) {\n return Promise.reject(new DOMException(\n 'There are more than one sender or receiver for the track.',\n 'InvalidAccessError'));\n } else if (sender) {\n return sender.getStats();\n } else if (receiver) {\n return receiver.getStats();\n }\n return Promise.reject(new DOMException(\n 'There is no sender or receiver for the track.',\n 'InvalidAccessError'));\n }\n return origGetStats.apply(this, arguments);\n };\n}\n\nexport function shimAddTrackRemoveTrackWithNative(window) {\n // shim addTrack/removeTrack with native variants in order to make\n // the interactions with legacy getLocalStreams behave as in other browsers.\n // Keeps a mapping stream.id => [stream, rtpsenders...]\n window.RTCPeerConnection.prototype.getLocalStreams =\n function getLocalStreams() {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n return Object.keys(this._shimmedLocalStreams)\n .map(streamId => this._shimmedLocalStreams[streamId][0]);\n };\n\n const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addTrack =\n function addTrack(track, stream) {\n if (!stream) {\n return origAddTrack.apply(this, arguments);\n }\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n\n const sender = origAddTrack.apply(this, arguments);\n if (!this._shimmedLocalStreams[stream.id]) {\n this._shimmedLocalStreams[stream.id] = [stream, sender];\n } else if (this._shimmedLocalStreams[stream.id].indexOf(sender) === -1) {\n this._shimmedLocalStreams[stream.id].push(sender);\n }\n return sender;\n };\n\n const origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n\n stream.getTracks().forEach(track => {\n const alreadyExists = this.getSenders().find(s => s.track === track);\n if (alreadyExists) {\n throw new DOMException('Track already exists.',\n 'InvalidAccessError');\n }\n });\n const existingSenders = this.getSenders();\n origAddStream.apply(this, arguments);\n const newSenders = this.getSenders()\n .filter(newSender => existingSenders.indexOf(newSender) === -1);\n this._shimmedLocalStreams[stream.id] = [stream].concat(newSenders);\n };\n\n const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream =\n function removeStream(stream) {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n delete this._shimmedLocalStreams[stream.id];\n return origRemoveStream.apply(this, arguments);\n };\n\n const origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack;\n window.RTCPeerConnection.prototype.removeTrack =\n function removeTrack(sender) {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n if (sender) {\n Object.keys(this._shimmedLocalStreams).forEach(streamId => {\n const idx = this._shimmedLocalStreams[streamId].indexOf(sender);\n if (idx !== -1) {\n this._shimmedLocalStreams[streamId].splice(idx, 1);\n }\n if (this._shimmedLocalStreams[streamId].length === 1) {\n delete this._shimmedLocalStreams[streamId];\n }\n });\n }\n return origRemoveTrack.apply(this, arguments);\n };\n}\n\nexport function shimAddTrackRemoveTrack(window, browserDetails) {\n if (!window.RTCPeerConnection) {\n return;\n }\n // shim addTrack and removeTrack.\n if (window.RTCPeerConnection.prototype.addTrack &&\n browserDetails.version >= 65) {\n return shimAddTrackRemoveTrackWithNative(window);\n }\n\n // also shim pc.getLocalStreams when addTrack is shimmed\n // to return the original streams.\n const origGetLocalStreams = window.RTCPeerConnection.prototype\n .getLocalStreams;\n window.RTCPeerConnection.prototype.getLocalStreams =\n function getLocalStreams() {\n const nativeStreams = origGetLocalStreams.apply(this);\n this._reverseStreams = this._reverseStreams || {};\n return nativeStreams.map(stream => this._reverseStreams[stream.id]);\n };\n\n const origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n\n stream.getTracks().forEach(track => {\n const alreadyExists = this.getSenders().find(s => s.track === track);\n if (alreadyExists) {\n throw new DOMException('Track already exists.',\n 'InvalidAccessError');\n }\n });\n // Add identity mapping for consistency with addTrack.\n // Unless this is being used with a stream from addTrack.\n if (!this._reverseStreams[stream.id]) {\n const newStream = new window.MediaStream(stream.getTracks());\n this._streams[stream.id] = newStream;\n this._reverseStreams[newStream.id] = stream;\n stream = newStream;\n }\n origAddStream.apply(this, [stream]);\n };\n\n const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream =\n function removeStream(stream) {\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n\n origRemoveStream.apply(this, [(this._streams[stream.id] || stream)]);\n delete this._reverseStreams[(this._streams[stream.id] ?\n this._streams[stream.id].id : stream.id)];\n delete this._streams[stream.id];\n };\n\n window.RTCPeerConnection.prototype.addTrack =\n function addTrack(track, stream) {\n if (this.signalingState === 'closed') {\n throw new DOMException(\n 'The RTCPeerConnection\\'s signalingState is \\'closed\\'.',\n 'InvalidStateError');\n }\n const streams = [].slice.call(arguments, 1);\n if (streams.length !== 1 ||\n !streams[0].getTracks().find(t => t === track)) {\n // this is not fully correct but all we can manage without\n // [[associated MediaStreams]] internal slot.\n throw new DOMException(\n 'The adapter.js addTrack polyfill only supports a single ' +\n ' stream which is associated with the specified track.',\n 'NotSupportedError');\n }\n\n const alreadyExists = this.getSenders().find(s => s.track === track);\n if (alreadyExists) {\n throw new DOMException('Track already exists.',\n 'InvalidAccessError');\n }\n\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n const oldStream = this._streams[stream.id];\n if (oldStream) {\n // this is using odd Chrome behaviour, use with caution:\n // https://bugs.chromium.org/p/webrtc/issues/detail?id=7815\n // Note: we rely on the high-level addTrack/dtmf shim to\n // create the sender with a dtmf sender.\n oldStream.addTrack(track);\n\n // Trigger ONN async.\n Promise.resolve().then(() => {\n this.dispatchEvent(new Event('negotiationneeded'));\n });\n } else {\n const newStream = new window.MediaStream([track]);\n this._streams[stream.id] = newStream;\n this._reverseStreams[newStream.id] = stream;\n this.addStream(newStream);\n }\n return this.getSenders().find(s => s.track === track);\n };\n\n // replace the internal stream id with the external one and\n // vice versa.\n function replaceInternalStreamId(pc, description) {\n let sdp = description.sdp;\n Object.keys(pc._reverseStreams || []).forEach(internalId => {\n const externalStream = pc._reverseStreams[internalId];\n const internalStream = pc._streams[externalStream.id];\n sdp = sdp.replace(new RegExp(internalStream.id, 'g'),\n externalStream.id);\n });\n return new RTCSessionDescription({\n type: description.type,\n sdp\n });\n }\n function replaceExternalStreamId(pc, description) {\n let sdp = description.sdp;\n Object.keys(pc._reverseStreams || []).forEach(internalId => {\n const externalStream = pc._reverseStreams[internalId];\n const internalStream = pc._streams[externalStream.id];\n sdp = sdp.replace(new RegExp(externalStream.id, 'g'),\n internalStream.id);\n });\n return new RTCSessionDescription({\n type: description.type,\n sdp\n });\n }\n ['createOffer', 'createAnswer'].forEach(function(method) {\n const nativeMethod = window.RTCPeerConnection.prototype[method];\n const methodObj = {[method]() {\n const args = arguments;\n const isLegacyCall = arguments.length &&\n typeof arguments[0] === 'function';\n if (isLegacyCall) {\n return nativeMethod.apply(this, [\n (description) => {\n const desc = replaceInternalStreamId(this, description);\n args[0].apply(null, [desc]);\n },\n (err) => {\n if (args[1]) {\n args[1].apply(null, err);\n }\n }, arguments[2]\n ]);\n }\n return nativeMethod.apply(this, arguments)\n .then(description => replaceInternalStreamId(this, description));\n }};\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n\n const origSetLocalDescription =\n window.RTCPeerConnection.prototype.setLocalDescription;\n window.RTCPeerConnection.prototype.setLocalDescription =\n function setLocalDescription() {\n if (!arguments.length || !arguments[0].type) {\n return origSetLocalDescription.apply(this, arguments);\n }\n arguments[0] = replaceExternalStreamId(this, arguments[0]);\n return origSetLocalDescription.apply(this, arguments);\n };\n\n // TODO: mangle getStats: https://w3c.github.io/webrtc-stats/#dom-rtcmediastreamstats-streamidentifier\n\n const origLocalDescription = Object.getOwnPropertyDescriptor(\n window.RTCPeerConnection.prototype, 'localDescription');\n Object.defineProperty(window.RTCPeerConnection.prototype,\n 'localDescription', {\n get() {\n const description = origLocalDescription.get.apply(this);\n if (description.type === '') {\n return description;\n }\n return replaceInternalStreamId(this, description);\n }\n });\n\n window.RTCPeerConnection.prototype.removeTrack =\n function removeTrack(sender) {\n if (this.signalingState === 'closed') {\n throw new DOMException(\n 'The RTCPeerConnection\\'s signalingState is \\'closed\\'.',\n 'InvalidStateError');\n }\n // We can not yet check for sender instanceof RTCRtpSender\n // since we shim RTPSender. So we check if sender._pc is set.\n if (!sender._pc) {\n throw new DOMException('Argument 1 of RTCPeerConnection.removeTrack ' +\n 'does not implement interface RTCRtpSender.', 'TypeError');\n }\n const isLocal = sender._pc === this;\n if (!isLocal) {\n throw new DOMException('Sender was not created by this connection.',\n 'InvalidAccessError');\n }\n\n // Search for the native stream the senders track belongs to.\n this._streams = this._streams || {};\n let stream;\n Object.keys(this._streams).forEach(streamid => {\n const hasTrack = this._streams[streamid].getTracks()\n .find(track => sender.track === track);\n if (hasTrack) {\n stream = this._streams[streamid];\n }\n });\n\n if (stream) {\n if (stream.getTracks().length === 1) {\n // if this is the last track of the stream, remove the stream. This\n // takes care of any shimmed _senders.\n this.removeStream(this._reverseStreams[stream.id]);\n } else {\n // relying on the same odd chrome behaviour as above.\n stream.removeTrack(sender.track);\n }\n this.dispatchEvent(new Event('negotiationneeded'));\n }\n };\n}\n\nexport function shimPeerConnection(window, browserDetails) {\n if (!window.RTCPeerConnection && window.webkitRTCPeerConnection) {\n // very basic support for old versions.\n window.RTCPeerConnection = window.webkitRTCPeerConnection;\n }\n if (!window.RTCPeerConnection) {\n return;\n }\n\n // shim implicit creation of RTCSessionDescription/RTCIceCandidate\n if (browserDetails.version < 53) {\n ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate']\n .forEach(function(method) {\n const nativeMethod = window.RTCPeerConnection.prototype[method];\n const methodObj = {[method]() {\n arguments[0] = new ((method === 'addIceCandidate') ?\n window.RTCIceCandidate :\n window.RTCSessionDescription)(arguments[0]);\n return nativeMethod.apply(this, arguments);\n }};\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n }\n}\n\n// Attempt to fix ONN in plan-b mode.\nexport function fixNegotiationNeeded(window, browserDetails) {\n utils.wrapPeerConnectionEvent(window, 'negotiationneeded', e => {\n const pc = e.target;\n if (browserDetails.version < 72 || (pc.getConfiguration &&\n pc.getConfiguration().sdpSemantics === 'plan-b')) {\n if (pc.signalingState !== 'stable') {\n return;\n }\n }\n return e;\n });\n}\n","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\nimport * as utils from '../utils.js';\nconst logging = utils.log;\n\nexport function shimGetUserMedia(window, browserDetails) {\n const navigator = window && window.navigator;\n\n if (!navigator.mediaDevices) {\n return;\n }\n\n const constraintsToChrome_ = function(c) {\n if (typeof c !== 'object' || c.mandatory || c.optional) {\n return c;\n }\n const cc = {};\n Object.keys(c).forEach(key => {\n if (key === 'require' || key === 'advanced' || key === 'mediaSource') {\n return;\n }\n const r = (typeof c[key] === 'object') ? c[key] : {ideal: c[key]};\n if (r.exact !== undefined && typeof r.exact === 'number') {\n r.min = r.max = r.exact;\n }\n const oldname_ = function(prefix, name) {\n if (prefix) {\n return prefix + name.charAt(0).toUpperCase() + name.slice(1);\n }\n return (name === 'deviceId') ? 'sourceId' : name;\n };\n if (r.ideal !== undefined) {\n cc.optional = cc.optional || [];\n let oc = {};\n if (typeof r.ideal === 'number') {\n oc[oldname_('min', key)] = r.ideal;\n cc.optional.push(oc);\n oc = {};\n oc[oldname_('max', key)] = r.ideal;\n cc.optional.push(oc);\n } else {\n oc[oldname_('', key)] = r.ideal;\n cc.optional.push(oc);\n }\n }\n if (r.exact !== undefined && typeof r.exact !== 'number') {\n cc.mandatory = cc.mandatory || {};\n cc.mandatory[oldname_('', key)] = r.exact;\n } else {\n ['min', 'max'].forEach(mix => {\n if (r[mix] !== undefined) {\n cc.mandatory = cc.mandatory || {};\n cc.mandatory[oldname_(mix, key)] = r[mix];\n }\n });\n }\n });\n if (c.advanced) {\n cc.optional = (cc.optional || []).concat(c.advanced);\n }\n return cc;\n };\n\n const shimConstraints_ = function(constraints, func) {\n if (browserDetails.version >= 61) {\n return func(constraints);\n }\n constraints = JSON.parse(JSON.stringify(constraints));\n if (constraints && typeof constraints.audio === 'object') {\n const remap = function(obj, a, b) {\n if (a in obj && !(b in obj)) {\n obj[b] = obj[a];\n delete obj[a];\n }\n };\n constraints = JSON.parse(JSON.stringify(constraints));\n remap(constraints.audio, 'autoGainControl', 'googAutoGainControl');\n remap(constraints.audio, 'noiseSuppression', 'googNoiseSuppression');\n constraints.audio = constraintsToChrome_(constraints.audio);\n }\n if (constraints && typeof constraints.video === 'object') {\n // Shim facingMode for mobile & surface pro.\n let face = constraints.video.facingMode;\n face = face && ((typeof face === 'object') ? face : {ideal: face});\n const getSupportedFacingModeLies = browserDetails.version < 66;\n\n if ((face && (face.exact === 'user' || face.exact === 'environment' ||\n face.ideal === 'user' || face.ideal === 'environment')) &&\n !(navigator.mediaDevices.getSupportedConstraints &&\n navigator.mediaDevices.getSupportedConstraints().facingMode &&\n !getSupportedFacingModeLies)) {\n delete constraints.video.facingMode;\n let matches;\n if (face.exact === 'environment' || face.ideal === 'environment') {\n matches = ['back', 'rear'];\n } else if (face.exact === 'user' || face.ideal === 'user') {\n matches = ['front'];\n }\n if (matches) {\n // Look for matches in label, or use last cam for back (typical).\n return navigator.mediaDevices.enumerateDevices()\n .then(devices => {\n devices = devices.filter(d => d.kind === 'videoinput');\n let dev = devices.find(d => matches.some(match =>\n d.label.toLowerCase().includes(match)));\n if (!dev && devices.length && matches.includes('back')) {\n dev = devices[devices.length - 1]; // more likely the back cam\n }\n if (dev) {\n constraints.video.deviceId = face.exact\n ? {exact: dev.deviceId}\n : {ideal: dev.deviceId};\n }\n constraints.video = constraintsToChrome_(constraints.video);\n logging('chrome: ' + JSON.stringify(constraints));\n return func(constraints);\n });\n }\n }\n constraints.video = constraintsToChrome_(constraints.video);\n }\n logging('chrome: ' + JSON.stringify(constraints));\n return func(constraints);\n };\n\n const shimError_ = function(e) {\n if (browserDetails.version >= 64) {\n return e;\n }\n return {\n name: {\n PermissionDeniedError: 'NotAllowedError',\n PermissionDismissedError: 'NotAllowedError',\n InvalidStateError: 'NotAllowedError',\n DevicesNotFoundError: 'NotFoundError',\n ConstraintNotSatisfiedError: 'OverconstrainedError',\n TrackStartError: 'NotReadableError',\n MediaDeviceFailedDueToShutdown: 'NotAllowedError',\n MediaDeviceKillSwitchOn: 'NotAllowedError',\n TabCaptureError: 'AbortError',\n ScreenCaptureError: 'AbortError',\n DeviceCaptureError: 'AbortError'\n }[e.name] || e.name,\n message: e.message,\n constraint: e.constraint || e.constraintName,\n toString() {\n return this.name + (this.message && ': ') + this.message;\n }\n };\n };\n\n const getUserMedia_ = function(constraints, onSuccess, onError) {\n shimConstraints_(constraints, c => {\n navigator.webkitGetUserMedia(c, onSuccess, e => {\n if (onError) {\n onError(shimError_(e));\n }\n });\n });\n };\n navigator.getUserMedia = getUserMedia_.bind(navigator);\n\n // Even though Chrome 45 has navigator.mediaDevices and a getUserMedia\n // function which returns a Promise, it does not accept spec-style\n // constraints.\n if (navigator.mediaDevices.getUserMedia) {\n const origGetUserMedia = navigator.mediaDevices.getUserMedia.\n bind(navigator.mediaDevices);\n navigator.mediaDevices.getUserMedia = function(cs) {\n return shimConstraints_(cs, c => origGetUserMedia(c).then(stream => {\n if (c.audio && !stream.getAudioTracks().length ||\n c.video && !stream.getVideoTracks().length) {\n stream.getTracks().forEach(track => {\n track.stop();\n });\n throw new DOMException('', 'NotFoundError');\n }\n return stream;\n }, e => Promise.reject(shimError_(e))));\n };\n }\n}\n","/*\n * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\nexport function shimGetDisplayMedia(window, getSourceId) {\n if (window.navigator.mediaDevices &&\n 'getDisplayMedia' in window.navigator.mediaDevices) {\n return;\n }\n if (!(window.navigator.mediaDevices)) {\n return;\n }\n // getSourceId is a function that returns a promise resolving with\n // the sourceId of the screen/window/tab to be shared.\n if (typeof getSourceId !== 'function') {\n console.error('shimGetDisplayMedia: getSourceId argument is not ' +\n 'a function');\n return;\n }\n window.navigator.mediaDevices.getDisplayMedia =\n function getDisplayMedia(constraints) {\n return getSourceId(constraints)\n .then(sourceId => {\n const widthSpecified = constraints.video && constraints.video.width;\n const heightSpecified = constraints.video &&\n constraints.video.height;\n const frameRateSpecified = constraints.video &&\n constraints.video.frameRate;\n constraints.video = {\n mandatory: {\n chromeMediaSource: 'desktop',\n chromeMediaSourceId: sourceId,\n maxFrameRate: frameRateSpecified || 3\n }\n };\n if (widthSpecified) {\n constraints.video.mandatory.maxWidth = widthSpecified;\n }\n if (heightSpecified) {\n constraints.video.mandatory.maxHeight = heightSpecified;\n }\n return window.navigator.mediaDevices.getUserMedia(constraints);\n });\n };\n}\n","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\n\nimport * as utils from '../utils';\nexport {shimGetUserMedia} from './getusermedia';\nexport {shimGetDisplayMedia} from './getdisplaymedia';\n\nexport function shimOnTrack(window) {\n if (typeof window === 'object' && window.RTCTrackEvent &&\n ('receiver' in window.RTCTrackEvent.prototype) &&\n !('transceiver' in window.RTCTrackEvent.prototype)) {\n Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', {\n get() {\n return {receiver: this.receiver};\n }\n });\n }\n}\n\nexport function shimPeerConnection(window, browserDetails) {\n if (typeof window !== 'object' ||\n !(window.RTCPeerConnection || window.mozRTCPeerConnection)) {\n return; // probably media.peerconnection.enabled=false in about:config\n }\n if (!window.RTCPeerConnection && window.mozRTCPeerConnection) {\n // very basic support for old versions.\n window.RTCPeerConnection = window.mozRTCPeerConnection;\n }\n\n if (browserDetails.version < 53) {\n // shim away need for obsolete RTCIceCandidate/RTCSessionDescription.\n ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate']\n .forEach(function(method) {\n const nativeMethod = window.RTCPeerConnection.prototype[method];\n const methodObj = {[method]() {\n arguments[0] = new ((method === 'addIceCandidate') ?\n window.RTCIceCandidate :\n window.RTCSessionDescription)(arguments[0]);\n return nativeMethod.apply(this, arguments);\n }};\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n }\n\n const modernStatsTypes = {\n inboundrtp: 'inbound-rtp',\n outboundrtp: 'outbound-rtp',\n candidatepair: 'candidate-pair',\n localcandidate: 'local-candidate',\n remotecandidate: 'remote-candidate'\n };\n\n const nativeGetStats = window.RTCPeerConnection.prototype.getStats;\n window.RTCPeerConnection.prototype.getStats = function getStats() {\n const [selector, onSucc, onErr] = arguments;\n return nativeGetStats.apply(this, [selector || null])\n .then(stats => {\n if (browserDetails.version < 53 && !onSucc) {\n // Shim only promise getStats with spec-hyphens in type names\n // Leave callback version alone; misc old uses of forEach before Map\n try {\n stats.forEach(stat => {\n stat.type = modernStatsTypes[stat.type] || stat.type;\n });\n } catch (e) {\n if (e.name !== 'TypeError') {\n throw e;\n }\n // Avoid TypeError: \"type\" is read-only, in old versions. 34-43ish\n stats.forEach((stat, i) => {\n stats.set(i, Object.assign({}, stat, {\n type: modernStatsTypes[stat.type] || stat.type\n }));\n });\n }\n }\n return stats;\n })\n .then(onSucc, onErr);\n };\n}\n\nexport function shimSenderGetStats(window) {\n if (!(typeof window === 'object' && window.RTCPeerConnection &&\n window.RTCRtpSender)) {\n return;\n }\n if (window.RTCRtpSender && 'getStats' in window.RTCRtpSender.prototype) {\n return;\n }\n const origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n if (origGetSenders) {\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n const senders = origGetSenders.apply(this, []);\n senders.forEach(sender => sender._pc = this);\n return senders;\n };\n }\n\n const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n if (origAddTrack) {\n window.RTCPeerConnection.prototype.addTrack = function addTrack() {\n const sender = origAddTrack.apply(this, arguments);\n sender._pc = this;\n return sender;\n };\n }\n window.RTCRtpSender.prototype.getStats = function getStats() {\n return this.track ? this._pc.getStats(this.track) :\n Promise.resolve(new Map());\n };\n}\n\nexport function shimReceiverGetStats(window) {\n if (!(typeof window === 'object' && window.RTCPeerConnection &&\n window.RTCRtpSender)) {\n return;\n }\n if (window.RTCRtpSender && 'getStats' in window.RTCRtpReceiver.prototype) {\n return;\n }\n const origGetReceivers = window.RTCPeerConnection.prototype.getReceivers;\n if (origGetReceivers) {\n window.RTCPeerConnection.prototype.getReceivers = function getReceivers() {\n const receivers = origGetReceivers.apply(this, []);\n receivers.forEach(receiver => receiver._pc = this);\n return receivers;\n };\n }\n utils.wrapPeerConnectionEvent(window, 'track', e => {\n e.receiver._pc = e.srcElement;\n return e;\n });\n window.RTCRtpReceiver.prototype.getStats = function getStats() {\n return this._pc.getStats(this.track);\n };\n}\n\nexport function shimRemoveStream(window) {\n if (!window.RTCPeerConnection ||\n 'removeStream' in window.RTCPeerConnection.prototype) {\n return;\n }\n window.RTCPeerConnection.prototype.removeStream =\n function removeStream(stream) {\n utils.deprecated('removeStream', 'removeTrack');\n this.getSenders().forEach(sender => {\n if (sender.track && stream.getTracks().includes(sender.track)) {\n this.removeTrack(sender);\n }\n });\n };\n}\n\nexport function shimRTCDataChannel(window) {\n // rename DataChannel to RTCDataChannel (native fix in FF60):\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1173851\n if (window.DataChannel && !window.RTCDataChannel) {\n window.RTCDataChannel = window.DataChannel;\n }\n}\n\nexport function shimAddTransceiver(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!(typeof window === 'object' && window.RTCPeerConnection)) {\n return;\n }\n const origAddTransceiver = window.RTCPeerConnection.prototype.addTransceiver;\n if (origAddTransceiver) {\n window.RTCPeerConnection.prototype.addTransceiver =\n function addTransceiver() {\n this.setParametersPromises = [];\n // WebIDL input coercion and validation\n let sendEncodings = arguments[1] && arguments[1].sendEncodings;\n if (sendEncodings === undefined) {\n sendEncodings = [];\n }\n sendEncodings = [...sendEncodings];\n const shouldPerformCheck = sendEncodings.length > 0;\n if (shouldPerformCheck) {\n // If sendEncodings params are provided, validate grammar\n sendEncodings.forEach((encodingParam) => {\n if ('rid' in encodingParam) {\n const ridRegex = /^[a-z0-9]{0,16}$/i;\n if (!ridRegex.test(encodingParam.rid)) {\n throw new TypeError('Invalid RID value provided.');\n }\n }\n if ('scaleResolutionDownBy' in encodingParam) {\n if (!(parseFloat(encodingParam.scaleResolutionDownBy) >= 1.0)) {\n throw new RangeError('scale_resolution_down_by must be >= 1.0');\n }\n }\n if ('maxFramerate' in encodingParam) {\n if (!(parseFloat(encodingParam.maxFramerate) >= 0)) {\n throw new RangeError('max_framerate must be >= 0.0');\n }\n }\n });\n }\n const transceiver = origAddTransceiver.apply(this, arguments);\n if (shouldPerformCheck) {\n // Check if the init options were applied. If not we do this in an\n // asynchronous way and save the promise reference in a global object.\n // This is an ugly hack, but at the same time is way more robust than\n // checking the sender parameters before and after the createOffer\n // Also note that after the createoffer we are not 100% sure that\n // the params were asynchronously applied so we might miss the\n // opportunity to recreate offer.\n const {sender} = transceiver;\n const params = sender.getParameters();\n if (!('encodings' in params) ||\n // Avoid being fooled by patched getParameters() below.\n (params.encodings.length === 1 &&\n Object.keys(params.encodings[0]).length === 0)) {\n params.encodings = sendEncodings;\n sender.sendEncodings = sendEncodings;\n this.setParametersPromises.push(sender.setParameters(params)\n .then(() => {\n delete sender.sendEncodings;\n }).catch(() => {\n delete sender.sendEncodings;\n })\n );\n }\n }\n return transceiver;\n };\n }\n}\n\nexport function shimGetParameters(window) {\n if (!(typeof window === 'object' && window.RTCRtpSender)) {\n return;\n }\n const origGetParameters = window.RTCRtpSender.prototype.getParameters;\n if (origGetParameters) {\n window.RTCRtpSender.prototype.getParameters =\n function getParameters() {\n const params = origGetParameters.apply(this, arguments);\n if (!('encodings' in params)) {\n params.encodings = [].concat(this.sendEncodings || [{}]);\n }\n return params;\n };\n }\n}\n\nexport function shimCreateOffer(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!(typeof window === 'object' && window.RTCPeerConnection)) {\n return;\n }\n const origCreateOffer = window.RTCPeerConnection.prototype.createOffer;\n window.RTCPeerConnection.prototype.createOffer = function createOffer() {\n if (this.setParametersPromises && this.setParametersPromises.length) {\n return Promise.all(this.setParametersPromises)\n .then(() => {\n return origCreateOffer.apply(this, arguments);\n })\n .finally(() => {\n this.setParametersPromises = [];\n });\n }\n return origCreateOffer.apply(this, arguments);\n };\n}\n\nexport function shimCreateAnswer(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!(typeof window === 'object' && window.RTCPeerConnection)) {\n return;\n }\n const origCreateAnswer = window.RTCPeerConnection.prototype.createAnswer;\n window.RTCPeerConnection.prototype.createAnswer = function createAnswer() {\n if (this.setParametersPromises && this.setParametersPromises.length) {\n return Promise.all(this.setParametersPromises)\n .then(() => {\n return origCreateAnswer.apply(this, arguments);\n })\n .finally(() => {\n this.setParametersPromises = [];\n });\n }\n return origCreateAnswer.apply(this, arguments);\n };\n}\n","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\n\nimport * as utils from '../utils';\n\nexport function shimGetUserMedia(window, browserDetails) {\n const navigator = window && window.navigator;\n const MediaStreamTrack = window && window.MediaStreamTrack;\n\n navigator.getUserMedia = function(constraints, onSuccess, onError) {\n // Replace Firefox 44+'s deprecation warning with unprefixed version.\n utils.deprecated('navigator.getUserMedia',\n 'navigator.mediaDevices.getUserMedia');\n navigator.mediaDevices.getUserMedia(constraints).then(onSuccess, onError);\n };\n\n if (!(browserDetails.version > 55 &&\n 'autoGainControl' in navigator.mediaDevices.getSupportedConstraints())) {\n const remap = function(obj, a, b) {\n if (a in obj && !(b in obj)) {\n obj[b] = obj[a];\n delete obj[a];\n }\n };\n\n const nativeGetUserMedia = navigator.mediaDevices.getUserMedia.\n bind(navigator.mediaDevices);\n navigator.mediaDevices.getUserMedia = function(c) {\n if (typeof c === 'object' && typeof c.audio === 'object') {\n c = JSON.parse(JSON.stringify(c));\n remap(c.audio, 'autoGainControl', 'mozAutoGainControl');\n remap(c.audio, 'noiseSuppression', 'mozNoiseSuppression');\n }\n return nativeGetUserMedia(c);\n };\n\n if (MediaStreamTrack && MediaStreamTrack.prototype.getSettings) {\n const nativeGetSettings = MediaStreamTrack.prototype.getSettings;\n MediaStreamTrack.prototype.getSettings = function() {\n const obj = nativeGetSettings.apply(this, arguments);\n remap(obj, 'mozAutoGainControl', 'autoGainControl');\n remap(obj, 'mozNoiseSuppression', 'noiseSuppression');\n return obj;\n };\n }\n\n if (MediaStreamTrack && MediaStreamTrack.prototype.applyConstraints) {\n const nativeApplyConstraints =\n MediaStreamTrack.prototype.applyConstraints;\n MediaStreamTrack.prototype.applyConstraints = function(c) {\n if (this.kind === 'audio' && typeof c === 'object') {\n c = JSON.parse(JSON.stringify(c));\n remap(c, 'autoGainControl', 'mozAutoGainControl');\n remap(c, 'noiseSuppression', 'mozNoiseSuppression');\n }\n return nativeApplyConstraints.apply(this, [c]);\n };\n }\n }\n}\n","/*\n * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\n\nexport function shimGetDisplayMedia(window, preferredMediaSource) {\n if (window.navigator.mediaDevices &&\n 'getDisplayMedia' in window.navigator.mediaDevices) {\n return;\n }\n if (!(window.navigator.mediaDevices)) {\n return;\n }\n window.navigator.mediaDevices.getDisplayMedia =\n function getDisplayMedia(constraints) {\n if (!(constraints && constraints.video)) {\n const err = new DOMException('getDisplayMedia without video ' +\n 'constraints is undefined');\n err.name = 'NotFoundError';\n // from https://heycam.github.io/webidl/#idl-DOMException-error-names\n err.code = 8;\n return Promise.reject(err);\n }\n if (constraints.video === true) {\n constraints.video = {mediaSource: preferredMediaSource};\n } else {\n constraints.video.mediaSource = preferredMediaSource;\n }\n return window.navigator.mediaDevices.getUserMedia(constraints);\n };\n}\n","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n'use strict';\nimport * as utils from '../utils';\n\nexport function shimLocalStreamsAPI(window) {\n if (typeof window !== 'object' || !window.RTCPeerConnection) {\n return;\n }\n if (!('getLocalStreams' in window.RTCPeerConnection.prototype)) {\n window.RTCPeerConnection.prototype.getLocalStreams =\n function getLocalStreams() {\n if (!this._localStreams) {\n this._localStreams = [];\n }\n return this._localStreams;\n };\n }\n if (!('addStream' in window.RTCPeerConnection.prototype)) {\n const _addTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n if (!this._localStreams) {\n this._localStreams = [];\n }\n if (!this._localStreams.includes(stream)) {\n this._localStreams.push(stream);\n }\n // Try to emulate Chrome's behaviour of adding in audio-video order.\n // Safari orders by track id.\n stream.getAudioTracks().forEach(track => _addTrack.call(this, track,\n stream));\n stream.getVideoTracks().forEach(track => _addTrack.call(this, track,\n stream));\n };\n\n window.RTCPeerConnection.prototype.addTrack =\n function addTrack(track, ...streams) {\n if (streams) {\n streams.forEach((stream) => {\n if (!this._localStreams) {\n this._localStreams = [stream];\n } else if (!this._localStreams.includes(stream)) {\n this._localStreams.push(stream);\n }\n });\n }\n return _addTrack.apply(this, arguments);\n };\n }\n if (!('removeStream' in window.RTCPeerConnection.prototype)) {\n window.RTCPeerConnection.prototype.removeStream =\n function removeStream(stream) {\n if (!this._localStreams) {\n this._localStreams = [];\n }\n const index = this._localStreams.indexOf(stream);\n if (index === -1) {\n return;\n }\n this._localStreams.splice(index, 1);\n const tracks = stream.getTracks();\n this.getSenders().forEach(sender => {\n if (tracks.includes(sender.track)) {\n this.removeTrack(sender);\n }\n });\n };\n }\n}\n\nexport function shimRemoteStreamsAPI(window) {\n if (typeof window !== 'object' || !window.RTCPeerConnection) {\n return;\n }\n if (!('getRemoteStreams' in window.RTCPeerConnection.prototype)) {\n window.RTCPeerConnection.prototype.getRemoteStreams =\n function getRemoteStreams() {\n return this._remoteStreams ? this._remoteStreams : [];\n };\n }\n if (!('onaddstream' in window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, 'onaddstream', {\n get() {\n return this._onaddstream;\n },\n set(f) {\n if (this._onaddstream) {\n this.removeEventListener('addstream', this._onaddstream);\n this.removeEventListener('track', this._onaddstreampoly);\n }\n this.addEventListener('addstream', this._onaddstream = f);\n this.addEventListener('track', this._onaddstreampoly = (e) => {\n e.streams.forEach(stream => {\n if (!this._remoteStreams) {\n this._remoteStreams = [];\n }\n if (this._remoteStreams.includes(stream)) {\n return;\n }\n this._remoteStreams.push(stream);\n const event = new Event('addstream');\n event.stream = stream;\n this.dispatchEvent(event);\n });\n });\n }\n });\n const origSetRemoteDescription =\n window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription =\n function setRemoteDescription() {\n const pc = this;\n if (!this._onaddstreampoly) {\n this.addEventListener('track', this._onaddstreampoly = function(e) {\n e.streams.forEach(stream => {\n if (!pc._remoteStreams) {\n pc._remoteStreams = [];\n }\n if (pc._remoteStreams.indexOf(stream) >= 0) {\n return;\n }\n pc._remoteStreams.push(stream);\n const event = new Event('addstream');\n event.stream = stream;\n pc.dispatchEvent(event);\n });\n });\n }\n return origSetRemoteDescription.apply(pc, arguments);\n };\n }\n}\n\nexport function shimCallbacksAPI(window) {\n if (typeof window !== 'object' || !window.RTCPeerConnection) {\n return;\n }\n const prototype = window.RTCPeerConnection.prototype;\n const origCreateOffer = prototype.createOffer;\n const origCreateAnswer = prototype.createAnswer;\n const setLocalDescription = prototype.setLocalDescription;\n const setRemoteDescription = prototype.setRemoteDescription;\n const addIceCandidate = prototype.addIceCandidate;\n\n prototype.createOffer =\n function createOffer(successCallback, failureCallback) {\n const options = (arguments.length >= 2) ? arguments[2] : arguments[0];\n const promise = origCreateOffer.apply(this, [options]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n\n prototype.createAnswer =\n function createAnswer(successCallback, failureCallback) {\n const options = (arguments.length >= 2) ? arguments[2] : arguments[0];\n const promise = origCreateAnswer.apply(this, [options]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n\n let withCallback = function(description, successCallback, failureCallback) {\n const promise = setLocalDescription.apply(this, [description]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.setLocalDescription = withCallback;\n\n withCallback = function(description, successCallback, failureCallback) {\n const promise = setRemoteDescription.apply(this, [description]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.setRemoteDescription = withCallback;\n\n withCallback = function(candidate, successCallback, failureCallback) {\n const promise = addIceCandidate.apply(this, [candidate]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.addIceCandidate = withCallback;\n}\n\nexport function shimGetUserMedia(window) {\n const navigator = window && window.navigator;\n\n if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\n // shim not needed in Safari 12.1\n const mediaDevices = navigator.mediaDevices;\n const _getUserMedia = mediaDevices.getUserMedia.bind(mediaDevices);\n navigator.mediaDevices.getUserMedia = (constraints) => {\n return _getUserMedia(shimConstraints(constraints));\n };\n }\n\n if (!navigator.getUserMedia && navigator.mediaDevices &&\n navigator.mediaDevices.getUserMedia) {\n navigator.getUserMedia = function getUserMedia(constraints, cb, errcb) {\n navigator.mediaDevices.getUserMedia(constraints)\n .then(cb, errcb);\n }.bind(navigator);\n }\n}\n\nexport function shimConstraints(constraints) {\n if (constraints && constraints.video !== undefined) {\n return Object.assign({},\n constraints,\n {video: utils.compactObject(constraints.video)}\n );\n }\n\n return constraints;\n}\n\nexport function shimRTCIceServerUrls(window) {\n if (!window.RTCPeerConnection) {\n return;\n }\n // migrate from non-spec RTCIceServer.url to RTCIceServer.urls\n const OrigPeerConnection = window.RTCPeerConnection;\n window.RTCPeerConnection =\n function RTCPeerConnection(pcConfig, pcConstraints) {\n if (pcConfig && pcConfig.iceServers) {\n const newIceServers = [];\n for (let i = 0; i < pcConfig.iceServers.length; i++) {\n let server = pcConfig.iceServers[i];\n if (server.urls === undefined && server.url) {\n utils.deprecated('RTCIceServer.url', 'RTCIceServer.urls');\n server = JSON.parse(JSON.stringify(server));\n server.urls = server.url;\n delete server.url;\n newIceServers.push(server);\n } else {\n newIceServers.push(pcConfig.iceServers[i]);\n }\n }\n pcConfig.iceServers = newIceServers;\n }\n return new OrigPeerConnection(pcConfig, pcConstraints);\n };\n window.RTCPeerConnection.prototype = OrigPeerConnection.prototype;\n // wrap static methods. Currently just generateCertificate.\n if ('generateCertificate' in OrigPeerConnection) {\n Object.defineProperty(window.RTCPeerConnection, 'generateCertificate', {\n get() {\n return OrigPeerConnection.generateCertificate;\n }\n });\n }\n}\n\nexport function shimTrackEventTransceiver(window) {\n // Add event.transceiver member over deprecated event.receiver\n if (typeof window === 'object' && window.RTCTrackEvent &&\n 'receiver' in window.RTCTrackEvent.prototype &&\n !('transceiver' in window.RTCTrackEvent.prototype)) {\n Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', {\n get() {\n return {receiver: this.receiver};\n }\n });\n }\n}\n\nexport function shimCreateOfferLegacy(window) {\n const origCreateOffer = window.RTCPeerConnection.prototype.createOffer;\n window.RTCPeerConnection.prototype.createOffer =\n function createOffer(offerOptions) {\n if (offerOptions) {\n if (typeof offerOptions.offerToReceiveAudio !== 'undefined') {\n // support bit values\n offerOptions.offerToReceiveAudio =\n !!offerOptions.offerToReceiveAudio;\n }\n const audioTransceiver = this.getTransceivers().find(transceiver =>\n transceiver.receiver.track.kind === 'audio');\n if (offerOptions.offerToReceiveAudio === false && audioTransceiver) {\n if (audioTransceiver.direction === 'sendrecv') {\n if (audioTransceiver.setDirection) {\n audioTransceiver.setDirection('sendonly');\n } else {\n audioTransceiver.direction = 'sendonly';\n }\n } else if (audioTransceiver.direction === 'recvonly') {\n if (audioTransceiver.setDirection) {\n audioTransceiver.setDirection('inactive');\n } else {\n audioTransceiver.direction = 'inactive';\n }\n }\n } else if (offerOptions.offerToReceiveAudio === true &&\n !audioTransceiver) {\n this.addTransceiver('audio', {direction: 'recvonly'});\n }\n\n if (typeof offerOptions.offerToReceiveVideo !== 'undefined') {\n // support bit values\n offerOptions.offerToReceiveVideo =\n !!offerOptions.offerToReceiveVideo;\n }\n const videoTransceiver = this.getTransceivers().find(transceiver =>\n transceiver.receiver.track.kind === 'video');\n if (offerOptions.offerToReceiveVideo === false && videoTransceiver) {\n if (videoTransceiver.direction === 'sendrecv') {\n if (videoTransceiver.setDirection) {\n videoTransceiver.setDirection('sendonly');\n } else {\n videoTransceiver.direction = 'sendonly';\n }\n } else if (videoTransceiver.direction === 'recvonly') {\n if (videoTransceiver.setDirection) {\n videoTransceiver.setDirection('inactive');\n } else {\n videoTransceiver.direction = 'inactive';\n }\n }\n } else if (offerOptions.offerToReceiveVideo === true &&\n !videoTransceiver) {\n this.addTransceiver('video', {direction: 'recvonly'});\n }\n }\n return origCreateOffer.apply(this, arguments);\n };\n}\n\nexport function shimAudioContext(window) {\n if (typeof window !== 'object' || window.AudioContext) {\n return;\n }\n window.AudioContext = window.webkitAudioContext;\n}\n\n","/*\n * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\n\nimport SDPUtils from 'sdp';\nimport * as utils from './utils';\n\nexport function shimRTCIceCandidate(window) {\n // foundation is arbitrarily chosen as an indicator for full support for\n // https://w3c.github.io/webrtc-pc/#rtcicecandidate-interface\n if (!window.RTCIceCandidate || (window.RTCIceCandidate && 'foundation' in\n window.RTCIceCandidate.prototype)) {\n return;\n }\n\n const NativeRTCIceCandidate = window.RTCIceCandidate;\n window.RTCIceCandidate = function RTCIceCandidate(args) {\n // Remove the a= which shouldn't be part of the candidate string.\n if (typeof args === 'object' && args.candidate &&\n args.candidate.indexOf('a=') === 0) {\n args = JSON.parse(JSON.stringify(args));\n args.candidate = args.candidate.substring(2);\n }\n\n if (args.candidate && args.candidate.length) {\n // Augment the native candidate with the parsed fields.\n const nativeCandidate = new NativeRTCIceCandidate(args);\n const parsedCandidate = SDPUtils.parseCandidate(args.candidate);\n for (const key in parsedCandidate) {\n if (!(key in nativeCandidate)) {\n Object.defineProperty(nativeCandidate, key,\n {value: parsedCandidate[key]});\n }\n }\n\n // Override serializer to not serialize the extra attributes.\n nativeCandidate.toJSON = function toJSON() {\n return {\n candidate: nativeCandidate.candidate,\n sdpMid: nativeCandidate.sdpMid,\n sdpMLineIndex: nativeCandidate.sdpMLineIndex,\n usernameFragment: nativeCandidate.usernameFragment,\n };\n };\n return nativeCandidate;\n }\n return new NativeRTCIceCandidate(args);\n };\n window.RTCIceCandidate.prototype = NativeRTCIceCandidate.prototype;\n\n // Hook up the augmented candidate in onicecandidate and\n // addEventListener('icecandidate', ...)\n utils.wrapPeerConnectionEvent(window, 'icecandidate', e => {\n if (e.candidate) {\n Object.defineProperty(e, 'candidate', {\n value: new window.RTCIceCandidate(e.candidate),\n writable: 'false'\n });\n }\n return e;\n });\n}\n\nexport function shimRTCIceCandidateRelayProtocol(window) {\n if (!window.RTCIceCandidate || (window.RTCIceCandidate && 'relayProtocol' in\n window.RTCIceCandidate.prototype)) {\n return;\n }\n\n // Hook up the augmented candidate in onicecandidate and\n // addEventListener('icecandidate', ...)\n utils.wrapPeerConnectionEvent(window, 'icecandidate', e => {\n if (e.candidate) {\n const parsedCandidate = SDPUtils.parseCandidate(e.candidate.candidate);\n if (parsedCandidate.type === 'relay') {\n // This is a libwebrtc-specific mapping of local type preference\n // to relayProtocol.\n e.candidate.relayProtocol = {\n 0: 'tls',\n 1: 'tcp',\n 2: 'udp',\n }[parsedCandidate.priority >> 24];\n }\n }\n return e;\n });\n}\n\nexport function shimMaxMessageSize(window, browserDetails) {\n if (!window.RTCPeerConnection) {\n return;\n }\n\n if (!('sctp' in window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, 'sctp', {\n get() {\n return typeof this._sctp === 'undefined' ? null : this._sctp;\n }\n });\n }\n\n const sctpInDescription = function(description) {\n if (!description || !description.sdp) {\n return false;\n }\n const sections = SDPUtils.splitSections(description.sdp);\n sections.shift();\n return sections.some(mediaSection => {\n const mLine = SDPUtils.parseMLine(mediaSection);\n return mLine && mLine.kind === 'application'\n && mLine.protocol.indexOf('SCTP') !== -1;\n });\n };\n\n const getRemoteFirefoxVersion = function(description) {\n // TODO: Is there a better solution for detecting Firefox?\n const match = description.sdp.match(/mozilla...THIS_IS_SDPARTA-(\\d+)/);\n if (match === null || match.length < 2) {\n return -1;\n }\n const version = parseInt(match[1], 10);\n // Test for NaN (yes, this is ugly)\n return version !== version ? -1 : version;\n };\n\n const getCanSendMaxMessageSize = function(remoteIsFirefox) {\n // Every implementation we know can send at least 64 KiB.\n // Note: Although Chrome is technically able to send up to 256 KiB, the\n // data does not reach the other peer reliably.\n // See: https://bugs.chromium.org/p/webrtc/issues/detail?id=8419\n let canSendMaxMessageSize = 65536;\n if (browserDetails.browser === 'firefox') {\n if (browserDetails.version < 57) {\n if (remoteIsFirefox === -1) {\n // FF < 57 will send in 16 KiB chunks using the deprecated PPID\n // fragmentation.\n canSendMaxMessageSize = 16384;\n } else {\n // However, other FF (and RAWRTC) can reassemble PPID-fragmented\n // messages. Thus, supporting ~2 GiB when sending.\n canSendMaxMessageSize = 2147483637;\n }\n } else if (browserDetails.version < 60) {\n // Currently, all FF >= 57 will reset the remote maximum message size\n // to the default value when a data channel is created at a later\n // stage. :(\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831\n canSendMaxMessageSize =\n browserDetails.version === 57 ? 65535 : 65536;\n } else {\n // FF >= 60 supports sending ~2 GiB\n canSendMaxMessageSize = 2147483637;\n }\n }\n return canSendMaxMessageSize;\n };\n\n const getMaxMessageSize = function(description, remoteIsFirefox) {\n // Note: 65536 bytes is the default value from the SDP spec. Also,\n // every implementation we know supports receiving 65536 bytes.\n let maxMessageSize = 65536;\n\n // FF 57 has a slightly incorrect default remote max message size, so\n // we need to adjust it here to avoid a failure when sending.\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1425697\n if (browserDetails.browser === 'firefox'\n && browserDetails.version === 57) {\n maxMessageSize = 65535;\n }\n\n const match = SDPUtils.matchPrefix(description.sdp,\n 'a=max-message-size:');\n if (match.length > 0) {\n maxMessageSize = parseInt(match[0].substring(19), 10);\n } else if (browserDetails.browser === 'firefox' &&\n remoteIsFirefox !== -1) {\n // If the maximum message size is not present in the remote SDP and\n // both local and remote are Firefox, the remote peer can receive\n // ~2 GiB.\n maxMessageSize = 2147483637;\n }\n return maxMessageSize;\n };\n\n const origSetRemoteDescription =\n window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription =\n function setRemoteDescription() {\n this._sctp = null;\n // Chrome decided to not expose .sctp in plan-b mode.\n // As usual, adapter.js has to do an 'ugly worakaround'\n // to cover up the mess.\n if (browserDetails.browser === 'chrome' && browserDetails.version >= 76) {\n const {sdpSemantics} = this.getConfiguration();\n if (sdpSemantics === 'plan-b') {\n Object.defineProperty(this, 'sctp', {\n get() {\n return typeof this._sctp === 'undefined' ? null : this._sctp;\n },\n enumerable: true,\n configurable: true,\n });\n }\n }\n\n if (sctpInDescription(arguments[0])) {\n // Check if the remote is FF.\n const isFirefox = getRemoteFirefoxVersion(arguments[0]);\n\n // Get the maximum message size the local peer is capable of sending\n const canSendMMS = getCanSendMaxMessageSize(isFirefox);\n\n // Get the maximum message size of the remote peer.\n const remoteMMS = getMaxMessageSize(arguments[0], isFirefox);\n\n // Determine final maximum message size\n let maxMessageSize;\n if (canSendMMS === 0 && remoteMMS === 0) {\n maxMessageSize = Number.POSITIVE_INFINITY;\n } else if (canSendMMS === 0 || remoteMMS === 0) {\n maxMessageSize = Math.max(canSendMMS, remoteMMS);\n } else {\n maxMessageSize = Math.min(canSendMMS, remoteMMS);\n }\n\n // Create a dummy RTCSctpTransport object and the 'maxMessageSize'\n // attribute.\n const sctp = {};\n Object.defineProperty(sctp, 'maxMessageSize', {\n get() {\n return maxMessageSize;\n }\n });\n this._sctp = sctp;\n }\n\n return origSetRemoteDescription.apply(this, arguments);\n };\n}\n\nexport function shimSendThrowTypeError(window) {\n if (!(window.RTCPeerConnection &&\n 'createDataChannel' in window.RTCPeerConnection.prototype)) {\n return;\n }\n\n // Note: Although Firefox >= 57 has a native implementation, the maximum\n // message size can be reset for all data channels at a later stage.\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831\n\n function wrapDcSend(dc, pc) {\n const origDataChannelSend = dc.send;\n dc.send = function send() {\n const data = arguments[0];\n const length = data.length || data.size || data.byteLength;\n if (dc.readyState === 'open' &&\n pc.sctp && length > pc.sctp.maxMessageSize) {\n throw new TypeError('Message too large (can send a maximum of ' +\n pc.sctp.maxMessageSize + ' bytes)');\n }\n return origDataChannelSend.apply(dc, arguments);\n };\n }\n const origCreateDataChannel =\n window.RTCPeerConnection.prototype.createDataChannel;\n window.RTCPeerConnection.prototype.createDataChannel =\n function createDataChannel() {\n const dataChannel = origCreateDataChannel.apply(this, arguments);\n wrapDcSend(dataChannel, this);\n return dataChannel;\n };\n utils.wrapPeerConnectionEvent(window, 'datachannel', e => {\n wrapDcSend(e.channel, e.target);\n return e;\n });\n}\n\n\n/* shims RTCConnectionState by pretending it is the same as iceConnectionState.\n * See https://bugs.chromium.org/p/webrtc/issues/detail?id=6145#c12\n * for why this is a valid hack in Chrome. In Firefox it is slightly incorrect\n * since DTLS failures would be hidden. See\n * https://bugzilla.mozilla.org/show_bug.cgi?id=1265827\n * for the Firefox tracking bug.\n */\nexport function shimConnectionState(window) {\n if (!window.RTCPeerConnection ||\n 'connectionState' in window.RTCPeerConnection.prototype) {\n return;\n }\n const proto = window.RTCPeerConnection.prototype;\n Object.defineProperty(proto, 'connectionState', {\n get() {\n return {\n completed: 'connected',\n checking: 'connecting'\n }[this.iceConnectionState] || this.iceConnectionState;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(proto, 'onconnectionstatechange', {\n get() {\n return this._onconnectionstatechange || null;\n },\n set(cb) {\n if (this._onconnectionstatechange) {\n this.removeEventListener('connectionstatechange',\n this._onconnectionstatechange);\n delete this._onconnectionstatechange;\n }\n if (cb) {\n this.addEventListener('connectionstatechange',\n this._onconnectionstatechange = cb);\n }\n },\n enumerable: true,\n configurable: true\n });\n\n ['setLocalDescription', 'setRemoteDescription'].forEach((method) => {\n const origMethod = proto[method];\n proto[method] = function() {\n if (!this._connectionstatechangepoly) {\n this._connectionstatechangepoly = e => {\n const pc = e.target;\n if (pc._lastConnectionState !== pc.connectionState) {\n pc._lastConnectionState = pc.connectionState;\n const newEvent = new Event('connectionstatechange', e);\n pc.dispatchEvent(newEvent);\n }\n return e;\n };\n this.addEventListener('iceconnectionstatechange',\n this._connectionstatechangepoly);\n }\n return origMethod.apply(this, arguments);\n };\n });\n}\n\nexport function removeExtmapAllowMixed(window, browserDetails) {\n /* remove a=extmap-allow-mixed for webrtc.org < M71 */\n if (!window.RTCPeerConnection) {\n return;\n }\n if (browserDetails.browser === 'chrome' && browserDetails.version >= 71) {\n return;\n }\n if (browserDetails.browser === 'safari' && browserDetails.version >= 605) {\n return;\n }\n const nativeSRD = window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription =\n function setRemoteDescription(desc) {\n if (desc && desc.sdp && desc.sdp.indexOf('\\na=extmap-allow-mixed') !== -1) {\n const sdp = desc.sdp.split('\\n').filter((line) => {\n return line.trim() !== 'a=extmap-allow-mixed';\n }).join('\\n');\n // Safari enforces read-only-ness of RTCSessionDescription fields.\n if (window.RTCSessionDescription &&\n desc instanceof window.RTCSessionDescription) {\n arguments[0] = new window.RTCSessionDescription({\n type: desc.type,\n sdp,\n });\n } else {\n desc.sdp = sdp;\n }\n }\n return nativeSRD.apply(this, arguments);\n };\n}\n\nexport function shimAddIceCandidateNullOrEmpty(window, browserDetails) {\n // Support for addIceCandidate(null or undefined)\n // as well as addIceCandidate({candidate: \"\", ...})\n // https://bugs.chromium.org/p/chromium/issues/detail?id=978582\n // Note: must be called before other polyfills which change the signature.\n if (!(window.RTCPeerConnection && window.RTCPeerConnection.prototype)) {\n return;\n }\n const nativeAddIceCandidate =\n window.RTCPeerConnection.prototype.addIceCandidate;\n if (!nativeAddIceCandidate || nativeAddIceCandidate.length === 0) {\n return;\n }\n window.RTCPeerConnection.prototype.addIceCandidate =\n function addIceCandidate() {\n if (!arguments[0]) {\n if (arguments[1]) {\n arguments[1].apply(null);\n }\n return Promise.resolve();\n }\n // Firefox 68+ emits and processes {candidate: \"\", ...}, ignore\n // in older versions.\n // Native support for ignoring exists for Chrome M77+.\n // Safari ignores as well, exact version unknown but works in the same\n // version that also ignores addIceCandidate(null).\n if (((browserDetails.browser === 'chrome' && browserDetails.version < 78)\n || (browserDetails.browser === 'firefox'\n && browserDetails.version < 68)\n || (browserDetails.browser === 'safari'))\n && arguments[0] && arguments[0].candidate === '') {\n return Promise.resolve();\n }\n return nativeAddIceCandidate.apply(this, arguments);\n };\n}\n\n// Note: Make sure to call this ahead of APIs that modify\n// setLocalDescription.length\nexport function shimParameterlessSetLocalDescription(window, browserDetails) {\n if (!(window.RTCPeerConnection && window.RTCPeerConnection.prototype)) {\n return;\n }\n const nativeSetLocalDescription =\n window.RTCPeerConnection.prototype.setLocalDescription;\n if (!nativeSetLocalDescription || nativeSetLocalDescription.length === 0) {\n return;\n }\n window.RTCPeerConnection.prototype.setLocalDescription =\n function setLocalDescription() {\n let desc = arguments[0] || {};\n if (typeof desc !== 'object' || (desc.type && desc.sdp)) {\n return nativeSetLocalDescription.apply(this, arguments);\n }\n // The remaining steps should technically happen when SLD comes off the\n // RTCPeerConnection's operations chain (not ahead of going on it), but\n // this is too difficult to shim. Instead, this shim only covers the\n // common case where the operations chain is empty. This is imperfect, but\n // should cover many cases. Rationale: Even if we can't reduce the glare\n // window to zero on imperfect implementations, there's value in tapping\n // into the perfect negotiation pattern that several browsers support.\n desc = {type: desc.type, sdp: desc.sdp};\n if (!desc.type) {\n switch (this.signalingState) {\n case 'stable':\n case 'have-local-offer':\n case 'have-remote-pranswer':\n desc.type = 'offer';\n break;\n default:\n desc.type = 'answer';\n break;\n }\n }\n if (desc.sdp || (desc.type !== 'offer' && desc.type !== 'answer')) {\n return nativeSetLocalDescription.apply(this, [desc]);\n }\n const func = desc.type === 'offer' ? this.createOffer : this.createAnswer;\n return func.apply(this)\n .then(d => nativeSetLocalDescription.apply(this, [d]));\n };\n}\n","/* eslint-env node */\n'use strict';\n\n// SDP helpers.\nconst SDPUtils = {};\n\n// Generate an alphanumeric identifier for cname or mids.\n// TODO: use UUIDs instead? https://gist.github.com/jed/982883\nSDPUtils.generateIdentifier = function() {\n return Math.random().toString(36).substring(2, 12);\n};\n\n// The RTCP CNAME used by all peerconnections from the same JS.\nSDPUtils.localCName = SDPUtils.generateIdentifier();\n\n// Splits SDP into lines, dealing with both CRLF and LF.\nSDPUtils.splitLines = function(blob) {\n return blob.trim().split('\\n').map(line => line.trim());\n};\n// Splits SDP into sessionpart and mediasections. Ensures CRLF.\nSDPUtils.splitSections = function(blob) {\n const parts = blob.split('\\nm=');\n return parts.map((part, index) => (index > 0 ?\n 'm=' + part : part).trim() + '\\r\\n');\n};\n\n// Returns the session description.\nSDPUtils.getDescription = function(blob) {\n const sections = SDPUtils.splitSections(blob);\n return sections && sections[0];\n};\n\n// Returns the individual media sections.\nSDPUtils.getMediaSections = function(blob) {\n const sections = SDPUtils.splitSections(blob);\n sections.shift();\n return sections;\n};\n\n// Returns lines that start with a certain prefix.\nSDPUtils.matchPrefix = function(blob, prefix) {\n return SDPUtils.splitLines(blob).filter(line => line.indexOf(prefix) === 0);\n};\n\n// Parses an ICE candidate line. Sample input:\n// candidate:702786350 2 udp 41819902 8.8.8.8 60769 typ relay raddr 8.8.8.8\n// rport 55996\"\n// Input can be prefixed with a=.\nSDPUtils.parseCandidate = function(line) {\n let parts;\n // Parse both variants.\n if (line.indexOf('a=candidate:') === 0) {\n parts = line.substring(12).split(' ');\n } else {\n parts = line.substring(10).split(' ');\n }\n\n const candidate = {\n foundation: parts[0],\n component: {1: 'rtp', 2: 'rtcp'}[parts[1]] || parts[1],\n protocol: parts[2].toLowerCase(),\n priority: parseInt(parts[3], 10),\n ip: parts[4],\n address: parts[4], // address is an alias for ip.\n port: parseInt(parts[5], 10),\n // skip parts[6] == 'typ'\n type: parts[7],\n };\n\n for (let i = 8; i < parts.length; i += 2) {\n switch (parts[i]) {\n case 'raddr':\n candidate.relatedAddress = parts[i + 1];\n break;\n case 'rport':\n candidate.relatedPort = parseInt(parts[i + 1], 10);\n break;\n case 'tcptype':\n candidate.tcpType = parts[i + 1];\n break;\n case 'ufrag':\n candidate.ufrag = parts[i + 1]; // for backward compatibility.\n candidate.usernameFragment = parts[i + 1];\n break;\n default: // extension handling, in particular ufrag. Don't overwrite.\n if (candidate[parts[i]] === undefined) {\n candidate[parts[i]] = parts[i + 1];\n }\n break;\n }\n }\n return candidate;\n};\n\n// Translates a candidate object into SDP candidate attribute.\n// This does not include the a= prefix!\nSDPUtils.writeCandidate = function(candidate) {\n const sdp = [];\n sdp.push(candidate.foundation);\n\n const component = candidate.component;\n if (component === 'rtp') {\n sdp.push(1);\n } else if (component === 'rtcp') {\n sdp.push(2);\n } else {\n sdp.push(component);\n }\n sdp.push(candidate.protocol.toUpperCase());\n sdp.push(candidate.priority);\n sdp.push(candidate.address || candidate.ip);\n sdp.push(candidate.port);\n\n const type = candidate.type;\n sdp.push('typ');\n sdp.push(type);\n if (type !== 'host' && candidate.relatedAddress &&\n candidate.relatedPort) {\n sdp.push('raddr');\n sdp.push(candidate.relatedAddress);\n sdp.push('rport');\n sdp.push(candidate.relatedPort);\n }\n if (candidate.tcpType && candidate.protocol.toLowerCase() === 'tcp') {\n sdp.push('tcptype');\n sdp.push(candidate.tcpType);\n }\n if (candidate.usernameFragment || candidate.ufrag) {\n sdp.push('ufrag');\n sdp.push(candidate.usernameFragment || candidate.ufrag);\n }\n return 'candidate:' + sdp.join(' ');\n};\n\n// Parses an ice-options line, returns an array of option tags.\n// Sample input:\n// a=ice-options:foo bar\nSDPUtils.parseIceOptions = function(line) {\n return line.substring(14).split(' ');\n};\n\n// Parses a rtpmap line, returns RTCRtpCoddecParameters. Sample input:\n// a=rtpmap:111 opus/48000/2\nSDPUtils.parseRtpMap = function(line) {\n let parts = line.substring(9).split(' ');\n const parsed = {\n payloadType: parseInt(parts.shift(), 10), // was: id\n };\n\n parts = parts[0].split('/');\n\n parsed.name = parts[0];\n parsed.clockRate = parseInt(parts[1], 10); // was: clockrate\n parsed.channels = parts.length === 3 ? parseInt(parts[2], 10) : 1;\n // legacy alias, got renamed back to channels in ORTC.\n parsed.numChannels = parsed.channels;\n return parsed;\n};\n\n// Generates a rtpmap line from RTCRtpCodecCapability or\n// RTCRtpCodecParameters.\nSDPUtils.writeRtpMap = function(codec) {\n let pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n const channels = codec.channels || codec.numChannels || 1;\n return 'a=rtpmap:' + pt + ' ' + codec.name + '/' + codec.clockRate +\n (channels !== 1 ? '/' + channels : '') + '\\r\\n';\n};\n\n// Parses a extmap line (headerextension from RFC 5285). Sample input:\n// a=extmap:2 urn:ietf:params:rtp-hdrext:toffset\n// a=extmap:2/sendonly urn:ietf:params:rtp-hdrext:toffset\nSDPUtils.parseExtmap = function(line) {\n const parts = line.substring(9).split(' ');\n return {\n id: parseInt(parts[0], 10),\n direction: parts[0].indexOf('/') > 0 ? parts[0].split('/')[1] : 'sendrecv',\n uri: parts[1],\n attributes: parts.slice(2).join(' '),\n };\n};\n\n// Generates an extmap line from RTCRtpHeaderExtensionParameters or\n// RTCRtpHeaderExtension.\nSDPUtils.writeExtmap = function(headerExtension) {\n return 'a=extmap:' + (headerExtension.id || headerExtension.preferredId) +\n (headerExtension.direction && headerExtension.direction !== 'sendrecv'\n ? '/' + headerExtension.direction\n : '') +\n ' ' + headerExtension.uri +\n (headerExtension.attributes ? ' ' + headerExtension.attributes : '') +\n '\\r\\n';\n};\n\n// Parses a fmtp line, returns dictionary. Sample input:\n// a=fmtp:96 vbr=on;cng=on\n// Also deals with vbr=on; cng=on\nSDPUtils.parseFmtp = function(line) {\n const parsed = {};\n let kv;\n const parts = line.substring(line.indexOf(' ') + 1).split(';');\n for (let j = 0; j < parts.length; j++) {\n kv = parts[j].trim().split('=');\n parsed[kv[0].trim()] = kv[1];\n }\n return parsed;\n};\n\n// Generates a fmtp line from RTCRtpCodecCapability or RTCRtpCodecParameters.\nSDPUtils.writeFmtp = function(codec) {\n let line = '';\n let pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n if (codec.parameters && Object.keys(codec.parameters).length) {\n const params = [];\n Object.keys(codec.parameters).forEach(param => {\n if (codec.parameters[param] !== undefined) {\n params.push(param + '=' + codec.parameters[param]);\n } else {\n params.push(param);\n }\n });\n line += 'a=fmtp:' + pt + ' ' + params.join(';') + '\\r\\n';\n }\n return line;\n};\n\n// Parses a rtcp-fb line, returns RTCPRtcpFeedback object. Sample input:\n// a=rtcp-fb:98 nack rpsi\nSDPUtils.parseRtcpFb = function(line) {\n const parts = line.substring(line.indexOf(' ') + 1).split(' ');\n return {\n type: parts.shift(),\n parameter: parts.join(' '),\n };\n};\n\n// Generate a=rtcp-fb lines from RTCRtpCodecCapability or RTCRtpCodecParameters.\nSDPUtils.writeRtcpFb = function(codec) {\n let lines = '';\n let pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n if (codec.rtcpFeedback && codec.rtcpFeedback.length) {\n // FIXME: special handling for trr-int?\n codec.rtcpFeedback.forEach(fb => {\n lines += 'a=rtcp-fb:' + pt + ' ' + fb.type +\n (fb.parameter && fb.parameter.length ? ' ' + fb.parameter : '') +\n '\\r\\n';\n });\n }\n return lines;\n};\n\n// Parses a RFC 5576 ssrc media attribute. Sample input:\n// a=ssrc:3735928559 cname:something\nSDPUtils.parseSsrcMedia = function(line) {\n const sp = line.indexOf(' ');\n const parts = {\n ssrc: parseInt(line.substring(7, sp), 10),\n };\n const colon = line.indexOf(':', sp);\n if (colon > -1) {\n parts.attribute = line.substring(sp + 1, colon);\n parts.value = line.substring(colon + 1);\n } else {\n parts.attribute = line.substring(sp + 1);\n }\n return parts;\n};\n\n// Parse a ssrc-group line (see RFC 5576). Sample input:\n// a=ssrc-group:semantics 12 34\nSDPUtils.parseSsrcGroup = function(line) {\n const parts = line.substring(13).split(' ');\n return {\n semantics: parts.shift(),\n ssrcs: parts.map(ssrc => parseInt(ssrc, 10)),\n };\n};\n\n// Extracts the MID (RFC 5888) from a media section.\n// Returns the MID or undefined if no mid line was found.\nSDPUtils.getMid = function(mediaSection) {\n const mid = SDPUtils.matchPrefix(mediaSection, 'a=mid:')[0];\n if (mid) {\n return mid.substring(6);\n }\n};\n\n// Parses a fingerprint line for DTLS-SRTP.\nSDPUtils.parseFingerprint = function(line) {\n const parts = line.substring(14).split(' ');\n return {\n algorithm: parts[0].toLowerCase(), // algorithm is case-sensitive in Edge.\n value: parts[1].toUpperCase(), // the definition is upper-case in RFC 4572.\n };\n};\n\n// Extracts DTLS parameters from SDP media section or sessionpart.\n// FIXME: for consistency with other functions this should only\n// get the fingerprint line as input. See also getIceParameters.\nSDPUtils.getDtlsParameters = function(mediaSection, sessionpart) {\n const lines = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=fingerprint:');\n // Note: a=setup line is ignored since we use the 'auto' role in Edge.\n return {\n role: 'auto',\n fingerprints: lines.map(SDPUtils.parseFingerprint),\n };\n};\n\n// Serializes DTLS parameters to SDP.\nSDPUtils.writeDtlsParameters = function(params, setupType) {\n let sdp = 'a=setup:' + setupType + '\\r\\n';\n params.fingerprints.forEach(fp => {\n sdp += 'a=fingerprint:' + fp.algorithm + ' ' + fp.value + '\\r\\n';\n });\n return sdp;\n};\n\n// Parses a=crypto lines into\n// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#dictionary-rtcsrtpsdesparameters-members\nSDPUtils.parseCryptoLine = function(line) {\n const parts = line.substring(9).split(' ');\n return {\n tag: parseInt(parts[0], 10),\n cryptoSuite: parts[1],\n keyParams: parts[2],\n sessionParams: parts.slice(3),\n };\n};\n\nSDPUtils.writeCryptoLine = function(parameters) {\n return 'a=crypto:' + parameters.tag + ' ' +\n parameters.cryptoSuite + ' ' +\n (typeof parameters.keyParams === 'object'\n ? SDPUtils.writeCryptoKeyParams(parameters.keyParams)\n : parameters.keyParams) +\n (parameters.sessionParams ? ' ' + parameters.sessionParams.join(' ') : '') +\n '\\r\\n';\n};\n\n// Parses the crypto key parameters into\n// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#rtcsrtpkeyparam*\nSDPUtils.parseCryptoKeyParams = function(keyParams) {\n if (keyParams.indexOf('inline:') !== 0) {\n return null;\n }\n const parts = keyParams.substring(7).split('|');\n return {\n keyMethod: 'inline',\n keySalt: parts[0],\n lifeTime: parts[1],\n mkiValue: parts[2] ? parts[2].split(':')[0] : undefined,\n mkiLength: parts[2] ? parts[2].split(':')[1] : undefined,\n };\n};\n\nSDPUtils.writeCryptoKeyParams = function(keyParams) {\n return keyParams.keyMethod + ':'\n + keyParams.keySalt +\n (keyParams.lifeTime ? '|' + keyParams.lifeTime : '') +\n (keyParams.mkiValue && keyParams.mkiLength\n ? '|' + keyParams.mkiValue + ':' + keyParams.mkiLength\n : '');\n};\n\n// Extracts all SDES parameters.\nSDPUtils.getCryptoParameters = function(mediaSection, sessionpart) {\n const lines = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=crypto:');\n return lines.map(SDPUtils.parseCryptoLine);\n};\n\n// Parses ICE information from SDP media section or sessionpart.\n// FIXME: for consistency with other functions this should only\n// get the ice-ufrag and ice-pwd lines as input.\nSDPUtils.getIceParameters = function(mediaSection, sessionpart) {\n const ufrag = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=ice-ufrag:')[0];\n const pwd = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=ice-pwd:')[0];\n if (!(ufrag && pwd)) {\n return null;\n }\n return {\n usernameFragment: ufrag.substring(12),\n password: pwd.substring(10),\n };\n};\n\n// Serializes ICE parameters to SDP.\nSDPUtils.writeIceParameters = function(params) {\n let sdp = 'a=ice-ufrag:' + params.usernameFragment + '\\r\\n' +\n 'a=ice-pwd:' + params.password + '\\r\\n';\n if (params.iceLite) {\n sdp += 'a=ice-lite\\r\\n';\n }\n return sdp;\n};\n\n// Parses the SDP media section and returns RTCRtpParameters.\nSDPUtils.parseRtpParameters = function(mediaSection) {\n const description = {\n codecs: [],\n headerExtensions: [],\n fecMechanisms: [],\n rtcp: [],\n };\n const lines = SDPUtils.splitLines(mediaSection);\n const mline = lines[0].split(' ');\n description.profile = mline[2];\n for (let i = 3; i < mline.length; i++) { // find all codecs from mline[3..]\n const pt = mline[i];\n const rtpmapline = SDPUtils.matchPrefix(\n mediaSection, 'a=rtpmap:' + pt + ' ')[0];\n if (rtpmapline) {\n const codec = SDPUtils.parseRtpMap(rtpmapline);\n const fmtps = SDPUtils.matchPrefix(\n mediaSection, 'a=fmtp:' + pt + ' ');\n // Only the first a=fmtp: is considered.\n codec.parameters = fmtps.length ? SDPUtils.parseFmtp(fmtps[0]) : {};\n codec.rtcpFeedback = SDPUtils.matchPrefix(\n mediaSection, 'a=rtcp-fb:' + pt + ' ')\n .map(SDPUtils.parseRtcpFb);\n description.codecs.push(codec);\n // parse FEC mechanisms from rtpmap lines.\n switch (codec.name.toUpperCase()) {\n case 'RED':\n case 'ULPFEC':\n description.fecMechanisms.push(codec.name.toUpperCase());\n break;\n default: // only RED and ULPFEC are recognized as FEC mechanisms.\n break;\n }\n }\n }\n SDPUtils.matchPrefix(mediaSection, 'a=extmap:').forEach(line => {\n description.headerExtensions.push(SDPUtils.parseExtmap(line));\n });\n const wildcardRtcpFb = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-fb:* ')\n .map(SDPUtils.parseRtcpFb);\n description.codecs.forEach(codec => {\n wildcardRtcpFb.forEach(fb=> {\n const duplicate = codec.rtcpFeedback.find(existingFeedback => {\n return existingFeedback.type === fb.type &&\n existingFeedback.parameter === fb.parameter;\n });\n if (!duplicate) {\n codec.rtcpFeedback.push(fb);\n }\n });\n });\n // FIXME: parse rtcp.\n return description;\n};\n\n// Generates parts of the SDP media section describing the capabilities /\n// parameters.\nSDPUtils.writeRtpDescription = function(kind, caps) {\n let sdp = '';\n\n // Build the mline.\n sdp += 'm=' + kind + ' ';\n sdp += caps.codecs.length > 0 ? '9' : '0'; // reject if no codecs.\n sdp += ' ' + (caps.profile || 'UDP/TLS/RTP/SAVPF') + ' ';\n sdp += caps.codecs.map(codec => {\n if (codec.preferredPayloadType !== undefined) {\n return codec.preferredPayloadType;\n }\n return codec.payloadType;\n }).join(' ') + '\\r\\n';\n\n sdp += 'c=IN IP4 0.0.0.0\\r\\n';\n sdp += 'a=rtcp:9 IN IP4 0.0.0.0\\r\\n';\n\n // Add a=rtpmap lines for each codec. Also fmtp and rtcp-fb.\n caps.codecs.forEach(codec => {\n sdp += SDPUtils.writeRtpMap(codec);\n sdp += SDPUtils.writeFmtp(codec);\n sdp += SDPUtils.writeRtcpFb(codec);\n });\n let maxptime = 0;\n caps.codecs.forEach(codec => {\n if (codec.maxptime > maxptime) {\n maxptime = codec.maxptime;\n }\n });\n if (maxptime > 0) {\n sdp += 'a=maxptime:' + maxptime + '\\r\\n';\n }\n\n if (caps.headerExtensions) {\n caps.headerExtensions.forEach(extension => {\n sdp += SDPUtils.writeExtmap(extension);\n });\n }\n // FIXME: write fecMechanisms.\n return sdp;\n};\n\n// Parses the SDP media section and returns an array of\n// RTCRtpEncodingParameters.\nSDPUtils.parseRtpEncodingParameters = function(mediaSection) {\n const encodingParameters = [];\n const description = SDPUtils.parseRtpParameters(mediaSection);\n const hasRed = description.fecMechanisms.indexOf('RED') !== -1;\n const hasUlpfec = description.fecMechanisms.indexOf('ULPFEC') !== -1;\n\n // filter a=ssrc:... cname:, ignore PlanB-msid\n const ssrcs = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:')\n .map(line => SDPUtils.parseSsrcMedia(line))\n .filter(parts => parts.attribute === 'cname');\n const primarySsrc = ssrcs.length > 0 && ssrcs[0].ssrc;\n let secondarySsrc;\n\n const flows = SDPUtils.matchPrefix(mediaSection, 'a=ssrc-group:FID')\n .map(line => {\n const parts = line.substring(17).split(' ');\n return parts.map(part => parseInt(part, 10));\n });\n if (flows.length > 0 && flows[0].length > 1 && flows[0][0] === primarySsrc) {\n secondarySsrc = flows[0][1];\n }\n\n description.codecs.forEach(codec => {\n if (codec.name.toUpperCase() === 'RTX' && codec.parameters.apt) {\n let encParam = {\n ssrc: primarySsrc,\n codecPayloadType: parseInt(codec.parameters.apt, 10),\n };\n if (primarySsrc && secondarySsrc) {\n encParam.rtx = {ssrc: secondarySsrc};\n }\n encodingParameters.push(encParam);\n if (hasRed) {\n encParam = JSON.parse(JSON.stringify(encParam));\n encParam.fec = {\n ssrc: primarySsrc,\n mechanism: hasUlpfec ? 'red+ulpfec' : 'red',\n };\n encodingParameters.push(encParam);\n }\n }\n });\n if (encodingParameters.length === 0 && primarySsrc) {\n encodingParameters.push({\n ssrc: primarySsrc,\n });\n }\n\n // we support both b=AS and b=TIAS but interpret AS as TIAS.\n let bandwidth = SDPUtils.matchPrefix(mediaSection, 'b=');\n if (bandwidth.length) {\n if (bandwidth[0].indexOf('b=TIAS:') === 0) {\n bandwidth = parseInt(bandwidth[0].substring(7), 10);\n } else if (bandwidth[0].indexOf('b=AS:') === 0) {\n // use formula from JSEP to convert b=AS to TIAS value.\n bandwidth = parseInt(bandwidth[0].substring(5), 10) * 1000 * 0.95\n - (50 * 40 * 8);\n } else {\n bandwidth = undefined;\n }\n encodingParameters.forEach(params => {\n params.maxBitrate = bandwidth;\n });\n }\n return encodingParameters;\n};\n\n// parses http://draft.ortc.org/#rtcrtcpparameters*\nSDPUtils.parseRtcpParameters = function(mediaSection) {\n const rtcpParameters = {};\n\n // Gets the first SSRC. Note that with RTX there might be multiple\n // SSRCs.\n const remoteSsrc = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:')\n .map(line => SDPUtils.parseSsrcMedia(line))\n .filter(obj => obj.attribute === 'cname')[0];\n if (remoteSsrc) {\n rtcpParameters.cname = remoteSsrc.value;\n rtcpParameters.ssrc = remoteSsrc.ssrc;\n }\n\n // Edge uses the compound attribute instead of reducedSize\n // compound is !reducedSize\n const rsize = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-rsize');\n rtcpParameters.reducedSize = rsize.length > 0;\n rtcpParameters.compound = rsize.length === 0;\n\n // parses the rtcp-mux attrіbute.\n // Note that Edge does not support unmuxed RTCP.\n const mux = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-mux');\n rtcpParameters.mux = mux.length > 0;\n\n return rtcpParameters;\n};\n\nSDPUtils.writeRtcpParameters = function(rtcpParameters) {\n let sdp = '';\n if (rtcpParameters.reducedSize) {\n sdp += 'a=rtcp-rsize\\r\\n';\n }\n if (rtcpParameters.mux) {\n sdp += 'a=rtcp-mux\\r\\n';\n }\n if (rtcpParameters.ssrc !== undefined && rtcpParameters.cname) {\n sdp += 'a=ssrc:' + rtcpParameters.ssrc +\n ' cname:' + rtcpParameters.cname + '\\r\\n';\n }\n return sdp;\n};\n\n\n// parses either a=msid: or a=ssrc:... msid lines and returns\n// the id of the MediaStream and MediaStreamTrack.\nSDPUtils.parseMsid = function(mediaSection) {\n let parts;\n const spec = SDPUtils.matchPrefix(mediaSection, 'a=msid:');\n if (spec.length === 1) {\n parts = spec[0].substring(7).split(' ');\n return {stream: parts[0], track: parts[1]};\n }\n const planB = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:')\n .map(line => SDPUtils.parseSsrcMedia(line))\n .filter(msidParts => msidParts.attribute === 'msid');\n if (planB.length > 0) {\n parts = planB[0].value.split(' ');\n return {stream: parts[0], track: parts[1]};\n }\n};\n\n// SCTP\n// parses draft-ietf-mmusic-sctp-sdp-26 first and falls back\n// to draft-ietf-mmusic-sctp-sdp-05\nSDPUtils.parseSctpDescription = function(mediaSection) {\n const mline = SDPUtils.parseMLine(mediaSection);\n const maxSizeLine = SDPUtils.matchPrefix(mediaSection, 'a=max-message-size:');\n let maxMessageSize;\n if (maxSizeLine.length > 0) {\n maxMessageSize = parseInt(maxSizeLine[0].substring(19), 10);\n }\n if (isNaN(maxMessageSize)) {\n maxMessageSize = 65536;\n }\n const sctpPort = SDPUtils.matchPrefix(mediaSection, 'a=sctp-port:');\n if (sctpPort.length > 0) {\n return {\n port: parseInt(sctpPort[0].substring(12), 10),\n protocol: mline.fmt,\n maxMessageSize,\n };\n }\n const sctpMapLines = SDPUtils.matchPrefix(mediaSection, 'a=sctpmap:');\n if (sctpMapLines.length > 0) {\n const parts = sctpMapLines[0]\n .substring(10)\n .split(' ');\n return {\n port: parseInt(parts[0], 10),\n protocol: parts[1],\n maxMessageSize,\n };\n }\n};\n\n// SCTP\n// outputs the draft-ietf-mmusic-sctp-sdp-26 version that all browsers\n// support by now receiving in this format, unless we originally parsed\n// as the draft-ietf-mmusic-sctp-sdp-05 format (indicated by the m-line\n// protocol of DTLS/SCTP -- without UDP/ or TCP/)\nSDPUtils.writeSctpDescription = function(media, sctp) {\n let output = [];\n if (media.protocol !== 'DTLS/SCTP') {\n output = [\n 'm=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.protocol + '\\r\\n',\n 'c=IN IP4 0.0.0.0\\r\\n',\n 'a=sctp-port:' + sctp.port + '\\r\\n',\n ];\n } else {\n output = [\n 'm=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.port + '\\r\\n',\n 'c=IN IP4 0.0.0.0\\r\\n',\n 'a=sctpmap:' + sctp.port + ' ' + sctp.protocol + ' 65535\\r\\n',\n ];\n }\n if (sctp.maxMessageSize !== undefined) {\n output.push('a=max-message-size:' + sctp.maxMessageSize + '\\r\\n');\n }\n return output.join('');\n};\n\n// Generate a session ID for SDP.\n// https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-20#section-5.2.1\n// recommends using a cryptographically random +ve 64-bit value\n// but right now this should be acceptable and within the right range\nSDPUtils.generateSessionId = function() {\n return Math.random().toString().substr(2, 22);\n};\n\n// Write boiler plate for start of SDP\n// sessId argument is optional - if not supplied it will\n// be generated randomly\n// sessVersion is optional and defaults to 2\n// sessUser is optional and defaults to 'thisisadapterortc'\nSDPUtils.writeSessionBoilerplate = function(sessId, sessVer, sessUser) {\n let sessionId;\n const version = sessVer !== undefined ? sessVer : 2;\n if (sessId) {\n sessionId = sessId;\n } else {\n sessionId = SDPUtils.generateSessionId();\n }\n const user = sessUser || 'thisisadapterortc';\n // FIXME: sess-id should be an NTP timestamp.\n return 'v=0\\r\\n' +\n 'o=' + user + ' ' + sessionId + ' ' + version +\n ' IN IP4 127.0.0.1\\r\\n' +\n 's=-\\r\\n' +\n 't=0 0\\r\\n';\n};\n\n// Gets the direction from the mediaSection or the sessionpart.\nSDPUtils.getDirection = function(mediaSection, sessionpart) {\n // Look for sendrecv, sendonly, recvonly, inactive, default to sendrecv.\n const lines = SDPUtils.splitLines(mediaSection);\n for (let i = 0; i < lines.length; i++) {\n switch (lines[i]) {\n case 'a=sendrecv':\n case 'a=sendonly':\n case 'a=recvonly':\n case 'a=inactive':\n return lines[i].substring(2);\n default:\n // FIXME: What should happen here?\n }\n }\n if (sessionpart) {\n return SDPUtils.getDirection(sessionpart);\n }\n return 'sendrecv';\n};\n\nSDPUtils.getKind = function(mediaSection) {\n const lines = SDPUtils.splitLines(mediaSection);\n const mline = lines[0].split(' ');\n return mline[0].substring(2);\n};\n\nSDPUtils.isRejected = function(mediaSection) {\n return mediaSection.split(' ', 2)[1] === '0';\n};\n\nSDPUtils.parseMLine = function(mediaSection) {\n const lines = SDPUtils.splitLines(mediaSection);\n const parts = lines[0].substring(2).split(' ');\n return {\n kind: parts[0],\n port: parseInt(parts[1], 10),\n protocol: parts[2],\n fmt: parts.slice(3).join(' '),\n };\n};\n\nSDPUtils.parseOLine = function(mediaSection) {\n const line = SDPUtils.matchPrefix(mediaSection, 'o=')[0];\n const parts = line.substring(2).split(' ');\n return {\n username: parts[0],\n sessionId: parts[1],\n sessionVersion: parseInt(parts[2], 10),\n netType: parts[3],\n addressType: parts[4],\n address: parts[5],\n };\n};\n\n// a very naive interpretation of a valid SDP.\nSDPUtils.isValidSDP = function(blob) {\n if (typeof blob !== 'string' || blob.length === 0) {\n return false;\n }\n const lines = SDPUtils.splitLines(blob);\n for (let i = 0; i < lines.length; i++) {\n if (lines[i].length < 2 || lines[i].charAt(1) !== '=') {\n return false;\n }\n // TODO: check the modifier a bit more.\n }\n return true;\n};\n\n// Expose public methods.\nif (typeof module === 'object') {\n module.exports = SDPUtils;\n}\n","import EventTarget from \"./EventTarget\";\nimport MWSE from \"./index\";\nimport Peer from \"./Peer\";\nimport { RoomInfo } from \"./RoomInfo\";\n\nexport interface IRoomOptions\n{\n name: string;\n description?:string;\n joinType: \"free\"|\"invite\"|\"password\"|\"lock\";\n credential?: string;\n ifexistsJoin?: boolean;\n accessType?: \"public\"|\"private\";\n notifyActionInvite?: boolean;\n notifyActionJoined?: boolean;\n notifyActionEjected?: boolean;\n autoFetchInfo?:boolean\n}\n\n\nexport default class Room extends EventTarget\n{\n public mwse : MWSE;\n public options! : IRoomOptions;\n public roomId? : string;\n public accessType? : \"public\"|\"private\";\n public description? : string;\n public joinType? : \"free\"|\"invite\"|\"password\"|\"lock\";\n public name? : string;\n public owner? : string;\n public peers : Map = new Map();\n public info : RoomInfo;\n\n constructor(wsts:MWSE){\n super();\n this.mwse = wsts;\n this.info = new RoomInfo(this);\n }\n public setRoomOptions(options : IRoomOptions | string)\n {\n if(typeof options == \"string\")\n {\n this.roomId = options;\n }else{\n let defaultOptions = {\n joinType: \"free\",\n ifexistsJoin: true,\n accessType: \"private\",\n notifyActionInvite: true,\n notifyActionJoined: true,\n notifyActionEjected: true,\n autoFetchInfo: true\n };\n Object.assign(defaultOptions,options);\n this.options = defaultOptions as IRoomOptions;\n }\n }\n \n setRoomId(uuid: string){\n this.roomId = uuid;\n }\n async createRoom(roomOptions : IRoomOptions){\n let options = this.options || roomOptions;\n let result = await this.mwse.EventPooling.request({\n type:'create-room',\n ...options\n });\n if(result.status == 'fail')\n {\n if(result.message == \"ALREADY-EXISTS\" && this.options.ifexistsJoin)\n {\n return this.join();\n }\n throw new Error(result.message || result.messages);\n }else{\n this.options = {\n ...this.options,\n ...result.room\n };\n this.roomId = result.room.id;\n this.mwse.rooms.set(this.roomId as string, this);\n }\n }\n async join(){\n let result = await this.mwse.EventPooling.request({\n type:'joinroom',\n name: this.options.name,\n credential: this.options.credential,\n autoFetchInfo: this.options.autoFetchInfo || false\n });\n if(result.status == 'fail')\n {\n throw new Error(result.message);\n }else{\n this.options = {\n ...this.options,\n ...result.room\n };\n if(result.info)\n {\n this.info.info = result.info;\n };\n this.roomId = result.room.id;\n this.mwse.rooms.set(this.roomId as string, this);\n }\n }\n async eject(){\n let {type} = await this.mwse.EventPooling.request({\n type:'ejectroom',\n roomId: this.roomId\n });\n this.peers.clear();\n if(type == 'success')\n {\n this.mwse.rooms.delete(this.roomId as string);\n }\n }\n async send(pack: any, wom:boolean = false){\n await this.mwse.EventPooling.request({\n type:'pack/room',\n pack,\n to: this.roomId,\n wom\n });\n }\n async fetchPeers(filter?:{[key:string]:any}, onlyNumber:boolean = false) : Promise\n {\n if(onlyNumber)\n {\n let {count} = await this.mwse.EventPooling.request({\n type:'room/peer-count',\n roomId: this.roomId,\n filter: filter || {}\n }) as {count:Number};\n return count;\n }else{\n let {status, peers} = await this.mwse.EventPooling.request({\n type:'room-peers',\n roomId: this.roomId,\n filter: filter || {}\n }) as {status:\"success\"|\"fail\", peers: string[]};\n \n let cup : Peer[] = [];\n \n if(status == 'fail')\n {\n throw new Error(\"Cant using peers on room\")\n }else if(status == 'success'){\n for (const peerid of peers) {\n let peer = this.mwse.peer(peerid);\n cup.push(peer);\n this.peers.set(peerid, peer);\n }\n };\n return cup;\n }\n }\n}","import Room from \"./Room\";\n\nexport class RoomInfo\n{\n public room : Room;\n public info : {[key:string]: any} = {};\n constructor(room : Room){\n this.room = room;\n };\n public async fetch(name?:string)\n {\n if(name)\n {\n let rinfo = await this.room.mwse.EventPooling.request(({\n type: \"room/getinfo\",\n roomId: this.room.roomId,\n name\n }));\n if(rinfo.status == \"success\")\n {\n this.info = rinfo.info;\n }else console.warn(rinfo.message);\n }else{\n let rinfo = await this.room.mwse.EventPooling.request(({\n type: \"peer/info\",\n peer: this.room.roomId\n }));\n if(rinfo.status == \"success\")\n {\n this.info = rinfo.info;\n }else console.warn(rinfo.message);\n };\n return this.info;\n }\n public set(name: string, value: string | number)\n {\n this.info[name] = value;\n this.room.mwse.WSTSProtocol.SendOnly({\n type: \"room/setinfo\",\n name,\n value\n });\n }\n public get(name?:string)\n {\n return name ? this.info[name] : this.info;\n }\n}","import MWSE from \"./index\";\n\nexport interface Message {\n [key:string|number]:any;\n}\nexport default class WSTSProtocol\n{\n public mwse : MWSE;\n constructor(wsts:MWSE){\n this.mwse = wsts;\n this.addListener();\n }\n public addListener()\n {\n this.mwse.server?.onRecaivePack((pack)=>{\n this.PackAnalyze(pack)\n })\n }\n public SendRaw(pack: Message)\n {\n this.mwse.server.tranferToServer(pack);\n }\n public SendOnly(pack: Message)\n {\n this.mwse.server.tranferToServer([pack,'R']);\n }\n public SendRequest(pack: Message, id: number)\n {\n this.mwse.server.tranferToServer([pack, id, 'R']);\n }\n public StartStream(pack: Message, id: number)\n {\n this.mwse.server.tranferToServer([pack, id, 'S']);\n }\n public PackAnalyze(data:any)\n {\n let [payload, id, action] = data;\n if(typeof id === 'number')\n {\n let callback = this.mwse.EventPooling.events.get(id);\n if(callback)\n {\n callback[0](payload, action);\n switch(action)\n {\n case 'E':{ // [E]ND flag\n this.mwse.EventPooling.events.delete(id);\n break;\n }\n case 'S': // [S]TREAM flag\n default:{\n break;\n }\n }\n }else console.warn(\"Missing event sended from server\");\n }else{\n let signals = this.mwse.EventPooling.signals.get(id);\n if(signals)\n {\n for (const callback of signals) {\n callback(payload);\n }\n }else console.warn(\"Missing event sended from server\");\n }\n }\n}"],"names":["$parcel$export","e","n","v","s","Object","defineProperty","get","set","enumerable","configurable","$parcel$interopDefault","a","__esModule","default","$201ddc79d766b86c$export$98b66c25bb38499d","ws","endpoint","autoPair","connected","autoReconnect","autoReconnectTimeout","autoReconnectTimer","constructor","options","URL","timeout","connect","clearTimeout","WebSocket","href","addWSEvents","disconnect","close","addEventListener","eventOpen","eventClose","eventError","data","eventMessage","callback","activeConnectionEvent","setTimeout","recaivePackEvent","onRecaivePack","func","push","onActive","$data","JSON","parse","tranferToServer","send","stringify","$7bc29f3852fca8a1$export$2e2bcd8739ae039","wsts","events","Map","signals","requests","count","request","msg","Promise","ok","rej","id","WSTSProtocol","SendRequest","stream","StartStream","signal","event","T","$639a7a490074f3f2$export$2e2bcd8739ae039","emit","eventName","args","on","activeScope","scope","f","$707287ab76ae8d6a$export$cd59d3e68ede65a1","mwse","APNumber","APShortCode","APIPAddress","allocAPIPAddress","status","ip","EventPooling","type","Error","allocAPNumber","number","allocAPShortCode","code","reallocAPIPAddress","reallocAPNumber","reallocAPShortCode","releaseAPIPAddress","undefined","releaseAPNumber","releaseAPShortCode","queryAPIPAddress","socket","whois","queryAPNumber","queryAPShortCode","$d7d20b916ab000fe$export$f3bd5f68ae16de","peer","info","fetch","name","rinfo","socketId","console","warn","message","value","SendOnly","$35583cf39f4111ff$var$logDisabled_","$35583cf39f4111ff$var$deprecationWarnings_","$35583cf39f4111ff$export$e3c02be309be1f23","uastring","expr","pos","match","length","parseInt","$35583cf39f4111ff$export$1f48841962b828b1","window1","eventNameToWrap","wrapper","RTCPeerConnection","proto","prototype","nativeAddEventListener","nativeEventName","cb","apply","arguments","wrappedCallback","modifiedEvent","handleEvent","_eventMap","nativeRemoveEventListener","removeEventListener","has","unwrappedCb","delete","size","keys","$35583cf39f4111ff$export$afbfee8cc06fd3e4","bool","$35583cf39f4111ff$export$51516be4b019e41e","$35583cf39f4111ff$export$bef1f36f5486a6a3","window","log","$35583cf39f4111ff$export$cdd73fc4100a6ef4","oldMethod","newMethod","$35583cf39f4111ff$var$isObject","val","toString","call","$35583cf39f4111ff$export$93439ffc3f787d51","result","track","outbound","streamStatsType","filteredResult","trackStats","forEach","trackIdentifier","trackStat","stats","trackId","$35583cf39f4111ff$export$571b373e75babb58","base","resultSet","endsWith","$9f6c30de484136d4$var$IMessageSymbase","$e3f02d0a98ccb0db$exports","$3b9679f8ab9bc604$export$1ed4910f4d37dc5e","browserDetails","navigator","mediaDevices","constraintsToChrome_","c","mandatory","optional","cc","key","r","ideal","exact","min","max","oldname_","prefix","charAt","toUpperCase","slice","oc","mix","advanced","concat","shimConstraints_","constraints","version","audio","remap","obj","b","video","face","facingMode","getSupportedFacingModeLies","getSupportedConstraints","matches","enumerateDevices","then","devices","dev","filter","d","kind","find","some","label","toLowerCase","includes","deviceId","$3b9679f8ab9bc604$var$logging","shimError_","PermissionDeniedError","PermissionDismissedError","InvalidStateError","DevicesNotFoundError","ConstraintNotSatisfiedError","TrackStartError","MediaDeviceFailedDueToShutdown","MediaDeviceKillSwitchOn","TabCaptureError","ScreenCaptureError","DeviceCaptureError","constraint","constraintName","getUserMedia","getUserMedia_","onSuccess","onError","webkitGetUserMedia","bind","origGetUserMedia","cs","getAudioTracks","getVideoTracks","getTracks","stop","DOMException","reject","$26c6446bf842b72e$export$97270b87351d9c04","getSourceId","error","getDisplayMedia","sourceId","widthSpecified","width","heightSpecified","height","frameRateSpecified","frameRate","chromeMediaSource","chromeMediaSourceId","maxFrameRate","maxWidth","maxHeight","$e3f02d0a98ccb0db$export$33ee24e7a300bcd1","MediaStream","webkitMediaStream","$e3f02d0a98ccb0db$export$f358708f68ab068","transceiver","receiver","_ontrack","origSetRemoteDescription","setRemoteDescription","_ontrackpoly","te","getReceivers","Event","streams","dispatchEvent","$e3f02d0a98ccb0db$export$a41a030a2842f5d6","shimSenderWithDtmf","pc","dtmf","_dtmf","createDTMFSender","_pc","getSenders","_senders","origAddTrack","addTrack","sender","origRemoveTrack","removeTrack","idx","indexOf","splice","origAddStream","addStream","origRemoveStream","removeStream","RTCRtpSender","origGetSenders","senders","$e3f02d0a98ccb0db$export$90608323826f0b17","origGetStats","getStats","selector","onSucc","onErr","fixChromeStats_","response","standardReport","reports","report","standardStats","timestamp","localcandidate","remotecandidate","names","stat","makeMapStats","map","resolve","$e3f02d0a98ccb0db$export$f2f0f2338114eb4b","RTCRtpReceiver","origGetReceivers","receivers","srcElement","MediaStreamTrack","err","$e3f02d0a98ccb0db$export$30e3cdd46f8d5100","getLocalStreams","_shimmedLocalStreams","streamId","alreadyExists","existingSenders","newSenders","newSender","$e3f02d0a98ccb0db$export$9588259fcf4ebc91","origGetLocalStreams","nativeStreams","_reverseStreams","_streams","newStream","replaceInternalStreamId","description","sdp","internalId","externalStream","internalStream","replace","RegExp","RTCSessionDescription","signalingState","t","oldStream","method","nativeMethod","methodObj","isLegacyCall","desc","origSetLocalDescription","setLocalDescription","origLocalDescription","getOwnPropertyDescriptor","isLocal","streamid","hasTrack","$e3f02d0a98ccb0db$export$852a08dda9a55ea7","webkitRTCPeerConnection","RTCIceCandidate","$e3f02d0a98ccb0db$export$341293bbeaae37cb","target","getConfiguration","sdpSemantics","$5c8245455fb0fb72$exports","$7252536737e6fa6d$export$1ed4910f4d37dc5e","nativeGetUserMedia","getSettings","nativeGetSettings","applyConstraints","nativeApplyConstraints","$f85cf98e09e9e2f6$export$97270b87351d9c04","preferredMediaSource","mediaSource","$5c8245455fb0fb72$export$f358708f68ab068","RTCTrackEvent","$5c8245455fb0fb72$export$852a08dda9a55ea7","mozRTCPeerConnection","modernStatsTypes","inboundrtp","outboundrtp","candidatepair","nativeGetStats","i","assign","$5c8245455fb0fb72$export$f0525502095c04ef","$5c8245455fb0fb72$export$83d69126527b1171","$5c8245455fb0fb72$export$825e523ef749bd8c","$5c8245455fb0fb72$export$ff9cb3bc8990e8f7","DataChannel","RTCDataChannel","$5c8245455fb0fb72$export$70c77533b6e9908d","origAddTransceiver","addTransceiver","setParametersPromises","sendEncodings","shouldPerformCheck","encodingParam","ridRegex","test","rid","TypeError","parseFloat","scaleResolutionDownBy","RangeError","maxFramerate","params","getParameters","encodings","setParameters","catch","$5c8245455fb0fb72$export$66238223c298fbaa","origGetParameters","$5c8245455fb0fb72$export$51beccf0e777b843","origCreateOffer","createOffer","all","finally","$5c8245455fb0fb72$export$df0b46e7cef08150","origCreateAnswer","createAnswer","$4bb6650df37cb8fe$exports","$4bb6650df37cb8fe$export$8df41282f4fdcea2","_localStreams","_addTrack","index","tracks","$4bb6650df37cb8fe$export$762aa4cbb4f2f857","getRemoteStreams","_remoteStreams","_onaddstream","_onaddstreampoly","$4bb6650df37cb8fe$export$da31df245debdd3","addIceCandidate","successCallback","failureCallback","promise","withCallback","candidate","$4bb6650df37cb8fe$export$1ed4910f4d37dc5e","_getUserMedia","$4bb6650df37cb8fe$export$494a01ac68ba81ac","errcb","$35583cf39f4111ff$export$15384eac40dc88c8","reduce","accumulator","isObj","isEmptyObject","$4bb6650df37cb8fe$export$671a8b47b41b6f41","OrigPeerConnection","pcConfig","pcConstraints","iceServers","newIceServers","server","urls","url","generateCertificate","$4bb6650df37cb8fe$export$85d53da088cb1b14","$4bb6650df37cb8fe$export$d444266503fdd2d4","offerOptions","offerToReceiveAudio","audioTransceiver","getTransceivers","direction","setDirection","offerToReceiveVideo","videoTransceiver","$4bb6650df37cb8fe$export$857cd739a7b795d2","AudioContext","webkitAudioContext","$8080a560a280724d$exports","$8080a560a280724d$export$cf133661e444ccfe","$8080a560a280724d$export$fdafb8d8280e29b5","$8080a560a280724d$export$a99147c78a56edc4","$8080a560a280724d$export$d461c8d5c5db5da7","$8080a560a280724d$export$63bb816cc75460","$8080a560a280724d$export$a57d114344295149","$8080a560a280724d$export$51d5e40b48c771c7","$8080a560a280724d$export$7170d04e59f9d553","$257b6346d6d1b15f$exports","$257b6346d6d1b15f$var$SDPUtils","NativeRTCIceCandidate","substring","nativeCandidate","parsedCandidate","parseCandidate","toJSON","sdpMid","sdpMLineIndex","usernameFragment","writable","relayProtocol","priority","_sctp","sctpInDescription","sections","splitSections","shift","mediaSection","mLine","parseMLine","protocol","getRemoteFirefoxVersion","getCanSendMaxMessageSize","remoteIsFirefox","canSendMaxMessageSize","browser","getMaxMessageSize","maxMessageSize","matchPrefix","isFirefox","canSendMMS","remoteMMS","Number","POSITIVE_INFINITY","Math","sctp","wrapDcSend","dc","origDataChannelSend","byteLength","readyState","origCreateDataChannel","createDataChannel","dataChannel","channel","completed","checking","iceConnectionState","_onconnectionstatechange","origMethod","_connectionstatechangepoly","_lastConnectionState","connectionState","newEvent","nativeSRD","split","line","trim","join","nativeAddIceCandidate","nativeSetLocalDescription","generateIdentifier","random","localCName","splitLines","blob","parts","part","getDescription","getMediaSections","foundation","component","address","port","relatedAddress","relatedPort","tcpType","ufrag","writeCandidate","parseIceOptions","parseRtpMap","parsed","payloadType","clockRate","channels","numChannels","writeRtpMap","codec","pt","preferredPayloadType","parseExtmap","uri","attributes","writeExtmap","headerExtension","preferredId","parseFmtp","kv","j","writeFmtp","parameters","param","parseRtcpFb","parameter","writeRtcpFb","lines","rtcpFeedback","fb","parseSsrcMedia","sp","ssrc","colon","attribute","parseSsrcGroup","semantics","ssrcs","getMid","mid","parseFingerprint","algorithm","getDtlsParameters","sessionpart","role","fingerprints","writeDtlsParameters","setupType","fp","parseCryptoLine","tag","cryptoSuite","keyParams","sessionParams","writeCryptoLine","writeCryptoKeyParams","parseCryptoKeyParams","keyMethod","keySalt","lifeTime","mkiValue","mkiLength","getCryptoParameters","getIceParameters","pwd","password","writeIceParameters","iceLite","parseRtpParameters","codecs","headerExtensions","fecMechanisms","rtcp","mline","profile","rtpmapline","fmtps","wildcardRtcpFb","duplicate","existingFeedback","writeRtpDescription","caps","maxptime","extension","parseRtpEncodingParameters","secondarySsrc","encodingParameters","hasRed","hasUlpfec","primarySsrc","flows","apt","encParam","codecPayloadType","rtx","fec","mechanism","bandwidth","maxBitrate","parseRtcpParameters","rtcpParameters","remoteSsrc","cname","rsize","reducedSize","compound","mux","writeRtcpParameters","parseMsid","spec","planB","msidParts","parseSctpDescription","maxSizeLine","isNaN","sctpPort","fmt","sctpMapLines","writeSctpDescription","media","output","generateSessionId","substr","writeSessionBoilerplate","sessId","sessVer","sessUser","getDirection","getKind","isRejected","parseOLine","username","sessionId","sessionVersion","netType","addressType","isValidSDP","shimChrome","shimFirefox","shimSafari","$35583cf39f4111ff$export$2d31490a0c05f094","userAgent","mozGetUserMedia","isSecureContext","supportsUnifiedPlan","RTCRtpTransceiver","adapter","commonShim","extractVersion","disableLog","disableWarnings","shimPeerConnection","logging","browserShim","shimGetUserMedia","shimMediaStream","shimOnTrack","shimAddTrackRemoveTrack","shimGetSendersWithDtmf","shimGetStats","shimSenderReceiverGetStats","fixNegotiationNeeded","shimRemoveStream","shimSenderGetStats","shimReceiverGetStats","shimRTCDataChannel","shimAddTransceiver","shimGetParameters","shimCreateOffer","shimCreateAnswer","shimRTCIceServerUrls","shimCreateOfferLegacy","shimCallbacksAPI","shimLocalStreamsAPI","shimRemoteStreamsAPI","shimTrackEventTransceiver","shimAudioContext","$b318be68d2b2c029$export$2e2bcd8739ae039","rtc","webrtc","totalSize","isReady","isStarted","isSending","isRecaiving","processedSize","recaivedFile","bufferSizePerChannel","bufferSizePerPack","safeBufferSizePerPack","RecaiveFile","_rtc","fileMetadata","channelCount","_totalSize","onEnded","datachannel","current","currentPart","bufferAmount","onmessage","Blob","onclose","File","lastModified","Date","SendFile","file","metadata","buffer","arrayBuffer","partCount","ceil","iceStatus","mimetype","channelIndex","binaryType","onopen","next","spyChannelIndex","sendPartition","nextblob10mb","_channelIndex","currentBuffer","currentPartition","ArrayBuffer","bufferPart","sendFileChannel","getNextBlob","bufferedAmountLowThreshold","$895bfe3da380c655$export$2e2bcd8739ae039","requireGC","active","connectionStatus","gatheringStatus","signalingStatus","recaivingStream","sendingStream","defaultRTCConfig","iceCandidatePoolSize","iceTransportPolicy","rtcpMuxPolicy","defaultICEServers","FileTransportChannel","rtcConfig","rtcServers","config","eventConnectionState","eventIcecandidate","eventICEConnectionState","eventICEGatherinState","eventNogationNeeded","eventSignalingState","eventTrack","eventDatachannel","answer","streamInfo","payload","dispatch","createDefaultDataChannel","sendMessage","dt","ordered","pack","destroy","iceGatheringState","offer","iceRestart","rtpRecaiver","recaivers","sendStream","stopStream","_stream","RTCPSender","stopAllStreams","clear","meta","chnlCount","filemeta","setInterval","img","document","createElement","src","createObjectURL","onerror","revokeObjectURL","$9f6c30de484136d4$export$2e2bcd8739ae039","selfSocket","peerConnection","primaryChannel","createRTC","setPeerOptions","setSocketId","uuid","equalTo","isReachable","to","enablePairAuth","disablePairAuth","requestPair","endPair","forget","acceptPair","rejectPair","getPairedList","isOpenedP2P","isOpenedServer","sendChannel","peers","pairs","$59e4377e2cc5e2be$export$f106f681f3286480","room","roomId","$4415e33c9749fde6$export$2e2bcd8739ae039","accessType","joinType","owner","setRoomOptions","defaultOptions","ifexistsJoin","notifyActionInvite","notifyActionJoined","notifyActionEjected","autoFetchInfo","setRoomId","createRoom","roomOptions","messages","rooms","credential","eject","wom","fetchPeers","onlyNumber","cup","peerid","$023568b0c88ffd16$export$2e2bcd8739ae039","addListener","PackAnalyze","SendRaw","action","$1ed8c0121ddb51e7$export$2e2bcd8739ae039","virtualPressure","me","packMessagingSystem","peerId","requestId","from","body","roomid","isActive","MWSE"],"version":3,"file":"index.js.map"} \ No newline at end of file +{"mappings":"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","sources":["","frontend/index.ts","frontend/Connection.ts","frontend/EventPool.ts","frontend/EventTarget.ts","frontend/IPPressure.ts","frontend/Peer.ts","frontend/PeerInfo.ts","frontend/WebRTC.ts","frontend/P2PFileSender.ts","node_modules/webrtc-adapter/src/js/adapter_core.js","node_modules/webrtc-adapter/src/js/adapter_factory.js","node_modules/webrtc-adapter/src/js/utils.js","node_modules/webrtc-adapter/src/js/chrome/chrome_shim.js","node_modules/webrtc-adapter/src/js/chrome/getusermedia.js","node_modules/webrtc-adapter/src/js/chrome/getdisplaymedia.js","node_modules/webrtc-adapter/src/js/firefox/firefox_shim.js","node_modules/webrtc-adapter/src/js/firefox/getusermedia.js","node_modules/webrtc-adapter/src/js/firefox/getdisplaymedia.js","node_modules/webrtc-adapter/src/js/safari/safari_shim.js","node_modules/webrtc-adapter/src/js/common_shim.js","node_modules/sdp/sdp.js","frontend/Room.ts","frontend/RoomInfo.ts","frontend/WSTSProtocol.ts"],"sourcesContent":["(() => {\nfunction $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\nfunction $parcel$interopDefault(a) {\n return a && a.__esModule ? a.default : a;\n}\nclass $201ddc79d766b86c$export$98b66c25bb38499d {\n ws;\n endpoint;\n autoPair = false;\n connected = false;\n autoReconnect = true;\n autoReconnectTimeout = 3000;\n autoReconnectTimer;\n constructor(options){\n this.endpoint = new URL(options.endpoint);\n if (typeof options.autoReconnect == \"boolean\") this.autoReconnect = true;\n else if (options.autoReconnect) {\n this.autoReconnect = true;\n this.autoReconnectTimeout = options.autoReconnect.timeout;\n }\n }\n connect() {\n if (this.autoReconnectTimer) clearTimeout(this.autoReconnectTimer);\n this.ws = new WebSocket(this.endpoint.href);\n this.addWSEvents();\n }\n disconnect() {\n this.ws.close();\n }\n addWSEvents() {\n this.ws.addEventListener(\"open\", ()=>this.eventOpen());\n this.ws.addEventListener(\"close\", ()=>this.eventClose());\n this.ws.addEventListener(\"error\", ()=>this.eventError());\n this.ws.addEventListener(\"message\", ({ data: data })=>this.eventMessage(data));\n }\n eventOpen() {\n this.connected = true;\n for (const callback of this.activeConnectionEvent)callback(void 0);\n }\n eventClose() {\n this.connected = false;\n if (this.autoReconnect) this.autoReconnectTimer = setTimeout(()=>this.connect(), this.autoReconnectTimeout);\n }\n eventError() {\n this.connected = false;\n }\n recaivePackEvent = [];\n onRecaivePack(func) {\n this.recaivePackEvent.push(func);\n }\n activeConnectionEvent = [];\n onActive(func) {\n if (this.connected) func();\n else this.activeConnectionEvent.push(func);\n }\n eventMessage(data) {\n if (typeof data == \"string\") {\n let $data = JSON.parse(data);\n for (const callback of this.recaivePackEvent)callback($data);\n }\n }\n tranferToServer(data) {\n if (this.connected) this.ws.send(JSON.stringify(data));\n }\n}\n\n\nclass $7bc29f3852fca8a1$export$2e2bcd8739ae039 {\n wsts;\n events = new Map();\n signals = new Map();\n requests = new Map();\n count = 0;\n constructor(wsts){\n this.wsts = wsts;\n }\n request(msg) {\n return new Promise((ok, rej)=>{\n let id = ++this.count;\n this.wsts.WSTSProtocol.SendRequest(msg, id);\n this.events.set(id, [\n (data)=>{\n ok(data);\n },\n (data)=>{\n rej(data);\n }\n ]);\n });\n }\n stream(msg, callback) {\n let id = ++this.count;\n this.wsts.WSTSProtocol.StartStream(msg, id);\n this.events.set(id, [\n (data)=>{\n callback(data);\n },\n ()=>{}\n ]);\n }\n signal(event, callback) {\n let T = this.signals.get(event);\n if (!T) this.signals.set(event, [\n callback\n ]);\n else T.push(callback);\n }\n}\n\n\nclass $639a7a490074f3f2$export$2e2bcd8739ae039 {\n events = {};\n emit(eventName, ...args) {\n if (this.events[eventName]) for (const callback of this.events[eventName])callback(...args);\n }\n on(eventName, callback) {\n if (this.events[eventName]) this.events[eventName].push(callback);\n else this.events[eventName] = [\n callback\n ];\n }\n activeScope = false;\n scope(f) {\n if (this.activeScope) f();\n else this.on(\"scope\", f);\n }\n}\n\n\nclass $707287ab76ae8d6a$export$cd59d3e68ede65a1 {\n mwse;\n APNumber;\n APShortCode;\n APIPAddress;\n constructor(mwse){\n this.mwse = mwse;\n }\n async allocAPIPAddress() {\n let { status: status, ip: ip } = await this.mwse.EventPooling.request({\n type: \"alloc/APIPAddress\"\n });\n if (status == \"success\") {\n this.APIPAddress = ip;\n return ip;\n } else throw new Error(\"Error Allocated Access Point IP Address\");\n }\n async allocAPNumber() {\n let { status: status, number: number } = await this.mwse.EventPooling.request({\n type: \"alloc/APNumber\"\n });\n if (status == \"success\") {\n this.APNumber = number;\n return number;\n } else throw new Error(\"Error Allocated Access Point Number\");\n }\n async allocAPShortCode() {\n let { status: status, code: code } = await this.mwse.EventPooling.request({\n type: \"alloc/APShortCode\"\n });\n if (status == \"success\") {\n this.APShortCode = code;\n return code;\n } else throw new Error(\"Error Allocated Access Point Short Code\");\n }\n async reallocAPIPAddress() {\n let { status: status, ip: ip } = await this.mwse.EventPooling.request({\n type: \"realloc/APIPAddress\"\n });\n if (status == \"success\") {\n this.APIPAddress = ip;\n return ip;\n } else throw new Error(\"Error Reallocated Access Point IP Address\");\n }\n async reallocAPNumber() {\n let { status: status, number: number } = await this.mwse.EventPooling.request({\n type: \"realloc/APNumber\"\n });\n if (status == \"success\") {\n this.APNumber = number;\n return number;\n } else throw new Error(\"Error Reallocated Access Point Number\");\n }\n async reallocAPShortCode() {\n let { status: status, code: code } = await this.mwse.EventPooling.request({\n type: \"realloc/APShortCode\"\n });\n if (status == \"success\") {\n this.APShortCode = code;\n return code;\n } else throw new Error(\"Error Reallocated Access Point Short Code\");\n }\n async releaseAPIPAddress() {\n let { status: status } = await this.mwse.EventPooling.request({\n type: \"release/APIPAddress\"\n });\n if (status == \"success\") this.APIPAddress = undefined;\n else throw new Error(\"Error release Access Point IP Address\");\n }\n async releaseAPNumber() {\n let { status: status } = await this.mwse.EventPooling.request({\n type: \"release/APNumber\"\n });\n if (status == \"success\") this.APNumber = undefined;\n else throw new Error(\"Error release Access Point Number\");\n }\n async releaseAPShortCode() {\n let { status: status } = await this.mwse.EventPooling.request({\n type: \"release/APShortCode\"\n });\n if (status == \"success\") this.APShortCode = undefined;\n else throw new Error(\"Error release Access Point Short Code\");\n }\n async queryAPIPAddress(ip) {\n let { status: status, socket: socket } = await this.mwse.EventPooling.request({\n type: \"whois/APIPAddress\",\n whois: ip\n });\n if (status == \"success\") return socket;\n else return null;\n }\n async queryAPNumber(number) {\n let { status: status, socket: socket } = await this.mwse.EventPooling.request({\n type: \"whois/APNumber\",\n whois: number\n });\n if (status == \"success\") return socket;\n else return null;\n }\n async queryAPShortCode(code) {\n let { status: status, socket: socket } = await this.mwse.EventPooling.request({\n type: \"whois/APShortCode\",\n whois: code\n });\n if (status == \"success\") return socket;\n else return null;\n }\n}\n\n\n\nclass $d7d20b916ab000fe$export$f3bd5f68ae16de {\n peer;\n info = {};\n constructor(mwse){\n this.peer = mwse;\n }\n async fetch(name) {\n if (name) {\n let rinfo = await this.peer.mwse.EventPooling.request({\n type: \"peer/info\",\n peer: this.peer.socketId,\n name: name\n });\n if (rinfo.status == \"success\") this.info = rinfo.info;\n else console.warn(rinfo.message);\n } else {\n let rinfo = await this.peer.mwse.EventPooling.request({\n type: \"peer/info\",\n peer: this.peer.socketId\n });\n if (rinfo.status == \"success\") this.info = rinfo.info;\n else console.warn(rinfo.message);\n }\n return this.info;\n }\n set(name, value) {\n this.info[name] = value;\n this.peer.mwse.WSTSProtocol.SendOnly({\n type: \"auth/info\",\n name: name,\n value: value\n });\n }\n get(name) {\n return name ? this.info[name] : this.info;\n }\n}\n\n\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */ /* eslint-env node */ /*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */ /*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */ /* eslint-env node */ \"use strict\";\nlet $35583cf39f4111ff$var$logDisabled_ = true;\nlet $35583cf39f4111ff$var$deprecationWarnings_ = true;\nfunction $35583cf39f4111ff$export$e3c02be309be1f23(uastring, expr, pos) {\n const match = uastring.match(expr);\n return match && match.length >= pos && parseInt(match[pos], 10);\n}\nfunction $35583cf39f4111ff$export$1f48841962b828b1(window1, eventNameToWrap, wrapper) {\n if (!window1.RTCPeerConnection) return;\n const proto = window1.RTCPeerConnection.prototype;\n const nativeAddEventListener = proto.addEventListener;\n proto.addEventListener = function(nativeEventName, cb) {\n if (nativeEventName !== eventNameToWrap) return nativeAddEventListener.apply(this, arguments);\n const wrappedCallback = (e)=>{\n const modifiedEvent = wrapper(e);\n if (modifiedEvent) {\n if (cb.handleEvent) cb.handleEvent(modifiedEvent);\n else cb(modifiedEvent);\n }\n };\n this._eventMap = this._eventMap || {};\n if (!this._eventMap[eventNameToWrap]) this._eventMap[eventNameToWrap] = new Map();\n this._eventMap[eventNameToWrap].set(cb, wrappedCallback);\n return nativeAddEventListener.apply(this, [\n nativeEventName,\n wrappedCallback\n ]);\n };\n const nativeRemoveEventListener = proto.removeEventListener;\n proto.removeEventListener = function(nativeEventName, cb) {\n if (nativeEventName !== eventNameToWrap || !this._eventMap || !this._eventMap[eventNameToWrap]) return nativeRemoveEventListener.apply(this, arguments);\n if (!this._eventMap[eventNameToWrap].has(cb)) return nativeRemoveEventListener.apply(this, arguments);\n const unwrappedCb = this._eventMap[eventNameToWrap].get(cb);\n this._eventMap[eventNameToWrap].delete(cb);\n if (this._eventMap[eventNameToWrap].size === 0) delete this._eventMap[eventNameToWrap];\n if (Object.keys(this._eventMap).length === 0) delete this._eventMap;\n return nativeRemoveEventListener.apply(this, [\n nativeEventName,\n unwrappedCb\n ]);\n };\n Object.defineProperty(proto, \"on\" + eventNameToWrap, {\n get () {\n return this[\"_on\" + eventNameToWrap];\n },\n set (cb) {\n if (this[\"_on\" + eventNameToWrap]) {\n this.removeEventListener(eventNameToWrap, this[\"_on\" + eventNameToWrap]);\n delete this[\"_on\" + eventNameToWrap];\n }\n if (cb) this.addEventListener(eventNameToWrap, this[\"_on\" + eventNameToWrap] = cb);\n },\n enumerable: true,\n configurable: true\n });\n}\nfunction $35583cf39f4111ff$export$afbfee8cc06fd3e4(bool) {\n if (typeof bool !== \"boolean\") return new Error(\"Argument type: \" + typeof bool + \". Please use a boolean.\");\n $35583cf39f4111ff$var$logDisabled_ = bool;\n return bool ? \"adapter.js logging disabled\" : \"adapter.js logging enabled\";\n}\nfunction $35583cf39f4111ff$export$51516be4b019e41e(bool) {\n if (typeof bool !== \"boolean\") return new Error(\"Argument type: \" + typeof bool + \". Please use a boolean.\");\n $35583cf39f4111ff$var$deprecationWarnings_ = !bool;\n return \"adapter.js deprecation warnings \" + (bool ? \"disabled\" : \"enabled\");\n}\nfunction $35583cf39f4111ff$export$bef1f36f5486a6a3() {\n if (typeof window === \"object\") {\n if ($35583cf39f4111ff$var$logDisabled_) return;\n if (typeof console !== \"undefined\" && typeof console.log === \"function\") console.log.apply(console, arguments);\n }\n}\nfunction $35583cf39f4111ff$export$cdd73fc4100a6ef4(oldMethod, newMethod) {\n if (!$35583cf39f4111ff$var$deprecationWarnings_) return;\n console.warn(oldMethod + \" is deprecated, please use \" + newMethod + \" instead.\");\n}\nfunction $35583cf39f4111ff$export$2d31490a0c05f094(window1) {\n // Returned result object.\n const result = {\n browser: null,\n version: null\n };\n // Fail early if it's not a browser\n if (typeof window1 === \"undefined\" || !window1.navigator || !window1.navigator.userAgent) {\n result.browser = \"Not a browser.\";\n return result;\n }\n const { navigator: navigator } = window1;\n if (navigator.mozGetUserMedia) {\n result.browser = \"firefox\";\n result.version = $35583cf39f4111ff$export$e3c02be309be1f23(navigator.userAgent, /Firefox\\/(\\d+)\\./, 1);\n } else if (navigator.webkitGetUserMedia || window1.isSecureContext === false && window1.webkitRTCPeerConnection) {\n // Chrome, Chromium, Webview, Opera.\n // Version matches Chrome/WebRTC version.\n // Chrome 74 removed webkitGetUserMedia on http as well so we need the\n // more complicated fallback to webkitRTCPeerConnection.\n result.browser = \"chrome\";\n result.version = $35583cf39f4111ff$export$e3c02be309be1f23(navigator.userAgent, /Chrom(e|ium)\\/(\\d+)\\./, 2);\n } else if (window1.RTCPeerConnection && navigator.userAgent.match(/AppleWebKit\\/(\\d+)\\./)) {\n result.browser = \"safari\";\n result.version = $35583cf39f4111ff$export$e3c02be309be1f23(navigator.userAgent, /AppleWebKit\\/(\\d+)\\./, 1);\n result.supportsUnifiedPlan = window1.RTCRtpTransceiver && \"currentDirection\" in window1.RTCRtpTransceiver.prototype;\n } else {\n result.browser = \"Not a supported browser.\";\n return result;\n }\n return result;\n}\n/**\n * Checks if something is an object.\n *\n * @param {*} val The something you want to check.\n * @return true if val is an object, false otherwise.\n */ function $35583cf39f4111ff$var$isObject(val) {\n return Object.prototype.toString.call(val) === \"[object Object]\";\n}\nfunction $35583cf39f4111ff$export$15384eac40dc88c8(data) {\n if (!$35583cf39f4111ff$var$isObject(data)) return data;\n return Object.keys(data).reduce(function(accumulator, key) {\n const isObj = $35583cf39f4111ff$var$isObject(data[key]);\n const value = isObj ? $35583cf39f4111ff$export$15384eac40dc88c8(data[key]) : data[key];\n const isEmptyObject = isObj && !Object.keys(value).length;\n if (value === undefined || isEmptyObject) return accumulator;\n return Object.assign(accumulator, {\n [key]: value\n });\n }, {});\n}\nfunction $35583cf39f4111ff$export$571b373e75babb58(stats, base, resultSet) {\n if (!base || resultSet.has(base.id)) return;\n resultSet.set(base.id, base);\n Object.keys(base).forEach((name)=>{\n if (name.endsWith(\"Id\")) $35583cf39f4111ff$export$571b373e75babb58(stats, stats.get(base[name]), resultSet);\n else if (name.endsWith(\"Ids\")) base[name].forEach((id)=>{\n $35583cf39f4111ff$export$571b373e75babb58(stats, stats.get(id), resultSet);\n });\n });\n}\nfunction $35583cf39f4111ff$export$93439ffc3f787d51(result, track, outbound) {\n const streamStatsType = outbound ? \"outbound-rtp\" : \"inbound-rtp\";\n const filteredResult = new Map();\n if (track === null) return filteredResult;\n const trackStats = [];\n result.forEach((value)=>{\n if (value.type === \"track\" && value.trackIdentifier === track.id) trackStats.push(value);\n });\n trackStats.forEach((trackStat)=>{\n result.forEach((stats)=>{\n if (stats.type === streamStatsType && stats.trackId === trackStat.id) $35583cf39f4111ff$export$571b373e75babb58(result, stats, filteredResult);\n });\n });\n return filteredResult;\n}\n\n\nvar $e3f02d0a98ccb0db$exports = {};\n\n$parcel$export($e3f02d0a98ccb0db$exports, \"shimMediaStream\", () => $e3f02d0a98ccb0db$export$33ee24e7a300bcd1);\n$parcel$export($e3f02d0a98ccb0db$exports, \"shimOnTrack\", () => $e3f02d0a98ccb0db$export$f358708f68ab068);\n$parcel$export($e3f02d0a98ccb0db$exports, \"shimGetSendersWithDtmf\", () => $e3f02d0a98ccb0db$export$a41a030a2842f5d6);\n$parcel$export($e3f02d0a98ccb0db$exports, \"shimGetStats\", () => $e3f02d0a98ccb0db$export$90608323826f0b17);\n$parcel$export($e3f02d0a98ccb0db$exports, \"shimSenderReceiverGetStats\", () => $e3f02d0a98ccb0db$export$f2f0f2338114eb4b);\n$parcel$export($e3f02d0a98ccb0db$exports, \"shimAddTrackRemoveTrackWithNative\", () => $e3f02d0a98ccb0db$export$30e3cdd46f8d5100);\n$parcel$export($e3f02d0a98ccb0db$exports, \"shimAddTrackRemoveTrack\", () => $e3f02d0a98ccb0db$export$9588259fcf4ebc91);\n$parcel$export($e3f02d0a98ccb0db$exports, \"shimPeerConnection\", () => $e3f02d0a98ccb0db$export$852a08dda9a55ea7);\n$parcel$export($e3f02d0a98ccb0db$exports, \"fixNegotiationNeeded\", () => $e3f02d0a98ccb0db$export$341293bbeaae37cb);\n$parcel$export($e3f02d0a98ccb0db$exports, \"shimGetUserMedia\", () => $3b9679f8ab9bc604$export$1ed4910f4d37dc5e);\n$parcel$export($e3f02d0a98ccb0db$exports, \"shimGetDisplayMedia\", () => $26c6446bf842b72e$export$97270b87351d9c04);\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */ /* eslint-env node */ \n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */ /* eslint-env node */ \n\"use strict\";\nconst $3b9679f8ab9bc604$var$logging = $35583cf39f4111ff$export$bef1f36f5486a6a3;\nfunction $3b9679f8ab9bc604$export$1ed4910f4d37dc5e(window, browserDetails) {\n const navigator = window && window.navigator;\n if (!navigator.mediaDevices) return;\n const constraintsToChrome_ = function(c) {\n if (typeof c !== \"object\" || c.mandatory || c.optional) return c;\n const cc = {};\n Object.keys(c).forEach((key)=>{\n if (key === \"require\" || key === \"advanced\" || key === \"mediaSource\") return;\n const r = typeof c[key] === \"object\" ? c[key] : {\n ideal: c[key]\n };\n if (r.exact !== undefined && typeof r.exact === \"number\") r.min = r.max = r.exact;\n const oldname_ = function(prefix, name) {\n if (prefix) return prefix + name.charAt(0).toUpperCase() + name.slice(1);\n return name === \"deviceId\" ? \"sourceId\" : name;\n };\n if (r.ideal !== undefined) {\n cc.optional = cc.optional || [];\n let oc = {};\n if (typeof r.ideal === \"number\") {\n oc[oldname_(\"min\", key)] = r.ideal;\n cc.optional.push(oc);\n oc = {};\n oc[oldname_(\"max\", key)] = r.ideal;\n cc.optional.push(oc);\n } else {\n oc[oldname_(\"\", key)] = r.ideal;\n cc.optional.push(oc);\n }\n }\n if (r.exact !== undefined && typeof r.exact !== \"number\") {\n cc.mandatory = cc.mandatory || {};\n cc.mandatory[oldname_(\"\", key)] = r.exact;\n } else [\n \"min\",\n \"max\"\n ].forEach((mix)=>{\n if (r[mix] !== undefined) {\n cc.mandatory = cc.mandatory || {};\n cc.mandatory[oldname_(mix, key)] = r[mix];\n }\n });\n });\n if (c.advanced) cc.optional = (cc.optional || []).concat(c.advanced);\n return cc;\n };\n const shimConstraints_ = function(constraints, func) {\n if (browserDetails.version >= 61) return func(constraints);\n constraints = JSON.parse(JSON.stringify(constraints));\n if (constraints && typeof constraints.audio === \"object\") {\n const remap = function(obj, a, b) {\n if (a in obj && !(b in obj)) {\n obj[b] = obj[a];\n delete obj[a];\n }\n };\n constraints = JSON.parse(JSON.stringify(constraints));\n remap(constraints.audio, \"autoGainControl\", \"googAutoGainControl\");\n remap(constraints.audio, \"noiseSuppression\", \"googNoiseSuppression\");\n constraints.audio = constraintsToChrome_(constraints.audio);\n }\n if (constraints && typeof constraints.video === \"object\") {\n // Shim facingMode for mobile & surface pro.\n let face = constraints.video.facingMode;\n face = face && (typeof face === \"object\" ? face : {\n ideal: face\n });\n const getSupportedFacingModeLies = browserDetails.version < 66;\n if (face && (face.exact === \"user\" || face.exact === \"environment\" || face.ideal === \"user\" || face.ideal === \"environment\") && !(navigator.mediaDevices.getSupportedConstraints && navigator.mediaDevices.getSupportedConstraints().facingMode && !getSupportedFacingModeLies)) {\n delete constraints.video.facingMode;\n let matches;\n if (face.exact === \"environment\" || face.ideal === \"environment\") matches = [\n \"back\",\n \"rear\"\n ];\n else if (face.exact === \"user\" || face.ideal === \"user\") matches = [\n \"front\"\n ];\n if (matches) // Look for matches in label, or use last cam for back (typical).\n return navigator.mediaDevices.enumerateDevices().then((devices)=>{\n devices = devices.filter((d)=>d.kind === \"videoinput\");\n let dev = devices.find((d)=>matches.some((match)=>d.label.toLowerCase().includes(match)));\n if (!dev && devices.length && matches.includes(\"back\")) dev = devices[devices.length - 1]; // more likely the back cam\n if (dev) constraints.video.deviceId = face.exact ? {\n exact: dev.deviceId\n } : {\n ideal: dev.deviceId\n };\n constraints.video = constraintsToChrome_(constraints.video);\n $3b9679f8ab9bc604$var$logging(\"chrome: \" + JSON.stringify(constraints));\n return func(constraints);\n });\n }\n constraints.video = constraintsToChrome_(constraints.video);\n }\n $3b9679f8ab9bc604$var$logging(\"chrome: \" + JSON.stringify(constraints));\n return func(constraints);\n };\n const shimError_ = function(e) {\n if (browserDetails.version >= 64) return e;\n return {\n name: ({\n PermissionDeniedError: \"NotAllowedError\",\n PermissionDismissedError: \"NotAllowedError\",\n InvalidStateError: \"NotAllowedError\",\n DevicesNotFoundError: \"NotFoundError\",\n ConstraintNotSatisfiedError: \"OverconstrainedError\",\n TrackStartError: \"NotReadableError\",\n MediaDeviceFailedDueToShutdown: \"NotAllowedError\",\n MediaDeviceKillSwitchOn: \"NotAllowedError\",\n TabCaptureError: \"AbortError\",\n ScreenCaptureError: \"AbortError\",\n DeviceCaptureError: \"AbortError\"\n })[e.name] || e.name,\n message: e.message,\n constraint: e.constraint || e.constraintName,\n toString () {\n return this.name + (this.message && \": \") + this.message;\n }\n };\n };\n const getUserMedia_ = function(constraints, onSuccess, onError) {\n shimConstraints_(constraints, (c)=>{\n navigator.webkitGetUserMedia(c, onSuccess, (e)=>{\n if (onError) onError(shimError_(e));\n });\n });\n };\n navigator.getUserMedia = getUserMedia_.bind(navigator);\n // Even though Chrome 45 has navigator.mediaDevices and a getUserMedia\n // function which returns a Promise, it does not accept spec-style\n // constraints.\n if (navigator.mediaDevices.getUserMedia) {\n const origGetUserMedia = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);\n navigator.mediaDevices.getUserMedia = function(cs) {\n return shimConstraints_(cs, (c)=>origGetUserMedia(c).then((stream)=>{\n if (c.audio && !stream.getAudioTracks().length || c.video && !stream.getVideoTracks().length) {\n stream.getTracks().forEach((track)=>{\n track.stop();\n });\n throw new DOMException(\"\", \"NotFoundError\");\n }\n return stream;\n }, (e)=>Promise.reject(shimError_(e))));\n };\n }\n}\n\n\n/*\n * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */ /* eslint-env node */ \"use strict\";\nfunction $26c6446bf842b72e$export$97270b87351d9c04(window, getSourceId) {\n if (window.navigator.mediaDevices && \"getDisplayMedia\" in window.navigator.mediaDevices) return;\n if (!window.navigator.mediaDevices) return;\n // getSourceId is a function that returns a promise resolving with\n // the sourceId of the screen/window/tab to be shared.\n if (typeof getSourceId !== \"function\") {\n console.error(\"shimGetDisplayMedia: getSourceId argument is not a function\");\n return;\n }\n window.navigator.mediaDevices.getDisplayMedia = function getDisplayMedia(constraints) {\n return getSourceId(constraints).then((sourceId)=>{\n const widthSpecified = constraints.video && constraints.video.width;\n const heightSpecified = constraints.video && constraints.video.height;\n const frameRateSpecified = constraints.video && constraints.video.frameRate;\n constraints.video = {\n mandatory: {\n chromeMediaSource: \"desktop\",\n chromeMediaSourceId: sourceId,\n maxFrameRate: frameRateSpecified || 3\n }\n };\n if (widthSpecified) constraints.video.mandatory.maxWidth = widthSpecified;\n if (heightSpecified) constraints.video.mandatory.maxHeight = heightSpecified;\n return window.navigator.mediaDevices.getUserMedia(constraints);\n });\n };\n}\n\n\n\"use strict\";\nfunction $e3f02d0a98ccb0db$export$33ee24e7a300bcd1(window) {\n window.MediaStream = window.MediaStream || window.webkitMediaStream;\n}\nfunction $e3f02d0a98ccb0db$export$f358708f68ab068(window) {\n if (typeof window === \"object\" && window.RTCPeerConnection && !(\"ontrack\" in window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, \"ontrack\", {\n get () {\n return this._ontrack;\n },\n set (f) {\n if (this._ontrack) this.removeEventListener(\"track\", this._ontrack);\n this.addEventListener(\"track\", this._ontrack = f);\n },\n enumerable: true,\n configurable: true\n });\n const origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() {\n if (!this._ontrackpoly) {\n this._ontrackpoly = (e)=>{\n // onaddstream does not fire when a track is added to an existing\n // stream. But stream.onaddtrack is implemented so we use that.\n e.stream.addEventListener(\"addtrack\", (te)=>{\n let receiver;\n if (window.RTCPeerConnection.prototype.getReceivers) receiver = this.getReceivers().find((r)=>r.track && r.track.id === te.track.id);\n else receiver = {\n track: te.track\n };\n const event = new Event(\"track\");\n event.track = te.track;\n event.receiver = receiver;\n event.transceiver = {\n receiver: receiver\n };\n event.streams = [\n e.stream\n ];\n this.dispatchEvent(event);\n });\n e.stream.getTracks().forEach((track)=>{\n let receiver;\n if (window.RTCPeerConnection.prototype.getReceivers) receiver = this.getReceivers().find((r)=>r.track && r.track.id === track.id);\n else receiver = {\n track: track\n };\n const event = new Event(\"track\");\n event.track = track;\n event.receiver = receiver;\n event.transceiver = {\n receiver: receiver\n };\n event.streams = [\n e.stream\n ];\n this.dispatchEvent(event);\n });\n };\n this.addEventListener(\"addstream\", this._ontrackpoly);\n }\n return origSetRemoteDescription.apply(this, arguments);\n };\n } else // even if RTCRtpTransceiver is in window, it is only used and\n // emitted in unified-plan. Unfortunately this means we need\n // to unconditionally wrap the event.\n $35583cf39f4111ff$export$1f48841962b828b1(window, \"track\", (e)=>{\n if (!e.transceiver) Object.defineProperty(e, \"transceiver\", {\n value: {\n receiver: e.receiver\n }\n });\n return e;\n });\n}\nfunction $e3f02d0a98ccb0db$export$a41a030a2842f5d6(window) {\n // Overrides addTrack/removeTrack, depends on shimAddTrackRemoveTrack.\n if (typeof window === \"object\" && window.RTCPeerConnection && !(\"getSenders\" in window.RTCPeerConnection.prototype) && \"createDTMFSender\" in window.RTCPeerConnection.prototype) {\n const shimSenderWithDtmf = function(pc, track) {\n return {\n track: track,\n get dtmf () {\n if (this._dtmf === undefined) {\n if (track.kind === \"audio\") this._dtmf = pc.createDTMFSender(track);\n else this._dtmf = null;\n }\n return this._dtmf;\n },\n _pc: pc\n };\n };\n // augment addTrack when getSenders is not available.\n if (!window.RTCPeerConnection.prototype.getSenders) {\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n this._senders = this._senders || [];\n return this._senders.slice(); // return a copy of the internal state.\n };\n const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) {\n let sender = origAddTrack.apply(this, arguments);\n if (!sender) {\n sender = shimSenderWithDtmf(this, track);\n this._senders.push(sender);\n }\n return sender;\n };\n const origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack;\n window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) {\n origRemoveTrack.apply(this, arguments);\n const idx = this._senders.indexOf(sender);\n if (idx !== -1) this._senders.splice(idx, 1);\n };\n }\n const origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n this._senders = this._senders || [];\n origAddStream.apply(this, [\n stream\n ]);\n stream.getTracks().forEach((track)=>{\n this._senders.push(shimSenderWithDtmf(this, track));\n });\n };\n const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n this._senders = this._senders || [];\n origRemoveStream.apply(this, [\n stream\n ]);\n stream.getTracks().forEach((track)=>{\n const sender = this._senders.find((s)=>s.track === track);\n if (sender) this._senders.splice(this._senders.indexOf(sender), 1);\n });\n };\n } else if (typeof window === \"object\" && window.RTCPeerConnection && \"getSenders\" in window.RTCPeerConnection.prototype && \"createDTMFSender\" in window.RTCPeerConnection.prototype && window.RTCRtpSender && !(\"dtmf\" in window.RTCRtpSender.prototype)) {\n const origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n const senders = origGetSenders.apply(this, []);\n senders.forEach((sender)=>sender._pc = this);\n return senders;\n };\n Object.defineProperty(window.RTCRtpSender.prototype, \"dtmf\", {\n get () {\n if (this._dtmf === undefined) {\n if (this.track.kind === \"audio\") this._dtmf = this._pc.createDTMFSender(this.track);\n else this._dtmf = null;\n }\n return this._dtmf;\n }\n });\n }\n}\nfunction $e3f02d0a98ccb0db$export$90608323826f0b17(window) {\n if (!window.RTCPeerConnection) return;\n const origGetStats = window.RTCPeerConnection.prototype.getStats;\n window.RTCPeerConnection.prototype.getStats = function getStats() {\n const [selector, onSucc, onErr] = arguments;\n // If selector is a function then we are in the old style stats so just\n // pass back the original getStats format to avoid breaking old users.\n if (arguments.length > 0 && typeof selector === \"function\") return origGetStats.apply(this, arguments);\n // When spec-style getStats is supported, return those when called with\n // either no arguments or the selector argument is null.\n if (origGetStats.length === 0 && (arguments.length === 0 || typeof selector !== \"function\")) return origGetStats.apply(this, []);\n const fixChromeStats_ = function(response) {\n const standardReport = {};\n const reports = response.result();\n reports.forEach((report)=>{\n const standardStats = {\n id: report.id,\n timestamp: report.timestamp,\n type: {\n localcandidate: \"local-candidate\",\n remotecandidate: \"remote-candidate\"\n }[report.type] || report.type\n };\n report.names().forEach((name)=>{\n standardStats[name] = report.stat(name);\n });\n standardReport[standardStats.id] = standardStats;\n });\n return standardReport;\n };\n // shim getStats with maplike support\n const makeMapStats = function(stats) {\n return new Map(Object.keys(stats).map((key)=>[\n key,\n stats[key]\n ]));\n };\n if (arguments.length >= 2) {\n const successCallbackWrapper_ = function(response) {\n onSucc(makeMapStats(fixChromeStats_(response)));\n };\n return origGetStats.apply(this, [\n successCallbackWrapper_,\n selector\n ]);\n }\n // promise-support\n return new Promise((resolve, reject)=>{\n origGetStats.apply(this, [\n function(response) {\n resolve(makeMapStats(fixChromeStats_(response)));\n },\n reject\n ]);\n }).then(onSucc, onErr);\n };\n}\nfunction $e3f02d0a98ccb0db$export$f2f0f2338114eb4b(window) {\n if (!(typeof window === \"object\" && window.RTCPeerConnection && window.RTCRtpSender && window.RTCRtpReceiver)) return;\n // shim sender stats.\n if (!(\"getStats\" in window.RTCRtpSender.prototype)) {\n const origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n if (origGetSenders) window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n const senders = origGetSenders.apply(this, []);\n senders.forEach((sender)=>sender._pc = this);\n return senders;\n };\n const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n if (origAddTrack) window.RTCPeerConnection.prototype.addTrack = function addTrack() {\n const sender = origAddTrack.apply(this, arguments);\n sender._pc = this;\n return sender;\n };\n window.RTCRtpSender.prototype.getStats = function getStats() {\n const sender = this;\n return this._pc.getStats().then((result)=>/* Note: this will include stats of all senders that\n * send a track with the same id as sender.track as\n * it is not possible to identify the RTCRtpSender.\n */ $35583cf39f4111ff$export$93439ffc3f787d51(result, sender.track, true));\n };\n }\n // shim receiver stats.\n if (!(\"getStats\" in window.RTCRtpReceiver.prototype)) {\n const origGetReceivers = window.RTCPeerConnection.prototype.getReceivers;\n if (origGetReceivers) window.RTCPeerConnection.prototype.getReceivers = function getReceivers() {\n const receivers = origGetReceivers.apply(this, []);\n receivers.forEach((receiver)=>receiver._pc = this);\n return receivers;\n };\n $35583cf39f4111ff$export$1f48841962b828b1(window, \"track\", (e)=>{\n e.receiver._pc = e.srcElement;\n return e;\n });\n window.RTCRtpReceiver.prototype.getStats = function getStats() {\n const receiver = this;\n return this._pc.getStats().then((result)=>$35583cf39f4111ff$export$93439ffc3f787d51(result, receiver.track, false));\n };\n }\n if (!(\"getStats\" in window.RTCRtpSender.prototype && \"getStats\" in window.RTCRtpReceiver.prototype)) return;\n // shim RTCPeerConnection.getStats(track).\n const origGetStats = window.RTCPeerConnection.prototype.getStats;\n window.RTCPeerConnection.prototype.getStats = function getStats() {\n if (arguments.length > 0 && arguments[0] instanceof window.MediaStreamTrack) {\n const track = arguments[0];\n let sender;\n let receiver;\n let err;\n this.getSenders().forEach((s)=>{\n if (s.track === track) {\n if (sender) err = true;\n else sender = s;\n }\n });\n this.getReceivers().forEach((r)=>{\n if (r.track === track) {\n if (receiver) err = true;\n else receiver = r;\n }\n return r.track === track;\n });\n if (err || sender && receiver) return Promise.reject(new DOMException(\"There are more than one sender or receiver for the track.\", \"InvalidAccessError\"));\n else if (sender) return sender.getStats();\n else if (receiver) return receiver.getStats();\n return Promise.reject(new DOMException(\"There is no sender or receiver for the track.\", \"InvalidAccessError\"));\n }\n return origGetStats.apply(this, arguments);\n };\n}\nfunction $e3f02d0a98ccb0db$export$30e3cdd46f8d5100(window) {\n // shim addTrack/removeTrack with native variants in order to make\n // the interactions with legacy getLocalStreams behave as in other browsers.\n // Keeps a mapping stream.id => [stream, rtpsenders...]\n window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n return Object.keys(this._shimmedLocalStreams).map((streamId)=>this._shimmedLocalStreams[streamId][0]);\n };\n const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) {\n if (!stream) return origAddTrack.apply(this, arguments);\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n const sender = origAddTrack.apply(this, arguments);\n if (!this._shimmedLocalStreams[stream.id]) this._shimmedLocalStreams[stream.id] = [\n stream,\n sender\n ];\n else if (this._shimmedLocalStreams[stream.id].indexOf(sender) === -1) this._shimmedLocalStreams[stream.id].push(sender);\n return sender;\n };\n const origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n stream.getTracks().forEach((track)=>{\n const alreadyExists = this.getSenders().find((s)=>s.track === track);\n if (alreadyExists) throw new DOMException(\"Track already exists.\", \"InvalidAccessError\");\n });\n const existingSenders = this.getSenders();\n origAddStream.apply(this, arguments);\n const newSenders = this.getSenders().filter((newSender)=>existingSenders.indexOf(newSender) === -1);\n this._shimmedLocalStreams[stream.id] = [\n stream\n ].concat(newSenders);\n };\n const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n delete this._shimmedLocalStreams[stream.id];\n return origRemoveStream.apply(this, arguments);\n };\n const origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack;\n window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n if (sender) Object.keys(this._shimmedLocalStreams).forEach((streamId)=>{\n const idx = this._shimmedLocalStreams[streamId].indexOf(sender);\n if (idx !== -1) this._shimmedLocalStreams[streamId].splice(idx, 1);\n if (this._shimmedLocalStreams[streamId].length === 1) delete this._shimmedLocalStreams[streamId];\n });\n return origRemoveTrack.apply(this, arguments);\n };\n}\nfunction $e3f02d0a98ccb0db$export$9588259fcf4ebc91(window, browserDetails) {\n if (!window.RTCPeerConnection) return;\n // shim addTrack and removeTrack.\n if (window.RTCPeerConnection.prototype.addTrack && browserDetails.version >= 65) return $e3f02d0a98ccb0db$export$30e3cdd46f8d5100(window);\n // also shim pc.getLocalStreams when addTrack is shimmed\n // to return the original streams.\n const origGetLocalStreams = window.RTCPeerConnection.prototype.getLocalStreams;\n window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() {\n const nativeStreams = origGetLocalStreams.apply(this);\n this._reverseStreams = this._reverseStreams || {};\n return nativeStreams.map((stream)=>this._reverseStreams[stream.id]);\n };\n const origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n stream.getTracks().forEach((track)=>{\n const alreadyExists = this.getSenders().find((s)=>s.track === track);\n if (alreadyExists) throw new DOMException(\"Track already exists.\", \"InvalidAccessError\");\n });\n // Add identity mapping for consistency with addTrack.\n // Unless this is being used with a stream from addTrack.\n if (!this._reverseStreams[stream.id]) {\n const newStream = new window.MediaStream(stream.getTracks());\n this._streams[stream.id] = newStream;\n this._reverseStreams[newStream.id] = stream;\n stream = newStream;\n }\n origAddStream.apply(this, [\n stream\n ]);\n };\n const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n origRemoveStream.apply(this, [\n this._streams[stream.id] || stream\n ]);\n delete this._reverseStreams[this._streams[stream.id] ? this._streams[stream.id].id : stream.id];\n delete this._streams[stream.id];\n };\n window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) {\n if (this.signalingState === \"closed\") throw new DOMException(\"The RTCPeerConnection's signalingState is 'closed'.\", \"InvalidStateError\");\n const streams = [].slice.call(arguments, 1);\n if (streams.length !== 1 || !streams[0].getTracks().find((t)=>t === track)) // this is not fully correct but all we can manage without\n // [[associated MediaStreams]] internal slot.\n throw new DOMException(\"The adapter.js addTrack polyfill only supports a single stream which is associated with the specified track.\", \"NotSupportedError\");\n const alreadyExists = this.getSenders().find((s)=>s.track === track);\n if (alreadyExists) throw new DOMException(\"Track already exists.\", \"InvalidAccessError\");\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n const oldStream = this._streams[stream.id];\n if (oldStream) {\n // this is using odd Chrome behaviour, use with caution:\n // https://bugs.chromium.org/p/webrtc/issues/detail?id=7815\n // Note: we rely on the high-level addTrack/dtmf shim to\n // create the sender with a dtmf sender.\n oldStream.addTrack(track);\n // Trigger ONN async.\n Promise.resolve().then(()=>{\n this.dispatchEvent(new Event(\"negotiationneeded\"));\n });\n } else {\n const newStream = new window.MediaStream([\n track\n ]);\n this._streams[stream.id] = newStream;\n this._reverseStreams[newStream.id] = stream;\n this.addStream(newStream);\n }\n return this.getSenders().find((s)=>s.track === track);\n };\n // replace the internal stream id with the external one and\n // vice versa.\n function replaceInternalStreamId(pc, description) {\n let sdp = description.sdp;\n Object.keys(pc._reverseStreams || []).forEach((internalId)=>{\n const externalStream = pc._reverseStreams[internalId];\n const internalStream = pc._streams[externalStream.id];\n sdp = sdp.replace(new RegExp(internalStream.id, \"g\"), externalStream.id);\n });\n return new RTCSessionDescription({\n type: description.type,\n sdp: sdp\n });\n }\n function replaceExternalStreamId(pc, description) {\n let sdp = description.sdp;\n Object.keys(pc._reverseStreams || []).forEach((internalId)=>{\n const externalStream = pc._reverseStreams[internalId];\n const internalStream = pc._streams[externalStream.id];\n sdp = sdp.replace(new RegExp(externalStream.id, \"g\"), internalStream.id);\n });\n return new RTCSessionDescription({\n type: description.type,\n sdp: sdp\n });\n }\n [\n \"createOffer\",\n \"createAnswer\"\n ].forEach(function(method) {\n const nativeMethod = window.RTCPeerConnection.prototype[method];\n const methodObj = {\n [method] () {\n const args = arguments;\n const isLegacyCall = arguments.length && typeof arguments[0] === \"function\";\n if (isLegacyCall) return nativeMethod.apply(this, [\n (description)=>{\n const desc = replaceInternalStreamId(this, description);\n args[0].apply(null, [\n desc\n ]);\n },\n (err)=>{\n if (args[1]) args[1].apply(null, err);\n },\n arguments[2]\n ]);\n return nativeMethod.apply(this, arguments).then((description)=>replaceInternalStreamId(this, description));\n }\n };\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n const origSetLocalDescription = window.RTCPeerConnection.prototype.setLocalDescription;\n window.RTCPeerConnection.prototype.setLocalDescription = function setLocalDescription() {\n if (!arguments.length || !arguments[0].type) return origSetLocalDescription.apply(this, arguments);\n arguments[0] = replaceExternalStreamId(this, arguments[0]);\n return origSetLocalDescription.apply(this, arguments);\n };\n // TODO: mangle getStats: https://w3c.github.io/webrtc-stats/#dom-rtcmediastreamstats-streamidentifier\n const origLocalDescription = Object.getOwnPropertyDescriptor(window.RTCPeerConnection.prototype, \"localDescription\");\n Object.defineProperty(window.RTCPeerConnection.prototype, \"localDescription\", {\n get () {\n const description = origLocalDescription.get.apply(this);\n if (description.type === \"\") return description;\n return replaceInternalStreamId(this, description);\n }\n });\n window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) {\n if (this.signalingState === \"closed\") throw new DOMException(\"The RTCPeerConnection's signalingState is 'closed'.\", \"InvalidStateError\");\n // We can not yet check for sender instanceof RTCRtpSender\n // since we shim RTPSender. So we check if sender._pc is set.\n if (!sender._pc) throw new DOMException(\"Argument 1 of RTCPeerConnection.removeTrack does not implement interface RTCRtpSender.\", \"TypeError\");\n const isLocal = sender._pc === this;\n if (!isLocal) throw new DOMException(\"Sender was not created by this connection.\", \"InvalidAccessError\");\n // Search for the native stream the senders track belongs to.\n this._streams = this._streams || {};\n let stream;\n Object.keys(this._streams).forEach((streamid)=>{\n const hasTrack = this._streams[streamid].getTracks().find((track)=>sender.track === track);\n if (hasTrack) stream = this._streams[streamid];\n });\n if (stream) {\n if (stream.getTracks().length === 1) // if this is the last track of the stream, remove the stream. This\n // takes care of any shimmed _senders.\n this.removeStream(this._reverseStreams[stream.id]);\n else // relying on the same odd chrome behaviour as above.\n stream.removeTrack(sender.track);\n this.dispatchEvent(new Event(\"negotiationneeded\"));\n }\n };\n}\nfunction $e3f02d0a98ccb0db$export$852a08dda9a55ea7(window, browserDetails) {\n if (!window.RTCPeerConnection && window.webkitRTCPeerConnection) // very basic support for old versions.\n window.RTCPeerConnection = window.webkitRTCPeerConnection;\n if (!window.RTCPeerConnection) return;\n // shim implicit creation of RTCSessionDescription/RTCIceCandidate\n if (browserDetails.version < 53) [\n \"setLocalDescription\",\n \"setRemoteDescription\",\n \"addIceCandidate\"\n ].forEach(function(method) {\n const nativeMethod = window.RTCPeerConnection.prototype[method];\n const methodObj = {\n [method] () {\n arguments[0] = new (method === \"addIceCandidate\" ? window.RTCIceCandidate : window.RTCSessionDescription)(arguments[0]);\n return nativeMethod.apply(this, arguments);\n }\n };\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n}\nfunction $e3f02d0a98ccb0db$export$341293bbeaae37cb(window, browserDetails) {\n $35583cf39f4111ff$export$1f48841962b828b1(window, \"negotiationneeded\", (e)=>{\n const pc = e.target;\n if (browserDetails.version < 72 || pc.getConfiguration && pc.getConfiguration().sdpSemantics === \"plan-b\") {\n if (pc.signalingState !== \"stable\") return;\n }\n return e;\n });\n}\n\n\nvar $5c8245455fb0fb72$exports = {};\n\n$parcel$export($5c8245455fb0fb72$exports, \"shimOnTrack\", () => $5c8245455fb0fb72$export$f358708f68ab068);\n$parcel$export($5c8245455fb0fb72$exports, \"shimPeerConnection\", () => $5c8245455fb0fb72$export$852a08dda9a55ea7);\n$parcel$export($5c8245455fb0fb72$exports, \"shimSenderGetStats\", () => $5c8245455fb0fb72$export$f0525502095c04ef);\n$parcel$export($5c8245455fb0fb72$exports, \"shimReceiverGetStats\", () => $5c8245455fb0fb72$export$83d69126527b1171);\n$parcel$export($5c8245455fb0fb72$exports, \"shimRemoveStream\", () => $5c8245455fb0fb72$export$825e523ef749bd8c);\n$parcel$export($5c8245455fb0fb72$exports, \"shimRTCDataChannel\", () => $5c8245455fb0fb72$export$ff9cb3bc8990e8f7);\n$parcel$export($5c8245455fb0fb72$exports, \"shimAddTransceiver\", () => $5c8245455fb0fb72$export$70c77533b6e9908d);\n$parcel$export($5c8245455fb0fb72$exports, \"shimGetParameters\", () => $5c8245455fb0fb72$export$66238223c298fbaa);\n$parcel$export($5c8245455fb0fb72$exports, \"shimCreateOffer\", () => $5c8245455fb0fb72$export$51beccf0e777b843);\n$parcel$export($5c8245455fb0fb72$exports, \"shimCreateAnswer\", () => $5c8245455fb0fb72$export$df0b46e7cef08150);\n$parcel$export($5c8245455fb0fb72$exports, \"shimGetUserMedia\", () => $7252536737e6fa6d$export$1ed4910f4d37dc5e);\n$parcel$export($5c8245455fb0fb72$exports, \"shimGetDisplayMedia\", () => $f85cf98e09e9e2f6$export$97270b87351d9c04);\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */ /* eslint-env node */ \n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */ /* eslint-env node */ \n\"use strict\";\nfunction $7252536737e6fa6d$export$1ed4910f4d37dc5e(window, browserDetails) {\n const navigator = window && window.navigator;\n const MediaStreamTrack = window && window.MediaStreamTrack;\n navigator.getUserMedia = function(constraints, onSuccess, onError) {\n // Replace Firefox 44+'s deprecation warning with unprefixed version.\n $35583cf39f4111ff$export$cdd73fc4100a6ef4(\"navigator.getUserMedia\", \"navigator.mediaDevices.getUserMedia\");\n navigator.mediaDevices.getUserMedia(constraints).then(onSuccess, onError);\n };\n if (!(browserDetails.version > 55 && \"autoGainControl\" in navigator.mediaDevices.getSupportedConstraints())) {\n const remap = function(obj, a, b) {\n if (a in obj && !(b in obj)) {\n obj[b] = obj[a];\n delete obj[a];\n }\n };\n const nativeGetUserMedia = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);\n navigator.mediaDevices.getUserMedia = function(c) {\n if (typeof c === \"object\" && typeof c.audio === \"object\") {\n c = JSON.parse(JSON.stringify(c));\n remap(c.audio, \"autoGainControl\", \"mozAutoGainControl\");\n remap(c.audio, \"noiseSuppression\", \"mozNoiseSuppression\");\n }\n return nativeGetUserMedia(c);\n };\n if (MediaStreamTrack && MediaStreamTrack.prototype.getSettings) {\n const nativeGetSettings = MediaStreamTrack.prototype.getSettings;\n MediaStreamTrack.prototype.getSettings = function() {\n const obj = nativeGetSettings.apply(this, arguments);\n remap(obj, \"mozAutoGainControl\", \"autoGainControl\");\n remap(obj, \"mozNoiseSuppression\", \"noiseSuppression\");\n return obj;\n };\n }\n if (MediaStreamTrack && MediaStreamTrack.prototype.applyConstraints) {\n const nativeApplyConstraints = MediaStreamTrack.prototype.applyConstraints;\n MediaStreamTrack.prototype.applyConstraints = function(c) {\n if (this.kind === \"audio\" && typeof c === \"object\") {\n c = JSON.parse(JSON.stringify(c));\n remap(c, \"autoGainControl\", \"mozAutoGainControl\");\n remap(c, \"noiseSuppression\", \"mozNoiseSuppression\");\n }\n return nativeApplyConstraints.apply(this, [\n c\n ]);\n };\n }\n }\n}\n\n\n/*\n * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */ /* eslint-env node */ \"use strict\";\nfunction $f85cf98e09e9e2f6$export$97270b87351d9c04(window, preferredMediaSource) {\n if (window.navigator.mediaDevices && \"getDisplayMedia\" in window.navigator.mediaDevices) return;\n if (!window.navigator.mediaDevices) return;\n window.navigator.mediaDevices.getDisplayMedia = function getDisplayMedia(constraints) {\n if (!(constraints && constraints.video)) {\n const err = new DOMException(\"getDisplayMedia without video constraints is undefined\");\n err.name = \"NotFoundError\";\n // from https://heycam.github.io/webidl/#idl-DOMException-error-names\n err.code = 8;\n return Promise.reject(err);\n }\n if (constraints.video === true) constraints.video = {\n mediaSource: preferredMediaSource\n };\n else constraints.video.mediaSource = preferredMediaSource;\n return window.navigator.mediaDevices.getUserMedia(constraints);\n };\n}\n\n\n\"use strict\";\nfunction $5c8245455fb0fb72$export$f358708f68ab068(window) {\n if (typeof window === \"object\" && window.RTCTrackEvent && \"receiver\" in window.RTCTrackEvent.prototype && !(\"transceiver\" in window.RTCTrackEvent.prototype)) Object.defineProperty(window.RTCTrackEvent.prototype, \"transceiver\", {\n get () {\n return {\n receiver: this.receiver\n };\n }\n });\n}\nfunction $5c8245455fb0fb72$export$852a08dda9a55ea7(window, browserDetails) {\n if (typeof window !== \"object\" || !(window.RTCPeerConnection || window.mozRTCPeerConnection)) return; // probably media.peerconnection.enabled=false in about:config\n if (!window.RTCPeerConnection && window.mozRTCPeerConnection) // very basic support for old versions.\n window.RTCPeerConnection = window.mozRTCPeerConnection;\n if (browserDetails.version < 53) // shim away need for obsolete RTCIceCandidate/RTCSessionDescription.\n [\n \"setLocalDescription\",\n \"setRemoteDescription\",\n \"addIceCandidate\"\n ].forEach(function(method) {\n const nativeMethod = window.RTCPeerConnection.prototype[method];\n const methodObj = {\n [method] () {\n arguments[0] = new (method === \"addIceCandidate\" ? window.RTCIceCandidate : window.RTCSessionDescription)(arguments[0]);\n return nativeMethod.apply(this, arguments);\n }\n };\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n const modernStatsTypes = {\n inboundrtp: \"inbound-rtp\",\n outboundrtp: \"outbound-rtp\",\n candidatepair: \"candidate-pair\",\n localcandidate: \"local-candidate\",\n remotecandidate: \"remote-candidate\"\n };\n const nativeGetStats = window.RTCPeerConnection.prototype.getStats;\n window.RTCPeerConnection.prototype.getStats = function getStats() {\n const [selector, onSucc, onErr] = arguments;\n return nativeGetStats.apply(this, [\n selector || null\n ]).then((stats)=>{\n if (browserDetails.version < 53 && !onSucc) // Shim only promise getStats with spec-hyphens in type names\n // Leave callback version alone; misc old uses of forEach before Map\n try {\n stats.forEach((stat)=>{\n stat.type = modernStatsTypes[stat.type] || stat.type;\n });\n } catch (e) {\n if (e.name !== \"TypeError\") throw e;\n // Avoid TypeError: \"type\" is read-only, in old versions. 34-43ish\n stats.forEach((stat, i)=>{\n stats.set(i, Object.assign({}, stat, {\n type: modernStatsTypes[stat.type] || stat.type\n }));\n });\n }\n return stats;\n }).then(onSucc, onErr);\n };\n}\nfunction $5c8245455fb0fb72$export$f0525502095c04ef(window) {\n if (!(typeof window === \"object\" && window.RTCPeerConnection && window.RTCRtpSender)) return;\n if (window.RTCRtpSender && \"getStats\" in window.RTCRtpSender.prototype) return;\n const origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n if (origGetSenders) window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n const senders = origGetSenders.apply(this, []);\n senders.forEach((sender)=>sender._pc = this);\n return senders;\n };\n const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n if (origAddTrack) window.RTCPeerConnection.prototype.addTrack = function addTrack() {\n const sender = origAddTrack.apply(this, arguments);\n sender._pc = this;\n return sender;\n };\n window.RTCRtpSender.prototype.getStats = function getStats() {\n return this.track ? this._pc.getStats(this.track) : Promise.resolve(new Map());\n };\n}\nfunction $5c8245455fb0fb72$export$83d69126527b1171(window) {\n if (!(typeof window === \"object\" && window.RTCPeerConnection && window.RTCRtpSender)) return;\n if (window.RTCRtpSender && \"getStats\" in window.RTCRtpReceiver.prototype) return;\n const origGetReceivers = window.RTCPeerConnection.prototype.getReceivers;\n if (origGetReceivers) window.RTCPeerConnection.prototype.getReceivers = function getReceivers() {\n const receivers = origGetReceivers.apply(this, []);\n receivers.forEach((receiver)=>receiver._pc = this);\n return receivers;\n };\n $35583cf39f4111ff$export$1f48841962b828b1(window, \"track\", (e)=>{\n e.receiver._pc = e.srcElement;\n return e;\n });\n window.RTCRtpReceiver.prototype.getStats = function getStats() {\n return this._pc.getStats(this.track);\n };\n}\nfunction $5c8245455fb0fb72$export$825e523ef749bd8c(window) {\n if (!window.RTCPeerConnection || \"removeStream\" in window.RTCPeerConnection.prototype) return;\n window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n $35583cf39f4111ff$export$cdd73fc4100a6ef4(\"removeStream\", \"removeTrack\");\n this.getSenders().forEach((sender)=>{\n if (sender.track && stream.getTracks().includes(sender.track)) this.removeTrack(sender);\n });\n };\n}\nfunction $5c8245455fb0fb72$export$ff9cb3bc8990e8f7(window) {\n // rename DataChannel to RTCDataChannel (native fix in FF60):\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1173851\n if (window.DataChannel && !window.RTCDataChannel) window.RTCDataChannel = window.DataChannel;\n}\nfunction $5c8245455fb0fb72$export$70c77533b6e9908d(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!(typeof window === \"object\" && window.RTCPeerConnection)) return;\n const origAddTransceiver = window.RTCPeerConnection.prototype.addTransceiver;\n if (origAddTransceiver) window.RTCPeerConnection.prototype.addTransceiver = function addTransceiver() {\n this.setParametersPromises = [];\n // WebIDL input coercion and validation\n let sendEncodings = arguments[1] && arguments[1].sendEncodings;\n if (sendEncodings === undefined) sendEncodings = [];\n sendEncodings = [\n ...sendEncodings\n ];\n const shouldPerformCheck = sendEncodings.length > 0;\n if (shouldPerformCheck) // If sendEncodings params are provided, validate grammar\n sendEncodings.forEach((encodingParam)=>{\n if (\"rid\" in encodingParam) {\n const ridRegex = /^[a-z0-9]{0,16}$/i;\n if (!ridRegex.test(encodingParam.rid)) throw new TypeError(\"Invalid RID value provided.\");\n }\n if (\"scaleResolutionDownBy\" in encodingParam) {\n if (!(parseFloat(encodingParam.scaleResolutionDownBy) >= 1.0)) throw new RangeError(\"scale_resolution_down_by must be >= 1.0\");\n }\n if (\"maxFramerate\" in encodingParam) {\n if (!(parseFloat(encodingParam.maxFramerate) >= 0)) throw new RangeError(\"max_framerate must be >= 0.0\");\n }\n });\n const transceiver = origAddTransceiver.apply(this, arguments);\n if (shouldPerformCheck) {\n // Check if the init options were applied. If not we do this in an\n // asynchronous way and save the promise reference in a global object.\n // This is an ugly hack, but at the same time is way more robust than\n // checking the sender parameters before and after the createOffer\n // Also note that after the createoffer we are not 100% sure that\n // the params were asynchronously applied so we might miss the\n // opportunity to recreate offer.\n const { sender: sender } = transceiver;\n const params = sender.getParameters();\n if (!(\"encodings\" in params) || // Avoid being fooled by patched getParameters() below.\n params.encodings.length === 1 && Object.keys(params.encodings[0]).length === 0) {\n params.encodings = sendEncodings;\n sender.sendEncodings = sendEncodings;\n this.setParametersPromises.push(sender.setParameters(params).then(()=>{\n delete sender.sendEncodings;\n }).catch(()=>{\n delete sender.sendEncodings;\n }));\n }\n }\n return transceiver;\n };\n}\nfunction $5c8245455fb0fb72$export$66238223c298fbaa(window) {\n if (!(typeof window === \"object\" && window.RTCRtpSender)) return;\n const origGetParameters = window.RTCRtpSender.prototype.getParameters;\n if (origGetParameters) window.RTCRtpSender.prototype.getParameters = function getParameters() {\n const params = origGetParameters.apply(this, arguments);\n if (!(\"encodings\" in params)) params.encodings = [].concat(this.sendEncodings || [\n {}\n ]);\n return params;\n };\n}\nfunction $5c8245455fb0fb72$export$51beccf0e777b843(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!(typeof window === \"object\" && window.RTCPeerConnection)) return;\n const origCreateOffer = window.RTCPeerConnection.prototype.createOffer;\n window.RTCPeerConnection.prototype.createOffer = function createOffer() {\n if (this.setParametersPromises && this.setParametersPromises.length) return Promise.all(this.setParametersPromises).then(()=>{\n return origCreateOffer.apply(this, arguments);\n }).finally(()=>{\n this.setParametersPromises = [];\n });\n return origCreateOffer.apply(this, arguments);\n };\n}\nfunction $5c8245455fb0fb72$export$df0b46e7cef08150(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!(typeof window === \"object\" && window.RTCPeerConnection)) return;\n const origCreateAnswer = window.RTCPeerConnection.prototype.createAnswer;\n window.RTCPeerConnection.prototype.createAnswer = function createAnswer() {\n if (this.setParametersPromises && this.setParametersPromises.length) return Promise.all(this.setParametersPromises).then(()=>{\n return origCreateAnswer.apply(this, arguments);\n }).finally(()=>{\n this.setParametersPromises = [];\n });\n return origCreateAnswer.apply(this, arguments);\n };\n}\n\n\nvar $4bb6650df37cb8fe$exports = {};\n\n$parcel$export($4bb6650df37cb8fe$exports, \"shimLocalStreamsAPI\", () => $4bb6650df37cb8fe$export$8df41282f4fdcea2);\n$parcel$export($4bb6650df37cb8fe$exports, \"shimRemoteStreamsAPI\", () => $4bb6650df37cb8fe$export$762aa4cbb4f2f857);\n$parcel$export($4bb6650df37cb8fe$exports, \"shimCallbacksAPI\", () => $4bb6650df37cb8fe$export$da31df245debdd3);\n$parcel$export($4bb6650df37cb8fe$exports, \"shimGetUserMedia\", () => $4bb6650df37cb8fe$export$1ed4910f4d37dc5e);\n$parcel$export($4bb6650df37cb8fe$exports, \"shimConstraints\", () => $4bb6650df37cb8fe$export$494a01ac68ba81ac);\n$parcel$export($4bb6650df37cb8fe$exports, \"shimRTCIceServerUrls\", () => $4bb6650df37cb8fe$export$671a8b47b41b6f41);\n$parcel$export($4bb6650df37cb8fe$exports, \"shimTrackEventTransceiver\", () => $4bb6650df37cb8fe$export$85d53da088cb1b14);\n$parcel$export($4bb6650df37cb8fe$exports, \"shimCreateOfferLegacy\", () => $4bb6650df37cb8fe$export$d444266503fdd2d4);\n$parcel$export($4bb6650df37cb8fe$exports, \"shimAudioContext\", () => $4bb6650df37cb8fe$export$857cd739a7b795d2);\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */ \n\"use strict\";\nfunction $4bb6650df37cb8fe$export$8df41282f4fdcea2(window) {\n if (typeof window !== \"object\" || !window.RTCPeerConnection) return;\n if (!(\"getLocalStreams\" in window.RTCPeerConnection.prototype)) window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() {\n if (!this._localStreams) this._localStreams = [];\n return this._localStreams;\n };\n if (!(\"addStream\" in window.RTCPeerConnection.prototype)) {\n const _addTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n if (!this._localStreams) this._localStreams = [];\n if (!this._localStreams.includes(stream)) this._localStreams.push(stream);\n // Try to emulate Chrome's behaviour of adding in audio-video order.\n // Safari orders by track id.\n stream.getAudioTracks().forEach((track)=>_addTrack.call(this, track, stream));\n stream.getVideoTracks().forEach((track)=>_addTrack.call(this, track, stream));\n };\n window.RTCPeerConnection.prototype.addTrack = function addTrack(track, ...streams) {\n if (streams) streams.forEach((stream)=>{\n if (!this._localStreams) this._localStreams = [\n stream\n ];\n else if (!this._localStreams.includes(stream)) this._localStreams.push(stream);\n });\n return _addTrack.apply(this, arguments);\n };\n }\n if (!(\"removeStream\" in window.RTCPeerConnection.prototype)) window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n if (!this._localStreams) this._localStreams = [];\n const index = this._localStreams.indexOf(stream);\n if (index === -1) return;\n this._localStreams.splice(index, 1);\n const tracks = stream.getTracks();\n this.getSenders().forEach((sender)=>{\n if (tracks.includes(sender.track)) this.removeTrack(sender);\n });\n };\n}\nfunction $4bb6650df37cb8fe$export$762aa4cbb4f2f857(window) {\n if (typeof window !== \"object\" || !window.RTCPeerConnection) return;\n if (!(\"getRemoteStreams\" in window.RTCPeerConnection.prototype)) window.RTCPeerConnection.prototype.getRemoteStreams = function getRemoteStreams() {\n return this._remoteStreams ? this._remoteStreams : [];\n };\n if (!(\"onaddstream\" in window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, \"onaddstream\", {\n get () {\n return this._onaddstream;\n },\n set (f) {\n if (this._onaddstream) {\n this.removeEventListener(\"addstream\", this._onaddstream);\n this.removeEventListener(\"track\", this._onaddstreampoly);\n }\n this.addEventListener(\"addstream\", this._onaddstream = f);\n this.addEventListener(\"track\", this._onaddstreampoly = (e)=>{\n e.streams.forEach((stream)=>{\n if (!this._remoteStreams) this._remoteStreams = [];\n if (this._remoteStreams.includes(stream)) return;\n this._remoteStreams.push(stream);\n const event = new Event(\"addstream\");\n event.stream = stream;\n this.dispatchEvent(event);\n });\n });\n }\n });\n const origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() {\n const pc = this;\n if (!this._onaddstreampoly) this.addEventListener(\"track\", this._onaddstreampoly = function(e) {\n e.streams.forEach((stream)=>{\n if (!pc._remoteStreams) pc._remoteStreams = [];\n if (pc._remoteStreams.indexOf(stream) >= 0) return;\n pc._remoteStreams.push(stream);\n const event = new Event(\"addstream\");\n event.stream = stream;\n pc.dispatchEvent(event);\n });\n });\n return origSetRemoteDescription.apply(pc, arguments);\n };\n }\n}\nfunction $4bb6650df37cb8fe$export$da31df245debdd3(window) {\n if (typeof window !== \"object\" || !window.RTCPeerConnection) return;\n const prototype = window.RTCPeerConnection.prototype;\n const origCreateOffer = prototype.createOffer;\n const origCreateAnswer = prototype.createAnswer;\n const setLocalDescription = prototype.setLocalDescription;\n const setRemoteDescription = prototype.setRemoteDescription;\n const addIceCandidate = prototype.addIceCandidate;\n prototype.createOffer = function createOffer(successCallback, failureCallback) {\n const options = arguments.length >= 2 ? arguments[2] : arguments[0];\n const promise = origCreateOffer.apply(this, [\n options\n ]);\n if (!failureCallback) return promise;\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.createAnswer = function createAnswer(successCallback, failureCallback) {\n const options = arguments.length >= 2 ? arguments[2] : arguments[0];\n const promise = origCreateAnswer.apply(this, [\n options\n ]);\n if (!failureCallback) return promise;\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n let withCallback = function(description, successCallback, failureCallback) {\n const promise = setLocalDescription.apply(this, [\n description\n ]);\n if (!failureCallback) return promise;\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.setLocalDescription = withCallback;\n withCallback = function(description, successCallback, failureCallback) {\n const promise = setRemoteDescription.apply(this, [\n description\n ]);\n if (!failureCallback) return promise;\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.setRemoteDescription = withCallback;\n withCallback = function(candidate, successCallback, failureCallback) {\n const promise = addIceCandidate.apply(this, [\n candidate\n ]);\n if (!failureCallback) return promise;\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.addIceCandidate = withCallback;\n}\nfunction $4bb6650df37cb8fe$export$1ed4910f4d37dc5e(window) {\n const navigator = window && window.navigator;\n if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\n // shim not needed in Safari 12.1\n const mediaDevices = navigator.mediaDevices;\n const _getUserMedia = mediaDevices.getUserMedia.bind(mediaDevices);\n navigator.mediaDevices.getUserMedia = (constraints)=>{\n return _getUserMedia($4bb6650df37cb8fe$export$494a01ac68ba81ac(constraints));\n };\n }\n if (!navigator.getUserMedia && navigator.mediaDevices && navigator.mediaDevices.getUserMedia) navigator.getUserMedia = (function getUserMedia(constraints, cb, errcb) {\n navigator.mediaDevices.getUserMedia(constraints).then(cb, errcb);\n }).bind(navigator);\n}\nfunction $4bb6650df37cb8fe$export$494a01ac68ba81ac(constraints) {\n if (constraints && constraints.video !== undefined) return Object.assign({}, constraints, {\n video: $35583cf39f4111ff$export$15384eac40dc88c8(constraints.video)\n });\n return constraints;\n}\nfunction $4bb6650df37cb8fe$export$671a8b47b41b6f41(window) {\n if (!window.RTCPeerConnection) return;\n // migrate from non-spec RTCIceServer.url to RTCIceServer.urls\n const OrigPeerConnection = window.RTCPeerConnection;\n window.RTCPeerConnection = function RTCPeerConnection(pcConfig, pcConstraints) {\n if (pcConfig && pcConfig.iceServers) {\n const newIceServers = [];\n for(let i = 0; i < pcConfig.iceServers.length; i++){\n let server = pcConfig.iceServers[i];\n if (server.urls === undefined && server.url) {\n $35583cf39f4111ff$export$cdd73fc4100a6ef4(\"RTCIceServer.url\", \"RTCIceServer.urls\");\n server = JSON.parse(JSON.stringify(server));\n server.urls = server.url;\n delete server.url;\n newIceServers.push(server);\n } else newIceServers.push(pcConfig.iceServers[i]);\n }\n pcConfig.iceServers = newIceServers;\n }\n return new OrigPeerConnection(pcConfig, pcConstraints);\n };\n window.RTCPeerConnection.prototype = OrigPeerConnection.prototype;\n // wrap static methods. Currently just generateCertificate.\n if (\"generateCertificate\" in OrigPeerConnection) Object.defineProperty(window.RTCPeerConnection, \"generateCertificate\", {\n get () {\n return OrigPeerConnection.generateCertificate;\n }\n });\n}\nfunction $4bb6650df37cb8fe$export$85d53da088cb1b14(window) {\n // Add event.transceiver member over deprecated event.receiver\n if (typeof window === \"object\" && window.RTCTrackEvent && \"receiver\" in window.RTCTrackEvent.prototype && !(\"transceiver\" in window.RTCTrackEvent.prototype)) Object.defineProperty(window.RTCTrackEvent.prototype, \"transceiver\", {\n get () {\n return {\n receiver: this.receiver\n };\n }\n });\n}\nfunction $4bb6650df37cb8fe$export$d444266503fdd2d4(window) {\n const origCreateOffer = window.RTCPeerConnection.prototype.createOffer;\n window.RTCPeerConnection.prototype.createOffer = function createOffer(offerOptions) {\n if (offerOptions) {\n if (typeof offerOptions.offerToReceiveAudio !== \"undefined\") // support bit values\n offerOptions.offerToReceiveAudio = !!offerOptions.offerToReceiveAudio;\n const audioTransceiver = this.getTransceivers().find((transceiver)=>transceiver.receiver.track.kind === \"audio\");\n if (offerOptions.offerToReceiveAudio === false && audioTransceiver) {\n if (audioTransceiver.direction === \"sendrecv\") {\n if (audioTransceiver.setDirection) audioTransceiver.setDirection(\"sendonly\");\n else audioTransceiver.direction = \"sendonly\";\n } else if (audioTransceiver.direction === \"recvonly\") {\n if (audioTransceiver.setDirection) audioTransceiver.setDirection(\"inactive\");\n else audioTransceiver.direction = \"inactive\";\n }\n } else if (offerOptions.offerToReceiveAudio === true && !audioTransceiver) this.addTransceiver(\"audio\", {\n direction: \"recvonly\"\n });\n if (typeof offerOptions.offerToReceiveVideo !== \"undefined\") // support bit values\n offerOptions.offerToReceiveVideo = !!offerOptions.offerToReceiveVideo;\n const videoTransceiver = this.getTransceivers().find((transceiver)=>transceiver.receiver.track.kind === \"video\");\n if (offerOptions.offerToReceiveVideo === false && videoTransceiver) {\n if (videoTransceiver.direction === \"sendrecv\") {\n if (videoTransceiver.setDirection) videoTransceiver.setDirection(\"sendonly\");\n else videoTransceiver.direction = \"sendonly\";\n } else if (videoTransceiver.direction === \"recvonly\") {\n if (videoTransceiver.setDirection) videoTransceiver.setDirection(\"inactive\");\n else videoTransceiver.direction = \"inactive\";\n }\n } else if (offerOptions.offerToReceiveVideo === true && !videoTransceiver) this.addTransceiver(\"video\", {\n direction: \"recvonly\"\n });\n }\n return origCreateOffer.apply(this, arguments);\n };\n}\nfunction $4bb6650df37cb8fe$export$857cd739a7b795d2(window) {\n if (typeof window !== \"object\" || window.AudioContext) return;\n window.AudioContext = window.webkitAudioContext;\n}\n\n\nvar $8080a560a280724d$exports = {};\n\n$parcel$export($8080a560a280724d$exports, \"shimRTCIceCandidate\", () => $8080a560a280724d$export$cf133661e444ccfe);\n$parcel$export($8080a560a280724d$exports, \"shimRTCIceCandidateRelayProtocol\", () => $8080a560a280724d$export$fdafb8d8280e29b5);\n$parcel$export($8080a560a280724d$exports, \"shimMaxMessageSize\", () => $8080a560a280724d$export$a99147c78a56edc4);\n$parcel$export($8080a560a280724d$exports, \"shimSendThrowTypeError\", () => $8080a560a280724d$export$d461c8d5c5db5da7);\n$parcel$export($8080a560a280724d$exports, \"shimConnectionState\", () => $8080a560a280724d$export$63bb816cc75460);\n$parcel$export($8080a560a280724d$exports, \"removeExtmapAllowMixed\", () => $8080a560a280724d$export$a57d114344295149);\n$parcel$export($8080a560a280724d$exports, \"shimAddIceCandidateNullOrEmpty\", () => $8080a560a280724d$export$51d5e40b48c771c7);\n$parcel$export($8080a560a280724d$exports, \"shimParameterlessSetLocalDescription\", () => $8080a560a280724d$export$7170d04e59f9d553);\n/*\n * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */ /* eslint-env node */ var $257b6346d6d1b15f$exports = {};\n/* eslint-env node */ \"use strict\";\n// SDP helpers.\nconst $257b6346d6d1b15f$var$SDPUtils = {};\n// Generate an alphanumeric identifier for cname or mids.\n// TODO: use UUIDs instead? https://gist.github.com/jed/982883\n$257b6346d6d1b15f$var$SDPUtils.generateIdentifier = function() {\n return Math.random().toString(36).substring(2, 12);\n};\n// The RTCP CNAME used by all peerconnections from the same JS.\n$257b6346d6d1b15f$var$SDPUtils.localCName = $257b6346d6d1b15f$var$SDPUtils.generateIdentifier();\n// Splits SDP into lines, dealing with both CRLF and LF.\n$257b6346d6d1b15f$var$SDPUtils.splitLines = function(blob) {\n return blob.trim().split(\"\\n\").map((line)=>line.trim());\n};\n// Splits SDP into sessionpart and mediasections. Ensures CRLF.\n$257b6346d6d1b15f$var$SDPUtils.splitSections = function(blob) {\n const parts = blob.split(\"\\nm=\");\n return parts.map((part, index)=>(index > 0 ? \"m=\" + part : part).trim() + \"\\r\\n\");\n};\n// Returns the session description.\n$257b6346d6d1b15f$var$SDPUtils.getDescription = function(blob) {\n const sections = $257b6346d6d1b15f$var$SDPUtils.splitSections(blob);\n return sections && sections[0];\n};\n// Returns the individual media sections.\n$257b6346d6d1b15f$var$SDPUtils.getMediaSections = function(blob) {\n const sections = $257b6346d6d1b15f$var$SDPUtils.splitSections(blob);\n sections.shift();\n return sections;\n};\n// Returns lines that start with a certain prefix.\n$257b6346d6d1b15f$var$SDPUtils.matchPrefix = function(blob, prefix) {\n return $257b6346d6d1b15f$var$SDPUtils.splitLines(blob).filter((line)=>line.indexOf(prefix) === 0);\n};\n// Parses an ICE candidate line. Sample input:\n// candidate:702786350 2 udp 41819902 8.8.8.8 60769 typ relay raddr 8.8.8.8\n// rport 55996\"\n// Input can be prefixed with a=.\n$257b6346d6d1b15f$var$SDPUtils.parseCandidate = function(line) {\n let parts;\n // Parse both variants.\n if (line.indexOf(\"a=candidate:\") === 0) parts = line.substring(12).split(\" \");\n else parts = line.substring(10).split(\" \");\n const candidate = {\n foundation: parts[0],\n component: {\n 1: \"rtp\",\n 2: \"rtcp\"\n }[parts[1]] || parts[1],\n protocol: parts[2].toLowerCase(),\n priority: parseInt(parts[3], 10),\n ip: parts[4],\n address: parts[4],\n port: parseInt(parts[5], 10),\n // skip parts[6] == 'typ'\n type: parts[7]\n };\n for(let i = 8; i < parts.length; i += 2)switch(parts[i]){\n case \"raddr\":\n candidate.relatedAddress = parts[i + 1];\n break;\n case \"rport\":\n candidate.relatedPort = parseInt(parts[i + 1], 10);\n break;\n case \"tcptype\":\n candidate.tcpType = parts[i + 1];\n break;\n case \"ufrag\":\n candidate.ufrag = parts[i + 1]; // for backward compatibility.\n candidate.usernameFragment = parts[i + 1];\n break;\n default:\n if (candidate[parts[i]] === undefined) candidate[parts[i]] = parts[i + 1];\n break;\n }\n return candidate;\n};\n// Translates a candidate object into SDP candidate attribute.\n// This does not include the a= prefix!\n$257b6346d6d1b15f$var$SDPUtils.writeCandidate = function(candidate) {\n const sdp = [];\n sdp.push(candidate.foundation);\n const component = candidate.component;\n if (component === \"rtp\") sdp.push(1);\n else if (component === \"rtcp\") sdp.push(2);\n else sdp.push(component);\n sdp.push(candidate.protocol.toUpperCase());\n sdp.push(candidate.priority);\n sdp.push(candidate.address || candidate.ip);\n sdp.push(candidate.port);\n const type = candidate.type;\n sdp.push(\"typ\");\n sdp.push(type);\n if (type !== \"host\" && candidate.relatedAddress && candidate.relatedPort) {\n sdp.push(\"raddr\");\n sdp.push(candidate.relatedAddress);\n sdp.push(\"rport\");\n sdp.push(candidate.relatedPort);\n }\n if (candidate.tcpType && candidate.protocol.toLowerCase() === \"tcp\") {\n sdp.push(\"tcptype\");\n sdp.push(candidate.tcpType);\n }\n if (candidate.usernameFragment || candidate.ufrag) {\n sdp.push(\"ufrag\");\n sdp.push(candidate.usernameFragment || candidate.ufrag);\n }\n return \"candidate:\" + sdp.join(\" \");\n};\n// Parses an ice-options line, returns an array of option tags.\n// Sample input:\n// a=ice-options:foo bar\n$257b6346d6d1b15f$var$SDPUtils.parseIceOptions = function(line) {\n return line.substring(14).split(\" \");\n};\n// Parses a rtpmap line, returns RTCRtpCoddecParameters. Sample input:\n// a=rtpmap:111 opus/48000/2\n$257b6346d6d1b15f$var$SDPUtils.parseRtpMap = function(line) {\n let parts = line.substring(9).split(\" \");\n const parsed = {\n payloadType: parseInt(parts.shift(), 10)\n };\n parts = parts[0].split(\"/\");\n parsed.name = parts[0];\n parsed.clockRate = parseInt(parts[1], 10); // was: clockrate\n parsed.channels = parts.length === 3 ? parseInt(parts[2], 10) : 1;\n // legacy alias, got renamed back to channels in ORTC.\n parsed.numChannels = parsed.channels;\n return parsed;\n};\n// Generates a rtpmap line from RTCRtpCodecCapability or\n// RTCRtpCodecParameters.\n$257b6346d6d1b15f$var$SDPUtils.writeRtpMap = function(codec) {\n let pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) pt = codec.preferredPayloadType;\n const channels = codec.channels || codec.numChannels || 1;\n return \"a=rtpmap:\" + pt + \" \" + codec.name + \"/\" + codec.clockRate + (channels !== 1 ? \"/\" + channels : \"\") + \"\\r\\n\";\n};\n// Parses a extmap line (headerextension from RFC 5285). Sample input:\n// a=extmap:2 urn:ietf:params:rtp-hdrext:toffset\n// a=extmap:2/sendonly urn:ietf:params:rtp-hdrext:toffset\n$257b6346d6d1b15f$var$SDPUtils.parseExtmap = function(line) {\n const parts = line.substring(9).split(\" \");\n return {\n id: parseInt(parts[0], 10),\n direction: parts[0].indexOf(\"/\") > 0 ? parts[0].split(\"/\")[1] : \"sendrecv\",\n uri: parts[1],\n attributes: parts.slice(2).join(\" \")\n };\n};\n// Generates an extmap line from RTCRtpHeaderExtensionParameters or\n// RTCRtpHeaderExtension.\n$257b6346d6d1b15f$var$SDPUtils.writeExtmap = function(headerExtension) {\n return \"a=extmap:\" + (headerExtension.id || headerExtension.preferredId) + (headerExtension.direction && headerExtension.direction !== \"sendrecv\" ? \"/\" + headerExtension.direction : \"\") + \" \" + headerExtension.uri + (headerExtension.attributes ? \" \" + headerExtension.attributes : \"\") + \"\\r\\n\";\n};\n// Parses a fmtp line, returns dictionary. Sample input:\n// a=fmtp:96 vbr=on;cng=on\n// Also deals with vbr=on; cng=on\n$257b6346d6d1b15f$var$SDPUtils.parseFmtp = function(line) {\n const parsed = {};\n let kv;\n const parts = line.substring(line.indexOf(\" \") + 1).split(\";\");\n for(let j = 0; j < parts.length; j++){\n kv = parts[j].trim().split(\"=\");\n parsed[kv[0].trim()] = kv[1];\n }\n return parsed;\n};\n// Generates a fmtp line from RTCRtpCodecCapability or RTCRtpCodecParameters.\n$257b6346d6d1b15f$var$SDPUtils.writeFmtp = function(codec) {\n let line = \"\";\n let pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) pt = codec.preferredPayloadType;\n if (codec.parameters && Object.keys(codec.parameters).length) {\n const params = [];\n Object.keys(codec.parameters).forEach((param)=>{\n if (codec.parameters[param] !== undefined) params.push(param + \"=\" + codec.parameters[param]);\n else params.push(param);\n });\n line += \"a=fmtp:\" + pt + \" \" + params.join(\";\") + \"\\r\\n\";\n }\n return line;\n};\n// Parses a rtcp-fb line, returns RTCPRtcpFeedback object. Sample input:\n// a=rtcp-fb:98 nack rpsi\n$257b6346d6d1b15f$var$SDPUtils.parseRtcpFb = function(line) {\n const parts = line.substring(line.indexOf(\" \") + 1).split(\" \");\n return {\n type: parts.shift(),\n parameter: parts.join(\" \")\n };\n};\n// Generate a=rtcp-fb lines from RTCRtpCodecCapability or RTCRtpCodecParameters.\n$257b6346d6d1b15f$var$SDPUtils.writeRtcpFb = function(codec) {\n let lines = \"\";\n let pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) pt = codec.preferredPayloadType;\n if (codec.rtcpFeedback && codec.rtcpFeedback.length) // FIXME: special handling for trr-int?\n codec.rtcpFeedback.forEach((fb)=>{\n lines += \"a=rtcp-fb:\" + pt + \" \" + fb.type + (fb.parameter && fb.parameter.length ? \" \" + fb.parameter : \"\") + \"\\r\\n\";\n });\n return lines;\n};\n// Parses a RFC 5576 ssrc media attribute. Sample input:\n// a=ssrc:3735928559 cname:something\n$257b6346d6d1b15f$var$SDPUtils.parseSsrcMedia = function(line) {\n const sp = line.indexOf(\" \");\n const parts = {\n ssrc: parseInt(line.substring(7, sp), 10)\n };\n const colon = line.indexOf(\":\", sp);\n if (colon > -1) {\n parts.attribute = line.substring(sp + 1, colon);\n parts.value = line.substring(colon + 1);\n } else parts.attribute = line.substring(sp + 1);\n return parts;\n};\n// Parse a ssrc-group line (see RFC 5576). Sample input:\n// a=ssrc-group:semantics 12 34\n$257b6346d6d1b15f$var$SDPUtils.parseSsrcGroup = function(line) {\n const parts = line.substring(13).split(\" \");\n return {\n semantics: parts.shift(),\n ssrcs: parts.map((ssrc)=>parseInt(ssrc, 10))\n };\n};\n// Extracts the MID (RFC 5888) from a media section.\n// Returns the MID or undefined if no mid line was found.\n$257b6346d6d1b15f$var$SDPUtils.getMid = function(mediaSection) {\n const mid = $257b6346d6d1b15f$var$SDPUtils.matchPrefix(mediaSection, \"a=mid:\")[0];\n if (mid) return mid.substring(6);\n};\n// Parses a fingerprint line for DTLS-SRTP.\n$257b6346d6d1b15f$var$SDPUtils.parseFingerprint = function(line) {\n const parts = line.substring(14).split(\" \");\n return {\n algorithm: parts[0].toLowerCase(),\n value: parts[1].toUpperCase()\n };\n};\n// Extracts DTLS parameters from SDP media section or sessionpart.\n// FIXME: for consistency with other functions this should only\n// get the fingerprint line as input. See also getIceParameters.\n$257b6346d6d1b15f$var$SDPUtils.getDtlsParameters = function(mediaSection, sessionpart) {\n const lines = $257b6346d6d1b15f$var$SDPUtils.matchPrefix(mediaSection + sessionpart, \"a=fingerprint:\");\n // Note: a=setup line is ignored since we use the 'auto' role in Edge.\n return {\n role: \"auto\",\n fingerprints: lines.map($257b6346d6d1b15f$var$SDPUtils.parseFingerprint)\n };\n};\n// Serializes DTLS parameters to SDP.\n$257b6346d6d1b15f$var$SDPUtils.writeDtlsParameters = function(params, setupType) {\n let sdp = \"a=setup:\" + setupType + \"\\r\\n\";\n params.fingerprints.forEach((fp)=>{\n sdp += \"a=fingerprint:\" + fp.algorithm + \" \" + fp.value + \"\\r\\n\";\n });\n return sdp;\n};\n// Parses a=crypto lines into\n// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#dictionary-rtcsrtpsdesparameters-members\n$257b6346d6d1b15f$var$SDPUtils.parseCryptoLine = function(line) {\n const parts = line.substring(9).split(\" \");\n return {\n tag: parseInt(parts[0], 10),\n cryptoSuite: parts[1],\n keyParams: parts[2],\n sessionParams: parts.slice(3)\n };\n};\n$257b6346d6d1b15f$var$SDPUtils.writeCryptoLine = function(parameters) {\n return \"a=crypto:\" + parameters.tag + \" \" + parameters.cryptoSuite + \" \" + (typeof parameters.keyParams === \"object\" ? $257b6346d6d1b15f$var$SDPUtils.writeCryptoKeyParams(parameters.keyParams) : parameters.keyParams) + (parameters.sessionParams ? \" \" + parameters.sessionParams.join(\" \") : \"\") + \"\\r\\n\";\n};\n// Parses the crypto key parameters into\n// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#rtcsrtpkeyparam*\n$257b6346d6d1b15f$var$SDPUtils.parseCryptoKeyParams = function(keyParams) {\n if (keyParams.indexOf(\"inline:\") !== 0) return null;\n const parts = keyParams.substring(7).split(\"|\");\n return {\n keyMethod: \"inline\",\n keySalt: parts[0],\n lifeTime: parts[1],\n mkiValue: parts[2] ? parts[2].split(\":\")[0] : undefined,\n mkiLength: parts[2] ? parts[2].split(\":\")[1] : undefined\n };\n};\n$257b6346d6d1b15f$var$SDPUtils.writeCryptoKeyParams = function(keyParams) {\n return keyParams.keyMethod + \":\" + keyParams.keySalt + (keyParams.lifeTime ? \"|\" + keyParams.lifeTime : \"\") + (keyParams.mkiValue && keyParams.mkiLength ? \"|\" + keyParams.mkiValue + \":\" + keyParams.mkiLength : \"\");\n};\n// Extracts all SDES parameters.\n$257b6346d6d1b15f$var$SDPUtils.getCryptoParameters = function(mediaSection, sessionpart) {\n const lines = $257b6346d6d1b15f$var$SDPUtils.matchPrefix(mediaSection + sessionpart, \"a=crypto:\");\n return lines.map($257b6346d6d1b15f$var$SDPUtils.parseCryptoLine);\n};\n// Parses ICE information from SDP media section or sessionpart.\n// FIXME: for consistency with other functions this should only\n// get the ice-ufrag and ice-pwd lines as input.\n$257b6346d6d1b15f$var$SDPUtils.getIceParameters = function(mediaSection, sessionpart) {\n const ufrag = $257b6346d6d1b15f$var$SDPUtils.matchPrefix(mediaSection + sessionpart, \"a=ice-ufrag:\")[0];\n const pwd = $257b6346d6d1b15f$var$SDPUtils.matchPrefix(mediaSection + sessionpart, \"a=ice-pwd:\")[0];\n if (!(ufrag && pwd)) return null;\n return {\n usernameFragment: ufrag.substring(12),\n password: pwd.substring(10)\n };\n};\n// Serializes ICE parameters to SDP.\n$257b6346d6d1b15f$var$SDPUtils.writeIceParameters = function(params) {\n let sdp = \"a=ice-ufrag:\" + params.usernameFragment + \"\\r\\n\" + \"a=ice-pwd:\" + params.password + \"\\r\\n\";\n if (params.iceLite) sdp += \"a=ice-lite\\r\\n\";\n return sdp;\n};\n// Parses the SDP media section and returns RTCRtpParameters.\n$257b6346d6d1b15f$var$SDPUtils.parseRtpParameters = function(mediaSection) {\n const description = {\n codecs: [],\n headerExtensions: [],\n fecMechanisms: [],\n rtcp: []\n };\n const lines = $257b6346d6d1b15f$var$SDPUtils.splitLines(mediaSection);\n const mline = lines[0].split(\" \");\n description.profile = mline[2];\n for(let i = 3; i < mline.length; i++){\n const pt = mline[i];\n const rtpmapline = $257b6346d6d1b15f$var$SDPUtils.matchPrefix(mediaSection, \"a=rtpmap:\" + pt + \" \")[0];\n if (rtpmapline) {\n const codec = $257b6346d6d1b15f$var$SDPUtils.parseRtpMap(rtpmapline);\n const fmtps = $257b6346d6d1b15f$var$SDPUtils.matchPrefix(mediaSection, \"a=fmtp:\" + pt + \" \");\n // Only the first a=fmtp: is considered.\n codec.parameters = fmtps.length ? $257b6346d6d1b15f$var$SDPUtils.parseFmtp(fmtps[0]) : {};\n codec.rtcpFeedback = $257b6346d6d1b15f$var$SDPUtils.matchPrefix(mediaSection, \"a=rtcp-fb:\" + pt + \" \").map($257b6346d6d1b15f$var$SDPUtils.parseRtcpFb);\n description.codecs.push(codec);\n // parse FEC mechanisms from rtpmap lines.\n switch(codec.name.toUpperCase()){\n case \"RED\":\n case \"ULPFEC\":\n description.fecMechanisms.push(codec.name.toUpperCase());\n break;\n default:\n break;\n }\n }\n }\n $257b6346d6d1b15f$var$SDPUtils.matchPrefix(mediaSection, \"a=extmap:\").forEach((line)=>{\n description.headerExtensions.push($257b6346d6d1b15f$var$SDPUtils.parseExtmap(line));\n });\n const wildcardRtcpFb = $257b6346d6d1b15f$var$SDPUtils.matchPrefix(mediaSection, \"a=rtcp-fb:* \").map($257b6346d6d1b15f$var$SDPUtils.parseRtcpFb);\n description.codecs.forEach((codec)=>{\n wildcardRtcpFb.forEach((fb)=>{\n const duplicate = codec.rtcpFeedback.find((existingFeedback)=>{\n return existingFeedback.type === fb.type && existingFeedback.parameter === fb.parameter;\n });\n if (!duplicate) codec.rtcpFeedback.push(fb);\n });\n });\n // FIXME: parse rtcp.\n return description;\n};\n// Generates parts of the SDP media section describing the capabilities /\n// parameters.\n$257b6346d6d1b15f$var$SDPUtils.writeRtpDescription = function(kind, caps) {\n let sdp = \"\";\n // Build the mline.\n sdp += \"m=\" + kind + \" \";\n sdp += caps.codecs.length > 0 ? \"9\" : \"0\"; // reject if no codecs.\n sdp += \" \" + (caps.profile || \"UDP/TLS/RTP/SAVPF\") + \" \";\n sdp += caps.codecs.map((codec)=>{\n if (codec.preferredPayloadType !== undefined) return codec.preferredPayloadType;\n return codec.payloadType;\n }).join(\" \") + \"\\r\\n\";\n sdp += \"c=IN IP4 0.0.0.0\\r\\n\";\n sdp += \"a=rtcp:9 IN IP4 0.0.0.0\\r\\n\";\n // Add a=rtpmap lines for each codec. Also fmtp and rtcp-fb.\n caps.codecs.forEach((codec)=>{\n sdp += $257b6346d6d1b15f$var$SDPUtils.writeRtpMap(codec);\n sdp += $257b6346d6d1b15f$var$SDPUtils.writeFmtp(codec);\n sdp += $257b6346d6d1b15f$var$SDPUtils.writeRtcpFb(codec);\n });\n let maxptime = 0;\n caps.codecs.forEach((codec)=>{\n if (codec.maxptime > maxptime) maxptime = codec.maxptime;\n });\n if (maxptime > 0) sdp += \"a=maxptime:\" + maxptime + \"\\r\\n\";\n if (caps.headerExtensions) caps.headerExtensions.forEach((extension)=>{\n sdp += $257b6346d6d1b15f$var$SDPUtils.writeExtmap(extension);\n });\n // FIXME: write fecMechanisms.\n return sdp;\n};\n// Parses the SDP media section and returns an array of\n// RTCRtpEncodingParameters.\n$257b6346d6d1b15f$var$SDPUtils.parseRtpEncodingParameters = function(mediaSection) {\n const encodingParameters = [];\n const description = $257b6346d6d1b15f$var$SDPUtils.parseRtpParameters(mediaSection);\n const hasRed = description.fecMechanisms.indexOf(\"RED\") !== -1;\n const hasUlpfec = description.fecMechanisms.indexOf(\"ULPFEC\") !== -1;\n // filter a=ssrc:... cname:, ignore PlanB-msid\n const ssrcs = $257b6346d6d1b15f$var$SDPUtils.matchPrefix(mediaSection, \"a=ssrc:\").map((line)=>$257b6346d6d1b15f$var$SDPUtils.parseSsrcMedia(line)).filter((parts)=>parts.attribute === \"cname\");\n const primarySsrc = ssrcs.length > 0 && ssrcs[0].ssrc;\n let secondarySsrc;\n const flows = $257b6346d6d1b15f$var$SDPUtils.matchPrefix(mediaSection, \"a=ssrc-group:FID\").map((line)=>{\n const parts = line.substring(17).split(\" \");\n return parts.map((part)=>parseInt(part, 10));\n });\n if (flows.length > 0 && flows[0].length > 1 && flows[0][0] === primarySsrc) secondarySsrc = flows[0][1];\n description.codecs.forEach((codec)=>{\n if (codec.name.toUpperCase() === \"RTX\" && codec.parameters.apt) {\n let encParam = {\n ssrc: primarySsrc,\n codecPayloadType: parseInt(codec.parameters.apt, 10)\n };\n if (primarySsrc && secondarySsrc) encParam.rtx = {\n ssrc: secondarySsrc\n };\n encodingParameters.push(encParam);\n if (hasRed) {\n encParam = JSON.parse(JSON.stringify(encParam));\n encParam.fec = {\n ssrc: primarySsrc,\n mechanism: hasUlpfec ? \"red+ulpfec\" : \"red\"\n };\n encodingParameters.push(encParam);\n }\n }\n });\n if (encodingParameters.length === 0 && primarySsrc) encodingParameters.push({\n ssrc: primarySsrc\n });\n // we support both b=AS and b=TIAS but interpret AS as TIAS.\n let bandwidth = $257b6346d6d1b15f$var$SDPUtils.matchPrefix(mediaSection, \"b=\");\n if (bandwidth.length) {\n if (bandwidth[0].indexOf(\"b=TIAS:\") === 0) bandwidth = parseInt(bandwidth[0].substring(7), 10);\n else if (bandwidth[0].indexOf(\"b=AS:\") === 0) // use formula from JSEP to convert b=AS to TIAS value.\n bandwidth = parseInt(bandwidth[0].substring(5), 10) * 950 - 16000;\n else bandwidth = undefined;\n encodingParameters.forEach((params)=>{\n params.maxBitrate = bandwidth;\n });\n }\n return encodingParameters;\n};\n// parses http://draft.ortc.org/#rtcrtcpparameters*\n$257b6346d6d1b15f$var$SDPUtils.parseRtcpParameters = function(mediaSection) {\n const rtcpParameters = {};\n // Gets the first SSRC. Note that with RTX there might be multiple\n // SSRCs.\n const remoteSsrc = $257b6346d6d1b15f$var$SDPUtils.matchPrefix(mediaSection, \"a=ssrc:\").map((line)=>$257b6346d6d1b15f$var$SDPUtils.parseSsrcMedia(line)).filter((obj)=>obj.attribute === \"cname\")[0];\n if (remoteSsrc) {\n rtcpParameters.cname = remoteSsrc.value;\n rtcpParameters.ssrc = remoteSsrc.ssrc;\n }\n // Edge uses the compound attribute instead of reducedSize\n // compound is !reducedSize\n const rsize = $257b6346d6d1b15f$var$SDPUtils.matchPrefix(mediaSection, \"a=rtcp-rsize\");\n rtcpParameters.reducedSize = rsize.length > 0;\n rtcpParameters.compound = rsize.length === 0;\n // parses the rtcp-mux attrіbute.\n // Note that Edge does not support unmuxed RTCP.\n const mux = $257b6346d6d1b15f$var$SDPUtils.matchPrefix(mediaSection, \"a=rtcp-mux\");\n rtcpParameters.mux = mux.length > 0;\n return rtcpParameters;\n};\n$257b6346d6d1b15f$var$SDPUtils.writeRtcpParameters = function(rtcpParameters) {\n let sdp = \"\";\n if (rtcpParameters.reducedSize) sdp += \"a=rtcp-rsize\\r\\n\";\n if (rtcpParameters.mux) sdp += \"a=rtcp-mux\\r\\n\";\n if (rtcpParameters.ssrc !== undefined && rtcpParameters.cname) sdp += \"a=ssrc:\" + rtcpParameters.ssrc + \" cname:\" + rtcpParameters.cname + \"\\r\\n\";\n return sdp;\n};\n// parses either a=msid: or a=ssrc:... msid lines and returns\n// the id of the MediaStream and MediaStreamTrack.\n$257b6346d6d1b15f$var$SDPUtils.parseMsid = function(mediaSection) {\n let parts;\n const spec = $257b6346d6d1b15f$var$SDPUtils.matchPrefix(mediaSection, \"a=msid:\");\n if (spec.length === 1) {\n parts = spec[0].substring(7).split(\" \");\n return {\n stream: parts[0],\n track: parts[1]\n };\n }\n const planB = $257b6346d6d1b15f$var$SDPUtils.matchPrefix(mediaSection, \"a=ssrc:\").map((line)=>$257b6346d6d1b15f$var$SDPUtils.parseSsrcMedia(line)).filter((msidParts)=>msidParts.attribute === \"msid\");\n if (planB.length > 0) {\n parts = planB[0].value.split(\" \");\n return {\n stream: parts[0],\n track: parts[1]\n };\n }\n};\n// SCTP\n// parses draft-ietf-mmusic-sctp-sdp-26 first and falls back\n// to draft-ietf-mmusic-sctp-sdp-05\n$257b6346d6d1b15f$var$SDPUtils.parseSctpDescription = function(mediaSection) {\n const mline = $257b6346d6d1b15f$var$SDPUtils.parseMLine(mediaSection);\n const maxSizeLine = $257b6346d6d1b15f$var$SDPUtils.matchPrefix(mediaSection, \"a=max-message-size:\");\n let maxMessageSize;\n if (maxSizeLine.length > 0) maxMessageSize = parseInt(maxSizeLine[0].substring(19), 10);\n if (isNaN(maxMessageSize)) maxMessageSize = 65536;\n const sctpPort = $257b6346d6d1b15f$var$SDPUtils.matchPrefix(mediaSection, \"a=sctp-port:\");\n if (sctpPort.length > 0) return {\n port: parseInt(sctpPort[0].substring(12), 10),\n protocol: mline.fmt,\n maxMessageSize: maxMessageSize\n };\n const sctpMapLines = $257b6346d6d1b15f$var$SDPUtils.matchPrefix(mediaSection, \"a=sctpmap:\");\n if (sctpMapLines.length > 0) {\n const parts = sctpMapLines[0].substring(10).split(\" \");\n return {\n port: parseInt(parts[0], 10),\n protocol: parts[1],\n maxMessageSize: maxMessageSize\n };\n }\n};\n// SCTP\n// outputs the draft-ietf-mmusic-sctp-sdp-26 version that all browsers\n// support by now receiving in this format, unless we originally parsed\n// as the draft-ietf-mmusic-sctp-sdp-05 format (indicated by the m-line\n// protocol of DTLS/SCTP -- without UDP/ or TCP/)\n$257b6346d6d1b15f$var$SDPUtils.writeSctpDescription = function(media, sctp) {\n let output = [];\n if (media.protocol !== \"DTLS/SCTP\") output = [\n \"m=\" + media.kind + \" 9 \" + media.protocol + \" \" + sctp.protocol + \"\\r\\n\",\n \"c=IN IP4 0.0.0.0\\r\\n\",\n \"a=sctp-port:\" + sctp.port + \"\\r\\n\"\n ];\n else output = [\n \"m=\" + media.kind + \" 9 \" + media.protocol + \" \" + sctp.port + \"\\r\\n\",\n \"c=IN IP4 0.0.0.0\\r\\n\",\n \"a=sctpmap:\" + sctp.port + \" \" + sctp.protocol + \" 65535\\r\\n\"\n ];\n if (sctp.maxMessageSize !== undefined) output.push(\"a=max-message-size:\" + sctp.maxMessageSize + \"\\r\\n\");\n return output.join(\"\");\n};\n// Generate a session ID for SDP.\n// https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-20#section-5.2.1\n// recommends using a cryptographically random +ve 64-bit value\n// but right now this should be acceptable and within the right range\n$257b6346d6d1b15f$var$SDPUtils.generateSessionId = function() {\n return Math.random().toString().substr(2, 22);\n};\n// Write boiler plate for start of SDP\n// sessId argument is optional - if not supplied it will\n// be generated randomly\n// sessVersion is optional and defaults to 2\n// sessUser is optional and defaults to 'thisisadapterortc'\n$257b6346d6d1b15f$var$SDPUtils.writeSessionBoilerplate = function(sessId, sessVer, sessUser) {\n let sessionId;\n const version = sessVer !== undefined ? sessVer : 2;\n if (sessId) sessionId = sessId;\n else sessionId = $257b6346d6d1b15f$var$SDPUtils.generateSessionId();\n const user = sessUser || \"thisisadapterortc\";\n // FIXME: sess-id should be an NTP timestamp.\n return \"v=0\\r\\no=\" + user + \" \" + sessionId + \" \" + version + \" IN IP4 127.0.0.1\\r\\n\" + \"s=-\\r\\n\" + \"t=0 0\\r\\n\";\n};\n// Gets the direction from the mediaSection or the sessionpart.\n$257b6346d6d1b15f$var$SDPUtils.getDirection = function(mediaSection, sessionpart) {\n // Look for sendrecv, sendonly, recvonly, inactive, default to sendrecv.\n const lines = $257b6346d6d1b15f$var$SDPUtils.splitLines(mediaSection);\n for(let i = 0; i < lines.length; i++)switch(lines[i]){\n case \"a=sendrecv\":\n case \"a=sendonly\":\n case \"a=recvonly\":\n case \"a=inactive\":\n return lines[i].substring(2);\n default:\n }\n if (sessionpart) return $257b6346d6d1b15f$var$SDPUtils.getDirection(sessionpart);\n return \"sendrecv\";\n};\n$257b6346d6d1b15f$var$SDPUtils.getKind = function(mediaSection) {\n const lines = $257b6346d6d1b15f$var$SDPUtils.splitLines(mediaSection);\n const mline = lines[0].split(\" \");\n return mline[0].substring(2);\n};\n$257b6346d6d1b15f$var$SDPUtils.isRejected = function(mediaSection) {\n return mediaSection.split(\" \", 2)[1] === \"0\";\n};\n$257b6346d6d1b15f$var$SDPUtils.parseMLine = function(mediaSection) {\n const lines = $257b6346d6d1b15f$var$SDPUtils.splitLines(mediaSection);\n const parts = lines[0].substring(2).split(\" \");\n return {\n kind: parts[0],\n port: parseInt(parts[1], 10),\n protocol: parts[2],\n fmt: parts.slice(3).join(\" \")\n };\n};\n$257b6346d6d1b15f$var$SDPUtils.parseOLine = function(mediaSection) {\n const line = $257b6346d6d1b15f$var$SDPUtils.matchPrefix(mediaSection, \"o=\")[0];\n const parts = line.substring(2).split(\" \");\n return {\n username: parts[0],\n sessionId: parts[1],\n sessionVersion: parseInt(parts[2], 10),\n netType: parts[3],\n addressType: parts[4],\n address: parts[5]\n };\n};\n// a very naive interpretation of a valid SDP.\n$257b6346d6d1b15f$var$SDPUtils.isValidSDP = function(blob) {\n if (typeof blob !== \"string\" || blob.length === 0) return false;\n const lines = $257b6346d6d1b15f$var$SDPUtils.splitLines(blob);\n for(let i = 0; i < lines.length; i++){\n if (lines[i].length < 2 || lines[i].charAt(1) !== \"=\") return false;\n // TODO: check the modifier a bit more.\n }\n return true;\n};\n$257b6346d6d1b15f$exports = $257b6346d6d1b15f$var$SDPUtils;\n\n\n\n\"use strict\";\nfunction $8080a560a280724d$export$cf133661e444ccfe(window) {\n // foundation is arbitrarily chosen as an indicator for full support for\n // https://w3c.github.io/webrtc-pc/#rtcicecandidate-interface\n if (!window.RTCIceCandidate || window.RTCIceCandidate && \"foundation\" in window.RTCIceCandidate.prototype) return;\n const NativeRTCIceCandidate = window.RTCIceCandidate;\n window.RTCIceCandidate = function RTCIceCandidate(args) {\n // Remove the a= which shouldn't be part of the candidate string.\n if (typeof args === \"object\" && args.candidate && args.candidate.indexOf(\"a=\") === 0) {\n args = JSON.parse(JSON.stringify(args));\n args.candidate = args.candidate.substring(2);\n }\n if (args.candidate && args.candidate.length) {\n // Augment the native candidate with the parsed fields.\n const nativeCandidate = new NativeRTCIceCandidate(args);\n const parsedCandidate = (0, (/*@__PURE__*/$parcel$interopDefault($257b6346d6d1b15f$exports))).parseCandidate(args.candidate);\n for(const key in parsedCandidate)if (!(key in nativeCandidate)) Object.defineProperty(nativeCandidate, key, {\n value: parsedCandidate[key]\n });\n // Override serializer to not serialize the extra attributes.\n nativeCandidate.toJSON = function toJSON() {\n return {\n candidate: nativeCandidate.candidate,\n sdpMid: nativeCandidate.sdpMid,\n sdpMLineIndex: nativeCandidate.sdpMLineIndex,\n usernameFragment: nativeCandidate.usernameFragment\n };\n };\n return nativeCandidate;\n }\n return new NativeRTCIceCandidate(args);\n };\n window.RTCIceCandidate.prototype = NativeRTCIceCandidate.prototype;\n // Hook up the augmented candidate in onicecandidate and\n // addEventListener('icecandidate', ...)\n $35583cf39f4111ff$export$1f48841962b828b1(window, \"icecandidate\", (e)=>{\n if (e.candidate) Object.defineProperty(e, \"candidate\", {\n value: new window.RTCIceCandidate(e.candidate),\n writable: \"false\"\n });\n return e;\n });\n}\nfunction $8080a560a280724d$export$fdafb8d8280e29b5(window) {\n if (!window.RTCIceCandidate || window.RTCIceCandidate && \"relayProtocol\" in window.RTCIceCandidate.prototype) return;\n // Hook up the augmented candidate in onicecandidate and\n // addEventListener('icecandidate', ...)\n $35583cf39f4111ff$export$1f48841962b828b1(window, \"icecandidate\", (e)=>{\n if (e.candidate) {\n const parsedCandidate = (0, (/*@__PURE__*/$parcel$interopDefault($257b6346d6d1b15f$exports))).parseCandidate(e.candidate.candidate);\n if (parsedCandidate.type === \"relay\") // This is a libwebrtc-specific mapping of local type preference\n // to relayProtocol.\n e.candidate.relayProtocol = ({\n 0: \"tls\",\n 1: \"tcp\",\n 2: \"udp\"\n })[parsedCandidate.priority >> 24];\n }\n return e;\n });\n}\nfunction $8080a560a280724d$export$a99147c78a56edc4(window, browserDetails) {\n if (!window.RTCPeerConnection) return;\n if (!(\"sctp\" in window.RTCPeerConnection.prototype)) Object.defineProperty(window.RTCPeerConnection.prototype, \"sctp\", {\n get () {\n return typeof this._sctp === \"undefined\" ? null : this._sctp;\n }\n });\n const sctpInDescription = function(description) {\n if (!description || !description.sdp) return false;\n const sections = (0, (/*@__PURE__*/$parcel$interopDefault($257b6346d6d1b15f$exports))).splitSections(description.sdp);\n sections.shift();\n return sections.some((mediaSection)=>{\n const mLine = (0, (/*@__PURE__*/$parcel$interopDefault($257b6346d6d1b15f$exports))).parseMLine(mediaSection);\n return mLine && mLine.kind === \"application\" && mLine.protocol.indexOf(\"SCTP\") !== -1;\n });\n };\n const getRemoteFirefoxVersion = function(description) {\n // TODO: Is there a better solution for detecting Firefox?\n const match = description.sdp.match(/mozilla...THIS_IS_SDPARTA-(\\d+)/);\n if (match === null || match.length < 2) return -1;\n const version = parseInt(match[1], 10);\n // Test for NaN (yes, this is ugly)\n return version !== version ? -1 : version;\n };\n const getCanSendMaxMessageSize = function(remoteIsFirefox) {\n // Every implementation we know can send at least 64 KiB.\n // Note: Although Chrome is technically able to send up to 256 KiB, the\n // data does not reach the other peer reliably.\n // See: https://bugs.chromium.org/p/webrtc/issues/detail?id=8419\n let canSendMaxMessageSize = 65536;\n if (browserDetails.browser === \"firefox\") {\n if (browserDetails.version < 57) {\n if (remoteIsFirefox === -1) // FF < 57 will send in 16 KiB chunks using the deprecated PPID\n // fragmentation.\n canSendMaxMessageSize = 16384;\n else // However, other FF (and RAWRTC) can reassemble PPID-fragmented\n // messages. Thus, supporting ~2 GiB when sending.\n canSendMaxMessageSize = 2147483637;\n } else if (browserDetails.version < 60) // Currently, all FF >= 57 will reset the remote maximum message size\n // to the default value when a data channel is created at a later\n // stage. :(\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831\n canSendMaxMessageSize = browserDetails.version === 57 ? 65535 : 65536;\n else // FF >= 60 supports sending ~2 GiB\n canSendMaxMessageSize = 2147483637;\n }\n return canSendMaxMessageSize;\n };\n const getMaxMessageSize = function(description, remoteIsFirefox) {\n // Note: 65536 bytes is the default value from the SDP spec. Also,\n // every implementation we know supports receiving 65536 bytes.\n let maxMessageSize = 65536;\n // FF 57 has a slightly incorrect default remote max message size, so\n // we need to adjust it here to avoid a failure when sending.\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1425697\n if (browserDetails.browser === \"firefox\" && browserDetails.version === 57) maxMessageSize = 65535;\n const match = (0, (/*@__PURE__*/$parcel$interopDefault($257b6346d6d1b15f$exports))).matchPrefix(description.sdp, \"a=max-message-size:\");\n if (match.length > 0) maxMessageSize = parseInt(match[0].substring(19), 10);\n else if (browserDetails.browser === \"firefox\" && remoteIsFirefox !== -1) // If the maximum message size is not present in the remote SDP and\n // both local and remote are Firefox, the remote peer can receive\n // ~2 GiB.\n maxMessageSize = 2147483637;\n return maxMessageSize;\n };\n const origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() {\n this._sctp = null;\n // Chrome decided to not expose .sctp in plan-b mode.\n // As usual, adapter.js has to do an 'ugly worakaround'\n // to cover up the mess.\n if (browserDetails.browser === \"chrome\" && browserDetails.version >= 76) {\n const { sdpSemantics: sdpSemantics } = this.getConfiguration();\n if (sdpSemantics === \"plan-b\") Object.defineProperty(this, \"sctp\", {\n get () {\n return typeof this._sctp === \"undefined\" ? null : this._sctp;\n },\n enumerable: true,\n configurable: true\n });\n }\n if (sctpInDescription(arguments[0])) {\n // Check if the remote is FF.\n const isFirefox = getRemoteFirefoxVersion(arguments[0]);\n // Get the maximum message size the local peer is capable of sending\n const canSendMMS = getCanSendMaxMessageSize(isFirefox);\n // Get the maximum message size of the remote peer.\n const remoteMMS = getMaxMessageSize(arguments[0], isFirefox);\n // Determine final maximum message size\n let maxMessageSize;\n if (canSendMMS === 0 && remoteMMS === 0) maxMessageSize = Number.POSITIVE_INFINITY;\n else if (canSendMMS === 0 || remoteMMS === 0) maxMessageSize = Math.max(canSendMMS, remoteMMS);\n else maxMessageSize = Math.min(canSendMMS, remoteMMS);\n // Create a dummy RTCSctpTransport object and the 'maxMessageSize'\n // attribute.\n const sctp = {};\n Object.defineProperty(sctp, \"maxMessageSize\", {\n get () {\n return maxMessageSize;\n }\n });\n this._sctp = sctp;\n }\n return origSetRemoteDescription.apply(this, arguments);\n };\n}\nfunction $8080a560a280724d$export$d461c8d5c5db5da7(window) {\n if (!(window.RTCPeerConnection && \"createDataChannel\" in window.RTCPeerConnection.prototype)) return;\n // Note: Although Firefox >= 57 has a native implementation, the maximum\n // message size can be reset for all data channels at a later stage.\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831\n function wrapDcSend(dc, pc) {\n const origDataChannelSend = dc.send;\n dc.send = function send() {\n const data = arguments[0];\n const length = data.length || data.size || data.byteLength;\n if (dc.readyState === \"open\" && pc.sctp && length > pc.sctp.maxMessageSize) throw new TypeError(\"Message too large (can send a maximum of \" + pc.sctp.maxMessageSize + \" bytes)\");\n return origDataChannelSend.apply(dc, arguments);\n };\n }\n const origCreateDataChannel = window.RTCPeerConnection.prototype.createDataChannel;\n window.RTCPeerConnection.prototype.createDataChannel = function createDataChannel() {\n const dataChannel = origCreateDataChannel.apply(this, arguments);\n wrapDcSend(dataChannel, this);\n return dataChannel;\n };\n $35583cf39f4111ff$export$1f48841962b828b1(window, \"datachannel\", (e)=>{\n wrapDcSend(e.channel, e.target);\n return e;\n });\n}\nfunction $8080a560a280724d$export$63bb816cc75460(window) {\n if (!window.RTCPeerConnection || \"connectionState\" in window.RTCPeerConnection.prototype) return;\n const proto = window.RTCPeerConnection.prototype;\n Object.defineProperty(proto, \"connectionState\", {\n get () {\n return ({\n completed: \"connected\",\n checking: \"connecting\"\n })[this.iceConnectionState] || this.iceConnectionState;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(proto, \"onconnectionstatechange\", {\n get () {\n return this._onconnectionstatechange || null;\n },\n set (cb) {\n if (this._onconnectionstatechange) {\n this.removeEventListener(\"connectionstatechange\", this._onconnectionstatechange);\n delete this._onconnectionstatechange;\n }\n if (cb) this.addEventListener(\"connectionstatechange\", this._onconnectionstatechange = cb);\n },\n enumerable: true,\n configurable: true\n });\n [\n \"setLocalDescription\",\n \"setRemoteDescription\"\n ].forEach((method)=>{\n const origMethod = proto[method];\n proto[method] = function() {\n if (!this._connectionstatechangepoly) {\n this._connectionstatechangepoly = (e)=>{\n const pc = e.target;\n if (pc._lastConnectionState !== pc.connectionState) {\n pc._lastConnectionState = pc.connectionState;\n const newEvent = new Event(\"connectionstatechange\", e);\n pc.dispatchEvent(newEvent);\n }\n return e;\n };\n this.addEventListener(\"iceconnectionstatechange\", this._connectionstatechangepoly);\n }\n return origMethod.apply(this, arguments);\n };\n });\n}\nfunction $8080a560a280724d$export$a57d114344295149(window, browserDetails) {\n /* remove a=extmap-allow-mixed for webrtc.org < M71 */ if (!window.RTCPeerConnection) return;\n if (browserDetails.browser === \"chrome\" && browserDetails.version >= 71) return;\n if (browserDetails.browser === \"safari\" && browserDetails.version >= 605) return;\n const nativeSRD = window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription(desc) {\n if (desc && desc.sdp && desc.sdp.indexOf(\"\\na=extmap-allow-mixed\") !== -1) {\n const sdp = desc.sdp.split(\"\\n\").filter((line)=>{\n return line.trim() !== \"a=extmap-allow-mixed\";\n }).join(\"\\n\");\n // Safari enforces read-only-ness of RTCSessionDescription fields.\n if (window.RTCSessionDescription && desc instanceof window.RTCSessionDescription) arguments[0] = new window.RTCSessionDescription({\n type: desc.type,\n sdp: sdp\n });\n else desc.sdp = sdp;\n }\n return nativeSRD.apply(this, arguments);\n };\n}\nfunction $8080a560a280724d$export$51d5e40b48c771c7(window, browserDetails) {\n // Support for addIceCandidate(null or undefined)\n // as well as addIceCandidate({candidate: \"\", ...})\n // https://bugs.chromium.org/p/chromium/issues/detail?id=978582\n // Note: must be called before other polyfills which change the signature.\n if (!(window.RTCPeerConnection && window.RTCPeerConnection.prototype)) return;\n const nativeAddIceCandidate = window.RTCPeerConnection.prototype.addIceCandidate;\n if (!nativeAddIceCandidate || nativeAddIceCandidate.length === 0) return;\n window.RTCPeerConnection.prototype.addIceCandidate = function addIceCandidate() {\n if (!arguments[0]) {\n if (arguments[1]) arguments[1].apply(null);\n return Promise.resolve();\n }\n // Firefox 68+ emits and processes {candidate: \"\", ...}, ignore\n // in older versions.\n // Native support for ignoring exists for Chrome M77+.\n // Safari ignores as well, exact version unknown but works in the same\n // version that also ignores addIceCandidate(null).\n if ((browserDetails.browser === \"chrome\" && browserDetails.version < 78 || browserDetails.browser === \"firefox\" && browserDetails.version < 68 || browserDetails.browser === \"safari\") && arguments[0] && arguments[0].candidate === \"\") return Promise.resolve();\n return nativeAddIceCandidate.apply(this, arguments);\n };\n}\nfunction $8080a560a280724d$export$7170d04e59f9d553(window, browserDetails) {\n if (!(window.RTCPeerConnection && window.RTCPeerConnection.prototype)) return;\n const nativeSetLocalDescription = window.RTCPeerConnection.prototype.setLocalDescription;\n if (!nativeSetLocalDescription || nativeSetLocalDescription.length === 0) return;\n window.RTCPeerConnection.prototype.setLocalDescription = function setLocalDescription() {\n let desc = arguments[0] || {};\n if (typeof desc !== \"object\" || desc.type && desc.sdp) return nativeSetLocalDescription.apply(this, arguments);\n // The remaining steps should technically happen when SLD comes off the\n // RTCPeerConnection's operations chain (not ahead of going on it), but\n // this is too difficult to shim. Instead, this shim only covers the\n // common case where the operations chain is empty. This is imperfect, but\n // should cover many cases. Rationale: Even if we can't reduce the glare\n // window to zero on imperfect implementations, there's value in tapping\n // into the perfect negotiation pattern that several browsers support.\n desc = {\n type: desc.type,\n sdp: desc.sdp\n };\n if (!desc.type) switch(this.signalingState){\n case \"stable\":\n case \"have-local-offer\":\n case \"have-remote-pranswer\":\n desc.type = \"offer\";\n break;\n default:\n desc.type = \"answer\";\n break;\n }\n if (desc.sdp || desc.type !== \"offer\" && desc.type !== \"answer\") return nativeSetLocalDescription.apply(this, [\n desc\n ]);\n const func = desc.type === \"offer\" ? this.createOffer : this.createAnswer;\n return func.apply(this).then((d)=>nativeSetLocalDescription.apply(this, [\n d\n ]));\n };\n}\n\n\n\nfunction $bfdf465d320daaf1$export$e77bf46c04ac7d12({ window: window } = {}, options = {\n shimChrome: true,\n shimFirefox: true,\n shimSafari: true\n}) {\n // Utils.\n const logging = $35583cf39f4111ff$export$bef1f36f5486a6a3;\n const browserDetails = $35583cf39f4111ff$export$2d31490a0c05f094(window);\n const adapter = {\n browserDetails: browserDetails,\n commonShim: $8080a560a280724d$exports,\n extractVersion: $35583cf39f4111ff$export$e3c02be309be1f23,\n disableLog: $35583cf39f4111ff$export$afbfee8cc06fd3e4,\n disableWarnings: $35583cf39f4111ff$export$51516be4b019e41e,\n sdp: // Expose sdp as a convenience. For production apps include directly.\n $257b6346d6d1b15f$exports\n };\n // Shim browser if found.\n switch(browserDetails.browser){\n case \"chrome\":\n if (!$e3f02d0a98ccb0db$exports || !$e3f02d0a98ccb0db$exports.shimPeerConnection || !options.shimChrome) {\n logging(\"Chrome shim is not included in this adapter release.\");\n return adapter;\n }\n if (browserDetails.version === null) {\n logging(\"Chrome shim can not determine version, not shimming.\");\n return adapter;\n }\n logging(\"adapter.js shimming chrome.\");\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = $e3f02d0a98ccb0db$exports;\n // Must be called before shimPeerConnection.\n $8080a560a280724d$export$51d5e40b48c771c7(window, browserDetails);\n $8080a560a280724d$export$7170d04e59f9d553(window, browserDetails);\n $e3f02d0a98ccb0db$exports.shimGetUserMedia(window, browserDetails);\n $e3f02d0a98ccb0db$exports.shimMediaStream(window, browserDetails);\n $e3f02d0a98ccb0db$exports.shimPeerConnection(window, browserDetails);\n $e3f02d0a98ccb0db$exports.shimOnTrack(window, browserDetails);\n $e3f02d0a98ccb0db$exports.shimAddTrackRemoveTrack(window, browserDetails);\n $e3f02d0a98ccb0db$exports.shimGetSendersWithDtmf(window, browserDetails);\n $e3f02d0a98ccb0db$exports.shimGetStats(window, browserDetails);\n $e3f02d0a98ccb0db$exports.shimSenderReceiverGetStats(window, browserDetails);\n $e3f02d0a98ccb0db$exports.fixNegotiationNeeded(window, browserDetails);\n $8080a560a280724d$export$cf133661e444ccfe(window, browserDetails);\n $8080a560a280724d$export$fdafb8d8280e29b5(window, browserDetails);\n $8080a560a280724d$export$63bb816cc75460(window, browserDetails);\n $8080a560a280724d$export$a99147c78a56edc4(window, browserDetails);\n $8080a560a280724d$export$d461c8d5c5db5da7(window, browserDetails);\n $8080a560a280724d$export$a57d114344295149(window, browserDetails);\n break;\n case \"firefox\":\n if (!$5c8245455fb0fb72$exports || !$5c8245455fb0fb72$exports.shimPeerConnection || !options.shimFirefox) {\n logging(\"Firefox shim is not included in this adapter release.\");\n return adapter;\n }\n logging(\"adapter.js shimming firefox.\");\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = $5c8245455fb0fb72$exports;\n // Must be called before shimPeerConnection.\n $8080a560a280724d$export$51d5e40b48c771c7(window, browserDetails);\n $8080a560a280724d$export$7170d04e59f9d553(window, browserDetails);\n $5c8245455fb0fb72$exports.shimGetUserMedia(window, browserDetails);\n $5c8245455fb0fb72$exports.shimPeerConnection(window, browserDetails);\n $5c8245455fb0fb72$exports.shimOnTrack(window, browserDetails);\n $5c8245455fb0fb72$exports.shimRemoveStream(window, browserDetails);\n $5c8245455fb0fb72$exports.shimSenderGetStats(window, browserDetails);\n $5c8245455fb0fb72$exports.shimReceiverGetStats(window, browserDetails);\n $5c8245455fb0fb72$exports.shimRTCDataChannel(window, browserDetails);\n $5c8245455fb0fb72$exports.shimAddTransceiver(window, browserDetails);\n $5c8245455fb0fb72$exports.shimGetParameters(window, browserDetails);\n $5c8245455fb0fb72$exports.shimCreateOffer(window, browserDetails);\n $5c8245455fb0fb72$exports.shimCreateAnswer(window, browserDetails);\n $8080a560a280724d$export$cf133661e444ccfe(window, browserDetails);\n $8080a560a280724d$export$63bb816cc75460(window, browserDetails);\n $8080a560a280724d$export$a99147c78a56edc4(window, browserDetails);\n $8080a560a280724d$export$d461c8d5c5db5da7(window, browserDetails);\n break;\n case \"safari\":\n if (!$4bb6650df37cb8fe$exports || !options.shimSafari) {\n logging(\"Safari shim is not included in this adapter release.\");\n return adapter;\n }\n logging(\"adapter.js shimming safari.\");\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = $4bb6650df37cb8fe$exports;\n // Must be called before shimCallbackAPI.\n $8080a560a280724d$export$51d5e40b48c771c7(window, browserDetails);\n $8080a560a280724d$export$7170d04e59f9d553(window, browserDetails);\n $4bb6650df37cb8fe$exports.shimRTCIceServerUrls(window, browserDetails);\n $4bb6650df37cb8fe$exports.shimCreateOfferLegacy(window, browserDetails);\n $4bb6650df37cb8fe$exports.shimCallbacksAPI(window, browserDetails);\n $4bb6650df37cb8fe$exports.shimLocalStreamsAPI(window, browserDetails);\n $4bb6650df37cb8fe$exports.shimRemoteStreamsAPI(window, browserDetails);\n $4bb6650df37cb8fe$exports.shimTrackEventTransceiver(window, browserDetails);\n $4bb6650df37cb8fe$exports.shimGetUserMedia(window, browserDetails);\n $4bb6650df37cb8fe$exports.shimAudioContext(window, browserDetails);\n $8080a560a280724d$export$cf133661e444ccfe(window, browserDetails);\n $8080a560a280724d$export$fdafb8d8280e29b5(window, browserDetails);\n $8080a560a280724d$export$a99147c78a56edc4(window, browserDetails);\n $8080a560a280724d$export$d461c8d5c5db5da7(window, browserDetails);\n $8080a560a280724d$export$a57d114344295149(window, browserDetails);\n break;\n default:\n logging(\"Unsupported browser!\");\n break;\n }\n return adapter;\n}\n\n\n\"use strict\";\nconst $c8e074d8a8847700$var$adapter = (0, $bfdf465d320daaf1$export$e77bf46c04ac7d12)({\n window: typeof window === \"undefined\" ? undefined : window\n});\nvar $c8e074d8a8847700$export$2e2bcd8739ae039 = $c8e074d8a8847700$var$adapter;\n\n\nclass $b318be68d2b2c029$export$2e2bcd8739ae039 {\n rtc;\n peer;\n webrtc;\n totalSize = 0;\n isReady = false;\n isStarted = false;\n isSending = false;\n isRecaiving = false;\n processedSize = 0;\n recaivedFile;\n bufferSizePerChannel = 10e6;\n bufferSizePerPack = 10e3;\n safeBufferSizePerPack = 9999;\n constructor(webrtc, peer){\n this.webrtc = webrtc;\n this.rtc = webrtc.rtc;\n this.peer = peer;\n }\n async RecaiveFile(_rtc, fileMetadata, channelCount, _totalSize, onEnded) {\n //let totals = {};\n // let index = 0;\n /*setChannelStatus(Array.from({length:channelCount}).map((e, index) => {\n return {\n name: `${index+1}. Kanal`,\n current: 0,\n currentTotal: 0,\n total: 0\n }\n }));*/ let parts = [];\n this.webrtc.on(\"datachannel\", (datachannel)=>{\n //let channelIndex = index++;\n let current = 0;\n let totalSize = 0;\n let currentPart = 0;\n let bufferAmount = [];\n datachannel.onmessage = function({ data: data }) {\n if (totalSize == 0) {\n let { size: size, part: part } = JSON.parse(data);\n totalSize = size;\n currentPart = part;\n /*updateChannelStatus(channelIndex, n => {\n return {\n ...n,\n total: totalSize,\n current: 0\n }\n });*/ datachannel.send(\"READY\");\n } else {\n current += data.byteLength;\n bufferAmount.push(data);\n /*updateChannelStatus(channelIndex, n => {\n return {\n ...n,\n current: data.byteLength + n.current,\n currentTotal: data.byteLength + n.currentTotal,\n }\n });\n setProcessedSize(n => n + data.byteLength);*/ if (current == totalSize) {\n parts[currentPart] = new Blob(bufferAmount);\n bufferAmount = [];\n //totals[datachannel.label] += totalSize;\n totalSize = 0;\n currentPart = 0;\n current = 0;\n datachannel.send(\"TOTAL_RECAIVED\");\n }\n }\n };\n datachannel.onclose = ()=>{\n channelCount--;\n if (channelCount == 0) {\n let file = new File(parts, fileMetadata.name, {\n type: fileMetadata.type,\n lastModified: +new Date\n });\n onEnded(file);\n }\n };\n });\n }\n async SendFile(file, metadata) {\n this.isSending = true;\n this.isStarted = true;\n let buffer = await file.arrayBuffer();\n let partCount = Math.ceil(buffer.byteLength / 10e6);\n let channelCount = Math.min(5, partCount);\n if (this.webrtc.iceStatus != \"connected\") throw new Error(\"WebRTC is a not ready\");\n this.peer.send({\n type: \"file\",\n name: file.name,\n size: file.size,\n mimetype: file.type,\n partCount: partCount,\n channelCount: channelCount,\n metadata: metadata\n });\n let channels = [];\n for(let channelIndex = 0; channelIndex < channelCount; channelIndex++){\n let channel = this.rtc.createDataChannel(\"\\\\?\\\\file_\" + channelIndex);\n channel.binaryType = \"arraybuffer\";\n await new Promise((ok)=>{\n channel.onopen = ()=>{\n ok(void 0);\n };\n });\n channels.push(channel);\n }\n let currentPart = 0;\n let next = ()=>{\n if (currentPart < partCount) {\n let bufferPart = buffer.slice(currentPart * 10e6, currentPart * 10e6 + 10e6);\n currentPart++;\n return [\n bufferPart,\n currentPart - 1\n ];\n }\n return [\n false,\n 0\n ];\n };\n let spyChannelIndex = channels.length;\n await new Promise((ok)=>{\n for(let channelIndex = 0; channelIndex < channels.length; channelIndex++)this.sendPartition(channels[channelIndex], next, channelIndex, ()=>{\n spyChannelIndex--;\n if (spyChannelIndex == 0) {\n this.isSending = false;\n this.isStarted = false;\n ok(undefined);\n }\n });\n });\n }\n sendPartition(channel, nextblob10mb, _channelIndex, onEnded) {\n let [currentBuffer, currentPartition] = nextblob10mb();\n let currentPart = 0;\n let next = ()=>{\n if (!(currentBuffer instanceof ArrayBuffer)) return;\n let bufferPart = currentBuffer.slice(currentPart * 16e3, currentPart * 16e3 + 16e3);\n currentPart++;\n if (bufferPart.byteLength != 0) /*\n updateChannelStatus(channelIndex, n => {\n return {\n ...n,\n current: bufferPart.byteLength + n.current,\n currentTotal: bufferPart.byteLength + n.currentTotal\n }\n });\n setProcessedSize(n => n + bufferPart.byteLength);\n */ return bufferPart;\n };\n channel.addEventListener(\"message\", ({ data: data })=>{\n if (data == \"READY\") this.sendFileChannel(channel, next);\n if (data == \"TOTAL_RECAIVED\") {\n [currentBuffer, currentPartition] = nextblob10mb();\n currentPart = 0;\n if (currentBuffer != false) /*updateChannelStatus(channelIndex, n => {\n return {\n ...n,\n total: currentBuffer.byteLength,\n current: 0,\n }\n });*/ channel.send(JSON.stringify({\n size: currentBuffer.byteLength,\n part: currentPartition\n }));\n else {\n channel.close();\n onEnded();\n }\n }\n });\n channel.send(JSON.stringify({\n size: currentBuffer.byteLength,\n part: currentPartition\n }));\n }\n sendFileChannel(channel, getNextBlob) {\n channel.addEventListener(\"bufferedamountlow\", function() {\n let buffer = getNextBlob();\n if (buffer) channel.send(buffer);\n });\n channel.bufferedAmountLowThreshold = 15999;\n let c = getNextBlob();\n c && channel.send(c);\n }\n}\n\n\n\nclass $895bfe3da380c655$export$2e2bcd8739ae039 {\n static channels = new Map();\n static requireGC = false;\n id;\n active = false;\n connectionStatus = \"new\";\n iceStatus = \"new\";\n gatheringStatus = \"new\";\n signalingStatus = \"\";\n rtc;\n recaivingStream = new Map();\n sendingStream = new Map();\n events = {};\n channel;\n static defaultRTCConfig = {\n iceCandidatePoolSize: 0,\n iceTransportPolicy: \"all\",\n rtcpMuxPolicy: \"require\"\n };\n static defaultICEServers = [\n {\n urls: \"stun:stun.l.google.com:19302\"\n },\n {\n urls: \"stun:stun1.l.google.com:19302\"\n },\n {\n urls: \"stun:stun2.l.google.com:19302\"\n },\n {\n urls: \"stun:stun3.l.google.com:19302\"\n },\n {\n urls: \"stun:stun4.l.google.com:19302\"\n }\n ];\n peer;\n FileTransportChannel;\n constructor(rtcConfig, rtcServers){\n let config = {};\n if (rtcConfig) Object.assign(config, $895bfe3da380c655$export$2e2bcd8739ae039.defaultRTCConfig, rtcConfig);\n else Object.assign(config, $895bfe3da380c655$export$2e2bcd8739ae039.defaultRTCConfig);\n config.iceServers = rtcServers || $895bfe3da380c655$export$2e2bcd8739ae039.defaultICEServers;\n this.rtc = new RTCPeerConnection(config);\n this.rtc.addEventListener(\"connectionstatechange\", ()=>{\n this.eventConnectionState();\n });\n this.rtc.addEventListener(\"icecandidate\", (...args)=>{\n this.eventIcecandidate(...args);\n });\n this.rtc.addEventListener(\"iceconnectionstatechange\", ()=>{\n this.eventICEConnectionState();\n });\n this.rtc.addEventListener(\"icegatheringstatechange\", ()=>{\n this.eventICEGatherinState();\n });\n this.rtc.addEventListener(\"negotiationneeded\", ()=>{\n this.eventNogationNeeded();\n });\n this.rtc.addEventListener(\"signalingstatechange\", ()=>{\n this.eventSignalingState();\n });\n this.rtc.addEventListener(\"track\", (...args)=>{\n this.eventTrack(...args);\n });\n this.rtc.addEventListener(\"datachannel\", (...args)=>{\n this.eventDatachannel(...args);\n });\n this.on(\"input\", async (data)=>{\n switch(data.type){\n case \"icecandidate\":\n await this.rtc.addIceCandidate(new RTCIceCandidate(data.value));\n break;\n case \"offer\":\n {\n await this.rtc.setRemoteDescription(new RTCSessionDescription(data.value));\n let answer = await this.rtc.createAnswer({\n offerToReceiveAudio: true,\n offerToReceiveVideo: true\n });\n await this.rtc.setLocalDescription(answer);\n this.send({\n type: \"answer\",\n value: answer\n });\n break;\n }\n case \"answer\":\n await this.rtc.setRemoteDescription(new RTCSessionDescription(data.value));\n break;\n case \"streamInfo\":\n {\n let { id: id, value: value } = data;\n let streamInfo = this.recaivingStream.get(id);\n if (!streamInfo) this.recaivingStream.set(id, value);\n else this.recaivingStream.set(id, {\n ...streamInfo,\n ...value\n });\n this.send({\n type: \"streamAccept\",\n id: id\n });\n break;\n }\n case \"streamRemoved\":\n {\n let { id: id } = data;\n this.emit(\"stream:stopped\", this.recaivingStream.get(id));\n this.sendingStream.delete(id);\n break;\n }\n case \"streamAccept\":\n {\n let { id: id } = data;\n let sendingStream = this.sendingStream.get(id);\n let senders = [];\n if (sendingStream && sendingStream.stream) {\n for (const track of sendingStream.stream.getTracks())senders.push(this.rtc.addTrack(track, sendingStream.stream));\n sendingStream.senders = senders;\n }\n break;\n }\n case \"message\":\n this.emit(\"message\", data.payload);\n break;\n }\n });\n }\n addEventListener(event, callback) {\n (this.events[event] || (this.events[event] = [])).push(callback);\n }\n on(event, callback) {\n this.addEventListener(event, callback);\n }\n async dispatch(event, ...args) {\n if (this.events[event]) for (const callback of this.events[event])await callback(...args);\n }\n async emit(event, ...args) {\n await this.dispatch(event, ...args);\n }\n connect() {\n if (!this.channel) this.createDefaultDataChannel();\n }\n sendMessage(data) {\n this.send({\n type: \"message\",\n payload: data\n });\n }\n createDefaultDataChannel() {\n let dt = this.rtc.createDataChannel(\":default:\", {\n ordered: true\n });\n dt.addEventListener(\"open\", ()=>{\n this.channel = dt;\n $895bfe3da380c655$export$2e2bcd8739ae039.channels.set(this.id, this);\n this.active = true;\n });\n dt.addEventListener(\"message\", ({ data: data })=>{\n let pack = JSON.parse(data);\n this.emit(\"input\", pack);\n });\n dt.addEventListener(\"close\", ()=>{\n this.channel = undefined;\n this.active = false;\n });\n }\n destroy() {\n this.active = false;\n if (this.channel) {\n this.channel.close();\n this.channel = undefined;\n }\n if (this.rtc) this.rtc.close();\n this.emit(\"disconnected\");\n $895bfe3da380c655$export$2e2bcd8739ae039.channels.delete(this.id);\n }\n eventDatachannel(event) {\n if (event.channel.label == \":default:\") {\n $895bfe3da380c655$export$2e2bcd8739ae039.channels.set(this.id, this);\n this.channel = event.channel;\n this.active = true;\n event.channel.addEventListener(\"message\", ({ data: data })=>{\n let pack = JSON.parse(data);\n this.emit(\"input\", pack);\n });\n event.channel.addEventListener(\"close\", ()=>{\n this.channel = undefined;\n $895bfe3da380c655$export$2e2bcd8739ae039.channels.delete(this.id);\n $895bfe3da380c655$export$2e2bcd8739ae039.requireGC = true;\n });\n } else this.emit(\"datachannel\", event.channel);\n }\n send(data) {\n if (this.channel?.readyState == \"open\") this.channel.send(JSON.stringify(data));\n else this.emit(\"output\", data);\n }\n eventConnectionState() {\n this.connectionStatus = this.rtc.connectionState;\n if (this.connectionStatus == \"connected\") {\n if (this.active == false) this.emit(\"connected\");\n }\n if (this.connectionStatus == \"failed\" || this.connectionStatus == \"disconnected\" || this.connectionStatus == \"closed\") {\n if (this.active) this.destroy();\n }\n }\n eventIcecandidate(event) {\n if (event.candidate) this.send({\n type: \"icecandidate\",\n value: event.candidate\n });\n }\n eventICEConnectionState() {\n this.iceStatus = this.rtc.iceConnectionState;\n }\n eventICEGatherinState() {\n this.gatheringStatus = this.rtc.iceGatheringState;\n }\n async eventNogationNeeded() {\n let offer = await this.rtc.createOffer({\n iceRestart: true,\n offerToReceiveAudio: true,\n offerToReceiveVideo: true\n });\n await this.rtc.setLocalDescription(offer);\n this.send({\n type: \"offer\",\n value: offer\n });\n }\n eventSignalingState() {\n this.signalingStatus = this.rtc.signalingState;\n }\n eventTrack(event) {\n let rtpRecaiver = event.receiver;\n if (event.streams.length) for (const stream of event.streams){\n let streamInfo = this.recaivingStream.get(stream.id);\n (streamInfo.recaivers || (streamInfo.recaivers = [])).push(rtpRecaiver);\n if (this.recaivingStream.get(stream.id).stream == null) {\n streamInfo.stream = stream;\n this.emit(\"stream:added\", this.recaivingStream.get(stream.id));\n } else streamInfo.stream = stream;\n }\n }\n sendStream(stream, name, info) {\n this.send({\n type: \"streamInfo\",\n id: stream.id,\n value: {\n ...info,\n name: name\n }\n });\n this.sendingStream.set(stream.id, {\n ...info,\n id: stream.id,\n name: name,\n stream: stream\n });\n }\n stopStream(_stream) {\n if (this.connectionStatus != \"connected\") return;\n if (this.sendingStream.has(_stream.id)) {\n let { stream: stream } = this.sendingStream.get(_stream.id);\n for (const track of stream.getTracks()){\n for (const RTCPSender of this.rtc.getSenders())if (RTCPSender.track?.id == track.id) this.rtc.removeTrack(RTCPSender);\n }\n this.send({\n type: \"streamRemoved\",\n id: stream.id\n });\n this.sendingStream.delete(_stream.id);\n }\n }\n stopAllStreams() {\n if (this.connectionStatus != \"connected\") return;\n for (const [, { stream: stream }] of this.sendingStream){\n if (stream == undefined) continue;\n for (const track of stream.getTracks()){\n for (const RTCPSender of this.rtc.getSenders())if (RTCPSender.track?.id == track.id) this.rtc.removeTrack(RTCPSender);\n }\n this.send({\n type: \"streamRemoved\",\n id: stream.id\n });\n }\n this.sendingStream.clear();\n }\n async SendFile(file, meta) {\n if (!this.peer) throw new Error(\"Peer is not ready\");\n this.FileTransportChannel = new (0, $b318be68d2b2c029$export$2e2bcd8739ae039)(this, this.peer);\n await this.FileTransportChannel.SendFile(file, meta);\n }\n async RecaiveFile(chnlCount, filemeta, totalSize) {\n if (!this.peer) throw new Error(\"Peer is not ready\");\n this.FileTransportChannel = new (0, $b318be68d2b2c029$export$2e2bcd8739ae039)(this, this.peer);\n return await new Promise((recaivedFile)=>{\n if (this.FileTransportChannel) this.FileTransportChannel.RecaiveFile(this.rtc, filemeta, chnlCount, totalSize, (file)=>{\n recaivedFile(file);\n });\n });\n }\n}\n$895bfe3da380c655$export$2e2bcd8739ae039.requireGC = false;\nsetInterval(()=>{\n if ($895bfe3da380c655$export$2e2bcd8739ae039.requireGC == false) return;\n let img = document.createElement(\"img\");\n img.src = window.URL.createObjectURL(new Blob([\n new ArrayBuffer(5e+7)\n ]));\n img.onerror = function() {\n window.URL.revokeObjectURL(this.src);\n };\n $895bfe3da380c655$export$2e2bcd8739ae039.requireGC = false;\n}, 3000);\n\n\nvar $9f6c30de484136d4$var$IMessageSymbase;\n(function($9f6c30de484136d4$var$IMessageSymbase) {\n $9f6c30de484136d4$var$IMessageSymbase[$9f6c30de484136d4$var$IMessageSymbase[\"PayloadMessagePack\"] = -12873.54] = \"PayloadMessagePack\";\n $9f6c30de484136d4$var$IMessageSymbase[$9f6c30de484136d4$var$IMessageSymbase[\"PayloadRTCBasePack\"] = -12884.54] = \"PayloadRTCBasePack\";\n})($9f6c30de484136d4$var$IMessageSymbase || ($9f6c30de484136d4$var$IMessageSymbase = {}));\nclass $9f6c30de484136d4$export$2e2bcd8739ae039 extends (0, $639a7a490074f3f2$export$2e2bcd8739ae039) {\n mwse;\n options = {};\n socketId;\n selfSocket = false;\n active = false;\n info;\n rtc;\n peerConnection = false;\n primaryChannel = \"datachannel\";\n constructor(wsts){\n super();\n this.mwse = wsts;\n this.info = new (0, $d7d20b916ab000fe$export$f3bd5f68ae16de)(this);\n this.on(\"updateinfo\", (name, value)=>{\n this.info.info[name] = value;\n });\n this.on(\"pack\", (data)=>{\n if (data.type == \":rtcbase_pack:\") {\n if (this.rtc) return this.rtc.emit(\"input\", data.payload);\n return console.warn(\"Not active rtc but recaived rtc packs\");\n }\n this.emit(\"message\", data);\n });\n }\n createRTC(rtcConfig, rtcServers) {\n this.rtc = new (0, $895bfe3da380c655$export$2e2bcd8739ae039)(rtcConfig, rtcServers);\n this.rtc.peer = this;\n this.rtc.on(\"connected\", ()=>{\n this.peerConnection = true;\n });\n this.rtc.on(\"disconnected\", ()=>{\n this.peerConnection = false;\n });\n this.rtc.on(\"output\", (payload)=>{\n this.send({\n type: \":rtcbase_pack:\",\n payload: payload\n });\n });\n this.rtc.on(\"message\", (payload)=>{\n this.emit(\"pack\", payload);\n });\n return this.rtc;\n }\n setPeerOptions(options) {\n if (typeof options == \"string\") this.setSocketId(options);\n else this.options = options;\n }\n setSocketId(uuid) {\n this.socketId = uuid;\n }\n async metadata() {\n if (this.socketId == \"me\") {\n let result = await this.mwse.EventPooling.request({\n type: \"my/socketid\"\n });\n this.selfSocket = true;\n this.active ||= true;\n this.socketId = result;\n this.emit(\"scope\");\n this.activeScope = true;\n return result;\n }\n }\n async request(pack) {\n if (this.active) return await this.mwse.request(this.socketId, pack);\n }\n equalTo(peer) {\n return this.socketId == peer.socketId;\n }\n async isReachable() {\n return await this.mwse.EventPooling.request({\n type: \"is/reachable\",\n to: this.socketId\n });\n }\n async enablePairAuth() {\n await this.mwse.EventPooling.request({\n type: \"auth/pair-system\",\n value: \"everybody\"\n });\n }\n async disablePairAuth() {\n await this.mwse.EventPooling.request({\n type: \"auth/pair-system\",\n value: \"disable\"\n });\n }\n async requestPair() {\n let { message: message, status: status } = await this.mwse.EventPooling.request({\n type: \"request/pair\",\n to: this.socketId\n });\n if (message == \"ALREADY-PAIRED\" || message == \"ALREADY-REQUESTED\") console.warn(\"Already paired or pair requested\");\n if (status == \"fail\") {\n console.error(\"Request Pair Error\", status, message);\n return false;\n }\n return true;\n }\n async endPair() {\n await this.mwse.EventPooling.request({\n type: \"end/pair\",\n to: this.socketId\n });\n this.forget();\n }\n async acceptPair() {\n let { message: message, status: status } = await this.mwse.EventPooling.request({\n type: \"accept/pair\",\n to: this.socketId\n });\n if (status == \"fail\") {\n console.error(\"Pair Error\", status, message);\n return false;\n }\n return true;\n }\n async rejectPair() {\n let { message: message, status: status } = await this.mwse.EventPooling.request({\n type: \"reject/pair\",\n to: this.socketId\n });\n if (status == \"fail\") {\n console.error(\"Pair Error\", status, message);\n return false;\n }\n return true;\n }\n async getPairedList() {\n let { value: value } = await this.mwse.EventPooling.request({\n type: \"pair/list\",\n to: this.socketId\n });\n return value;\n }\n async send(pack) {\n let isOpenedP2P = this.peerConnection && this.rtc?.active;\n let isOpenedServer = this.mwse.server.connected;\n let sendChannel;\n if (isOpenedP2P && isOpenedServer) {\n if (this.primaryChannel == \"websocket\") sendChannel = \"websocket\";\n else sendChannel = \"datachannel\";\n } else if (isOpenedServer) sendChannel = \"websocket\";\n else sendChannel = \"datachannel\";\n if (sendChannel == \"websocket\") await this.mwse.EventPooling.request({\n type: \"pack/to\",\n pack: pack,\n to: this.socketId\n });\n else this.rtc?.sendMessage(pack);\n }\n async forget() {\n this.mwse.peers.delete(this.socketId);\n this.mwse.pairs.delete(this.socketId);\n }\n}\n\n\n\nclass $59e4377e2cc5e2be$export$f106f681f3286480 {\n room;\n info = {};\n constructor(room){\n this.room = room;\n }\n async fetch(name) {\n if (name) {\n let rinfo = await this.room.mwse.EventPooling.request({\n type: \"room/getinfo\",\n roomId: this.room.roomId,\n name: name\n });\n if (rinfo.status == \"success\") this.info = rinfo.info;\n else console.warn(rinfo.message);\n } else {\n let rinfo = await this.room.mwse.EventPooling.request({\n type: \"peer/info\",\n peer: this.room.roomId\n });\n if (rinfo.status == \"success\") this.info = rinfo.info;\n else console.warn(rinfo.message);\n }\n return this.info;\n }\n set(name, value) {\n this.info[name] = value;\n this.room.mwse.WSTSProtocol.SendOnly({\n type: \"room/setinfo\",\n roomId: this.room.roomId,\n name: name,\n value: value\n });\n }\n get(name) {\n return name ? this.info[name] : this.info;\n }\n}\n\n\nclass $4415e33c9749fde6$export$2e2bcd8739ae039 extends (0, $639a7a490074f3f2$export$2e2bcd8739ae039) {\n mwse;\n options;\n roomId;\n accessType;\n description;\n joinType;\n name;\n owner;\n peers = new Map();\n info;\n constructor(wsts){\n super();\n this.mwse = wsts;\n this.info = new (0, $59e4377e2cc5e2be$export$f106f681f3286480)(this);\n }\n setRoomOptions(options) {\n if (typeof options == \"string\") this.roomId = options;\n else {\n let defaultOptions = {\n joinType: \"free\",\n ifexistsJoin: true,\n accessType: \"private\",\n notifyActionInvite: true,\n notifyActionJoined: true,\n notifyActionEjected: true,\n autoFetchInfo: true\n };\n Object.assign(defaultOptions, options);\n this.options = defaultOptions;\n }\n }\n setRoomId(uuid) {\n this.roomId = uuid;\n }\n async createRoom(roomOptions) {\n let options = this.options || roomOptions;\n let result = await this.mwse.EventPooling.request({\n type: \"create-room\",\n ...options\n });\n if (result.status == \"fail\") {\n if (result.message == \"ALREADY-EXISTS\" && this.options.ifexistsJoin) return this.join();\n throw new Error(result.message || result.messages);\n } else {\n this.options = {\n ...this.options,\n ...result.room\n };\n this.roomId = result.room.id;\n this.mwse.rooms.set(this.roomId, this);\n }\n }\n async join() {\n let result = await this.mwse.EventPooling.request({\n type: \"joinroom\",\n name: this.options.name,\n credential: this.options.credential,\n autoFetchInfo: this.options.autoFetchInfo || false\n });\n if (result.status == \"fail\") throw new Error(result.message);\n else {\n this.options = {\n ...this.options,\n ...result.room\n };\n if (result.info) this.info.info = result.info;\n this.roomId = result.room.id;\n this.mwse.rooms.set(this.roomId, this);\n }\n }\n async eject() {\n let { type: type } = await this.mwse.EventPooling.request({\n type: \"ejectroom\",\n roomId: this.roomId\n });\n this.peers.clear();\n if (type == \"success\") this.mwse.rooms.delete(this.roomId);\n }\n async send(pack, wom = false) {\n await this.mwse.EventPooling.request({\n type: \"pack/room\",\n pack: pack,\n to: this.roomId,\n wom: wom\n });\n }\n async fetchPeers(filter, onlyNumber = false) {\n if (onlyNumber) {\n let { count: count } = await this.mwse.EventPooling.request({\n type: \"room/peer-count\",\n roomId: this.roomId,\n filter: filter || {}\n });\n return count;\n } else {\n let { status: status, peers: peers } = await this.mwse.EventPooling.request({\n type: \"room-peers\",\n roomId: this.roomId,\n filter: filter || {}\n });\n let cup = [];\n if (status == \"fail\") throw new Error(\"Cant using peers on room\");\n else if (status == \"success\") for (const peerid of peers){\n let peer = this.mwse.peer(peerid);\n cup.push(peer);\n this.peers.set(peerid, peer);\n }\n return cup;\n }\n }\n}\n\n\nclass $023568b0c88ffd16$export$2e2bcd8739ae039 {\n mwse;\n constructor(wsts){\n this.mwse = wsts;\n this.addListener();\n }\n addListener() {\n this.mwse.server?.onRecaivePack((pack)=>{\n this.PackAnalyze(pack);\n });\n }\n SendRaw(pack) {\n this.mwse.server.tranferToServer(pack);\n }\n SendOnly(pack) {\n this.mwse.server.tranferToServer([\n pack,\n \"R\"\n ]);\n }\n SendRequest(pack, id) {\n this.mwse.server.tranferToServer([\n pack,\n id,\n \"R\"\n ]);\n }\n StartStream(pack, id) {\n this.mwse.server.tranferToServer([\n pack,\n id,\n \"S\"\n ]);\n }\n PackAnalyze(data) {\n let [payload, id, action] = data;\n if (typeof id === \"number\") {\n let callback = this.mwse.EventPooling.events.get(id);\n if (callback) {\n callback[0](payload, action);\n switch(action){\n case \"E\":\n this.mwse.EventPooling.events.delete(id);\n break;\n case \"S\":\n default:\n break;\n }\n } else console.warn(\"Missing event sended from server\");\n } else {\n let signals = this.mwse.EventPooling.signals.get(id);\n if (signals) for (const callback of signals)callback(payload);\n else console.warn(\"Missing event sended from server\");\n }\n }\n}\n\n\nclass $1ed8c0121ddb51e7$export$2e2bcd8739ae039 extends (0, $639a7a490074f3f2$export$2e2bcd8739ae039) {\n static rtc;\n server;\n WSTSProtocol;\n EventPooling;\n rooms = new Map();\n pairs = new Map();\n peers = new Map();\n virtualPressure;\n me;\n /*public static compress(message:string, callback:(e:any) => any)\n {\n let u : any= [];\n let C = new Gzip({\n level: 9,\n mem: 12\n },(stream,isLast) => {\n u.push(stream);\n if(isLast)\n {\n callback(u);\n }\n });\n C.push(new TextEncoder().encode(message), true);\n }*/ constructor(options){\n super();\n this.server = new (0, $201ddc79d766b86c$export$98b66c25bb38499d)(options);\n this.WSTSProtocol = new (0, $023568b0c88ffd16$export$2e2bcd8739ae039)(this);\n this.EventPooling = new (0, $7bc29f3852fca8a1$export$2e2bcd8739ae039)(this);\n this.virtualPressure = new (0, $707287ab76ae8d6a$export$cd59d3e68ede65a1)(this);\n this.server.connect();\n this.me = new (0, $9f6c30de484136d4$export$2e2bcd8739ae039)(this);\n this.me.scope(()=>{\n this.peers.set(\"me\", this.me);\n this.peers.set(this.me.socketId, this.me);\n });\n this.server.onActive(async ()=>{\n this.me.setSocketId(\"me\");\n await this.me.metadata();\n this.emit(\"scope\");\n this.activeScope = true;\n });\n this.packMessagingSystem();\n }\n async request(peerId, pack) {\n let { pack: answer } = await this.EventPooling.request({\n type: \"request/to\",\n to: peerId,\n pack: pack\n });\n return answer;\n }\n async response(peerId, requestId, pack) {\n this.WSTSProtocol.SendOnly({\n type: \"response/to\",\n to: peerId,\n pack: pack,\n id: requestId\n });\n }\n packMessagingSystem() {\n this.EventPooling.signal(\"pack\", (payload)=>{\n let { from: from, pack: pack } = payload;\n this.peer(from, true).emit(\"pack\", pack);\n });\n this.EventPooling.signal(\"request\", (payload)=>{\n let { from: from, pack: pack, id: id } = payload;\n let scope = {\n body: pack,\n response: (pack)=>{\n this.response(from, id, pack);\n },\n peer: this.peer(from, true)\n };\n this.peer(from, true).emit(\"request\", scope);\n this.peer(\"me\").emit(\"request\", scope);\n });\n this.EventPooling.signal(\"pack/room\", (payload)=>{\n let { from: from, pack: pack, sender: sender } = payload;\n this.room(from).emit(\"message\", pack, this.peer(sender));\n });\n this.EventPooling.signal(\"room/joined\", (payload)=>{\n let { id: id, roomid: roomid } = payload;\n let room = this.room(roomid);\n let peer = this.peer(id, true);\n room.peers.set(peer.socketId, peer);\n room.emit(\"join\", peer);\n });\n this.EventPooling.signal(\"room/info\", (payload)=>{\n let { roomId: roomId, name: name, value: value } = payload;\n this.room(roomId).emit(\"updateinfo\", name, value);\n });\n this.EventPooling.signal(\"room/ejected\", (payload)=>{\n let { id: id, roomid: roomid } = payload;\n let room = this.room(roomid);\n let peer = this.peer(id);\n room.peers.delete(peer.socketId);\n room.emit(\"eject\", peer);\n });\n this.EventPooling.signal(\"room/closed\", (payload)=>{\n let { roomid: roomid } = payload;\n let room = this.room(roomid);\n room.peers.clear();\n room.emit(\"close\");\n this.rooms.delete(roomid);\n });\n this.EventPooling.signal(\"pair/info\", (payload)=>{\n let { from: from, name: name, value: value } = payload;\n let peer = this.peer(from);\n peer.info.info[name] = value;\n peer.emit(\"info\", name, value);\n });\n this.EventPooling.signal(\"request/pair\", (payload)=>{\n let { from: from, info: info } = payload;\n let peer = this.peer(from);\n peer.info.info = info;\n peer.emit(\"request/pair\", peer);\n this.peer(\"me\").emit(\"request/pair\", peer);\n });\n this.EventPooling.signal(\"accepted/pair\", (payload)=>{\n let { from: from, info: info } = payload;\n let peer = this.peer(from);\n peer.info.info = info;\n peer.emit(\"accepted/pair\", peer);\n this.peer(\"me\").emit(\"accepted/pairr\", peer);\n });\n this.EventPooling.signal(\"end/pair\", (payload)=>{\n let { from: from, info: info } = payload;\n let peer = this.peer(from);\n peer.emit(\"endPair\", info);\n this.peer(\"me\").emit(\"endPair\", from, info);\n });\n }\n room(options) {\n if (typeof options == \"string\") {\n if (this.rooms.has(options)) return this.rooms.get(options);\n }\n let room = new (0, $4415e33c9749fde6$export$2e2bcd8739ae039)(this);\n room.setRoomOptions(options);\n this.emit(\"room\");\n return room;\n }\n peer(options, isActive = false) {\n if (typeof options == \"string\") {\n if (this.peers.has(options)) return this.peers.get(options);\n if (this.pairs.has(options)) return this.pairs.get(options);\n }\n let peer = new (0, $9f6c30de484136d4$export$2e2bcd8739ae039)(this);\n peer.setPeerOptions(options);\n peer.active = isActive;\n this.peers.set(peer.socketId, peer);\n this.emit(\"peer\", peer);\n return peer;\n }\n}\nwindow.MWSE = $1ed8c0121ddb51e7$export$2e2bcd8739ae039;\n\n})();\n//# sourceMappingURL=index.js.map\n","import {Connection,IConnection} from \"./Connection\";\nimport EventPool from \"./EventPool\";\nimport EventTarget from \"./EventTarget\";\nimport { IPPressure } from \"./IPPressure\";\nimport Peer from \"./Peer\";\nimport Room, { IRoomOptions } from \"./Room\";\nimport WSTSProtocol, { Message } from \"./WSTSProtocol\";\nimport WebRTC from \"./WebRTC\";\n//import {Gzip} from \"fflate\";\nexport default class MWSE extends EventTarget {\n public static rtc : WebRTC;\n public server! : Connection;\n public WSTSProtocol! : WSTSProtocol;\n public EventPooling! : EventPool;\n public rooms : Map = new Map();\n public pairs : Map = new Map();\n public peers : Map = new Map();\n public virtualPressure : IPPressure;\n public me! : Peer;\n /*public static compress(message:string, callback:(e:any) => any)\n {\n let u : any= [];\n let C = new Gzip({\n level: 9,\n mem: 12\n },(stream,isLast) => {\n u.push(stream);\n if(isLast)\n {\n callback(u);\n }\n });\n C.push(new TextEncoder().encode(message), true);\n }*/\n constructor(options: IConnection){\n super();\n this.server = new Connection(options);\n this.WSTSProtocol = new WSTSProtocol(this);\n this.EventPooling = new EventPool(this);\n this.virtualPressure = new IPPressure(this);\n this.server.connect();\n this.me = new Peer(this);\n this.me.scope(()=>{\n this.peers.set('me', this.me);\n this.peers.set(this.me.socketId as string, this.me);\n })\n this.server.onActive(async ()=>{\n this.me.setSocketId('me');\n await this.me.metadata();\n this.emit('scope');\n this.activeScope = true;\n });\n this.packMessagingSystem();\n }\n public async request(peerId: string, pack:Message)\n {\n let {pack:answer} = await this.EventPooling.request({\n type: 'request/to',\n to: peerId,\n pack\n });\n return answer;\n }\n public async response(peerId: string, requestId:number, pack:Message)\n {\n this.WSTSProtocol.SendOnly({\n type: 'response/to',\n to: peerId,\n pack,\n id: requestId\n })\n }\n private packMessagingSystem()\n {\n this.EventPooling.signal('pack',(payload : {from:string,pack:any}) => {\n let {from,pack} = payload;\n this.peer(from, true).emit('pack', pack);\n })\n this.EventPooling.signal('request',(payload : {from:string,pack:any,id:number}) => {\n let {from,pack, id} = payload;\n let scope = {\n body: pack,\n response: (pack: Message) => {\n this.response(from, id, pack);\n },\n peer: this.peer(from, true)\n };\n this.peer(from, true).emit('request', scope);\n this.peer('me').emit('request', scope);\n })\n this.EventPooling.signal('pack/room',(payload : {from:string,pack:any,sender:string}) => {\n let {from,pack,sender} = payload;\n this.room(from).emit('message', pack, this.peer(sender));\n })\n this.EventPooling.signal('room/joined',(payload : {id:string,roomid:any,ownerid:string}) => {\n let {id,roomid} = payload;\n let room = this.room(roomid);\n let peer = this.peer(id, true);\n room.peers.set(peer.socketId as string, peer);\n room.emit('join', peer);\n })\n this.EventPooling.signal('room/info',(payload : {roomId:string,value:any,name:string}) => {\n let {roomId,name,value} = payload;\n this.room(roomId).emit('updateinfo', name,value);\n })\n this.EventPooling.signal('room/ejected',(payload : {id:string,roomid:any,ownerid:string}) => {\n let {id,roomid} = payload;\n let room = this.room(roomid);\n let peer = this.peer(id);\n room.peers.delete(peer.socketId as string);\n room.emit('eject', peer);\n })\n this.EventPooling.signal('room/closed',(payload : {roomid:any}) => {\n let {roomid} = payload;\n let room = this.room(roomid);\n room.peers.clear();\n room.emit('close');\n this.rooms.delete(roomid);\n })\n this.EventPooling.signal(\"pair/info\", (payload : {from : string,name: string, value: string | number | boolean}) => {\n let {from, name, value} = payload;\n let peer = this.peer(from);\n peer.info.info[name] = value;\n peer.emit(\"info\", name, value);\n })\n this.EventPooling.signal(\"request/pair\", (payload : {from : string,info: any}) => {\n let {from, info} = payload;\n let peer = this.peer(from);\n peer.info.info = info;\n peer.emit(\"request/pair\", peer);\n this.peer('me').emit('request/pair', peer);\n })\n this.EventPooling.signal(\"accepted/pair\", (payload : {from : string,info: any}) => {\n let {from, info} = payload;\n let peer = this.peer(from);\n peer.info.info = info;\n peer.emit(\"accepted/pair\", peer);\n this.peer('me').emit('accepted/pairr', peer);\n })\n this.EventPooling.signal(\"end/pair\", (payload : {from : string,info: any}) => {\n let {from, info} = payload;\n let peer = this.peer(from);\n peer.emit(\"endPair\", info);\n this.peer('me').emit('endPair', from, info);\n })\n }\n public room(options: IRoomOptions | string) : Room\n {\n if(typeof options == \"string\")\n {\n if(this.rooms.has(options))\n {\n return this.rooms.get(options) as Room\n }\n }\n let room = new Room(this);\n room.setRoomOptions(options);\n this.emit('room');\n return room;\n }\n public peer(options: string | IRoomOptions, isActive = false) : Peer\n {\n if(typeof options == \"string\")\n {\n if(this.peers.has(options))\n {\n return this.peers.get(options) as Peer\n }\n if(this.pairs.has(options))\n {\n return this.pairs.get(options) as Peer\n }\n }\n let peer = new Peer(this);\n peer.setPeerOptions(options);\n peer.active = isActive;\n this.peers.set(peer.socketId as string, peer);\n this.emit('peer', peer);\n return peer;\n }\n};\n\ndeclare global {\n interface Window {\n MWSE: any;\n }\n}\n\nwindow.MWSE = MWSE;","export interface IConnection{\n endpoint: string;\n autoReconnect?: boolean | {\n timeout: number;\n }\n}\nexport class Connection\n{\n public ws! : WebSocket;\n public endpoint : URL;\n public autoPair : boolean = false;\n public connected : boolean = false;\n\n public autoReconnect : boolean = true;\n public autoReconnectTimeout : number = 3000;\n public autoReconnectTimer? : number;\n constructor(options: IConnection){\n this.endpoint = new URL(options.endpoint);\n if(typeof options.autoReconnect == \"boolean\")\n {\n this.autoReconnect = true;\n }else if(options.autoReconnect)\n {\n this.autoReconnect = true;\n this.autoReconnectTimeout = options.autoReconnect.timeout;\n }\n }\n public connect()\n {\n if(this.autoReconnectTimer)\n {\n clearTimeout(this.autoReconnectTimer)\n };\n this.ws = new WebSocket(this.endpoint.href);\n this.addWSEvents();\n }\n public disconnect()\n {\n this.ws.close();\n }\n public addWSEvents()\n {\n this.ws.addEventListener(\"open\", () => this.eventOpen());\n this.ws.addEventListener(\"close\", () => this.eventClose());\n this.ws.addEventListener(\"error\", () => this.eventError());\n this.ws.addEventListener(\"message\", ({data}) => this.eventMessage(data as string | ArrayBuffer));\n }\n private eventOpen()\n {\n this.connected = true;\n for (const callback of this.activeConnectionEvent) {\n callback(void 0);\n }\n }\n private eventClose()\n {\n this.connected = false;\n if(this.autoReconnect)\n {\n this.autoReconnectTimer = setTimeout(() => this.connect(), this.autoReconnectTimeout)\n }\n }\n private eventError()\n {\n this.connected = false;\n }\n private recaivePackEvent : ((data:any) => any)[] = [];\n public onRecaivePack(func:(data:any) => any)\n {\n this.recaivePackEvent.push(func);\n }\n private activeConnectionEvent : Function[] = [];\n public onActive(func:Function)\n {\n if(this.connected)\n {\n func()\n }else{\n this.activeConnectionEvent.push(func);\n }\n }\n private eventMessage(data: string | ArrayBuffer)\n {\n if(typeof data == \"string\")\n {\n let $data = JSON.parse(data);\n for (const callback of this.recaivePackEvent) {\n callback($data);\n }\n }\n }\n public tranferToServer(data:any)\n {\n if(this.connected)\n {\n this.ws.send(JSON.stringify(data));\n }\n }\n}","import MWSE from \"./index\";\nimport { Message } from \"./WSTSProtocol\";\n\nexport default class EventPool\n{\n public wsts : MWSE;\n public events : Map = new Map();\n public signals : Map = new Map();\n\n public requests : Map = new Map();\n\n public count = 0;\n constructor(wsts:MWSE){\n this.wsts = wsts;\n }\n public request(msg: Message) : Promise\n {\n return new Promise((ok,rej) => {\n let id = ++this.count;\n this.wsts.WSTSProtocol.SendRequest(msg, id);\n this.events.set(id,[\n (data:any) => {\n ok(data);\n },\n (data:any) => {\n rej(data);\n }\n ]);\n })\n }\n public stream(msg: Message, callback: Function)\n {\n let id = ++this.count;\n this.wsts.WSTSProtocol.StartStream(msg, id);\n this.events.set(id,[\n (data:any) => {\n callback(data);\n },\n () => { }\n ]);\n }\n public signal(event: string, callback: Function)\n {\n let T = this.signals.get(event);\n if(!T)\n {\n this.signals.set(event, [callback]);\n }else{\n T.push(callback);\n }\n }\n}","export default class EventTarget\n{\n private events : {[key:string]:Function[]} = {};\n public emit(eventName :string, ...args:any[])\n {\n if(this.events[eventName])\n {\n for (const callback of this.events[eventName]) {\n callback(...args);\n }\n }\n }\n public on(eventName :string, callback:Function)\n {\n if(this.events[eventName])\n {\n this.events[eventName].push(callback)\n }else{\n this.events[eventName] = [callback];\n }\n }\n public activeScope : boolean = false;\n scope(f:Function)\n {\n if(this.activeScope)\n {\n f()\n }else{\n this.on('scope', f)\n }\n }\n}","import MWSE from \"frontend\";\n\nexport class IPPressure\n{\n public mwse : MWSE;\n public APNumber? : number;\n public APShortCode? : string;\n public APIPAddress? : string;\n constructor(mwse : MWSE){\n this.mwse = mwse;\n };\n public async allocAPIPAddress()\n {\n let {status,ip} = await this.mwse.EventPooling.request({\n type: 'alloc/APIPAddress'\n }) as {\n status:\"fail\"|\"success\",\n ip?:string\n };\n if(status == 'success')\n {\n this.APIPAddress = ip;\n return ip;\n }else{\n throw new Error(\"Error Allocated Access Point IP Address\");\n }\n }\n public async allocAPNumber()\n {\n let {status,number} = await this.mwse.EventPooling.request({\n type: 'alloc/APNumber'\n }) as {\n status:\"fail\"|\"success\",\n number?:number\n };\n if(status == 'success')\n {\n this.APNumber = number;\n return number;\n }else{\n throw new Error(\"Error Allocated Access Point Number\");\n }\n }\n public async allocAPShortCode()\n {\n let {status,code} = await this.mwse.EventPooling.request({\n type: 'alloc/APShortCode'\n }) as {\n status:\"fail\"|\"success\",\n code?:string\n };\n if(status == 'success')\n {\n this.APShortCode = code;\n return code;\n }else{\n throw new Error(\"Error Allocated Access Point Short Code\");\n }\n }\n public async reallocAPIPAddress()\n {\n let {status,ip} = await this.mwse.EventPooling.request({\n type: 'realloc/APIPAddress'\n }) as {\n status:\"fail\"|\"success\",\n ip?:string\n };\n if(status == 'success')\n {\n this.APIPAddress = ip;\n return ip;\n }else{\n throw new Error(\"Error Reallocated Access Point IP Address\");\n }\n }\n public async reallocAPNumber()\n {\n let {status,number} = await this.mwse.EventPooling.request({\n type: 'realloc/APNumber'\n }) as {\n status:\"fail\"|\"success\",\n number?:number\n };\n if(status == 'success')\n {\n this.APNumber = number;\n return number;\n }else{\n throw new Error(\"Error Reallocated Access Point Number\");\n }\n }\n public async reallocAPShortCode()\n {\n let {status,code} = await this.mwse.EventPooling.request({\n type: 'realloc/APShortCode'\n }) as {\n status:\"fail\"|\"success\",\n code?:string\n };\n if(status == 'success')\n {\n this.APShortCode = code;\n return code;\n }else{\n throw new Error(\"Error Reallocated Access Point Short Code\");\n }\n }\n public async releaseAPIPAddress()\n {\n let {status} = await this.mwse.EventPooling.request({\n type: 'release/APIPAddress'\n }) as {\n status:\"fail\"|\"success\",\n };\n if(status == 'success')\n {\n this.APIPAddress = undefined;\n }else{\n throw new Error(\"Error release Access Point IP Address\");\n }\n }\n public async releaseAPNumber()\n {\n let {status} = await this.mwse.EventPooling.request({\n type: 'release/APNumber'\n }) as {\n status:\"fail\"|\"success\",\n };\n if(status == 'success')\n {\n this.APNumber = undefined;\n }else{\n throw new Error(\"Error release Access Point Number\");\n }\n }\n public async releaseAPShortCode()\n {\n let {status} = await this.mwse.EventPooling.request({\n type: 'release/APShortCode'\n }) as {\n status:string\n };\n if(status == 'success')\n {\n this.APShortCode = undefined;\n }else{\n throw new Error(\"Error release Access Point Short Code\");\n }\n }\n public async queryAPIPAddress(ip:string)\n {\n let {status,socket} = await this.mwse.EventPooling.request({\n type: 'whois/APIPAddress',\n whois: ip\n }) as {\n status:\"fail\"|\"success\",\n socket?:string\n };\n if(status == \"success\")\n {\n return socket;\n }else{\n return null;\n }\n }\n public async queryAPNumber(number:number)\n {\n let {status,socket} = await this.mwse.EventPooling.request({\n type: 'whois/APNumber',\n whois: number\n }) as {\n status:\"fail\"|\"success\",\n socket?:string\n };\n if(status == \"success\")\n {\n return socket;\n }else{\n return null;\n }\n }\n public async queryAPShortCode(code:string)\n {\n let {status,socket} = await this.mwse.EventPooling.request({\n type: 'whois/APShortCode',\n whois: code\n }) as {\n status:\"fail\"|\"success\",\n socket?:string\n };\n if(status == \"success\")\n {\n return socket;\n }else{\n return null;\n }\n }\n}","import EventTarget from \"./EventTarget\";\nimport { PeerInfo } from \"./PeerInfo\";\nimport WebRTC from \"./WebRTC\";\nimport MWSE from \"./index\";\n\ninterface IPeerOptions{\n\n};\n\nenum IMessageSymbase\n{\n PayloadMessagePack = -12873.54,\n PayloadRTCBasePack = -12884.54\n}\n\n\nexport default class Peer extends EventTarget\n{\n public mwse : MWSE;\n public options : IPeerOptions = {};\n public socketId? : string;\n public selfSocket : boolean = false;\n public active : boolean = false;\n public info : PeerInfo;\n public rtc? : WebRTC;\n public peerConnection : boolean = false;\n public primaryChannel : \"websocket\" | \"datachannel\" = \"datachannel\";\n constructor(wsts:MWSE){\n super();\n this.mwse = wsts;\n this.info = new PeerInfo(this);\n this.on('updateinfo',(name:string,value:any) => {\n this.info.info[name] = value;\n })\n this.on('pack',(data:{type?:string,action?:IMessageSymbase,payload?:any}) => {\n if(data.type == ':rtcbase_pack:')\n {\n if(this.rtc)\n {\n return this.rtc.emit(\"input\", data.payload)\n }\n return console.warn(\"Not active rtc but recaived rtc packs\")\n };\n this.emit(\"message\", data);\n });\n }\n public createRTC(rtcConfig?: RTCConfiguration | undefined, rtcServers?: RTCIceServer[] | undefined) : WebRTC\n {\n this.rtc = new WebRTC(rtcConfig,rtcServers);\n this.rtc.peer = this;\n this.rtc.on(\"connected\", () => {\n this.peerConnection = true;\n });\n this.rtc.on('disconnected', () => {\n this.peerConnection = false;\n })\n this.rtc.on(\"output\",(payload:object) => {\n this.send({\n type: ':rtcbase_pack:',\n payload: payload\n })\n });\n this.rtc.on(\"message\",(payload:object) => {\n this.emit(\"pack\",payload);\n });\n return this.rtc;\n }\n public setPeerOptions(options: string | IPeerOptions){\n if(typeof options == \"string\")\n {\n this.setSocketId(options)\n }else{\n this.options = options;\n }\n }\n public setSocketId(uuid: string){\n this.socketId = uuid;\n }\n async metadata() : Promise\n {\n if(this.socketId == 'me')\n {\n let result = await this.mwse.EventPooling.request({\n type:'my/socketid'\n });\n this.selfSocket = true;\n this.active ||= true;\n this.socketId = result;\n this.emit('scope');\n this.activeScope = true;\n return result;\n }\n };\n \n async request(pack:any){\n if(this.active)\n {\n return await this.mwse.request(this.socketId as string, pack);\n }\n };\n equalTo(peer : Peer | {socketId: string})\n {\n return this.socketId == peer.socketId;\n }\n async isReachable()\n {\n return await this.mwse.EventPooling.request({\n type:'is/reachable',\n to: this.socketId\n });\n }\n async enablePairAuth(){\n await this.mwse.EventPooling.request({\n type:'auth/pair-system',\n value: 'everybody'\n });\n }\n async disablePairAuth(){\n await this.mwse.EventPooling.request({\n type:'auth/pair-system',\n value: 'disable'\n });\n }\n async requestPair()\n {\n let {message,status} = await this.mwse.EventPooling.request({\n type:'request/pair',\n to: this.socketId\n });\n if(\n message == \"ALREADY-PAIRED\" ||\n message == \"ALREADY-REQUESTED\"\n )\n {\n console.warn(\"Already paired or pair requested\")\n };\n if(status == \"fail\")\n {\n console.error(\"Request Pair Error\",status, message);\n return false;\n }\n return true;\n }\n async endPair()\n {\n await this.mwse.EventPooling.request({\n type:'end/pair',\n to: this.socketId\n });\n this.forget();\n }\n async acceptPair()\n {\n let {message,status} = await this.mwse.EventPooling.request({\n type:'accept/pair',\n to: this.socketId\n });\n if(status == \"fail\")\n {\n console.error(\"Pair Error\",status, message);\n return false;\n }\n return true;\n }\n async rejectPair()\n {\n let {message,status} = await this.mwse.EventPooling.request({\n type:'reject/pair',\n to: this.socketId\n });\n if(status == \"fail\")\n {\n console.error(\"Pair Error\",status, message);\n return false;\n }\n return true;\n }\n async getPairedList() : Promise\n {\n let {value} = await this.mwse.EventPooling.request({\n type:'pair/list',\n to: this.socketId\n });\n return value;\n }\n async send(pack: any){\n let isOpenedP2P = this.peerConnection && this.rtc?.active;\n let isOpenedServer = this.mwse.server.connected;\n let sendChannel : \"websocket\" | \"datachannel\";\n if(isOpenedP2P && isOpenedServer)\n {\n if(this.primaryChannel == \"websocket\")\n {\n sendChannel = \"websocket\"\n }else\n {\n sendChannel = \"datachannel\"\n }\n }else if(isOpenedServer){\n sendChannel = \"websocket\"\n }else{\n sendChannel = \"datachannel\"\n }\n\n if(sendChannel == \"websocket\")\n {\n await this.mwse.EventPooling.request({\n type:'pack/to',\n pack,\n to: this.socketId\n });\n }else{\n this.rtc?.sendMessage(pack)\n }\n }\n async forget(){\n this.mwse.peers.delete(this.socketId as string);\n this.mwse.pairs.delete(this.socketId as string);\n }\n} ","import Peer from \"./Peer\";\n\nexport class PeerInfo\n{\n public peer : Peer;\n public info : {[key:string]: any} = {};\n constructor(mwse : Peer){\n this.peer = mwse;\n };\n public async fetch(name?:string)\n {\n if(name)\n {\n let rinfo = await this.peer.mwse.EventPooling.request(({\n type: \"peer/info\",\n peer: this.peer.socketId,\n name\n }));\n if(rinfo.status == \"success\")\n {\n this.info = rinfo.info;\n }else console.warn(rinfo.message);\n }else{\n let rinfo = await this.peer.mwse.EventPooling.request(({\n type: \"peer/info\",\n peer: this.peer.socketId\n }));\n if(rinfo.status == \"success\")\n {\n this.info = rinfo.info;\n }else console.warn(rinfo.message);\n };\n return this.info;\n }\n public set(name: string, value: string | number)\n {\n this.info[name] = value;\n this.peer.mwse.WSTSProtocol.SendOnly({\n type: \"auth/info\",\n name,\n value\n });\n }\n public get(name?:string)\n {\n return name ? this.info[name] : this.info;\n }\n}","import P2PFileSender from \"./P2PFileSender\";\nimport Peer from \"./Peer\";\nimport \"webrtc-adapter\";\ninterface TransferStreamInfo\n{\n senders : RTCRtpSender[];\n recaivers : RTCRtpReceiver[];\n stream:MediaStream | undefined;\n id:string;\n name:string;\n}\n\nexport default class WebRTC\n{\n public static channels : Map = new Map();\n public static requireGC : boolean = false;\n public id : any;\n public active : boolean = false;\n public connectionStatus : \"closed\" | \"connected\" | \"connecting\" | \"disconnected\" | \"failed\" | \"new\" = \"new\";\n public iceStatus : \"checking\" | \"closed\" | \"completed\" | \"connected\" | \"disconnected\" | \"failed\" | \"new\" = \"new\";\n public gatheringStatus : \"complete\" | \"gathering\" | \"new\" = \"new\";\n public signalingStatus : \"\" | \"closed\" | \"have-local-offer\" | \"have-local-pranswer\" | \"have-remote-offer\" | \"have-remote-pranswer\" | \"stable\" = \"\"\n public rtc! : RTCPeerConnection;\n public recaivingStream : Map = new Map();\n public sendingStream : Map = new Map();\n public events : { [eventname:string]: Function[] } = {};\n public channel : RTCDataChannel | undefined;\n\n public static defaultRTCConfig : RTCConfiguration = {\n iceCandidatePoolSize: 0,\n iceTransportPolicy:\"all\",\n rtcpMuxPolicy:\"require\",\n };\n\n\n public static defaultICEServers : RTCIceServer[] = [{\n urls: \"stun:stun.l.google.com:19302\"\n },{\n urls: \"stun:stun1.l.google.com:19302\"\n },{\n urls: \"stun:stun2.l.google.com:19302\"\n },{\n urls: \"stun:stun3.l.google.com:19302\"\n },{\n urls: \"stun:stun4.l.google.com:19302\"\n }];\n\n public peer? : Peer;\n\n public FileTransportChannel? : P2PFileSender;\n\n constructor(\n rtcConfig?: RTCConfiguration,\n rtcServers?: RTCIceServer[]\n )\n {\n let config : any = {};\n\n if(rtcConfig)\n {\n Object.assign(\n config,\n WebRTC.defaultRTCConfig,\n rtcConfig\n )\n }else{\n Object.assign(\n config,\n WebRTC.defaultRTCConfig\n )\n }\n\n config.iceServers = rtcServers || WebRTC.defaultICEServers;\n\n this.rtc = new RTCPeerConnection(config as RTCConfiguration);\n this.rtc.addEventListener(\"connectionstatechange\",()=>{\n this.eventConnectionState();\n })\n this.rtc.addEventListener(\"icecandidate\",(...args)=>{\n this.eventIcecandidate(...args);\n })\n this.rtc.addEventListener(\"iceconnectionstatechange\",()=>{\n this.eventICEConnectionState();\n })\n this.rtc.addEventListener(\"icegatheringstatechange\",()=>{\n this.eventICEGatherinState();\n })\n this.rtc.addEventListener(\"negotiationneeded\",()=>{\n this.eventNogationNeeded();\n })\n this.rtc.addEventListener(\"signalingstatechange\",()=>{\n this.eventSignalingState();\n })\n this.rtc.addEventListener(\"track\",(...args)=>{\n this.eventTrack(...args);\n })\n this.rtc.addEventListener(\"datachannel\",(...args)=>{\n this.eventDatachannel(...args);\n })\n this.on('input',async (data:{[key:string]:any})=>{\n switch(data.type)\n {\n case \"icecandidate\":{\n await this.rtc.addIceCandidate(new RTCIceCandidate(data.value));\n break;\n }\n case \"offer\":{\n await this.rtc.setRemoteDescription(new RTCSessionDescription(data.value));\n let answer = await this.rtc.createAnswer({\n offerToReceiveAudio: true,\n offerToReceiveVideo: true\n })\n await this.rtc.setLocalDescription(answer);\n this.send({\n type: 'answer',\n value: answer\n });\n break;\n }\n case \"answer\":{\n await this.rtc.setRemoteDescription(new RTCSessionDescription(data.value))\n break;\n }\n case \"streamInfo\":{\n let {id,value} = data;\n let streamInfo = this.recaivingStream.get(id);\n if(!streamInfo)\n {\n this.recaivingStream.set(id,value as TransferStreamInfo);\n }else{\n this.recaivingStream.set(id,{\n ...streamInfo,\n ...value\n } as TransferStreamInfo);\n }\n this.send({\n type:'streamAccept',\n id\n })\n break;\n }\n case \"streamRemoved\":{\n let {id} = data;\n this.emit('stream:stopped', this.recaivingStream.get(id));\n this.sendingStream.delete(id);\n break;\n }\n case \"streamAccept\":{\n let {id} = data;\n let sendingStream = this.sendingStream.get(id) as TransferStreamInfo;\n let senders = [];\n if(sendingStream && sendingStream.stream)\n {\n for (const track of sendingStream.stream.getTracks()) {\n senders.push(this.rtc.addTrack(track, sendingStream.stream));\n };\n sendingStream.senders = senders;\n }\n break;\n }\n case \"message\":{\n this.emit('message', data.payload);\n break;\n }\n }\n })\n }\n public addEventListener(event:string,callback: Function){\n (this.events[event] || (this.events[event]=[])).push(callback);\n };\n public on(event:string,callback: Function){\n this.addEventListener(event, callback)\n };\n public async dispatch(event:string,...args:any[]) : Promise {\n if(this.events[event])\n {\n for (const callback of this.events[event])\n {\n await callback(...args)\n }\n }\n }\n public async emit(event:string,...args:any[]) : Promise {\n await this.dispatch(event, ...args)\n }\n public connect()\n {\n if(!this.channel)\n {\n this.createDefaultDataChannel();\n }\n }\n public sendMessage(data: any)\n {\n this.send({\n type: 'message',\n payload: data\n });\n }\n public createDefaultDataChannel()\n {\n let dt = this.rtc.createDataChannel(':default:',{\n ordered: true\n });\n dt.addEventListener(\"open\",()=>{\n this.channel = dt;\n WebRTC.channels.set(this.id, this);\n this.active = true;\n });\n dt.addEventListener(\"message\",({data})=>{\n let pack = JSON.parse(data);\n this.emit('input', pack);\n })\n dt.addEventListener(\"close\",()=>{\n this.channel = undefined;\n this.active = false;\n })\n }\n public destroy()\n {\n this.active = false;\n if(this.channel)\n {\n this.channel.close();\n this.channel = undefined;\n }\n if(this.rtc)\n {\n this.rtc.close();\n //this.rtc = undefined;\n };\n this.emit('disconnected');\n WebRTC.channels.delete(this.id);\n }\n public eventDatachannel(event: RTCDataChannelEvent)\n {\n if(event.channel.label == ':default:'){\n WebRTC.channels.set(this.id, this);\n this.channel = event.channel;\n this.active = true;\n event.channel.addEventListener(\"message\",({data})=>{\n let pack = JSON.parse(data);\n this.emit('input', pack);\n })\n event.channel.addEventListener(\"close\",()=>{\n this.channel = undefined;\n WebRTC.channels.delete(this.id);\n WebRTC.requireGC = true;\n })\n }else{\n this.emit('datachannel', event.channel);\n }\n }\n public send(data:object)\n {\n if(this.channel?.readyState == \"open\")\n {\n this.channel.send(JSON.stringify(data));\n }else{\n this.emit('output', data);\n }\n }\n public eventConnectionState()\n {\n this.connectionStatus = this.rtc.connectionState;\n if(this.connectionStatus == 'connected')\n {\n if(this.active == false)\n {\n this.emit('connected');\n }\n };\n if(this.connectionStatus == 'failed' || this.connectionStatus == \"disconnected\" || this.connectionStatus == \"closed\")\n {\n if(this.active)\n {\n this.destroy();\n }\n }\n }\n public eventIcecandidate(event: RTCPeerConnectionIceEvent)\n {\n if(event.candidate)\n {\n this.send({\n type:'icecandidate',\n value: event.candidate\n })\n }\n }\n public eventICEConnectionState()\n {\n this.iceStatus = this.rtc.iceConnectionState;\n }\n public eventICEGatherinState()\n {\n this.gatheringStatus = this.rtc.iceGatheringState;\n }\n public async eventNogationNeeded()\n {\n let offer = await this.rtc.createOffer({\n iceRestart: true,\n offerToReceiveAudio: true,\n offerToReceiveVideo: true\n });\n await this.rtc.setLocalDescription(offer);\n this.send({\n type: 'offer',\n value: offer\n });\n }\n public eventSignalingState()\n {\n this.signalingStatus = this.rtc.signalingState;\n }\n public eventTrack(event: RTCTrackEvent)\n {\n let rtpRecaiver = event.receiver;\n if(event.streams.length)\n {\n for (const stream of event.streams) {\n let streamInfo = this.recaivingStream.get(stream.id) as TransferStreamInfo;\n (streamInfo.recaivers || (streamInfo.recaivers = [])).push(rtpRecaiver);\n if((this.recaivingStream.get(stream.id) as {stream : MediaStream | undefined}).stream == null)\n {\n streamInfo.stream = stream;\n this.emit('stream:added', this.recaivingStream.get(stream.id));\n }else{\n streamInfo.stream = stream;\n }\n }\n }\n }\n public sendStream(stream:MediaStream,name:string,info:{[key:string]:any}){\n this.send({\n type: 'streamInfo',\n id: stream.id,\n value: {\n ...info,\n name: name\n }\n });\n this.sendingStream.set(stream.id,{\n ...info,\n id:stream.id,\n name: name,\n stream\n } as TransferStreamInfo);\n };\n public stopStream(_stream:MediaStream){\n if(this.connectionStatus != 'connected'){\n return\n }\n if(this.sendingStream.has(_stream.id))\n {\n let {stream} = this.sendingStream.get(_stream.id) as {stream:MediaStream};\n \n for (const track of stream.getTracks()) {\n for (const RTCPSender of this.rtc.getSenders()) {\n if(RTCPSender.track?.id == track.id)\n {\n this.rtc.removeTrack(RTCPSender);\n }\n }\n }\n \n this.send({\n type: 'streamRemoved',\n id: stream.id\n });\n this.sendingStream.delete(_stream.id)\n }\n }\n public stopAllStreams()\n {\n if(this.connectionStatus != 'connected'){\n return\n }\n for (const [, {stream}] of this.sendingStream) {\n if(stream == undefined)\n {\n continue;\n }\n for (const track of stream.getTracks()) {\n for (const RTCPSender of this.rtc.getSenders()) {\n if(RTCPSender.track?.id == track.id)\n {\n this.rtc.removeTrack(RTCPSender);\n }\n }\n }\n this.send({\n type: 'streamRemoved',\n id: stream.id\n });\n };\n \n this.sendingStream.clear();\n }\n public async SendFile(file:File, meta: object)\n {\n if(!this.peer)\n {\n throw new Error(\"Peer is not ready\");\n }\n this.FileTransportChannel = new P2PFileSender(this, this.peer);\n\n await this.FileTransportChannel.SendFile(file, meta);\n }\n public async RecaiveFile(\n chnlCount:number,\n filemeta: {\n name: string;\n type: string;\n },\n totalSize: number\n ) : Promise\n {\n if(!this.peer)\n {\n throw new Error(\"Peer is not ready\");\n }\n this.FileTransportChannel = new P2PFileSender(this, this.peer);\n\n return await new Promise(recaivedFile => {\n if(this.FileTransportChannel)\n {\n this.FileTransportChannel.RecaiveFile(\n this.rtc,\n filemeta,\n chnlCount,\n totalSize,\n (file: File) => {\n recaivedFile(file)\n }\n );\n }\n })\n }\n}\n\nWebRTC.requireGC = false;\nsetInterval(()=>{\n if(WebRTC.requireGC == false) return;\n let img = document.createElement(\"img\");\n img.src = window.URL.createObjectURL(new Blob([new ArrayBuffer(5e+7)]));\n img.onerror = function() {\n window.URL.revokeObjectURL(this.src);\n };\n WebRTC.requireGC = false;\n}, 3000)\n\ndeclare global {\n interface MediaStream {\n senders : RTCRtpSender[];\n }\n}","import \"webrtc-adapter\";\nimport WebRTC from \"./WebRTC\";\nimport Peer from \"./Peer\";\n\n\n\nexport default class P2PFileSender\n{\n public rtc : RTCPeerConnection;\n public peer : Peer;\n public webrtc : WebRTC;\n\n public totalSize : number = 0;\n public isReady : boolean = false;\n public isStarted : boolean = false;\n public isSending : boolean = false;\n public isRecaiving : boolean = false;\n public processedSize : number = 0;\n public recaivedFile? : File;\n\n public bufferSizePerChannel : number = 10e6;\n public bufferSizePerPack : number = 10e3;\n public safeBufferSizePerPack : number = 10e3 - 1;\n\n public constructor(webrtc : WebRTC, peer : Peer)\n {\n this.webrtc = webrtc;\n this.rtc = webrtc.rtc;\n this.peer = peer;\n }\n public async RecaiveFile(\n _rtc: RTCPeerConnection,\n fileMetadata: {name:string, type:string},\n channelCount: number,\n _totalSize: number,\n onEnded: Function\n )\n {\n //let totals = {};\n // let index = 0;\n /*setChannelStatus(Array.from({length:channelCount}).map((e, index) => {\n return {\n name: `${index+1}. Kanal`,\n current: 0,\n currentTotal: 0,\n total: 0\n }\n }));*/\n let parts : Blob[] = [];\n this.webrtc.on('datachannel',(datachannel:RTCDataChannel) => {\n //let channelIndex = index++;\n let current = 0;\n let totalSize = 0;\n let currentPart = 0;\n let bufferAmount : ArrayBuffer[] = [];\n datachannel.onmessage = function({data}){\n if(totalSize == 0)\n {\n let {\n size,\n part,\n } = JSON.parse(data);\n totalSize = size;\n currentPart = part;\n /*updateChannelStatus(channelIndex, n => {\n return {\n ...n,\n total: totalSize,\n current: 0\n }\n });*/\n datachannel.send(\"READY\");\n }else{\n current += data.byteLength;\n bufferAmount.push(data);\n /*updateChannelStatus(channelIndex, n => {\n return {\n ...n,\n current: data.byteLength + n.current,\n currentTotal: data.byteLength + n.currentTotal,\n }\n });\n setProcessedSize(n => n + data.byteLength);*/\n if(current == totalSize)\n {\n parts[currentPart] = new Blob(bufferAmount);\n bufferAmount = []; \n //totals[datachannel.label] += totalSize;\n totalSize = 0;\n currentPart = 0;\n current = 0;\n datachannel.send(\"TOTAL_RECAIVED\");\n }\n }\n };\n datachannel.onclose = () => {\n channelCount--;\n if(channelCount == 0)\n {\n let file = new File(parts, fileMetadata.name, {\n type: fileMetadata.type,\n lastModified: +new Date\n });\n onEnded(file);\n }\n };\n })\n }\n public async SendFile(\n file: File,\n metadata: object\n )\n {\n this.isSending = true;\n this.isStarted = true;\n\n\n let buffer = await file.arrayBuffer();\n let partCount = Math.ceil(buffer.byteLength / 10e6);\n let channelCount = Math.min(5, partCount);\n\n if(this.webrtc.iceStatus != \"connected\")\n {\n throw new Error(\"WebRTC is a not ready\")\n }\n\n this.peer.send({\n type: 'file',\n name: file.name,\n size: file.size,\n mimetype: file.type,\n partCount,\n channelCount,\n metadata: metadata\n });\n\n let channels : RTCDataChannel[] = [];\n\n for(let channelIndex = 0; channelIndex < channelCount; channelIndex++)\n {\n let channel = this.rtc.createDataChannel(\"\\\\?\\\\file_\" + channelIndex);\n channel.binaryType = \"arraybuffer\";\n await new Promise(ok => {\n channel.onopen = () => {\n ok(void 0);\n }\n });\n channels.push(channel);\n };\n\n let currentPart = 0;\n let next = () => {\n if(currentPart < partCount)\n {\n let bufferPart = buffer.slice(currentPart * 10e6, currentPart * 10e6 + 10e6)\n currentPart++;\n return [bufferPart, currentPart - 1];\n };\n return [false,0];\n };\n let spyChannelIndex = channels.length;\n await new Promise(ok => {\n for (let channelIndex = 0; channelIndex < channels.length; channelIndex++)\n {\n this.sendPartition(\n channels[channelIndex],\n next,\n channelIndex,\n () => {\n spyChannelIndex--;\n if(spyChannelIndex == 0)\n {\n this.isSending = false;\n this.isStarted = false;\n ok(undefined)\n }\n }\n );\n }\n })\n }\n protected sendPartition(\n channel: RTCDataChannel,\n nextblob10mb: () => (number | ArrayBuffer)[] | (number | boolean)[],\n _channelIndex: number,\n onEnded: Function\n )\n {\n let [currentBuffer,currentPartition] = nextblob10mb();\n let currentPart = 0;\n let next = () => {\n if(!(currentBuffer instanceof ArrayBuffer))\n {\n return;\n }\n let bufferPart = currentBuffer.slice(currentPart * 16e3, currentPart * 16e3 + 16e3)\n currentPart++;\n if(bufferPart.byteLength != 0)\n {\n /*\n updateChannelStatus(channelIndex, n => {\n return {\n ...n,\n current: bufferPart.byteLength + n.current,\n currentTotal: bufferPart.byteLength + n.currentTotal\n }\n });\n setProcessedSize(n => n + bufferPart.byteLength);\n */\n return bufferPart\n }\n };\n channel.addEventListener(\"message\",({data}) => {\n if(data == \"READY\")\n {\n this.sendFileChannel(channel, next)\n }\n if(data == \"TOTAL_RECAIVED\")\n {\n [currentBuffer,currentPartition] = nextblob10mb();\n currentPart = 0;\n if(currentBuffer != false)\n {\n /*updateChannelStatus(channelIndex, n => {\n return {\n ...n,\n total: currentBuffer.byteLength,\n current: 0,\n }\n });*/\n channel.send(JSON.stringify({\n size: (currentBuffer as ArrayBuffer).byteLength,\n part: currentPartition\n }))\n }else{\n channel.close();\n onEnded();\n }\n }\n });\n channel.send(JSON.stringify({\n size: (currentBuffer as ArrayBuffer).byteLength,\n part: currentPartition\n }))\n }\n protected sendFileChannel(\n channel: RTCDataChannel,\n getNextBlob: () => ArrayBuffer | undefined\n )\n {\n channel.addEventListener(\"bufferedamountlow\",function(){\n let buffer = getNextBlob();\n if(buffer)\n {\n channel.send(buffer);\n }\n });\n channel.bufferedAmountLowThreshold = 16e3 - 1;\n let c = getNextBlob();\n c && channel.send(c);\n }\n};","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n\n'use strict';\n\nimport {adapterFactory} from './adapter_factory.js';\n\nconst adapter =\n adapterFactory({window: typeof window === 'undefined' ? undefined : window});\nexport default adapter;\n","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\nimport * as utils from './utils';\n\n// Browser shims.\nimport * as chromeShim from './chrome/chrome_shim';\nimport * as firefoxShim from './firefox/firefox_shim';\nimport * as safariShim from './safari/safari_shim';\nimport * as commonShim from './common_shim';\nimport * as sdp from 'sdp';\n\n// Shimming starts here.\nexport function adapterFactory({window} = {}, options = {\n shimChrome: true,\n shimFirefox: true,\n shimSafari: true,\n}) {\n // Utils.\n const logging = utils.log;\n const browserDetails = utils.detectBrowser(window);\n\n const adapter = {\n browserDetails,\n commonShim,\n extractVersion: utils.extractVersion,\n disableLog: utils.disableLog,\n disableWarnings: utils.disableWarnings,\n // Expose sdp as a convenience. For production apps include directly.\n sdp,\n };\n\n // Shim browser if found.\n switch (browserDetails.browser) {\n case 'chrome':\n if (!chromeShim || !chromeShim.shimPeerConnection ||\n !options.shimChrome) {\n logging('Chrome shim is not included in this adapter release.');\n return adapter;\n }\n if (browserDetails.version === null) {\n logging('Chrome shim can not determine version, not shimming.');\n return adapter;\n }\n logging('adapter.js shimming chrome.');\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = chromeShim;\n\n // Must be called before shimPeerConnection.\n commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails);\n commonShim.shimParameterlessSetLocalDescription(window, browserDetails);\n\n chromeShim.shimGetUserMedia(window, browserDetails);\n chromeShim.shimMediaStream(window, browserDetails);\n chromeShim.shimPeerConnection(window, browserDetails);\n chromeShim.shimOnTrack(window, browserDetails);\n chromeShim.shimAddTrackRemoveTrack(window, browserDetails);\n chromeShim.shimGetSendersWithDtmf(window, browserDetails);\n chromeShim.shimGetStats(window, browserDetails);\n chromeShim.shimSenderReceiverGetStats(window, browserDetails);\n chromeShim.fixNegotiationNeeded(window, browserDetails);\n\n commonShim.shimRTCIceCandidate(window, browserDetails);\n commonShim.shimRTCIceCandidateRelayProtocol(window, browserDetails);\n commonShim.shimConnectionState(window, browserDetails);\n commonShim.shimMaxMessageSize(window, browserDetails);\n commonShim.shimSendThrowTypeError(window, browserDetails);\n commonShim.removeExtmapAllowMixed(window, browserDetails);\n break;\n case 'firefox':\n if (!firefoxShim || !firefoxShim.shimPeerConnection ||\n !options.shimFirefox) {\n logging('Firefox shim is not included in this adapter release.');\n return adapter;\n }\n logging('adapter.js shimming firefox.');\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = firefoxShim;\n\n // Must be called before shimPeerConnection.\n commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails);\n commonShim.shimParameterlessSetLocalDescription(window, browserDetails);\n\n firefoxShim.shimGetUserMedia(window, browserDetails);\n firefoxShim.shimPeerConnection(window, browserDetails);\n firefoxShim.shimOnTrack(window, browserDetails);\n firefoxShim.shimRemoveStream(window, browserDetails);\n firefoxShim.shimSenderGetStats(window, browserDetails);\n firefoxShim.shimReceiverGetStats(window, browserDetails);\n firefoxShim.shimRTCDataChannel(window, browserDetails);\n firefoxShim.shimAddTransceiver(window, browserDetails);\n firefoxShim.shimGetParameters(window, browserDetails);\n firefoxShim.shimCreateOffer(window, browserDetails);\n firefoxShim.shimCreateAnswer(window, browserDetails);\n\n commonShim.shimRTCIceCandidate(window, browserDetails);\n commonShim.shimConnectionState(window, browserDetails);\n commonShim.shimMaxMessageSize(window, browserDetails);\n commonShim.shimSendThrowTypeError(window, browserDetails);\n break;\n case 'safari':\n if (!safariShim || !options.shimSafari) {\n logging('Safari shim is not included in this adapter release.');\n return adapter;\n }\n logging('adapter.js shimming safari.');\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = safariShim;\n\n // Must be called before shimCallbackAPI.\n commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails);\n commonShim.shimParameterlessSetLocalDescription(window, browserDetails);\n\n safariShim.shimRTCIceServerUrls(window, browserDetails);\n safariShim.shimCreateOfferLegacy(window, browserDetails);\n safariShim.shimCallbacksAPI(window, browserDetails);\n safariShim.shimLocalStreamsAPI(window, browserDetails);\n safariShim.shimRemoteStreamsAPI(window, browserDetails);\n safariShim.shimTrackEventTransceiver(window, browserDetails);\n safariShim.shimGetUserMedia(window, browserDetails);\n safariShim.shimAudioContext(window, browserDetails);\n\n commonShim.shimRTCIceCandidate(window, browserDetails);\n commonShim.shimRTCIceCandidateRelayProtocol(window, browserDetails);\n commonShim.shimMaxMessageSize(window, browserDetails);\n commonShim.shimSendThrowTypeError(window, browserDetails);\n commonShim.removeExtmapAllowMixed(window, browserDetails);\n break;\n default:\n logging('Unsupported browser!');\n break;\n }\n\n return adapter;\n}\n","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\n\nlet logDisabled_ = true;\nlet deprecationWarnings_ = true;\n\n/**\n * Extract browser version out of the provided user agent string.\n *\n * @param {!string} uastring userAgent string.\n * @param {!string} expr Regular expression used as match criteria.\n * @param {!number} pos position in the version string to be returned.\n * @return {!number} browser version.\n */\nexport function extractVersion(uastring, expr, pos) {\n const match = uastring.match(expr);\n return match && match.length >= pos && parseInt(match[pos], 10);\n}\n\n// Wraps the peerconnection event eventNameToWrap in a function\n// which returns the modified event object (or false to prevent\n// the event).\nexport function wrapPeerConnectionEvent(window, eventNameToWrap, wrapper) {\n if (!window.RTCPeerConnection) {\n return;\n }\n const proto = window.RTCPeerConnection.prototype;\n const nativeAddEventListener = proto.addEventListener;\n proto.addEventListener = function(nativeEventName, cb) {\n if (nativeEventName !== eventNameToWrap) {\n return nativeAddEventListener.apply(this, arguments);\n }\n const wrappedCallback = (e) => {\n const modifiedEvent = wrapper(e);\n if (modifiedEvent) {\n if (cb.handleEvent) {\n cb.handleEvent(modifiedEvent);\n } else {\n cb(modifiedEvent);\n }\n }\n };\n this._eventMap = this._eventMap || {};\n if (!this._eventMap[eventNameToWrap]) {\n this._eventMap[eventNameToWrap] = new Map();\n }\n this._eventMap[eventNameToWrap].set(cb, wrappedCallback);\n return nativeAddEventListener.apply(this, [nativeEventName,\n wrappedCallback]);\n };\n\n const nativeRemoveEventListener = proto.removeEventListener;\n proto.removeEventListener = function(nativeEventName, cb) {\n if (nativeEventName !== eventNameToWrap || !this._eventMap\n || !this._eventMap[eventNameToWrap]) {\n return nativeRemoveEventListener.apply(this, arguments);\n }\n if (!this._eventMap[eventNameToWrap].has(cb)) {\n return nativeRemoveEventListener.apply(this, arguments);\n }\n const unwrappedCb = this._eventMap[eventNameToWrap].get(cb);\n this._eventMap[eventNameToWrap].delete(cb);\n if (this._eventMap[eventNameToWrap].size === 0) {\n delete this._eventMap[eventNameToWrap];\n }\n if (Object.keys(this._eventMap).length === 0) {\n delete this._eventMap;\n }\n return nativeRemoveEventListener.apply(this, [nativeEventName,\n unwrappedCb]);\n };\n\n Object.defineProperty(proto, 'on' + eventNameToWrap, {\n get() {\n return this['_on' + eventNameToWrap];\n },\n set(cb) {\n if (this['_on' + eventNameToWrap]) {\n this.removeEventListener(eventNameToWrap,\n this['_on' + eventNameToWrap]);\n delete this['_on' + eventNameToWrap];\n }\n if (cb) {\n this.addEventListener(eventNameToWrap,\n this['_on' + eventNameToWrap] = cb);\n }\n },\n enumerable: true,\n configurable: true\n });\n}\n\nexport function disableLog(bool) {\n if (typeof bool !== 'boolean') {\n return new Error('Argument type: ' + typeof bool +\n '. Please use a boolean.');\n }\n logDisabled_ = bool;\n return (bool) ? 'adapter.js logging disabled' :\n 'adapter.js logging enabled';\n}\n\n/**\n * Disable or enable deprecation warnings\n * @param {!boolean} bool set to true to disable warnings.\n */\nexport function disableWarnings(bool) {\n if (typeof bool !== 'boolean') {\n return new Error('Argument type: ' + typeof bool +\n '. Please use a boolean.');\n }\n deprecationWarnings_ = !bool;\n return 'adapter.js deprecation warnings ' + (bool ? 'disabled' : 'enabled');\n}\n\nexport function log() {\n if (typeof window === 'object') {\n if (logDisabled_) {\n return;\n }\n if (typeof console !== 'undefined' && typeof console.log === 'function') {\n console.log.apply(console, arguments);\n }\n }\n}\n\n/**\n * Shows a deprecation warning suggesting the modern and spec-compatible API.\n */\nexport function deprecated(oldMethod, newMethod) {\n if (!deprecationWarnings_) {\n return;\n }\n console.warn(oldMethod + ' is deprecated, please use ' + newMethod +\n ' instead.');\n}\n\n/**\n * Browser detector.\n *\n * @return {object} result containing browser and version\n * properties.\n */\nexport function detectBrowser(window) {\n // Returned result object.\n const result = {browser: null, version: null};\n\n // Fail early if it's not a browser\n if (typeof window === 'undefined' || !window.navigator ||\n !window.navigator.userAgent) {\n result.browser = 'Not a browser.';\n return result;\n }\n\n const {navigator} = window;\n\n if (navigator.mozGetUserMedia) { // Firefox.\n result.browser = 'firefox';\n result.version = extractVersion(navigator.userAgent,\n /Firefox\\/(\\d+)\\./, 1);\n } else if (navigator.webkitGetUserMedia ||\n (window.isSecureContext === false && window.webkitRTCPeerConnection)) {\n // Chrome, Chromium, Webview, Opera.\n // Version matches Chrome/WebRTC version.\n // Chrome 74 removed webkitGetUserMedia on http as well so we need the\n // more complicated fallback to webkitRTCPeerConnection.\n result.browser = 'chrome';\n result.version = extractVersion(navigator.userAgent,\n /Chrom(e|ium)\\/(\\d+)\\./, 2);\n } else if (window.RTCPeerConnection &&\n navigator.userAgent.match(/AppleWebKit\\/(\\d+)\\./)) { // Safari.\n result.browser = 'safari';\n result.version = extractVersion(navigator.userAgent,\n /AppleWebKit\\/(\\d+)\\./, 1);\n result.supportsUnifiedPlan = window.RTCRtpTransceiver &&\n 'currentDirection' in window.RTCRtpTransceiver.prototype;\n } else { // Default fallthrough: not supported.\n result.browser = 'Not a supported browser.';\n return result;\n }\n\n return result;\n}\n\n/**\n * Checks if something is an object.\n *\n * @param {*} val The something you want to check.\n * @return true if val is an object, false otherwise.\n */\nfunction isObject(val) {\n return Object.prototype.toString.call(val) === '[object Object]';\n}\n\n/**\n * Remove all empty objects and undefined values\n * from a nested object -- an enhanced and vanilla version\n * of Lodash's `compact`.\n */\nexport function compactObject(data) {\n if (!isObject(data)) {\n return data;\n }\n\n return Object.keys(data).reduce(function(accumulator, key) {\n const isObj = isObject(data[key]);\n const value = isObj ? compactObject(data[key]) : data[key];\n const isEmptyObject = isObj && !Object.keys(value).length;\n if (value === undefined || isEmptyObject) {\n return accumulator;\n }\n return Object.assign(accumulator, {[key]: value});\n }, {});\n}\n\n/* iterates the stats graph recursively. */\nexport function walkStats(stats, base, resultSet) {\n if (!base || resultSet.has(base.id)) {\n return;\n }\n resultSet.set(base.id, base);\n Object.keys(base).forEach(name => {\n if (name.endsWith('Id')) {\n walkStats(stats, stats.get(base[name]), resultSet);\n } else if (name.endsWith('Ids')) {\n base[name].forEach(id => {\n walkStats(stats, stats.get(id), resultSet);\n });\n }\n });\n}\n\n/* filter getStats for a sender/receiver track. */\nexport function filterStats(result, track, outbound) {\n const streamStatsType = outbound ? 'outbound-rtp' : 'inbound-rtp';\n const filteredResult = new Map();\n if (track === null) {\n return filteredResult;\n }\n const trackStats = [];\n result.forEach(value => {\n if (value.type === 'track' &&\n value.trackIdentifier === track.id) {\n trackStats.push(value);\n }\n });\n trackStats.forEach(trackStat => {\n result.forEach(stats => {\n if (stats.type === streamStatsType && stats.trackId === trackStat.id) {\n walkStats(result, stats, filteredResult);\n }\n });\n });\n return filteredResult;\n}\n\n","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\nimport * as utils from '../utils.js';\n\nexport {shimGetUserMedia} from './getusermedia';\nexport {shimGetDisplayMedia} from './getdisplaymedia';\n\nexport function shimMediaStream(window) {\n window.MediaStream = window.MediaStream || window.webkitMediaStream;\n}\n\nexport function shimOnTrack(window) {\n if (typeof window === 'object' && window.RTCPeerConnection && !('ontrack' in\n window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, 'ontrack', {\n get() {\n return this._ontrack;\n },\n set(f) {\n if (this._ontrack) {\n this.removeEventListener('track', this._ontrack);\n }\n this.addEventListener('track', this._ontrack = f);\n },\n enumerable: true,\n configurable: true\n });\n const origSetRemoteDescription =\n window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription =\n function setRemoteDescription() {\n if (!this._ontrackpoly) {\n this._ontrackpoly = (e) => {\n // onaddstream does not fire when a track is added to an existing\n // stream. But stream.onaddtrack is implemented so we use that.\n e.stream.addEventListener('addtrack', te => {\n let receiver;\n if (window.RTCPeerConnection.prototype.getReceivers) {\n receiver = this.getReceivers()\n .find(r => r.track && r.track.id === te.track.id);\n } else {\n receiver = {track: te.track};\n }\n\n const event = new Event('track');\n event.track = te.track;\n event.receiver = receiver;\n event.transceiver = {receiver};\n event.streams = [e.stream];\n this.dispatchEvent(event);\n });\n e.stream.getTracks().forEach(track => {\n let receiver;\n if (window.RTCPeerConnection.prototype.getReceivers) {\n receiver = this.getReceivers()\n .find(r => r.track && r.track.id === track.id);\n } else {\n receiver = {track};\n }\n const event = new Event('track');\n event.track = track;\n event.receiver = receiver;\n event.transceiver = {receiver};\n event.streams = [e.stream];\n this.dispatchEvent(event);\n });\n };\n this.addEventListener('addstream', this._ontrackpoly);\n }\n return origSetRemoteDescription.apply(this, arguments);\n };\n } else {\n // even if RTCRtpTransceiver is in window, it is only used and\n // emitted in unified-plan. Unfortunately this means we need\n // to unconditionally wrap the event.\n utils.wrapPeerConnectionEvent(window, 'track', e => {\n if (!e.transceiver) {\n Object.defineProperty(e, 'transceiver',\n {value: {receiver: e.receiver}});\n }\n return e;\n });\n }\n}\n\nexport function shimGetSendersWithDtmf(window) {\n // Overrides addTrack/removeTrack, depends on shimAddTrackRemoveTrack.\n if (typeof window === 'object' && window.RTCPeerConnection &&\n !('getSenders' in window.RTCPeerConnection.prototype) &&\n 'createDTMFSender' in window.RTCPeerConnection.prototype) {\n const shimSenderWithDtmf = function(pc, track) {\n return {\n track,\n get dtmf() {\n if (this._dtmf === undefined) {\n if (track.kind === 'audio') {\n this._dtmf = pc.createDTMFSender(track);\n } else {\n this._dtmf = null;\n }\n }\n return this._dtmf;\n },\n _pc: pc\n };\n };\n\n // augment addTrack when getSenders is not available.\n if (!window.RTCPeerConnection.prototype.getSenders) {\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n this._senders = this._senders || [];\n return this._senders.slice(); // return a copy of the internal state.\n };\n const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addTrack =\n function addTrack(track, stream) {\n let sender = origAddTrack.apply(this, arguments);\n if (!sender) {\n sender = shimSenderWithDtmf(this, track);\n this._senders.push(sender);\n }\n return sender;\n };\n\n const origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack;\n window.RTCPeerConnection.prototype.removeTrack =\n function removeTrack(sender) {\n origRemoveTrack.apply(this, arguments);\n const idx = this._senders.indexOf(sender);\n if (idx !== -1) {\n this._senders.splice(idx, 1);\n }\n };\n }\n const origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n this._senders = this._senders || [];\n origAddStream.apply(this, [stream]);\n stream.getTracks().forEach(track => {\n this._senders.push(shimSenderWithDtmf(this, track));\n });\n };\n\n const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream =\n function removeStream(stream) {\n this._senders = this._senders || [];\n origRemoveStream.apply(this, [stream]);\n\n stream.getTracks().forEach(track => {\n const sender = this._senders.find(s => s.track === track);\n if (sender) { // remove sender\n this._senders.splice(this._senders.indexOf(sender), 1);\n }\n });\n };\n } else if (typeof window === 'object' && window.RTCPeerConnection &&\n 'getSenders' in window.RTCPeerConnection.prototype &&\n 'createDTMFSender' in window.RTCPeerConnection.prototype &&\n window.RTCRtpSender &&\n !('dtmf' in window.RTCRtpSender.prototype)) {\n const origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n const senders = origGetSenders.apply(this, []);\n senders.forEach(sender => sender._pc = this);\n return senders;\n };\n\n Object.defineProperty(window.RTCRtpSender.prototype, 'dtmf', {\n get() {\n if (this._dtmf === undefined) {\n if (this.track.kind === 'audio') {\n this._dtmf = this._pc.createDTMFSender(this.track);\n } else {\n this._dtmf = null;\n }\n }\n return this._dtmf;\n }\n });\n }\n}\n\nexport function shimGetStats(window) {\n if (!window.RTCPeerConnection) {\n return;\n }\n\n const origGetStats = window.RTCPeerConnection.prototype.getStats;\n window.RTCPeerConnection.prototype.getStats = function getStats() {\n const [selector, onSucc, onErr] = arguments;\n\n // If selector is a function then we are in the old style stats so just\n // pass back the original getStats format to avoid breaking old users.\n if (arguments.length > 0 && typeof selector === 'function') {\n return origGetStats.apply(this, arguments);\n }\n\n // When spec-style getStats is supported, return those when called with\n // either no arguments or the selector argument is null.\n if (origGetStats.length === 0 && (arguments.length === 0 ||\n typeof selector !== 'function')) {\n return origGetStats.apply(this, []);\n }\n\n const fixChromeStats_ = function(response) {\n const standardReport = {};\n const reports = response.result();\n reports.forEach(report => {\n const standardStats = {\n id: report.id,\n timestamp: report.timestamp,\n type: {\n localcandidate: 'local-candidate',\n remotecandidate: 'remote-candidate'\n }[report.type] || report.type\n };\n report.names().forEach(name => {\n standardStats[name] = report.stat(name);\n });\n standardReport[standardStats.id] = standardStats;\n });\n\n return standardReport;\n };\n\n // shim getStats with maplike support\n const makeMapStats = function(stats) {\n return new Map(Object.keys(stats).map(key => [key, stats[key]]));\n };\n\n if (arguments.length >= 2) {\n const successCallbackWrapper_ = function(response) {\n onSucc(makeMapStats(fixChromeStats_(response)));\n };\n\n return origGetStats.apply(this, [successCallbackWrapper_,\n selector]);\n }\n\n // promise-support\n return new Promise((resolve, reject) => {\n origGetStats.apply(this, [\n function(response) {\n resolve(makeMapStats(fixChromeStats_(response)));\n }, reject]);\n }).then(onSucc, onErr);\n };\n}\n\nexport function shimSenderReceiverGetStats(window) {\n if (!(typeof window === 'object' && window.RTCPeerConnection &&\n window.RTCRtpSender && window.RTCRtpReceiver)) {\n return;\n }\n\n // shim sender stats.\n if (!('getStats' in window.RTCRtpSender.prototype)) {\n const origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n if (origGetSenders) {\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n const senders = origGetSenders.apply(this, []);\n senders.forEach(sender => sender._pc = this);\n return senders;\n };\n }\n\n const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n if (origAddTrack) {\n window.RTCPeerConnection.prototype.addTrack = function addTrack() {\n const sender = origAddTrack.apply(this, arguments);\n sender._pc = this;\n return sender;\n };\n }\n window.RTCRtpSender.prototype.getStats = function getStats() {\n const sender = this;\n return this._pc.getStats().then(result =>\n /* Note: this will include stats of all senders that\n * send a track with the same id as sender.track as\n * it is not possible to identify the RTCRtpSender.\n */\n utils.filterStats(result, sender.track, true));\n };\n }\n\n // shim receiver stats.\n if (!('getStats' in window.RTCRtpReceiver.prototype)) {\n const origGetReceivers = window.RTCPeerConnection.prototype.getReceivers;\n if (origGetReceivers) {\n window.RTCPeerConnection.prototype.getReceivers =\n function getReceivers() {\n const receivers = origGetReceivers.apply(this, []);\n receivers.forEach(receiver => receiver._pc = this);\n return receivers;\n };\n }\n utils.wrapPeerConnectionEvent(window, 'track', e => {\n e.receiver._pc = e.srcElement;\n return e;\n });\n window.RTCRtpReceiver.prototype.getStats = function getStats() {\n const receiver = this;\n return this._pc.getStats().then(result =>\n utils.filterStats(result, receiver.track, false));\n };\n }\n\n if (!('getStats' in window.RTCRtpSender.prototype &&\n 'getStats' in window.RTCRtpReceiver.prototype)) {\n return;\n }\n\n // shim RTCPeerConnection.getStats(track).\n const origGetStats = window.RTCPeerConnection.prototype.getStats;\n window.RTCPeerConnection.prototype.getStats = function getStats() {\n if (arguments.length > 0 &&\n arguments[0] instanceof window.MediaStreamTrack) {\n const track = arguments[0];\n let sender;\n let receiver;\n let err;\n this.getSenders().forEach(s => {\n if (s.track === track) {\n if (sender) {\n err = true;\n } else {\n sender = s;\n }\n }\n });\n this.getReceivers().forEach(r => {\n if (r.track === track) {\n if (receiver) {\n err = true;\n } else {\n receiver = r;\n }\n }\n return r.track === track;\n });\n if (err || (sender && receiver)) {\n return Promise.reject(new DOMException(\n 'There are more than one sender or receiver for the track.',\n 'InvalidAccessError'));\n } else if (sender) {\n return sender.getStats();\n } else if (receiver) {\n return receiver.getStats();\n }\n return Promise.reject(new DOMException(\n 'There is no sender or receiver for the track.',\n 'InvalidAccessError'));\n }\n return origGetStats.apply(this, arguments);\n };\n}\n\nexport function shimAddTrackRemoveTrackWithNative(window) {\n // shim addTrack/removeTrack with native variants in order to make\n // the interactions with legacy getLocalStreams behave as in other browsers.\n // Keeps a mapping stream.id => [stream, rtpsenders...]\n window.RTCPeerConnection.prototype.getLocalStreams =\n function getLocalStreams() {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n return Object.keys(this._shimmedLocalStreams)\n .map(streamId => this._shimmedLocalStreams[streamId][0]);\n };\n\n const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addTrack =\n function addTrack(track, stream) {\n if (!stream) {\n return origAddTrack.apply(this, arguments);\n }\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n\n const sender = origAddTrack.apply(this, arguments);\n if (!this._shimmedLocalStreams[stream.id]) {\n this._shimmedLocalStreams[stream.id] = [stream, sender];\n } else if (this._shimmedLocalStreams[stream.id].indexOf(sender) === -1) {\n this._shimmedLocalStreams[stream.id].push(sender);\n }\n return sender;\n };\n\n const origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n\n stream.getTracks().forEach(track => {\n const alreadyExists = this.getSenders().find(s => s.track === track);\n if (alreadyExists) {\n throw new DOMException('Track already exists.',\n 'InvalidAccessError');\n }\n });\n const existingSenders = this.getSenders();\n origAddStream.apply(this, arguments);\n const newSenders = this.getSenders()\n .filter(newSender => existingSenders.indexOf(newSender) === -1);\n this._shimmedLocalStreams[stream.id] = [stream].concat(newSenders);\n };\n\n const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream =\n function removeStream(stream) {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n delete this._shimmedLocalStreams[stream.id];\n return origRemoveStream.apply(this, arguments);\n };\n\n const origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack;\n window.RTCPeerConnection.prototype.removeTrack =\n function removeTrack(sender) {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n if (sender) {\n Object.keys(this._shimmedLocalStreams).forEach(streamId => {\n const idx = this._shimmedLocalStreams[streamId].indexOf(sender);\n if (idx !== -1) {\n this._shimmedLocalStreams[streamId].splice(idx, 1);\n }\n if (this._shimmedLocalStreams[streamId].length === 1) {\n delete this._shimmedLocalStreams[streamId];\n }\n });\n }\n return origRemoveTrack.apply(this, arguments);\n };\n}\n\nexport function shimAddTrackRemoveTrack(window, browserDetails) {\n if (!window.RTCPeerConnection) {\n return;\n }\n // shim addTrack and removeTrack.\n if (window.RTCPeerConnection.prototype.addTrack &&\n browserDetails.version >= 65) {\n return shimAddTrackRemoveTrackWithNative(window);\n }\n\n // also shim pc.getLocalStreams when addTrack is shimmed\n // to return the original streams.\n const origGetLocalStreams = window.RTCPeerConnection.prototype\n .getLocalStreams;\n window.RTCPeerConnection.prototype.getLocalStreams =\n function getLocalStreams() {\n const nativeStreams = origGetLocalStreams.apply(this);\n this._reverseStreams = this._reverseStreams || {};\n return nativeStreams.map(stream => this._reverseStreams[stream.id]);\n };\n\n const origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n\n stream.getTracks().forEach(track => {\n const alreadyExists = this.getSenders().find(s => s.track === track);\n if (alreadyExists) {\n throw new DOMException('Track already exists.',\n 'InvalidAccessError');\n }\n });\n // Add identity mapping for consistency with addTrack.\n // Unless this is being used with a stream from addTrack.\n if (!this._reverseStreams[stream.id]) {\n const newStream = new window.MediaStream(stream.getTracks());\n this._streams[stream.id] = newStream;\n this._reverseStreams[newStream.id] = stream;\n stream = newStream;\n }\n origAddStream.apply(this, [stream]);\n };\n\n const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream =\n function removeStream(stream) {\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n\n origRemoveStream.apply(this, [(this._streams[stream.id] || stream)]);\n delete this._reverseStreams[(this._streams[stream.id] ?\n this._streams[stream.id].id : stream.id)];\n delete this._streams[stream.id];\n };\n\n window.RTCPeerConnection.prototype.addTrack =\n function addTrack(track, stream) {\n if (this.signalingState === 'closed') {\n throw new DOMException(\n 'The RTCPeerConnection\\'s signalingState is \\'closed\\'.',\n 'InvalidStateError');\n }\n const streams = [].slice.call(arguments, 1);\n if (streams.length !== 1 ||\n !streams[0].getTracks().find(t => t === track)) {\n // this is not fully correct but all we can manage without\n // [[associated MediaStreams]] internal slot.\n throw new DOMException(\n 'The adapter.js addTrack polyfill only supports a single ' +\n ' stream which is associated with the specified track.',\n 'NotSupportedError');\n }\n\n const alreadyExists = this.getSenders().find(s => s.track === track);\n if (alreadyExists) {\n throw new DOMException('Track already exists.',\n 'InvalidAccessError');\n }\n\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n const oldStream = this._streams[stream.id];\n if (oldStream) {\n // this is using odd Chrome behaviour, use with caution:\n // https://bugs.chromium.org/p/webrtc/issues/detail?id=7815\n // Note: we rely on the high-level addTrack/dtmf shim to\n // create the sender with a dtmf sender.\n oldStream.addTrack(track);\n\n // Trigger ONN async.\n Promise.resolve().then(() => {\n this.dispatchEvent(new Event('negotiationneeded'));\n });\n } else {\n const newStream = new window.MediaStream([track]);\n this._streams[stream.id] = newStream;\n this._reverseStreams[newStream.id] = stream;\n this.addStream(newStream);\n }\n return this.getSenders().find(s => s.track === track);\n };\n\n // replace the internal stream id with the external one and\n // vice versa.\n function replaceInternalStreamId(pc, description) {\n let sdp = description.sdp;\n Object.keys(pc._reverseStreams || []).forEach(internalId => {\n const externalStream = pc._reverseStreams[internalId];\n const internalStream = pc._streams[externalStream.id];\n sdp = sdp.replace(new RegExp(internalStream.id, 'g'),\n externalStream.id);\n });\n return new RTCSessionDescription({\n type: description.type,\n sdp\n });\n }\n function replaceExternalStreamId(pc, description) {\n let sdp = description.sdp;\n Object.keys(pc._reverseStreams || []).forEach(internalId => {\n const externalStream = pc._reverseStreams[internalId];\n const internalStream = pc._streams[externalStream.id];\n sdp = sdp.replace(new RegExp(externalStream.id, 'g'),\n internalStream.id);\n });\n return new RTCSessionDescription({\n type: description.type,\n sdp\n });\n }\n ['createOffer', 'createAnswer'].forEach(function(method) {\n const nativeMethod = window.RTCPeerConnection.prototype[method];\n const methodObj = {[method]() {\n const args = arguments;\n const isLegacyCall = arguments.length &&\n typeof arguments[0] === 'function';\n if (isLegacyCall) {\n return nativeMethod.apply(this, [\n (description) => {\n const desc = replaceInternalStreamId(this, description);\n args[0].apply(null, [desc]);\n },\n (err) => {\n if (args[1]) {\n args[1].apply(null, err);\n }\n }, arguments[2]\n ]);\n }\n return nativeMethod.apply(this, arguments)\n .then(description => replaceInternalStreamId(this, description));\n }};\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n\n const origSetLocalDescription =\n window.RTCPeerConnection.prototype.setLocalDescription;\n window.RTCPeerConnection.prototype.setLocalDescription =\n function setLocalDescription() {\n if (!arguments.length || !arguments[0].type) {\n return origSetLocalDescription.apply(this, arguments);\n }\n arguments[0] = replaceExternalStreamId(this, arguments[0]);\n return origSetLocalDescription.apply(this, arguments);\n };\n\n // TODO: mangle getStats: https://w3c.github.io/webrtc-stats/#dom-rtcmediastreamstats-streamidentifier\n\n const origLocalDescription = Object.getOwnPropertyDescriptor(\n window.RTCPeerConnection.prototype, 'localDescription');\n Object.defineProperty(window.RTCPeerConnection.prototype,\n 'localDescription', {\n get() {\n const description = origLocalDescription.get.apply(this);\n if (description.type === '') {\n return description;\n }\n return replaceInternalStreamId(this, description);\n }\n });\n\n window.RTCPeerConnection.prototype.removeTrack =\n function removeTrack(sender) {\n if (this.signalingState === 'closed') {\n throw new DOMException(\n 'The RTCPeerConnection\\'s signalingState is \\'closed\\'.',\n 'InvalidStateError');\n }\n // We can not yet check for sender instanceof RTCRtpSender\n // since we shim RTPSender. So we check if sender._pc is set.\n if (!sender._pc) {\n throw new DOMException('Argument 1 of RTCPeerConnection.removeTrack ' +\n 'does not implement interface RTCRtpSender.', 'TypeError');\n }\n const isLocal = sender._pc === this;\n if (!isLocal) {\n throw new DOMException('Sender was not created by this connection.',\n 'InvalidAccessError');\n }\n\n // Search for the native stream the senders track belongs to.\n this._streams = this._streams || {};\n let stream;\n Object.keys(this._streams).forEach(streamid => {\n const hasTrack = this._streams[streamid].getTracks()\n .find(track => sender.track === track);\n if (hasTrack) {\n stream = this._streams[streamid];\n }\n });\n\n if (stream) {\n if (stream.getTracks().length === 1) {\n // if this is the last track of the stream, remove the stream. This\n // takes care of any shimmed _senders.\n this.removeStream(this._reverseStreams[stream.id]);\n } else {\n // relying on the same odd chrome behaviour as above.\n stream.removeTrack(sender.track);\n }\n this.dispatchEvent(new Event('negotiationneeded'));\n }\n };\n}\n\nexport function shimPeerConnection(window, browserDetails) {\n if (!window.RTCPeerConnection && window.webkitRTCPeerConnection) {\n // very basic support for old versions.\n window.RTCPeerConnection = window.webkitRTCPeerConnection;\n }\n if (!window.RTCPeerConnection) {\n return;\n }\n\n // shim implicit creation of RTCSessionDescription/RTCIceCandidate\n if (browserDetails.version < 53) {\n ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate']\n .forEach(function(method) {\n const nativeMethod = window.RTCPeerConnection.prototype[method];\n const methodObj = {[method]() {\n arguments[0] = new ((method === 'addIceCandidate') ?\n window.RTCIceCandidate :\n window.RTCSessionDescription)(arguments[0]);\n return nativeMethod.apply(this, arguments);\n }};\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n }\n}\n\n// Attempt to fix ONN in plan-b mode.\nexport function fixNegotiationNeeded(window, browserDetails) {\n utils.wrapPeerConnectionEvent(window, 'negotiationneeded', e => {\n const pc = e.target;\n if (browserDetails.version < 72 || (pc.getConfiguration &&\n pc.getConfiguration().sdpSemantics === 'plan-b')) {\n if (pc.signalingState !== 'stable') {\n return;\n }\n }\n return e;\n });\n}\n","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\nimport * as utils from '../utils.js';\nconst logging = utils.log;\n\nexport function shimGetUserMedia(window, browserDetails) {\n const navigator = window && window.navigator;\n\n if (!navigator.mediaDevices) {\n return;\n }\n\n const constraintsToChrome_ = function(c) {\n if (typeof c !== 'object' || c.mandatory || c.optional) {\n return c;\n }\n const cc = {};\n Object.keys(c).forEach(key => {\n if (key === 'require' || key === 'advanced' || key === 'mediaSource') {\n return;\n }\n const r = (typeof c[key] === 'object') ? c[key] : {ideal: c[key]};\n if (r.exact !== undefined && typeof r.exact === 'number') {\n r.min = r.max = r.exact;\n }\n const oldname_ = function(prefix, name) {\n if (prefix) {\n return prefix + name.charAt(0).toUpperCase() + name.slice(1);\n }\n return (name === 'deviceId') ? 'sourceId' : name;\n };\n if (r.ideal !== undefined) {\n cc.optional = cc.optional || [];\n let oc = {};\n if (typeof r.ideal === 'number') {\n oc[oldname_('min', key)] = r.ideal;\n cc.optional.push(oc);\n oc = {};\n oc[oldname_('max', key)] = r.ideal;\n cc.optional.push(oc);\n } else {\n oc[oldname_('', key)] = r.ideal;\n cc.optional.push(oc);\n }\n }\n if (r.exact !== undefined && typeof r.exact !== 'number') {\n cc.mandatory = cc.mandatory || {};\n cc.mandatory[oldname_('', key)] = r.exact;\n } else {\n ['min', 'max'].forEach(mix => {\n if (r[mix] !== undefined) {\n cc.mandatory = cc.mandatory || {};\n cc.mandatory[oldname_(mix, key)] = r[mix];\n }\n });\n }\n });\n if (c.advanced) {\n cc.optional = (cc.optional || []).concat(c.advanced);\n }\n return cc;\n };\n\n const shimConstraints_ = function(constraints, func) {\n if (browserDetails.version >= 61) {\n return func(constraints);\n }\n constraints = JSON.parse(JSON.stringify(constraints));\n if (constraints && typeof constraints.audio === 'object') {\n const remap = function(obj, a, b) {\n if (a in obj && !(b in obj)) {\n obj[b] = obj[a];\n delete obj[a];\n }\n };\n constraints = JSON.parse(JSON.stringify(constraints));\n remap(constraints.audio, 'autoGainControl', 'googAutoGainControl');\n remap(constraints.audio, 'noiseSuppression', 'googNoiseSuppression');\n constraints.audio = constraintsToChrome_(constraints.audio);\n }\n if (constraints && typeof constraints.video === 'object') {\n // Shim facingMode for mobile & surface pro.\n let face = constraints.video.facingMode;\n face = face && ((typeof face === 'object') ? face : {ideal: face});\n const getSupportedFacingModeLies = browserDetails.version < 66;\n\n if ((face && (face.exact === 'user' || face.exact === 'environment' ||\n face.ideal === 'user' || face.ideal === 'environment')) &&\n !(navigator.mediaDevices.getSupportedConstraints &&\n navigator.mediaDevices.getSupportedConstraints().facingMode &&\n !getSupportedFacingModeLies)) {\n delete constraints.video.facingMode;\n let matches;\n if (face.exact === 'environment' || face.ideal === 'environment') {\n matches = ['back', 'rear'];\n } else if (face.exact === 'user' || face.ideal === 'user') {\n matches = ['front'];\n }\n if (matches) {\n // Look for matches in label, or use last cam for back (typical).\n return navigator.mediaDevices.enumerateDevices()\n .then(devices => {\n devices = devices.filter(d => d.kind === 'videoinput');\n let dev = devices.find(d => matches.some(match =>\n d.label.toLowerCase().includes(match)));\n if (!dev && devices.length && matches.includes('back')) {\n dev = devices[devices.length - 1]; // more likely the back cam\n }\n if (dev) {\n constraints.video.deviceId = face.exact\n ? {exact: dev.deviceId}\n : {ideal: dev.deviceId};\n }\n constraints.video = constraintsToChrome_(constraints.video);\n logging('chrome: ' + JSON.stringify(constraints));\n return func(constraints);\n });\n }\n }\n constraints.video = constraintsToChrome_(constraints.video);\n }\n logging('chrome: ' + JSON.stringify(constraints));\n return func(constraints);\n };\n\n const shimError_ = function(e) {\n if (browserDetails.version >= 64) {\n return e;\n }\n return {\n name: {\n PermissionDeniedError: 'NotAllowedError',\n PermissionDismissedError: 'NotAllowedError',\n InvalidStateError: 'NotAllowedError',\n DevicesNotFoundError: 'NotFoundError',\n ConstraintNotSatisfiedError: 'OverconstrainedError',\n TrackStartError: 'NotReadableError',\n MediaDeviceFailedDueToShutdown: 'NotAllowedError',\n MediaDeviceKillSwitchOn: 'NotAllowedError',\n TabCaptureError: 'AbortError',\n ScreenCaptureError: 'AbortError',\n DeviceCaptureError: 'AbortError'\n }[e.name] || e.name,\n message: e.message,\n constraint: e.constraint || e.constraintName,\n toString() {\n return this.name + (this.message && ': ') + this.message;\n }\n };\n };\n\n const getUserMedia_ = function(constraints, onSuccess, onError) {\n shimConstraints_(constraints, c => {\n navigator.webkitGetUserMedia(c, onSuccess, e => {\n if (onError) {\n onError(shimError_(e));\n }\n });\n });\n };\n navigator.getUserMedia = getUserMedia_.bind(navigator);\n\n // Even though Chrome 45 has navigator.mediaDevices and a getUserMedia\n // function which returns a Promise, it does not accept spec-style\n // constraints.\n if (navigator.mediaDevices.getUserMedia) {\n const origGetUserMedia = navigator.mediaDevices.getUserMedia.\n bind(navigator.mediaDevices);\n navigator.mediaDevices.getUserMedia = function(cs) {\n return shimConstraints_(cs, c => origGetUserMedia(c).then(stream => {\n if (c.audio && !stream.getAudioTracks().length ||\n c.video && !stream.getVideoTracks().length) {\n stream.getTracks().forEach(track => {\n track.stop();\n });\n throw new DOMException('', 'NotFoundError');\n }\n return stream;\n }, e => Promise.reject(shimError_(e))));\n };\n }\n}\n","/*\n * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\nexport function shimGetDisplayMedia(window, getSourceId) {\n if (window.navigator.mediaDevices &&\n 'getDisplayMedia' in window.navigator.mediaDevices) {\n return;\n }\n if (!(window.navigator.mediaDevices)) {\n return;\n }\n // getSourceId is a function that returns a promise resolving with\n // the sourceId of the screen/window/tab to be shared.\n if (typeof getSourceId !== 'function') {\n console.error('shimGetDisplayMedia: getSourceId argument is not ' +\n 'a function');\n return;\n }\n window.navigator.mediaDevices.getDisplayMedia =\n function getDisplayMedia(constraints) {\n return getSourceId(constraints)\n .then(sourceId => {\n const widthSpecified = constraints.video && constraints.video.width;\n const heightSpecified = constraints.video &&\n constraints.video.height;\n const frameRateSpecified = constraints.video &&\n constraints.video.frameRate;\n constraints.video = {\n mandatory: {\n chromeMediaSource: 'desktop',\n chromeMediaSourceId: sourceId,\n maxFrameRate: frameRateSpecified || 3\n }\n };\n if (widthSpecified) {\n constraints.video.mandatory.maxWidth = widthSpecified;\n }\n if (heightSpecified) {\n constraints.video.mandatory.maxHeight = heightSpecified;\n }\n return window.navigator.mediaDevices.getUserMedia(constraints);\n });\n };\n}\n","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\n\nimport * as utils from '../utils';\nexport {shimGetUserMedia} from './getusermedia';\nexport {shimGetDisplayMedia} from './getdisplaymedia';\n\nexport function shimOnTrack(window) {\n if (typeof window === 'object' && window.RTCTrackEvent &&\n ('receiver' in window.RTCTrackEvent.prototype) &&\n !('transceiver' in window.RTCTrackEvent.prototype)) {\n Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', {\n get() {\n return {receiver: this.receiver};\n }\n });\n }\n}\n\nexport function shimPeerConnection(window, browserDetails) {\n if (typeof window !== 'object' ||\n !(window.RTCPeerConnection || window.mozRTCPeerConnection)) {\n return; // probably media.peerconnection.enabled=false in about:config\n }\n if (!window.RTCPeerConnection && window.mozRTCPeerConnection) {\n // very basic support for old versions.\n window.RTCPeerConnection = window.mozRTCPeerConnection;\n }\n\n if (browserDetails.version < 53) {\n // shim away need for obsolete RTCIceCandidate/RTCSessionDescription.\n ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate']\n .forEach(function(method) {\n const nativeMethod = window.RTCPeerConnection.prototype[method];\n const methodObj = {[method]() {\n arguments[0] = new ((method === 'addIceCandidate') ?\n window.RTCIceCandidate :\n window.RTCSessionDescription)(arguments[0]);\n return nativeMethod.apply(this, arguments);\n }};\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n }\n\n const modernStatsTypes = {\n inboundrtp: 'inbound-rtp',\n outboundrtp: 'outbound-rtp',\n candidatepair: 'candidate-pair',\n localcandidate: 'local-candidate',\n remotecandidate: 'remote-candidate'\n };\n\n const nativeGetStats = window.RTCPeerConnection.prototype.getStats;\n window.RTCPeerConnection.prototype.getStats = function getStats() {\n const [selector, onSucc, onErr] = arguments;\n return nativeGetStats.apply(this, [selector || null])\n .then(stats => {\n if (browserDetails.version < 53 && !onSucc) {\n // Shim only promise getStats with spec-hyphens in type names\n // Leave callback version alone; misc old uses of forEach before Map\n try {\n stats.forEach(stat => {\n stat.type = modernStatsTypes[stat.type] || stat.type;\n });\n } catch (e) {\n if (e.name !== 'TypeError') {\n throw e;\n }\n // Avoid TypeError: \"type\" is read-only, in old versions. 34-43ish\n stats.forEach((stat, i) => {\n stats.set(i, Object.assign({}, stat, {\n type: modernStatsTypes[stat.type] || stat.type\n }));\n });\n }\n }\n return stats;\n })\n .then(onSucc, onErr);\n };\n}\n\nexport function shimSenderGetStats(window) {\n if (!(typeof window === 'object' && window.RTCPeerConnection &&\n window.RTCRtpSender)) {\n return;\n }\n if (window.RTCRtpSender && 'getStats' in window.RTCRtpSender.prototype) {\n return;\n }\n const origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n if (origGetSenders) {\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n const senders = origGetSenders.apply(this, []);\n senders.forEach(sender => sender._pc = this);\n return senders;\n };\n }\n\n const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n if (origAddTrack) {\n window.RTCPeerConnection.prototype.addTrack = function addTrack() {\n const sender = origAddTrack.apply(this, arguments);\n sender._pc = this;\n return sender;\n };\n }\n window.RTCRtpSender.prototype.getStats = function getStats() {\n return this.track ? this._pc.getStats(this.track) :\n Promise.resolve(new Map());\n };\n}\n\nexport function shimReceiverGetStats(window) {\n if (!(typeof window === 'object' && window.RTCPeerConnection &&\n window.RTCRtpSender)) {\n return;\n }\n if (window.RTCRtpSender && 'getStats' in window.RTCRtpReceiver.prototype) {\n return;\n }\n const origGetReceivers = window.RTCPeerConnection.prototype.getReceivers;\n if (origGetReceivers) {\n window.RTCPeerConnection.prototype.getReceivers = function getReceivers() {\n const receivers = origGetReceivers.apply(this, []);\n receivers.forEach(receiver => receiver._pc = this);\n return receivers;\n };\n }\n utils.wrapPeerConnectionEvent(window, 'track', e => {\n e.receiver._pc = e.srcElement;\n return e;\n });\n window.RTCRtpReceiver.prototype.getStats = function getStats() {\n return this._pc.getStats(this.track);\n };\n}\n\nexport function shimRemoveStream(window) {\n if (!window.RTCPeerConnection ||\n 'removeStream' in window.RTCPeerConnection.prototype) {\n return;\n }\n window.RTCPeerConnection.prototype.removeStream =\n function removeStream(stream) {\n utils.deprecated('removeStream', 'removeTrack');\n this.getSenders().forEach(sender => {\n if (sender.track && stream.getTracks().includes(sender.track)) {\n this.removeTrack(sender);\n }\n });\n };\n}\n\nexport function shimRTCDataChannel(window) {\n // rename DataChannel to RTCDataChannel (native fix in FF60):\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1173851\n if (window.DataChannel && !window.RTCDataChannel) {\n window.RTCDataChannel = window.DataChannel;\n }\n}\n\nexport function shimAddTransceiver(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!(typeof window === 'object' && window.RTCPeerConnection)) {\n return;\n }\n const origAddTransceiver = window.RTCPeerConnection.prototype.addTransceiver;\n if (origAddTransceiver) {\n window.RTCPeerConnection.prototype.addTransceiver =\n function addTransceiver() {\n this.setParametersPromises = [];\n // WebIDL input coercion and validation\n let sendEncodings = arguments[1] && arguments[1].sendEncodings;\n if (sendEncodings === undefined) {\n sendEncodings = [];\n }\n sendEncodings = [...sendEncodings];\n const shouldPerformCheck = sendEncodings.length > 0;\n if (shouldPerformCheck) {\n // If sendEncodings params are provided, validate grammar\n sendEncodings.forEach((encodingParam) => {\n if ('rid' in encodingParam) {\n const ridRegex = /^[a-z0-9]{0,16}$/i;\n if (!ridRegex.test(encodingParam.rid)) {\n throw new TypeError('Invalid RID value provided.');\n }\n }\n if ('scaleResolutionDownBy' in encodingParam) {\n if (!(parseFloat(encodingParam.scaleResolutionDownBy) >= 1.0)) {\n throw new RangeError('scale_resolution_down_by must be >= 1.0');\n }\n }\n if ('maxFramerate' in encodingParam) {\n if (!(parseFloat(encodingParam.maxFramerate) >= 0)) {\n throw new RangeError('max_framerate must be >= 0.0');\n }\n }\n });\n }\n const transceiver = origAddTransceiver.apply(this, arguments);\n if (shouldPerformCheck) {\n // Check if the init options were applied. If not we do this in an\n // asynchronous way and save the promise reference in a global object.\n // This is an ugly hack, but at the same time is way more robust than\n // checking the sender parameters before and after the createOffer\n // Also note that after the createoffer we are not 100% sure that\n // the params were asynchronously applied so we might miss the\n // opportunity to recreate offer.\n const {sender} = transceiver;\n const params = sender.getParameters();\n if (!('encodings' in params) ||\n // Avoid being fooled by patched getParameters() below.\n (params.encodings.length === 1 &&\n Object.keys(params.encodings[0]).length === 0)) {\n params.encodings = sendEncodings;\n sender.sendEncodings = sendEncodings;\n this.setParametersPromises.push(sender.setParameters(params)\n .then(() => {\n delete sender.sendEncodings;\n }).catch(() => {\n delete sender.sendEncodings;\n })\n );\n }\n }\n return transceiver;\n };\n }\n}\n\nexport function shimGetParameters(window) {\n if (!(typeof window === 'object' && window.RTCRtpSender)) {\n return;\n }\n const origGetParameters = window.RTCRtpSender.prototype.getParameters;\n if (origGetParameters) {\n window.RTCRtpSender.prototype.getParameters =\n function getParameters() {\n const params = origGetParameters.apply(this, arguments);\n if (!('encodings' in params)) {\n params.encodings = [].concat(this.sendEncodings || [{}]);\n }\n return params;\n };\n }\n}\n\nexport function shimCreateOffer(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!(typeof window === 'object' && window.RTCPeerConnection)) {\n return;\n }\n const origCreateOffer = window.RTCPeerConnection.prototype.createOffer;\n window.RTCPeerConnection.prototype.createOffer = function createOffer() {\n if (this.setParametersPromises && this.setParametersPromises.length) {\n return Promise.all(this.setParametersPromises)\n .then(() => {\n return origCreateOffer.apply(this, arguments);\n })\n .finally(() => {\n this.setParametersPromises = [];\n });\n }\n return origCreateOffer.apply(this, arguments);\n };\n}\n\nexport function shimCreateAnswer(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!(typeof window === 'object' && window.RTCPeerConnection)) {\n return;\n }\n const origCreateAnswer = window.RTCPeerConnection.prototype.createAnswer;\n window.RTCPeerConnection.prototype.createAnswer = function createAnswer() {\n if (this.setParametersPromises && this.setParametersPromises.length) {\n return Promise.all(this.setParametersPromises)\n .then(() => {\n return origCreateAnswer.apply(this, arguments);\n })\n .finally(() => {\n this.setParametersPromises = [];\n });\n }\n return origCreateAnswer.apply(this, arguments);\n };\n}\n","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\n\nimport * as utils from '../utils';\n\nexport function shimGetUserMedia(window, browserDetails) {\n const navigator = window && window.navigator;\n const MediaStreamTrack = window && window.MediaStreamTrack;\n\n navigator.getUserMedia = function(constraints, onSuccess, onError) {\n // Replace Firefox 44+'s deprecation warning with unprefixed version.\n utils.deprecated('navigator.getUserMedia',\n 'navigator.mediaDevices.getUserMedia');\n navigator.mediaDevices.getUserMedia(constraints).then(onSuccess, onError);\n };\n\n if (!(browserDetails.version > 55 &&\n 'autoGainControl' in navigator.mediaDevices.getSupportedConstraints())) {\n const remap = function(obj, a, b) {\n if (a in obj && !(b in obj)) {\n obj[b] = obj[a];\n delete obj[a];\n }\n };\n\n const nativeGetUserMedia = navigator.mediaDevices.getUserMedia.\n bind(navigator.mediaDevices);\n navigator.mediaDevices.getUserMedia = function(c) {\n if (typeof c === 'object' && typeof c.audio === 'object') {\n c = JSON.parse(JSON.stringify(c));\n remap(c.audio, 'autoGainControl', 'mozAutoGainControl');\n remap(c.audio, 'noiseSuppression', 'mozNoiseSuppression');\n }\n return nativeGetUserMedia(c);\n };\n\n if (MediaStreamTrack && MediaStreamTrack.prototype.getSettings) {\n const nativeGetSettings = MediaStreamTrack.prototype.getSettings;\n MediaStreamTrack.prototype.getSettings = function() {\n const obj = nativeGetSettings.apply(this, arguments);\n remap(obj, 'mozAutoGainControl', 'autoGainControl');\n remap(obj, 'mozNoiseSuppression', 'noiseSuppression');\n return obj;\n };\n }\n\n if (MediaStreamTrack && MediaStreamTrack.prototype.applyConstraints) {\n const nativeApplyConstraints =\n MediaStreamTrack.prototype.applyConstraints;\n MediaStreamTrack.prototype.applyConstraints = function(c) {\n if (this.kind === 'audio' && typeof c === 'object') {\n c = JSON.parse(JSON.stringify(c));\n remap(c, 'autoGainControl', 'mozAutoGainControl');\n remap(c, 'noiseSuppression', 'mozNoiseSuppression');\n }\n return nativeApplyConstraints.apply(this, [c]);\n };\n }\n }\n}\n","/*\n * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\n\nexport function shimGetDisplayMedia(window, preferredMediaSource) {\n if (window.navigator.mediaDevices &&\n 'getDisplayMedia' in window.navigator.mediaDevices) {\n return;\n }\n if (!(window.navigator.mediaDevices)) {\n return;\n }\n window.navigator.mediaDevices.getDisplayMedia =\n function getDisplayMedia(constraints) {\n if (!(constraints && constraints.video)) {\n const err = new DOMException('getDisplayMedia without video ' +\n 'constraints is undefined');\n err.name = 'NotFoundError';\n // from https://heycam.github.io/webidl/#idl-DOMException-error-names\n err.code = 8;\n return Promise.reject(err);\n }\n if (constraints.video === true) {\n constraints.video = {mediaSource: preferredMediaSource};\n } else {\n constraints.video.mediaSource = preferredMediaSource;\n }\n return window.navigator.mediaDevices.getUserMedia(constraints);\n };\n}\n","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n'use strict';\nimport * as utils from '../utils';\n\nexport function shimLocalStreamsAPI(window) {\n if (typeof window !== 'object' || !window.RTCPeerConnection) {\n return;\n }\n if (!('getLocalStreams' in window.RTCPeerConnection.prototype)) {\n window.RTCPeerConnection.prototype.getLocalStreams =\n function getLocalStreams() {\n if (!this._localStreams) {\n this._localStreams = [];\n }\n return this._localStreams;\n };\n }\n if (!('addStream' in window.RTCPeerConnection.prototype)) {\n const _addTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n if (!this._localStreams) {\n this._localStreams = [];\n }\n if (!this._localStreams.includes(stream)) {\n this._localStreams.push(stream);\n }\n // Try to emulate Chrome's behaviour of adding in audio-video order.\n // Safari orders by track id.\n stream.getAudioTracks().forEach(track => _addTrack.call(this, track,\n stream));\n stream.getVideoTracks().forEach(track => _addTrack.call(this, track,\n stream));\n };\n\n window.RTCPeerConnection.prototype.addTrack =\n function addTrack(track, ...streams) {\n if (streams) {\n streams.forEach((stream) => {\n if (!this._localStreams) {\n this._localStreams = [stream];\n } else if (!this._localStreams.includes(stream)) {\n this._localStreams.push(stream);\n }\n });\n }\n return _addTrack.apply(this, arguments);\n };\n }\n if (!('removeStream' in window.RTCPeerConnection.prototype)) {\n window.RTCPeerConnection.prototype.removeStream =\n function removeStream(stream) {\n if (!this._localStreams) {\n this._localStreams = [];\n }\n const index = this._localStreams.indexOf(stream);\n if (index === -1) {\n return;\n }\n this._localStreams.splice(index, 1);\n const tracks = stream.getTracks();\n this.getSenders().forEach(sender => {\n if (tracks.includes(sender.track)) {\n this.removeTrack(sender);\n }\n });\n };\n }\n}\n\nexport function shimRemoteStreamsAPI(window) {\n if (typeof window !== 'object' || !window.RTCPeerConnection) {\n return;\n }\n if (!('getRemoteStreams' in window.RTCPeerConnection.prototype)) {\n window.RTCPeerConnection.prototype.getRemoteStreams =\n function getRemoteStreams() {\n return this._remoteStreams ? this._remoteStreams : [];\n };\n }\n if (!('onaddstream' in window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, 'onaddstream', {\n get() {\n return this._onaddstream;\n },\n set(f) {\n if (this._onaddstream) {\n this.removeEventListener('addstream', this._onaddstream);\n this.removeEventListener('track', this._onaddstreampoly);\n }\n this.addEventListener('addstream', this._onaddstream = f);\n this.addEventListener('track', this._onaddstreampoly = (e) => {\n e.streams.forEach(stream => {\n if (!this._remoteStreams) {\n this._remoteStreams = [];\n }\n if (this._remoteStreams.includes(stream)) {\n return;\n }\n this._remoteStreams.push(stream);\n const event = new Event('addstream');\n event.stream = stream;\n this.dispatchEvent(event);\n });\n });\n }\n });\n const origSetRemoteDescription =\n window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription =\n function setRemoteDescription() {\n const pc = this;\n if (!this._onaddstreampoly) {\n this.addEventListener('track', this._onaddstreampoly = function(e) {\n e.streams.forEach(stream => {\n if (!pc._remoteStreams) {\n pc._remoteStreams = [];\n }\n if (pc._remoteStreams.indexOf(stream) >= 0) {\n return;\n }\n pc._remoteStreams.push(stream);\n const event = new Event('addstream');\n event.stream = stream;\n pc.dispatchEvent(event);\n });\n });\n }\n return origSetRemoteDescription.apply(pc, arguments);\n };\n }\n}\n\nexport function shimCallbacksAPI(window) {\n if (typeof window !== 'object' || !window.RTCPeerConnection) {\n return;\n }\n const prototype = window.RTCPeerConnection.prototype;\n const origCreateOffer = prototype.createOffer;\n const origCreateAnswer = prototype.createAnswer;\n const setLocalDescription = prototype.setLocalDescription;\n const setRemoteDescription = prototype.setRemoteDescription;\n const addIceCandidate = prototype.addIceCandidate;\n\n prototype.createOffer =\n function createOffer(successCallback, failureCallback) {\n const options = (arguments.length >= 2) ? arguments[2] : arguments[0];\n const promise = origCreateOffer.apply(this, [options]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n\n prototype.createAnswer =\n function createAnswer(successCallback, failureCallback) {\n const options = (arguments.length >= 2) ? arguments[2] : arguments[0];\n const promise = origCreateAnswer.apply(this, [options]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n\n let withCallback = function(description, successCallback, failureCallback) {\n const promise = setLocalDescription.apply(this, [description]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.setLocalDescription = withCallback;\n\n withCallback = function(description, successCallback, failureCallback) {\n const promise = setRemoteDescription.apply(this, [description]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.setRemoteDescription = withCallback;\n\n withCallback = function(candidate, successCallback, failureCallback) {\n const promise = addIceCandidate.apply(this, [candidate]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.addIceCandidate = withCallback;\n}\n\nexport function shimGetUserMedia(window) {\n const navigator = window && window.navigator;\n\n if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\n // shim not needed in Safari 12.1\n const mediaDevices = navigator.mediaDevices;\n const _getUserMedia = mediaDevices.getUserMedia.bind(mediaDevices);\n navigator.mediaDevices.getUserMedia = (constraints) => {\n return _getUserMedia(shimConstraints(constraints));\n };\n }\n\n if (!navigator.getUserMedia && navigator.mediaDevices &&\n navigator.mediaDevices.getUserMedia) {\n navigator.getUserMedia = function getUserMedia(constraints, cb, errcb) {\n navigator.mediaDevices.getUserMedia(constraints)\n .then(cb, errcb);\n }.bind(navigator);\n }\n}\n\nexport function shimConstraints(constraints) {\n if (constraints && constraints.video !== undefined) {\n return Object.assign({},\n constraints,\n {video: utils.compactObject(constraints.video)}\n );\n }\n\n return constraints;\n}\n\nexport function shimRTCIceServerUrls(window) {\n if (!window.RTCPeerConnection) {\n return;\n }\n // migrate from non-spec RTCIceServer.url to RTCIceServer.urls\n const OrigPeerConnection = window.RTCPeerConnection;\n window.RTCPeerConnection =\n function RTCPeerConnection(pcConfig, pcConstraints) {\n if (pcConfig && pcConfig.iceServers) {\n const newIceServers = [];\n for (let i = 0; i < pcConfig.iceServers.length; i++) {\n let server = pcConfig.iceServers[i];\n if (server.urls === undefined && server.url) {\n utils.deprecated('RTCIceServer.url', 'RTCIceServer.urls');\n server = JSON.parse(JSON.stringify(server));\n server.urls = server.url;\n delete server.url;\n newIceServers.push(server);\n } else {\n newIceServers.push(pcConfig.iceServers[i]);\n }\n }\n pcConfig.iceServers = newIceServers;\n }\n return new OrigPeerConnection(pcConfig, pcConstraints);\n };\n window.RTCPeerConnection.prototype = OrigPeerConnection.prototype;\n // wrap static methods. Currently just generateCertificate.\n if ('generateCertificate' in OrigPeerConnection) {\n Object.defineProperty(window.RTCPeerConnection, 'generateCertificate', {\n get() {\n return OrigPeerConnection.generateCertificate;\n }\n });\n }\n}\n\nexport function shimTrackEventTransceiver(window) {\n // Add event.transceiver member over deprecated event.receiver\n if (typeof window === 'object' && window.RTCTrackEvent &&\n 'receiver' in window.RTCTrackEvent.prototype &&\n !('transceiver' in window.RTCTrackEvent.prototype)) {\n Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', {\n get() {\n return {receiver: this.receiver};\n }\n });\n }\n}\n\nexport function shimCreateOfferLegacy(window) {\n const origCreateOffer = window.RTCPeerConnection.prototype.createOffer;\n window.RTCPeerConnection.prototype.createOffer =\n function createOffer(offerOptions) {\n if (offerOptions) {\n if (typeof offerOptions.offerToReceiveAudio !== 'undefined') {\n // support bit values\n offerOptions.offerToReceiveAudio =\n !!offerOptions.offerToReceiveAudio;\n }\n const audioTransceiver = this.getTransceivers().find(transceiver =>\n transceiver.receiver.track.kind === 'audio');\n if (offerOptions.offerToReceiveAudio === false && audioTransceiver) {\n if (audioTransceiver.direction === 'sendrecv') {\n if (audioTransceiver.setDirection) {\n audioTransceiver.setDirection('sendonly');\n } else {\n audioTransceiver.direction = 'sendonly';\n }\n } else if (audioTransceiver.direction === 'recvonly') {\n if (audioTransceiver.setDirection) {\n audioTransceiver.setDirection('inactive');\n } else {\n audioTransceiver.direction = 'inactive';\n }\n }\n } else if (offerOptions.offerToReceiveAudio === true &&\n !audioTransceiver) {\n this.addTransceiver('audio', {direction: 'recvonly'});\n }\n\n if (typeof offerOptions.offerToReceiveVideo !== 'undefined') {\n // support bit values\n offerOptions.offerToReceiveVideo =\n !!offerOptions.offerToReceiveVideo;\n }\n const videoTransceiver = this.getTransceivers().find(transceiver =>\n transceiver.receiver.track.kind === 'video');\n if (offerOptions.offerToReceiveVideo === false && videoTransceiver) {\n if (videoTransceiver.direction === 'sendrecv') {\n if (videoTransceiver.setDirection) {\n videoTransceiver.setDirection('sendonly');\n } else {\n videoTransceiver.direction = 'sendonly';\n }\n } else if (videoTransceiver.direction === 'recvonly') {\n if (videoTransceiver.setDirection) {\n videoTransceiver.setDirection('inactive');\n } else {\n videoTransceiver.direction = 'inactive';\n }\n }\n } else if (offerOptions.offerToReceiveVideo === true &&\n !videoTransceiver) {\n this.addTransceiver('video', {direction: 'recvonly'});\n }\n }\n return origCreateOffer.apply(this, arguments);\n };\n}\n\nexport function shimAudioContext(window) {\n if (typeof window !== 'object' || window.AudioContext) {\n return;\n }\n window.AudioContext = window.webkitAudioContext;\n}\n\n","/*\n * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\n\nimport SDPUtils from 'sdp';\nimport * as utils from './utils';\n\nexport function shimRTCIceCandidate(window) {\n // foundation is arbitrarily chosen as an indicator for full support for\n // https://w3c.github.io/webrtc-pc/#rtcicecandidate-interface\n if (!window.RTCIceCandidate || (window.RTCIceCandidate && 'foundation' in\n window.RTCIceCandidate.prototype)) {\n return;\n }\n\n const NativeRTCIceCandidate = window.RTCIceCandidate;\n window.RTCIceCandidate = function RTCIceCandidate(args) {\n // Remove the a= which shouldn't be part of the candidate string.\n if (typeof args === 'object' && args.candidate &&\n args.candidate.indexOf('a=') === 0) {\n args = JSON.parse(JSON.stringify(args));\n args.candidate = args.candidate.substring(2);\n }\n\n if (args.candidate && args.candidate.length) {\n // Augment the native candidate with the parsed fields.\n const nativeCandidate = new NativeRTCIceCandidate(args);\n const parsedCandidate = SDPUtils.parseCandidate(args.candidate);\n for (const key in parsedCandidate) {\n if (!(key in nativeCandidate)) {\n Object.defineProperty(nativeCandidate, key,\n {value: parsedCandidate[key]});\n }\n }\n\n // Override serializer to not serialize the extra attributes.\n nativeCandidate.toJSON = function toJSON() {\n return {\n candidate: nativeCandidate.candidate,\n sdpMid: nativeCandidate.sdpMid,\n sdpMLineIndex: nativeCandidate.sdpMLineIndex,\n usernameFragment: nativeCandidate.usernameFragment,\n };\n };\n return nativeCandidate;\n }\n return new NativeRTCIceCandidate(args);\n };\n window.RTCIceCandidate.prototype = NativeRTCIceCandidate.prototype;\n\n // Hook up the augmented candidate in onicecandidate and\n // addEventListener('icecandidate', ...)\n utils.wrapPeerConnectionEvent(window, 'icecandidate', e => {\n if (e.candidate) {\n Object.defineProperty(e, 'candidate', {\n value: new window.RTCIceCandidate(e.candidate),\n writable: 'false'\n });\n }\n return e;\n });\n}\n\nexport function shimRTCIceCandidateRelayProtocol(window) {\n if (!window.RTCIceCandidate || (window.RTCIceCandidate && 'relayProtocol' in\n window.RTCIceCandidate.prototype)) {\n return;\n }\n\n // Hook up the augmented candidate in onicecandidate and\n // addEventListener('icecandidate', ...)\n utils.wrapPeerConnectionEvent(window, 'icecandidate', e => {\n if (e.candidate) {\n const parsedCandidate = SDPUtils.parseCandidate(e.candidate.candidate);\n if (parsedCandidate.type === 'relay') {\n // This is a libwebrtc-specific mapping of local type preference\n // to relayProtocol.\n e.candidate.relayProtocol = {\n 0: 'tls',\n 1: 'tcp',\n 2: 'udp',\n }[parsedCandidate.priority >> 24];\n }\n }\n return e;\n });\n}\n\nexport function shimMaxMessageSize(window, browserDetails) {\n if (!window.RTCPeerConnection) {\n return;\n }\n\n if (!('sctp' in window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, 'sctp', {\n get() {\n return typeof this._sctp === 'undefined' ? null : this._sctp;\n }\n });\n }\n\n const sctpInDescription = function(description) {\n if (!description || !description.sdp) {\n return false;\n }\n const sections = SDPUtils.splitSections(description.sdp);\n sections.shift();\n return sections.some(mediaSection => {\n const mLine = SDPUtils.parseMLine(mediaSection);\n return mLine && mLine.kind === 'application'\n && mLine.protocol.indexOf('SCTP') !== -1;\n });\n };\n\n const getRemoteFirefoxVersion = function(description) {\n // TODO: Is there a better solution for detecting Firefox?\n const match = description.sdp.match(/mozilla...THIS_IS_SDPARTA-(\\d+)/);\n if (match === null || match.length < 2) {\n return -1;\n }\n const version = parseInt(match[1], 10);\n // Test for NaN (yes, this is ugly)\n return version !== version ? -1 : version;\n };\n\n const getCanSendMaxMessageSize = function(remoteIsFirefox) {\n // Every implementation we know can send at least 64 KiB.\n // Note: Although Chrome is technically able to send up to 256 KiB, the\n // data does not reach the other peer reliably.\n // See: https://bugs.chromium.org/p/webrtc/issues/detail?id=8419\n let canSendMaxMessageSize = 65536;\n if (browserDetails.browser === 'firefox') {\n if (browserDetails.version < 57) {\n if (remoteIsFirefox === -1) {\n // FF < 57 will send in 16 KiB chunks using the deprecated PPID\n // fragmentation.\n canSendMaxMessageSize = 16384;\n } else {\n // However, other FF (and RAWRTC) can reassemble PPID-fragmented\n // messages. Thus, supporting ~2 GiB when sending.\n canSendMaxMessageSize = 2147483637;\n }\n } else if (browserDetails.version < 60) {\n // Currently, all FF >= 57 will reset the remote maximum message size\n // to the default value when a data channel is created at a later\n // stage. :(\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831\n canSendMaxMessageSize =\n browserDetails.version === 57 ? 65535 : 65536;\n } else {\n // FF >= 60 supports sending ~2 GiB\n canSendMaxMessageSize = 2147483637;\n }\n }\n return canSendMaxMessageSize;\n };\n\n const getMaxMessageSize = function(description, remoteIsFirefox) {\n // Note: 65536 bytes is the default value from the SDP spec. Also,\n // every implementation we know supports receiving 65536 bytes.\n let maxMessageSize = 65536;\n\n // FF 57 has a slightly incorrect default remote max message size, so\n // we need to adjust it here to avoid a failure when sending.\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1425697\n if (browserDetails.browser === 'firefox'\n && browserDetails.version === 57) {\n maxMessageSize = 65535;\n }\n\n const match = SDPUtils.matchPrefix(description.sdp,\n 'a=max-message-size:');\n if (match.length > 0) {\n maxMessageSize = parseInt(match[0].substring(19), 10);\n } else if (browserDetails.browser === 'firefox' &&\n remoteIsFirefox !== -1) {\n // If the maximum message size is not present in the remote SDP and\n // both local and remote are Firefox, the remote peer can receive\n // ~2 GiB.\n maxMessageSize = 2147483637;\n }\n return maxMessageSize;\n };\n\n const origSetRemoteDescription =\n window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription =\n function setRemoteDescription() {\n this._sctp = null;\n // Chrome decided to not expose .sctp in plan-b mode.\n // As usual, adapter.js has to do an 'ugly worakaround'\n // to cover up the mess.\n if (browserDetails.browser === 'chrome' && browserDetails.version >= 76) {\n const {sdpSemantics} = this.getConfiguration();\n if (sdpSemantics === 'plan-b') {\n Object.defineProperty(this, 'sctp', {\n get() {\n return typeof this._sctp === 'undefined' ? null : this._sctp;\n },\n enumerable: true,\n configurable: true,\n });\n }\n }\n\n if (sctpInDescription(arguments[0])) {\n // Check if the remote is FF.\n const isFirefox = getRemoteFirefoxVersion(arguments[0]);\n\n // Get the maximum message size the local peer is capable of sending\n const canSendMMS = getCanSendMaxMessageSize(isFirefox);\n\n // Get the maximum message size of the remote peer.\n const remoteMMS = getMaxMessageSize(arguments[0], isFirefox);\n\n // Determine final maximum message size\n let maxMessageSize;\n if (canSendMMS === 0 && remoteMMS === 0) {\n maxMessageSize = Number.POSITIVE_INFINITY;\n } else if (canSendMMS === 0 || remoteMMS === 0) {\n maxMessageSize = Math.max(canSendMMS, remoteMMS);\n } else {\n maxMessageSize = Math.min(canSendMMS, remoteMMS);\n }\n\n // Create a dummy RTCSctpTransport object and the 'maxMessageSize'\n // attribute.\n const sctp = {};\n Object.defineProperty(sctp, 'maxMessageSize', {\n get() {\n return maxMessageSize;\n }\n });\n this._sctp = sctp;\n }\n\n return origSetRemoteDescription.apply(this, arguments);\n };\n}\n\nexport function shimSendThrowTypeError(window) {\n if (!(window.RTCPeerConnection &&\n 'createDataChannel' in window.RTCPeerConnection.prototype)) {\n return;\n }\n\n // Note: Although Firefox >= 57 has a native implementation, the maximum\n // message size can be reset for all data channels at a later stage.\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831\n\n function wrapDcSend(dc, pc) {\n const origDataChannelSend = dc.send;\n dc.send = function send() {\n const data = arguments[0];\n const length = data.length || data.size || data.byteLength;\n if (dc.readyState === 'open' &&\n pc.sctp && length > pc.sctp.maxMessageSize) {\n throw new TypeError('Message too large (can send a maximum of ' +\n pc.sctp.maxMessageSize + ' bytes)');\n }\n return origDataChannelSend.apply(dc, arguments);\n };\n }\n const origCreateDataChannel =\n window.RTCPeerConnection.prototype.createDataChannel;\n window.RTCPeerConnection.prototype.createDataChannel =\n function createDataChannel() {\n const dataChannel = origCreateDataChannel.apply(this, arguments);\n wrapDcSend(dataChannel, this);\n return dataChannel;\n };\n utils.wrapPeerConnectionEvent(window, 'datachannel', e => {\n wrapDcSend(e.channel, e.target);\n return e;\n });\n}\n\n\n/* shims RTCConnectionState by pretending it is the same as iceConnectionState.\n * See https://bugs.chromium.org/p/webrtc/issues/detail?id=6145#c12\n * for why this is a valid hack in Chrome. In Firefox it is slightly incorrect\n * since DTLS failures would be hidden. See\n * https://bugzilla.mozilla.org/show_bug.cgi?id=1265827\n * for the Firefox tracking bug.\n */\nexport function shimConnectionState(window) {\n if (!window.RTCPeerConnection ||\n 'connectionState' in window.RTCPeerConnection.prototype) {\n return;\n }\n const proto = window.RTCPeerConnection.prototype;\n Object.defineProperty(proto, 'connectionState', {\n get() {\n return {\n completed: 'connected',\n checking: 'connecting'\n }[this.iceConnectionState] || this.iceConnectionState;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(proto, 'onconnectionstatechange', {\n get() {\n return this._onconnectionstatechange || null;\n },\n set(cb) {\n if (this._onconnectionstatechange) {\n this.removeEventListener('connectionstatechange',\n this._onconnectionstatechange);\n delete this._onconnectionstatechange;\n }\n if (cb) {\n this.addEventListener('connectionstatechange',\n this._onconnectionstatechange = cb);\n }\n },\n enumerable: true,\n configurable: true\n });\n\n ['setLocalDescription', 'setRemoteDescription'].forEach((method) => {\n const origMethod = proto[method];\n proto[method] = function() {\n if (!this._connectionstatechangepoly) {\n this._connectionstatechangepoly = e => {\n const pc = e.target;\n if (pc._lastConnectionState !== pc.connectionState) {\n pc._lastConnectionState = pc.connectionState;\n const newEvent = new Event('connectionstatechange', e);\n pc.dispatchEvent(newEvent);\n }\n return e;\n };\n this.addEventListener('iceconnectionstatechange',\n this._connectionstatechangepoly);\n }\n return origMethod.apply(this, arguments);\n };\n });\n}\n\nexport function removeExtmapAllowMixed(window, browserDetails) {\n /* remove a=extmap-allow-mixed for webrtc.org < M71 */\n if (!window.RTCPeerConnection) {\n return;\n }\n if (browserDetails.browser === 'chrome' && browserDetails.version >= 71) {\n return;\n }\n if (browserDetails.browser === 'safari' && browserDetails.version >= 605) {\n return;\n }\n const nativeSRD = window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription =\n function setRemoteDescription(desc) {\n if (desc && desc.sdp && desc.sdp.indexOf('\\na=extmap-allow-mixed') !== -1) {\n const sdp = desc.sdp.split('\\n').filter((line) => {\n return line.trim() !== 'a=extmap-allow-mixed';\n }).join('\\n');\n // Safari enforces read-only-ness of RTCSessionDescription fields.\n if (window.RTCSessionDescription &&\n desc instanceof window.RTCSessionDescription) {\n arguments[0] = new window.RTCSessionDescription({\n type: desc.type,\n sdp,\n });\n } else {\n desc.sdp = sdp;\n }\n }\n return nativeSRD.apply(this, arguments);\n };\n}\n\nexport function shimAddIceCandidateNullOrEmpty(window, browserDetails) {\n // Support for addIceCandidate(null or undefined)\n // as well as addIceCandidate({candidate: \"\", ...})\n // https://bugs.chromium.org/p/chromium/issues/detail?id=978582\n // Note: must be called before other polyfills which change the signature.\n if (!(window.RTCPeerConnection && window.RTCPeerConnection.prototype)) {\n return;\n }\n const nativeAddIceCandidate =\n window.RTCPeerConnection.prototype.addIceCandidate;\n if (!nativeAddIceCandidate || nativeAddIceCandidate.length === 0) {\n return;\n }\n window.RTCPeerConnection.prototype.addIceCandidate =\n function addIceCandidate() {\n if (!arguments[0]) {\n if (arguments[1]) {\n arguments[1].apply(null);\n }\n return Promise.resolve();\n }\n // Firefox 68+ emits and processes {candidate: \"\", ...}, ignore\n // in older versions.\n // Native support for ignoring exists for Chrome M77+.\n // Safari ignores as well, exact version unknown but works in the same\n // version that also ignores addIceCandidate(null).\n if (((browserDetails.browser === 'chrome' && browserDetails.version < 78)\n || (browserDetails.browser === 'firefox'\n && browserDetails.version < 68)\n || (browserDetails.browser === 'safari'))\n && arguments[0] && arguments[0].candidate === '') {\n return Promise.resolve();\n }\n return nativeAddIceCandidate.apply(this, arguments);\n };\n}\n\n// Note: Make sure to call this ahead of APIs that modify\n// setLocalDescription.length\nexport function shimParameterlessSetLocalDescription(window, browserDetails) {\n if (!(window.RTCPeerConnection && window.RTCPeerConnection.prototype)) {\n return;\n }\n const nativeSetLocalDescription =\n window.RTCPeerConnection.prototype.setLocalDescription;\n if (!nativeSetLocalDescription || nativeSetLocalDescription.length === 0) {\n return;\n }\n window.RTCPeerConnection.prototype.setLocalDescription =\n function setLocalDescription() {\n let desc = arguments[0] || {};\n if (typeof desc !== 'object' || (desc.type && desc.sdp)) {\n return nativeSetLocalDescription.apply(this, arguments);\n }\n // The remaining steps should technically happen when SLD comes off the\n // RTCPeerConnection's operations chain (not ahead of going on it), but\n // this is too difficult to shim. Instead, this shim only covers the\n // common case where the operations chain is empty. This is imperfect, but\n // should cover many cases. Rationale: Even if we can't reduce the glare\n // window to zero on imperfect implementations, there's value in tapping\n // into the perfect negotiation pattern that several browsers support.\n desc = {type: desc.type, sdp: desc.sdp};\n if (!desc.type) {\n switch (this.signalingState) {\n case 'stable':\n case 'have-local-offer':\n case 'have-remote-pranswer':\n desc.type = 'offer';\n break;\n default:\n desc.type = 'answer';\n break;\n }\n }\n if (desc.sdp || (desc.type !== 'offer' && desc.type !== 'answer')) {\n return nativeSetLocalDescription.apply(this, [desc]);\n }\n const func = desc.type === 'offer' ? this.createOffer : this.createAnswer;\n return func.apply(this)\n .then(d => nativeSetLocalDescription.apply(this, [d]));\n };\n}\n","/* eslint-env node */\n'use strict';\n\n// SDP helpers.\nconst SDPUtils = {};\n\n// Generate an alphanumeric identifier for cname or mids.\n// TODO: use UUIDs instead? https://gist.github.com/jed/982883\nSDPUtils.generateIdentifier = function() {\n return Math.random().toString(36).substring(2, 12);\n};\n\n// The RTCP CNAME used by all peerconnections from the same JS.\nSDPUtils.localCName = SDPUtils.generateIdentifier();\n\n// Splits SDP into lines, dealing with both CRLF and LF.\nSDPUtils.splitLines = function(blob) {\n return blob.trim().split('\\n').map(line => line.trim());\n};\n// Splits SDP into sessionpart and mediasections. Ensures CRLF.\nSDPUtils.splitSections = function(blob) {\n const parts = blob.split('\\nm=');\n return parts.map((part, index) => (index > 0 ?\n 'm=' + part : part).trim() + '\\r\\n');\n};\n\n// Returns the session description.\nSDPUtils.getDescription = function(blob) {\n const sections = SDPUtils.splitSections(blob);\n return sections && sections[0];\n};\n\n// Returns the individual media sections.\nSDPUtils.getMediaSections = function(blob) {\n const sections = SDPUtils.splitSections(blob);\n sections.shift();\n return sections;\n};\n\n// Returns lines that start with a certain prefix.\nSDPUtils.matchPrefix = function(blob, prefix) {\n return SDPUtils.splitLines(blob).filter(line => line.indexOf(prefix) === 0);\n};\n\n// Parses an ICE candidate line. Sample input:\n// candidate:702786350 2 udp 41819902 8.8.8.8 60769 typ relay raddr 8.8.8.8\n// rport 55996\"\n// Input can be prefixed with a=.\nSDPUtils.parseCandidate = function(line) {\n let parts;\n // Parse both variants.\n if (line.indexOf('a=candidate:') === 0) {\n parts = line.substring(12).split(' ');\n } else {\n parts = line.substring(10).split(' ');\n }\n\n const candidate = {\n foundation: parts[0],\n component: {1: 'rtp', 2: 'rtcp'}[parts[1]] || parts[1],\n protocol: parts[2].toLowerCase(),\n priority: parseInt(parts[3], 10),\n ip: parts[4],\n address: parts[4], // address is an alias for ip.\n port: parseInt(parts[5], 10),\n // skip parts[6] == 'typ'\n type: parts[7],\n };\n\n for (let i = 8; i < parts.length; i += 2) {\n switch (parts[i]) {\n case 'raddr':\n candidate.relatedAddress = parts[i + 1];\n break;\n case 'rport':\n candidate.relatedPort = parseInt(parts[i + 1], 10);\n break;\n case 'tcptype':\n candidate.tcpType = parts[i + 1];\n break;\n case 'ufrag':\n candidate.ufrag = parts[i + 1]; // for backward compatibility.\n candidate.usernameFragment = parts[i + 1];\n break;\n default: // extension handling, in particular ufrag. Don't overwrite.\n if (candidate[parts[i]] === undefined) {\n candidate[parts[i]] = parts[i + 1];\n }\n break;\n }\n }\n return candidate;\n};\n\n// Translates a candidate object into SDP candidate attribute.\n// This does not include the a= prefix!\nSDPUtils.writeCandidate = function(candidate) {\n const sdp = [];\n sdp.push(candidate.foundation);\n\n const component = candidate.component;\n if (component === 'rtp') {\n sdp.push(1);\n } else if (component === 'rtcp') {\n sdp.push(2);\n } else {\n sdp.push(component);\n }\n sdp.push(candidate.protocol.toUpperCase());\n sdp.push(candidate.priority);\n sdp.push(candidate.address || candidate.ip);\n sdp.push(candidate.port);\n\n const type = candidate.type;\n sdp.push('typ');\n sdp.push(type);\n if (type !== 'host' && candidate.relatedAddress &&\n candidate.relatedPort) {\n sdp.push('raddr');\n sdp.push(candidate.relatedAddress);\n sdp.push('rport');\n sdp.push(candidate.relatedPort);\n }\n if (candidate.tcpType && candidate.protocol.toLowerCase() === 'tcp') {\n sdp.push('tcptype');\n sdp.push(candidate.tcpType);\n }\n if (candidate.usernameFragment || candidate.ufrag) {\n sdp.push('ufrag');\n sdp.push(candidate.usernameFragment || candidate.ufrag);\n }\n return 'candidate:' + sdp.join(' ');\n};\n\n// Parses an ice-options line, returns an array of option tags.\n// Sample input:\n// a=ice-options:foo bar\nSDPUtils.parseIceOptions = function(line) {\n return line.substring(14).split(' ');\n};\n\n// Parses a rtpmap line, returns RTCRtpCoddecParameters. Sample input:\n// a=rtpmap:111 opus/48000/2\nSDPUtils.parseRtpMap = function(line) {\n let parts = line.substring(9).split(' ');\n const parsed = {\n payloadType: parseInt(parts.shift(), 10), // was: id\n };\n\n parts = parts[0].split('/');\n\n parsed.name = parts[0];\n parsed.clockRate = parseInt(parts[1], 10); // was: clockrate\n parsed.channels = parts.length === 3 ? parseInt(parts[2], 10) : 1;\n // legacy alias, got renamed back to channels in ORTC.\n parsed.numChannels = parsed.channels;\n return parsed;\n};\n\n// Generates a rtpmap line from RTCRtpCodecCapability or\n// RTCRtpCodecParameters.\nSDPUtils.writeRtpMap = function(codec) {\n let pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n const channels = codec.channels || codec.numChannels || 1;\n return 'a=rtpmap:' + pt + ' ' + codec.name + '/' + codec.clockRate +\n (channels !== 1 ? '/' + channels : '') + '\\r\\n';\n};\n\n// Parses a extmap line (headerextension from RFC 5285). Sample input:\n// a=extmap:2 urn:ietf:params:rtp-hdrext:toffset\n// a=extmap:2/sendonly urn:ietf:params:rtp-hdrext:toffset\nSDPUtils.parseExtmap = function(line) {\n const parts = line.substring(9).split(' ');\n return {\n id: parseInt(parts[0], 10),\n direction: parts[0].indexOf('/') > 0 ? parts[0].split('/')[1] : 'sendrecv',\n uri: parts[1],\n attributes: parts.slice(2).join(' '),\n };\n};\n\n// Generates an extmap line from RTCRtpHeaderExtensionParameters or\n// RTCRtpHeaderExtension.\nSDPUtils.writeExtmap = function(headerExtension) {\n return 'a=extmap:' + (headerExtension.id || headerExtension.preferredId) +\n (headerExtension.direction && headerExtension.direction !== 'sendrecv'\n ? '/' + headerExtension.direction\n : '') +\n ' ' + headerExtension.uri +\n (headerExtension.attributes ? ' ' + headerExtension.attributes : '') +\n '\\r\\n';\n};\n\n// Parses a fmtp line, returns dictionary. Sample input:\n// a=fmtp:96 vbr=on;cng=on\n// Also deals with vbr=on; cng=on\nSDPUtils.parseFmtp = function(line) {\n const parsed = {};\n let kv;\n const parts = line.substring(line.indexOf(' ') + 1).split(';');\n for (let j = 0; j < parts.length; j++) {\n kv = parts[j].trim().split('=');\n parsed[kv[0].trim()] = kv[1];\n }\n return parsed;\n};\n\n// Generates a fmtp line from RTCRtpCodecCapability or RTCRtpCodecParameters.\nSDPUtils.writeFmtp = function(codec) {\n let line = '';\n let pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n if (codec.parameters && Object.keys(codec.parameters).length) {\n const params = [];\n Object.keys(codec.parameters).forEach(param => {\n if (codec.parameters[param] !== undefined) {\n params.push(param + '=' + codec.parameters[param]);\n } else {\n params.push(param);\n }\n });\n line += 'a=fmtp:' + pt + ' ' + params.join(';') + '\\r\\n';\n }\n return line;\n};\n\n// Parses a rtcp-fb line, returns RTCPRtcpFeedback object. Sample input:\n// a=rtcp-fb:98 nack rpsi\nSDPUtils.parseRtcpFb = function(line) {\n const parts = line.substring(line.indexOf(' ') + 1).split(' ');\n return {\n type: parts.shift(),\n parameter: parts.join(' '),\n };\n};\n\n// Generate a=rtcp-fb lines from RTCRtpCodecCapability or RTCRtpCodecParameters.\nSDPUtils.writeRtcpFb = function(codec) {\n let lines = '';\n let pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n if (codec.rtcpFeedback && codec.rtcpFeedback.length) {\n // FIXME: special handling for trr-int?\n codec.rtcpFeedback.forEach(fb => {\n lines += 'a=rtcp-fb:' + pt + ' ' + fb.type +\n (fb.parameter && fb.parameter.length ? ' ' + fb.parameter : '') +\n '\\r\\n';\n });\n }\n return lines;\n};\n\n// Parses a RFC 5576 ssrc media attribute. Sample input:\n// a=ssrc:3735928559 cname:something\nSDPUtils.parseSsrcMedia = function(line) {\n const sp = line.indexOf(' ');\n const parts = {\n ssrc: parseInt(line.substring(7, sp), 10),\n };\n const colon = line.indexOf(':', sp);\n if (colon > -1) {\n parts.attribute = line.substring(sp + 1, colon);\n parts.value = line.substring(colon + 1);\n } else {\n parts.attribute = line.substring(sp + 1);\n }\n return parts;\n};\n\n// Parse a ssrc-group line (see RFC 5576). Sample input:\n// a=ssrc-group:semantics 12 34\nSDPUtils.parseSsrcGroup = function(line) {\n const parts = line.substring(13).split(' ');\n return {\n semantics: parts.shift(),\n ssrcs: parts.map(ssrc => parseInt(ssrc, 10)),\n };\n};\n\n// Extracts the MID (RFC 5888) from a media section.\n// Returns the MID or undefined if no mid line was found.\nSDPUtils.getMid = function(mediaSection) {\n const mid = SDPUtils.matchPrefix(mediaSection, 'a=mid:')[0];\n if (mid) {\n return mid.substring(6);\n }\n};\n\n// Parses a fingerprint line for DTLS-SRTP.\nSDPUtils.parseFingerprint = function(line) {\n const parts = line.substring(14).split(' ');\n return {\n algorithm: parts[0].toLowerCase(), // algorithm is case-sensitive in Edge.\n value: parts[1].toUpperCase(), // the definition is upper-case in RFC 4572.\n };\n};\n\n// Extracts DTLS parameters from SDP media section or sessionpart.\n// FIXME: for consistency with other functions this should only\n// get the fingerprint line as input. See also getIceParameters.\nSDPUtils.getDtlsParameters = function(mediaSection, sessionpart) {\n const lines = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=fingerprint:');\n // Note: a=setup line is ignored since we use the 'auto' role in Edge.\n return {\n role: 'auto',\n fingerprints: lines.map(SDPUtils.parseFingerprint),\n };\n};\n\n// Serializes DTLS parameters to SDP.\nSDPUtils.writeDtlsParameters = function(params, setupType) {\n let sdp = 'a=setup:' + setupType + '\\r\\n';\n params.fingerprints.forEach(fp => {\n sdp += 'a=fingerprint:' + fp.algorithm + ' ' + fp.value + '\\r\\n';\n });\n return sdp;\n};\n\n// Parses a=crypto lines into\n// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#dictionary-rtcsrtpsdesparameters-members\nSDPUtils.parseCryptoLine = function(line) {\n const parts = line.substring(9).split(' ');\n return {\n tag: parseInt(parts[0], 10),\n cryptoSuite: parts[1],\n keyParams: parts[2],\n sessionParams: parts.slice(3),\n };\n};\n\nSDPUtils.writeCryptoLine = function(parameters) {\n return 'a=crypto:' + parameters.tag + ' ' +\n parameters.cryptoSuite + ' ' +\n (typeof parameters.keyParams === 'object'\n ? SDPUtils.writeCryptoKeyParams(parameters.keyParams)\n : parameters.keyParams) +\n (parameters.sessionParams ? ' ' + parameters.sessionParams.join(' ') : '') +\n '\\r\\n';\n};\n\n// Parses the crypto key parameters into\n// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#rtcsrtpkeyparam*\nSDPUtils.parseCryptoKeyParams = function(keyParams) {\n if (keyParams.indexOf('inline:') !== 0) {\n return null;\n }\n const parts = keyParams.substring(7).split('|');\n return {\n keyMethod: 'inline',\n keySalt: parts[0],\n lifeTime: parts[1],\n mkiValue: parts[2] ? parts[2].split(':')[0] : undefined,\n mkiLength: parts[2] ? parts[2].split(':')[1] : undefined,\n };\n};\n\nSDPUtils.writeCryptoKeyParams = function(keyParams) {\n return keyParams.keyMethod + ':'\n + keyParams.keySalt +\n (keyParams.lifeTime ? '|' + keyParams.lifeTime : '') +\n (keyParams.mkiValue && keyParams.mkiLength\n ? '|' + keyParams.mkiValue + ':' + keyParams.mkiLength\n : '');\n};\n\n// Extracts all SDES parameters.\nSDPUtils.getCryptoParameters = function(mediaSection, sessionpart) {\n const lines = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=crypto:');\n return lines.map(SDPUtils.parseCryptoLine);\n};\n\n// Parses ICE information from SDP media section or sessionpart.\n// FIXME: for consistency with other functions this should only\n// get the ice-ufrag and ice-pwd lines as input.\nSDPUtils.getIceParameters = function(mediaSection, sessionpart) {\n const ufrag = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=ice-ufrag:')[0];\n const pwd = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=ice-pwd:')[0];\n if (!(ufrag && pwd)) {\n return null;\n }\n return {\n usernameFragment: ufrag.substring(12),\n password: pwd.substring(10),\n };\n};\n\n// Serializes ICE parameters to SDP.\nSDPUtils.writeIceParameters = function(params) {\n let sdp = 'a=ice-ufrag:' + params.usernameFragment + '\\r\\n' +\n 'a=ice-pwd:' + params.password + '\\r\\n';\n if (params.iceLite) {\n sdp += 'a=ice-lite\\r\\n';\n }\n return sdp;\n};\n\n// Parses the SDP media section and returns RTCRtpParameters.\nSDPUtils.parseRtpParameters = function(mediaSection) {\n const description = {\n codecs: [],\n headerExtensions: [],\n fecMechanisms: [],\n rtcp: [],\n };\n const lines = SDPUtils.splitLines(mediaSection);\n const mline = lines[0].split(' ');\n description.profile = mline[2];\n for (let i = 3; i < mline.length; i++) { // find all codecs from mline[3..]\n const pt = mline[i];\n const rtpmapline = SDPUtils.matchPrefix(\n mediaSection, 'a=rtpmap:' + pt + ' ')[0];\n if (rtpmapline) {\n const codec = SDPUtils.parseRtpMap(rtpmapline);\n const fmtps = SDPUtils.matchPrefix(\n mediaSection, 'a=fmtp:' + pt + ' ');\n // Only the first a=fmtp: is considered.\n codec.parameters = fmtps.length ? SDPUtils.parseFmtp(fmtps[0]) : {};\n codec.rtcpFeedback = SDPUtils.matchPrefix(\n mediaSection, 'a=rtcp-fb:' + pt + ' ')\n .map(SDPUtils.parseRtcpFb);\n description.codecs.push(codec);\n // parse FEC mechanisms from rtpmap lines.\n switch (codec.name.toUpperCase()) {\n case 'RED':\n case 'ULPFEC':\n description.fecMechanisms.push(codec.name.toUpperCase());\n break;\n default: // only RED and ULPFEC are recognized as FEC mechanisms.\n break;\n }\n }\n }\n SDPUtils.matchPrefix(mediaSection, 'a=extmap:').forEach(line => {\n description.headerExtensions.push(SDPUtils.parseExtmap(line));\n });\n const wildcardRtcpFb = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-fb:* ')\n .map(SDPUtils.parseRtcpFb);\n description.codecs.forEach(codec => {\n wildcardRtcpFb.forEach(fb=> {\n const duplicate = codec.rtcpFeedback.find(existingFeedback => {\n return existingFeedback.type === fb.type &&\n existingFeedback.parameter === fb.parameter;\n });\n if (!duplicate) {\n codec.rtcpFeedback.push(fb);\n }\n });\n });\n // FIXME: parse rtcp.\n return description;\n};\n\n// Generates parts of the SDP media section describing the capabilities /\n// parameters.\nSDPUtils.writeRtpDescription = function(kind, caps) {\n let sdp = '';\n\n // Build the mline.\n sdp += 'm=' + kind + ' ';\n sdp += caps.codecs.length > 0 ? '9' : '0'; // reject if no codecs.\n sdp += ' ' + (caps.profile || 'UDP/TLS/RTP/SAVPF') + ' ';\n sdp += caps.codecs.map(codec => {\n if (codec.preferredPayloadType !== undefined) {\n return codec.preferredPayloadType;\n }\n return codec.payloadType;\n }).join(' ') + '\\r\\n';\n\n sdp += 'c=IN IP4 0.0.0.0\\r\\n';\n sdp += 'a=rtcp:9 IN IP4 0.0.0.0\\r\\n';\n\n // Add a=rtpmap lines for each codec. Also fmtp and rtcp-fb.\n caps.codecs.forEach(codec => {\n sdp += SDPUtils.writeRtpMap(codec);\n sdp += SDPUtils.writeFmtp(codec);\n sdp += SDPUtils.writeRtcpFb(codec);\n });\n let maxptime = 0;\n caps.codecs.forEach(codec => {\n if (codec.maxptime > maxptime) {\n maxptime = codec.maxptime;\n }\n });\n if (maxptime > 0) {\n sdp += 'a=maxptime:' + maxptime + '\\r\\n';\n }\n\n if (caps.headerExtensions) {\n caps.headerExtensions.forEach(extension => {\n sdp += SDPUtils.writeExtmap(extension);\n });\n }\n // FIXME: write fecMechanisms.\n return sdp;\n};\n\n// Parses the SDP media section and returns an array of\n// RTCRtpEncodingParameters.\nSDPUtils.parseRtpEncodingParameters = function(mediaSection) {\n const encodingParameters = [];\n const description = SDPUtils.parseRtpParameters(mediaSection);\n const hasRed = description.fecMechanisms.indexOf('RED') !== -1;\n const hasUlpfec = description.fecMechanisms.indexOf('ULPFEC') !== -1;\n\n // filter a=ssrc:... cname:, ignore PlanB-msid\n const ssrcs = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:')\n .map(line => SDPUtils.parseSsrcMedia(line))\n .filter(parts => parts.attribute === 'cname');\n const primarySsrc = ssrcs.length > 0 && ssrcs[0].ssrc;\n let secondarySsrc;\n\n const flows = SDPUtils.matchPrefix(mediaSection, 'a=ssrc-group:FID')\n .map(line => {\n const parts = line.substring(17).split(' ');\n return parts.map(part => parseInt(part, 10));\n });\n if (flows.length > 0 && flows[0].length > 1 && flows[0][0] === primarySsrc) {\n secondarySsrc = flows[0][1];\n }\n\n description.codecs.forEach(codec => {\n if (codec.name.toUpperCase() === 'RTX' && codec.parameters.apt) {\n let encParam = {\n ssrc: primarySsrc,\n codecPayloadType: parseInt(codec.parameters.apt, 10),\n };\n if (primarySsrc && secondarySsrc) {\n encParam.rtx = {ssrc: secondarySsrc};\n }\n encodingParameters.push(encParam);\n if (hasRed) {\n encParam = JSON.parse(JSON.stringify(encParam));\n encParam.fec = {\n ssrc: primarySsrc,\n mechanism: hasUlpfec ? 'red+ulpfec' : 'red',\n };\n encodingParameters.push(encParam);\n }\n }\n });\n if (encodingParameters.length === 0 && primarySsrc) {\n encodingParameters.push({\n ssrc: primarySsrc,\n });\n }\n\n // we support both b=AS and b=TIAS but interpret AS as TIAS.\n let bandwidth = SDPUtils.matchPrefix(mediaSection, 'b=');\n if (bandwidth.length) {\n if (bandwidth[0].indexOf('b=TIAS:') === 0) {\n bandwidth = parseInt(bandwidth[0].substring(7), 10);\n } else if (bandwidth[0].indexOf('b=AS:') === 0) {\n // use formula from JSEP to convert b=AS to TIAS value.\n bandwidth = parseInt(bandwidth[0].substring(5), 10) * 1000 * 0.95\n - (50 * 40 * 8);\n } else {\n bandwidth = undefined;\n }\n encodingParameters.forEach(params => {\n params.maxBitrate = bandwidth;\n });\n }\n return encodingParameters;\n};\n\n// parses http://draft.ortc.org/#rtcrtcpparameters*\nSDPUtils.parseRtcpParameters = function(mediaSection) {\n const rtcpParameters = {};\n\n // Gets the first SSRC. Note that with RTX there might be multiple\n // SSRCs.\n const remoteSsrc = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:')\n .map(line => SDPUtils.parseSsrcMedia(line))\n .filter(obj => obj.attribute === 'cname')[0];\n if (remoteSsrc) {\n rtcpParameters.cname = remoteSsrc.value;\n rtcpParameters.ssrc = remoteSsrc.ssrc;\n }\n\n // Edge uses the compound attribute instead of reducedSize\n // compound is !reducedSize\n const rsize = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-rsize');\n rtcpParameters.reducedSize = rsize.length > 0;\n rtcpParameters.compound = rsize.length === 0;\n\n // parses the rtcp-mux attrіbute.\n // Note that Edge does not support unmuxed RTCP.\n const mux = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-mux');\n rtcpParameters.mux = mux.length > 0;\n\n return rtcpParameters;\n};\n\nSDPUtils.writeRtcpParameters = function(rtcpParameters) {\n let sdp = '';\n if (rtcpParameters.reducedSize) {\n sdp += 'a=rtcp-rsize\\r\\n';\n }\n if (rtcpParameters.mux) {\n sdp += 'a=rtcp-mux\\r\\n';\n }\n if (rtcpParameters.ssrc !== undefined && rtcpParameters.cname) {\n sdp += 'a=ssrc:' + rtcpParameters.ssrc +\n ' cname:' + rtcpParameters.cname + '\\r\\n';\n }\n return sdp;\n};\n\n\n// parses either a=msid: or a=ssrc:... msid lines and returns\n// the id of the MediaStream and MediaStreamTrack.\nSDPUtils.parseMsid = function(mediaSection) {\n let parts;\n const spec = SDPUtils.matchPrefix(mediaSection, 'a=msid:');\n if (spec.length === 1) {\n parts = spec[0].substring(7).split(' ');\n return {stream: parts[0], track: parts[1]};\n }\n const planB = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:')\n .map(line => SDPUtils.parseSsrcMedia(line))\n .filter(msidParts => msidParts.attribute === 'msid');\n if (planB.length > 0) {\n parts = planB[0].value.split(' ');\n return {stream: parts[0], track: parts[1]};\n }\n};\n\n// SCTP\n// parses draft-ietf-mmusic-sctp-sdp-26 first and falls back\n// to draft-ietf-mmusic-sctp-sdp-05\nSDPUtils.parseSctpDescription = function(mediaSection) {\n const mline = SDPUtils.parseMLine(mediaSection);\n const maxSizeLine = SDPUtils.matchPrefix(mediaSection, 'a=max-message-size:');\n let maxMessageSize;\n if (maxSizeLine.length > 0) {\n maxMessageSize = parseInt(maxSizeLine[0].substring(19), 10);\n }\n if (isNaN(maxMessageSize)) {\n maxMessageSize = 65536;\n }\n const sctpPort = SDPUtils.matchPrefix(mediaSection, 'a=sctp-port:');\n if (sctpPort.length > 0) {\n return {\n port: parseInt(sctpPort[0].substring(12), 10),\n protocol: mline.fmt,\n maxMessageSize,\n };\n }\n const sctpMapLines = SDPUtils.matchPrefix(mediaSection, 'a=sctpmap:');\n if (sctpMapLines.length > 0) {\n const parts = sctpMapLines[0]\n .substring(10)\n .split(' ');\n return {\n port: parseInt(parts[0], 10),\n protocol: parts[1],\n maxMessageSize,\n };\n }\n};\n\n// SCTP\n// outputs the draft-ietf-mmusic-sctp-sdp-26 version that all browsers\n// support by now receiving in this format, unless we originally parsed\n// as the draft-ietf-mmusic-sctp-sdp-05 format (indicated by the m-line\n// protocol of DTLS/SCTP -- without UDP/ or TCP/)\nSDPUtils.writeSctpDescription = function(media, sctp) {\n let output = [];\n if (media.protocol !== 'DTLS/SCTP') {\n output = [\n 'm=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.protocol + '\\r\\n',\n 'c=IN IP4 0.0.0.0\\r\\n',\n 'a=sctp-port:' + sctp.port + '\\r\\n',\n ];\n } else {\n output = [\n 'm=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.port + '\\r\\n',\n 'c=IN IP4 0.0.0.0\\r\\n',\n 'a=sctpmap:' + sctp.port + ' ' + sctp.protocol + ' 65535\\r\\n',\n ];\n }\n if (sctp.maxMessageSize !== undefined) {\n output.push('a=max-message-size:' + sctp.maxMessageSize + '\\r\\n');\n }\n return output.join('');\n};\n\n// Generate a session ID for SDP.\n// https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-20#section-5.2.1\n// recommends using a cryptographically random +ve 64-bit value\n// but right now this should be acceptable and within the right range\nSDPUtils.generateSessionId = function() {\n return Math.random().toString().substr(2, 22);\n};\n\n// Write boiler plate for start of SDP\n// sessId argument is optional - if not supplied it will\n// be generated randomly\n// sessVersion is optional and defaults to 2\n// sessUser is optional and defaults to 'thisisadapterortc'\nSDPUtils.writeSessionBoilerplate = function(sessId, sessVer, sessUser) {\n let sessionId;\n const version = sessVer !== undefined ? sessVer : 2;\n if (sessId) {\n sessionId = sessId;\n } else {\n sessionId = SDPUtils.generateSessionId();\n }\n const user = sessUser || 'thisisadapterortc';\n // FIXME: sess-id should be an NTP timestamp.\n return 'v=0\\r\\n' +\n 'o=' + user + ' ' + sessionId + ' ' + version +\n ' IN IP4 127.0.0.1\\r\\n' +\n 's=-\\r\\n' +\n 't=0 0\\r\\n';\n};\n\n// Gets the direction from the mediaSection or the sessionpart.\nSDPUtils.getDirection = function(mediaSection, sessionpart) {\n // Look for sendrecv, sendonly, recvonly, inactive, default to sendrecv.\n const lines = SDPUtils.splitLines(mediaSection);\n for (let i = 0; i < lines.length; i++) {\n switch (lines[i]) {\n case 'a=sendrecv':\n case 'a=sendonly':\n case 'a=recvonly':\n case 'a=inactive':\n return lines[i].substring(2);\n default:\n // FIXME: What should happen here?\n }\n }\n if (sessionpart) {\n return SDPUtils.getDirection(sessionpart);\n }\n return 'sendrecv';\n};\n\nSDPUtils.getKind = function(mediaSection) {\n const lines = SDPUtils.splitLines(mediaSection);\n const mline = lines[0].split(' ');\n return mline[0].substring(2);\n};\n\nSDPUtils.isRejected = function(mediaSection) {\n return mediaSection.split(' ', 2)[1] === '0';\n};\n\nSDPUtils.parseMLine = function(mediaSection) {\n const lines = SDPUtils.splitLines(mediaSection);\n const parts = lines[0].substring(2).split(' ');\n return {\n kind: parts[0],\n port: parseInt(parts[1], 10),\n protocol: parts[2],\n fmt: parts.slice(3).join(' '),\n };\n};\n\nSDPUtils.parseOLine = function(mediaSection) {\n const line = SDPUtils.matchPrefix(mediaSection, 'o=')[0];\n const parts = line.substring(2).split(' ');\n return {\n username: parts[0],\n sessionId: parts[1],\n sessionVersion: parseInt(parts[2], 10),\n netType: parts[3],\n addressType: parts[4],\n address: parts[5],\n };\n};\n\n// a very naive interpretation of a valid SDP.\nSDPUtils.isValidSDP = function(blob) {\n if (typeof blob !== 'string' || blob.length === 0) {\n return false;\n }\n const lines = SDPUtils.splitLines(blob);\n for (let i = 0; i < lines.length; i++) {\n if (lines[i].length < 2 || lines[i].charAt(1) !== '=') {\n return false;\n }\n // TODO: check the modifier a bit more.\n }\n return true;\n};\n\n// Expose public methods.\nif (typeof module === 'object') {\n module.exports = SDPUtils;\n}\n","import EventTarget from \"./EventTarget\";\nimport MWSE from \"./index\";\nimport Peer from \"./Peer\";\nimport { RoomInfo } from \"./RoomInfo\";\n\nexport interface IRoomOptions\n{\n name: string;\n description?:string;\n joinType: \"free\"|\"invite\"|\"password\"|\"lock\";\n credential?: string;\n ifexistsJoin?: boolean;\n accessType?: \"public\"|\"private\";\n notifyActionInvite?: boolean;\n notifyActionJoined?: boolean;\n notifyActionEjected?: boolean;\n autoFetchInfo?:boolean\n}\n\n\nexport default class Room extends EventTarget\n{\n public mwse : MWSE;\n public options! : IRoomOptions;\n public roomId? : string;\n public accessType? : \"public\"|\"private\";\n public description? : string;\n public joinType? : \"free\"|\"invite\"|\"password\"|\"lock\";\n public name? : string;\n public owner? : string;\n public peers : Map = new Map();\n public info : RoomInfo;\n\n constructor(wsts:MWSE){\n super();\n this.mwse = wsts;\n this.info = new RoomInfo(this);\n }\n public setRoomOptions(options : IRoomOptions | string)\n {\n if(typeof options == \"string\")\n {\n this.roomId = options;\n }else{\n let defaultOptions = {\n joinType: \"free\",\n ifexistsJoin: true,\n accessType: \"private\",\n notifyActionInvite: true,\n notifyActionJoined: true,\n notifyActionEjected: true,\n autoFetchInfo: true\n };\n Object.assign(defaultOptions,options);\n this.options = defaultOptions as IRoomOptions;\n }\n }\n \n setRoomId(uuid: string){\n this.roomId = uuid;\n }\n async createRoom(roomOptions : IRoomOptions){\n let options = this.options || roomOptions;\n let result = await this.mwse.EventPooling.request({\n type:'create-room',\n ...options\n });\n if(result.status == 'fail')\n {\n if(result.message == \"ALREADY-EXISTS\" && this.options.ifexistsJoin)\n {\n return this.join();\n }\n throw new Error(result.message || result.messages);\n }else{\n this.options = {\n ...this.options,\n ...result.room\n };\n this.roomId = result.room.id;\n this.mwse.rooms.set(this.roomId as string, this);\n }\n }\n async join(){\n let result = await this.mwse.EventPooling.request({\n type:'joinroom',\n name: this.options.name,\n credential: this.options.credential,\n autoFetchInfo: this.options.autoFetchInfo || false\n });\n if(result.status == 'fail')\n {\n throw new Error(result.message);\n }else{\n this.options = {\n ...this.options,\n ...result.room\n };\n if(result.info)\n {\n this.info.info = result.info;\n };\n this.roomId = result.room.id;\n this.mwse.rooms.set(this.roomId as string, this);\n }\n }\n async eject(){\n let {type} = await this.mwse.EventPooling.request({\n type:'ejectroom',\n roomId: this.roomId\n });\n this.peers.clear();\n if(type == 'success')\n {\n this.mwse.rooms.delete(this.roomId as string);\n }\n }\n async send(pack: any, wom:boolean = false){\n await this.mwse.EventPooling.request({\n type:'pack/room',\n pack,\n to: this.roomId,\n wom\n });\n }\n async fetchPeers(filter?:{[key:string]:any}, onlyNumber:boolean = false) : Promise\n {\n if(onlyNumber)\n {\n let {count} = await this.mwse.EventPooling.request({\n type:'room/peer-count',\n roomId: this.roomId,\n filter: filter || {}\n }) as {count:Number};\n return count;\n }else{\n let {status, peers} = await this.mwse.EventPooling.request({\n type:'room-peers',\n roomId: this.roomId,\n filter: filter || {}\n }) as {status:\"success\"|\"fail\", peers: string[]};\n \n let cup : Peer[] = [];\n \n if(status == 'fail')\n {\n throw new Error(\"Cant using peers on room\")\n }else if(status == 'success'){\n for (const peerid of peers) {\n let peer = this.mwse.peer(peerid);\n cup.push(peer);\n this.peers.set(peerid, peer);\n }\n };\n return cup;\n }\n }\n}","import Room from \"./Room\";\n\nexport class RoomInfo\n{\n public room : Room;\n public info : {[key:string]: any} = {};\n constructor(room : Room){\n this.room = room;\n };\n public async fetch(name?:string)\n {\n if(name)\n {\n let rinfo = await this.room.mwse.EventPooling.request(({\n type: \"room/getinfo\",\n roomId: this.room.roomId,\n name\n }));\n if(rinfo.status == \"success\")\n {\n this.info = rinfo.info;\n }else console.warn(rinfo.message);\n }else{\n let rinfo = await this.room.mwse.EventPooling.request(({\n type: \"peer/info\",\n peer: this.room.roomId\n }));\n if(rinfo.status == \"success\")\n {\n this.info = rinfo.info;\n }else console.warn(rinfo.message);\n };\n return this.info;\n }\n public set(name: string, value: string | number)\n {\n this.info[name] = value;\n this.room.mwse.WSTSProtocol.SendOnly({\n type: \"room/setinfo\",\n roomId: this.room.roomId,\n name,\n value\n });\n }\n public get(name?:string)\n {\n return name ? this.info[name] : this.info;\n }\n}","import MWSE from \"./index\";\n\nexport interface Message {\n [key:string|number]:any;\n}\nexport default class WSTSProtocol\n{\n public mwse : MWSE;\n constructor(wsts:MWSE){\n this.mwse = wsts;\n this.addListener();\n }\n public addListener()\n {\n this.mwse.server?.onRecaivePack((pack)=>{\n this.PackAnalyze(pack)\n })\n }\n public SendRaw(pack: Message)\n {\n this.mwse.server.tranferToServer(pack);\n }\n public SendOnly(pack: Message)\n {\n this.mwse.server.tranferToServer([pack,'R']);\n }\n public SendRequest(pack: Message, id: number)\n {\n this.mwse.server.tranferToServer([pack, id, 'R']);\n }\n public StartStream(pack: Message, id: number)\n {\n this.mwse.server.tranferToServer([pack, id, 'S']);\n }\n public PackAnalyze(data:any)\n {\n let [payload, id, action] = data;\n if(typeof id === 'number')\n {\n let callback = this.mwse.EventPooling.events.get(id);\n if(callback)\n {\n callback[0](payload, action);\n switch(action)\n {\n case 'E':{ // [E]ND flag\n this.mwse.EventPooling.events.delete(id);\n break;\n }\n case 'S': // [S]TREAM flag\n default:{\n break;\n }\n }\n }else console.warn(\"Missing event sended from server\");\n }else{\n let signals = this.mwse.EventPooling.signals.get(id);\n if(signals)\n {\n for (const callback of signals) {\n callback(payload);\n }\n }else console.warn(\"Missing event sended from server\");\n }\n }\n}"],"names":["$parcel$export","e","n","v","s","Object","defineProperty","get","set","enumerable","configurable","$parcel$interopDefault","a","__esModule","default","$201ddc79d766b86c$export$98b66c25bb38499d","ws","endpoint","autoPair","connected","autoReconnect","autoReconnectTimeout","autoReconnectTimer","constructor","options","URL","timeout","connect","clearTimeout","WebSocket","href","addWSEvents","disconnect","close","addEventListener","eventOpen","eventClose","eventError","data","eventMessage","callback","activeConnectionEvent","setTimeout","recaivePackEvent","onRecaivePack","func","push","onActive","$data","JSON","parse","tranferToServer","send","stringify","$7bc29f3852fca8a1$export$2e2bcd8739ae039","wsts","events","Map","signals","requests","count","request","msg","Promise","ok","rej","id","WSTSProtocol","SendRequest","stream","StartStream","signal","event","T","$639a7a490074f3f2$export$2e2bcd8739ae039","emit","eventName","args","on","activeScope","scope","f","$707287ab76ae8d6a$export$cd59d3e68ede65a1","mwse","APNumber","APShortCode","APIPAddress","allocAPIPAddress","status","ip","EventPooling","type","Error","allocAPNumber","number","allocAPShortCode","code","reallocAPIPAddress","reallocAPNumber","reallocAPShortCode","releaseAPIPAddress","undefined","releaseAPNumber","releaseAPShortCode","queryAPIPAddress","socket","whois","queryAPNumber","queryAPShortCode","$d7d20b916ab000fe$export$f3bd5f68ae16de","peer","info","fetch","name","rinfo","socketId","console","warn","message","value","SendOnly","$35583cf39f4111ff$var$logDisabled_","$35583cf39f4111ff$var$deprecationWarnings_","$35583cf39f4111ff$export$e3c02be309be1f23","uastring","expr","pos","match","length","parseInt","$35583cf39f4111ff$export$1f48841962b828b1","window1","eventNameToWrap","wrapper","RTCPeerConnection","proto","prototype","nativeAddEventListener","nativeEventName","cb","apply","arguments","wrappedCallback","modifiedEvent","handleEvent","_eventMap","nativeRemoveEventListener","removeEventListener","has","unwrappedCb","delete","size","keys","$35583cf39f4111ff$export$bef1f36f5486a6a3","window","log","$35583cf39f4111ff$export$cdd73fc4100a6ef4","oldMethod","newMethod","$35583cf39f4111ff$var$isObject","val","toString","call","$35583cf39f4111ff$export$93439ffc3f787d51","result","track","outbound","streamStatsType","filteredResult","trackStats","forEach","trackIdentifier","trackStat","stats","trackId","$35583cf39f4111ff$export$571b373e75babb58","base","resultSet","endsWith","$9f6c30de484136d4$var$IMessageSymbase","$e3f02d0a98ccb0db$exports","$3b9679f8ab9bc604$export$1ed4910f4d37dc5e","browserDetails","navigator","mediaDevices","constraintsToChrome_","c","mandatory","optional","cc","key","r","ideal","exact","min","max","oldname_","prefix","charAt","toUpperCase","slice","oc","mix","advanced","concat","shimConstraints_","constraints","version","audio","remap","obj","b","video","face","facingMode","getSupportedFacingModeLies","getSupportedConstraints","matches","enumerateDevices","then","devices","dev","filter","d","kind","find","some","label","toLowerCase","includes","deviceId","$3b9679f8ab9bc604$var$logging","shimError_","PermissionDeniedError","PermissionDismissedError","InvalidStateError","DevicesNotFoundError","ConstraintNotSatisfiedError","TrackStartError","MediaDeviceFailedDueToShutdown","MediaDeviceKillSwitchOn","TabCaptureError","ScreenCaptureError","DeviceCaptureError","constraint","constraintName","getUserMedia","getUserMedia_","onSuccess","onError","webkitGetUserMedia","bind","origGetUserMedia","cs","getAudioTracks","getVideoTracks","getTracks","stop","DOMException","reject","$26c6446bf842b72e$export$97270b87351d9c04","getSourceId","error","getDisplayMedia","sourceId","widthSpecified","width","heightSpecified","height","frameRateSpecified","frameRate","chromeMediaSource","chromeMediaSourceId","maxFrameRate","maxWidth","maxHeight","$e3f02d0a98ccb0db$export$33ee24e7a300bcd1","MediaStream","webkitMediaStream","$e3f02d0a98ccb0db$export$f358708f68ab068","transceiver","receiver","_ontrack","origSetRemoteDescription","setRemoteDescription","_ontrackpoly","te","getReceivers","Event","streams","dispatchEvent","$e3f02d0a98ccb0db$export$a41a030a2842f5d6","shimSenderWithDtmf","pc","dtmf","_dtmf","createDTMFSender","_pc","getSenders","_senders","origAddTrack","addTrack","sender","origRemoveTrack","removeTrack","idx","indexOf","splice","origAddStream","addStream","origRemoveStream","removeStream","RTCRtpSender","origGetSenders","senders","$e3f02d0a98ccb0db$export$90608323826f0b17","origGetStats","getStats","selector","onSucc","onErr","fixChromeStats_","response","standardReport","reports","report","standardStats","timestamp","localcandidate","remotecandidate","names","stat","makeMapStats","map","resolve","$e3f02d0a98ccb0db$export$f2f0f2338114eb4b","RTCRtpReceiver","origGetReceivers","receivers","srcElement","MediaStreamTrack","err","$e3f02d0a98ccb0db$export$30e3cdd46f8d5100","getLocalStreams","_shimmedLocalStreams","streamId","alreadyExists","existingSenders","newSenders","newSender","$e3f02d0a98ccb0db$export$9588259fcf4ebc91","origGetLocalStreams","nativeStreams","_reverseStreams","_streams","newStream","replaceInternalStreamId","description","sdp","internalId","externalStream","internalStream","replace","RegExp","RTCSessionDescription","signalingState","t","oldStream","method","nativeMethod","methodObj","isLegacyCall","desc","origSetLocalDescription","setLocalDescription","origLocalDescription","getOwnPropertyDescriptor","isLocal","streamid","hasTrack","$e3f02d0a98ccb0db$export$852a08dda9a55ea7","webkitRTCPeerConnection","RTCIceCandidate","$e3f02d0a98ccb0db$export$341293bbeaae37cb","target","getConfiguration","sdpSemantics","$5c8245455fb0fb72$exports","$7252536737e6fa6d$export$1ed4910f4d37dc5e","nativeGetUserMedia","getSettings","nativeGetSettings","applyConstraints","nativeApplyConstraints","$f85cf98e09e9e2f6$export$97270b87351d9c04","preferredMediaSource","mediaSource","$5c8245455fb0fb72$export$f358708f68ab068","RTCTrackEvent","$5c8245455fb0fb72$export$852a08dda9a55ea7","mozRTCPeerConnection","modernStatsTypes","inboundrtp","outboundrtp","candidatepair","nativeGetStats","i","assign","$5c8245455fb0fb72$export$f0525502095c04ef","$5c8245455fb0fb72$export$83d69126527b1171","$5c8245455fb0fb72$export$825e523ef749bd8c","$5c8245455fb0fb72$export$ff9cb3bc8990e8f7","DataChannel","RTCDataChannel","$5c8245455fb0fb72$export$70c77533b6e9908d","origAddTransceiver","addTransceiver","setParametersPromises","sendEncodings","shouldPerformCheck","encodingParam","ridRegex","test","rid","TypeError","parseFloat","scaleResolutionDownBy","RangeError","maxFramerate","params","getParameters","encodings","setParameters","catch","$5c8245455fb0fb72$export$66238223c298fbaa","origGetParameters","$5c8245455fb0fb72$export$51beccf0e777b843","origCreateOffer","createOffer","all","finally","$5c8245455fb0fb72$export$df0b46e7cef08150","origCreateAnswer","createAnswer","$4bb6650df37cb8fe$exports","$4bb6650df37cb8fe$export$8df41282f4fdcea2","_localStreams","_addTrack","index","tracks","$4bb6650df37cb8fe$export$762aa4cbb4f2f857","getRemoteStreams","_remoteStreams","_onaddstream","_onaddstreampoly","$4bb6650df37cb8fe$export$da31df245debdd3","addIceCandidate","successCallback","failureCallback","promise","withCallback","candidate","$4bb6650df37cb8fe$export$1ed4910f4d37dc5e","_getUserMedia","$4bb6650df37cb8fe$export$494a01ac68ba81ac","errcb","$35583cf39f4111ff$export$15384eac40dc88c8","reduce","accumulator","isObj","isEmptyObject","$4bb6650df37cb8fe$export$671a8b47b41b6f41","OrigPeerConnection","pcConfig","pcConstraints","iceServers","newIceServers","server","urls","url","generateCertificate","$4bb6650df37cb8fe$export$85d53da088cb1b14","$4bb6650df37cb8fe$export$d444266503fdd2d4","offerOptions","offerToReceiveAudio","audioTransceiver","getTransceivers","direction","setDirection","offerToReceiveVideo","videoTransceiver","$4bb6650df37cb8fe$export$857cd739a7b795d2","AudioContext","webkitAudioContext","$8080a560a280724d$exports","$8080a560a280724d$export$cf133661e444ccfe","$8080a560a280724d$export$fdafb8d8280e29b5","$8080a560a280724d$export$a99147c78a56edc4","$8080a560a280724d$export$d461c8d5c5db5da7","$8080a560a280724d$export$63bb816cc75460","$8080a560a280724d$export$a57d114344295149","$8080a560a280724d$export$51d5e40b48c771c7","$8080a560a280724d$export$7170d04e59f9d553","$257b6346d6d1b15f$exports","$257b6346d6d1b15f$var$SDPUtils","NativeRTCIceCandidate","substring","nativeCandidate","parsedCandidate","parseCandidate","toJSON","sdpMid","sdpMLineIndex","usernameFragment","writable","relayProtocol","priority","_sctp","sctpInDescription","sections","splitSections","shift","mediaSection","mLine","parseMLine","protocol","getRemoteFirefoxVersion","getCanSendMaxMessageSize","remoteIsFirefox","canSendMaxMessageSize","browser","getMaxMessageSize","maxMessageSize","matchPrefix","isFirefox","canSendMMS","remoteMMS","Number","POSITIVE_INFINITY","Math","sctp","wrapDcSend","dc","origDataChannelSend","byteLength","readyState","origCreateDataChannel","createDataChannel","dataChannel","channel","completed","checking","iceConnectionState","_onconnectionstatechange","origMethod","_connectionstatechangepoly","_lastConnectionState","connectionState","newEvent","nativeSRD","split","line","trim","join","nativeAddIceCandidate","nativeSetLocalDescription","generateIdentifier","random","localCName","splitLines","blob","parts","part","getDescription","getMediaSections","foundation","component","address","port","relatedAddress","relatedPort","tcpType","ufrag","writeCandidate","parseIceOptions","parseRtpMap","parsed","payloadType","clockRate","channels","numChannels","writeRtpMap","codec","pt","preferredPayloadType","parseExtmap","uri","attributes","writeExtmap","headerExtension","preferredId","parseFmtp","kv","j","writeFmtp","parameters","param","parseRtcpFb","parameter","writeRtcpFb","lines","rtcpFeedback","fb","parseSsrcMedia","sp","ssrc","colon","attribute","parseSsrcGroup","semantics","ssrcs","getMid","mid","parseFingerprint","algorithm","getDtlsParameters","sessionpart","role","fingerprints","writeDtlsParameters","setupType","fp","parseCryptoLine","tag","cryptoSuite","keyParams","sessionParams","writeCryptoLine","writeCryptoKeyParams","parseCryptoKeyParams","keyMethod","keySalt","lifeTime","mkiValue","mkiLength","getCryptoParameters","getIceParameters","pwd","password","writeIceParameters","iceLite","parseRtpParameters","codecs","headerExtensions","fecMechanisms","rtcp","mline","profile","rtpmapline","fmtps","wildcardRtcpFb","duplicate","existingFeedback","writeRtpDescription","caps","maxptime","extension","parseRtpEncodingParameters","secondarySsrc","encodingParameters","hasRed","hasUlpfec","primarySsrc","flows","apt","encParam","codecPayloadType","rtx","fec","mechanism","bandwidth","maxBitrate","parseRtcpParameters","rtcpParameters","remoteSsrc","cname","rsize","reducedSize","compound","mux","writeRtcpParameters","parseMsid","spec","planB","msidParts","parseSctpDescription","maxSizeLine","isNaN","sctpPort","fmt","sctpMapLines","writeSctpDescription","media","output","generateSessionId","substr","writeSessionBoilerplate","sessId","sessVer","sessUser","getDirection","getKind","isRejected","parseOLine","username","sessionId","sessionVersion","netType","addressType","isValidSDP","shimChrome","shimFirefox","shimSafari","$35583cf39f4111ff$export$2d31490a0c05f094","userAgent","mozGetUserMedia","isSecureContext","supportsUnifiedPlan","RTCRtpTransceiver","adapter","shimPeerConnection","logging","browserShim","shimGetUserMedia","shimMediaStream","shimOnTrack","shimAddTrackRemoveTrack","shimGetSendersWithDtmf","shimGetStats","shimSenderReceiverGetStats","fixNegotiationNeeded","shimRemoveStream","shimSenderGetStats","shimReceiverGetStats","shimRTCDataChannel","shimAddTransceiver","shimGetParameters","shimCreateOffer","shimCreateAnswer","shimRTCIceServerUrls","shimCreateOfferLegacy","shimCallbacksAPI","shimLocalStreamsAPI","shimRemoteStreamsAPI","shimTrackEventTransceiver","shimAudioContext","$b318be68d2b2c029$export$2e2bcd8739ae039","rtc","webrtc","totalSize","isReady","isStarted","isSending","isRecaiving","processedSize","recaivedFile","bufferSizePerChannel","bufferSizePerPack","safeBufferSizePerPack","RecaiveFile","_rtc","fileMetadata","channelCount","_totalSize","onEnded","datachannel","current","currentPart","bufferAmount","onmessage","Blob","onclose","File","lastModified","Date","SendFile","file","metadata","buffer","arrayBuffer","partCount","ceil","iceStatus","mimetype","channelIndex","binaryType","onopen","next","spyChannelIndex","sendPartition","nextblob10mb","_channelIndex","currentBuffer","currentPartition","ArrayBuffer","bufferPart","sendFileChannel","getNextBlob","bufferedAmountLowThreshold","$895bfe3da380c655$export$2e2bcd8739ae039","requireGC","active","connectionStatus","gatheringStatus","signalingStatus","recaivingStream","sendingStream","defaultRTCConfig","iceCandidatePoolSize","iceTransportPolicy","rtcpMuxPolicy","defaultICEServers","FileTransportChannel","rtcConfig","rtcServers","config","eventConnectionState","eventIcecandidate","eventICEConnectionState","eventICEGatherinState","eventNogationNeeded","eventSignalingState","eventTrack","eventDatachannel","answer","streamInfo","payload","dispatch","createDefaultDataChannel","sendMessage","dt","ordered","pack","destroy","iceGatheringState","offer","iceRestart","rtpRecaiver","recaivers","sendStream","stopStream","_stream","RTCPSender","stopAllStreams","clear","meta","chnlCount","filemeta","setInterval","img","document","createElement","src","createObjectURL","onerror","revokeObjectURL","$9f6c30de484136d4$export$2e2bcd8739ae039","selfSocket","peerConnection","primaryChannel","createRTC","setPeerOptions","setSocketId","uuid","equalTo","isReachable","to","enablePairAuth","disablePairAuth","requestPair","endPair","forget","acceptPair","rejectPair","getPairedList","isOpenedP2P","isOpenedServer","sendChannel","peers","pairs","$59e4377e2cc5e2be$export$f106f681f3286480","room","roomId","$4415e33c9749fde6$export$2e2bcd8739ae039","accessType","joinType","owner","setRoomOptions","defaultOptions","ifexistsJoin","notifyActionInvite","notifyActionJoined","notifyActionEjected","autoFetchInfo","setRoomId","createRoom","roomOptions","messages","rooms","credential","eject","wom","fetchPeers","onlyNumber","cup","peerid","$023568b0c88ffd16$export$2e2bcd8739ae039","addListener","PackAnalyze","SendRaw","action","$1ed8c0121ddb51e7$export$2e2bcd8739ae039","virtualPressure","me","packMessagingSystem","peerId","requestId","from","body","roomid","isActive","MWSE"],"version":3,"file":"index.js.map"} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index fddfad1..9e6715f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3,117 +3,117 @@ "@cronvel/get-pixels@^3.4.1": - "integrity" "sha512-gB5C5nDIacLUdsMuW8YsM9SzK3vaFANe4J11CVXpovpy7bZUGrcJKmc6m/0gWG789pKr6XSZY2aEetjFvSRw5g==" - "resolved" "https://registry.npmjs.org/@cronvel/get-pixels/-/get-pixels-3.4.1.tgz" - "version" "3.4.1" + version "3.4.1" + resolved "https://registry.npmjs.org/@cronvel/get-pixels/-/get-pixels-3.4.1.tgz" + integrity sha512-gB5C5nDIacLUdsMuW8YsM9SzK3vaFANe4J11CVXpovpy7bZUGrcJKmc6m/0gWG789pKr6XSZY2aEetjFvSRw5g== dependencies: - "jpeg-js" "^0.4.4" - "ndarray" "^1.0.19" - "ndarray-pack" "^1.1.1" - "node-bitmap" "0.0.1" - "omggif" "^1.0.10" - "pngjs" "^6.0.0" + jpeg-js "^0.4.4" + ndarray "^1.0.19" + ndarray-pack "^1.1.1" + node-bitmap "0.0.1" + omggif "^1.0.10" + pngjs "^6.0.0" "@gar/promisify@^1.0.1": - "integrity" "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==" - "resolved" "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz" - "version" "1.1.3" + version "1.1.3" + resolved "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz" + integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== "@hapi/hoek@^9.0.0": - "integrity" "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" - "resolved" "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz" - "version" "9.3.0" + version "9.3.0" + resolved "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz" + integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ== "@hapi/topo@^5.0.0": - "integrity" "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==" - "resolved" "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz" - "version" "5.1.0" + version "5.1.0" + resolved "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz" + integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg== dependencies: "@hapi/hoek" "^9.0.0" "@lezer/common@^0.15.0", "@lezer/common@^0.15.7": - "integrity" "sha512-edfwCxNLnzq5pBA/yaIhwJ3U3Kz8VAUOTRg0hhxaizaI1N+qxV7EXDv/kLCkLeq2RzSFvxexlaj5Mzfn2kY0Ig==" - "resolved" "https://registry.npmjs.org/@lezer/common/-/common-0.15.12.tgz" - "version" "0.15.12" + version "0.15.12" + resolved "https://registry.npmjs.org/@lezer/common/-/common-0.15.12.tgz" + integrity sha512-edfwCxNLnzq5pBA/yaIhwJ3U3Kz8VAUOTRg0hhxaizaI1N+qxV7EXDv/kLCkLeq2RzSFvxexlaj5Mzfn2kY0Ig== "@lezer/lr@^0.15.4": - "integrity" "sha512-bM6oE6VQZ6hIFxDNKk8bKPa14hqFrV07J/vHGOeiAbJReIaQXmkVb6xQu4MR+JBTLa5arGRyAAjJe1qaQt3Uvg==" - "resolved" "https://registry.npmjs.org/@lezer/lr/-/lr-0.15.8.tgz" - "version" "0.15.8" + version "0.15.8" + resolved "https://registry.npmjs.org/@lezer/lr/-/lr-0.15.8.tgz" + integrity sha512-bM6oE6VQZ6hIFxDNKk8bKPa14hqFrV07J/vHGOeiAbJReIaQXmkVb6xQu4MR+JBTLa5arGRyAAjJe1qaQt3Uvg== dependencies: "@lezer/common" "^0.15.0" "@lmdb/lmdb-linux-x64@2.7.11": - "integrity" "sha512-vUKI3JrREMQsXX8q0Eq5zX2FlYCKWMmLiCyyJNfZK0Uyf14RBg9VtB3ObQ41b4swYh2EWaltasWVe93Y8+KDng==" - "resolved" "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-2.7.11.tgz" - "version" "2.7.11" + version "2.7.11" + resolved "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-2.7.11.tgz" + integrity sha512-vUKI3JrREMQsXX8q0Eq5zX2FlYCKWMmLiCyyJNfZK0Uyf14RBg9VtB3ObQ41b4swYh2EWaltasWVe93Y8+KDng== "@mapbox/node-pre-gyp@^1.0.0": - "integrity" "sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==" - "resolved" "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.10.tgz" - "version" "1.0.10" + version "1.0.10" + resolved "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.10.tgz" + integrity sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA== dependencies: - "detect-libc" "^2.0.0" - "https-proxy-agent" "^5.0.0" - "make-dir" "^3.1.0" - "node-fetch" "^2.6.7" - "nopt" "^5.0.0" - "npmlog" "^5.0.1" - "rimraf" "^3.0.2" - "semver" "^7.3.5" - "tar" "^6.1.11" + detect-libc "^2.0.0" + https-proxy-agent "^5.0.0" + make-dir "^3.1.0" + node-fetch "^2.6.7" + nopt "^5.0.0" + npmlog "^5.0.1" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.11" "@mischnic/json-sourcemap@^0.1.0": - "integrity" "sha512-dQb3QnfNqmQNYA4nFSN/uLaByIic58gOXq4Y4XqLOWmOrw73KmJPt/HLyG0wvn1bnR6mBKs/Uwvkh+Hns1T0XA==" - "resolved" "https://registry.npmjs.org/@mischnic/json-sourcemap/-/json-sourcemap-0.1.0.tgz" - "version" "0.1.0" + version "0.1.0" + resolved "https://registry.npmjs.org/@mischnic/json-sourcemap/-/json-sourcemap-0.1.0.tgz" + integrity sha512-dQb3QnfNqmQNYA4nFSN/uLaByIic58gOXq4Y4XqLOWmOrw73KmJPt/HLyG0wvn1bnR6mBKs/Uwvkh+Hns1T0XA== dependencies: "@lezer/common" "^0.15.7" "@lezer/lr" "^0.15.4" - "json5" "^2.2.1" + json5 "^2.2.1" "@msgpackr-extract/msgpackr-extract-linux-x64@3.0.2": - "integrity" "sha512-gsWNDCklNy7Ajk0vBBf9jEx04RUxuDQfBse918Ww+Qb9HCPoGzS+XJTLe96iN3BVK7grnLiYghP/M4L8VsaHeA==" - "resolved" "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.2.tgz" - "version" "3.0.2" + version "3.0.2" + resolved "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.2.tgz" + integrity sha512-gsWNDCklNy7Ajk0vBBf9jEx04RUxuDQfBse918Ww+Qb9HCPoGzS+XJTLe96iN3BVK7grnLiYghP/M4L8VsaHeA== "@npmcli/fs@^1.0.0": - "integrity" "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==" - "resolved" "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz" - "version" "1.1.1" + version "1.1.1" + resolved "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz" + integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== dependencies: "@gar/promisify" "^1.0.1" - "semver" "^7.3.5" + semver "^7.3.5" "@npmcli/move-file@^1.0.1": - "integrity" "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==" - "resolved" "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz" - "version" "1.1.2" + version "1.1.2" + resolved "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz" + integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== dependencies: - "mkdirp" "^1.0.4" - "rimraf" "^3.0.2" + mkdirp "^1.0.4" + rimraf "^3.0.2" "@parcel/cache@2.9.3": - "integrity" "sha512-Bj/H2uAJJSXtysG7E/x4EgTrE2hXmm7td/bc97K8M9N7+vQjxf7xb0ebgqe84ePVMkj4MVQSMEJkEucXVx4b0Q==" - "resolved" "https://registry.npmjs.org/@parcel/cache/-/cache-2.9.3.tgz" - "version" "2.9.3" + version "2.9.3" + resolved "https://registry.npmjs.org/@parcel/cache/-/cache-2.9.3.tgz" + integrity sha512-Bj/H2uAJJSXtysG7E/x4EgTrE2hXmm7td/bc97K8M9N7+vQjxf7xb0ebgqe84ePVMkj4MVQSMEJkEucXVx4b0Q== dependencies: "@parcel/fs" "2.9.3" "@parcel/logger" "2.9.3" "@parcel/utils" "2.9.3" - "lmdb" "2.7.11" + lmdb "2.7.11" "@parcel/codeframe@2.9.3": - "integrity" "sha512-z7yTyD6h3dvduaFoHpNqur74/2yDWL++33rjQjIjCaXREBN6dKHoMGMizzo/i4vbiI1p9dDox2FIDEHCMQxqdA==" - "resolved" "https://registry.npmjs.org/@parcel/codeframe/-/codeframe-2.9.3.tgz" - "version" "2.9.3" + version "2.9.3" + resolved "https://registry.npmjs.org/@parcel/codeframe/-/codeframe-2.9.3.tgz" + integrity sha512-z7yTyD6h3dvduaFoHpNqur74/2yDWL++33rjQjIjCaXREBN6dKHoMGMizzo/i4vbiI1p9dDox2FIDEHCMQxqdA== dependencies: - "chalk" "^4.1.0" + chalk "^4.1.0" "@parcel/core@^2.9.3": - "integrity" "sha512-4KlM1Zr/jpsqWuMXr2zmGsaOUs1zMMFh9vfCNKRZkptf+uk8I3sugHbNdo+F5B+4e2yMuOEb1zgAmvJLeuH6ww==" - "resolved" "https://registry.npmjs.org/@parcel/core/-/core-2.9.3.tgz" - "version" "2.9.3" + version "2.9.3" + resolved "https://registry.npmjs.org/@parcel/core/-/core-2.9.3.tgz" + integrity sha512-4KlM1Zr/jpsqWuMXr2zmGsaOUs1zMMFh9vfCNKRZkptf+uk8I3sugHbNdo+F5B+4e2yMuOEb1zgAmvJLeuH6ww== dependencies: "@mischnic/json-sourcemap" "^0.1.0" "@parcel/cache" "2.9.3" @@ -130,39 +130,39 @@ "@parcel/types" "2.9.3" "@parcel/utils" "2.9.3" "@parcel/workers" "2.9.3" - "abortcontroller-polyfill" "^1.1.9" - "base-x" "^3.0.8" - "browserslist" "^4.6.6" - "clone" "^2.1.1" - "dotenv" "^7.0.0" - "dotenv-expand" "^5.1.0" - "json5" "^2.2.0" - "msgpackr" "^1.5.4" - "nullthrows" "^1.1.1" - "semver" "^7.5.2" + abortcontroller-polyfill "^1.1.9" + base-x "^3.0.8" + browserslist "^4.6.6" + clone "^2.1.1" + dotenv "^7.0.0" + dotenv-expand "^5.1.0" + json5 "^2.2.0" + msgpackr "^1.5.4" + nullthrows "^1.1.1" + semver "^7.5.2" "@parcel/diagnostic@2.9.3": - "integrity" "sha512-6jxBdyB3D7gP4iE66ghUGntWt2v64E6EbD4AetZk+hNJpgudOOPsKTovcMi/i7I4V0qD7WXSF4tvkZUoac0jwA==" - "resolved" "https://registry.npmjs.org/@parcel/diagnostic/-/diagnostic-2.9.3.tgz" - "version" "2.9.3" + version "2.9.3" + resolved "https://registry.npmjs.org/@parcel/diagnostic/-/diagnostic-2.9.3.tgz" + integrity sha512-6jxBdyB3D7gP4iE66ghUGntWt2v64E6EbD4AetZk+hNJpgudOOPsKTovcMi/i7I4V0qD7WXSF4tvkZUoac0jwA== dependencies: "@mischnic/json-sourcemap" "^0.1.0" - "nullthrows" "^1.1.1" + nullthrows "^1.1.1" "@parcel/events@2.9.3": - "integrity" "sha512-K0Scx+Bx9f9p1vuShMzNwIgiaZUkxEnexaKYHYemJrM7pMAqxIuIqhnvwurRCsZOVLUJPDDNJ626cWTc5vIq+A==" - "resolved" "https://registry.npmjs.org/@parcel/events/-/events-2.9.3.tgz" - "version" "2.9.3" + version "2.9.3" + resolved "https://registry.npmjs.org/@parcel/events/-/events-2.9.3.tgz" + integrity sha512-K0Scx+Bx9f9p1vuShMzNwIgiaZUkxEnexaKYHYemJrM7pMAqxIuIqhnvwurRCsZOVLUJPDDNJ626cWTc5vIq+A== "@parcel/fs-search@2.9.3": - "integrity" "sha512-nsNz3bsOpwS+jphcd+XjZL3F3PDq9lik0O8HPm5f6LYkqKWT+u/kgQzA8OkAHCR3q96LGiHxUywHPEBc27vI4Q==" - "resolved" "https://registry.npmjs.org/@parcel/fs-search/-/fs-search-2.9.3.tgz" - "version" "2.9.3" + version "2.9.3" + resolved "https://registry.npmjs.org/@parcel/fs-search/-/fs-search-2.9.3.tgz" + integrity sha512-nsNz3bsOpwS+jphcd+XjZL3F3PDq9lik0O8HPm5f6LYkqKWT+u/kgQzA8OkAHCR3q96LGiHxUywHPEBc27vI4Q== "@parcel/fs@2.9.3": - "integrity" "sha512-/PrRKgCRw22G7rNPSpgN3Q+i2nIkZWuvIOAdMG4KWXC4XLp8C9jarNaWd5QEQ75amjhQSl3oUzABzkdCtkKrgg==" - "resolved" "https://registry.npmjs.org/@parcel/fs/-/fs-2.9.3.tgz" - "version" "2.9.3" + version "2.9.3" + resolved "https://registry.npmjs.org/@parcel/fs/-/fs-2.9.3.tgz" + integrity sha512-/PrRKgCRw22G7rNPSpgN3Q+i2nIkZWuvIOAdMG4KWXC4XLp8C9jarNaWd5QEQ75amjhQSl3oUzABzkdCtkKrgg== dependencies: "@parcel/fs-search" "2.9.3" "@parcel/types" "2.9.3" @@ -171,50 +171,50 @@ "@parcel/workers" "2.9.3" "@parcel/graph@2.9.3": - "integrity" "sha512-3LmRJmF8+OprAr6zJT3X2s8WAhLKkrhi6RsFlMWHifGU5ED1PFcJWFbOwJvSjcAhMQJP0fErcFIK1Ludv3Vm3g==" - "resolved" "https://registry.npmjs.org/@parcel/graph/-/graph-2.9.3.tgz" - "version" "2.9.3" + version "2.9.3" + resolved "https://registry.npmjs.org/@parcel/graph/-/graph-2.9.3.tgz" + integrity sha512-3LmRJmF8+OprAr6zJT3X2s8WAhLKkrhi6RsFlMWHifGU5ED1PFcJWFbOwJvSjcAhMQJP0fErcFIK1Ludv3Vm3g== dependencies: - "nullthrows" "^1.1.1" + nullthrows "^1.1.1" "@parcel/hash@2.9.3": - "integrity" "sha512-qlH5B85XLzVAeijgKPjm1gQu35LoRYX/8igsjnN8vOlbc3O8BYAUIutU58fbHbtE8MJPbxQQUw7tkTjeoujcQQ==" - "resolved" "https://registry.npmjs.org/@parcel/hash/-/hash-2.9.3.tgz" - "version" "2.9.3" + version "2.9.3" + resolved "https://registry.npmjs.org/@parcel/hash/-/hash-2.9.3.tgz" + integrity sha512-qlH5B85XLzVAeijgKPjm1gQu35LoRYX/8igsjnN8vOlbc3O8BYAUIutU58fbHbtE8MJPbxQQUw7tkTjeoujcQQ== dependencies: - "xxhash-wasm" "^0.4.2" + xxhash-wasm "^0.4.2" "@parcel/logger@2.9.3": - "integrity" "sha512-5FNBszcV6ilGFcijEOvoNVG6IUJGsnMiaEnGQs7Fvc1dktTjEddnoQbIYhcSZL63wEmzBZOgkT5yDMajJ/41jw==" - "resolved" "https://registry.npmjs.org/@parcel/logger/-/logger-2.9.3.tgz" - "version" "2.9.3" + version "2.9.3" + resolved "https://registry.npmjs.org/@parcel/logger/-/logger-2.9.3.tgz" + integrity sha512-5FNBszcV6ilGFcijEOvoNVG6IUJGsnMiaEnGQs7Fvc1dktTjEddnoQbIYhcSZL63wEmzBZOgkT5yDMajJ/41jw== dependencies: "@parcel/diagnostic" "2.9.3" "@parcel/events" "2.9.3" "@parcel/markdown-ansi@2.9.3": - "integrity" "sha512-/Q4X8F2aN8UNjAJrQ5NfK2OmZf6shry9DqetUSEndQ0fHonk78WKt6LT0zSKEBEW/bB/bXk6mNMsCup6L8ibjQ==" - "resolved" "https://registry.npmjs.org/@parcel/markdown-ansi/-/markdown-ansi-2.9.3.tgz" - "version" "2.9.3" + version "2.9.3" + resolved "https://registry.npmjs.org/@parcel/markdown-ansi/-/markdown-ansi-2.9.3.tgz" + integrity sha512-/Q4X8F2aN8UNjAJrQ5NfK2OmZf6shry9DqetUSEndQ0fHonk78WKt6LT0zSKEBEW/bB/bXk6mNMsCup6L8ibjQ== dependencies: - "chalk" "^4.1.0" + chalk "^4.1.0" "@parcel/node-resolver-core@3.0.3": - "integrity" "sha512-AjxNcZVHHJoNT/A99PKIdFtwvoze8PAiC3yz8E/dRggrDIOboUEodeQYV5Aq++aK76uz/iOP0tST2T8A5rhb1A==" - "resolved" "https://registry.npmjs.org/@parcel/node-resolver-core/-/node-resolver-core-3.0.3.tgz" - "version" "3.0.3" + version "3.0.3" + resolved "https://registry.npmjs.org/@parcel/node-resolver-core/-/node-resolver-core-3.0.3.tgz" + integrity sha512-AjxNcZVHHJoNT/A99PKIdFtwvoze8PAiC3yz8E/dRggrDIOboUEodeQYV5Aq++aK76uz/iOP0tST2T8A5rhb1A== dependencies: "@mischnic/json-sourcemap" "^0.1.0" "@parcel/diagnostic" "2.9.3" "@parcel/fs" "2.9.3" "@parcel/utils" "2.9.3" - "nullthrows" "^1.1.1" - "semver" "^7.5.2" + nullthrows "^1.1.1" + semver "^7.5.2" "@parcel/package-manager@2.9.3": - "integrity" "sha512-NH6omcNTEupDmW4Lm1e4NUYBjdqkURxgZ4CNESESInHJe6tblVhNB8Rpr1ar7zDar7cly9ILr8P6N3Ei7bTEjg==" - "resolved" "https://registry.npmjs.org/@parcel/package-manager/-/package-manager-2.9.3.tgz" - "version" "2.9.3" + version "2.9.3" + resolved "https://registry.npmjs.org/@parcel/package-manager/-/package-manager-2.9.3.tgz" + integrity sha512-NH6omcNTEupDmW4Lm1e4NUYBjdqkURxgZ4CNESESInHJe6tblVhNB8Rpr1ar7zDar7cly9ILr8P6N3Ei7bTEjg== dependencies: "@parcel/diagnostic" "2.9.3" "@parcel/fs" "2.9.3" @@ -223,61 +223,61 @@ "@parcel/types" "2.9.3" "@parcel/utils" "2.9.3" "@parcel/workers" "2.9.3" - "semver" "^7.5.2" + semver "^7.5.2" "@parcel/packager-ts@^2.7.0": - "integrity" "sha512-Vd9dm1FqaFDw/kWCh95zgGS08HvIpSLg5Aa+AIhFiM0G+kpRSItcBSNJVwC7JKmLk1rmQhmQKoCKX26+nvyAzA==" - "resolved" "https://registry.npmjs.org/@parcel/packager-ts/-/packager-ts-2.9.3.tgz" - "version" "2.9.3" + version "2.9.3" + resolved "https://registry.npmjs.org/@parcel/packager-ts/-/packager-ts-2.9.3.tgz" + integrity sha512-Vd9dm1FqaFDw/kWCh95zgGS08HvIpSLg5Aa+AIhFiM0G+kpRSItcBSNJVwC7JKmLk1rmQhmQKoCKX26+nvyAzA== dependencies: "@parcel/plugin" "2.9.3" "@parcel/plugin@2.9.3": - "integrity" "sha512-qN85Gqr2GMuxX1dT1mnuO9hOcvlEv1lrYrCxn7CJN2nUhbwcfG+LEvcrCzCOJ6XtIHm+ZBV9h9p7FfoPLvpw+g==" - "resolved" "https://registry.npmjs.org/@parcel/plugin/-/plugin-2.9.3.tgz" - "version" "2.9.3" + version "2.9.3" + resolved "https://registry.npmjs.org/@parcel/plugin/-/plugin-2.9.3.tgz" + integrity sha512-qN85Gqr2GMuxX1dT1mnuO9hOcvlEv1lrYrCxn7CJN2nUhbwcfG+LEvcrCzCOJ6XtIHm+ZBV9h9p7FfoPLvpw+g== dependencies: "@parcel/types" "2.9.3" "@parcel/profiler@2.9.3": - "integrity" "sha512-pyHc9lw8VZDfgZoeZWZU9J0CVEv1Zw9O5+e0DJPDPHuXJYr72ZAOhbljtU3owWKAeW+++Q2AZWkbUGEOjI/e6g==" - "resolved" "https://registry.npmjs.org/@parcel/profiler/-/profiler-2.9.3.tgz" - "version" "2.9.3" + version "2.9.3" + resolved "https://registry.npmjs.org/@parcel/profiler/-/profiler-2.9.3.tgz" + integrity sha512-pyHc9lw8VZDfgZoeZWZU9J0CVEv1Zw9O5+e0DJPDPHuXJYr72ZAOhbljtU3owWKAeW+++Q2AZWkbUGEOjI/e6g== dependencies: "@parcel/diagnostic" "2.9.3" "@parcel/events" "2.9.3" - "chrome-trace-event" "^1.0.2" + chrome-trace-event "^1.0.2" "@parcel/source-map@^2.1.1": - "integrity" "sha512-Ejx1P/mj+kMjQb8/y5XxDUn4reGdr+WyKYloBljpppUy8gs42T+BNoEOuRYqDVdgPc6NxduzIDoJS9pOFfV5Ew==" - "resolved" "https://registry.npmjs.org/@parcel/source-map/-/source-map-2.1.1.tgz" - "version" "2.1.1" + version "2.1.1" + resolved "https://registry.npmjs.org/@parcel/source-map/-/source-map-2.1.1.tgz" + integrity sha512-Ejx1P/mj+kMjQb8/y5XxDUn4reGdr+WyKYloBljpppUy8gs42T+BNoEOuRYqDVdgPc6NxduzIDoJS9pOFfV5Ew== dependencies: - "detect-libc" "^1.0.3" + detect-libc "^1.0.3" "@parcel/transformer-typescript-types@^2.7.0": - "integrity" "sha512-W+Ze3aUTdZuBQokXlkEQ/1hUApUm6VRyYzPqEs9jcqCqU8mv18i5ZGAz4bMuIJOBprp7M2wt10SJJx/SC1pl1A==" - "resolved" "https://registry.npmjs.org/@parcel/transformer-typescript-types/-/transformer-typescript-types-2.9.3.tgz" - "version" "2.9.3" + version "2.9.3" + resolved "https://registry.npmjs.org/@parcel/transformer-typescript-types/-/transformer-typescript-types-2.9.3.tgz" + integrity sha512-W+Ze3aUTdZuBQokXlkEQ/1hUApUm6VRyYzPqEs9jcqCqU8mv18i5ZGAz4bMuIJOBprp7M2wt10SJJx/SC1pl1A== dependencies: "@parcel/diagnostic" "2.9.3" "@parcel/plugin" "2.9.3" "@parcel/source-map" "^2.1.1" "@parcel/ts-utils" "2.9.3" "@parcel/utils" "2.9.3" - "nullthrows" "^1.1.1" + nullthrows "^1.1.1" "@parcel/ts-utils@2.9.3": - "integrity" "sha512-MiQoXFV8I4IWZT/q5yolKN/gnEY5gZfGB2X7W9WHJbRgyjlT/A5cPERXzVBj6mc3/VM1GdZJz76w637GUcQhow==" - "resolved" "https://registry.npmjs.org/@parcel/ts-utils/-/ts-utils-2.9.3.tgz" - "version" "2.9.3" + version "2.9.3" + resolved "https://registry.npmjs.org/@parcel/ts-utils/-/ts-utils-2.9.3.tgz" + integrity sha512-MiQoXFV8I4IWZT/q5yolKN/gnEY5gZfGB2X7W9WHJbRgyjlT/A5cPERXzVBj6mc3/VM1GdZJz76w637GUcQhow== dependencies: - "nullthrows" "^1.1.1" + nullthrows "^1.1.1" "@parcel/types@2.9.3": - "integrity" "sha512-NSNY8sYtRhvF1SqhnIGgGvJocyWt1K8Tnw5cVepm0g38ywtX6mwkBvMkmeehXkII4mSUn+frD9wGsydTunezvA==" - "resolved" "https://registry.npmjs.org/@parcel/types/-/types-2.9.3.tgz" - "version" "2.9.3" + version "2.9.3" + resolved "https://registry.npmjs.org/@parcel/types/-/types-2.9.3.tgz" + integrity sha512-NSNY8sYtRhvF1SqhnIGgGvJocyWt1K8Tnw5cVepm0g38ywtX6mwkBvMkmeehXkII4mSUn+frD9wGsydTunezvA== dependencies: "@parcel/cache" "2.9.3" "@parcel/diagnostic" "2.9.3" @@ -285,12 +285,12 @@ "@parcel/package-manager" "2.9.3" "@parcel/source-map" "^2.1.1" "@parcel/workers" "2.9.3" - "utility-types" "^3.10.0" + utility-types "^3.10.0" "@parcel/utils@2.9.3": - "integrity" "sha512-cesanjtj/oLehW8Waq9JFPmAImhoiHX03ihc3JTWkrvJYSbD7wYKCDgPAM3JiRAqvh1LZ6P699uITrYWNoRLUg==" - "resolved" "https://registry.npmjs.org/@parcel/utils/-/utils-2.9.3.tgz" - "version" "2.9.3" + version "2.9.3" + resolved "https://registry.npmjs.org/@parcel/utils/-/utils-2.9.3.tgz" + integrity sha512-cesanjtj/oLehW8Waq9JFPmAImhoiHX03ihc3JTWkrvJYSbD7wYKCDgPAM3JiRAqvh1LZ6P699uITrYWNoRLUg== dependencies: "@parcel/codeframe" "2.9.3" "@parcel/diagnostic" "2.9.3" @@ -298,28 +298,28 @@ "@parcel/logger" "2.9.3" "@parcel/markdown-ansi" "2.9.3" "@parcel/source-map" "^2.1.1" - "chalk" "^4.1.0" - "nullthrows" "^1.1.1" + chalk "^4.1.0" + nullthrows "^1.1.1" "@parcel/watcher-linux-x64-glibc@2.2.0": - "integrity" "sha512-xJvJ7R2wJdi47WZBFS691RDOWvP1j/IAs3EXaWVhDI8FFITbWrWaln7KoNcR0Y3T+ZwimFY/cfb0PNht1q895g==" - "resolved" "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.2.0.tgz" - "version" "2.2.0" + version "2.2.0" + resolved "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.2.0.tgz" + integrity sha512-xJvJ7R2wJdi47WZBFS691RDOWvP1j/IAs3EXaWVhDI8FFITbWrWaln7KoNcR0Y3T+ZwimFY/cfb0PNht1q895g== "@parcel/watcher-linux-x64-musl@2.2.0": - "integrity" "sha512-D+NMpgr23a+RI5mu8ZPKWy7AqjBOkURFDgP5iIXXEf/K3hm0jJ3ogzi0Ed2237B/CdYREimCgXyeiAlE/FtwyA==" - "resolved" "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.2.0.tgz" - "version" "2.2.0" + version "2.2.0" + resolved "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.2.0.tgz" + integrity sha512-D+NMpgr23a+RI5mu8ZPKWy7AqjBOkURFDgP5iIXXEf/K3hm0jJ3ogzi0Ed2237B/CdYREimCgXyeiAlE/FtwyA== "@parcel/watcher@^2.0.7": - "integrity" "sha512-71S4TF+IMyAn24PK4KSkdKtqJDR3zRzb0HE3yXpacItqTM7XfF2f5q9NEGLEVl0dAaBAGfNwDCjH120y25F6Tg==" - "resolved" "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.2.0.tgz" - "version" "2.2.0" + version "2.2.0" + resolved "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.2.0.tgz" + integrity sha512-71S4TF+IMyAn24PK4KSkdKtqJDR3zRzb0HE3yXpacItqTM7XfF2f5q9NEGLEVl0dAaBAGfNwDCjH120y25F6Tg== dependencies: - "detect-libc" "^1.0.3" - "is-glob" "^4.0.3" - "micromatch" "^4.0.5" - "node-addon-api" "^7.0.0" + detect-libc "^1.0.3" + is-glob "^4.0.3" + micromatch "^4.0.5" + node-addon-api "^7.0.0" optionalDependencies: "@parcel/watcher-android-arm64" "2.2.0" "@parcel/watcher-darwin-arm64" "2.2.0" @@ -333,861 +333,866 @@ "@parcel/watcher-win32-x64" "2.2.0" "@parcel/workers@2.9.3": - "integrity" "sha512-zRrDuZJzTevrrwElYosFztgldhqW6G9q5zOeQXfVQFkkEJCNfg36ixeiofKRU8uu2x+j+T6216mhMNB6HiuY+w==" - "resolved" "https://registry.npmjs.org/@parcel/workers/-/workers-2.9.3.tgz" - "version" "2.9.3" + version "2.9.3" + resolved "https://registry.npmjs.org/@parcel/workers/-/workers-2.9.3.tgz" + integrity sha512-zRrDuZJzTevrrwElYosFztgldhqW6G9q5zOeQXfVQFkkEJCNfg36ixeiofKRU8uu2x+j+T6216mhMNB6HiuY+w== dependencies: "@parcel/diagnostic" "2.9.3" "@parcel/logger" "2.9.3" "@parcel/profiler" "2.9.3" "@parcel/types" "2.9.3" "@parcel/utils" "2.9.3" - "nullthrows" "^1.1.1" + nullthrows "^1.1.1" "@sideway/address@^4.1.3": - "integrity" "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==" - "resolved" "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz" - "version" "4.1.4" + version "4.1.4" + resolved "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz" + integrity sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw== dependencies: "@hapi/hoek" "^9.0.0" "@sideway/formula@^3.0.1": - "integrity" "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" - "resolved" "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz" - "version" "3.0.1" + version "3.0.1" + resolved "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz" + integrity sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg== "@sideway/pinpoint@^2.0.0": - "integrity" "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" - "resolved" "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz" - "version" "2.0.0" + version "2.0.0" + resolved "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz" + integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== "@tootallnate/once@1": - "integrity" "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" - "resolved" "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz" - "version" "1.1.2" + version "1.1.2" + resolved "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== -"abbrev@1": - "integrity" "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - "resolved" "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" - "version" "1.1.1" +abbrev@1: + version "1.1.1" + resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -"abortcontroller-polyfill@^1.1.9": - "integrity" "sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ==" - "resolved" "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz" - "version" "1.7.5" +abortcontroller-polyfill@^1.1.9: + version "1.7.5" + resolved "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz" + integrity sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ== -"accepts@~1.3.5", "accepts@~1.3.8": - "integrity" "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==" - "resolved" "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz" - "version" "1.3.8" +accepts@~1.3.5, accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== dependencies: - "mime-types" "~2.1.34" - "negotiator" "0.6.3" + mime-types "~2.1.34" + negotiator "0.6.3" -"agent-base@^6.0.2", "agent-base@6": - "integrity" "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==" - "resolved" "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" - "version" "6.0.2" +agent-base@^6.0.2, agent-base@6: + version "6.0.2" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== dependencies: - "debug" "4" + debug "4" -"agentkeepalive@^4.1.3": - "integrity" "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==" - "resolved" "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz" - "version" "4.3.0" +agentkeepalive@^4.1.3: + version "4.3.0" + resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz" + integrity sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg== dependencies: - "debug" "^4.1.0" - "depd" "^2.0.0" - "humanize-ms" "^1.2.1" + debug "^4.1.0" + depd "^2.0.0" + humanize-ms "^1.2.1" -"aggregate-error@^3.0.0": - "integrity" "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==" - "resolved" "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" - "version" "3.1.0" +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== dependencies: - "clean-stack" "^2.0.0" - "indent-string" "^4.0.0" + clean-stack "^2.0.0" + indent-string "^4.0.0" -"ansi-regex@^5.0.1": - "integrity" "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" - "version" "5.0.1" +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -"ansi-styles@^4.1.0": - "integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==" - "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" - "version" "4.3.0" +ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: - "color-convert" "^2.0.1" + color-convert "^2.0.1" "aproba@^1.0.3 || ^2.0.0": - "integrity" "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" - "resolved" "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz" - "version" "2.0.0" + version "2.0.0" + resolved "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== -"are-we-there-yet@^2.0.0": - "integrity" "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==" - "resolved" "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz" - "version" "2.0.0" +are-we-there-yet@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz" + integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw== dependencies: - "delegates" "^1.0.0" - "readable-stream" "^3.6.0" + delegates "^1.0.0" + readable-stream "^3.6.0" -"are-we-there-yet@^3.0.0": - "integrity" "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==" - "resolved" "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz" - "version" "3.0.1" +are-we-there-yet@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz" + integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== dependencies: - "delegates" "^1.0.0" - "readable-stream" "^3.6.0" + delegates "^1.0.0" + readable-stream "^3.6.0" -"array-flatten@1.1.1": - "integrity" "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - "resolved" "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" - "version" "1.1.1" +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== -"balanced-match@^1.0.0": - "integrity" "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - "resolved" "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" - "version" "1.0.2" +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -"base-x@^3.0.8": - "integrity" "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==" - "resolved" "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz" - "version" "3.0.9" +base-x@^3.0.8: + version "3.0.9" + resolved "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz" + integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== dependencies: - "safe-buffer" "^5.0.1" + safe-buffer "^5.0.1" -"basic-auth@^2.0.1": - "integrity" "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==" - "resolved" "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz" - "version" "2.0.1" +basic-auth@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz" + integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg== dependencies: - "safe-buffer" "5.1.2" + safe-buffer "5.1.2" -"body-parser@1.20.1": - "integrity" "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==" - "resolved" "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz" - "version" "1.20.1" +body-parser@1.20.1: + version "1.20.1" + resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz" + integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== dependencies: - "bytes" "3.1.2" - "content-type" "~1.0.4" - "debug" "2.6.9" - "depd" "2.0.0" - "destroy" "1.2.0" - "http-errors" "2.0.0" - "iconv-lite" "0.4.24" - "on-finished" "2.4.1" - "qs" "6.11.0" - "raw-body" "2.5.1" - "type-is" "~1.6.18" - "unpipe" "1.0.0" + bytes "3.1.2" + content-type "~1.0.4" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.11.0" + raw-body "2.5.1" + type-is "~1.6.18" + unpipe "1.0.0" -"brace-expansion@^1.1.7": - "integrity" "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==" - "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" - "version" "1.1.11" +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: - "balanced-match" "^1.0.0" - "concat-map" "0.0.1" + balanced-match "^1.0.0" + concat-map "0.0.1" -"braces@^3.0.2": - "integrity" "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==" - "resolved" "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" - "version" "3.0.2" +braces@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: - "fill-range" "^7.0.1" + fill-range "^7.0.1" -"browserslist@^4.6.6", "browserslist@>= 4.21.0": - "integrity" "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==" - "resolved" "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz" - "version" "4.21.9" +browserslist@^4.6.6, "browserslist@>= 4.21.0": + version "4.21.9" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz" + integrity sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg== dependencies: - "caniuse-lite" "^1.0.30001503" - "electron-to-chromium" "^1.4.431" - "node-releases" "^2.0.12" - "update-browserslist-db" "^1.0.11" + caniuse-lite "^1.0.30001503" + electron-to-chromium "^1.4.431" + node-releases "^2.0.12" + update-browserslist-db "^1.0.11" -"bufferutil@^4.0.1": - "integrity" "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==" - "resolved" "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz" - "version" "4.0.7" +bufferutil@^4.0.1: + version "4.0.7" + resolved "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz" + integrity sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw== dependencies: - "node-gyp-build" "^4.3.0" + node-gyp-build "^4.3.0" -"bytes@3.0.0": - "integrity" "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==" - "resolved" "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz" - "version" "3.0.0" +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz" + integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== -"bytes@3.1.2": - "integrity" "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" - "resolved" "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" - "version" "3.1.2" +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== -"cacache@^15.2.0": - "integrity" "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==" - "resolved" "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz" - "version" "15.3.0" +cacache@^15.2.0: + version "15.3.0" + resolved "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz" + integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== dependencies: "@npmcli/fs" "^1.0.0" "@npmcli/move-file" "^1.0.1" - "chownr" "^2.0.0" - "fs-minipass" "^2.0.0" - "glob" "^7.1.4" - "infer-owner" "^1.0.4" - "lru-cache" "^6.0.0" - "minipass" "^3.1.1" - "minipass-collect" "^1.0.2" - "minipass-flush" "^1.0.5" - "minipass-pipeline" "^1.2.2" - "mkdirp" "^1.0.3" - "p-map" "^4.0.0" - "promise-inflight" "^1.0.1" - "rimraf" "^3.0.2" - "ssri" "^8.0.1" - "tar" "^6.0.2" - "unique-filename" "^1.1.1" + chownr "^2.0.0" + fs-minipass "^2.0.0" + glob "^7.1.4" + infer-owner "^1.0.4" + lru-cache "^6.0.0" + minipass "^3.1.1" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + mkdirp "^1.0.3" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^8.0.1" + tar "^6.0.2" + unique-filename "^1.1.1" -"call-bind@^1.0.0": - "integrity" "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==" - "resolved" "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" - "version" "1.0.2" +call-bind@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== dependencies: - "function-bind" "^1.1.1" - "get-intrinsic" "^1.0.2" + function-bind "^1.1.1" + get-intrinsic "^1.0.2" -"caniuse-lite@^1.0.30001503": - "integrity" "sha512-2S9nK0G/mE+jasCUsMPlARhRCts1ebcp2Ji8Y8PWi4NDE1iRdLCnEPHkEfeBrGC45L4isBx5ur3IQ6yTE2mRZw==" - "resolved" "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001512.tgz" - "version" "1.0.30001512" +caniuse-lite@^1.0.30001503: + version "1.0.30001512" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001512.tgz" + integrity sha512-2S9nK0G/mE+jasCUsMPlARhRCts1ebcp2Ji8Y8PWi4NDE1iRdLCnEPHkEfeBrGC45L4isBx5ur3IQ6yTE2mRZw== -"chalk@^4.1.0": - "integrity" "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==" - "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" - "version" "4.1.2" +chalk@^4.1.0: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: - "ansi-styles" "^4.1.0" - "supports-color" "^7.1.0" + ansi-styles "^4.1.0" + supports-color "^7.1.0" -"chownr@^2.0.0": - "integrity" "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" - "resolved" "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" - "version" "2.0.0" +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== -"chroma-js@^2.4.2": - "integrity" "sha512-U9eDw6+wt7V8z5NncY2jJfZa+hUH8XEj8FQHgFJTrUFnJfXYf4Ml4adI2vXZOjqRDpFWtYVWypDfZwnJ+HIR4A==" - "resolved" "https://registry.npmjs.org/chroma-js/-/chroma-js-2.4.2.tgz" - "version" "2.4.2" +chroma-js@^2.4.2: + version "2.4.2" + resolved "https://registry.npmjs.org/chroma-js/-/chroma-js-2.4.2.tgz" + integrity sha512-U9eDw6+wt7V8z5NncY2jJfZa+hUH8XEj8FQHgFJTrUFnJfXYf4Ml4adI2vXZOjqRDpFWtYVWypDfZwnJ+HIR4A== -"chrome-trace-event@^1.0.2": - "integrity" "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==" - "resolved" "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz" - "version" "1.0.3" +chrome-trace-event@^1.0.2: + version "1.0.3" + resolved "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz" + integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== -"clean-stack@^2.0.0": - "integrity" "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" - "resolved" "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" - "version" "2.2.0" +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -"clone@^2.1.1": - "integrity" "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==" - "resolved" "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz" - "version" "2.1.2" +clone@^2.1.1: + version "2.1.2" + resolved "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz" + integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== -"color-convert@^2.0.1": - "integrity" "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==" - "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" - "version" "2.0.1" +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: - "color-name" "~1.1.4" + color-name "~1.1.4" -"color-name@~1.1.4": - "integrity" "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - "version" "1.1.4" +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -"color-support@^1.1.2", "color-support@^1.1.3": - "integrity" "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" - "resolved" "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" - "version" "1.1.3" +color-support@^1.1.2, color-support@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== -"colorette@2.0.19": - "integrity" "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==" - "resolved" "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz" - "version" "2.0.19" +colorette@2.0.19: + version "2.0.19" + resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz" + integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== -"commander@^9.1.0": - "integrity" "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==" - "resolved" "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz" - "version" "9.5.0" +commander@^9.1.0: + version "9.5.0" + resolved "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz" + integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== -"compressible@~2.0.16": - "integrity" "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==" - "resolved" "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz" - "version" "2.0.18" +compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== dependencies: - "mime-db" ">= 1.43.0 < 2" + mime-db ">= 1.43.0 < 2" -"compression@^1.7.4": - "integrity" "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==" - "resolved" "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz" - "version" "1.7.4" +compression@^1.7.4: + version "1.7.4" + resolved "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== dependencies: - "accepts" "~1.3.5" - "bytes" "3.0.0" - "compressible" "~2.0.16" - "debug" "2.6.9" - "on-headers" "~1.0.2" - "safe-buffer" "5.1.2" - "vary" "~1.1.2" + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.16" + debug "2.6.9" + on-headers "~1.0.2" + safe-buffer "5.1.2" + vary "~1.1.2" -"concat-map@0.0.1": - "integrity" "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - "resolved" "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - "version" "0.0.1" +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== -"console-control-strings@^1.0.0", "console-control-strings@^1.1.0": - "integrity" "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" - "resolved" "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" - "version" "1.1.0" +console-control-strings@^1.0.0, console-control-strings@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" + integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== -"content-disposition@0.5.4": - "integrity" "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==" - "resolved" "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz" - "version" "0.5.4" +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== dependencies: - "safe-buffer" "5.2.1" + safe-buffer "5.2.1" -"content-type@~1.0.4": - "integrity" "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==" - "resolved" "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz" - "version" "1.0.5" +content-type@~1.0.4: + version "1.0.5" + resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== -"cookie-signature@1.0.6": - "integrity" "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - "resolved" "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" - "version" "1.0.6" +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== -"cookie@0.5.0": - "integrity" "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" - "resolved" "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz" - "version" "0.5.0" +cookie@0.5.0: + version "0.5.0" + resolved "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== -"cwise-compiler@^1.1.2": - "integrity" "sha512-WXlK/m+Di8DMMcCjcWr4i+XzcQra9eCdXIJrgh4TUgh0pIS/yJduLxS9JgefsHJ/YVLdgPtXm9r62W92MvanEQ==" - "resolved" "https://registry.npmjs.org/cwise-compiler/-/cwise-compiler-1.1.3.tgz" - "version" "1.1.3" +cwise-compiler@^1.1.2: + version "1.1.3" + resolved "https://registry.npmjs.org/cwise-compiler/-/cwise-compiler-1.1.3.tgz" + integrity sha512-WXlK/m+Di8DMMcCjcWr4i+XzcQra9eCdXIJrgh4TUgh0pIS/yJduLxS9JgefsHJ/YVLdgPtXm9r62W92MvanEQ== dependencies: - "uniq" "^1.0.0" + uniq "^1.0.0" -"d@^1.0.1", "d@1": - "integrity" "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==" - "resolved" "https://registry.npmjs.org/d/-/d-1.0.1.tgz" - "version" "1.0.1" +d@^1.0.1, d@1: + version "1.0.1" + resolved "https://registry.npmjs.org/d/-/d-1.0.1.tgz" + integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== dependencies: - "es5-ext" "^0.10.50" - "type" "^1.0.1" + es5-ext "^0.10.50" + type "^1.0.1" -"debug@^2.2.0", "debug@2.6.9": - "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" - "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" - "version" "2.6.9" +debug@^2.2.0, debug@2.6.9: + version "2.6.9" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: - "ms" "2.0.0" + ms "2.0.0" -"debug@^4.1.0": - "integrity" "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==" - "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" - "version" "4.3.4" +debug@^4.1.0: + version "4.3.4" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: - "ms" "2.1.2" + ms "2.1.2" -"debug@^4.3.3": - "integrity" "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==" - "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" - "version" "4.3.4" +debug@^4.3.3: + version "4.3.4" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: - "ms" "2.1.2" + ms "2.1.2" -"debug@4.3.4": - "integrity" "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==" - "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" - "version" "4.3.4" +debug@4: + version "4.3.4" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: - "ms" "2.1.2" + ms "2.1.2" -"debug@4": - "integrity" "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==" - "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" - "version" "4.3.4" +debug@4.3.4: + version "4.3.4" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: - "ms" "2.1.2" + ms "2.1.2" -"delegates@^1.0.0": - "integrity" "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" - "resolved" "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" - "version" "1.0.0" +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" + integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== -"depd@^2.0.0", "depd@2.0.0": - "integrity" "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - "resolved" "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" - "version" "2.0.0" +depd@^2.0.0, depd@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== -"destroy@1.2.0": - "integrity" "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" - "resolved" "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" - "version" "1.2.0" +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== -"detect-libc@^1.0.3": - "integrity" "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==" - "resolved" "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz" - "version" "1.0.3" +detect-libc@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz" + integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== -"detect-libc@^2.0.0": - "integrity" "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==" - "resolved" "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz" - "version" "2.0.1" +detect-libc@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz" + integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w== -"dotenv-expand@^5.1.0": - "integrity" "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==" - "resolved" "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz" - "version" "5.1.0" +dotenv-expand@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz" + integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== -"dotenv@^7.0.0": - "integrity" "sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==" - "resolved" "https://registry.npmjs.org/dotenv/-/dotenv-7.0.0.tgz" - "version" "7.0.0" +dotenv@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/dotenv/-/dotenv-7.0.0.tgz" + integrity sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g== -"ee-first@1.1.1": - "integrity" "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - "resolved" "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" - "version" "1.1.1" +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -"electron-to-chromium@^1.4.431": - "integrity" "sha512-YYbXHIBxAHe3KWvGOJOuWa6f3tgow44rBW+QAuwVp2DvGqNZeE//K2MowNdWS7XE8li5cgQDrX1LdBr41LufkA==" - "resolved" "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.451.tgz" - "version" "1.4.451" +electron-to-chromium@^1.4.431: + version "1.4.451" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.451.tgz" + integrity sha512-YYbXHIBxAHe3KWvGOJOuWa6f3tgow44rBW+QAuwVp2DvGqNZeE//K2MowNdWS7XE8li5cgQDrX1LdBr41LufkA== -"emoji-regex@^8.0.0": - "integrity" "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" - "version" "8.0.0" +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -"encodeurl@~1.0.2": - "integrity" "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" - "resolved" "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" - "version" "1.0.2" +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== -"encoding@^0.1.0", "encoding@^0.1.12": - "integrity" "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==" - "resolved" "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" - "version" "0.1.13" +encoding@^0.1.0, encoding@^0.1.12: + version "0.1.13" + resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== dependencies: - "iconv-lite" "^0.6.2" + iconv-lite "^0.6.2" -"env-paths@^2.2.0": - "integrity" "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" - "resolved" "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" - "version" "2.2.1" +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== -"err-code@^2.0.2": - "integrity" "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==" - "resolved" "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz" - "version" "2.0.3" +err-code@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz" + integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== -"es5-ext@^0.10.35", "es5-ext@^0.10.50": - "integrity" "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==" - "resolved" "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz" - "version" "0.10.62" +es5-ext@^0.10.35, es5-ext@^0.10.50: + version "0.10.62" + resolved "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz" + integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA== dependencies: - "es6-iterator" "^2.0.3" - "es6-symbol" "^3.1.3" - "next-tick" "^1.1.0" + es6-iterator "^2.0.3" + es6-symbol "^3.1.3" + next-tick "^1.1.0" -"es6-iterator@^2.0.3": - "integrity" "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==" - "resolved" "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz" - "version" "2.0.3" +es6-iterator@^2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz" + integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== dependencies: - "d" "1" - "es5-ext" "^0.10.35" - "es6-symbol" "^3.1.1" + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" -"es6-symbol@^3.1.1", "es6-symbol@^3.1.3": - "integrity" "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==" - "resolved" "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz" - "version" "3.1.3" +es6-symbol@^3.1.1, es6-symbol@^3.1.3: + version "3.1.3" + resolved "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz" + integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== dependencies: - "d" "^1.0.1" - "ext" "^1.1.2" + d "^1.0.1" + ext "^1.1.2" -"escalade@^3.1.1": - "integrity" "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - "resolved" "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" - "version" "3.1.1" +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== -"escape-html@~1.0.3": - "integrity" "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - "resolved" "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" - "version" "1.0.3" +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== -"esm@^3.2.25": - "integrity" "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==" - "resolved" "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz" - "version" "3.2.25" +esm@^3.2.25: + version "3.2.25" + resolved "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz" + integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA== -"etag@~1.8.1": - "integrity" "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" - "resolved" "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" - "version" "1.8.1" +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== -"express-basic-auth@^1.2.1": - "integrity" "sha512-L6YQ1wQ/mNjVLAmK3AG1RK6VkokA1BIY6wmiH304Xtt/cLTps40EusZsU1Uop+v9lTDPxdtzbFmdXfFO3KEnwA==" - "resolved" "https://registry.npmjs.org/express-basic-auth/-/express-basic-auth-1.2.1.tgz" - "version" "1.2.1" +express-basic-auth@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/express-basic-auth/-/express-basic-auth-1.2.1.tgz" + integrity sha512-L6YQ1wQ/mNjVLAmK3AG1RK6VkokA1BIY6wmiH304Xtt/cLTps40EusZsU1Uop+v9lTDPxdtzbFmdXfFO3KEnwA== dependencies: - "basic-auth" "^2.0.1" + basic-auth "^2.0.1" -"express@^4.18.2": - "integrity" "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==" - "resolved" "https://registry.npmjs.org/express/-/express-4.18.2.tgz" - "version" "4.18.2" +express@^4.18.2: + version "4.18.2" + resolved "https://registry.npmjs.org/express/-/express-4.18.2.tgz" + integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== dependencies: - "accepts" "~1.3.8" - "array-flatten" "1.1.1" - "body-parser" "1.20.1" - "content-disposition" "0.5.4" - "content-type" "~1.0.4" - "cookie" "0.5.0" - "cookie-signature" "1.0.6" - "debug" "2.6.9" - "depd" "2.0.0" - "encodeurl" "~1.0.2" - "escape-html" "~1.0.3" - "etag" "~1.8.1" - "finalhandler" "1.2.0" - "fresh" "0.5.2" - "http-errors" "2.0.0" - "merge-descriptors" "1.0.1" - "methods" "~1.1.2" - "on-finished" "2.4.1" - "parseurl" "~1.3.3" - "path-to-regexp" "0.1.7" - "proxy-addr" "~2.0.7" - "qs" "6.11.0" - "range-parser" "~1.2.1" - "safe-buffer" "5.2.1" - "send" "0.18.0" - "serve-static" "1.15.0" - "setprototypeof" "1.2.0" - "statuses" "2.0.1" - "type-is" "~1.6.18" - "utils-merge" "1.0.1" - "vary" "~1.1.2" + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.1" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.5.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "2.0.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.2.0" + fresh "0.5.2" + http-errors "2.0.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "2.4.1" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.7" + qs "6.11.0" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.18.0" + serve-static "1.15.0" + setprototypeof "1.2.0" + statuses "2.0.1" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" -"ext@^1.1.2": - "integrity" "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==" - "resolved" "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz" - "version" "1.7.0" +ext@^1.1.2: + version "1.7.0" + resolved "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz" + integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== dependencies: - "type" "^2.7.2" + type "^2.7.2" -"fill-range@^7.0.1": - "integrity" "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==" - "resolved" "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" - "version" "7.0.1" +fflate@^0.8.0: + version "0.8.0" + resolved "https://registry.npmjs.org/fflate/-/fflate-0.8.0.tgz" + integrity sha512-FAdS4qMuFjsJj6XHbBaZeXOgaypXp8iw/Tpyuq/w3XA41jjLHT8NPA+n7czH/DDhdncq0nAyDZmPeWXh2qmdIg== + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== dependencies: - "to-regex-range" "^5.0.1" + to-regex-range "^5.0.1" -"finalhandler@1.2.0": - "integrity" "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==" - "resolved" "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz" - "version" "1.2.0" +finalhandler@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz" + integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== dependencies: - "debug" "2.6.9" - "encodeurl" "~1.0.2" - "escape-html" "~1.0.3" - "on-finished" "2.4.1" - "parseurl" "~1.3.3" - "statuses" "2.0.1" - "unpipe" "~1.0.0" + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "2.4.1" + parseurl "~1.3.3" + statuses "2.0.1" + unpipe "~1.0.0" -"forwarded@0.2.0": - "integrity" "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" - "resolved" "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" - "version" "0.2.0" +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== -"fresh@0.5.2": - "integrity" "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" - "resolved" "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" - "version" "0.5.2" +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== -"fs-minipass@^2.0.0": - "integrity" "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==" - "resolved" "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" - "version" "2.1.0" +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== dependencies: - "minipass" "^3.0.0" + minipass "^3.0.0" -"fs.realpath@^1.0.0": - "integrity" "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - "resolved" "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" - "version" "1.0.0" +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== -"function-bind@^1.1.1": - "integrity" "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - "resolved" "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" - "version" "1.1.1" +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -"gauge@^3.0.0": - "integrity" "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==" - "resolved" "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz" - "version" "3.0.2" +gauge@^3.0.0: + version "3.0.2" + resolved "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz" + integrity sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q== dependencies: - "aproba" "^1.0.3 || ^2.0.0" - "color-support" "^1.1.2" - "console-control-strings" "^1.0.0" - "has-unicode" "^2.0.1" - "object-assign" "^4.1.1" - "signal-exit" "^3.0.0" - "string-width" "^4.2.3" - "strip-ansi" "^6.0.1" - "wide-align" "^1.1.2" + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.2" + console-control-strings "^1.0.0" + has-unicode "^2.0.1" + object-assign "^4.1.1" + signal-exit "^3.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.2" -"gauge@^4.0.3": - "integrity" "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==" - "resolved" "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz" - "version" "4.0.4" +gauge@^4.0.3: + version "4.0.4" + resolved "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz" + integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== dependencies: - "aproba" "^1.0.3 || ^2.0.0" - "color-support" "^1.1.3" - "console-control-strings" "^1.1.0" - "has-unicode" "^2.0.1" - "signal-exit" "^3.0.7" - "string-width" "^4.2.3" - "strip-ansi" "^6.0.1" - "wide-align" "^1.1.5" + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.3" + console-control-strings "^1.1.0" + has-unicode "^2.0.1" + signal-exit "^3.0.7" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.5" -"get-intrinsic@^1.0.2": - "integrity" "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==" - "resolved" "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz" - "version" "1.2.1" +get-intrinsic@^1.0.2: + version "1.2.1" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz" + integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== dependencies: - "function-bind" "^1.1.1" - "has" "^1.0.3" - "has-proto" "^1.0.1" - "has-symbols" "^1.0.3" + function-bind "^1.1.1" + has "^1.0.3" + has-proto "^1.0.1" + has-symbols "^1.0.3" -"get-package-type@^0.1.0": - "integrity" "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==" - "resolved" "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz" - "version" "0.1.0" +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== -"getopts@2.3.0": - "integrity" "sha512-5eDf9fuSXwxBL6q5HX+dhDj+dslFGWzU5thZ9kNKUkcPtaPdatmUFKwHFrLb/uf/WpA4BHET+AX3Scl56cAjpA==" - "resolved" "https://registry.npmjs.org/getopts/-/getopts-2.3.0.tgz" - "version" "2.3.0" +getopts@2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/getopts/-/getopts-2.3.0.tgz" + integrity sha512-5eDf9fuSXwxBL6q5HX+dhDj+dslFGWzU5thZ9kNKUkcPtaPdatmUFKwHFrLb/uf/WpA4BHET+AX3Scl56cAjpA== -"glob@^7.1.3", "glob@^7.1.4": - "integrity" "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==" - "resolved" "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" - "version" "7.2.3" +glob@^7.1.3, glob@^7.1.4: + version "7.2.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: - "fs.realpath" "^1.0.0" - "inflight" "^1.0.4" - "inherits" "2" - "minimatch" "^3.1.1" - "once" "^1.3.0" - "path-is-absolute" "^1.0.0" + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" -"graceful-fs@^4.2.6": - "integrity" "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - "resolved" "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" - "version" "4.2.11" +graceful-fs@^4.2.6: + version "4.2.11" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== -"has-flag@^4.0.0": - "integrity" "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" - "version" "4.0.0" +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -"has-proto@^1.0.1": - "integrity" "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==" - "resolved" "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz" - "version" "1.0.1" +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== -"has-symbols@^1.0.3": - "integrity" "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - "resolved" "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" - "version" "1.0.3" +has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== -"has-unicode@^2.0.1": - "integrity" "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" - "resolved" "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" - "version" "2.0.1" +has-unicode@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" + integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== -"has@^1.0.3": - "integrity" "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==" - "resolved" "https://registry.npmjs.org/has/-/has-1.0.3.tgz" - "version" "1.0.3" +has@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== dependencies: - "function-bind" "^1.1.1" + function-bind "^1.1.1" -"http-cache-semantics@^4.1.0": - "integrity" "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" - "resolved" "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz" - "version" "4.1.1" +http-cache-semantics@^4.1.0: + version "4.1.1" + resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== -"http-errors@2.0.0": - "integrity" "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==" - "resolved" "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" - "version" "2.0.0" +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== dependencies: - "depd" "2.0.0" - "inherits" "2.0.4" - "setprototypeof" "1.2.0" - "statuses" "2.0.1" - "toidentifier" "1.0.1" + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" -"http-proxy-agent@^4.0.1": - "integrity" "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==" - "resolved" "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz" - "version" "4.0.1" +http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== dependencies: "@tootallnate/once" "1" - "agent-base" "6" - "debug" "4" + agent-base "6" + debug "4" -"https-proxy-agent@^5.0.0": - "integrity" "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==" - "resolved" "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" - "version" "5.0.1" +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== dependencies: - "agent-base" "6" - "debug" "4" + agent-base "6" + debug "4" -"humanize-ms@^1.2.1": - "integrity" "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==" - "resolved" "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" - "version" "1.2.1" +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" + integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== dependencies: - "ms" "^2.0.0" + ms "^2.0.0" -"iconv-lite@^0.6.2": - "integrity" "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==" - "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" - "version" "0.6.3" +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== dependencies: - "safer-buffer" ">= 2.1.2 < 3.0.0" + safer-buffer ">= 2.1.2 < 3.0.0" -"iconv-lite@0.4.24": - "integrity" "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==" - "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" - "version" "0.4.24" +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: - "safer-buffer" ">= 2.1.2 < 3" + safer-buffer ">= 2.1.2 < 3" -"imurmurhash@^0.1.4": - "integrity" "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" - "resolved" "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" - "version" "0.1.4" +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== -"indent-string@^4.0.0": - "integrity" "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" - "resolved" "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" - "version" "4.0.0" +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== -"infer-owner@^1.0.4": - "integrity" "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" - "resolved" "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz" - "version" "1.0.4" +infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== -"inflight@^1.0.4": - "integrity" "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==" - "resolved" "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" - "version" "1.0.6" +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: - "once" "^1.3.0" - "wrappy" "1" + once "^1.3.0" + wrappy "1" -"inherits@^2.0.3", "inherits@2", "inherits@2.0.4": - "integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" - "version" "2.0.4" +inherits@^2.0.3, inherits@2, inherits@2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -"interpret@^2.2.0": - "integrity" "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==" - "resolved" "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz" - "version" "2.2.0" +interpret@^2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz" + integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== -"iota-array@^1.0.0": - "integrity" "sha512-pZ2xT+LOHckCatGQ3DcG/a+QuEqvoxqkiL7tvE8nn3uuu+f6i1TtpB5/FtWFbxUuVr5PZCx8KskuGatbJDXOWA==" - "resolved" "https://registry.npmjs.org/iota-array/-/iota-array-1.0.0.tgz" - "version" "1.0.0" +iota-array@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/iota-array/-/iota-array-1.0.0.tgz" + integrity sha512-pZ2xT+LOHckCatGQ3DcG/a+QuEqvoxqkiL7tvE8nn3uuu+f6i1TtpB5/FtWFbxUuVr5PZCx8KskuGatbJDXOWA== -"ip@^2.0.0": - "integrity" "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" - "resolved" "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz" - "version" "2.0.0" +ip@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz" + integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== -"ipaddr.js@1.9.1": - "integrity" "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" - "resolved" "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" - "version" "1.9.1" +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== -"is-buffer@^1.0.2": - "integrity" "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - "resolved" "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" - "version" "1.1.6" +is-buffer@^1.0.2: + version "1.1.6" + resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -"is-core-module@^2.11.0": - "integrity" "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==" - "resolved" "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz" - "version" "2.12.1" +is-core-module@^2.11.0: + version "2.12.1" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz" + integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== dependencies: - "has" "^1.0.3" + has "^1.0.3" -"is-extglob@^2.1.1": - "integrity" "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" - "resolved" "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" - "version" "2.1.1" +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== -"is-fullwidth-code-point@^3.0.0": - "integrity" "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" - "version" "3.0.0" +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -"is-glob@^4.0.3": - "integrity" "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==" - "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" - "version" "4.0.3" +is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: - "is-extglob" "^2.1.1" + is-extglob "^2.1.1" -"is-lambda@^1.0.1": - "integrity" "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==" - "resolved" "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz" - "version" "1.0.1" +is-lambda@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz" + integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== -"is-number@^7.0.0": - "integrity" "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - "resolved" "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" - "version" "7.0.0" +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -"is-typedarray@^1.0.0": - "integrity" "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - "resolved" "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" - "version" "1.0.0" +is-typedarray@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== -"isexe@^2.0.0": - "integrity" "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - "resolved" "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" - "version" "2.0.0" +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== -"joi@^17.9.2": - "integrity" "sha512-Itk/r+V4Dx0V3c7RLFdRh12IOjySm2/WGPMubBT92cQvRfYZhPM2W0hZlctjj72iES8jsRCwp7S/cRmWBnJ4nw==" - "resolved" "https://registry.npmjs.org/joi/-/joi-17.9.2.tgz" - "version" "17.9.2" +joi@^17.9.2: + version "17.9.2" + resolved "https://registry.npmjs.org/joi/-/joi-17.9.2.tgz" + integrity sha512-Itk/r+V4Dx0V3c7RLFdRh12IOjySm2/WGPMubBT92cQvRfYZhPM2W0hZlctjj72iES8jsRCwp7S/cRmWBnJ4nw== dependencies: "@hapi/hoek" "^9.0.0" "@hapi/topo" "^5.0.0" @@ -1195,51 +1200,51 @@ "@sideway/formula" "^3.0.1" "@sideway/pinpoint" "^2.0.0" -"jpeg-js@^0.4.4": - "integrity" "sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==" - "resolved" "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.4.tgz" - "version" "0.4.4" +jpeg-js@^0.4.4: + version "0.4.4" + resolved "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.4.tgz" + integrity sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg== -"json5@^2.2.0", "json5@^2.2.1": - "integrity" "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" - "resolved" "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" - "version" "2.2.3" +json5@^2.2.0, json5@^2.2.1: + version "2.2.3" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== -"knex@^2.4.2": - "integrity" "sha512-tMI1M7a+xwHhPxjbl/H9K1kHX+VncEYcvCx5K00M16bWvpYPKAZd6QrCu68PtHAdIZNQPWZn0GVhqVBEthGWCg==" - "resolved" "https://registry.npmjs.org/knex/-/knex-2.4.2.tgz" - "version" "2.4.2" +knex@^2.4.2: + version "2.4.2" + resolved "https://registry.npmjs.org/knex/-/knex-2.4.2.tgz" + integrity sha512-tMI1M7a+xwHhPxjbl/H9K1kHX+VncEYcvCx5K00M16bWvpYPKAZd6QrCu68PtHAdIZNQPWZn0GVhqVBEthGWCg== dependencies: - "colorette" "2.0.19" - "commander" "^9.1.0" - "debug" "4.3.4" - "escalade" "^3.1.1" - "esm" "^3.2.25" - "get-package-type" "^0.1.0" - "getopts" "2.3.0" - "interpret" "^2.2.0" - "lodash" "^4.17.21" - "pg-connection-string" "2.5.0" - "rechoir" "^0.8.0" - "resolve-from" "^5.0.0" - "tarn" "^3.0.2" - "tildify" "2.0.0" + colorette "2.0.19" + commander "^9.1.0" + debug "4.3.4" + escalade "^3.1.1" + esm "^3.2.25" + get-package-type "^0.1.0" + getopts "2.3.0" + interpret "^2.2.0" + lodash "^4.17.21" + pg-connection-string "2.5.0" + rechoir "^0.8.0" + resolve-from "^5.0.0" + tarn "^3.0.2" + tildify "2.0.0" -"lazyness@^1.2.0": - "integrity" "sha512-KenL6EFbwxBwRxG93t0gcUyi0Nw0Ub31FJKN1laA4UscdkL1K1AxUd0gYZdcLU3v+x+wcFi4uQKS5hL+fk500g==" - "resolved" "https://registry.npmjs.org/lazyness/-/lazyness-1.2.0.tgz" - "version" "1.2.0" +lazyness@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/lazyness/-/lazyness-1.2.0.tgz" + integrity sha512-KenL6EFbwxBwRxG93t0gcUyi0Nw0Ub31FJKN1laA4UscdkL1K1AxUd0gYZdcLU3v+x+wcFi4uQKS5hL+fk500g== -"lmdb@2.7.11": - "integrity" "sha512-x9bD4hVp7PFLUoELL8RglbNXhAMt5CYhkmss+CEau9KlNoilsTzNi9QDsPZb3KMpOGZXG6jmXhW3bBxE2XVztw==" - "resolved" "https://registry.npmjs.org/lmdb/-/lmdb-2.7.11.tgz" - "version" "2.7.11" +lmdb@2.7.11: + version "2.7.11" + resolved "https://registry.npmjs.org/lmdb/-/lmdb-2.7.11.tgz" + integrity sha512-x9bD4hVp7PFLUoELL8RglbNXhAMt5CYhkmss+CEau9KlNoilsTzNi9QDsPZb3KMpOGZXG6jmXhW3bBxE2XVztw== dependencies: - "msgpackr" "1.8.5" - "node-addon-api" "^4.3.0" - "node-gyp-build-optional-packages" "5.0.6" - "ordered-binary" "^1.4.0" - "weak-lru-cache" "^1.2.2" + msgpackr "1.8.5" + node-addon-api "^4.3.0" + node-gyp-build-optional-packages "5.0.6" + ordered-binary "^1.4.0" + weak-lru-cache "^1.2.2" optionalDependencies: "@lmdb/lmdb-darwin-arm64" "2.7.11" "@lmdb/lmdb-darwin-x64" "2.7.11" @@ -1248,179 +1253,179 @@ "@lmdb/lmdb-linux-x64" "2.7.11" "@lmdb/lmdb-win32-x64" "2.7.11" -"lodash@^4.17.21": - "integrity" "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - "resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" - "version" "4.17.21" +lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -"lru-cache@^6.0.0": - "integrity" "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==" - "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" - "version" "6.0.0" +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== dependencies: - "yallist" "^4.0.0" + yallist "^4.0.0" -"make-dir@^3.1.0": - "integrity" "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==" - "resolved" "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" - "version" "3.1.0" +make-dir@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== dependencies: - "semver" "^6.0.0" + semver "^6.0.0" -"make-fetch-happen@^9.1.0": - "integrity" "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==" - "resolved" "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz" - "version" "9.1.0" +make-fetch-happen@^9.1.0: + version "9.1.0" + resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz" + integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== dependencies: - "agentkeepalive" "^4.1.3" - "cacache" "^15.2.0" - "http-cache-semantics" "^4.1.0" - "http-proxy-agent" "^4.0.1" - "https-proxy-agent" "^5.0.0" - "is-lambda" "^1.0.1" - "lru-cache" "^6.0.0" - "minipass" "^3.1.3" - "minipass-collect" "^1.0.2" - "minipass-fetch" "^1.3.2" - "minipass-flush" "^1.0.5" - "minipass-pipeline" "^1.2.4" - "negotiator" "^0.6.2" - "promise-retry" "^2.0.1" - "socks-proxy-agent" "^6.0.0" - "ssri" "^8.0.0" + agentkeepalive "^4.1.3" + cacache "^15.2.0" + http-cache-semantics "^4.1.0" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^6.0.0" + minipass "^3.1.3" + minipass-collect "^1.0.2" + minipass-fetch "^1.3.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.2" + promise-retry "^2.0.1" + socks-proxy-agent "^6.0.0" + ssri "^8.0.0" -"media-typer@0.3.0": - "integrity" "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" - "resolved" "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" - "version" "0.3.0" +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== -"merge-descriptors@1.0.1": - "integrity" "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - "resolved" "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz" - "version" "1.0.1" +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz" + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== -"methods@~1.1.2": - "integrity" "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" - "resolved" "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" - "version" "1.1.2" +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== -"micromatch@^4.0.5": - "integrity" "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==" - "resolved" "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" - "version" "4.0.5" +micromatch@^4.0.5: + version "4.0.5" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== dependencies: - "braces" "^3.0.2" - "picomatch" "^2.3.1" + braces "^3.0.2" + picomatch "^2.3.1" -"mime-db@>= 1.43.0 < 2", "mime-db@1.52.0": - "integrity" "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - "resolved" "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" - "version" "1.52.0" +"mime-db@>= 1.43.0 < 2", mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -"mime-types@~2.1.24", "mime-types@~2.1.34": - "integrity" "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==" - "resolved" "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" - "version" "2.1.35" +mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: - "mime-db" "1.52.0" + mime-db "1.52.0" -"mime@1.6.0": - "integrity" "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - "resolved" "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" - "version" "1.6.0" +mime@1.6.0: + version "1.6.0" + resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -"minimatch@^3.1.1": - "integrity" "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==" - "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" - "version" "3.1.2" +minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: - "brace-expansion" "^1.1.7" + brace-expansion "^1.1.7" -"minipass-collect@^1.0.2": - "integrity" "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==" - "resolved" "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz" - "version" "1.0.2" +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== dependencies: - "minipass" "^3.0.0" + minipass "^3.0.0" -"minipass-fetch@^1.3.2": - "integrity" "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==" - "resolved" "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz" - "version" "1.4.1" +minipass-fetch@^1.3.2: + version "1.4.1" + resolved "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz" + integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw== dependencies: - "minipass" "^3.1.0" - "minipass-sized" "^1.0.3" - "minizlib" "^2.0.0" + minipass "^3.1.0" + minipass-sized "^1.0.3" + minizlib "^2.0.0" optionalDependencies: - "encoding" "^0.1.12" + encoding "^0.1.12" -"minipass-flush@^1.0.5": - "integrity" "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==" - "resolved" "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz" - "version" "1.0.5" +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== dependencies: - "minipass" "^3.0.0" + minipass "^3.0.0" -"minipass-pipeline@^1.2.2", "minipass-pipeline@^1.2.4": - "integrity" "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==" - "resolved" "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz" - "version" "1.2.4" +minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: + version "1.2.4" + resolved "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== dependencies: - "minipass" "^3.0.0" + minipass "^3.0.0" -"minipass-sized@^1.0.3": - "integrity" "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==" - "resolved" "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz" - "version" "1.0.3" +minipass-sized@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz" + integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== dependencies: - "minipass" "^3.0.0" + minipass "^3.0.0" -"minipass@^3.0.0", "minipass@^3.1.0", "minipass@^3.1.1", "minipass@^3.1.3": - "integrity" "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==" - "resolved" "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz" - "version" "3.3.6" +minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: + version "3.3.6" + resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz" + integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== dependencies: - "yallist" "^4.0.0" + yallist "^4.0.0" -"minipass@^5.0.0": - "integrity" "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==" - "resolved" "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz" - "version" "5.0.0" +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== -"minizlib@^2.0.0", "minizlib@^2.1.1": - "integrity" "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==" - "resolved" "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" - "version" "2.1.2" +minizlib@^2.0.0, minizlib@^2.1.1: + version "2.1.2" + resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== dependencies: - "minipass" "^3.0.0" - "yallist" "^4.0.0" + minipass "^3.0.0" + yallist "^4.0.0" -"mkdirp@^1.0.3", "mkdirp@^1.0.4": - "integrity" "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" - "version" "1.0.4" +mkdirp@^1.0.3, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -"ms@^2.0.0", "ms@2.0.0": - "integrity" "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - "resolved" "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" - "version" "2.0.0" +ms@^2.0.0, ms@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== -"ms@2.1.2": - "integrity" "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" - "version" "2.1.2" +ms@2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -"ms@2.1.3": - "integrity" "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" - "version" "2.1.3" +ms@2.1.3: + version "2.1.3" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -"msgpackr-extract@^3.0.1", "msgpackr-extract@^3.0.2": - "integrity" "sha512-SdzXp4kD/Qf8agZ9+iTu6eql0m3kWm1A2y1hkpTeVNENutaB0BwHlSvAIaMxwntmRUAUjon2V4L8Z/njd0Ct8A==" - "resolved" "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.2.tgz" - "version" "3.0.2" +msgpackr-extract@^3.0.1, msgpackr-extract@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.2.tgz" + integrity sha512-SdzXp4kD/Qf8agZ9+iTu6eql0m3kWm1A2y1hkpTeVNENutaB0BwHlSvAIaMxwntmRUAUjon2V4L8Z/njd0Ct8A== dependencies: - "node-gyp-build-optional-packages" "5.0.7" + node-gyp-build-optional-packages "5.0.7" optionalDependencies: "@msgpackr-extract/msgpackr-extract-darwin-arm64" "3.0.2" "@msgpackr-extract/msgpackr-extract-darwin-x64" "3.0.2" @@ -1429,723 +1434,723 @@ "@msgpackr-extract/msgpackr-extract-linux-x64" "3.0.2" "@msgpackr-extract/msgpackr-extract-win32-x64" "3.0.2" -"msgpackr@^1.5.4": - "integrity" "sha512-/IJ3cFSN6Ci3eG2wLhbFEL6GT63yEaoN/R5My2QkV6zro+OJaVRLPlwvxY7EtHYSmDlQpk8stvOQTL2qJFkDRg==" - "resolved" "https://registry.npmjs.org/msgpackr/-/msgpackr-1.9.5.tgz" - "version" "1.9.5" +msgpackr@^1.5.4: + version "1.9.5" + resolved "https://registry.npmjs.org/msgpackr/-/msgpackr-1.9.5.tgz" + integrity sha512-/IJ3cFSN6Ci3eG2wLhbFEL6GT63yEaoN/R5My2QkV6zro+OJaVRLPlwvxY7EtHYSmDlQpk8stvOQTL2qJFkDRg== optionalDependencies: - "msgpackr-extract" "^3.0.2" + msgpackr-extract "^3.0.2" -"msgpackr@1.8.5": - "integrity" "sha512-mpPs3qqTug6ahbblkThoUY2DQdNXcm4IapwOS3Vm/87vmpzLVelvp9h3It1y9l1VPpiFLV11vfOXnmeEwiIXwg==" - "resolved" "https://registry.npmjs.org/msgpackr/-/msgpackr-1.8.5.tgz" - "version" "1.8.5" +msgpackr@1.8.5: + version "1.8.5" + resolved "https://registry.npmjs.org/msgpackr/-/msgpackr-1.8.5.tgz" + integrity sha512-mpPs3qqTug6ahbblkThoUY2DQdNXcm4IapwOS3Vm/87vmpzLVelvp9h3It1y9l1VPpiFLV11vfOXnmeEwiIXwg== optionalDependencies: - "msgpackr-extract" "^3.0.1" + msgpackr-extract "^3.0.1" -"ndarray-pack@^1.1.1": - "integrity" "sha512-51cECUJMT0rUZNQa09EoKsnFeDL4x2dHRT0VR5U2H5ZgEcm95ZDWcMA5JShroXjHOejmAD/fg8+H+OvUnVXz2g==" - "resolved" "https://registry.npmjs.org/ndarray-pack/-/ndarray-pack-1.2.1.tgz" - "version" "1.2.1" +ndarray-pack@^1.1.1: + version "1.2.1" + resolved "https://registry.npmjs.org/ndarray-pack/-/ndarray-pack-1.2.1.tgz" + integrity sha512-51cECUJMT0rUZNQa09EoKsnFeDL4x2dHRT0VR5U2H5ZgEcm95ZDWcMA5JShroXjHOejmAD/fg8+H+OvUnVXz2g== dependencies: - "cwise-compiler" "^1.1.2" - "ndarray" "^1.0.13" + cwise-compiler "^1.1.2" + ndarray "^1.0.13" -"ndarray@^1.0.13", "ndarray@^1.0.19": - "integrity" "sha512-B4JHA4vdyZU30ELBw3g7/p9bZupyew5a7tX1Y/gGeF2hafrPaQZhgrGQfsvgfYbgdFZjYwuEcnaobeM/WMW+HQ==" - "resolved" "https://registry.npmjs.org/ndarray/-/ndarray-1.0.19.tgz" - "version" "1.0.19" +ndarray@^1.0.13, ndarray@^1.0.19: + version "1.0.19" + resolved "https://registry.npmjs.org/ndarray/-/ndarray-1.0.19.tgz" + integrity sha512-B4JHA4vdyZU30ELBw3g7/p9bZupyew5a7tX1Y/gGeF2hafrPaQZhgrGQfsvgfYbgdFZjYwuEcnaobeM/WMW+HQ== dependencies: - "iota-array" "^1.0.0" - "is-buffer" "^1.0.2" + iota-array "^1.0.0" + is-buffer "^1.0.2" -"negotiator@^0.6.2", "negotiator@0.6.3": - "integrity" "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" - "resolved" "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" - "version" "0.6.3" +negotiator@^0.6.2, negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== -"next-tick@^1.1.0": - "integrity" "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - "resolved" "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz" - "version" "1.1.0" +next-tick@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz" + integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== -"nextgen-events@^1.5.3": - "integrity" "sha512-P6qw6kenNXP+J9XlKJNi/MNHUQ+Lx5K8FEcSfX7/w8KJdZan5+BB5MKzuNgL2RTjHG1Svg8SehfseVEp8zAqwA==" - "resolved" "https://registry.npmjs.org/nextgen-events/-/nextgen-events-1.5.3.tgz" - "version" "1.5.3" +nextgen-events@^1.5.3: + version "1.5.3" + resolved "https://registry.npmjs.org/nextgen-events/-/nextgen-events-1.5.3.tgz" + integrity sha512-P6qw6kenNXP+J9XlKJNi/MNHUQ+Lx5K8FEcSfX7/w8KJdZan5+BB5MKzuNgL2RTjHG1Svg8SehfseVEp8zAqwA== -"node-addon-api@^4.2.0": - "integrity" "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==" - "resolved" "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz" - "version" "4.3.0" +node-addon-api@^4.2.0: + version "4.3.0" + resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz" + integrity sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ== -"node-addon-api@^4.3.0": - "integrity" "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==" - "resolved" "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz" - "version" "4.3.0" +node-addon-api@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz" + integrity sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ== -"node-addon-api@^7.0.0": - "integrity" "sha512-vgbBJTS4m5/KkE16t5Ly0WW9hz46swAstv0hYYwMtbG7AznRhNyfLRe8HZAiWIpcHzoO7HxhLuBQj9rJ/Ho0ZA==" - "resolved" "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.0.0.tgz" - "version" "7.0.0" +node-addon-api@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.0.0.tgz" + integrity sha512-vgbBJTS4m5/KkE16t5Ly0WW9hz46swAstv0hYYwMtbG7AznRhNyfLRe8HZAiWIpcHzoO7HxhLuBQj9rJ/Ho0ZA== -"node-bitmap@0.0.1": - "integrity" "sha512-Jx5lPaaLdIaOsj2mVLWMWulXF6GQVdyLvNSxmiYCvZ8Ma2hfKX0POoR2kgKOqz+oFsRreq0yYZjQ2wjE9VNzCA==" - "resolved" "https://registry.npmjs.org/node-bitmap/-/node-bitmap-0.0.1.tgz" - "version" "0.0.1" +node-bitmap@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/node-bitmap/-/node-bitmap-0.0.1.tgz" + integrity sha512-Jx5lPaaLdIaOsj2mVLWMWulXF6GQVdyLvNSxmiYCvZ8Ma2hfKX0POoR2kgKOqz+oFsRreq0yYZjQ2wjE9VNzCA== -"node-fetch@^2.6.7": - "integrity" "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==" - "resolved" "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz" - "version" "2.6.11" +node-fetch@^2.6.7: + version "2.6.11" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz" + integrity sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w== dependencies: - "whatwg-url" "^5.0.0" + whatwg-url "^5.0.0" -"node-gyp-build-optional-packages@5.0.6": - "integrity" "sha512-2ZJErHG4du9G3/8IWl/l9Bp5BBFy63rno5GVmjQijvTuUZKsl6g8RB4KH/x3NLcV5ZBb4GsXmAuTYr6dRml3Gw==" - "resolved" "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.6.tgz" - "version" "5.0.6" +node-gyp-build-optional-packages@5.0.6: + version "5.0.6" + resolved "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.6.tgz" + integrity sha512-2ZJErHG4du9G3/8IWl/l9Bp5BBFy63rno5GVmjQijvTuUZKsl6g8RB4KH/x3NLcV5ZBb4GsXmAuTYr6dRml3Gw== -"node-gyp-build-optional-packages@5.0.7": - "integrity" "sha512-YlCCc6Wffkx0kHkmam79GKvDQ6x+QZkMjFGrIMxgFNILFvGSbCp2fCBC55pGTT9gVaz8Na5CLmxt/urtzRv36w==" - "resolved" "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.7.tgz" - "version" "5.0.7" +node-gyp-build-optional-packages@5.0.7: + version "5.0.7" + resolved "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.7.tgz" + integrity sha512-YlCCc6Wffkx0kHkmam79GKvDQ6x+QZkMjFGrIMxgFNILFvGSbCp2fCBC55pGTT9gVaz8Na5CLmxt/urtzRv36w== -"node-gyp-build@^4.3.0": - "integrity" "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==" - "resolved" "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz" - "version" "4.6.0" +node-gyp-build@^4.3.0: + version "4.6.0" + resolved "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz" + integrity sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ== -"node-gyp@8.x": - "integrity" "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==" - "resolved" "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz" - "version" "8.4.1" +node-gyp@8.x: + version "8.4.1" + resolved "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz" + integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w== dependencies: - "env-paths" "^2.2.0" - "glob" "^7.1.4" - "graceful-fs" "^4.2.6" - "make-fetch-happen" "^9.1.0" - "nopt" "^5.0.0" - "npmlog" "^6.0.0" - "rimraf" "^3.0.2" - "semver" "^7.3.5" - "tar" "^6.1.2" - "which" "^2.0.2" + env-paths "^2.2.0" + glob "^7.1.4" + graceful-fs "^4.2.6" + make-fetch-happen "^9.1.0" + nopt "^5.0.0" + npmlog "^6.0.0" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.2" + which "^2.0.2" -"node-releases@^2.0.12": - "integrity" "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==" - "resolved" "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz" - "version" "2.0.12" +node-releases@^2.0.12: + version "2.0.12" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz" + integrity sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ== -"nopt@^5.0.0": - "integrity" "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==" - "resolved" "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz" - "version" "5.0.0" +nopt@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz" + integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== dependencies: - "abbrev" "1" + abbrev "1" -"npmlog@^5.0.1": - "integrity" "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==" - "resolved" "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz" - "version" "5.0.1" +npmlog@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz" + integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== dependencies: - "are-we-there-yet" "^2.0.0" - "console-control-strings" "^1.1.0" - "gauge" "^3.0.0" - "set-blocking" "^2.0.0" + are-we-there-yet "^2.0.0" + console-control-strings "^1.1.0" + gauge "^3.0.0" + set-blocking "^2.0.0" -"npmlog@^6.0.0": - "integrity" "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==" - "resolved" "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz" - "version" "6.0.2" +npmlog@^6.0.0: + version "6.0.2" + resolved "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz" + integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== dependencies: - "are-we-there-yet" "^3.0.0" - "console-control-strings" "^1.1.0" - "gauge" "^4.0.3" - "set-blocking" "^2.0.0" + are-we-there-yet "^3.0.0" + console-control-strings "^1.1.0" + gauge "^4.0.3" + set-blocking "^2.0.0" -"nullthrows@^1.1.1": - "integrity" "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==" - "resolved" "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz" - "version" "1.1.1" +nullthrows@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz" + integrity sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw== -"object-assign@^4.1.1": - "integrity" "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" - "resolved" "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" - "version" "4.1.1" +object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -"object-inspect@^1.9.0": - "integrity" "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" - "resolved" "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz" - "version" "1.12.3" +object-inspect@^1.9.0: + version "1.12.3" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz" + integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== -"omggif@^1.0.10": - "integrity" "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==" - "resolved" "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz" - "version" "1.0.10" +omggif@^1.0.10: + version "1.0.10" + resolved "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz" + integrity sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw== -"on-finished@2.4.1": - "integrity" "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==" - "resolved" "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" - "version" "2.4.1" +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== dependencies: - "ee-first" "1.1.1" + ee-first "1.1.1" -"on-headers@~1.0.2": - "integrity" "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" - "resolved" "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz" - "version" "1.0.2" +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== -"once@^1.3.0": - "integrity" "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==" - "resolved" "https://registry.npmjs.org/once/-/once-1.4.0.tgz" - "version" "1.4.0" +once@^1.3.0: + version "1.4.0" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: - "wrappy" "1" + wrappy "1" -"ordered-binary@^1.4.0": - "integrity" "sha512-9LtiGlPy982CsgxZvJGNNp2/NnrgEr6EAyN3iIEP3/8vd3YLgAZQHbQ75ZrkfBRGrNg37Dk3U6tuVb+B4Xfslg==" - "resolved" "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.4.1.tgz" - "version" "1.4.1" +ordered-binary@^1.4.0: + version "1.4.1" + resolved "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.4.1.tgz" + integrity sha512-9LtiGlPy982CsgxZvJGNNp2/NnrgEr6EAyN3iIEP3/8vd3YLgAZQHbQ75ZrkfBRGrNg37Dk3U6tuVb+B4Xfslg== -"p-map@^4.0.0": - "integrity" "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==" - "resolved" "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" - "version" "4.0.0" +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== dependencies: - "aggregate-error" "^3.0.0" + aggregate-error "^3.0.0" -"parseurl@~1.3.3": - "integrity" "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - "resolved" "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" - "version" "1.3.3" +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== -"path-is-absolute@^1.0.0": - "integrity" "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" - "resolved" "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - "version" "1.0.1" +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== -"path-parse@^1.0.7": - "integrity" "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - "resolved" "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" - "version" "1.0.7" +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -"path-to-regexp@0.1.7": - "integrity" "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - "resolved" "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz" - "version" "0.1.7" +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz" + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== -"pg-connection-string@2.5.0": - "integrity" "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==" - "resolved" "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz" - "version" "2.5.0" +pg-connection-string@2.5.0: + version "2.5.0" + resolved "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz" + integrity sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ== -"picocolors@^1.0.0": - "integrity" "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - "resolved" "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" - "version" "1.0.0" +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -"picomatch@^2.3.1": - "integrity" "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" - "resolved" "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" - "version" "2.3.1" +picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -"pngjs@^6.0.0": - "integrity" "sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==" - "resolved" "https://registry.npmjs.org/pngjs/-/pngjs-6.0.0.tgz" - "version" "6.0.0" +pngjs@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/pngjs/-/pngjs-6.0.0.tgz" + integrity sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg== -"promise-inflight@^1.0.1": - "integrity" "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==" - "resolved" "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz" - "version" "1.0.1" +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz" + integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== -"promise-retry@^2.0.1": - "integrity" "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==" - "resolved" "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz" - "version" "2.0.1" +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== dependencies: - "err-code" "^2.0.2" - "retry" "^0.12.0" + err-code "^2.0.2" + retry "^0.12.0" -"proxy-addr@~2.0.7": - "integrity" "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==" - "resolved" "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz" - "version" "2.0.7" +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== dependencies: - "forwarded" "0.2.0" - "ipaddr.js" "1.9.1" + forwarded "0.2.0" + ipaddr.js "1.9.1" -"qs@6.11.0": - "integrity" "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==" - "resolved" "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz" - "version" "6.11.0" +qs@6.11.0: + version "6.11.0" + resolved "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== dependencies: - "side-channel" "^1.0.4" + side-channel "^1.0.4" -"range-parser@~1.2.1": - "integrity" "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - "resolved" "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" - "version" "1.2.1" +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -"raw-body@2.5.1": - "integrity" "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==" - "resolved" "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz" - "version" "2.5.1" +raw-body@2.5.1: + version "2.5.1" + resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz" + integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== dependencies: - "bytes" "3.1.2" - "http-errors" "2.0.0" - "iconv-lite" "0.4.24" - "unpipe" "1.0.0" + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" -"readable-stream@^3.6.0": - "integrity" "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==" - "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" - "version" "3.6.2" +readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: - "inherits" "^2.0.3" - "string_decoder" "^1.1.1" - "util-deprecate" "^1.0.1" + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" -"rechoir@^0.8.0": - "integrity" "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==" - "resolved" "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz" - "version" "0.8.0" +rechoir@^0.8.0: + version "0.8.0" + resolved "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz" + integrity sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ== dependencies: - "resolve" "^1.20.0" + resolve "^1.20.0" -"resolve-from@^5.0.0": - "integrity" "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" - "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" - "version" "5.0.0" +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -"resolve@^1.20.0": - "integrity" "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==" - "resolved" "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz" - "version" "1.22.2" +resolve@^1.20.0: + version "1.22.2" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz" + integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== dependencies: - "is-core-module" "^2.11.0" - "path-parse" "^1.0.7" - "supports-preserve-symlinks-flag" "^1.0.0" + is-core-module "^2.11.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" -"retry@^0.12.0": - "integrity" "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==" - "resolved" "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" - "version" "0.12.0" +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== -"rimraf@^3.0.2": - "integrity" "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==" - "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" - "version" "3.0.2" +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: - "glob" "^7.1.3" + glob "^7.1.3" -"safe-buffer@^5.0.1", "safe-buffer@~5.2.0", "safe-buffer@5.2.1": - "integrity" "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" - "version" "5.2.1" +safe-buffer@^5.0.1, safe-buffer@~5.2.0, safe-buffer@5.2.1: + version "5.2.1" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -"safe-buffer@5.1.2": - "integrity" "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" - "version" "5.1.2" +safe-buffer@5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": - "integrity" "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - "resolved" "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" - "version" "2.1.2" + version "2.1.2" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -"sdp@^3.2.0": - "integrity" "sha512-d7wDPgDV3DDiqulJjKiV2865wKsJ34YI+NDREbm+FySq6WuKOikwyNQcm+doLAZ1O6ltdO0SeKle2xMpN3Brgw==" - "resolved" "https://registry.npmjs.org/sdp/-/sdp-3.2.0.tgz" - "version" "3.2.0" +sdp@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/sdp/-/sdp-3.2.0.tgz" + integrity sha512-d7wDPgDV3DDiqulJjKiV2865wKsJ34YI+NDREbm+FySq6WuKOikwyNQcm+doLAZ1O6ltdO0SeKle2xMpN3Brgw== -"semver@^6.0.0": - "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" - "version" "6.3.0" +semver@^6.0.0: + version "6.3.0" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -"semver@^7.3.5", "semver@^7.5.2": - "integrity" "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==" - "resolved" "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz" - "version" "7.5.3" +semver@^7.3.5, semver@^7.5.2: + version "7.5.3" + resolved "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz" + integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ== dependencies: - "lru-cache" "^6.0.0" + lru-cache "^6.0.0" -"send@0.18.0": - "integrity" "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==" - "resolved" "https://registry.npmjs.org/send/-/send-0.18.0.tgz" - "version" "0.18.0" +send@0.18.0: + version "0.18.0" + resolved "https://registry.npmjs.org/send/-/send-0.18.0.tgz" + integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== dependencies: - "debug" "2.6.9" - "depd" "2.0.0" - "destroy" "1.2.0" - "encodeurl" "~1.0.2" - "escape-html" "~1.0.3" - "etag" "~1.8.1" - "fresh" "0.5.2" - "http-errors" "2.0.0" - "mime" "1.6.0" - "ms" "2.1.3" - "on-finished" "2.4.1" - "range-parser" "~1.2.1" - "statuses" "2.0.1" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" -"serve-static@1.15.0": - "integrity" "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==" - "resolved" "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz" - "version" "1.15.0" +serve-static@1.15.0: + version "1.15.0" + resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== dependencies: - "encodeurl" "~1.0.2" - "escape-html" "~1.0.3" - "parseurl" "~1.3.3" - "send" "0.18.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.18.0" -"set-blocking@^2.0.0": - "integrity" "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" - "resolved" "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" - "version" "2.0.0" +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== -"setimmediate@^1.0.5": - "integrity" "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" - "resolved" "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz" - "version" "1.0.5" +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz" + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== -"setprototypeof@1.2.0": - "integrity" "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - "resolved" "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" - "version" "1.2.0" +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== -"seventh@^0.8.1": - "integrity" "sha512-GQsGIdg98GLYW4KEtzr+JKfI94NTaSeJAzAL3XrObeFeHvVp7PwuVELYNzk6XO1s8rWD+tTDKce3wh/No8ZPAg==" - "resolved" "https://registry.npmjs.org/seventh/-/seventh-0.8.2.tgz" - "version" "0.8.2" +seventh@^0.8.1: + version "0.8.2" + resolved "https://registry.npmjs.org/seventh/-/seventh-0.8.2.tgz" + integrity sha512-GQsGIdg98GLYW4KEtzr+JKfI94NTaSeJAzAL3XrObeFeHvVp7PwuVELYNzk6XO1s8rWD+tTDKce3wh/No8ZPAg== dependencies: - "setimmediate" "^1.0.5" + setimmediate "^1.0.5" -"side-channel@^1.0.4": - "integrity" "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==" - "resolved" "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" - "version" "1.0.4" +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== dependencies: - "call-bind" "^1.0.0" - "get-intrinsic" "^1.0.2" - "object-inspect" "^1.9.0" + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" -"signal-exit@^3.0.0", "signal-exit@^3.0.7": - "integrity" "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - "resolved" "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" - "version" "3.0.7" +signal-exit@^3.0.0, signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== -"smart-buffer@^4.2.0": - "integrity" "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" - "resolved" "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" - "version" "4.2.0" +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== -"socks-proxy-agent@^6.0.0": - "integrity" "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==" - "resolved" "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz" - "version" "6.2.1" +socks-proxy-agent@^6.0.0: + version "6.2.1" + resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz" + integrity sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ== dependencies: - "agent-base" "^6.0.2" - "debug" "^4.3.3" - "socks" "^2.6.2" + agent-base "^6.0.2" + debug "^4.3.3" + socks "^2.6.2" -"socks@^2.6.2": - "integrity" "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==" - "resolved" "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz" - "version" "2.7.1" +socks@^2.6.2: + version "2.7.1" + resolved "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz" + integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== dependencies: - "ip" "^2.0.0" - "smart-buffer" "^4.2.0" + ip "^2.0.0" + smart-buffer "^4.2.0" -"sqlite3@^5.1.6": - "integrity" "sha512-olYkWoKFVNSSSQNvxVUfjiVbz3YtBwTJj+mfV5zpHmqW3sELx2Cf4QCdirMelhM5Zh+KDVaKgQHqCxrqiWHybw==" - "resolved" "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.6.tgz" - "version" "5.1.6" +sqlite3@^5.1.6: + version "5.1.6" + resolved "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.6.tgz" + integrity sha512-olYkWoKFVNSSSQNvxVUfjiVbz3YtBwTJj+mfV5zpHmqW3sELx2Cf4QCdirMelhM5Zh+KDVaKgQHqCxrqiWHybw== dependencies: "@mapbox/node-pre-gyp" "^1.0.0" - "node-addon-api" "^4.2.0" - "tar" "^6.1.11" + node-addon-api "^4.2.0" + tar "^6.1.11" optionalDependencies: - "node-gyp" "8.x" + node-gyp "8.x" -"ssri@^8.0.0", "ssri@^8.0.1": - "integrity" "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==" - "resolved" "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz" - "version" "8.0.1" +ssri@^8.0.0, ssri@^8.0.1: + version "8.0.1" + resolved "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz" + integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== dependencies: - "minipass" "^3.1.1" + minipass "^3.1.1" -"statuses@2.0.1": - "integrity" "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" - "resolved" "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" - "version" "2.0.1" +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== -"string_decoder@^1.1.1": - "integrity" "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==" - "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" - "version" "1.3.0" +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== dependencies: - "safe-buffer" "~5.2.0" + safe-buffer "~5.2.0" -"string-kit@^0.17.6": - "integrity" "sha512-n3/2BeEJrlzztoxeBTt9DVh0dfHordBuZoFsSJs59tk1JoPVvtvNsvAgqu0Nlpj5Y/qoQbnT8jCnfuoHcsfGnw==" - "resolved" "https://registry.npmjs.org/string-kit/-/string-kit-0.17.10.tgz" - "version" "0.17.10" +string-kit@^0.17.6: + version "0.17.10" + resolved "https://registry.npmjs.org/string-kit/-/string-kit-0.17.10.tgz" + integrity sha512-n3/2BeEJrlzztoxeBTt9DVh0dfHordBuZoFsSJs59tk1JoPVvtvNsvAgqu0Nlpj5Y/qoQbnT8jCnfuoHcsfGnw== -"string-width@^1.0.2 || 2 || 3 || 4", "string-width@^4.2.3": - "integrity" "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==" - "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" - "version" "4.2.3" +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: - "emoji-regex" "^8.0.0" - "is-fullwidth-code-point" "^3.0.0" - "strip-ansi" "^6.0.1" + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" -"strip-ansi@^6.0.1": - "integrity" "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==" - "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" - "version" "6.0.1" +strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: - "ansi-regex" "^5.0.1" + ansi-regex "^5.0.1" -"supports-color@^7.1.0": - "integrity" "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==" - "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" - "version" "7.2.0" +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: - "has-flag" "^4.0.0" + has-flag "^4.0.0" -"supports-preserve-symlinks-flag@^1.0.0": - "integrity" "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" - "resolved" "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" - "version" "1.0.0" +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -"systemjs@^6.14.1": - "integrity" "sha512-8ftwWd+XnQtZ/aGbatrN4QFNGrKJzmbtixW+ODpci7pyoTajg4sonPP8aFLESAcuVxaC1FyDESt+SpfFCH9rZQ==" - "resolved" "https://registry.npmjs.org/systemjs/-/systemjs-6.14.1.tgz" - "version" "6.14.1" +systemjs@^6.14.1: + version "6.14.1" + resolved "https://registry.npmjs.org/systemjs/-/systemjs-6.14.1.tgz" + integrity sha512-8ftwWd+XnQtZ/aGbatrN4QFNGrKJzmbtixW+ODpci7pyoTajg4sonPP8aFLESAcuVxaC1FyDESt+SpfFCH9rZQ== -"tar@^6.0.2", "tar@^6.1.11", "tar@^6.1.2": - "integrity" "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==" - "resolved" "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz" - "version" "6.1.15" +tar@^6.0.2, tar@^6.1.11, tar@^6.1.2: + version "6.1.15" + resolved "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz" + integrity sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A== dependencies: - "chownr" "^2.0.0" - "fs-minipass" "^2.0.0" - "minipass" "^5.0.0" - "minizlib" "^2.1.1" - "mkdirp" "^1.0.3" - "yallist" "^4.0.0" + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^5.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" -"tarn@^3.0.2": - "integrity" "sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ==" - "resolved" "https://registry.npmjs.org/tarn/-/tarn-3.0.2.tgz" - "version" "3.0.2" +tarn@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/tarn/-/tarn-3.0.2.tgz" + integrity sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ== -"terminal-kit@^3.0.0": - "integrity" "sha512-GSJGYF0+hoFylKJXmq0ntE42b4S7zUkxFpf7FqHGwKFPCNeGkuv3jV0tmGquZkmfh5mYb/B2xoPJiP40mJsQrg==" - "resolved" "https://registry.npmjs.org/terminal-kit/-/terminal-kit-3.0.0.tgz" - "version" "3.0.0" +terminal-kit@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/terminal-kit/-/terminal-kit-3.0.0.tgz" + integrity sha512-GSJGYF0+hoFylKJXmq0ntE42b4S7zUkxFpf7FqHGwKFPCNeGkuv3jV0tmGquZkmfh5mYb/B2xoPJiP40mJsQrg== dependencies: "@cronvel/get-pixels" "^3.4.1" - "chroma-js" "^2.4.2" - "lazyness" "^1.2.0" - "ndarray" "^1.0.19" - "nextgen-events" "^1.5.3" - "seventh" "^0.8.1" - "string-kit" "^0.17.6" - "tree-kit" "^0.7.4" + chroma-js "^2.4.2" + lazyness "^1.2.0" + ndarray "^1.0.19" + nextgen-events "^1.5.3" + seventh "^0.8.1" + string-kit "^0.17.6" + tree-kit "^0.7.4" -"tildify@2.0.0": - "integrity" "sha512-Cc+OraorugtXNfs50hU9KS369rFXCfgGLpfCfvlc+Ud5u6VWmUQsOAa9HbTvheQdYnrdJqqv1e5oIqXppMYnSw==" - "resolved" "https://registry.npmjs.org/tildify/-/tildify-2.0.0.tgz" - "version" "2.0.0" +tildify@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/tildify/-/tildify-2.0.0.tgz" + integrity sha512-Cc+OraorugtXNfs50hU9KS369rFXCfgGLpfCfvlc+Ud5u6VWmUQsOAa9HbTvheQdYnrdJqqv1e5oIqXppMYnSw== -"to-regex-range@^5.0.1": - "integrity" "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==" - "resolved" "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" - "version" "5.0.1" +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: - "is-number" "^7.0.0" + is-number "^7.0.0" -"toidentifier@1.0.1": - "integrity" "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" - "resolved" "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" - "version" "1.0.1" +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== -"tr46@~0.0.3": - "integrity" "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - "resolved" "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" - "version" "0.0.3" +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== -"tree-kit@^0.7.4": - "integrity" "sha512-Of3tPmVs3b6BhzyUJ7t0olisf47kYr9qAm0XaUpURMjdBn6TwiVaaMuTFoKkkvPGojd9trKAHlrGGcGKcdR1DA==" - "resolved" "https://registry.npmjs.org/tree-kit/-/tree-kit-0.7.4.tgz" - "version" "0.7.4" +tree-kit@^0.7.4: + version "0.7.4" + resolved "https://registry.npmjs.org/tree-kit/-/tree-kit-0.7.4.tgz" + integrity sha512-Of3tPmVs3b6BhzyUJ7t0olisf47kYr9qAm0XaUpURMjdBn6TwiVaaMuTFoKkkvPGojd9trKAHlrGGcGKcdR1DA== -"tslib@^2.4.1": - "integrity" "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" - "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz" - "version" "2.5.3" +tslib@^2.4.1: + version "2.5.3" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz" + integrity sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w== -"type-is@~1.6.18": - "integrity" "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==" - "resolved" "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" - "version" "1.6.18" +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== dependencies: - "media-typer" "0.3.0" - "mime-types" "~2.1.24" + media-typer "0.3.0" + mime-types "~2.1.24" -"type@^1.0.1": - "integrity" "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - "resolved" "https://registry.npmjs.org/type/-/type-1.2.0.tgz" - "version" "1.2.0" +type@^1.0.1: + version "1.2.0" + resolved "https://registry.npmjs.org/type/-/type-1.2.0.tgz" + integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== -"type@^2.7.2": - "integrity" "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - "resolved" "https://registry.npmjs.org/type/-/type-2.7.2.tgz" - "version" "2.7.2" +type@^2.7.2: + version "2.7.2" + resolved "https://registry.npmjs.org/type/-/type-2.7.2.tgz" + integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== -"typedarray-to-buffer@^3.1.5": - "integrity" "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==" - "resolved" "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz" - "version" "3.1.5" +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== dependencies: - "is-typedarray" "^1.0.0" + is-typedarray "^1.0.0" -"typescript@^5.1.6", "typescript@>=3.0.0": - "integrity" "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==" - "resolved" "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz" - "version" "5.1.6" +typescript@^5.1.6, typescript@>=3.0.0: + version "5.1.6" + resolved "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz" + integrity sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA== -"uniq@^1.0.0": - "integrity" "sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==" - "resolved" "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz" - "version" "1.0.1" +uniq@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz" + integrity sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA== -"unique-filename@^1.1.1": - "integrity" "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==" - "resolved" "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz" - "version" "1.1.1" +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== dependencies: - "unique-slug" "^2.0.0" + unique-slug "^2.0.0" -"unique-slug@^2.0.0": - "integrity" "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==" - "resolved" "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz" - "version" "2.0.2" +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== dependencies: - "imurmurhash" "^0.1.4" + imurmurhash "^0.1.4" -"unpipe@~1.0.0", "unpipe@1.0.0": - "integrity" "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" - "resolved" "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" - "version" "1.0.0" +unpipe@~1.0.0, unpipe@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== -"update-browserslist-db@^1.0.11": - "integrity" "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==" - "resolved" "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz" - "version" "1.0.11" +update-browserslist-db@^1.0.11: + version "1.0.11" + resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz" + integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== dependencies: - "escalade" "^3.1.1" - "picocolors" "^1.0.0" + escalade "^3.1.1" + picocolors "^1.0.0" -"utf-8-validate@^5.0.2": - "integrity" "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==" - "resolved" "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz" - "version" "5.0.10" +utf-8-validate@^5.0.2: + version "5.0.10" + resolved "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz" + integrity sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ== dependencies: - "node-gyp-build" "^4.3.0" + node-gyp-build "^4.3.0" -"util-deprecate@^1.0.1": - "integrity" "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - "resolved" "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" - "version" "1.0.2" +util-deprecate@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -"utility-types@^3.10.0": - "integrity" "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==" - "resolved" "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz" - "version" "3.10.0" +utility-types@^3.10.0: + version "3.10.0" + resolved "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz" + integrity sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg== -"utils-merge@1.0.1": - "integrity" "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" - "resolved" "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" - "version" "1.0.1" +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== -"vary@~1.1.2": - "integrity" "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" - "resolved" "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" - "version" "1.1.2" +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== -"weak-lru-cache@^1.2.2": - "integrity" "sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==" - "resolved" "https://registry.npmjs.org/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz" - "version" "1.2.2" +weak-lru-cache@^1.2.2: + version "1.2.2" + resolved "https://registry.npmjs.org/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz" + integrity sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw== -"webidl-conversions@^3.0.0": - "integrity" "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - "resolved" "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" - "version" "3.0.1" +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== -"webrtc-adapter@^8.2.3": - "integrity" "sha512-gnmRz++suzmvxtp3ehQts6s2JtAGPuDPjA1F3a9ckNpG1kYdYuHWYpazoAnL9FS5/B21tKlhkorbdCXat0+4xQ==" - "resolved" "https://registry.npmjs.org/webrtc-adapter/-/webrtc-adapter-8.2.3.tgz" - "version" "8.2.3" +webrtc-adapter@^8.2.3: + version "8.2.3" + resolved "https://registry.npmjs.org/webrtc-adapter/-/webrtc-adapter-8.2.3.tgz" + integrity sha512-gnmRz++suzmvxtp3ehQts6s2JtAGPuDPjA1F3a9ckNpG1kYdYuHWYpazoAnL9FS5/B21tKlhkorbdCXat0+4xQ== dependencies: - "sdp" "^3.2.0" + sdp "^3.2.0" -"websocket@^1.0.34": - "integrity" "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==" - "resolved" "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz" - "version" "1.0.34" +websocket@^1.0.34: + version "1.0.34" + resolved "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz" + integrity sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ== dependencies: - "bufferutil" "^4.0.1" - "debug" "^2.2.0" - "es5-ext" "^0.10.50" - "typedarray-to-buffer" "^3.1.5" - "utf-8-validate" "^5.0.2" - "yaeti" "^0.0.6" + bufferutil "^4.0.1" + debug "^2.2.0" + es5-ext "^0.10.50" + typedarray-to-buffer "^3.1.5" + utf-8-validate "^5.0.2" + yaeti "^0.0.6" -"whatwg-url@^5.0.0": - "integrity" "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==" - "resolved" "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" - "version" "5.0.0" +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== dependencies: - "tr46" "~0.0.3" - "webidl-conversions" "^3.0.0" + tr46 "~0.0.3" + webidl-conversions "^3.0.0" -"which@^2.0.2": - "integrity" "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==" - "resolved" "https://registry.npmjs.org/which/-/which-2.0.2.tgz" - "version" "2.0.2" +which@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: - "isexe" "^2.0.0" + isexe "^2.0.0" -"wide-align@^1.1.2", "wide-align@^1.1.5": - "integrity" "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==" - "resolved" "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz" - "version" "1.1.5" +wide-align@^1.1.2, wide-align@^1.1.5: + version "1.1.5" + resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz" + integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== dependencies: - "string-width" "^1.0.2 || 2 || 3 || 4" + string-width "^1.0.2 || 2 || 3 || 4" -"wrappy@1": - "integrity" "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - "resolved" "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" - "version" "1.0.2" +wrappy@1: + version "1.0.2" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -"xxhash-wasm@^0.4.2": - "integrity" "sha512-/eyHVRJQCirEkSZ1agRSCwriMhwlyUcFkXD5TPVSLP+IPzjsqMVzZwdoczLp1SoQU0R3dxz1RpIK+4YNQbCVOA==" - "resolved" "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-0.4.2.tgz" - "version" "0.4.2" +xxhash-wasm@^0.4.2: + version "0.4.2" + resolved "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-0.4.2.tgz" + integrity sha512-/eyHVRJQCirEkSZ1agRSCwriMhwlyUcFkXD5TPVSLP+IPzjsqMVzZwdoczLp1SoQU0R3dxz1RpIK+4YNQbCVOA== -"yaeti@^0.0.6": - "integrity" "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==" - "resolved" "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz" - "version" "0.0.6" +yaeti@^0.0.6: + version "0.0.6" + resolved "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz" + integrity sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug== -"yallist@^4.0.0": - "integrity" "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - "resolved" "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" - "version" "4.0.0" +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==