@pulsebeam/peer 0.0.15 → 0.0.17
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +44 -9
- package/dist/index.cjs +22 -22
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +23 -38
- package/dist/index.d.ts +23 -38
- package/dist/index.js +22 -22
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
@@ -1,37 +1,37 @@
|
|
1
|
-
var
|
1
|
+
var vt=Object.create;var $=Object.defineProperty;var Tt=Object.getOwnPropertyDescriptor;var bt=Object.getOwnPropertyNames;var Pt=Object.getPrototypeOf,xt=Object.prototype.hasOwnProperty;var kt=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),D=(e,t)=>{for(var n in t)$(e,n,{get:t[n],enumerable:!0})},_t=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of bt(t))!xt.call(e,s)&&s!==n&&$(e,s,{get:()=>t[s],enumerable:!(r=Tt(t,s))||r.enumerable});return e};var et=(e,t,n)=>(n=e!=null?vt(Pt(e)):{},_t(t||!e||!e.__esModule?$(n,"default",{value:e,enumerable:!0}):n,e));var ke=kt((gr,xe)=>{"use strict";var l={};l.generateIdentifier=function(){return Math.random().toString(36).substring(2,12)};l.localCName=l.generateIdentifier();l.splitLines=function(e){return e.trim().split(`
|
2
2
|
`).map(t=>t.trim())};l.splitSections=function(e){return e.split(`
|
3
|
-
m=`).map((r
|
4
|
-
`)};l.getDescription=function(e){let t=l.splitSections(e);return t&&t[0]};l.getMediaSections=function(e){let t=l.splitSections(e);return t.shift(),t};l.matchPrefix=function(e,t){return l.splitLines(e).filter(
|
3
|
+
m=`).map((n,r)=>(r>0?"m="+n:n).trim()+`\r
|
4
|
+
`)};l.getDescription=function(e){let t=l.splitSections(e);return t&&t[0]};l.getMediaSections=function(e){let t=l.splitSections(e);return t.shift(),t};l.matchPrefix=function(e,t){return l.splitLines(e).filter(n=>n.indexOf(t)===0)};l.parseCandidate=function(e){let t;e.indexOf("a=candidate:")===0?t=e.substring(12).split(" "):t=e.substring(10).split(" ");let n={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 r=8;r<t.length;r+=2)switch(t[r]){case"raddr":n.relatedAddress=t[r+1];break;case"rport":n.relatedPort=parseInt(t[r+1],10);break;case"tcptype":n.tcpType=t[r+1];break;case"ufrag":n.ufrag=t[r+1],n.usernameFragment=t[r+1];break;default:n[t[r]]===void 0&&(n[t[r]]=t[r+1]);break}return n};l.writeCandidate=function(e){let t=[];t.push(e.foundation);let n=e.component;n==="rtp"?t.push(1):n==="rtcp"?t.push(2):t.push(n),t.push(e.protocol.toUpperCase()),t.push(e.priority),t.push(e.address||e.ip),t.push(e.port);let r=e.type;return t.push("typ"),t.push(r),r!=="host"&&e.relatedAddress&&e.relatedPort&&(t.push("raddr"),t.push(e.relatedAddress),t.push("rport"),t.push(e.relatedPort)),e.tcpType&&e.protocol.toLowerCase()==="tcp"&&(t.push("tcptype"),t.push(e.tcpType)),(e.usernameFragment||e.ufrag)&&(t.push("ufrag"),t.push(e.usernameFragment||e.ufrag)),"candidate:"+t.join(" ")};l.parseIceOptions=function(e){return e.substring(14).split(" ")};l.parseRtpMap=function(e){let t=e.substring(9).split(" "),n={payloadType:parseInt(t.shift(),10)};return t=t[0].split("/"),n.name=t[0],n.clockRate=parseInt(t[1],10),n.channels=t.length===3?parseInt(t[2],10):1,n.numChannels=n.channels,n};l.writeRtpMap=function(e){let t=e.payloadType;e.preferredPayloadType!==void 0&&(t=e.preferredPayloadType);let n=e.channels||e.numChannels||1;return"a=rtpmap:"+t+" "+e.name+"/"+e.clockRate+(n!==1?"/"+n:"")+`\r
|
5
5
|
`};l.parseExtmap=function(e){let t=e.substring(9).split(" ");return{id:parseInt(t[0],10),direction:t[0].indexOf("/")>0?t[0].split("/")[1]:"sendrecv",uri:t[1],attributes:t.slice(2).join(" ")}};l.writeExtmap=function(e){return"a=extmap:"+(e.id||e.preferredId)+(e.direction&&e.direction!=="sendrecv"?"/"+e.direction:"")+" "+e.uri+(e.attributes?" "+e.attributes:"")+`\r
|
6
|
-
`};l.parseFmtp=function(e){let t={},r
|
7
|
-
`}return t};l.parseRtcpFb=function(e){let t=e.substring(e.indexOf(" ")+1).split(" ");return{type:t.shift(),parameter:t.join(" ")}};l.writeRtcpFb=function(e){let t="",
|
8
|
-
`}),t};l.parseSsrcMedia=function(e){let t=e.indexOf(" "),
|
9
|
-
`;return e.fingerprints.forEach(
|
10
|
-
`}),
|
11
|
-
`};l.parseCryptoKeyParams=function(e){if(e.indexOf("inline:")!==0)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}};l.writeCryptoKeyParams=function(e){return e.keyMethod+":"+e.keySalt+(e.lifeTime?"|"+e.lifeTime:"")+(e.mkiValue&&e.mkiLength?"|"+e.mkiValue+":"+e.mkiLength:"")};l.getCryptoParameters=function(e,t){return l.matchPrefix(e+t,"a=crypto:").map(l.parseCryptoLine)};l.getIceParameters=function(e,t){let
|
6
|
+
`};l.parseFmtp=function(e){let t={},n,r=e.substring(e.indexOf(" ")+1).split(";");for(let s=0;s<r.length;s++)n=r[s].trim().split("="),t[n[0].trim()]=n[1];return t};l.writeFmtp=function(e){let t="",n=e.payloadType;if(e.preferredPayloadType!==void 0&&(n=e.preferredPayloadType),e.parameters&&Object.keys(e.parameters).length){let r=[];Object.keys(e.parameters).forEach(s=>{e.parameters[s]!==void 0?r.push(s+"="+e.parameters[s]):r.push(s)}),t+="a=fmtp:"+n+" "+r.join(";")+`\r
|
7
|
+
`}return t};l.parseRtcpFb=function(e){let t=e.substring(e.indexOf(" ")+1).split(" ");return{type:t.shift(),parameter:t.join(" ")}};l.writeRtcpFb=function(e){let t="",n=e.payloadType;return e.preferredPayloadType!==void 0&&(n=e.preferredPayloadType),e.rtcpFeedback&&e.rtcpFeedback.length&&e.rtcpFeedback.forEach(r=>{t+="a=rtcp-fb:"+n+" "+r.type+(r.parameter&&r.parameter.length?" "+r.parameter:"")+`\r
|
8
|
+
`}),t};l.parseSsrcMedia=function(e){let t=e.indexOf(" "),n={ssrc:parseInt(e.substring(7,t),10)},r=e.indexOf(":",t);return r>-1?(n.attribute=e.substring(t+1,r),n.value=e.substring(r+1)):n.attribute=e.substring(t+1),n};l.parseSsrcGroup=function(e){let t=e.substring(13).split(" ");return{semantics:t.shift(),ssrcs:t.map(n=>parseInt(n,10))}};l.getMid=function(e){let t=l.matchPrefix(e,"a=mid:")[0];if(t)return t.substring(6)};l.parseFingerprint=function(e){let t=e.substring(14).split(" ");return{algorithm:t[0].toLowerCase(),value:t[1].toUpperCase()}};l.getDtlsParameters=function(e,t){return{role:"auto",fingerprints:l.matchPrefix(e+t,"a=fingerprint:").map(l.parseFingerprint)}};l.writeDtlsParameters=function(e,t){let n="a=setup:"+t+`\r
|
9
|
+
`;return e.fingerprints.forEach(r=>{n+="a=fingerprint:"+r.algorithm+" "+r.value+`\r
|
10
|
+
`}),n};l.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)}};l.writeCryptoLine=function(e){return"a=crypto:"+e.tag+" "+e.cryptoSuite+" "+(typeof e.keyParams=="object"?l.writeCryptoKeyParams(e.keyParams):e.keyParams)+(e.sessionParams?" "+e.sessionParams.join(" "):"")+`\r
|
11
|
+
`};l.parseCryptoKeyParams=function(e){if(e.indexOf("inline:")!==0)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}};l.writeCryptoKeyParams=function(e){return e.keyMethod+":"+e.keySalt+(e.lifeTime?"|"+e.lifeTime:"")+(e.mkiValue&&e.mkiLength?"|"+e.mkiValue+":"+e.mkiLength:"")};l.getCryptoParameters=function(e,t){return l.matchPrefix(e+t,"a=crypto:").map(l.parseCryptoLine)};l.getIceParameters=function(e,t){let n=l.matchPrefix(e+t,"a=ice-ufrag:")[0],r=l.matchPrefix(e+t,"a=ice-pwd:")[0];return n&&r?{usernameFragment:n.substring(12),password:r.substring(10)}:null};l.writeIceParameters=function(e){let t="a=ice-ufrag:"+e.usernameFragment+`\r
|
12
12
|
a=ice-pwd:`+e.password+`\r
|
13
13
|
`;return e.iceLite&&(t+=`a=ice-lite\r
|
14
|
-
`),t};l.parseRtpParameters=function(e){let t={codecs:[],headerExtensions:[],fecMechanisms:[],rtcp:[]},
|
15
|
-
`,
|
16
|
-
`,
|
17
|
-
`,t.codecs.forEach(s=>{
|
18
|
-
`),t.headerExtensions&&t.headerExtensions.forEach(s=>{
|
14
|
+
`),t};l.parseRtpParameters=function(e){let t={codecs:[],headerExtensions:[],fecMechanisms:[],rtcp:[]},r=l.splitLines(e)[0].split(" ");t.profile=r[2];for(let i=3;i<r.length;i++){let o=r[i],a=l.matchPrefix(e,"a=rtpmap:"+o+" ")[0];if(a){let d=l.parseRtpMap(a),c=l.matchPrefix(e,"a=fmtp:"+o+" ");switch(d.parameters=c.length?l.parseFmtp(c[0]):{},d.rtcpFeedback=l.matchPrefix(e,"a=rtcp-fb:"+o+" ").map(l.parseRtcpFb),t.codecs.push(d),d.name.toUpperCase()){case"RED":case"ULPFEC":t.fecMechanisms.push(d.name.toUpperCase());break;default:break}}}l.matchPrefix(e,"a=extmap:").forEach(i=>{t.headerExtensions.push(l.parseExtmap(i))});let s=l.matchPrefix(e,"a=rtcp-fb:* ").map(l.parseRtcpFb);return t.codecs.forEach(i=>{s.forEach(o=>{i.rtcpFeedback.find(d=>d.type===o.type&&d.parameter===o.parameter)||i.rtcpFeedback.push(o)})}),t};l.writeRtpDescription=function(e,t){let n="";n+="m="+e+" ",n+=t.codecs.length>0?"9":"0",n+=" "+(t.profile||"UDP/TLS/RTP/SAVPF")+" ",n+=t.codecs.map(s=>s.preferredPayloadType!==void 0?s.preferredPayloadType:s.payloadType).join(" ")+`\r
|
15
|
+
`,n+=`c=IN IP4 0.0.0.0\r
|
16
|
+
`,n+=`a=rtcp:9 IN IP4 0.0.0.0\r
|
17
|
+
`,t.codecs.forEach(s=>{n+=l.writeRtpMap(s),n+=l.writeFmtp(s),n+=l.writeRtcpFb(s)});let r=0;return t.codecs.forEach(s=>{s.maxptime>r&&(r=s.maxptime)}),r>0&&(n+="a=maxptime:"+r+`\r
|
18
|
+
`),t.headerExtensions&&t.headerExtensions.forEach(s=>{n+=l.writeExtmap(s)}),n};l.parseRtpEncodingParameters=function(e){let t=[],n=l.parseRtpParameters(e),r=n.fecMechanisms.indexOf("RED")!==-1,s=n.fecMechanisms.indexOf("ULPFEC")!==-1,i=l.matchPrefix(e,"a=ssrc:").map(p=>l.parseSsrcMedia(p)).filter(p=>p.attribute==="cname"),o=i.length>0&&i[0].ssrc,a,d=l.matchPrefix(e,"a=ssrc-group:FID").map(p=>p.substring(17).split(" ").map(m=>parseInt(m,10)));d.length>0&&d[0].length>1&&d[0][0]===o&&(a=d[0][1]),n.codecs.forEach(p=>{if(p.name.toUpperCase()==="RTX"&&p.parameters.apt){let u={ssrc:o,codecPayloadType:parseInt(p.parameters.apt,10)};o&&a&&(u.rtx={ssrc:a}),t.push(u),r&&(u=JSON.parse(JSON.stringify(u)),u.fec={ssrc:o,mechanism:s?"red+ulpfec":"red"},t.push(u))}}),t.length===0&&o&&t.push({ssrc:o});let c=l.matchPrefix(e,"b=");return c.length&&(c[0].indexOf("b=TIAS:")===0?c=parseInt(c[0].substring(7),10):c[0].indexOf("b=AS:")===0?c=parseInt(c[0].substring(5),10)*1e3*.95-50*40*8:c=void 0,t.forEach(p=>{p.maxBitrate=c})),t};l.parseRtcpParameters=function(e){let t={},n=l.matchPrefix(e,"a=ssrc:").map(i=>l.parseSsrcMedia(i)).filter(i=>i.attribute==="cname")[0];n&&(t.cname=n.value,t.ssrc=n.ssrc);let r=l.matchPrefix(e,"a=rtcp-rsize");t.reducedSize=r.length>0,t.compound=r.length===0;let s=l.matchPrefix(e,"a=rtcp-mux");return t.mux=s.length>0,t};l.writeRtcpParameters=function(e){let t="";return e.reducedSize&&(t+=`a=rtcp-rsize\r
|
19
19
|
`),e.mux&&(t+=`a=rtcp-mux\r
|
20
20
|
`),e.ssrc!==void 0&&e.cname&&(t+="a=ssrc:"+e.ssrc+" cname:"+e.cname+`\r
|
21
|
-
`),t};l.parseMsid=function(e){let t,
|
21
|
+
`),t};l.parseMsid=function(e){let t,n=l.matchPrefix(e,"a=msid:");if(n.length===1)return t=n[0].substring(7).split(" "),{stream:t[0],track:t[1]};let r=l.matchPrefix(e,"a=ssrc:").map(s=>l.parseSsrcMedia(s)).filter(s=>s.attribute==="msid");if(r.length>0)return t=r[0].value.split(" "),{stream:t[0],track:t[1]}};l.parseSctpDescription=function(e){let t=l.parseMLine(e),n=l.matchPrefix(e,"a=max-message-size:"),r;n.length>0&&(r=parseInt(n[0].substring(19),10)),isNaN(r)&&(r=65536);let s=l.matchPrefix(e,"a=sctp-port:");if(s.length>0)return{port:parseInt(s[0].substring(12),10),protocol:t.fmt,maxMessageSize:r};let i=l.matchPrefix(e,"a=sctpmap:");if(i.length>0){let o=i[0].substring(10).split(" ");return{port:parseInt(o[0],10),protocol:o[1],maxMessageSize:r}}};l.writeSctpDescription=function(e,t){let n=[];return e.protocol!=="DTLS/SCTP"?n=["m="+e.kind+" 9 "+e.protocol+" "+t.protocol+`\r
|
22
22
|
`,`c=IN IP4 0.0.0.0\r
|
23
23
|
`,"a=sctp-port:"+t.port+`\r
|
24
|
-
`]:
|
24
|
+
`]:n=["m="+e.kind+" 9 "+e.protocol+" "+t.port+`\r
|
25
25
|
`,`c=IN IP4 0.0.0.0\r
|
26
26
|
`,"a=sctpmap:"+t.port+" "+t.protocol+` 65535\r
|
27
|
-
`],t.maxMessageSize!==void 0&&
|
28
|
-
`),
|
29
|
-
o=`+(
|
27
|
+
`],t.maxMessageSize!==void 0&&n.push("a=max-message-size:"+t.maxMessageSize+`\r
|
28
|
+
`),n.join("")};l.generateSessionId=function(){return Math.random().toString().substr(2,22)};l.writeSessionBoilerplate=function(e,t,n){let r,s=t!==void 0?t:2;return e?r=e:r=l.generateSessionId(),`v=0\r
|
29
|
+
o=`+(n||"thisisadapterortc")+" "+r+" "+s+` IN IP4 127.0.0.1\r
|
30
30
|
s=-\r
|
31
31
|
t=0 0\r
|
32
|
-
`};l.getDirection=function(e,t){let r=l.splitLines(e);for(let n=0;n<r.length;n++)switch(r[n]){case"a=sendrecv":case"a=sendonly":case"a=recvonly":case"a=inactive":return r[n].substring(2);default:}return t?l.getDirection(t):"sendrecv"};l.getKind=function(e){return l.splitLines(e)[0].split(" ")[0].substring(2)};l.isRejected=function(e){return e.split(" ",2)[1]==="0"};l.parseMLine=function(e){let r=l.splitLines(e)[0].substring(2).split(" ");return{kind:r[0],port:parseInt(r[1],10),protocol:r[2],fmt:r.slice(3).join(" ")}};l.parseOLine=function(e){let r=l.matchPrefix(e,"o=")[0].substring(2).split(" ");return{username:r[0],sessionId:r[1],sessionVersion:parseInt(r[2],10),netType:r[3],addressType:r[4],address:r[5]}};l.isValidSDP=function(e){if(typeof e!="string"||e.length===0)return!1;let t=l.splitLines(e);for(let r=0;r<t.length;r++)if(t[r].length<2||t[r].charAt(1)!=="=")return!1;return!0};typeof xe=="object"&&(xe.exports=l)});var tt=!0,rt=!0;function b(e,t,r){let n=e.match(t);return n&&n.length>=r&&parseInt(n[r],10)}function S(e,t,r){if(!e.RTCPeerConnection)return;let n=e.RTCPeerConnection.prototype,s=n.addEventListener;n.addEventListener=function(o,a){if(o!==t)return s.apply(this,arguments);let d=c=>{let p=r(c);p&&(a.handleEvent?a.handleEvent(p):a(p))};return this._eventMap=this._eventMap||{},this._eventMap[t]||(this._eventMap[t]=new Map),this._eventMap[t].set(a,d),s.apply(this,[o,d])};let i=n.removeEventListener;n.removeEventListener=function(o,a){if(o!==t||!this._eventMap||!this._eventMap[t])return i.apply(this,arguments);if(!this._eventMap[t].has(a))return i.apply(this,arguments);let d=this._eventMap[t].get(a);return this._eventMap[t].delete(a),this._eventMap[t].size===0&&delete this._eventMap[t],Object.keys(this._eventMap).length===0&&delete this._eventMap,i.apply(this,[o,d])},Object.defineProperty(n,"on"+t,{get(){return this["_on"+t]},set(o){this["_on"+t]&&(this.removeEventListener(t,this["_on"+t]),delete this["_on"+t]),o&&this.addEventListener(t,this["_on"+t]=o)},enumerable:!0,configurable:!0})}function nt(e){return typeof e!="boolean"?new Error("Argument type: "+typeof e+". Please use a boolean."):(tt=e,e?"adapter.js logging disabled":"adapter.js logging enabled")}function st(e){return typeof e!="boolean"?new Error("Argument type: "+typeof e+". Please use a boolean."):(rt=!e,"adapter.js deprecation warnings "+(e?"disabled":"enabled"))}function O(){if(typeof window=="object"){if(tt)return;typeof console<"u"&&typeof console.log=="function"&&console.log.apply(console,arguments)}}function v(e,t){rt&&console.warn(e+" is deprecated, please use "+t+" instead.")}function it(e){let t={browser:null,version:null};if(typeof e>"u"||!e.navigator||!e.navigator.userAgent)return t.browser="Not a browser.",t;let{navigator:r}=e;if(r.userAgentData&&r.userAgentData.brands){let n=r.userAgentData.brands.find(s=>s.brand==="Chromium");if(n)return{browser:"chrome",version:parseInt(n.version,10)}}if(r.mozGetUserMedia)t.browser="firefox",t.version=b(r.userAgent,/Firefox\/(\d+)\./,1);else if(r.webkitGetUserMedia||e.isSecureContext===!1&&e.webkitRTCPeerConnection)t.browser="chrome",t.version=b(r.userAgent,/Chrom(e|ium)\/(\d+)\./,2);else if(e.RTCPeerConnection&&r.userAgent.match(/AppleWebKit\/(\d+)\./))t.browser="safari",t.version=b(r.userAgent,/AppleWebKit\/(\d+)\./,1),t.supportsUnifiedPlan=e.RTCRtpTransceiver&&"currentDirection"in e.RTCRtpTransceiver.prototype;else return t.browser="Not a supported browser.",t;return t}function et(e){return Object.prototype.toString.call(e)==="[object Object]"}function ee(e){return et(e)?Object.keys(e).reduce(function(t,r){let n=et(e[r]),s=n?ee(e[r]):e[r],i=n&&!Object.keys(s).length;return s===void 0||i?t:Object.assign(t,{[r]:s})},{}):e}function w(e,t,r){!t||r.has(t.id)||(r.set(t.id,t),Object.keys(t).forEach(n=>{n.endsWith("Id")?w(e,e.get(t[n]),r):n.endsWith("Ids")&&t[n].forEach(s=>{w(e,e.get(s),r)})}))}function te(e,t,r){let n=r?"outbound-rtp":"inbound-rtp",s=new Map;if(t===null)return s;let i=[];return e.forEach(o=>{o.type==="track"&&o.trackIdentifier===t.id&&i.push(o)}),i.forEach(o=>{e.forEach(a=>{a.type===n&&a.trackId===o.id&&w(e,a,s)})}),s}var j={};D(j,{fixNegotiationNeeded:()=>ae,shimAddTrackRemoveTrack:()=>oe,shimAddTrackRemoveTrackWithNative:()=>at,shimGetSendersWithDtmf:()=>se,shimGetUserMedia:()=>L,shimMediaStream:()=>re,shimOnTrack:()=>ne,shimPeerConnection:()=>A,shimSenderReceiverGetStats:()=>ie});var ot=O;function L(e,t){let r=e&&e.navigator;if(!r.mediaDevices)return;let n=function(a){if(typeof a!="object"||a.mandatory||a.optional)return a;let d={};return Object.keys(a).forEach(c=>{if(c==="require"||c==="advanced"||c==="mediaSource")return;let p=typeof a[c]=="object"?a[c]:{ideal:a[c]};p.exact!==void 0&&typeof p.exact=="number"&&(p.min=p.max=p.exact);let u=function(m,h){return m?m+h.charAt(0).toUpperCase()+h.slice(1):h==="deviceId"?"sourceId":h};if(p.ideal!==void 0){d.optional=d.optional||[];let m={};typeof p.ideal=="number"?(m[u("min",c)]=p.ideal,d.optional.push(m),m={},m[u("max",c)]=p.ideal,d.optional.push(m)):(m[u("",c)]=p.ideal,d.optional.push(m))}p.exact!==void 0&&typeof p.exact!="number"?(d.mandatory=d.mandatory||{},d.mandatory[u("",c)]=p.exact):["min","max"].forEach(m=>{p[m]!==void 0&&(d.mandatory=d.mandatory||{},d.mandatory[u(m,c)]=p[m])})}),a.advanced&&(d.optional=(d.optional||[]).concat(a.advanced)),d},s=function(a,d){if(t.version>=61)return d(a);if(a=JSON.parse(JSON.stringify(a)),a&&typeof a.audio=="object"){let c=function(p,u,m){u in p&&!(m in p)&&(p[m]=p[u],delete p[u])};a=JSON.parse(JSON.stringify(a)),c(a.audio,"autoGainControl","googAutoGainControl"),c(a.audio,"noiseSuppression","googNoiseSuppression"),a.audio=n(a.audio)}if(a&&typeof a.video=="object"){let c=a.video.facingMode;c=c&&(typeof c=="object"?c:{ideal:c});let p=t.version<66;if(c&&(c.exact==="user"||c.exact==="environment"||c.ideal==="user"||c.ideal==="environment")&&!(r.mediaDevices.getSupportedConstraints&&r.mediaDevices.getSupportedConstraints().facingMode&&!p)){delete a.video.facingMode;let u;if(c.exact==="environment"||c.ideal==="environment"?u=["back","rear"]:(c.exact==="user"||c.ideal==="user")&&(u=["front"]),u)return r.mediaDevices.enumerateDevices().then(m=>{m=m.filter(g=>g.kind==="videoinput");let h=m.find(g=>u.some(C=>g.label.toLowerCase().includes(C)));return!h&&m.length&&u.includes("back")&&(h=m[m.length-1]),h&&(a.video.deviceId=c.exact?{exact:h.deviceId}:{ideal:h.deviceId}),a.video=n(a.video),ot("chrome: "+JSON.stringify(a)),d(a)})}a.video=n(a.video)}return ot("chrome: "+JSON.stringify(a)),d(a)},i=function(a){return t.version>=64?a:{name:{PermissionDeniedError:"NotAllowedError",PermissionDismissedError:"NotAllowedError",InvalidStateError:"NotAllowedError",DevicesNotFoundError:"NotFoundError",ConstraintNotSatisfiedError:"OverconstrainedError",TrackStartError:"NotReadableError",MediaDeviceFailedDueToShutdown:"NotAllowedError",MediaDeviceKillSwitchOn:"NotAllowedError",TabCaptureError:"AbortError",ScreenCaptureError:"AbortError",DeviceCaptureError:"AbortError"}[a.name]||a.name,message:a.message,constraint:a.constraint||a.constraintName,toString(){return this.name+(this.message&&": ")+this.message}}},o=function(a,d,c){s(a,p=>{r.webkitGetUserMedia(p,d,u=>{c&&c(i(u))})})};if(r.getUserMedia=o.bind(r),r.mediaDevices.getUserMedia){let a=r.mediaDevices.getUserMedia.bind(r.mediaDevices);r.mediaDevices.getUserMedia=function(d){return s(d,c=>a(c).then(p=>{if(c.audio&&!p.getAudioTracks().length||c.video&&!p.getVideoTracks().length)throw p.getTracks().forEach(u=>{u.stop()}),new DOMException("","NotFoundError");return p},p=>Promise.reject(i(p))))}}}function re(e){e.MediaStream=e.MediaStream||e.webkitMediaStream}function ne(e){if(typeof e=="object"&&e.RTCPeerConnection&&!("ontrack"in e.RTCPeerConnection.prototype)){Object.defineProperty(e.RTCPeerConnection.prototype,"ontrack",{get(){return this._ontrack},set(r){this._ontrack&&this.removeEventListener("track",this._ontrack),this.addEventListener("track",this._ontrack=r)},enumerable:!0,configurable:!0});let t=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(){return this._ontrackpoly||(this._ontrackpoly=n=>{n.stream.addEventListener("addtrack",s=>{let i;e.RTCPeerConnection.prototype.getReceivers?i=this.getReceivers().find(a=>a.track&&a.track.id===s.track.id):i={track:s.track};let o=new Event("track");o.track=s.track,o.receiver=i,o.transceiver={receiver:i},o.streams=[n.stream],this.dispatchEvent(o)}),n.stream.getTracks().forEach(s=>{let i;e.RTCPeerConnection.prototype.getReceivers?i=this.getReceivers().find(a=>a.track&&a.track.id===s.id):i={track:s};let o=new Event("track");o.track=s,o.receiver=i,o.transceiver={receiver:i},o.streams=[n.stream],this.dispatchEvent(o)})},this.addEventListener("addstream",this._ontrackpoly)),t.apply(this,arguments)}}else S(e,"track",t=>(t.transceiver||Object.defineProperty(t,"transceiver",{value:{receiver:t.receiver}}),t))}function se(e){if(typeof e=="object"&&e.RTCPeerConnection&&!("getSenders"in e.RTCPeerConnection.prototype)&&"createDTMFSender"in e.RTCPeerConnection.prototype){let t=function(s,i){return{track:i,get dtmf(){return this._dtmf===void 0&&(i.kind==="audio"?this._dtmf=s.createDTMFSender(i):this._dtmf=null),this._dtmf},_pc:s}};if(!e.RTCPeerConnection.prototype.getSenders){e.RTCPeerConnection.prototype.getSenders=function(){return this._senders=this._senders||[],this._senders.slice()};let s=e.RTCPeerConnection.prototype.addTrack;e.RTCPeerConnection.prototype.addTrack=function(a,d){let c=s.apply(this,arguments);return c||(c=t(this,a),this._senders.push(c)),c};let i=e.RTCPeerConnection.prototype.removeTrack;e.RTCPeerConnection.prototype.removeTrack=function(a){i.apply(this,arguments);let d=this._senders.indexOf(a);d!==-1&&this._senders.splice(d,1)}}let r=e.RTCPeerConnection.prototype.addStream;e.RTCPeerConnection.prototype.addStream=function(i){this._senders=this._senders||[],r.apply(this,[i]),i.getTracks().forEach(o=>{this._senders.push(t(this,o))})};let n=e.RTCPeerConnection.prototype.removeStream;e.RTCPeerConnection.prototype.removeStream=function(i){this._senders=this._senders||[],n.apply(this,[i]),i.getTracks().forEach(o=>{let a=this._senders.find(d=>d.track===o);a&&this._senders.splice(this._senders.indexOf(a),1)})}}else if(typeof e=="object"&&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 n=t.apply(this,[]);return n.forEach(s=>s._pc=this),n},Object.defineProperty(e.RTCRtpSender.prototype,"dtmf",{get(){return this._dtmf===void 0&&(this.track.kind==="audio"?this._dtmf=this._pc.createDTMFSender(this.track):this._dtmf=null),this._dtmf}})}}function ie(e){if(!(typeof e=="object"&&e.RTCPeerConnection&&e.RTCRtpSender&&e.RTCRtpReceiver))return;if(!("getStats"in e.RTCRtpSender.prototype)){let r=e.RTCPeerConnection.prototype.getSenders;r&&(e.RTCPeerConnection.prototype.getSenders=function(){let i=r.apply(this,[]);return i.forEach(o=>o._pc=this),i});let n=e.RTCPeerConnection.prototype.addTrack;n&&(e.RTCPeerConnection.prototype.addTrack=function(){let i=n.apply(this,arguments);return i._pc=this,i}),e.RTCRtpSender.prototype.getStats=function(){let i=this;return this._pc.getStats().then(o=>te(o,i.track,!0))}}if(!("getStats"in e.RTCRtpReceiver.prototype)){let r=e.RTCPeerConnection.prototype.getReceivers;r&&(e.RTCPeerConnection.prototype.getReceivers=function(){let s=r.apply(this,[]);return s.forEach(i=>i._pc=this),s}),S(e,"track",n=>(n.receiver._pc=n.srcElement,n)),e.RTCRtpReceiver.prototype.getStats=function(){let s=this;return this._pc.getStats().then(i=>te(i,s.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 n=arguments[0],s,i,o;return this.getSenders().forEach(a=>{a.track===n&&(s?o=!0:s=a)}),this.getReceivers().forEach(a=>(a.track===n&&(i?o=!0:i=a),a.track===n)),o||s&&i?Promise.reject(new DOMException("There are more than one sender or receiver for the track.","InvalidAccessError")):s?s.getStats():i?i.getStats():Promise.reject(new DOMException("There is no sender or receiver for the track.","InvalidAccessError"))}return t.apply(this,arguments)}}function at(e){e.RTCPeerConnection.prototype.getLocalStreams=function(){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},Object.keys(this._shimmedLocalStreams).map(o=>this._shimmedLocalStreams[o][0])};let t=e.RTCPeerConnection.prototype.addTrack;e.RTCPeerConnection.prototype.addTrack=function(o,a){if(!a)return t.apply(this,arguments);this._shimmedLocalStreams=this._shimmedLocalStreams||{};let d=t.apply(this,arguments);return this._shimmedLocalStreams[a.id]?this._shimmedLocalStreams[a.id].indexOf(d)===-1&&this._shimmedLocalStreams[a.id].push(d):this._shimmedLocalStreams[a.id]=[a,d],d};let r=e.RTCPeerConnection.prototype.addStream;e.RTCPeerConnection.prototype.addStream=function(o){this._shimmedLocalStreams=this._shimmedLocalStreams||{},o.getTracks().forEach(c=>{if(this.getSenders().find(u=>u.track===c))throw new DOMException("Track already exists.","InvalidAccessError")});let a=this.getSenders();r.apply(this,arguments);let d=this.getSenders().filter(c=>a.indexOf(c)===-1);this._shimmedLocalStreams[o.id]=[o].concat(d)};let n=e.RTCPeerConnection.prototype.removeStream;e.RTCPeerConnection.prototype.removeStream=function(o){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},delete this._shimmedLocalStreams[o.id],n.apply(this,arguments)};let s=e.RTCPeerConnection.prototype.removeTrack;e.RTCPeerConnection.prototype.removeTrack=function(o){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},o&&Object.keys(this._shimmedLocalStreams).forEach(a=>{let d=this._shimmedLocalStreams[a].indexOf(o);d!==-1&&this._shimmedLocalStreams[a].splice(d,1),this._shimmedLocalStreams[a].length===1&&delete this._shimmedLocalStreams[a]}),s.apply(this,arguments)}}function oe(e,t){if(!e.RTCPeerConnection)return;if(e.RTCPeerConnection.prototype.addTrack&&t.version>=65)return at(e);let r=e.RTCPeerConnection.prototype.getLocalStreams;e.RTCPeerConnection.prototype.getLocalStreams=function(){let p=r.apply(this);return this._reverseStreams=this._reverseStreams||{},p.map(u=>this._reverseStreams[u.id])};let n=e.RTCPeerConnection.prototype.addStream;e.RTCPeerConnection.prototype.addStream=function(p){if(this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},p.getTracks().forEach(u=>{if(this.getSenders().find(h=>h.track===u))throw new DOMException("Track already exists.","InvalidAccessError")}),!this._reverseStreams[p.id]){let u=new e.MediaStream(p.getTracks());this._streams[p.id]=u,this._reverseStreams[u.id]=p,p=u}n.apply(this,[p])};let s=e.RTCPeerConnection.prototype.removeStream;e.RTCPeerConnection.prototype.removeStream=function(p){this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},s.apply(this,[this._streams[p.id]||p]),delete this._reverseStreams[this._streams[p.id]?this._streams[p.id].id:p.id],delete this._streams[p.id]},e.RTCPeerConnection.prototype.addTrack=function(p,u){if(this.signalingState==="closed")throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");let m=[].slice.call(arguments,1);if(m.length!==1||!m[0].getTracks().find(C=>C===p))throw new DOMException("The adapter.js addTrack polyfill only supports a single stream which is associated with the specified track.","NotSupportedError");if(this.getSenders().find(C=>C.track===p))throw new DOMException("Track already exists.","InvalidAccessError");this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{};let g=this._streams[u.id];if(g)g.addTrack(p),Promise.resolve().then(()=>{this.dispatchEvent(new Event("negotiationneeded"))});else{let C=new e.MediaStream([p]);this._streams[u.id]=C,this._reverseStreams[C.id]=u,this.addStream(C)}return this.getSenders().find(C=>C.track===p)};function i(c,p){let u=p.sdp;return Object.keys(c._reverseStreams||[]).forEach(m=>{let h=c._reverseStreams[m],g=c._streams[h.id];u=u.replace(new RegExp(g.id,"g"),h.id)}),new RTCSessionDescription({type:p.type,sdp:u})}function o(c,p){let u=p.sdp;return Object.keys(c._reverseStreams||[]).forEach(m=>{let h=c._reverseStreams[m],g=c._streams[h.id];u=u.replace(new RegExp(h.id,"g"),g.id)}),new RTCSessionDescription({type:p.type,sdp:u})}["createOffer","createAnswer"].forEach(function(c){let p=e.RTCPeerConnection.prototype[c],u={[c](){let m=arguments;return arguments.length&&typeof arguments[0]=="function"?p.apply(this,[g=>{let C=i(this,g);m[0].apply(null,[C])},g=>{m[1]&&m[1].apply(null,g)},arguments[2]]):p.apply(this,arguments).then(g=>i(this,g))}};e.RTCPeerConnection.prototype[c]=u[c]});let a=e.RTCPeerConnection.prototype.setLocalDescription;e.RTCPeerConnection.prototype.setLocalDescription=function(){return!arguments.length||!arguments[0].type?a.apply(this,arguments):(arguments[0]=o(this,arguments[0]),a.apply(this,arguments))};let d=Object.getOwnPropertyDescriptor(e.RTCPeerConnection.prototype,"localDescription");Object.defineProperty(e.RTCPeerConnection.prototype,"localDescription",{get(){let c=d.get.apply(this);return c.type===""?c:i(this,c)}}),e.RTCPeerConnection.prototype.removeTrack=function(p){if(this.signalingState==="closed")throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");if(!p._pc)throw new DOMException("Argument 1 of RTCPeerConnection.removeTrack does not implement interface RTCRtpSender.","TypeError");if(!(p._pc===this))throw new DOMException("Sender was not created by this connection.","InvalidAccessError");this._streams=this._streams||{};let m;Object.keys(this._streams).forEach(h=>{this._streams[h].getTracks().find(C=>p.track===C)&&(m=this._streams[h])}),m&&(m.getTracks().length===1?this.removeStream(this._reverseStreams[m.id]):m.removeTrack(p.track),this.dispatchEvent(new Event("negotiationneeded")))}}function A(e,t){!e.RTCPeerConnection&&e.webkitRTCPeerConnection&&(e.RTCPeerConnection=e.webkitRTCPeerConnection),e.RTCPeerConnection&&t.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach(function(r){let n=e.RTCPeerConnection.prototype[r],s={[r](){return arguments[0]=new(r==="addIceCandidate"?e.RTCIceCandidate:e.RTCSessionDescription)(arguments[0]),n.apply(this,arguments)}};e.RTCPeerConnection.prototype[r]=s[r]})}function ae(e,t){S(e,"negotiationneeded",r=>{let n=r.target;if(!((t.version<72||n.getConfiguration&&n.getConfiguration().sdpSemantics==="plan-b")&&n.signalingState!=="stable"))return r})}var N={};D(N,{shimAddTransceiver:()=>me,shimCreateAnswer:()=>ge,shimCreateOffer:()=>fe,shimGetDisplayMedia:()=>ct,shimGetParameters:()=>he,shimGetUserMedia:()=>U,shimOnTrack:()=>ce,shimPeerConnection:()=>F,shimRTCDataChannel:()=>ue,shimReceiverGetStats:()=>de,shimRemoveStream:()=>le,shimSenderGetStats:()=>pe});function U(e,t){let r=e&&e.navigator,n=e&&e.MediaStreamTrack;if(r.getUserMedia=function(s,i,o){v("navigator.getUserMedia","navigator.mediaDevices.getUserMedia"),r.mediaDevices.getUserMedia(s).then(i,o)},!(t.version>55&&"autoGainControl"in r.mediaDevices.getSupportedConstraints())){let s=function(o,a,d){a in o&&!(d in o)&&(o[d]=o[a],delete o[a])},i=r.mediaDevices.getUserMedia.bind(r.mediaDevices);if(r.mediaDevices.getUserMedia=function(o){return typeof o=="object"&&typeof o.audio=="object"&&(o=JSON.parse(JSON.stringify(o)),s(o.audio,"autoGainControl","mozAutoGainControl"),s(o.audio,"noiseSuppression","mozNoiseSuppression")),i(o)},n&&n.prototype.getSettings){let o=n.prototype.getSettings;n.prototype.getSettings=function(){let a=o.apply(this,arguments);return s(a,"mozAutoGainControl","autoGainControl"),s(a,"mozNoiseSuppression","noiseSuppression"),a}}if(n&&n.prototype.applyConstraints){let o=n.prototype.applyConstraints;n.prototype.applyConstraints=function(a){return this.kind==="audio"&&typeof a=="object"&&(a=JSON.parse(JSON.stringify(a)),s(a,"autoGainControl","mozAutoGainControl"),s(a,"noiseSuppression","mozNoiseSuppression")),o.apply(this,[a])}}}}function ct(e,t){e.navigator.mediaDevices&&"getDisplayMedia"in e.navigator.mediaDevices||e.navigator.mediaDevices&&(e.navigator.mediaDevices.getDisplayMedia=function(n){if(!(n&&n.video)){let s=new DOMException("getDisplayMedia without video constraints is undefined");return s.name="NotFoundError",s.code=8,Promise.reject(s)}return n.video===!0?n.video={mediaSource:t}:n.video.mediaSource=t,e.navigator.mediaDevices.getUserMedia(n)})}function ce(e){typeof e=="object"&&e.RTCTrackEvent&&"receiver"in e.RTCTrackEvent.prototype&&!("transceiver"in e.RTCTrackEvent.prototype)&&Object.defineProperty(e.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function F(e,t){if(typeof e!="object"||!(e.RTCPeerConnection||e.mozRTCPeerConnection))return;!e.RTCPeerConnection&&e.mozRTCPeerConnection&&(e.RTCPeerConnection=e.mozRTCPeerConnection),t.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach(function(s){let i=e.RTCPeerConnection.prototype[s],o={[s](){return arguments[0]=new(s==="addIceCandidate"?e.RTCIceCandidate:e.RTCSessionDescription)(arguments[0]),i.apply(this,arguments)}};e.RTCPeerConnection.prototype[s]=o[s]});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[i,o,a]=arguments;return n.apply(this,[i||null]).then(d=>{if(t.version<53&&!o)try{d.forEach(c=>{c.type=r[c.type]||c.type})}catch(c){if(c.name!=="TypeError")throw c;d.forEach((p,u)=>{d.set(u,Object.assign({},p,{type:r[p.type]||p.type}))})}return d}).then(o,a)}}function pe(e){if(!(typeof e=="object"&&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 s=t.apply(this,[]);return s.forEach(i=>i._pc=this),s});let r=e.RTCPeerConnection.prototype.addTrack;r&&(e.RTCPeerConnection.prototype.addTrack=function(){let s=r.apply(this,arguments);return s._pc=this,s}),e.RTCRtpSender.prototype.getStats=function(){return this.track?this._pc.getStats(this.track):Promise.resolve(new Map)}}function de(e){if(!(typeof e=="object"&&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 n=t.apply(this,[]);return n.forEach(s=>s._pc=this),n}),S(e,"track",r=>(r.receiver._pc=r.srcElement,r)),e.RTCRtpReceiver.prototype.getStats=function(){return this._pc.getStats(this.track)}}function le(e){!e.RTCPeerConnection||"removeStream"in e.RTCPeerConnection.prototype||(e.RTCPeerConnection.prototype.removeStream=function(r){v("removeStream","removeTrack"),this.getSenders().forEach(n=>{n.track&&r.getTracks().includes(n.track)&&this.removeTrack(n)})})}function ue(e){e.DataChannel&&!e.RTCDataChannel&&(e.RTCDataChannel=e.DataChannel)}function me(e){if(!(typeof e=="object"&&e.RTCPeerConnection))return;let t=e.RTCPeerConnection.prototype.addTransceiver;t&&(e.RTCPeerConnection.prototype.addTransceiver=function(){this.setParametersPromises=[];let n=arguments[1]&&arguments[1].sendEncodings;n===void 0&&(n=[]),n=[...n];let s=n.length>0;s&&n.forEach(o=>{if("rid"in o&&!/^[a-z0-9]{0,16}$/i.test(o.rid))throw new TypeError("Invalid RID value provided.");if("scaleResolutionDownBy"in o&&!(parseFloat(o.scaleResolutionDownBy)>=1))throw new RangeError("scale_resolution_down_by must be >= 1.0");if("maxFramerate"in o&&!(parseFloat(o.maxFramerate)>=0))throw new RangeError("max_framerate must be >= 0.0")});let i=t.apply(this,arguments);if(s){let{sender:o}=i,a=o.getParameters();(!("encodings"in a)||a.encodings.length===1&&Object.keys(a.encodings[0]).length===0)&&(a.encodings=n,o.sendEncodings=n,this.setParametersPromises.push(o.setParameters(a).then(()=>{delete o.sendEncodings}).catch(()=>{delete o.sendEncodings})))}return i})}function he(e){if(!(typeof e=="object"&&e.RTCRtpSender))return;let t=e.RTCRtpSender.prototype.getParameters;t&&(e.RTCRtpSender.prototype.getParameters=function(){let n=t.apply(this,arguments);return"encodings"in n||(n.encodings=[].concat(this.sendEncodings||[{}])),n})}function fe(e){if(!(typeof e=="object"&&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 ge(e){if(!(typeof e=="object"&&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)}}var q={};D(q,{shimAudioContext:()=>Pe,shimCallbacksAPI:()=>Se,shimConstraints:()=>pt,shimCreateOfferLegacy:()=>be,shimGetUserMedia:()=>Re,shimLocalStreamsAPI:()=>Ce,shimRTCIceServerUrls:()=>ve,shimRemoteStreamsAPI:()=>ye,shimTrackEventTransceiver:()=>Te});function Ce(e){if(!(typeof e!="object"||!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(n){this._localStreams||(this._localStreams=[]),this._localStreams.includes(n)||this._localStreams.push(n),n.getAudioTracks().forEach(s=>t.call(this,s,n)),n.getVideoTracks().forEach(s=>t.call(this,s,n))},e.RTCPeerConnection.prototype.addTrack=function(n,...s){return s&&s.forEach(i=>{this._localStreams?this._localStreams.includes(i)||this._localStreams.push(i):this._localStreams=[i]}),t.apply(this,arguments)}}"removeStream"in e.RTCPeerConnection.prototype||(e.RTCPeerConnection.prototype.removeStream=function(r){this._localStreams||(this._localStreams=[]);let n=this._localStreams.indexOf(r);if(n===-1)return;this._localStreams.splice(n,1);let s=r.getTracks();this.getSenders().forEach(i=>{s.includes(i.track)&&this.removeTrack(i)})})}}function ye(e){if(!(typeof e!="object"||!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(r){this._onaddstream&&(this.removeEventListener("addstream",this._onaddstream),this.removeEventListener("track",this._onaddstreampoly)),this.addEventListener("addstream",this._onaddstream=r),this.addEventListener("track",this._onaddstreampoly=n=>{n.streams.forEach(s=>{if(this._remoteStreams||(this._remoteStreams=[]),this._remoteStreams.includes(s))return;this._remoteStreams.push(s);let i=new Event("addstream");i.stream=s,this.dispatchEvent(i)})})}});let t=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(){let n=this;return this._onaddstreampoly||this.addEventListener("track",this._onaddstreampoly=function(s){s.streams.forEach(i=>{if(n._remoteStreams||(n._remoteStreams=[]),n._remoteStreams.indexOf(i)>=0)return;n._remoteStreams.push(i);let o=new Event("addstream");o.stream=i,n.dispatchEvent(o)})}),t.apply(n,arguments)}}}function Se(e){if(typeof e!="object"||!e.RTCPeerConnection)return;let t=e.RTCPeerConnection.prototype,r=t.createOffer,n=t.createAnswer,s=t.setLocalDescription,i=t.setRemoteDescription,o=t.addIceCandidate;t.createOffer=function(c,p){let u=arguments.length>=2?arguments[2]:arguments[0],m=r.apply(this,[u]);return p?(m.then(c,p),Promise.resolve()):m},t.createAnswer=function(c,p){let u=arguments.length>=2?arguments[2]:arguments[0],m=n.apply(this,[u]);return p?(m.then(c,p),Promise.resolve()):m};let a=function(d,c,p){let u=s.apply(this,[d]);return p?(u.then(c,p),Promise.resolve()):u};t.setLocalDescription=a,a=function(d,c,p){let u=i.apply(this,[d]);return p?(u.then(c,p),Promise.resolve()):u},t.setRemoteDescription=a,a=function(d,c,p){let u=o.apply(this,[d]);return p?(u.then(c,p),Promise.resolve()):u},t.addIceCandidate=a}function Re(e){let t=e&&e.navigator;if(t.mediaDevices&&t.mediaDevices.getUserMedia){let r=t.mediaDevices,n=r.getUserMedia.bind(r);t.mediaDevices.getUserMedia=s=>n(pt(s))}!t.getUserMedia&&t.mediaDevices&&t.mediaDevices.getUserMedia&&(t.getUserMedia=function(n,s,i){t.mediaDevices.getUserMedia(n).then(s,i)}.bind(t))}function pt(e){return e&&e.video!==void 0?Object.assign({},e,{video:ee(e.video)}):e}function ve(e){if(!e.RTCPeerConnection)return;let t=e.RTCPeerConnection;e.RTCPeerConnection=function(n,s){if(n&&n.iceServers){let i=[];for(let o=0;o<n.iceServers.length;o++){let a=n.iceServers[o];a.urls===void 0&&a.url?(v("RTCIceServer.url","RTCIceServer.urls"),a=JSON.parse(JSON.stringify(a)),a.urls=a.url,delete a.url,i.push(a)):i.push(n.iceServers[o])}n.iceServers=i}return new t(n,s)},e.RTCPeerConnection.prototype=t.prototype,"generateCertificate"in t&&Object.defineProperty(e.RTCPeerConnection,"generateCertificate",{get(){return t.generateCertificate}})}function Te(e){typeof e=="object"&&e.RTCTrackEvent&&"receiver"in e.RTCTrackEvent.prototype&&!("transceiver"in e.RTCTrackEvent.prototype)&&Object.defineProperty(e.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function be(e){let t=e.RTCPeerConnection.prototype.createOffer;e.RTCPeerConnection.prototype.createOffer=function(n){if(n){typeof n.offerToReceiveAudio<"u"&&(n.offerToReceiveAudio=!!n.offerToReceiveAudio);let s=this.getTransceivers().find(o=>o.receiver.track.kind==="audio");n.offerToReceiveAudio===!1&&s?s.direction==="sendrecv"?s.setDirection?s.setDirection("sendonly"):s.direction="sendonly":s.direction==="recvonly"&&(s.setDirection?s.setDirection("inactive"):s.direction="inactive"):n.offerToReceiveAudio===!0&&!s&&this.addTransceiver("audio",{direction:"recvonly"}),typeof n.offerToReceiveVideo<"u"&&(n.offerToReceiveVideo=!!n.offerToReceiveVideo);let i=this.getTransceivers().find(o=>o.receiver.track.kind==="video");n.offerToReceiveVideo===!1&&i?i.direction==="sendrecv"?i.setDirection?i.setDirection("sendonly"):i.direction="sendonly":i.direction==="recvonly"&&(i.setDirection?i.setDirection("inactive"):i.direction="inactive"):n.offerToReceiveVideo===!0&&!i&&this.addTransceiver("video",{direction:"recvonly"})}return t.apply(this,arguments)}}function Pe(e){typeof e!="object"||e.AudioContext||(e.AudioContext=e.webkitAudioContext)}var Ie={};D(Ie,{removeExtmapAllowMixed:()=>K,shimAddIceCandidateNullOrEmpty:()=>I,shimConnectionState:()=>z,shimMaxMessageSize:()=>x,shimParameterlessSetLocalDescription:()=>_,shimRTCIceCandidate:()=>P,shimRTCIceCandidateRelayProtocol:()=>G,shimSendThrowTypeError:()=>k});var T=we(ke());function P(e){if(!e.RTCIceCandidate||e.RTCIceCandidate&&"foundation"in e.RTCIceCandidate.prototype)return;let t=e.RTCIceCandidate;e.RTCIceCandidate=function(n){if(typeof n=="object"&&n.candidate&&n.candidate.indexOf("a=")===0&&(n=JSON.parse(JSON.stringify(n)),n.candidate=n.candidate.substring(2)),n.candidate&&n.candidate.length){let s=new t(n),i=T.default.parseCandidate(n.candidate);for(let o in i)o in s||Object.defineProperty(s,o,{value:i[o]});return s.toJSON=function(){return{candidate:s.candidate,sdpMid:s.sdpMid,sdpMLineIndex:s.sdpMLineIndex,usernameFragment:s.usernameFragment}},s}return new t(n)},e.RTCIceCandidate.prototype=t.prototype,S(e,"icecandidate",r=>(r.candidate&&Object.defineProperty(r,"candidate",{value:new e.RTCIceCandidate(r.candidate),writable:"false"}),r))}function G(e){!e.RTCIceCandidate||e.RTCIceCandidate&&"relayProtocol"in e.RTCIceCandidate.prototype||S(e,"icecandidate",t=>{if(t.candidate){let r=T.default.parseCandidate(t.candidate.candidate);r.type==="relay"&&(t.candidate.relayProtocol={0:"tls",1:"tcp",2:"udp"}[r.priority>>24])}return t})}function x(e,t){if(!e.RTCPeerConnection)return;"sctp"in e.RTCPeerConnection.prototype||Object.defineProperty(e.RTCPeerConnection.prototype,"sctp",{get(){return typeof this._sctp>"u"?null:this._sctp}});let r=function(a){if(!a||!a.sdp)return!1;let d=T.default.splitSections(a.sdp);return d.shift(),d.some(c=>{let p=T.default.parseMLine(c);return p&&p.kind==="application"&&p.protocol.indexOf("SCTP")!==-1})},n=function(a){let d=a.sdp.match(/mozilla...THIS_IS_SDPARTA-(\d+)/);if(d===null||d.length<2)return-1;let c=parseInt(d[1],10);return c!==c?-1:c},s=function(a){let d=65536;return t.browser==="firefox"&&(t.version<57?a===-1?d=16384:d=2147483637:t.version<60?d=t.version===57?65535:65536:d=2147483637),d},i=function(a,d){let c=65536;t.browser==="firefox"&&t.version===57&&(c=65535);let p=T.default.matchPrefix(a.sdp,"a=max-message-size:");return p.length>0?c=parseInt(p[0].substring(19),10):t.browser==="firefox"&&d!==-1&&(c=2147483637),c},o=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(){if(this._sctp=null,t.browser==="chrome"&&t.version>=76){let{sdpSemantics:d}=this.getConfiguration();d==="plan-b"&&Object.defineProperty(this,"sctp",{get(){return typeof this._sctp>"u"?null:this._sctp},enumerable:!0,configurable:!0})}if(r(arguments[0])){let d=n(arguments[0]),c=s(d),p=i(arguments[0],d),u;c===0&&p===0?u=Number.POSITIVE_INFINITY:c===0||p===0?u=Math.max(c,p):u=Math.min(c,p);let m={};Object.defineProperty(m,"maxMessageSize",{get(){return u}}),this._sctp=m}return o.apply(this,arguments)}}function k(e){if(!(e.RTCPeerConnection&&"createDataChannel"in e.RTCPeerConnection.prototype))return;function t(n,s){let i=n.send;n.send=function(){let a=arguments[0],d=a.length||a.size||a.byteLength;if(n.readyState==="open"&&s.sctp&&d>s.sctp.maxMessageSize)throw new TypeError("Message too large (can send a maximum of "+s.sctp.maxMessageSize+" bytes)");return i.apply(n,arguments)}}let r=e.RTCPeerConnection.prototype.createDataChannel;e.RTCPeerConnection.prototype.createDataChannel=function(){let s=r.apply(this,arguments);return t(s,this),s},S(e,"datachannel",n=>(t(n.channel,n.target),n))}function z(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(r){this._onconnectionstatechange&&(this.removeEventListener("connectionstatechange",this._onconnectionstatechange),delete this._onconnectionstatechange),r&&this.addEventListener("connectionstatechange",this._onconnectionstatechange=r)},enumerable:!0,configurable:!0}),["setLocalDescription","setRemoteDescription"].forEach(r=>{let n=t[r];t[r]=function(){return this._connectionstatechangepoly||(this._connectionstatechangepoly=s=>{let i=s.target;if(i._lastConnectionState!==i.connectionState){i._lastConnectionState=i.connectionState;let o=new Event("connectionstatechange",s);i.dispatchEvent(o)}return s},this.addEventListener("iceconnectionstatechange",this._connectionstatechangepoly)),n.apply(this,arguments)}})}function K(e,t){if(!e.RTCPeerConnection||t.browser==="chrome"&&t.version>=71||t.browser==="safari"&&t.version>=605)return;let r=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(s){if(s&&s.sdp&&s.sdp.indexOf(`
|
32
|
+
`};l.getDirection=function(e,t){let n=l.splitLines(e);for(let r=0;r<n.length;r++)switch(n[r]){case"a=sendrecv":case"a=sendonly":case"a=recvonly":case"a=inactive":return n[r].substring(2);default:}return t?l.getDirection(t):"sendrecv"};l.getKind=function(e){return l.splitLines(e)[0].split(" ")[0].substring(2)};l.isRejected=function(e){return e.split(" ",2)[1]==="0"};l.parseMLine=function(e){let n=l.splitLines(e)[0].substring(2).split(" ");return{kind:n[0],port:parseInt(n[1],10),protocol:n[2],fmt:n.slice(3).join(" ")}};l.parseOLine=function(e){let n=l.matchPrefix(e,"o=")[0].substring(2).split(" ");return{username:n[0],sessionId:n[1],sessionVersion:parseInt(n[2],10),netType:n[3],addressType:n[4],address:n[5]}};l.isValidSDP=function(e){if(typeof e!="string"||e.length===0)return!1;let t=l.splitLines(e);for(let n=0;n<t.length;n++)if(t[n].length<2||t[n].charAt(1)!=="=")return!1;return!0};typeof xe=="object"&&(xe.exports=l)});var rt=!0,nt=!0;function b(e,t,n){let r=e.match(t);return r&&r.length>=n&&parseInt(r[n],10)}function S(e,t,n){if(!e.RTCPeerConnection)return;let r=e.RTCPeerConnection.prototype,s=r.addEventListener;r.addEventListener=function(o,a){if(o!==t)return s.apply(this,arguments);let d=c=>{let p=n(c);p&&(a.handleEvent?a.handleEvent(p):a(p))};return this._eventMap=this._eventMap||{},this._eventMap[t]||(this._eventMap[t]=new Map),this._eventMap[t].set(a,d),s.apply(this,[o,d])};let i=r.removeEventListener;r.removeEventListener=function(o,a){if(o!==t||!this._eventMap||!this._eventMap[t])return i.apply(this,arguments);if(!this._eventMap[t].has(a))return i.apply(this,arguments);let d=this._eventMap[t].get(a);return this._eventMap[t].delete(a),this._eventMap[t].size===0&&delete this._eventMap[t],Object.keys(this._eventMap).length===0&&delete this._eventMap,i.apply(this,[o,d])},Object.defineProperty(r,"on"+t,{get(){return this["_on"+t]},set(o){this["_on"+t]&&(this.removeEventListener(t,this["_on"+t]),delete this["_on"+t]),o&&this.addEventListener(t,this["_on"+t]=o)},enumerable:!0,configurable:!0})}function st(e){return typeof e!="boolean"?new Error("Argument type: "+typeof e+". Please use a boolean."):(rt=e,e?"adapter.js logging disabled":"adapter.js logging enabled")}function it(e){return typeof e!="boolean"?new Error("Argument type: "+typeof e+". Please use a boolean."):(nt=!e,"adapter.js deprecation warnings "+(e?"disabled":"enabled"))}function O(){if(typeof window=="object"){if(rt)return;typeof console<"u"&&typeof console.log=="function"&&console.log.apply(console,arguments)}}function v(e,t){nt&&console.warn(e+" is deprecated, please use "+t+" instead.")}function ot(e){let t={browser:null,version:null};if(typeof e>"u"||!e.navigator||!e.navigator.userAgent)return t.browser="Not a browser.",t;let{navigator:n}=e;if(n.userAgentData&&n.userAgentData.brands){let r=n.userAgentData.brands.find(s=>s.brand==="Chromium");if(r)return{browser:"chrome",version:parseInt(r.version,10)}}if(n.mozGetUserMedia)t.browser="firefox",t.version=b(n.userAgent,/Firefox\/(\d+)\./,1);else if(n.webkitGetUserMedia||e.isSecureContext===!1&&e.webkitRTCPeerConnection)t.browser="chrome",t.version=b(n.userAgent,/Chrom(e|ium)\/(\d+)\./,2);else if(e.RTCPeerConnection&&n.userAgent.match(/AppleWebKit\/(\d+)\./))t.browser="safari",t.version=b(n.userAgent,/AppleWebKit\/(\d+)\./,1),t.supportsUnifiedPlan=e.RTCRtpTransceiver&&"currentDirection"in e.RTCRtpTransceiver.prototype;else return t.browser="Not a supported browser.",t;return t}function tt(e){return Object.prototype.toString.call(e)==="[object Object]"}function ee(e){return tt(e)?Object.keys(e).reduce(function(t,n){let r=tt(e[n]),s=r?ee(e[n]):e[n],i=r&&!Object.keys(s).length;return s===void 0||i?t:Object.assign(t,{[n]:s})},{}):e}function w(e,t,n){!t||n.has(t.id)||(n.set(t.id,t),Object.keys(t).forEach(r=>{r.endsWith("Id")?w(e,e.get(t[r]),n):r.endsWith("Ids")&&t[r].forEach(s=>{w(e,e.get(s),n)})}))}function te(e,t,n){let r=n?"outbound-rtp":"inbound-rtp",s=new Map;if(t===null)return s;let i=[];return e.forEach(o=>{o.type==="track"&&o.trackIdentifier===t.id&&i.push(o)}),i.forEach(o=>{e.forEach(a=>{a.type===r&&a.trackId===o.id&&w(e,a,s)})}),s}var j={};D(j,{fixNegotiationNeeded:()=>ae,shimAddTrackRemoveTrack:()=>oe,shimAddTrackRemoveTrackWithNative:()=>ct,shimGetSendersWithDtmf:()=>se,shimGetUserMedia:()=>L,shimMediaStream:()=>re,shimOnTrack:()=>ne,shimPeerConnection:()=>A,shimSenderReceiverGetStats:()=>ie});var at=O;function L(e,t){let n=e&&e.navigator;if(!n.mediaDevices)return;let r=function(a){if(typeof a!="object"||a.mandatory||a.optional)return a;let d={};return Object.keys(a).forEach(c=>{if(c==="require"||c==="advanced"||c==="mediaSource")return;let p=typeof a[c]=="object"?a[c]:{ideal:a[c]};p.exact!==void 0&&typeof p.exact=="number"&&(p.min=p.max=p.exact);let u=function(m,f){return m?m+f.charAt(0).toUpperCase()+f.slice(1):f==="deviceId"?"sourceId":f};if(p.ideal!==void 0){d.optional=d.optional||[];let m={};typeof p.ideal=="number"?(m[u("min",c)]=p.ideal,d.optional.push(m),m={},m[u("max",c)]=p.ideal,d.optional.push(m)):(m[u("",c)]=p.ideal,d.optional.push(m))}p.exact!==void 0&&typeof p.exact!="number"?(d.mandatory=d.mandatory||{},d.mandatory[u("",c)]=p.exact):["min","max"].forEach(m=>{p[m]!==void 0&&(d.mandatory=d.mandatory||{},d.mandatory[u(m,c)]=p[m])})}),a.advanced&&(d.optional=(d.optional||[]).concat(a.advanced)),d},s=function(a,d){if(t.version>=61)return d(a);if(a=JSON.parse(JSON.stringify(a)),a&&typeof a.audio=="object"){let c=function(p,u,m){u in p&&!(m in p)&&(p[m]=p[u],delete p[u])};a=JSON.parse(JSON.stringify(a)),c(a.audio,"autoGainControl","googAutoGainControl"),c(a.audio,"noiseSuppression","googNoiseSuppression"),a.audio=r(a.audio)}if(a&&typeof a.video=="object"){let c=a.video.facingMode;c=c&&(typeof c=="object"?c:{ideal:c});let p=t.version<66;if(c&&(c.exact==="user"||c.exact==="environment"||c.ideal==="user"||c.ideal==="environment")&&!(n.mediaDevices.getSupportedConstraints&&n.mediaDevices.getSupportedConstraints().facingMode&&!p)){delete a.video.facingMode;let u;if(c.exact==="environment"||c.ideal==="environment"?u=["back","rear"]:(c.exact==="user"||c.ideal==="user")&&(u=["front"]),u)return n.mediaDevices.enumerateDevices().then(m=>{m=m.filter(g=>g.kind==="videoinput");let f=m.find(g=>u.some(C=>g.label.toLowerCase().includes(C)));return!f&&m.length&&u.includes("back")&&(f=m[m.length-1]),f&&(a.video.deviceId=c.exact?{exact:f.deviceId}:{ideal:f.deviceId}),a.video=r(a.video),at("chrome: "+JSON.stringify(a)),d(a)})}a.video=r(a.video)}return at("chrome: "+JSON.stringify(a)),d(a)},i=function(a){return t.version>=64?a:{name:{PermissionDeniedError:"NotAllowedError",PermissionDismissedError:"NotAllowedError",InvalidStateError:"NotAllowedError",DevicesNotFoundError:"NotFoundError",ConstraintNotSatisfiedError:"OverconstrainedError",TrackStartError:"NotReadableError",MediaDeviceFailedDueToShutdown:"NotAllowedError",MediaDeviceKillSwitchOn:"NotAllowedError",TabCaptureError:"AbortError",ScreenCaptureError:"AbortError",DeviceCaptureError:"AbortError"}[a.name]||a.name,message:a.message,constraint:a.constraint||a.constraintName,toString(){return this.name+(this.message&&": ")+this.message}}},o=function(a,d,c){s(a,p=>{n.webkitGetUserMedia(p,d,u=>{c&&c(i(u))})})};if(n.getUserMedia=o.bind(n),n.mediaDevices.getUserMedia){let a=n.mediaDevices.getUserMedia.bind(n.mediaDevices);n.mediaDevices.getUserMedia=function(d){return s(d,c=>a(c).then(p=>{if(c.audio&&!p.getAudioTracks().length||c.video&&!p.getVideoTracks().length)throw p.getTracks().forEach(u=>{u.stop()}),new DOMException("","NotFoundError");return p},p=>Promise.reject(i(p))))}}}function re(e){e.MediaStream=e.MediaStream||e.webkitMediaStream}function ne(e){if(typeof e=="object"&&e.RTCPeerConnection&&!("ontrack"in e.RTCPeerConnection.prototype)){Object.defineProperty(e.RTCPeerConnection.prototype,"ontrack",{get(){return this._ontrack},set(n){this._ontrack&&this.removeEventListener("track",this._ontrack),this.addEventListener("track",this._ontrack=n)},enumerable:!0,configurable:!0});let t=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(){return this._ontrackpoly||(this._ontrackpoly=r=>{r.stream.addEventListener("addtrack",s=>{let i;e.RTCPeerConnection.prototype.getReceivers?i=this.getReceivers().find(a=>a.track&&a.track.id===s.track.id):i={track:s.track};let o=new Event("track");o.track=s.track,o.receiver=i,o.transceiver={receiver:i},o.streams=[r.stream],this.dispatchEvent(o)}),r.stream.getTracks().forEach(s=>{let i;e.RTCPeerConnection.prototype.getReceivers?i=this.getReceivers().find(a=>a.track&&a.track.id===s.id):i={track:s};let o=new Event("track");o.track=s,o.receiver=i,o.transceiver={receiver:i},o.streams=[r.stream],this.dispatchEvent(o)})},this.addEventListener("addstream",this._ontrackpoly)),t.apply(this,arguments)}}else S(e,"track",t=>(t.transceiver||Object.defineProperty(t,"transceiver",{value:{receiver:t.receiver}}),t))}function se(e){if(typeof e=="object"&&e.RTCPeerConnection&&!("getSenders"in e.RTCPeerConnection.prototype)&&"createDTMFSender"in e.RTCPeerConnection.prototype){let t=function(s,i){return{track:i,get dtmf(){return this._dtmf===void 0&&(i.kind==="audio"?this._dtmf=s.createDTMFSender(i):this._dtmf=null),this._dtmf},_pc:s}};if(!e.RTCPeerConnection.prototype.getSenders){e.RTCPeerConnection.prototype.getSenders=function(){return this._senders=this._senders||[],this._senders.slice()};let s=e.RTCPeerConnection.prototype.addTrack;e.RTCPeerConnection.prototype.addTrack=function(a,d){let c=s.apply(this,arguments);return c||(c=t(this,a),this._senders.push(c)),c};let i=e.RTCPeerConnection.prototype.removeTrack;e.RTCPeerConnection.prototype.removeTrack=function(a){i.apply(this,arguments);let d=this._senders.indexOf(a);d!==-1&&this._senders.splice(d,1)}}let n=e.RTCPeerConnection.prototype.addStream;e.RTCPeerConnection.prototype.addStream=function(i){this._senders=this._senders||[],n.apply(this,[i]),i.getTracks().forEach(o=>{this._senders.push(t(this,o))})};let r=e.RTCPeerConnection.prototype.removeStream;e.RTCPeerConnection.prototype.removeStream=function(i){this._senders=this._senders||[],r.apply(this,[i]),i.getTracks().forEach(o=>{let a=this._senders.find(d=>d.track===o);a&&this._senders.splice(this._senders.indexOf(a),1)})}}else if(typeof e=="object"&&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 r=t.apply(this,[]);return r.forEach(s=>s._pc=this),r},Object.defineProperty(e.RTCRtpSender.prototype,"dtmf",{get(){return this._dtmf===void 0&&(this.track.kind==="audio"?this._dtmf=this._pc.createDTMFSender(this.track):this._dtmf=null),this._dtmf}})}}function ie(e){if(!(typeof e=="object"&&e.RTCPeerConnection&&e.RTCRtpSender&&e.RTCRtpReceiver))return;if(!("getStats"in e.RTCRtpSender.prototype)){let n=e.RTCPeerConnection.prototype.getSenders;n&&(e.RTCPeerConnection.prototype.getSenders=function(){let i=n.apply(this,[]);return i.forEach(o=>o._pc=this),i});let r=e.RTCPeerConnection.prototype.addTrack;r&&(e.RTCPeerConnection.prototype.addTrack=function(){let i=r.apply(this,arguments);return i._pc=this,i}),e.RTCRtpSender.prototype.getStats=function(){let i=this;return this._pc.getStats().then(o=>te(o,i.track,!0))}}if(!("getStats"in e.RTCRtpReceiver.prototype)){let n=e.RTCPeerConnection.prototype.getReceivers;n&&(e.RTCPeerConnection.prototype.getReceivers=function(){let s=n.apply(this,[]);return s.forEach(i=>i._pc=this),s}),S(e,"track",r=>(r.receiver._pc=r.srcElement,r)),e.RTCRtpReceiver.prototype.getStats=function(){let s=this;return this._pc.getStats().then(i=>te(i,s.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 r=arguments[0],s,i,o;return this.getSenders().forEach(a=>{a.track===r&&(s?o=!0:s=a)}),this.getReceivers().forEach(a=>(a.track===r&&(i?o=!0:i=a),a.track===r)),o||s&&i?Promise.reject(new DOMException("There are more than one sender or receiver for the track.","InvalidAccessError")):s?s.getStats():i?i.getStats():Promise.reject(new DOMException("There is no sender or receiver for the track.","InvalidAccessError"))}return t.apply(this,arguments)}}function ct(e){e.RTCPeerConnection.prototype.getLocalStreams=function(){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},Object.keys(this._shimmedLocalStreams).map(o=>this._shimmedLocalStreams[o][0])};let t=e.RTCPeerConnection.prototype.addTrack;e.RTCPeerConnection.prototype.addTrack=function(o,a){if(!a)return t.apply(this,arguments);this._shimmedLocalStreams=this._shimmedLocalStreams||{};let d=t.apply(this,arguments);return this._shimmedLocalStreams[a.id]?this._shimmedLocalStreams[a.id].indexOf(d)===-1&&this._shimmedLocalStreams[a.id].push(d):this._shimmedLocalStreams[a.id]=[a,d],d};let n=e.RTCPeerConnection.prototype.addStream;e.RTCPeerConnection.prototype.addStream=function(o){this._shimmedLocalStreams=this._shimmedLocalStreams||{},o.getTracks().forEach(c=>{if(this.getSenders().find(u=>u.track===c))throw new DOMException("Track already exists.","InvalidAccessError")});let a=this.getSenders();n.apply(this,arguments);let d=this.getSenders().filter(c=>a.indexOf(c)===-1);this._shimmedLocalStreams[o.id]=[o].concat(d)};let r=e.RTCPeerConnection.prototype.removeStream;e.RTCPeerConnection.prototype.removeStream=function(o){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},delete this._shimmedLocalStreams[o.id],r.apply(this,arguments)};let s=e.RTCPeerConnection.prototype.removeTrack;e.RTCPeerConnection.prototype.removeTrack=function(o){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},o&&Object.keys(this._shimmedLocalStreams).forEach(a=>{let d=this._shimmedLocalStreams[a].indexOf(o);d!==-1&&this._shimmedLocalStreams[a].splice(d,1),this._shimmedLocalStreams[a].length===1&&delete this._shimmedLocalStreams[a]}),s.apply(this,arguments)}}function oe(e,t){if(!e.RTCPeerConnection)return;if(e.RTCPeerConnection.prototype.addTrack&&t.version>=65)return ct(e);let n=e.RTCPeerConnection.prototype.getLocalStreams;e.RTCPeerConnection.prototype.getLocalStreams=function(){let p=n.apply(this);return this._reverseStreams=this._reverseStreams||{},p.map(u=>this._reverseStreams[u.id])};let r=e.RTCPeerConnection.prototype.addStream;e.RTCPeerConnection.prototype.addStream=function(p){if(this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},p.getTracks().forEach(u=>{if(this.getSenders().find(f=>f.track===u))throw new DOMException("Track already exists.","InvalidAccessError")}),!this._reverseStreams[p.id]){let u=new e.MediaStream(p.getTracks());this._streams[p.id]=u,this._reverseStreams[u.id]=p,p=u}r.apply(this,[p])};let s=e.RTCPeerConnection.prototype.removeStream;e.RTCPeerConnection.prototype.removeStream=function(p){this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},s.apply(this,[this._streams[p.id]||p]),delete this._reverseStreams[this._streams[p.id]?this._streams[p.id].id:p.id],delete this._streams[p.id]},e.RTCPeerConnection.prototype.addTrack=function(p,u){if(this.signalingState==="closed")throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");let m=[].slice.call(arguments,1);if(m.length!==1||!m[0].getTracks().find(C=>C===p))throw new DOMException("The adapter.js addTrack polyfill only supports a single stream which is associated with the specified track.","NotSupportedError");if(this.getSenders().find(C=>C.track===p))throw new DOMException("Track already exists.","InvalidAccessError");this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{};let g=this._streams[u.id];if(g)g.addTrack(p),Promise.resolve().then(()=>{this.dispatchEvent(new Event("negotiationneeded"))});else{let C=new e.MediaStream([p]);this._streams[u.id]=C,this._reverseStreams[C.id]=u,this.addStream(C)}return this.getSenders().find(C=>C.track===p)};function i(c,p){let u=p.sdp;return Object.keys(c._reverseStreams||[]).forEach(m=>{let f=c._reverseStreams[m],g=c._streams[f.id];u=u.replace(new RegExp(g.id,"g"),f.id)}),new RTCSessionDescription({type:p.type,sdp:u})}function o(c,p){let u=p.sdp;return Object.keys(c._reverseStreams||[]).forEach(m=>{let f=c._reverseStreams[m],g=c._streams[f.id];u=u.replace(new RegExp(f.id,"g"),g.id)}),new RTCSessionDescription({type:p.type,sdp:u})}["createOffer","createAnswer"].forEach(function(c){let p=e.RTCPeerConnection.prototype[c],u={[c](){let m=arguments;return arguments.length&&typeof arguments[0]=="function"?p.apply(this,[g=>{let C=i(this,g);m[0].apply(null,[C])},g=>{m[1]&&m[1].apply(null,g)},arguments[2]]):p.apply(this,arguments).then(g=>i(this,g))}};e.RTCPeerConnection.prototype[c]=u[c]});let a=e.RTCPeerConnection.prototype.setLocalDescription;e.RTCPeerConnection.prototype.setLocalDescription=function(){return!arguments.length||!arguments[0].type?a.apply(this,arguments):(arguments[0]=o(this,arguments[0]),a.apply(this,arguments))};let d=Object.getOwnPropertyDescriptor(e.RTCPeerConnection.prototype,"localDescription");Object.defineProperty(e.RTCPeerConnection.prototype,"localDescription",{get(){let c=d.get.apply(this);return c.type===""?c:i(this,c)}}),e.RTCPeerConnection.prototype.removeTrack=function(p){if(this.signalingState==="closed")throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");if(!p._pc)throw new DOMException("Argument 1 of RTCPeerConnection.removeTrack does not implement interface RTCRtpSender.","TypeError");if(!(p._pc===this))throw new DOMException("Sender was not created by this connection.","InvalidAccessError");this._streams=this._streams||{};let m;Object.keys(this._streams).forEach(f=>{this._streams[f].getTracks().find(C=>p.track===C)&&(m=this._streams[f])}),m&&(m.getTracks().length===1?this.removeStream(this._reverseStreams[m.id]):m.removeTrack(p.track),this.dispatchEvent(new Event("negotiationneeded")))}}function A(e,t){!e.RTCPeerConnection&&e.webkitRTCPeerConnection&&(e.RTCPeerConnection=e.webkitRTCPeerConnection),e.RTCPeerConnection&&t.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach(function(n){let r=e.RTCPeerConnection.prototype[n],s={[n](){return arguments[0]=new(n==="addIceCandidate"?e.RTCIceCandidate:e.RTCSessionDescription)(arguments[0]),r.apply(this,arguments)}};e.RTCPeerConnection.prototype[n]=s[n]})}function ae(e,t){S(e,"negotiationneeded",n=>{let r=n.target;if(!((t.version<72||r.getConfiguration&&r.getConfiguration().sdpSemantics==="plan-b")&&r.signalingState!=="stable"))return n})}var N={};D(N,{shimAddTransceiver:()=>me,shimCreateAnswer:()=>ge,shimCreateOffer:()=>he,shimGetDisplayMedia:()=>pt,shimGetParameters:()=>fe,shimGetUserMedia:()=>U,shimOnTrack:()=>ce,shimPeerConnection:()=>F,shimRTCDataChannel:()=>ue,shimReceiverGetStats:()=>de,shimRemoveStream:()=>le,shimSenderGetStats:()=>pe});function U(e,t){let n=e&&e.navigator,r=e&&e.MediaStreamTrack;if(n.getUserMedia=function(s,i,o){v("navigator.getUserMedia","navigator.mediaDevices.getUserMedia"),n.mediaDevices.getUserMedia(s).then(i,o)},!(t.version>55&&"autoGainControl"in n.mediaDevices.getSupportedConstraints())){let s=function(o,a,d){a in o&&!(d in o)&&(o[d]=o[a],delete o[a])},i=n.mediaDevices.getUserMedia.bind(n.mediaDevices);if(n.mediaDevices.getUserMedia=function(o){return typeof o=="object"&&typeof o.audio=="object"&&(o=JSON.parse(JSON.stringify(o)),s(o.audio,"autoGainControl","mozAutoGainControl"),s(o.audio,"noiseSuppression","mozNoiseSuppression")),i(o)},r&&r.prototype.getSettings){let o=r.prototype.getSettings;r.prototype.getSettings=function(){let a=o.apply(this,arguments);return s(a,"mozAutoGainControl","autoGainControl"),s(a,"mozNoiseSuppression","noiseSuppression"),a}}if(r&&r.prototype.applyConstraints){let o=r.prototype.applyConstraints;r.prototype.applyConstraints=function(a){return this.kind==="audio"&&typeof a=="object"&&(a=JSON.parse(JSON.stringify(a)),s(a,"autoGainControl","mozAutoGainControl"),s(a,"noiseSuppression","mozNoiseSuppression")),o.apply(this,[a])}}}}function pt(e,t){e.navigator.mediaDevices&&"getDisplayMedia"in e.navigator.mediaDevices||e.navigator.mediaDevices&&(e.navigator.mediaDevices.getDisplayMedia=function(r){if(!(r&&r.video)){let s=new DOMException("getDisplayMedia without video constraints is undefined");return s.name="NotFoundError",s.code=8,Promise.reject(s)}return r.video===!0?r.video={mediaSource:t}:r.video.mediaSource=t,e.navigator.mediaDevices.getUserMedia(r)})}function ce(e){typeof e=="object"&&e.RTCTrackEvent&&"receiver"in e.RTCTrackEvent.prototype&&!("transceiver"in e.RTCTrackEvent.prototype)&&Object.defineProperty(e.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function F(e,t){if(typeof e!="object"||!(e.RTCPeerConnection||e.mozRTCPeerConnection))return;!e.RTCPeerConnection&&e.mozRTCPeerConnection&&(e.RTCPeerConnection=e.mozRTCPeerConnection),t.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach(function(s){let i=e.RTCPeerConnection.prototype[s],o={[s](){return arguments[0]=new(s==="addIceCandidate"?e.RTCIceCandidate:e.RTCSessionDescription)(arguments[0]),i.apply(this,arguments)}};e.RTCPeerConnection.prototype[s]=o[s]});let n={inboundrtp:"inbound-rtp",outboundrtp:"outbound-rtp",candidatepair:"candidate-pair",localcandidate:"local-candidate",remotecandidate:"remote-candidate"},r=e.RTCPeerConnection.prototype.getStats;e.RTCPeerConnection.prototype.getStats=function(){let[i,o,a]=arguments;return r.apply(this,[i||null]).then(d=>{if(t.version<53&&!o)try{d.forEach(c=>{c.type=n[c.type]||c.type})}catch(c){if(c.name!=="TypeError")throw c;d.forEach((p,u)=>{d.set(u,Object.assign({},p,{type:n[p.type]||p.type}))})}return d}).then(o,a)}}function pe(e){if(!(typeof e=="object"&&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 s=t.apply(this,[]);return s.forEach(i=>i._pc=this),s});let n=e.RTCPeerConnection.prototype.addTrack;n&&(e.RTCPeerConnection.prototype.addTrack=function(){let s=n.apply(this,arguments);return s._pc=this,s}),e.RTCRtpSender.prototype.getStats=function(){return this.track?this._pc.getStats(this.track):Promise.resolve(new Map)}}function de(e){if(!(typeof e=="object"&&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 r=t.apply(this,[]);return r.forEach(s=>s._pc=this),r}),S(e,"track",n=>(n.receiver._pc=n.srcElement,n)),e.RTCRtpReceiver.prototype.getStats=function(){return this._pc.getStats(this.track)}}function le(e){!e.RTCPeerConnection||"removeStream"in e.RTCPeerConnection.prototype||(e.RTCPeerConnection.prototype.removeStream=function(n){v("removeStream","removeTrack"),this.getSenders().forEach(r=>{r.track&&n.getTracks().includes(r.track)&&this.removeTrack(r)})})}function ue(e){e.DataChannel&&!e.RTCDataChannel&&(e.RTCDataChannel=e.DataChannel)}function me(e){if(!(typeof e=="object"&&e.RTCPeerConnection))return;let t=e.RTCPeerConnection.prototype.addTransceiver;t&&(e.RTCPeerConnection.prototype.addTransceiver=function(){this.setParametersPromises=[];let r=arguments[1]&&arguments[1].sendEncodings;r===void 0&&(r=[]),r=[...r];let s=r.length>0;s&&r.forEach(o=>{if("rid"in o&&!/^[a-z0-9]{0,16}$/i.test(o.rid))throw new TypeError("Invalid RID value provided.");if("scaleResolutionDownBy"in o&&!(parseFloat(o.scaleResolutionDownBy)>=1))throw new RangeError("scale_resolution_down_by must be >= 1.0");if("maxFramerate"in o&&!(parseFloat(o.maxFramerate)>=0))throw new RangeError("max_framerate must be >= 0.0")});let i=t.apply(this,arguments);if(s){let{sender:o}=i,a=o.getParameters();(!("encodings"in a)||a.encodings.length===1&&Object.keys(a.encodings[0]).length===0)&&(a.encodings=r,o.sendEncodings=r,this.setParametersPromises.push(o.setParameters(a).then(()=>{delete o.sendEncodings}).catch(()=>{delete o.sendEncodings})))}return i})}function fe(e){if(!(typeof e=="object"&&e.RTCRtpSender))return;let t=e.RTCRtpSender.prototype.getParameters;t&&(e.RTCRtpSender.prototype.getParameters=function(){let r=t.apply(this,arguments);return"encodings"in r||(r.encodings=[].concat(this.sendEncodings||[{}])),r})}function he(e){if(!(typeof e=="object"&&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 ge(e){if(!(typeof e=="object"&&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)}}var q={};D(q,{shimAudioContext:()=>Pe,shimCallbacksAPI:()=>Se,shimConstraints:()=>dt,shimCreateOfferLegacy:()=>be,shimGetUserMedia:()=>Re,shimLocalStreamsAPI:()=>Ce,shimRTCIceServerUrls:()=>ve,shimRemoteStreamsAPI:()=>ye,shimTrackEventTransceiver:()=>Te});function Ce(e){if(!(typeof e!="object"||!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(r){this._localStreams||(this._localStreams=[]),this._localStreams.includes(r)||this._localStreams.push(r),r.getAudioTracks().forEach(s=>t.call(this,s,r)),r.getVideoTracks().forEach(s=>t.call(this,s,r))},e.RTCPeerConnection.prototype.addTrack=function(r,...s){return s&&s.forEach(i=>{this._localStreams?this._localStreams.includes(i)||this._localStreams.push(i):this._localStreams=[i]}),t.apply(this,arguments)}}"removeStream"in e.RTCPeerConnection.prototype||(e.RTCPeerConnection.prototype.removeStream=function(n){this._localStreams||(this._localStreams=[]);let r=this._localStreams.indexOf(n);if(r===-1)return;this._localStreams.splice(r,1);let s=n.getTracks();this.getSenders().forEach(i=>{s.includes(i.track)&&this.removeTrack(i)})})}}function ye(e){if(!(typeof e!="object"||!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(n){this._onaddstream&&(this.removeEventListener("addstream",this._onaddstream),this.removeEventListener("track",this._onaddstreampoly)),this.addEventListener("addstream",this._onaddstream=n),this.addEventListener("track",this._onaddstreampoly=r=>{r.streams.forEach(s=>{if(this._remoteStreams||(this._remoteStreams=[]),this._remoteStreams.includes(s))return;this._remoteStreams.push(s);let i=new Event("addstream");i.stream=s,this.dispatchEvent(i)})})}});let t=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(){let r=this;return this._onaddstreampoly||this.addEventListener("track",this._onaddstreampoly=function(s){s.streams.forEach(i=>{if(r._remoteStreams||(r._remoteStreams=[]),r._remoteStreams.indexOf(i)>=0)return;r._remoteStreams.push(i);let o=new Event("addstream");o.stream=i,r.dispatchEvent(o)})}),t.apply(r,arguments)}}}function Se(e){if(typeof e!="object"||!e.RTCPeerConnection)return;let t=e.RTCPeerConnection.prototype,n=t.createOffer,r=t.createAnswer,s=t.setLocalDescription,i=t.setRemoteDescription,o=t.addIceCandidate;t.createOffer=function(c,p){let u=arguments.length>=2?arguments[2]:arguments[0],m=n.apply(this,[u]);return p?(m.then(c,p),Promise.resolve()):m},t.createAnswer=function(c,p){let u=arguments.length>=2?arguments[2]:arguments[0],m=r.apply(this,[u]);return p?(m.then(c,p),Promise.resolve()):m};let a=function(d,c,p){let u=s.apply(this,[d]);return p?(u.then(c,p),Promise.resolve()):u};t.setLocalDescription=a,a=function(d,c,p){let u=i.apply(this,[d]);return p?(u.then(c,p),Promise.resolve()):u},t.setRemoteDescription=a,a=function(d,c,p){let u=o.apply(this,[d]);return p?(u.then(c,p),Promise.resolve()):u},t.addIceCandidate=a}function Re(e){let t=e&&e.navigator;if(t.mediaDevices&&t.mediaDevices.getUserMedia){let n=t.mediaDevices,r=n.getUserMedia.bind(n);t.mediaDevices.getUserMedia=s=>r(dt(s))}!t.getUserMedia&&t.mediaDevices&&t.mediaDevices.getUserMedia&&(t.getUserMedia=function(r,s,i){t.mediaDevices.getUserMedia(r).then(s,i)}.bind(t))}function dt(e){return e&&e.video!==void 0?Object.assign({},e,{video:ee(e.video)}):e}function ve(e){if(!e.RTCPeerConnection)return;let t=e.RTCPeerConnection;e.RTCPeerConnection=function(r,s){if(r&&r.iceServers){let i=[];for(let o=0;o<r.iceServers.length;o++){let a=r.iceServers[o];a.urls===void 0&&a.url?(v("RTCIceServer.url","RTCIceServer.urls"),a=JSON.parse(JSON.stringify(a)),a.urls=a.url,delete a.url,i.push(a)):i.push(r.iceServers[o])}r.iceServers=i}return new t(r,s)},e.RTCPeerConnection.prototype=t.prototype,"generateCertificate"in t&&Object.defineProperty(e.RTCPeerConnection,"generateCertificate",{get(){return t.generateCertificate}})}function Te(e){typeof e=="object"&&e.RTCTrackEvent&&"receiver"in e.RTCTrackEvent.prototype&&!("transceiver"in e.RTCTrackEvent.prototype)&&Object.defineProperty(e.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function be(e){let t=e.RTCPeerConnection.prototype.createOffer;e.RTCPeerConnection.prototype.createOffer=function(r){if(r){typeof r.offerToReceiveAudio<"u"&&(r.offerToReceiveAudio=!!r.offerToReceiveAudio);let s=this.getTransceivers().find(o=>o.receiver.track.kind==="audio");r.offerToReceiveAudio===!1&&s?s.direction==="sendrecv"?s.setDirection?s.setDirection("sendonly"):s.direction="sendonly":s.direction==="recvonly"&&(s.setDirection?s.setDirection("inactive"):s.direction="inactive"):r.offerToReceiveAudio===!0&&!s&&this.addTransceiver("audio",{direction:"recvonly"}),typeof r.offerToReceiveVideo<"u"&&(r.offerToReceiveVideo=!!r.offerToReceiveVideo);let i=this.getTransceivers().find(o=>o.receiver.track.kind==="video");r.offerToReceiveVideo===!1&&i?i.direction==="sendrecv"?i.setDirection?i.setDirection("sendonly"):i.direction="sendonly":i.direction==="recvonly"&&(i.setDirection?i.setDirection("inactive"):i.direction="inactive"):r.offerToReceiveVideo===!0&&!i&&this.addTransceiver("video",{direction:"recvonly"})}return t.apply(this,arguments)}}function Pe(e){typeof e!="object"||e.AudioContext||(e.AudioContext=e.webkitAudioContext)}var _e={};D(_e,{removeExtmapAllowMixed:()=>K,shimAddIceCandidateNullOrEmpty:()=>_,shimConnectionState:()=>z,shimMaxMessageSize:()=>x,shimParameterlessSetLocalDescription:()=>E,shimRTCIceCandidate:()=>P,shimRTCIceCandidateRelayProtocol:()=>G,shimSendThrowTypeError:()=>k});var T=et(ke());function P(e){if(!e.RTCIceCandidate||e.RTCIceCandidate&&"foundation"in e.RTCIceCandidate.prototype)return;let t=e.RTCIceCandidate;e.RTCIceCandidate=function(r){if(typeof r=="object"&&r.candidate&&r.candidate.indexOf("a=")===0&&(r=JSON.parse(JSON.stringify(r)),r.candidate=r.candidate.substring(2)),r.candidate&&r.candidate.length){let s=new t(r),i=T.default.parseCandidate(r.candidate);for(let o in i)o in s||Object.defineProperty(s,o,{value:i[o]});return s.toJSON=function(){return{candidate:s.candidate,sdpMid:s.sdpMid,sdpMLineIndex:s.sdpMLineIndex,usernameFragment:s.usernameFragment}},s}return new t(r)},e.RTCIceCandidate.prototype=t.prototype,S(e,"icecandidate",n=>(n.candidate&&Object.defineProperty(n,"candidate",{value:new e.RTCIceCandidate(n.candidate),writable:"false"}),n))}function G(e){!e.RTCIceCandidate||e.RTCIceCandidate&&"relayProtocol"in e.RTCIceCandidate.prototype||S(e,"icecandidate",t=>{if(t.candidate){let n=T.default.parseCandidate(t.candidate.candidate);n.type==="relay"&&(t.candidate.relayProtocol={0:"tls",1:"tcp",2:"udp"}[n.priority>>24])}return t})}function x(e,t){if(!e.RTCPeerConnection)return;"sctp"in e.RTCPeerConnection.prototype||Object.defineProperty(e.RTCPeerConnection.prototype,"sctp",{get(){return typeof this._sctp>"u"?null:this._sctp}});let n=function(a){if(!a||!a.sdp)return!1;let d=T.default.splitSections(a.sdp);return d.shift(),d.some(c=>{let p=T.default.parseMLine(c);return p&&p.kind==="application"&&p.protocol.indexOf("SCTP")!==-1})},r=function(a){let d=a.sdp.match(/mozilla...THIS_IS_SDPARTA-(\d+)/);if(d===null||d.length<2)return-1;let c=parseInt(d[1],10);return c!==c?-1:c},s=function(a){let d=65536;return t.browser==="firefox"&&(t.version<57?a===-1?d=16384:d=2147483637:t.version<60?d=t.version===57?65535:65536:d=2147483637),d},i=function(a,d){let c=65536;t.browser==="firefox"&&t.version===57&&(c=65535);let p=T.default.matchPrefix(a.sdp,"a=max-message-size:");return p.length>0?c=parseInt(p[0].substring(19),10):t.browser==="firefox"&&d!==-1&&(c=2147483637),c},o=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(){if(this._sctp=null,t.browser==="chrome"&&t.version>=76){let{sdpSemantics:d}=this.getConfiguration();d==="plan-b"&&Object.defineProperty(this,"sctp",{get(){return typeof this._sctp>"u"?null:this._sctp},enumerable:!0,configurable:!0})}if(n(arguments[0])){let d=r(arguments[0]),c=s(d),p=i(arguments[0],d),u;c===0&&p===0?u=Number.POSITIVE_INFINITY:c===0||p===0?u=Math.max(c,p):u=Math.min(c,p);let m={};Object.defineProperty(m,"maxMessageSize",{get(){return u}}),this._sctp=m}return o.apply(this,arguments)}}function k(e){if(!(e.RTCPeerConnection&&"createDataChannel"in e.RTCPeerConnection.prototype))return;function t(r,s){let i=r.send;r.send=function(){let a=arguments[0],d=a.length||a.size||a.byteLength;if(r.readyState==="open"&&s.sctp&&d>s.sctp.maxMessageSize)throw new TypeError("Message too large (can send a maximum of "+s.sctp.maxMessageSize+" bytes)");return i.apply(r,arguments)}}let n=e.RTCPeerConnection.prototype.createDataChannel;e.RTCPeerConnection.prototype.createDataChannel=function(){let s=n.apply(this,arguments);return t(s,this),s},S(e,"datachannel",r=>(t(r.channel,r.target),r))}function z(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(n){this._onconnectionstatechange&&(this.removeEventListener("connectionstatechange",this._onconnectionstatechange),delete this._onconnectionstatechange),n&&this.addEventListener("connectionstatechange",this._onconnectionstatechange=n)},enumerable:!0,configurable:!0}),["setLocalDescription","setRemoteDescription"].forEach(n=>{let r=t[n];t[n]=function(){return this._connectionstatechangepoly||(this._connectionstatechangepoly=s=>{let i=s.target;if(i._lastConnectionState!==i.connectionState){i._lastConnectionState=i.connectionState;let o=new Event("connectionstatechange",s);i.dispatchEvent(o)}return s},this.addEventListener("iceconnectionstatechange",this._connectionstatechangepoly)),r.apply(this,arguments)}})}function K(e,t){if(!e.RTCPeerConnection||t.browser==="chrome"&&t.version>=71||t.browser==="safari"&&t.version>=605)return;let n=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(s){if(s&&s.sdp&&s.sdp.indexOf(`
|
33
33
|
a=extmap-allow-mixed`)!==-1){let i=s.sdp.split(`
|
34
34
|
`).filter(o=>o.trim()!=="a=extmap-allow-mixed").join(`
|
35
|
-
`);e.RTCSessionDescription&&s instanceof e.RTCSessionDescription?arguments[0]=new e.RTCSessionDescription({type:s.type,sdp:i}):s.sdp=i}return r.apply(this,arguments)}}function I(e,t){if(!(e.RTCPeerConnection&&e.RTCPeerConnection.prototype))return;let r=e.RTCPeerConnection.prototype.addIceCandidate;!r||r.length===0||(e.RTCPeerConnection.prototype.addIceCandidate=function(){return arguments[0]?(t.browser==="chrome"&&t.version<78||t.browser==="firefox"&&t.version<68||t.browser==="safari")&&arguments[0]&&arguments[0].candidate===""?Promise.resolve():r.apply(this,arguments):(arguments[1]&&arguments[1].apply(null),Promise.resolve())})}function _(e,t){if(!(e.RTCPeerConnection&&e.RTCPeerConnection.prototype))return;let r=e.RTCPeerConnection.prototype.setLocalDescription;!r||r.length===0||(e.RTCPeerConnection.prototype.setLocalDescription=function(){let s=arguments[0]||{};if(typeof s!="object"||s.type&&s.sdp)return r.apply(this,arguments);if(s={type:s.type,sdp:s.sdp},!s.type)switch(this.signalingState){case"stable":case"have-local-offer":case"have-remote-pranswer":s.type="offer";break;default:s.type="answer";break}return s.sdp||s.type!=="offer"&&s.type!=="answer"?r.apply(this,[s]):(s.type==="offer"?this.createOffer:this.createAnswer).apply(this).then(o=>r.apply(this,[o]))})}var It=we(ke());function dt({window:e}={},t={shimChrome:!0,shimFirefox:!0,shimSafari:!0}){let r=O,n=it(e),s={browserDetails:n,commonShim:Ie,extractVersion:b,disableLog:nt,disableWarnings:st,sdp:It};switch(n.browser){case"chrome":if(!j||!A||!t.shimChrome)return r("Chrome shim is not included in this adapter release."),s;if(n.version===null)return r("Chrome shim can not determine version, not shimming."),s;r("adapter.js shimming chrome."),s.browserShim=j,I(e,n),_(e,n),L(e,n),re(e,n),A(e,n),ne(e,n),oe(e,n),se(e,n),ie(e,n),ae(e,n),P(e,n),G(e,n),z(e,n),x(e,n),k(e,n),K(e,n);break;case"firefox":if(!N||!F||!t.shimFirefox)return r("Firefox shim is not included in this adapter release."),s;r("adapter.js shimming firefox."),s.browserShim=N,I(e,n),_(e,n),U(e,n),F(e,n),ce(e,n),le(e,n),pe(e,n),de(e,n),ue(e,n),me(e,n),he(e,n),fe(e,n),ge(e,n),P(e,n),z(e,n),x(e,n),k(e,n);break;case"safari":if(!q||!t.shimSafari)return r("Safari shim is not included in this adapter release."),s;r("adapter.js shimming safari."),s.browserShim=q,I(e,n),_(e,n),ve(e,n),be(e,n),Se(e,n),Ce(e,n),ye(e,n),Te(e,n),Re(e,n),Pe(e,n),P(e,n),G(e,n),x(e,n),k(e,n),K(e,n);break;default:r("Unsupported browser!");break}return s}var _t=dt({window:typeof window>"u"?void 0:window}),E=_t;import{ServiceType as Et}from"@protobuf-ts/runtime-rpc";import{MessageType as f}from"@protobuf-ts/runtime";var We=(i=>(i[i.UNSPECIFIED=0]="UNSPECIFIED",i[i.OFFER=1]="OFFER",i[i.ANSWER=2]="ANSWER",i[i.PRANSWER=3]="PRANSWER",i[i.ROLLBACK=4]="ROLLBACK",i))(We||{}),_e=class extends f{constructor(){super("pulsebeam.v1.PrepareReq",[])}},Mt=new _e,Ee=class extends f{constructor(){super("pulsebeam.v1.PrepareResp",[{no:1,name:"ice_servers",kind:"message",repeat:1,T:()=>Ot}])}},Dt=new Ee,Me=class extends f{constructor(){super("pulsebeam.v1.IceServer",[{no:1,name:"urls",kind:"scalar",repeat:2,T:9},{no:2,name:"username",kind:"scalar",opt:!0,T:9},{no:3,name:"credential",kind:"scalar",opt:!0,T:9}])}},Ot=new Me,De=class extends f{constructor(){super("pulsebeam.v1.SendReq",[{no:1,name:"msg",kind:"message",T:()=>lt}])}},Lt=new De,Oe=class extends f{constructor(){super("pulsebeam.v1.SendResp",[])}},At=new Oe,Le=class extends f{constructor(){super("pulsebeam.v1.RecvReq",[{no:1,name:"info",kind:"message",T:()=>Ft}])}},jt=new Le,Ae=class extends f{constructor(){super("pulsebeam.v1.RecvResp",[{no:1,name:"msgs",kind:"message",repeat:1,T:()=>lt}])}},Ut=new Ae,je=class extends f{constructor(){super("pulsebeam.v1.PeerInfo",[{no:1,name:"conn_id",kind:"scalar",T:13},{no:2,name:"enable_discovery",kind:"scalar",T:8}])}},Ft=new je,Ue=class extends f{constructor(){super("pulsebeam.v1.Message",[{no:1,name:"header",kind:"message",T:()=>qt},{no:2,name:"payload",kind:"message",T:()=>Nt}])}},lt=new Ue,Fe=class extends f{constructor(){super("pulsebeam.v1.MessagePayload",[{no:1,name:"signal",kind:"message",oneof:"payloadType",T:()=>Gt},{no:2,name:"join",kind:"message",oneof:"payloadType",T:()=>Jt},{no:3,name:"bye",kind:"message",oneof:"payloadType",T:()=>Bt},{no:4,name:"ack",kind:"message",oneof:"payloadType",T:()=>Vt}])}},Nt=new Fe,Ne=class extends f{constructor(){super("pulsebeam.v1.MessageHeader",[{no:1,name:"group_id",kind:"scalar",T:9},{no:2,name:"peer_id",kind:"scalar",T:9},{no:3,name:"conn_id",kind:"scalar",T:13},{no:4,name:"other_group_id",kind:"scalar",T:9},{no:5,name:"other_peer_id",kind:"scalar",T:9},{no:6,name:"other_conn_id",kind:"scalar",T:13},{no:7,name:"seqnum",kind:"scalar",T:13},{no:8,name:"reliable",kind:"scalar",T:8}])}},qt=new Ne,qe=class extends f{constructor(){super("pulsebeam.v1.Signal",[{no:1,name:"generation_counter",kind:"scalar",T:13},{no:9,name:"sdp",kind:"message",oneof:"data",T:()=>zt},{no:10,name:"ice_candidate",kind:"message",oneof:"data",T:()=>Kt}])}},Gt=new qe,Ge=class extends f{constructor(){super("pulsebeam.v1.Sdp",[{no:1,name:"kind",kind:"enum",T:()=>["pulsebeam.v1.SdpKind",We,"SDP_KIND_"]},{no:2,name:"sdp",kind:"scalar",T:9}])}},zt=new Ge,ze=class extends f{constructor(){super("pulsebeam.v1.ICECandidate",[{no:1,name:"candidate",kind:"scalar",T:9},{no:2,name:"sdp_m_line_index",kind:"scalar",opt:!0,T:13},{no:3,name:"sdp_mid",kind:"scalar",opt:!0,T:9},{no:4,name:"username",kind:"scalar",opt:!0,T:9},{no:5,name:"password",kind:"scalar",opt:!0,T:9}])}},Kt=new ze,Ke=class extends f{constructor(){super("pulsebeam.v1.Join",[])}},Jt=new Ke,Je=class extends f{constructor(){super("pulsebeam.v1.Bye",[])}},Bt=new Je,Be=class extends f{constructor(){super("pulsebeam.v1.Ack",[{no:1,name:"ack_ranges",kind:"message",repeat:1,T:()=>Ht}])}},Vt=new Be,Ve=class extends f{constructor(){super("pulsebeam.v1.AckRange",[{no:1,name:"seqnum_start",kind:"scalar",T:13},{no:2,name:"seqnum_end",kind:"scalar",T:13}])}},Ht=new Ve,He=class extends f{constructor(){super("pulsebeam.v1.DataChannel",[{no:10,name:"heartbeat",kind:"message",oneof:"payload",T:()=>Yt}])}},Tr=new He,Ye=class extends f{constructor(){super("pulsebeam.v1.DataChannelHeartbeat",[])}},Yt=new Ye,J=new Et("pulsebeam.v1.Tunnel",[{name:"Prepare",options:{},I:Mt,O:Dt},{name:"Send",options:{},I:Lt,O:At},{name:"Recv",options:{},I:jt,O:Ut}]);import{stackIntercept as Xe}from"@protobuf-ts/runtime-rpc";var B=class{constructor(t){this._transport=t;this.typeName=J.typeName;this.methods=J.methods;this.options=J.options}prepare(t,r){let n=this.methods[0],s=this._transport.mergeOptions(r);return Xe("unary",this._transport,n,s,t)}send(t,r){let n=this.methods[1],s=this._transport.mergeOptions(r);return Xe("unary",this._transport,n,s,t)}recv(t,r){let n=this.methods[2],s=this._transport.mergeOptions(r);return Xe("unary",this._transport,n,s,t)}};function V(e,t){return new Promise(r=>{let n=setTimeout(()=>r(!0),e);t&&t.addEventListener("abort",()=>{clearTimeout(n),r(!1)})})}function H(...e){let t=new AbortController,r=()=>{t.abort();for(let n of e)n.removeEventListener("abort",r)};for(let n of e)n.addEventListener("abort",r);return t.signal}async function M(e,t){let{maxRetries:r,baseDelay:n,maxDelay:s,jitterFactor:i=.3,isRecoverable:o=()=>!0,abortSignal:a}=t,d=0;for(;(d<=r||r<0)&&!a?.aborted;)try{return await e()}catch(c){if(!o(c)||(d++,r>=0&&d>r))throw c;let p=Wt(d,n,s,i);await V(p,a).catch(()=>{})}if(a?.aborted)return null;throw new Error("Retry failed: max retries exceeded")}function Wt(e,t,r,n){let s=Math.min(t*2**(e-1),r),i=Math.random()*n*s;return s+i}var ut=9e5,mt=50,Y=1e3,Xt=5,Qt=1e4,Zt=1e3;var $t=V,wt=e=>Math.floor(Math.random()*(2**32-e))+e,er=e=>!0,Qe=class{constructor(t){this.onmsg=async t=>{};this.logger=t.sub("queue"),this.map=new Map,this.emitted=new Map,this.unreliable=[],this.processing=!1}enqueue(t){if(!t.header?.reliable)this.unreliable.push(t);else{let r=t.header.seqnum;if(this.map.has(r)||this.emitted.has(r))return;this.map.set(r,[performance.now(),t])}this.processNext()}async processNext(){if(this.processing)return;let t=this.unreliable.pop();if(!t){let r=this.map.entries().next().value;if(!r)return;let[n,s]=r;this.map.delete(n),this.emitted.set(n,s);let[i,o]=s;if(!o.header)return;t=o}this.processing=!0;try{await this.onmsg(t)}catch(r){let n={msg:t};r instanceof Error&&(n.err=r),this.logger.error("error processing message",n)}this.processing=!1,this.processNext()}},W=class{constructor(t,r){this.client=t;this.opts=r;this.onstream=t=>{};this.onclosed=t=>{};this.handleMessages=t=>{for(let r of t){if(this.logger.debug("received",{msg:r}),this.abort.signal.aborted)return;if(!r.header)continue;if(r.header.otherConnId>=16&&r.header.otherConnId!=this.connId){this.logger.warn("received messages from a stale connection, ignoring",{receivedConnID:r.header.otherConnId});continue}let n=null;for(let s of this.streams)if(r.header.groupId===s.otherGroupId&&r.header.peerId===s.otherPeerId&&r.header.connId===s.otherConnId){n=s;break}if(!n){if(this.logger.debug(`session not found, creating one for ${r.header.peerId}:${r.header.connId}`),r.header.peerId==this.peerId){this.logger.warn("loopback detected, ignoring messages");return}n=new Ze(this,r.header.groupId,r.header.peerId,r.header.connId,this.logger),this.streams.push(n),this.onstream(n)}n.enqueue(r)}};this.asleep=r.asleep||$t,this.randUint32=r.randUint32||wt,this.isRecoverable=r.isRecoverable||er,this.groupId=r.groupId,this.peerId=r.peerId,this.connId=this.randUint32(16),this.info={connId:this.connId,enableDiscovery:r.enableDiscovery},this.abort=new AbortController,this.logger=r.logger.sub("transport",{groupId:this.opts.groupId,peerId:this.opts.peerId,connId:this.connId}),this.streams=[]}async listen(){await Promise.all([this.pollLoop(),this.gcLoop()])}async gcLoop(){for(;!this.abort.signal.aborted;)this.streams=this.streams.filter(t=>!t.isClosed()),await V(Zt,this.abort.signal);this.logger.debug("gc loop is closed")}async pollLoop(){let t={abort:this.abort.signal,timeout:ut},r={baseDelay:mt,maxDelay:Y,maxRetries:-1,abortSignal:this.abort.signal,isRecoverable:this.isRecoverable};for(;!this.abort.signal.aborted;)try{let n=await M(async()=>await this.client.recv({info:this.info},t),r);if(n===null)break;new Promise(()=>this.handleMessages(n.response.msgs))}catch(n){this.logger.error("unrecoverable error, force closing",{err:n}),this.close();return}this.logger.debug("poll loop is closed")}async close(t){this.abort.signal.aborted||(t=t||"transport is closed",await Promise.all(this.streams.map(r=>r.close(t))),this.abort.abort(t),this.logger.debug("transport is now closed",{reason:t}),this.streams=[],this.onclosed(t))}async connect(t,r,n){let s={payloadType:{oneofKind:"join",join:{}}},i={groupId:this.groupId,peerId:this.peerId,connId:this.connId,otherGroupId:t,otherPeerId:r,otherConnId:0,seqnum:0,reliable:!1},o=!1,a=H(n,this.abort.signal);for(;!a.aborted&&!o;)await this.send(a,{header:i,payload:s}),await this.asleep(Y,a).catch(()=>{}),o=!!this.streams.find(d=>d.otherGroupId===t&&d.otherPeerId===r)}async send(t,r){let n=H(t,this.abort.signal),s={abort:n,timeout:ut},i={baseDelay:mt,maxDelay:Y,maxRetries:-1,abortSignal:n,isRecoverable:this.isRecoverable};try{if(await M(async()=>await this.client.send({msg:r},s),i)===null){this.logger.warn("aborted, message dropped from sending",{msg:r});return}return}catch(o){this.logger.error("unrecoverable error, force closing",{err:o}),this.close();return}}},Ze=class{constructor(t,r,n,s,i){this.transport=t;this.otherGroupId=r;this.otherPeerId=n;this.otherConnId=s;this.onpayload=async t=>{};this.onclosed=t=>{};this.logger=i.sub("stream",{otherGroupId:r,otherPeerId:n,otherConnId:s}),this.groupId=t.groupId,this.peerId=t.peerId,this.connId=t.connId,this.abort=new AbortController,this.ackedbuf={},this.recvq=new Qe(this.logger),this.recvq.onmsg=o=>this.handleMessage(o),this.lastSeqnum=0,this.closedAt=0}createSignal(...t){return H(this.abort.signal,...t)}isClosed(){let t=this.abort.signal.aborted&&performance.now()-this.closedAt>Qt;return t&&this.logger.debug("stream is ready for GC"),t}enqueue(t){if(this.abort.signal.aborted){this.logger.warn("received a message in closed state, ignoring new messages.");return}this.recvq.enqueue(t)}async send(t,r,n){n||(n=this.abort.signal);let s={header:{groupId:this.transport.groupId,peerId:this.transport.peerId,connId:this.transport.connId,otherGroupId:this.otherGroupId,otherPeerId:this.otherPeerId,otherConnId:this.otherConnId,seqnum:0,reliable:r},payload:{...t}};if(!r){await this.transport.send(n,s);return}this.lastSeqnum++,s.header.seqnum=this.lastSeqnum,this.ackedbuf[s.header.seqnum]=!1;let i=Xt,o=i,a=s.header.seqnum;for(;!n.aborted&&(await this.transport.send(this.abort.signal,s),await this.transport.asleep(5*Y,this.abort.signal).catch(()=>{}),!this.ackedbuf[a]);){if(o<=0){let d="reached the maximum resend limit, dropping message";throw this.logger.warn(d,{seqnum:a,resendLimit:i,reliable:r}),new Error(d)}o--,this.logger.debug("resending",{...s.header})}}async handleMessage(t){let r=t.payload.payloadType;switch(r.oneofKind){case"ack":this.handleAck(r.ack);break;case"bye":this.close("received bye from other peer");break;case void 0:break;default:{if(t.header.reliable){let s={payloadType:{oneofKind:"ack",ack:{ackRanges:[{seqnumStart:t.header.seqnum,seqnumEnd:t.header.seqnum+1}]}}};this.logger.debug("ack",{seqnum:t.header.seqnum}),this.send(s,!1)}if(!t.payload)return;await this.onpayload(t.payload);break}}}handleAck(t){for(let r of t.ackRanges)for(let n=r.seqnumStart;n<r.seqnumEnd;n++)this.logger.debug("received ack",{seqnum:n}),this.ackedbuf[n]=!0}async close(t){this.abort.signal.aborted||(t=t||"session is closed",await this.send({payloadType:{oneofKind:"bye",bye:{}}},!1).catch(r=>this.logger.warn("failed to send bye",{e:r})),this.abort.abort(t),this.closedAt=performance.now(),this.onclosed(t),this.logger.debug("sent bye to the other peer",{reason:t}))}};var tr={DEBUG:console.debug,INFO:console.info,WARN:console.warn,ERROR:console.error},ht={DEBUG:e=>console.debug(X(e)),INFO:e=>console.info(X(e)),WARN:e=>console.warn(X(e)),ERROR:e=>console.error(X(e))};function ft(e,t,r="root",n=new Set){let s=".";if(!n.has(e)){n.add(e);for(let i in e)if(typeof e[i]=="object"&&e[i]!==null){let o=r+s+i;ft(e[i],t,o,n)}else{let o=t[r]||[];o.push(`${i}=${e[i]}`),t[r]=o}}}function X(e){let t={};ft(e,t);let r=[];for(let n in t)r.push(`[${n}] ${t[n].join(" ")}`);return r.join(`
|
36
|
-
`)}var Q=class e{constructor(t,r
|
35
|
+
`);e.RTCSessionDescription&&s instanceof e.RTCSessionDescription?arguments[0]=new e.RTCSessionDescription({type:s.type,sdp:i}):s.sdp=i}return n.apply(this,arguments)}}function _(e,t){if(!(e.RTCPeerConnection&&e.RTCPeerConnection.prototype))return;let n=e.RTCPeerConnection.prototype.addIceCandidate;!n||n.length===0||(e.RTCPeerConnection.prototype.addIceCandidate=function(){return arguments[0]?(t.browser==="chrome"&&t.version<78||t.browser==="firefox"&&t.version<68||t.browser==="safari")&&arguments[0]&&arguments[0].candidate===""?Promise.resolve():n.apply(this,arguments):(arguments[1]&&arguments[1].apply(null),Promise.resolve())})}function E(e,t){if(!(e.RTCPeerConnection&&e.RTCPeerConnection.prototype))return;let n=e.RTCPeerConnection.prototype.setLocalDescription;!n||n.length===0||(e.RTCPeerConnection.prototype.setLocalDescription=function(){let s=arguments[0]||{};if(typeof s!="object"||s.type&&s.sdp)return n.apply(this,arguments);if(s={type:s.type,sdp:s.sdp},!s.type)switch(this.signalingState){case"stable":case"have-local-offer":case"have-remote-pranswer":s.type="offer";break;default:s.type="answer";break}return s.sdp||s.type!=="offer"&&s.type!=="answer"?n.apply(this,[s]):(s.type==="offer"?this.createOffer:this.createAnswer).apply(this).then(o=>n.apply(this,[o]))})}var Et=et(ke());function lt({window:e}={},t={shimChrome:!0,shimFirefox:!0,shimSafari:!0}){let n=O,r=ot(e),s={browserDetails:r,commonShim:_e,extractVersion:b,disableLog:st,disableWarnings:it,sdp:Et};switch(r.browser){case"chrome":if(!j||!A||!t.shimChrome)return n("Chrome shim is not included in this adapter release."),s;if(r.version===null)return n("Chrome shim can not determine version, not shimming."),s;n("adapter.js shimming chrome."),s.browserShim=j,_(e,r),E(e,r),L(e,r),re(e,r),A(e,r),ne(e,r),oe(e,r),se(e,r),ie(e,r),ae(e,r),P(e,r),G(e,r),z(e,r),x(e,r),k(e,r),K(e,r);break;case"firefox":if(!N||!F||!t.shimFirefox)return n("Firefox shim is not included in this adapter release."),s;n("adapter.js shimming firefox."),s.browserShim=N,_(e,r),E(e,r),U(e,r),F(e,r),ce(e,r),le(e,r),pe(e,r),de(e,r),ue(e,r),me(e,r),fe(e,r),he(e,r),ge(e,r),P(e,r),z(e,r),x(e,r),k(e,r);break;case"safari":if(!q||!t.shimSafari)return n("Safari shim is not included in this adapter release."),s;n("adapter.js shimming safari."),s.browserShim=q,_(e,r),E(e,r),ve(e,r),be(e,r),Se(e,r),Ce(e,r),ye(e,r),Te(e,r),Re(e,r),Pe(e,r),P(e,r),G(e,r),x(e,r),k(e,r),K(e,r);break;default:n("Unsupported browser!");break}return s}var It=lt({window:typeof window>"u"?void 0:window}),I=It;import{ServiceType as Mt}from"@protobuf-ts/runtime-rpc";import{MessageType as h}from"@protobuf-ts/runtime";var Xe=(i=>(i[i.UNSPECIFIED=0]="UNSPECIFIED",i[i.OFFER=1]="OFFER",i[i.ANSWER=2]="ANSWER",i[i.PRANSWER=3]="PRANSWER",i[i.ROLLBACK=4]="ROLLBACK",i))(Xe||{}),Ee=class extends h{constructor(){super("pulsebeam.v1.PrepareReq",[])}},Dt=new Ee,Ie=class extends h{constructor(){super("pulsebeam.v1.PrepareResp",[{no:1,name:"ice_servers",kind:"message",repeat:1,T:()=>Lt}])}},Ot=new Ie,Me=class extends h{constructor(){super("pulsebeam.v1.IceServer",[{no:1,name:"urls",kind:"scalar",repeat:2,T:9},{no:2,name:"username",kind:"scalar",opt:!0,T:9},{no:3,name:"credential",kind:"scalar",opt:!0,T:9}])}},Lt=new Me,De=class extends h{constructor(){super("pulsebeam.v1.SendReq",[{no:1,name:"msg",kind:"message",T:()=>ut}])}},At=new De,Oe=class extends h{constructor(){super("pulsebeam.v1.SendResp",[])}},jt=new Oe,Le=class extends h{constructor(){super("pulsebeam.v1.RecvReq",[{no:1,name:"src",kind:"message",T:()=>Ue}])}},Ut=new Le,Ae=class extends h{constructor(){super("pulsebeam.v1.RecvResp",[{no:1,name:"msgs",kind:"message",repeat:1,T:()=>ut}])}},Ft=new Ae,je=class extends h{constructor(){super("pulsebeam.v1.PeerInfo",[{no:1,name:"group_id",kind:"scalar",T:9},{no:2,name:"peer_id",kind:"scalar",T:9},{no:3,name:"conn_id",kind:"scalar",T:13}])}},Ue=new je,Fe=class extends h{constructor(){super("pulsebeam.v1.Message",[{no:1,name:"header",kind:"message",T:()=>qt},{no:2,name:"payload",kind:"message",T:()=>Nt}])}},ut=new Fe,Ne=class extends h{constructor(){super("pulsebeam.v1.MessagePayload",[{no:1,name:"signal",kind:"message",oneof:"payloadType",T:()=>Gt},{no:2,name:"join",kind:"message",oneof:"payloadType",T:()=>Jt},{no:3,name:"bye",kind:"message",oneof:"payloadType",T:()=>Bt},{no:4,name:"ack",kind:"message",oneof:"payloadType",T:()=>Vt}])}},Nt=new Ne,qe=class extends h{constructor(){super("pulsebeam.v1.MessageHeader",[{no:1,name:"src",kind:"message",T:()=>Ue},{no:2,name:"dst",kind:"message",T:()=>Ue},{no:7,name:"seqnum",kind:"scalar",T:13},{no:8,name:"reliable",kind:"scalar",T:8}])}},qt=new qe,Ge=class extends h{constructor(){super("pulsebeam.v1.Signal",[{no:1,name:"generation_counter",kind:"scalar",T:13},{no:9,name:"sdp",kind:"message",oneof:"data",T:()=>zt},{no:10,name:"ice_candidate",kind:"message",oneof:"data",T:()=>Kt}])}},Gt=new Ge,ze=class extends h{constructor(){super("pulsebeam.v1.Sdp",[{no:1,name:"kind",kind:"enum",T:()=>["pulsebeam.v1.SdpKind",Xe,"SDP_KIND_"]},{no:2,name:"sdp",kind:"scalar",T:9}])}},zt=new ze,Ke=class extends h{constructor(){super("pulsebeam.v1.ICECandidate",[{no:1,name:"candidate",kind:"scalar",T:9},{no:2,name:"sdp_m_line_index",kind:"scalar",opt:!0,T:13},{no:3,name:"sdp_mid",kind:"scalar",opt:!0,T:9},{no:4,name:"username",kind:"scalar",opt:!0,T:9},{no:5,name:"password",kind:"scalar",opt:!0,T:9}])}},Kt=new Ke,Je=class extends h{constructor(){super("pulsebeam.v1.Join",[])}},Jt=new Je,Be=class extends h{constructor(){super("pulsebeam.v1.Bye",[])}},Bt=new Be,Ve=class extends h{constructor(){super("pulsebeam.v1.Ack",[{no:1,name:"ack_ranges",kind:"message",repeat:1,T:()=>Ht}])}},Vt=new Ve,He=class extends h{constructor(){super("pulsebeam.v1.AckRange",[{no:1,name:"seqnum_start",kind:"scalar",T:13},{no:2,name:"seqnum_end",kind:"scalar",T:13}])}},Ht=new He,Ye=class extends h{constructor(){super("pulsebeam.v1.DataChannel",[{no:10,name:"heartbeat",kind:"message",oneof:"payload",T:()=>Yt}])}},Tr=new Ye,We=class extends h{constructor(){super("pulsebeam.v1.DataChannelHeartbeat",[])}},Yt=new We,J=new Mt("pulsebeam.v1.Tunnel",[{name:"Prepare",options:{},I:Dt,O:Ot},{name:"Send",options:{},I:At,O:jt},{name:"Recv",options:{},I:Ut,O:Ft}]);import{stackIntercept as Qe}from"@protobuf-ts/runtime-rpc";var B=class{constructor(t){this._transport=t;this.typeName=J.typeName;this.methods=J.methods;this.options=J.options}prepare(t,n){let r=this.methods[0],s=this._transport.mergeOptions(n);return Qe("unary",this._transport,r,s,t)}send(t,n){let r=this.methods[1],s=this._transport.mergeOptions(n);return Qe("unary",this._transport,r,s,t)}recv(t,n){let r=this.methods[2],s=this._transport.mergeOptions(n);return Qe("unary",this._transport,r,s,t)}};function V(e,t){return new Promise(n=>{let r=setTimeout(()=>n(!0),e);t&&t.addEventListener("abort",()=>{clearTimeout(r),n(!1)})})}function H(...e){let t=new AbortController,n=()=>{t.abort();for(let r of e)r.removeEventListener("abort",n)};for(let r of e)r.addEventListener("abort",n);return t.signal}async function M(e,t){let{maxRetries:n,baseDelay:r,maxDelay:s,jitterFactor:i=.3,isRecoverable:o=()=>!0,abortSignal:a}=t,d=0;for(;(d<=n||n<0)&&!a?.aborted;)try{return await e()}catch(c){if(!o(c)||(d++,n>=0&&d>n))throw c;let p=Wt(d,r,s,i);await V(p,a).catch(()=>{})}if(a?.aborted)return null;throw new Error("Retry failed: max retries exceeded")}function Wt(e,t,n,r){let s=Math.min(t*2**(e-1),n),i=Math.random()*r*s;return s+i}var mt=9e5,ft=50,Y=1e3,Xt=5,Qt=1e4,Zt=1e3;var $t=V,wt=e=>Math.floor(Math.random()*(2**32-e))+e,er=e=>!0,Ze=class{constructor(t){this.onmsg=async t=>{};this.logger=t.sub("queue"),this.map=new Map,this.emitted=new Map,this.unreliable=[],this.processing=!1}enqueue(t){if(!t.header?.reliable)this.unreliable.push(t);else{let n=t.header.seqnum;if(this.map.has(n)||this.emitted.has(n))return;this.map.set(n,[performance.now(),t])}this.processNext()}async processNext(){if(this.processing)return;let t=this.unreliable.pop();if(!t){let n=this.map.entries().next().value;if(!n)return;let[r,s]=n;this.map.delete(r),this.emitted.set(r,s);let[i,o]=s;if(!o.header)return;t=o}this.processing=!0;try{await this.onmsg(t)}catch(n){let r={msg:t};n instanceof Error&&(r.err=n),this.logger.error("error processing message",r)}this.processing=!1,this.processNext()}},W=class{constructor(t,n){this.client=t;this.opts=n;this.onstream=t=>{};this.onclosed=t=>{};this.handleMessages=t=>{for(let n of t){if(this.logger.debug("received",{msg:n}),this.abort.signal.aborted)return;if(!n.header)continue;let r=n.header.src,s=n.header.dst;if(!r||!s)continue;if(s.connId>=16&&s.connId!=this.info.connId){this.logger.warn("received messages from a stale connection, ignoring",{receivedConnID:s.connId});continue}let i=null;for(let o of this.streams)if(r.groupId===o.other.groupId&&r.peerId===o.other.peerId&&r.connId===o.other.connId){i=o;break}if(!i){if(this.logger.debug(`session not found, creating one for ${r.peerId}:${r.connId}`),r.peerId==this.info.peerId){this.logger.warn("loopback detected, ignoring messages");return}i=new $e(this,this.info,r,this.logger),this.streams.push(i),this.onstream(i)}i.enqueue(n)}};this.asleep=n.asleep||$t,this.randUint32=n.randUint32||wt,this.isRecoverable=n.isRecoverable||er,this.info={groupId:n.groupId,peerId:n.peerId,connId:this.randUint32(16)},this.abort=new AbortController,this.logger=n.logger.sub("transport",{info:this.info}),this.streams=[]}async listen(){await Promise.all([this.pollLoop(),this.gcLoop()])}async gcLoop(){for(;!this.abort.signal.aborted;)this.streams=this.streams.filter(t=>!t.isClosed()),await V(Zt,this.abort.signal);this.logger.debug("gc loop is closed")}async pollLoop(){let t={abort:this.abort.signal,timeout:mt},n={baseDelay:ft,maxDelay:Y,maxRetries:-1,abortSignal:this.abort.signal,isRecoverable:this.isRecoverable};for(;!this.abort.signal.aborted;)try{let r=await M(async()=>await this.client.recv({src:this.info},t),n);if(r===null)break;new Promise(()=>this.handleMessages(r.response.msgs))}catch(r){this.logger.error("unrecoverable error, force closing",{err:r}),this.close();return}this.logger.debug("poll loop is closed")}async close(t){this.abort.signal.aborted||(t=t||"transport is closed",await Promise.all(this.streams.map(n=>n.close(t))),this.abort.abort(t),this.logger.debug("transport is now closed",{reason:t}),this.streams=[],this.onclosed(t))}async connect(t,n,r){let s={payloadType:{oneofKind:"join",join:{}}},i={src:this.info,dst:{groupId:t,peerId:n,connId:0},seqnum:0,reliable:!1},o=!1,a=H(r,this.abort.signal);for(;!a.aborted&&!o;)await this.send(a,{header:i,payload:s}),await this.asleep(Y,a).catch(()=>{}),o=!!this.streams.find(d=>d.other.groupId===t&&d.other.peerId===n)}async send(t,n){let r=H(t,this.abort.signal),s={abort:r,timeout:mt},i={baseDelay:ft,maxDelay:Y,maxRetries:-1,abortSignal:r,isRecoverable:this.isRecoverable};try{if(await M(async()=>await this.client.send({msg:n},s),i)===null){this.logger.warn("aborted, message dropped from sending",{msg:n});return}return}catch(o){this.logger.error("unrecoverable error, force closing",{err:o}),this.close();return}}},$e=class{constructor(t,n,r,s){this.transport=t;this.info=n;this.other=r;this.onpayload=async t=>{};this.onclosed=t=>{};this.logger=s.sub("stream",{other:r}),this.abort=new AbortController,this.ackedbuf={},this.recvq=new Ze(this.logger),this.recvq.onmsg=i=>this.handleMessage(i),this.lastSeqnum=0,this.closedAt=0}createSignal(...t){return H(this.abort.signal,...t)}isClosed(){let t=this.abort.signal.aborted&&performance.now()-this.closedAt>Qt;return t&&this.logger.debug("stream is ready for GC"),t}enqueue(t){if(this.abort.signal.aborted){this.logger.warn("received a message in closed state, ignoring new messages.");return}this.recvq.enqueue(t)}async send(t,n,r){r||(r=this.abort.signal);let s={header:{src:this.transport.info,dst:this.other,seqnum:0,reliable:n},payload:{...t}};if(!n){await this.transport.send(r,s);return}this.lastSeqnum++,s.header.seqnum=this.lastSeqnum,this.ackedbuf[s.header.seqnum]=!1;let i=Xt,o=i,a=s.header.seqnum;for(;!r.aborted&&(await this.transport.send(this.abort.signal,s),await this.transport.asleep(5*Y,this.abort.signal).catch(()=>{}),!this.ackedbuf[a]);){if(o<=0){let d="reached the maximum resend limit, dropping message";throw this.logger.warn(d,{seqnum:a,resendLimit:i,reliable:n}),new Error(d)}o--,this.logger.debug("resending",{...s.header})}}async handleMessage(t){let n=t.payload.payloadType;switch(n.oneofKind){case"ack":this.handleAck(n.ack);break;case"bye":this.close("received bye from other peer");break;case void 0:break;default:{if(t.header.reliable){let s={payloadType:{oneofKind:"ack",ack:{ackRanges:[{seqnumStart:t.header.seqnum,seqnumEnd:t.header.seqnum+1}]}}};this.logger.debug("ack",{seqnum:t.header.seqnum}),this.send(s,!1)}if(!t.payload)return;await this.onpayload(t.payload);break}}}handleAck(t){for(let n of t.ackRanges)for(let r=n.seqnumStart;r<n.seqnumEnd;r++)this.logger.debug("received ack",{seqnum:r}),this.ackedbuf[r]=!0}async close(t){this.abort.signal.aborted||(t=t||"session is closed",await this.send({payloadType:{oneofKind:"bye",bye:{}}},!1).catch(n=>this.logger.warn("failed to send bye",{e:n})),this.abort.abort(t),this.closedAt=performance.now(),this.onclosed(t),this.logger.debug("sent bye to the other peer",{reason:t}))}};var tr={DEBUG:console.debug,INFO:console.info,WARN:console.warn,ERROR:console.error},ht={DEBUG:e=>console.debug(X(e)),INFO:e=>console.info(X(e)),WARN:e=>console.warn(X(e)),ERROR:e=>console.error(X(e))};function gt(e,t,n="root",r=new Set){let s=".";if(!r.has(e)){r.add(e);for(let i in e)if(typeof e[i]=="object"&&e[i]!==null){let o=n+s+i;gt(e[i],t,o,r)}else{let o=t[n]||[];o.push(`${i}=${e[i]}`),t[n]=o}}}function X(e){let t={};gt(e,t);let n=[];for(let r in t)n.push(`[${r}] ${t[r].join(" ")}`);return n.join(`
|
36
|
+
`)}var Q=class e{constructor(t,n,r){this.name=t;n||(n={}),r||(r=tr),this.sink=r,this.obj={...n,name:t}}log(t,n,r){let s=r||{};t({ts:Date.now(),message:n,...this.obj,...s})}debug(t,n){this.log(this.sink.DEBUG,t,n)}info(t,n){this.log(this.sink.INFO,t,n)}warn(t,n){this.log(this.sink.WARN,t,n)}error(t,n){this.log(this.sink.ERROR,t,n)}sub(t,n){return n||(n={}),new e(this.name+"."+t,{...this.obj,...n},this.sink)}};var rr=2,Ct=5e3;function yt(e){return{candidate:e.candidate,sdpMid:e.sdpMid,sdpMLineIndex:e.sdpMLineIndex,usernameFragment:e.password}}function nr(e){switch(e){case 1:return"offer";case 2:return"answer";case 3:return"pranswer";case 4:return"rollback";default:throw new Error(`unexpected kind: ${e}`)}}function St(e){switch(e){case"offer":return 1;case"answer":return 2;case"pranswer":return 3;case"rollback":return 4;default:throw new Error(`unexpected sdp type: ${e}`)}}var Z=class{constructor(t,n){this.stream=t;this.ondatachannel=()=>{};this.onconnectionstatechange=()=>{};this.ontrack=()=>{};this.triggerIceRestart=()=>{if(!this.impolite)return;let t=performance.now()-this.lastIceRestart;if(t<Ct){let n=Ct-t,r=window.setTimeout(()=>{this.triggerIceRestart(),this.timers=this.timers.filter(s=>s===r)},n);return}this.pc.connectionState!=="connected"&&(this.iceRestartCount>=rr&&this.close(),this.logger.debug("triggered ICE restart"),this.pc.restartIce(),this.generationCounter++,this.iceRestartCount++,this.lastIceRestart=performance.now())};this.sendSignal=t=>{this.stream.send({payloadType:{oneofKind:"signal",signal:{...t,generationCounter:this.generationCounter}}},!0)};this.handleMessage=async t=>{if(this.abort.signal.aborted){this.logger.warn("session is closed, ignoring message");return}switch(t.payloadType.oneofKind){case"signal":await this.handleSignal(t.payloadType.signal);break;case"bye":this.close();break;case"join":break}};this.handleSignal=async t=>{if(t.generationCounter<this.generationCounter){this.logger.warn("detected staled generationCounter signals, ignoring");return}let n=t.data;if(t.generationCounter>this.generationCounter){if(this.logger.debug("detected new generationCounter",{otherGenerationCounter:t.generationCounter,generationCounter:this.generationCounter,msg:n}),n.oneofKind==="iceCandidate"){let o=yt(n.iceCandidate);this.pendingCandidates.push(o),this.logger.warn("expecting an offer but got ice candidates during an ICE restart, adding to pending.",{ice:o,msg:n});return}this.generationCounter=t.generationCounter}if(n.oneofKind==="iceCandidate"){let o=yt(n.iceCandidate);this.pendingCandidates.push(o),this.checkPendingCandidates();return}if(n.oneofKind!="sdp")return;let r=n.sdp;this.logger.debug("received a SDP signal",{sdpKind:r.kind});let s=r.kind===1&&(this.makingOffer||this.pc.signalingState!=="stable");if(this.impolite&&s){this.logger.debug("ignored offer");return}if(this.logger.debug("creating an answer"),await this.pc.setRemoteDescription({type:nr(r.kind),sdp:r.sdp}),r.kind===1){if(await this.pc.setLocalDescription(),!this.pc.localDescription){this.logger.error("unexpected null local description");return}this.sendSignal({data:{oneofKind:"sdp",sdp:{kind:St(this.pc.localDescription.type),sdp:this.pc.localDescription.sdp}}})}this.checkPendingCandidates()};this.checkPendingCandidates=()=>{if(!["stable","have-local-offer","have-remote-offer"].includes(this.pc.signalingState)||!this.pc.remoteDescription){this.logger.debug("wait for adding pending candidates",{signalingState:this.pc.signalingState,iceConnectionState:this.pc.iceConnectionState,connectionState:this.pc.connectionState,remoteDescription:this.pc.remoteDescription,pendingCandidates:this.pendingCandidates.length});return}for(let n of this.pendingCandidates)!n.candidate||n.candidate===""||(this.pc.addIceCandidate(n).catch(r=>{this.logger.warn("failed to add candidate, skipping.",{candidate:n,e:r})}),this.logger.debug(`added ice: ${n.candidate}`));this.pendingCandidates=[]};this.pc=new RTCPeerConnection(n),this.makingOffer=!1,this.pendingCandidates=[],this.stream.info.connId===this.stream.other.connId?this.impolite=this.stream.info.peerId>this.stream.other.peerId:this.impolite=this.stream.info.connId>this.stream.other.connId,this.abort=new AbortController,this.logger=t.logger.sub("session",{role:this.impolite?"impolite":"polite"}),this.generationCounter=0,this.iceRestartCount=0,this.lastIceRestart=0,this.timers=[],this._connectionState="new",t.onpayload=i=>this.handleMessage(i),t.onclosed=i=>this.close(i),this.pc.oniceconnectionstatechange=async()=>{let i=await this.pc.getStats(),o=[],a=[],d=[];i.forEach(c=>{c.type==="candidate-pair"?o.push(c):c.type==="local-candidate"?a.push(c):c.type==="remote-candidate"&&d.push(c)}),this.logger.debug("iceconnectionstate changed",{connectionstate:this.pc.connectionState,iceconnectionstate:this.pc.iceConnectionState,local:a,remote:d,pair:o,pending:this.pendingCandidates})};let r=performance.now();this.pc.onconnectionstatechange=i=>{switch(this.logger.debug("connectionstate changed",{connectionstate:this.pc.connectionState,iceconnectionstate:this.pc.iceConnectionState}),this.setConnectionState(this.pc.connectionState,i),this.pc.connectionState){case"connecting":r=performance.now();break;case"connected":{let o=performance.now()-r;this.logger.debug(`it took ${o}ms to connect`),this.iceRestartCount=0;break}case"disconnected":this.triggerIceRestart();break;case"failed":this.close("detected sustained network failure");break;case"closed":break}};let s=!0;this.pc.onnegotiationneeded=async()=>{if(s){if(!this.impolite){this.stream.send({payloadType:{oneofKind:"join",join:{}}},!0);return}s=!1}try{if(this.makingOffer=!0,this.logger.debug("creating an offer"),await this.pc.setLocalDescription(),!this.pc.localDescription)throw new Error("expect localDescription to be not empty");this.sendSignal({data:{oneofKind:"sdp",sdp:{kind:St(this.pc.localDescription.type),sdp:this.pc.localDescription.sdp}}})}catch(i){i instanceof Error&&this.logger.error("failed in negotiating",{err:i})}finally{this.makingOffer=!1}},this.pc.onicecandidate=({candidate:i})=>{this.logger.debug("onicecandidate",{candidate:i});let o={candidate:"",sdpMLineIndex:0,sdpMid:""};if(!i||i.candidate===""){this.logger.debug("ice gathering is finished");return}o.candidate=i.candidate,o.sdpMLineIndex=i.sdpMLineIndex??void 0,o.sdpMid=i.sdpMid??void 0,o.username=i.usernameFragment??void 0,this.sendSignal({data:{oneofKind:"iceCandidate",iceCandidate:o}})},this.pc.ondatachannel=(...i)=>{this.ondatachannel&&this.ondatachannel(...i)},this.pc.ontrack=(...i)=>{this.ontrack&&this.ontrack(...i)}}addTrack(...t){return this.pc.addTrack(...t)}removeTrack(...t){return this.pc.removeTrack(...t)}createDataChannel(...t){return this.pc.createDataChannel(...t)}get connectionState(){return this.pc.connectionState}get closeReason(){return this._closeReason}get other(){return{groupId:this.stream.other.groupId,peerId:this.stream.other.peerId,connId:this.stream.other.connId}}close(t){if(this.abort.signal.aborted)return;this.abort.abort(t);for(let r of this.timers)clearTimeout(r);this.timers=[],this.stream.close(),this._closeReason=t,this.pc.close();let n=new Event("connectionstatechange");this.setConnectionState("closed",n),this.logger.debug("session closed",{connectionState:this.connectionState})}setConnectionState(t,n){t!==this._connectionState&&this.onconnectionstatechange&&this.onconnectionstatechange(n)}};import{RpcError as sr}from"@protobuf-ts/runtime-rpc";import{TwirpErrorCode as y,TwirpFetchTransport as ir}from"@protobuf-ts/twirp-transport";import{jwtDecode as or}from"jwt-decode";var ar="https://cloud.pulsebeam.dev/twirp";var we=class{constructor(t,n,r,s){this.onsession=t=>{};this.onstatechange=()=>{};this.peerId=r.peerId,this.logger=t.sub("peer",{peerId:this.peerId}),this.sessions=[],this._state="new";let i={bundlePolicy:"balanced",iceTransportPolicy:r.forceRelay?"relay":"all",iceCandidatePoolSize:0,iceServers:r.iceServers};this.transport=new W(n,{enableDiscovery:!1,groupId:r.groupId,peerId:r.peerId,logger:this.logger,isRecoverable:s}),this.transport.onstream=o=>{let a=new Z(o,i);this.sessions.push(a),this.onsession(a)},this.transport.onclosed=()=>{this.close()}}start(){if(this._state==="closed")throw new Error("peer is already closed");this.transport.listen()}async close(){this.sessions=[],await this.transport.close(),this.setState("closed")}connect(t,n,r){return this.transport.connect(t,n,r)}get state(){return this._state}setState(t){t!==this._state&&(this._state=t,this.onstatechange())}},cr=[y[y.permission_denied],y[y.invalid_argument],y[y.aborted],y[y.bad_route],y[y.malformed],y[y.not_found],y[y.unauthenticated]];function Rt(e){return e instanceof Error?e instanceof sr?!cr.includes(e.code):!0:!1}async function Hr(e){let t=e.token,n=new ir({baseUrl:e.baseUrl||ar,sendJson:!1,jsonOptions:{emitDefaultValues:!0,enumAsInteger:!0,ignoreUnknownFields:!0},interceptors:[{interceptUnary(c,p,u,m){return m.meta||(m.meta={}),m.meta.Authorization=`Bearer ${t}`,c(p,u,m)}}]}),r=new B(n),s=await M(async()=>await r.prepare({}),{baseDelay:50,maxDelay:1e3,maxRetries:5,isRecoverable:Rt});if(s===null)throw new Error("createPeer aborted");let i=[...e.iceServers||[]];for(let c of s.response.iceServers)i.push({urls:c.urls,username:c.username,credential:c.credential});let o=or(t),a={...e,iceServers:i,groupId:o.gid,peerId:o.pid};return new we(new Q("pulsebeam",void 0,ht),r,a,Rt)}I.disableLog(!1);I.disableWarnings(!1);console.log("UA: ",navigator.userAgent);console.log("webrtc-adapter is enabled",JSON.stringify({shim:I.browserShim,version:I.browserDetails},null,2));export{we as Peer,Hr as createPeer};
|
37
37
|
//# sourceMappingURL=index.js.map
|