@sable-ai/sdk-core 0.1.3 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1486 @@
1
+ var Pf=Object.defineProperty;var Uf=(t)=>t;function Jf(t,e){this[t]=Uf.bind(null,e)}var _f=(t,e)=>{for(var l in e)Pf(t,l,{get:e[l],enumerable:!0,configurable:!0,set:Jf.bind(e,l)})};var vf=(t,e)=>()=>(t&&(e=t(t=0)),e);var jf={};_f(jf,{writeRbsp:()=>ab,videoCodecs:()=>ah,version:()=>ch,supportsVP9:()=>ph,supportsDynacast:()=>Ga,supportsAudioOutputSelection:()=>za,supportsAdaptiveStream:()=>Xa,supportsAV1:()=>Ah,setLogLevel:()=>oa,setLogExtension:()=>sa,ratchet:()=>hb,protocolVersion:()=>hh,parseRbsp:()=>ub,needsRbspUnescaping:()=>fb,isVideoTrack:()=>ue,isVideoFrame:()=>ob,isVideoCodec:()=>Rh,isScriptTransformSupported:()=>mn,isRemoteTrack:()=>wn,isRemoteParticipant:()=>Pa,isLocalTrack:()=>me,isLocalParticipant:()=>$h,isInsertableStreamSupported:()=>Eh,isE2EESupported:()=>Hh,isBrowserSupported:()=>Lh,isBackupVideoCodec:()=>bh,isBackupCodec:()=>xh,isAudioTrack:()=>Ft,isAudioCodec:()=>ja,importKey:()=>sb,getLogger:()=>pt,getEmptyVideoStreamTrack:()=>Za,getEmptyAudioStreamTrack:()=>tn,getBrowser:()=>At,facingModeFromLocalTrack:()=>Wx,facingModeFromDeviceLabel:()=>Kf,detachTrack:()=>Ne,deriveKeys:()=>ib,decodeTokenPayload:()=>Po,createLocalVideoTrack:()=>af,createLocalTracks:()=>Ol,createLocalScreenTracks:()=>hx,createLocalAudioTrack:()=>bf,createKeyMaterialFromString:()=>Vh,createKeyMaterialFromBuffer:()=>Xh,createE2EEKey:()=>cb,createAudioAnalyser:()=>Ka,compareVersions:()=>kt,audioCodecs:()=>dh,attributes:()=>ax,attachToElement:()=>$e,asEncryptablePacket:()=>zh,areTokenSourceFetchOptionsEqual:()=>Ix,VideoQuality:()=>It,VideoPresets43:()=>bn,VideoPresets:()=>ve,VideoPreset:()=>j,UnsupportedServer:()=>po,UnexpectedConnectionState:()=>U,TrackType:()=>Vt,TrackPublication:()=>Qt,TrackInvalidError:()=>Xt,TrackEvent:()=>W,Track:()=>L,TokenSourceFixed:()=>Fo,TokenSourceConfigurable:()=>ko,TokenSource:()=>Bx,SubscriptionError:()=>Ui,SimulatedError:()=>fh,SignalRequestError:()=>dn,SignalReconnectError:()=>be,ScreenSharePresets:()=>Vl,RpcError:()=>_,RoomEvent:()=>I,Room:()=>nl,RemoteVideoTrack:()=>jo,RemoteTrackPublication:()=>To,RemoteTrack:()=>Yn,RemoteParticipant:()=>Hl,RemoteDataTrack:()=>Qo,RemoteAudioTrack:()=>Ko,PublishTrackError:()=>un,PublishDataError:()=>uh,ParticipantKind:()=>Ue,ParticipantEvent:()=>N,Participant:()=>Qn,NegotiationError:()=>he,Mutex:()=>ht,MediaDeviceFailure:()=>Il,LoggerNames:()=>dt,LogLevel:()=>Je,LocalVideoTrack:()=>Oe,LocalTrackRecorder:()=>Go,LocalTrackPublication:()=>Ml,LocalTrack:()=>Gn,LocalParticipant:()=>qo,LocalDataTrack:()=>zl,LocalAudioTrack:()=>ze,LivekitReasonedError:()=>Wt,LivekitError:()=>$t,KeyProviderEvent:()=>fe,KeyHandlerEvent:()=>jr,ExternalE2EEKeyProvider:()=>Oh,EngineEvent:()=>B,Encryption_Type:()=>T,EncryptionEvent:()=>ce,DisconnectReason:()=>Gt,DeviceUnsupportedError:()=>rl,DefaultReconnectPolicy:()=>mo,DataTrackPacket:()=>Gl,DataStreamErrorReason:()=>at,DataStreamError:()=>Lt,DataPacket_Kind:()=>xe,CryptorEvent:()=>qr,CryptorErrorReason:()=>yn,CryptorError:()=>Dh,CriticalTimers:()=>et,ConnectionState:()=>K,ConnectionQuality:()=>ie,ConnectionErrorReason:()=>q,ConnectionError:()=>G,ConnectionCheck:()=>Wf,Checker:()=>_t,CheckStatus:()=>Et,BaseKeyProvider:()=>Bo,BackupCodecPolicy:()=>Dr,AudioPresets:()=>an});function hu(t,e){return e.forEach(function(l){l&&typeof l!=="string"&&!Array.isArray(l)&&Object.keys(l).forEach(function(n){if(n!=="default"&&!(n in t)){var r=Object.getOwnPropertyDescriptor(l,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:function(){return l[n]}})}})}),Object.freeze(t)}class ht{constructor(){ws(this,"_locking"),ws(this,"_locks"),this._locking=Promise.resolve(),this._locks=0}isLocked(){return this._locks>0}lock(){this._locks+=1;let t,e=new Promise((n)=>t=()=>{this._locks-=1,n()}),l=this._locking.then(()=>t);return this._locking=this._locking.then(()=>e),l}}function v(t,e){if(!t)throw Error(e)}function Zl(t){if(typeof t!=="number")throw Error("invalid int 32: "+typeof t);if(!Number.isInteger(t)||t>xu||t<gu)throw Error("invalid int 32: "+t)}function Cr(t){if(typeof t!=="number")throw Error("invalid uint 32: "+typeof t);if(!Number.isInteger(t)||t>bu||t<0)throw Error("invalid uint 32: "+t)}function Ri(t){if(typeof t!=="number")throw Error("invalid float 32: "+typeof t);if(!Number.isFinite(t))return;if(t>du||t<au)throw Error("invalid float 32: "+t)}function wu(t){let e=t[$i];return v(e,"missing enum type on enum object"),e}function Ni(t,e,l,n){t[$i]=Mi(e,l.map((r)=>({no:r.no,name:r.name,localName:t[r.no]})))}function Mi(t,e,l){let n=Object.create(null),r=Object.create(null),o=[];for(let s of e){let c=Hi(s);o.push(c),n[s.name]=c,r[s.no]=c}return{typeName:t,values:o,findName(s){return n[s]},findNumber(s){return r[s]}}}function mu(t,e,l){let n={};for(let r of e){let o=Hi(r);n[o.localName]=o.no,n[o.no]=o.localName}return Ni(n,t,e),n}function Hi(t){if("localName"in t)return t;return Object.assign(Object.assign({},t),{localName:t.name})}class pn{equals(t){return this.getType().runtime.util.equals(this.getType(),this,t)}clone(){return this.getType().runtime.util.clone(this)}fromBinary(t,e){let l=this.getType(),n=l.runtime.bin,r=n.makeReadOptions(e);return n.readMessage(this,r.readerFactory(t),t.byteLength,r),this}fromJson(t,e){let l=this.getType(),n=l.runtime.json,r=n.makeReadOptions(e);return n.readMessage(l,t,r,this),this}fromJsonString(t,e){let l;try{l=JSON.parse(t)}catch(n){throw Error("cannot decode ".concat(this.getType().typeName," from JSON: ").concat(n instanceof Error?n.message:String(n)))}return this.fromJson(l,e)}toBinary(t){let e=this.getType(),l=e.runtime.bin,n=l.makeWriteOptions(t),r=n.writerFactory();return l.writeMessage(this,r,n),r.finish()}toJson(t){let e=this.getType(),l=e.runtime.json,n=l.makeWriteOptions(t);return l.writeMessage(this,n)}toJsonString(t){var e;let l=this.toJson(t);return JSON.stringify(l,null,(e=t===null||t===void 0?void 0:t.prettySpaces)!==null&&e!==void 0?e:0)}toJSON(){return this.toJson({emitDefaultValues:!0})}getType(){return Object.getPrototypeOf(this).constructor}}function yu(t,e,l,n){var r;let o=(r=n===null||n===void 0?void 0:n.localName)!==null&&r!==void 0?r:e.substring(e.lastIndexOf(".")+1),s={[o]:function(c){t.util.initFields(this),t.util.initPartial(c,this)}}[o];return Object.setPrototypeOf(s.prototype,new pn),Object.assign(s,{runtime:t,typeName:e,fields:t.util.newFieldList(l),fromBinary(c,i){return new s().fromBinary(c,i)},fromJson(c,i){return new s().fromJson(c,i)},fromJsonString(c,i){return new s().fromJsonString(c,i)},equals(c,i){return t.util.equals(s,c,i)}}),s}function Au(){let t=0,e=0;for(let n=0;n<28;n+=7){let r=this.buf[this.pos++];if(t|=(r&127)<<n,(r&128)==0)return this.assertBounds(),[t,e]}let l=this.buf[this.pos++];if(t|=(l&15)<<28,e=(l&112)>>4,(l&128)==0)return this.assertBounds(),[t,e];for(let n=3;n<=31;n+=7){let r=this.buf[this.pos++];if(e|=(r&127)<<n,(r&128)==0)return this.assertBounds(),[t,e]}throw Error("invalid varint")}function lr(t,e,l){for(let o=0;o<28;o=o+7){let s=t>>>o,c=!(s>>>7==0&&e==0),i=(c?s|128:s)&255;if(l.push(i),!c)return}let n=t>>>28&15|(e&7)<<4,r=e>>3!=0;if(l.push((r?n|128:n)&255),!r)return;for(let o=3;o<31;o=o+7){let s=e>>>o,c=s>>>7!=0,i=(c?s|128:s)&255;if(l.push(i),!c)return}l.push(e>>>31&1)}function ms(t){let e=t[0]==="-";if(e)t=t.slice(1);let l=1e6,n=0,r=0;function o(s,c){let i=Number(t.slice(s,c));if(r*=l,n=n*l+i,n>=Kl)r=r+(n/Kl|0),n=n%Kl}return o(-24,-18),o(-18,-12),o(-12,-6),o(-6),e?Vi(n,r):no(n,r)}function pu(t,e){let l=no(t,e),n=l.hi&2147483648;if(n)l=Vi(l.lo,l.hi);let r=Ei(l.lo,l.hi);return n?"-"+r:r}function Ei(t,e){if({lo:t,hi:e}=Lu(t,e),e<=2097151)return String(Kl*e+t);let l=t&16777215,n=(t>>>24|e<<8)&16777215,r=e>>16&65535,o=l+n*6777216+r*6710656,s=n+r*8147497,c=r*2,i=1e7;if(o>=i)s+=Math.floor(o/i),o%=i;if(s>=i)c+=Math.floor(s/i),s%=i;return c.toString()+ys(s)+ys(o)}function Lu(t,e){return{lo:t>>>0,hi:e>>>0}}function no(t,e){return{lo:t|0,hi:e|0}}function Vi(t,e){if(e=~e,t)t=~t+1;else e+=1;return no(t,e)}function As(t,e){if(t>=0){while(t>127)e.push(t&127|128),t=t>>>7;e.push(t)}else{for(let l=0;l<9;l++)e.push(t&127|128),t=t>>7;e.push(1)}}function Cu(){let t=this.buf[this.pos++],e=t&127;if((t&128)==0)return this.assertBounds(),e;if(t=this.buf[this.pos++],e|=(t&127)<<7,(t&128)==0)return this.assertBounds(),e;if(t=this.buf[this.pos++],e|=(t&127)<<14,(t&128)==0)return this.assertBounds(),e;if(t=this.buf[this.pos++],e|=(t&127)<<21,(t&128)==0)return this.assertBounds(),e;t=this.buf[this.pos++],e|=(t&15)<<28;for(let l=5;(t&128)!==0&&l<10;l++)t=this.buf[this.pos++];if((t&128)!=0)throw Error("invalid varint");return this.assertBounds(),e>>>0}function Iu(){let t=new DataView(new ArrayBuffer(8));if(typeof BigInt==="function"&&typeof t.getBigInt64==="function"&&typeof t.getBigUint64==="function"&&typeof t.setBigInt64==="function"&&typeof t.setBigUint64==="function"&&(typeof process!="object"||typeof process.env!="object"||process.env.BUF_BIGINT_DISABLE!=="1")){let r=BigInt("-9223372036854775808"),o=BigInt("9223372036854775807"),s=BigInt("0"),c=BigInt("18446744073709551615");return{zero:BigInt(0),supported:!0,parse(i){let h=typeof i=="bigint"?i:BigInt(i);if(h>o||h<r)throw Error("int64 invalid: ".concat(i));return h},uParse(i){let h=typeof i=="bigint"?i:BigInt(i);if(h>c||h<s)throw Error("uint64 invalid: ".concat(i));return h},enc(i){return t.setBigInt64(0,this.parse(i),!0),{lo:t.getInt32(0,!0),hi:t.getInt32(4,!0)}},uEnc(i){return t.setBigInt64(0,this.uParse(i),!0),{lo:t.getInt32(0,!0),hi:t.getInt32(4,!0)}},dec(i,h){return t.setInt32(0,i,!0),t.setInt32(4,h,!0),t.getBigInt64(0,!0)},uDec(i,h){return t.setInt32(0,i,!0),t.setInt32(4,h,!0),t.getBigUint64(0,!0)}}}let l=(r)=>v(/^-?[0-9]+$/.test(r),"int64 invalid: ".concat(r)),n=(r)=>v(/^[0-9]+$/.test(r),"uint64 invalid: ".concat(r));return{zero:"0",supported:!1,parse(r){if(typeof r!="string")r=r.toString();return l(r),r},uParse(r){if(typeof r!="string")r=r.toString();return n(r),r},enc(r){if(typeof r!="string")r=r.toString();return l(r),ms(r)},uEnc(r){if(typeof r!="string")r=r.toString();return n(r),ms(r)},dec(r,o){return pu(r,o)},uDec(r,o){return Ei(r,o)}}}function de(t,e,l){if(e===l)return!0;if(t==C.BYTES){if(!(e instanceof Uint8Array)||!(l instanceof Uint8Array))return!1;if(e.length!==l.length)return!1;for(let n=0;n<e.length;n++)if(e[n]!==l[n])return!1;return!0}switch(t){case C.UINT64:case C.FIXED64:case C.INT64:case C.SFIXED64:case C.SINT64:return e==l}return!1}function Pe(t,e){switch(t){case C.BOOL:return!1;case C.UINT64:case C.FIXED64:case C.INT64:case C.SFIXED64:case C.SINT64:return e==0?P.zero:"0";case C.DOUBLE:case C.FLOAT:return 0;case C.BYTES:return new Uint8Array(0);case C.STRING:return"";default:return 0}}function Xi(t,e){switch(t){case C.BOOL:return e===!1;case C.STRING:return e==="";case C.BYTES:return e instanceof Uint8Array&&!e.byteLength;default:return e==0}}class Gi{constructor(t){this.stack=[],this.textEncoder=t!==null&&t!==void 0?t:new TextEncoder,this.chunks=[],this.buf=[]}finish(){this.chunks.push(new Uint8Array(this.buf));let t=0;for(let n=0;n<this.chunks.length;n++)t+=this.chunks[n].length;let e=new Uint8Array(t),l=0;for(let n=0;n<this.chunks.length;n++)e.set(this.chunks[n],l),l+=this.chunks[n].length;return this.chunks=[],e}fork(){return this.stack.push({chunks:this.chunks,buf:this.buf}),this.chunks=[],this.buf=[],this}join(){let t=this.finish(),e=this.stack.pop();if(!e)throw Error("invalid state, fork stack empty");return this.chunks=e.chunks,this.buf=e.buf,this.uint32(t.byteLength),this.raw(t)}tag(t,e){return this.uint32((t<<3|e)>>>0)}raw(t){if(this.buf.length)this.chunks.push(new Uint8Array(this.buf)),this.buf=[];return this.chunks.push(t),this}uint32(t){Cr(t);while(t>127)this.buf.push(t&127|128),t=t>>>7;return this.buf.push(t),this}int32(t){return Zl(t),As(t,this.buf),this}bool(t){return this.buf.push(t?1:0),this}bytes(t){return this.uint32(t.byteLength),this.raw(t)}string(t){let e=this.textEncoder.encode(t);return this.uint32(e.byteLength),this.raw(e)}float(t){Ri(t);let e=new Uint8Array(4);return new DataView(e.buffer).setFloat32(0,t,!0),this.raw(e)}double(t){let e=new Uint8Array(8);return new DataView(e.buffer).setFloat64(0,t,!0),this.raw(e)}fixed32(t){Cr(t);let e=new Uint8Array(4);return new DataView(e.buffer).setUint32(0,t,!0),this.raw(e)}sfixed32(t){Zl(t);let e=new Uint8Array(4);return new DataView(e.buffer).setInt32(0,t,!0),this.raw(e)}sint32(t){return Zl(t),t=(t<<1^t>>31)>>>0,As(t,this.buf),this}sfixed64(t){let e=new Uint8Array(8),l=new DataView(e.buffer),n=P.enc(t);return l.setInt32(0,n.lo,!0),l.setInt32(4,n.hi,!0),this.raw(e)}fixed64(t){let e=new Uint8Array(8),l=new DataView(e.buffer),n=P.uEnc(t);return l.setInt32(0,n.lo,!0),l.setInt32(4,n.hi,!0),this.raw(e)}int64(t){let e=P.enc(t);return lr(e.lo,e.hi,this.buf),this}sint64(t){let e=P.enc(t),l=e.hi>>31,n=e.lo<<1^l,r=(e.hi<<1|e.lo>>>31)^l;return lr(n,r,this.buf),this}uint64(t){let e=P.uEnc(t);return lr(e.lo,e.hi,this.buf),this}}class zi{constructor(t,e){this.varint64=Au,this.uint32=Cu,this.buf=t,this.len=t.length,this.pos=0,this.view=new DataView(t.buffer,t.byteOffset,t.byteLength),this.textDecoder=e!==null&&e!==void 0?e:new TextDecoder}tag(){let t=this.uint32(),e=t>>>3,l=t&7;if(e<=0||l<0||l>5)throw Error("illegal tag: field no "+e+" wire type "+l);return[e,l]}skip(t,e){let l=this.pos;switch(t){case lt.Varint:while(this.buf[this.pos++]&128);break;case lt.Bit64:this.pos+=4;case lt.Bit32:this.pos+=4;break;case lt.LengthDelimited:let n=this.uint32();this.pos+=n;break;case lt.StartGroup:for(;;){let[r,o]=this.tag();if(o===lt.EndGroup){if(e!==void 0&&r!==e)throw Error("invalid end group tag");break}this.skip(o,r)}break;default:throw Error("cant skip wire type "+t)}return this.assertBounds(),this.buf.subarray(l,this.pos)}assertBounds(){if(this.pos>this.len)throw RangeError("premature EOF")}int32(){return this.uint32()|0}sint32(){let t=this.uint32();return t>>>1^-(t&1)}int64(){return P.dec(...this.varint64())}uint64(){return P.uDec(...this.varint64())}sint64(){let[t,e]=this.varint64(),l=-(t&1);return t=(t>>>1|(e&1)<<31)^l,e=e>>>1^l,P.dec(t,e)}bool(){let[t,e]=this.varint64();return t!==0||e!==0}fixed32(){return this.view.getUint32((this.pos+=4)-4,!0)}sfixed32(){return this.view.getInt32((this.pos+=4)-4,!0)}fixed64(){return P.uDec(this.sfixed32(),this.sfixed32())}sfixed64(){return P.dec(this.sfixed32(),this.sfixed32())}float(){return this.view.getFloat32((this.pos+=4)-4,!0)}double(){return this.view.getFloat64((this.pos+=8)-8,!0)}bytes(){let t=this.uint32(),e=this.pos;return this.pos+=t,this.assertBounds(),this.buf.subarray(e,e+t)}string(){return this.textDecoder.decode(this.bytes())}}function Bu(t,e,l,n){let r;return{typeName:e,extendee:l,get field(){if(!r){let o=typeof n=="function"?n():n;o.name=e.split(".").pop(),o.jsonName="[".concat(e,"]"),r=t.util.newFieldList([o]).list()[0]}return r},runtime:t}}function Oi(t){let e=t.field.localName,l=Object.create(null);return l[e]=Wu(t),[l,()=>l[e]]}function Wu(t){let e=t.field;if(e.repeated)return[];if(e.default!==void 0)return e.default;switch(e.kind){case"enum":return e.T.values[0].no;case"scalar":return Pe(e.T,e.L);case"message":let l=e.T,n=new l;return l.fieldWrapper?l.fieldWrapper.unwrapField(n):n;case"map":throw"map fields are not allowed to be extensions"}}function Ru(t,e){if(!e.repeated&&(e.kind=="enum"||e.kind=="scalar")){for(let l=t.length-1;l>=0;--l)if(t[l].no==e.no)return[t[l]];return[]}return t.filter((l)=>l.no===e.no)}function $u(t,e,l){Qi(e,t);let n=e.runtime.bin.makeReadOptions(l),r=Ru(t.getType().runtime.bin.listUnknownFields(t),e.field),[o,s]=Oi(e);for(let c of r)e.runtime.bin.readField(o,n.readerFactory(c.data),e.field,c.wireType,n);return s()}function Nu(t,e,l,n){Qi(e,t);let r=e.runtime.bin.makeReadOptions(n),o=e.runtime.bin.makeWriteOptions(n);if(Yi(t,e)){let h=t.getType().runtime.bin.listUnknownFields(t).filter((f)=>f.no!=e.field.no);t.getType().runtime.bin.discardUnknownFields(t);for(let f of h)t.getType().runtime.bin.onUnknownField(t,f.no,f.wireType,f.data)}let s=o.writerFactory(),c=e.field;if(!c.opt&&!c.repeated&&(c.kind=="enum"||c.kind=="scalar"))c=Object.assign(Object.assign({},e.field),{opt:!0});e.runtime.bin.writeField(c,l,s,o);let i=r.readerFactory(s.finish());while(i.pos<i.len){let[h,f]=i.tag(),u=i.skip(f,h);t.getType().runtime.bin.onUnknownField(t,h,f,u)}}function Yi(t,e){let l=t.getType();return e.extendee.typeName===l.typeName&&!!l.runtime.bin.listUnknownFields(t).find((n)=>n.no==e.field.no)}function Qi(t,e){v(t.extendee.typeName==e.getType().typeName,"extension ".concat(t.typeName," can only be applied to message ").concat(t.extendee.typeName))}function Si(t,e){let l=t.localName;if(t.repeated)return e[l].length>0;if(t.oneof)return e[t.oneof.localName].case===l;switch(t.kind){case"enum":case"scalar":if(t.opt||t.req)return e[l]!==void 0;if(t.kind=="enum")return e[l]!==t.T.values[0].no;return!Xi(t.T,e[l]);case"message":return e[l]!==void 0;case"map":return Object.keys(e[l]).length>0}}function ps(t,e){let l=t.localName,n=!t.opt&&!t.req;if(t.repeated)e[l]=[];else if(t.oneof)e[t.oneof.localName]={case:void 0};else switch(t.kind){case"map":e[l]={};break;case"enum":e[l]=n?t.T.values[0].no:void 0;break;case"scalar":e[l]=n?Pe(t.T,t.L):void 0;break;case"message":e[l]=void 0;break}}function se(t,e){if(t===null||typeof t!="object")return!1;if(!Object.getOwnPropertyNames(pn.prototype).every((n)=>(n in t)&&typeof t[n]=="function"))return!1;let l=t.getType();if(l===null||typeof l!="function"||!("typeName"in l)||typeof l.typeName!="string")return!1;return e===void 0?!0:l.typeName==e.typeName}function Zi(t,e){if(se(e)||!t.fieldWrapper)return e;return t.fieldWrapper.wrapField(e)}function Mu(t){return t?Object.assign(Object.assign({},Ls),t):Ls}function Hu(t){return t?Object.assign(Object.assign({},Cs),t):Cs}function Eu(){return{makeReadOptions:Mu,makeWriteOptions:Hu,readMessage(t,e,l,n){if(e==null||Array.isArray(e)||typeof e!="object")throw Error("cannot decode message ".concat(t.typeName," from JSON: ").concat(Ut(e)));n=n!==null&&n!==void 0?n:new t;let r=new Map,o=l.typeRegistry;for(let[s,c]of Object.entries(e)){let i=t.fields.findJsonName(s);if(i){if(i.oneof){if(c===null&&i.kind=="scalar")continue;let h=r.get(i.oneof);if(h!==void 0)throw Error("cannot decode message ".concat(t.typeName,' from JSON: multiple keys for oneof "').concat(i.oneof.name,'" present: "').concat(h,'", "').concat(s,'"'));r.set(i.oneof,s)}Is(n,c,i,l,t)}else{let h=!1;if((o===null||o===void 0?void 0:o.findExtension)&&s.startsWith("[")&&s.endsWith("]")){let f=o.findExtension(s.substring(1,s.length-1));if(f&&f.extendee.typeName==t.typeName){h=!0;let[u,d]=Oi(f);Is(u,c,f.field,l,f),Nu(n,f,d(),l)}}if(!h&&!l.ignoreUnknownFields)throw Error("cannot decode message ".concat(t.typeName,' from JSON: key "').concat(s,'" is unknown'))}}return n},writeMessage(t,e){let l=t.getType(),n={},r;try{for(r of l.fields.byNumber()){if(!Si(r,t)){if(r.req)throw"required field not set";if(!e.emitDefaultValues)continue;if(!Xu(r))continue}let s=r.oneof?t[r.oneof.localName].value:t[r.localName],c=Bs(r,s,e);if(c!==void 0)n[e.useProtoFieldName?r.name:r.jsonName]=c}let o=e.typeRegistry;if(o===null||o===void 0?void 0:o.findExtensionFor)for(let s of l.runtime.bin.listUnknownFields(t)){let c=o.findExtensionFor(l.typeName,s.no);if(c&&Yi(t,c)){let i=$u(t,c,e),h=Bs(c.field,i,e);if(h!==void 0)n[c.field.jsonName]=h}}}catch(o){let s=r?"cannot encode field ".concat(l.typeName,".").concat(r.name," to JSON"):"cannot encode message ".concat(l.typeName," to JSON"),c=o instanceof Error?o.message:String(o);throw Error(s+(c.length>0?": ".concat(c):""))}return n},readScalar(t,e,l){return xl(t,e,l!==null&&l!==void 0?l:ye.BIGINT,!0)},writeScalar(t,e,l){if(e===void 0)return;if(l||Xi(t,e))return ql(t,e);return},debug:Ut}}function Ut(t){if(t===null)return"null";switch(typeof t){case"object":return Array.isArray(t)?"array":"object";case"string":return t.length>100?"string":'"'.concat(t.split('"').join("\\\""),'"');default:return String(t)}}function Is(t,e,l,n,r){let o=l.localName;if(l.repeated){if(v(l.kind!="map"),e===null)return;if(!Array.isArray(e))throw Error("cannot decode field ".concat(r.typeName,".").concat(l.name," from JSON: ").concat(Ut(e)));let s=t[o];for(let c of e){if(c===null)throw Error("cannot decode field ".concat(r.typeName,".").concat(l.name," from JSON: ").concat(Ut(c)));switch(l.kind){case"message":s.push(l.T.fromJson(c,n));break;case"enum":let i=nr(l.T,c,n.ignoreUnknownFields,!0);if(i!==jl)s.push(i);break;case"scalar":try{s.push(xl(l.T,c,l.L,!0))}catch(h){let f="cannot decode field ".concat(r.typeName,".").concat(l.name," from JSON: ").concat(Ut(c));if(h instanceof Error&&h.message.length>0)f+=": ".concat(h.message);throw Error(f)}break}}}else if(l.kind=="map"){if(e===null)return;if(typeof e!="object"||Array.isArray(e))throw Error("cannot decode field ".concat(r.typeName,".").concat(l.name," from JSON: ").concat(Ut(e)));let s=t[o];for(let[c,i]of Object.entries(e)){if(i===null)throw Error("cannot decode field ".concat(r.typeName,".").concat(l.name," from JSON: map value null"));let h;try{h=Vu(l.K,c)}catch(f){let u="cannot decode map key for field ".concat(r.typeName,".").concat(l.name," from JSON: ").concat(Ut(e));if(f instanceof Error&&f.message.length>0)u+=": ".concat(f.message);throw Error(u)}switch(l.V.kind){case"message":s[h]=l.V.T.fromJson(i,n);break;case"enum":let f=nr(l.V.T,i,n.ignoreUnknownFields,!0);if(f!==jl)s[h]=f;break;case"scalar":try{s[h]=xl(l.V.T,i,ye.BIGINT,!0)}catch(u){let d="cannot decode map value for field ".concat(r.typeName,".").concat(l.name," from JSON: ").concat(Ut(e));if(u instanceof Error&&u.message.length>0)d+=": ".concat(u.message);throw Error(d)}break}}}else{if(l.oneof)t=t[l.oneof.localName]={case:o},o="value";switch(l.kind){case"message":let s=l.T;if(e===null&&s.typeName!="google.protobuf.Value")return;let c=t[o];if(se(c))c.fromJson(e,n);else if(t[o]=c=s.fromJson(e,n),s.fieldWrapper&&!l.oneof)t[o]=s.fieldWrapper.unwrapField(c);break;case"enum":let i=nr(l.T,e,n.ignoreUnknownFields,!1);switch(i){case ln:ps(l,t);break;case jl:break;default:t[o]=i;break}break;case"scalar":try{let h=xl(l.T,e,l.L,!1);switch(h){case ln:ps(l,t);break;default:t[o]=h;break}}catch(h){let f="cannot decode field ".concat(r.typeName,".").concat(l.name," from JSON: ").concat(Ut(e));if(h instanceof Error&&h.message.length>0)f+=": ".concat(h.message);throw Error(f)}break}}}function Vu(t,e){if(t===C.BOOL)switch(e){case"true":e=!0;break;case"false":e=!1;break}return xl(t,e,ye.BIGINT,!0).toString()}function xl(t,e,l,n){if(e===null){if(n)return Pe(t,l);return ln}switch(t){case C.DOUBLE:case C.FLOAT:if(e==="NaN")return Number.NaN;if(e==="Infinity")return Number.POSITIVE_INFINITY;if(e==="-Infinity")return Number.NEGATIVE_INFINITY;if(e==="")break;if(typeof e=="string"&&e.trim().length!==e.length)break;if(typeof e!="string"&&typeof e!="number")break;let r=Number(e);if(Number.isNaN(r))break;if(!Number.isFinite(r))break;if(t==C.FLOAT)Ri(r);return r;case C.INT32:case C.FIXED32:case C.SFIXED32:case C.SINT32:case C.UINT32:let o;if(typeof e=="number")o=e;else if(typeof e=="string"&&e.length>0){if(e.trim().length===e.length)o=Number(e)}if(o===void 0)break;if(t==C.UINT32||t==C.FIXED32)Cr(o);else Zl(o);return o;case C.INT64:case C.SFIXED64:case C.SINT64:if(typeof e!="number"&&typeof e!="string")break;let s=P.parse(e);return l?s.toString():s;case C.FIXED64:case C.UINT64:if(typeof e!="number"&&typeof e!="string")break;let c=P.uParse(e);return l?c.toString():c;case C.BOOL:if(typeof e!=="boolean")break;return e;case C.STRING:if(typeof e!=="string")break;try{encodeURIComponent(e)}catch(i){throw Error("invalid UTF8")}return e;case C.BYTES:if(e==="")return new Uint8Array(0);if(typeof e!=="string")break;return Di.dec(e)}throw Error()}function nr(t,e,l,n){if(e===null){if(t.typeName=="google.protobuf.NullValue")return 0;return n?t.values[0].no:ln}switch(typeof e){case"number":if(Number.isInteger(e))return e;break;case"string":let r=t.findName(e);if(r!==void 0)return r.no;if(l)return jl;break}throw Error("cannot decode enum ".concat(t.typeName," from JSON: ").concat(Ut(e)))}function Xu(t){if(t.repeated||t.kind=="map")return!0;if(t.oneof)return!1;if(t.kind=="message")return!1;if(t.opt||t.req)return!1;return!0}function Bs(t,e,l){if(t.kind=="map"){v(typeof e=="object"&&e!=null);let n={},r=Object.entries(e);switch(t.V.kind){case"scalar":for(let[s,c]of r)n[s.toString()]=ql(t.V.T,c);break;case"message":for(let[s,c]of r)n[s.toString()]=c.toJson(l);break;case"enum":let o=t.V.T;for(let[s,c]of r)n[s.toString()]=rr(o,c,l.enumAsInteger);break}return l.emitDefaultValues||r.length>0?n:void 0}if(t.repeated){v(Array.isArray(e));let n=[];switch(t.kind){case"scalar":for(let r=0;r<e.length;r++)n.push(ql(t.T,e[r]));break;case"enum":for(let r=0;r<e.length;r++)n.push(rr(t.T,e[r],l.enumAsInteger));break;case"message":for(let r=0;r<e.length;r++)n.push(e[r].toJson(l));break}return l.emitDefaultValues||n.length>0?n:void 0}switch(t.kind){case"scalar":return ql(t.T,e);case"enum":return rr(t.T,e,l.enumAsInteger);case"message":return Zi(t.T,e).toJson(l)}}function rr(t,e,l){var n;if(v(typeof e=="number"),t.typeName=="google.protobuf.NullValue")return null;if(l)return e;let r=t.findNumber(e);return(n=r===null||r===void 0?void 0:r.name)!==null&&n!==void 0?n:e}function ql(t,e){switch(t){case C.INT32:case C.SFIXED32:case C.SINT32:case C.FIXED32:case C.UINT32:return v(typeof e=="number"),e;case C.FLOAT:case C.DOUBLE:if(v(typeof e=="number"),Number.isNaN(e))return"NaN";if(e===Number.POSITIVE_INFINITY)return"Infinity";if(e===Number.NEGATIVE_INFINITY)return"-Infinity";return e;case C.STRING:return v(typeof e=="string"),e;case C.BOOL:return v(typeof e=="boolean"),e;case C.UINT64:case C.FIXED64:case C.INT64:case C.SFIXED64:case C.SINT64:return v(typeof e=="bigint"||typeof e=="string"||typeof e=="number"),e.toString();case C.BYTES:return v(e instanceof Uint8Array),Di.enc(e)}}function Gu(t){return t?Object.assign(Object.assign({},Ws),t):Ws}function zu(t){return t?Object.assign(Object.assign({},Rs),t):Rs}function Ou(){return{makeReadOptions:Gu,makeWriteOptions:zu,listUnknownFields(t){var e;return(e=t[Se])!==null&&e!==void 0?e:[]},discardUnknownFields(t){delete t[Se]},writeUnknownFields(t,e){let n=t[Se];if(n)for(let r of n)e.tag(r.no,r.wireType).raw(r.data)},onUnknownField(t,e,l,n){let r=t;if(!Array.isArray(r[Se]))r[Se]=[];r[Se].push({no:e,wireType:l,data:n})},readMessage(t,e,l,n,r){let o=t.getType(),s=r?e.len:e.pos+l,c,i;while(e.pos<s){if([c,i]=e.tag(),r===!0&&i==lt.EndGroup)break;let h=o.fields.find(c);if(!h){let f=e.skip(i,c);if(n.readUnknownFields)this.onUnknownField(t,c,i,f);continue}$s(t,e,h,i,n)}if(r&&(i!=lt.EndGroup||c!==l))throw Error("invalid end group tag")},readField:$s,writeMessage(t,e,l){let n=t.getType();for(let r of n.fields.byNumber()){if(!Si(r,t)){if(r.req)throw Error("cannot encode field ".concat(n.typeName,".").concat(r.name," to binary: required field not set"));continue}let o=r.oneof?t[r.oneof.localName].value:t[r.localName];Ns(r,o,e,l)}if(l.writeUnknownFields)this.writeUnknownFields(t,e);return e},writeField(t,e,l,n){if(e===void 0)return;Ns(t,e,l,n)}}}function $s(t,e,l,n,r){let{repeated:o,localName:s}=l;if(l.oneof){if(t=t[l.oneof.localName],t.case!=s)delete t.value;t.case=s,s="value"}switch(l.kind){case"scalar":case"enum":let c=l.kind=="enum"?C.INT32:l.T,i=nn;if(l.kind=="scalar"&&l.L>0)i=Yu;if(o){let d=t[s];if(n==lt.LengthDelimited&&c!=C.STRING&&c!=C.BYTES){let g=e.uint32()+e.pos;while(e.pos<g)d.push(i(e,c))}else d.push(i(e,c))}else t[s]=i(e,c);break;case"message":let h=l.T;if(o)t[s].push(Tl(e,new h,r,l));else if(se(t[s]))Tl(e,t[s],r,l);else if(t[s]=Tl(e,new h,r,l),h.fieldWrapper&&!l.oneof&&!l.repeated)t[s]=h.fieldWrapper.unwrapField(t[s]);break;case"map":let[f,u]=Du(l,e,r);t[s][f]=u;break}}function Tl(t,e,l,n){let r=e.getType().runtime.bin,o=n===null||n===void 0?void 0:n.delimited;return r.readMessage(e,t,o?n.no:t.uint32(),l,o),e}function Du(t,e,l){let n=e.uint32(),r=e.pos+n,o,s;while(e.pos<r){let[c]=e.tag();switch(c){case 1:o=nn(e,t.K);break;case 2:switch(t.V.kind){case"scalar":s=nn(e,t.V.T);break;case"enum":s=e.int32();break;case"message":s=Tl(e,new t.V.T,l,void 0);break}break}}if(o===void 0)o=Pe(t.K,ye.BIGINT);if(typeof o!="string"&&typeof o!="number")o=o.toString();if(s===void 0)switch(t.V.kind){case"scalar":s=Pe(t.V.T,ye.BIGINT);break;case"enum":s=t.V.T.values[0].no;break;case"message":s=new t.V.T;break}return[o,s]}function Yu(t,e){let l=nn(t,e);return typeof l=="bigint"?l.toString():l}function nn(t,e){switch(e){case C.STRING:return t.string();case C.BOOL:return t.bool();case C.DOUBLE:return t.double();case C.FLOAT:return t.float();case C.INT32:return t.int32();case C.INT64:return t.int64();case C.UINT64:return t.uint64();case C.FIXED64:return t.fixed64();case C.BYTES:return t.bytes();case C.FIXED32:return t.fixed32();case C.SFIXED32:return t.sfixed32();case C.SFIXED64:return t.sfixed64();case C.SINT64:return t.sint64();case C.UINT32:return t.uint32();case C.SINT32:return t.sint32()}}function Ns(t,e,l,n){v(e!==void 0);let r=t.repeated;switch(t.kind){case"scalar":case"enum":let o=t.kind=="enum"?C.INT32:t.T;if(r)if(v(Array.isArray(e)),t.packed)Su(l,o,t.no,e);else for(let s of e)gl(l,o,t.no,s);else gl(l,o,t.no,e);break;case"message":if(r){v(Array.isArray(e));for(let s of e)Ms(l,n,t,s)}else Ms(l,n,t,e);break;case"map":v(typeof e=="object"&&e!=null);for(let[s,c]of Object.entries(e))Qu(l,n,t,s,c);break}}function Qu(t,e,l,n,r){t.tag(l.no,lt.LengthDelimited),t.fork();let o=n;switch(l.K){case C.INT32:case C.FIXED32:case C.UINT32:case C.SFIXED32:case C.SINT32:o=Number.parseInt(n);break;case C.BOOL:v(n=="true"||n=="false"),o=n=="true";break}switch(gl(t,l.K,1,o),l.V.kind){case"scalar":gl(t,l.V.T,2,r);break;case"enum":gl(t,C.INT32,2,r);break;case"message":v(r!==void 0),t.tag(2,lt.LengthDelimited).bytes(r.toBinary(e));break}t.join()}function Ms(t,e,l,n){let r=Zi(l.T,n);if(l.delimited)t.tag(l.no,lt.StartGroup).raw(r.toBinary(e)).tag(l.no,lt.EndGroup);else t.tag(l.no,lt.LengthDelimited).bytes(r.toBinary(e))}function gl(t,e,l,n){v(n!==void 0);let[r,o]=Ki(e);t.tag(l,r)[o](n)}function Su(t,e,l,n){if(!n.length)return;t.tag(l,lt.LengthDelimited).fork();let[,r]=Ki(e);for(let o=0;o<n.length;o++)t[r](n[o]);t.join()}function Ki(t){let e=lt.Varint;switch(t){case C.BYTES:case C.STRING:e=lt.LengthDelimited;break;case C.DOUBLE:case C.FIXED64:case C.SFIXED64:e=lt.Bit64;break;case C.FIXED32:case C.SFIXED32:case C.FLOAT:e=lt.Bit32;break}let l=C[t].toLowerCase();return[e,l]}function Zu(){return{setEnumType:Ni,initPartial(t,e){if(t===void 0)return;let l=e.getType();for(let n of l.fields.byMember()){let r=n.localName,o=e,s=t;if(s[r]==null)continue;switch(n.kind){case"oneof":let c=s[r].case;if(c===void 0)continue;let i=n.findField(c),h=s[r].value;if(i&&i.kind=="message"&&!se(h,i.T))h=new i.T(h);else if(i&&i.kind==="scalar"&&i.T===C.BYTES)h=il(h);o[r]={case:c,value:h};break;case"scalar":case"enum":let f=s[r];if(n.T===C.BYTES)f=n.repeated?f.map(il):il(f);o[r]=f;break;case"map":switch(n.V.kind){case"scalar":case"enum":if(n.V.T===C.BYTES)for(let[x,g]of Object.entries(s[r]))o[r][x]=il(g);else Object.assign(o[r],s[r]);break;case"message":let d=n.V.T;for(let x of Object.keys(s[r])){let g=s[r][x];if(!d.fieldWrapper)g=new d(g);o[r][x]=g}break}break;case"message":let u=n.T;if(n.repeated)o[r]=s[r].map((d)=>se(d,u)?d:new u(d));else{let d=s[r];if(u.fieldWrapper)if(u.typeName==="google.protobuf.BytesValue")o[r]=il(d);else o[r]=d;else o[r]=se(d,u)?d:new u(d)}break}}},equals(t,e,l){if(e===l)return!0;if(!e||!l)return!1;return t.fields.byMember().every((n)=>{let r=e[n.localName],o=l[n.localName];if(n.repeated){if(r.length!==o.length)return!1;switch(n.kind){case"message":return r.every((s,c)=>n.T.equals(s,o[c]));case"scalar":return r.every((s,c)=>de(n.T,s,o[c]));case"enum":return r.every((s,c)=>de(C.INT32,s,o[c]))}throw Error("repeated cannot contain ".concat(n.kind))}switch(n.kind){case"message":let s=r,c=o;if(n.T.fieldWrapper){if(s!==void 0&&!se(s))s=n.T.fieldWrapper.wrapField(s);if(c!==void 0&&!se(c))c=n.T.fieldWrapper.wrapField(c)}return n.T.equals(s,c);case"enum":return de(C.INT32,r,o);case"scalar":return de(n.T,r,o);case"oneof":if(r.case!==o.case)return!1;let i=n.findField(r.case);if(i===void 0)return!0;switch(i.kind){case"message":return i.T.equals(r.value,o.value);case"enum":return de(C.INT32,r.value,o.value);case"scalar":return de(i.T,r.value,o.value)}throw Error("oneof cannot contain ".concat(i.kind));case"map":let h=Object.keys(r).concat(Object.keys(o));switch(n.V.kind){case"message":let f=n.V.T;return h.every((d)=>f.equals(r[d],o[d]));case"enum":return h.every((d)=>de(C.INT32,r[d],o[d]));case"scalar":let u=n.V.T;return h.every((d)=>de(u,r[d],o[d]))}break}})},clone(t){let e=t.getType(),l=new e,n=l;for(let r of e.fields.byMember()){let o=t[r.localName],s;if(r.repeated)s=o.map(Yl);else if(r.kind=="map"){s=n[r.localName];for(let[c,i]of Object.entries(o))s[c]=Yl(i)}else if(r.kind=="oneof")s=r.findField(o.case)?{case:o.case,value:Yl(o.value)}:{case:void 0};else s=Yl(o);n[r.localName]=s}for(let r of e.runtime.bin.listUnknownFields(t))e.runtime.bin.onUnknownField(n,r.no,r.wireType,r.data);return l}}}function Yl(t){if(t===void 0)return t;if(se(t))return t.clone();if(t instanceof Uint8Array){let e=new Uint8Array(t.byteLength);return e.set(t),e}return t}function il(t){return t instanceof Uint8Array?t:new Uint8Array(t)}function Ku(t,e,l){return{syntax:t,json:Eu(),bin:Ou(),util:Object.assign(Object.assign({},Zu()),{newFieldList:e,initFields:l}),makeMessageType(n,r,o){return yu(this,n,r,o)},makeEnum:mu,makeEnumType:Mi,getEnumType:wu,makeExtension(n,r,o){return Bu(this,n,r,o)}}}class ji{constructor(t,e){this._fields=t,this._normalizer=e}findJsonName(t){if(!this.jsonNames){let e={};for(let l of this.list())e[l.jsonName]=e[l.name]=l;this.jsonNames=e}return this.jsonNames[t]}find(t){if(!this.numbers){let e={};for(let l of this.list())e[l.no]=l;this.numbers=e}return this.numbers[t]}list(){if(!this.all)this.all=this._normalizer(this._fields);return this.all}byNumber(){if(!this.numbersAsc)this.numbersAsc=this.list().concat().sort((t,e)=>t.no-e.no);return this.numbersAsc}byMember(){if(!this.members){this.members=[];let t=this.members,e;for(let l of this.list())if(l.oneof){if(l.oneof!==e)e=l.oneof,t.push(e)}else t.push(l)}return this.members}}function qi(t,e){let l=Ti(t);if(e)return l;return Pu(ku(l))}function ju(t){return qi(t,!1)}function Ti(t){let e=!1,l=[];for(let n=0;n<t.length;n++){let r=t.charAt(n);switch(r){case"_":e=!0;break;case"0":case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":l.push(r),e=!1;break;default:if(e)e=!1,r=r.toUpperCase();l.push(r);break}}return l.join("")}class ki{constructor(t){this.kind="oneof",this.repeated=!1,this.packed=!1,this.opt=!1,this.req=!1,this.default=void 0,this.fields=[],this.name=t,this.localName=ju(t)}addField(t){v(t.oneof===this,"field ".concat(t.name," not one of ").concat(this.name)),this.fields.push(t)}findField(t){if(!this._lookup){this._lookup=Object.create(null);for(let e=0;e<this.fields.length;e++)this._lookup[this.fields[e].localName]=this.fields[e]}return this._lookup[t]}}function Uu(t,e){var l,n,r,o,s,c;let i=[],h;for(let f of typeof t=="function"?t():t){let u=f;if(u.localName=qi(f.name,f.oneof!==void 0),u.jsonName=(l=f.jsonName)!==null&&l!==void 0?l:qu(f.name),u.repeated=(n=f.repeated)!==null&&n!==void 0?n:!1,f.kind=="scalar")u.L=(r=f.L)!==null&&r!==void 0?r:ye.BIGINT;if(u.delimited=(o=f.delimited)!==null&&o!==void 0?o:!1,u.req=(s=f.req)!==null&&s!==void 0?s:!1,u.opt=(c=f.opt)!==null&&c!==void 0?c:!1,f.packed===void 0)u.packed=f.kind=="enum"||f.kind=="scalar"&&f.T!=C.BYTES&&f.T!=C.STRING;if(f.oneof!==void 0){let d=typeof f.oneof=="string"?f.oneof:f.oneof.name;if(!h||h.name!=d)h=new ki(d);u.oneof=h,h.addField(u)}i.push(u)}return i}function la(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}function ra(){if(Xs)return Fl.exports;return Xs=1,function(t){(function(e,l){if(t.exports)t.exports=l();else e.log=l()})(na,function(){var e=function(){},l="undefined",n=typeof window!==l&&typeof window.navigator!==l&&/Trident\/|MSIE /.test(window.navigator.userAgent),r=["trace","debug","info","warn","error"],o={},s=null;function c(w,p){var y=w[p];if(typeof y.bind==="function")return y.bind(w);else try{return Function.prototype.bind.call(y,w)}catch($){return function(){return Function.prototype.apply.apply(y,[w,arguments])}}}function i(){if(console.log)if(console.log.apply)console.log.apply(console,arguments);else Function.prototype.apply.apply(console.log,[console,arguments]);if(console.trace)console.trace()}function h(w){if(w==="debug")w="log";if(typeof console===l)return!1;else if(w==="trace"&&n)return i;else if(console[w]!==void 0)return c(console,w);else if(console.log!==void 0)return c(console,"log");else return e}function f(){var w=this.getLevel();for(var p=0;p<r.length;p++){var y=r[p];this[y]=p<w?e:this.methodFactory(y,w,this.name)}if(this.log=this.debug,typeof console===l&&w<this.levels.SILENT)return"No console available for logging"}function u(w){return function(){if(typeof console!==l)f.call(this),this[w].apply(this,arguments)}}function d(w,p,y){return h(w)||u.apply(this,arguments)}function x(w,p){var y=this,$,E,A,m="loglevel";if(typeof w==="string")m+=":"+w;else if(typeof w==="symbol")m=void 0;function R(X){var S=(r[X]||"silent").toUpperCase();if(typeof window===l||!m)return;try{window.localStorage[m]=S;return}catch(nt){}try{window.document.cookie=encodeURIComponent(m)+"="+S+";"}catch(nt){}}function M(){var X;if(typeof window===l||!m)return;try{X=window.localStorage[m]}catch(Ye){}if(typeof X===l)try{var S=window.document.cookie,nt=encodeURIComponent(m),Rt=S.indexOf(nt+"=");if(Rt!==-1)X=/^([^;]+)/.exec(S.slice(Rt+nt.length+1))[1]}catch(Ye){}if(y.levels[X]===void 0)X=void 0;return X}function H(){if(typeof window===l||!m)return;try{window.localStorage.removeItem(m)}catch(X){}try{window.document.cookie=encodeURIComponent(m)+"=; expires=Thu, 01 Jan 1970 00:00:00 UTC"}catch(X){}}function z(X){var S=X;if(typeof S==="string"&&y.levels[S.toUpperCase()]!==void 0)S=y.levels[S.toUpperCase()];if(typeof S==="number"&&S>=0&&S<=y.levels.SILENT)return S;else throw TypeError("log.setLevel() called with invalid level: "+X)}y.name=w,y.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},y.methodFactory=p||d,y.getLevel=function(){if(A!=null)return A;else if(E!=null)return E;else return $},y.setLevel=function(X,S){if(A=z(X),S!==!1)R(A);return f.call(y)},y.setDefaultLevel=function(X){if(E=z(X),!M())y.setLevel(X,!1)},y.resetLevel=function(){A=null,H(),f.call(y)},y.enableAll=function(X){y.setLevel(y.levels.TRACE,X)},y.disableAll=function(X){y.setLevel(y.levels.SILENT,X)},y.rebuild=function(){if(s!==y)$=z(s.getLevel());if(f.call(y),s===y)for(var X in o)o[X].rebuild()},$=z(s?s.getLevel():"WARN");var V=M();if(V!=null)A=z(V);f.call(y)}s=new x,s.getLogger=function(p){if(typeof p!=="symbol"&&typeof p!=="string"||p==="")throw TypeError("You must supply a name when creating a logger.");var y=o[p];if(!y)y=o[p]=new x(p,s.methodFactory);return y};var g=typeof window!==l?window.log:void 0;return s.noConflict=function(){if(typeof window!==l&&window.log===s)window.log=g;return s},s.getLoggers=function(){return o},s.default=s,s})}(Fl),Fl.exports}function pt(t){let e=El.getLogger(t);return e.setDefaultLevel(O.getLevel()),e}function oa(t,e){if(e)El.getLogger(e).setLevel(t);else for(let l of $c)l.setLevel(t)}function sa(t,e){(e?[e]:$c).forEach((n)=>{let r=n.methodFactory;n.methodFactory=(o,s,c)=>{let i=r(o,s,c),h=Je[o],f=h>=s&&h<Je.silent;return(u,d)=>{if(d)i(u,d);else i(u);if(f)t(h,u,d)}},n.setLevel(n.getLevel())})}class mo{constructor(t){this._retryDelays=t!==void 0?[...t]:ca}nextRetryDelayInMs(t){if(t.retryCount>=this._retryDelays.length)return null;let e=this._retryDelays[t.retryCount];if(t.retryCount<=1)return e;return e+Math.random()*1000}}function yo(t,e){var l={};for(var n in t)if(Object.prototype.hasOwnProperty.call(t,n)&&e.indexOf(n)<0)l[n]=t[n];if(t!=null&&typeof Object.getOwnPropertySymbols==="function"){for(var r=0,n=Object.getOwnPropertySymbols(t);r<n.length;r++)if(e.indexOf(n[r])<0&&Object.prototype.propertyIsEnumerable.call(t,n[r]))l[n[r]]=t[n[r]]}return l}function a(t,e,l,n){function r(o){return o instanceof l?o:new l(function(s){s(o)})}return new(l||(l=Promise))(function(o,s){function c(f){try{h(n.next(f))}catch(u){s(u)}}function i(f){try{h(n.throw(f))}catch(u){s(u)}}function h(f){f.done?o(f.value):r(f.value).then(c,i)}h((n=n.apply(t,e||[])).next())})}function Gs(t){var e=typeof Symbol==="function"&&Symbol.iterator,l=e&&t[e],n=0;if(l)return l.call(t);if(t&&typeof t.length==="number")return{next:function(){if(t&&n>=t.length)t=void 0;return{value:t&&t[n++],done:!t}}};throw TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function _e(t){return this instanceof _e?(this.v=t,this):new _e(t)}function ha(t,e,l){if(!Symbol.asyncIterator)throw TypeError("Symbol.asyncIterator is not defined.");var n=l.apply(t,e||[]),r,o=[];return r=Object.create((typeof AsyncIterator==="function"?AsyncIterator:Object).prototype),c("next"),c("throw"),c("return",s),r[Symbol.asyncIterator]=function(){return this},r;function s(x){return function(g){return Promise.resolve(g).then(x,u)}}function c(x,g){if(n[x]){if(r[x]=function(w){return new Promise(function(p,y){o.push([x,w,p,y])>1||i(x,w)})},g)r[x]=g(r[x])}}function i(x,g){try{h(n[x](g))}catch(w){d(o[0][3],w)}}function h(x){x.value instanceof _e?Promise.resolve(x.value.v).then(f,u):d(o[0][2],x)}function f(x){i("next",x)}function u(x){i("throw",x)}function d(x,g){if(x(g),o.shift(),o.length)i(o[0][0],o[0][1])}}function fa(t){var e,l;return e={},n("next"),n("throw",function(r){throw r}),n("return"),e[Symbol.iterator]=function(){return this},e;function n(r,o){e[r]=t[r]?function(s){return(l=!l)?{value:_e(t[r](s)),done:!1}:o?o(s):s}:o}}function Zt(t){if(!Symbol.asyncIterator)throw TypeError("Symbol.asyncIterator is not defined.");var e=t[Symbol.asyncIterator],l;return e?e.call(t):(t=typeof Gs==="function"?Gs(t):t[Symbol.iterator](),l={},n("next"),n("throw"),n("return"),l[Symbol.asyncIterator]=function(){return this},l);function n(o){l[o]=t[o]&&function(s){return new Promise(function(c,i){s=t[o](s),r(c,i,s.done,s.value)})}}function r(o,s,c,i){Promise.resolve(i).then(function(h){o({value:h,done:c})},s)}}function ua(){if(zs)return Ql.exports;zs=1;var t=typeof Reflect==="object"?Reflect:null,e=t&&typeof t.apply==="function"?t.apply:function(m,R,M){return Function.prototype.apply.call(m,R,M)},l;if(t&&typeof t.ownKeys==="function")l=t.ownKeys;else if(Object.getOwnPropertySymbols)l=function(m){return Object.getOwnPropertyNames(m).concat(Object.getOwnPropertySymbols(m))};else l=function(m){return Object.getOwnPropertyNames(m)};function n(A){if(console&&console.warn)console.warn(A)}var r=Number.isNaN||function(m){return m!==m};function o(){o.init.call(this)}Ql.exports=o,Ql.exports.once=y,o.EventEmitter=o,o.prototype._events=void 0,o.prototype._eventsCount=0,o.prototype._maxListeners=void 0;var s=10;function c(A){if(typeof A!=="function")throw TypeError('The "listener" argument must be of type Function. Received type '+typeof A)}Object.defineProperty(o,"defaultMaxListeners",{enumerable:!0,get:function(){return s},set:function(A){if(typeof A!=="number"||A<0||r(A))throw RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+A+".");s=A}}),o.init=function(){if(this._events===void 0||this._events===Object.getPrototypeOf(this)._events)this._events=Object.create(null),this._eventsCount=0;this._maxListeners=this._maxListeners||void 0},o.prototype.setMaxListeners=function(m){if(typeof m!=="number"||m<0||r(m))throw RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+m+".");return this._maxListeners=m,this};function i(A){if(A._maxListeners===void 0)return o.defaultMaxListeners;return A._maxListeners}o.prototype.getMaxListeners=function(){return i(this)},o.prototype.emit=function(m){var R=[];for(var M=1;M<arguments.length;M++)R.push(arguments[M]);var H=m==="error",z=this._events;if(z!==void 0)H=H&&z.error===void 0;else if(!H)return!1;if(H){var V;if(R.length>0)V=R[0];if(V instanceof Error)throw V;var X=Error("Unhandled error."+(V?" ("+V.message+")":""));throw X.context=V,X}var S=z[m];if(S===void 0)return!1;if(typeof S==="function")e(S,this,R);else{var nt=S.length,Rt=g(S,nt);for(var M=0;M<nt;++M)e(Rt[M],this,R)}return!0};function h(A,m,R,M){var H,z,V;if(c(R),z=A._events,z===void 0)z=A._events=Object.create(null),A._eventsCount=0;else{if(z.newListener!==void 0)A.emit("newListener",m,R.listener?R.listener:R),z=A._events;V=z[m]}if(V===void 0)V=z[m]=R,++A._eventsCount;else{if(typeof V==="function")V=z[m]=M?[R,V]:[V,R];else if(M)V.unshift(R);else V.push(R);if(H=i(A),H>0&&V.length>H&&!V.warned){V.warned=!0;var X=Error("Possible EventEmitter memory leak detected. "+V.length+" "+String(m)+" listeners added. Use emitter.setMaxListeners() to increase limit");X.name="MaxListenersExceededWarning",X.emitter=A,X.type=m,X.count=V.length,n(X)}}return A}o.prototype.addListener=function(m,R){return h(this,m,R,!1)},o.prototype.on=o.prototype.addListener,o.prototype.prependListener=function(m,R){return h(this,m,R,!0)};function f(){if(!this.fired){if(this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0)return this.listener.call(this.target);return this.listener.apply(this.target,arguments)}}function u(A,m,R){var M={fired:!1,wrapFn:void 0,target:A,type:m,listener:R},H=f.bind(M);return H.listener=R,M.wrapFn=H,H}o.prototype.once=function(m,R){return c(R),this.on(m,u(this,m,R)),this},o.prototype.prependOnceListener=function(m,R){return c(R),this.prependListener(m,u(this,m,R)),this},o.prototype.removeListener=function(m,R){var M,H,z,V,X;if(c(R),H=this._events,H===void 0)return this;if(M=H[m],M===void 0)return this;if(M===R||M.listener===R){if(--this._eventsCount===0)this._events=Object.create(null);else if(delete H[m],H.removeListener)this.emit("removeListener",m,M.listener||R)}else if(typeof M!=="function"){z=-1;for(V=M.length-1;V>=0;V--)if(M[V]===R||M[V].listener===R){X=M[V].listener,z=V;break}if(z<0)return this;if(z===0)M.shift();else w(M,z);if(M.length===1)H[m]=M[0];if(H.removeListener!==void 0)this.emit("removeListener",m,X||R)}return this},o.prototype.off=o.prototype.removeListener,o.prototype.removeAllListeners=function(m){var R,M,H;if(M=this._events,M===void 0)return this;if(M.removeListener===void 0){if(arguments.length===0)this._events=Object.create(null),this._eventsCount=0;else if(M[m]!==void 0)if(--this._eventsCount===0)this._events=Object.create(null);else delete M[m];return this}if(arguments.length===0){var z=Object.keys(M),V;for(H=0;H<z.length;++H){if(V=z[H],V==="removeListener")continue;this.removeAllListeners(V)}return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if(R=M[m],typeof R==="function")this.removeListener(m,R);else if(R!==void 0)for(H=R.length-1;H>=0;H--)this.removeListener(m,R[H]);return this};function d(A,m,R){var M=A._events;if(M===void 0)return[];var H=M[m];if(H===void 0)return[];if(typeof H==="function")return R?[H.listener||H]:[H];return R?p(H):g(H,H.length)}o.prototype.listeners=function(m){return d(this,m,!0)},o.prototype.rawListeners=function(m){return d(this,m,!1)},o.listenerCount=function(A,m){if(typeof A.listenerCount==="function")return A.listenerCount(m);else return x.call(A,m)},o.prototype.listenerCount=x;function x(A){var m=this._events;if(m!==void 0){var R=m[A];if(typeof R==="function")return 1;else if(R!==void 0)return R.length}return 0}o.prototype.eventNames=function(){return this._eventsCount>0?l(this._events):[]};function g(A,m){var R=Array(m);for(var M=0;M<m;++M)R[M]=A[M];return R}function w(A,m){for(;m+1<A.length;m++)A[m]=A[m+1];A.pop()}function p(A){var m=Array(A.length);for(var R=0;R<m.length;++R)m[R]=A[R].listener||A[R];return m}function y(A,m){return new Promise(function(R,M){function H(V){A.removeListener(m,z),M(V)}function z(){if(typeof A.removeListener==="function")A.removeListener("error",H);R([].slice.call(arguments))}if(E(A,m,z,{once:!0}),m!=="error")$(A,H,{once:!0})})}function $(A,m,R){if(typeof A.on==="function")E(A,"error",m,R)}function E(A,m,R,M){if(typeof A.on==="function")if(M.once)A.once(m,R);else A.on(m,R);else if(typeof A.addEventListener==="function")A.addEventListener(m,function H(z){if(M.once)A.removeEventListener(m,H);R(z)});else throw TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof A)}return Ql.exports}function bl(t,e,l){let n=t.match(e);return n&&n.length>=l&&parseFloat(n[l],10)}function De(t,e,l){if(!t.RTCPeerConnection)return;let n=t.RTCPeerConnection.prototype,r=n.addEventListener;n.addEventListener=function(s,c){if(s!==e)return r.apply(this,arguments);let i=(h)=>{let f=l(h);if(f)if(c.handleEvent)c.handleEvent(f);else c(f)};if(this._eventMap=this._eventMap||{},!this._eventMap[e])this._eventMap[e]=new Map;return this._eventMap[e].set(c,i),r.apply(this,[s,i])};let o=n.removeEventListener;n.removeEventListener=function(s,c){if(s!==e||!this._eventMap||!this._eventMap[e])return o.apply(this,arguments);if(!this._eventMap[e].has(c))return o.apply(this,arguments);let i=this._eventMap[e].get(c);if(this._eventMap[e].delete(c),this._eventMap[e].size===0)delete this._eventMap[e];if(Object.keys(this._eventMap).length===0)delete this._eventMap;return o.apply(this,[s,i])},Object.defineProperty(n,"on"+e,{get(){return this["_on"+e]},set(s){if(this["_on"+e])this.removeEventListener(e,this["_on"+e]),delete this["_on"+e];if(s)this.addEventListener(e,this["_on"+e]=s)},enumerable:!0,configurable:!0})}function da(t){if(typeof t!=="boolean")return Error("Argument type: "+typeof t+". Please use a boolean.");return Nc=t,t?"adapter.js logging disabled":"adapter.js logging enabled"}function aa(t){if(typeof t!=="boolean")return Error("Argument type: "+typeof t+". Please use a boolean.");return Mc=!t,"adapter.js deprecation warnings "+(t?"disabled":"enabled")}function Hc(){if(typeof window==="object"){if(Nc)return;if(typeof console<"u"&&typeof console.log==="function")console.log.apply(console,arguments)}}function Ao(t,e){if(!Mc)return;console.warn(t+" is deprecated, please use "+e+" instead.")}function ba(t){let e={browser:null,version:null};if(typeof t>"u"||!t.navigator||!t.navigator.userAgent)return e.browser="Not a browser.",e;let{navigator:l}=t;if(l.userAgentData&&l.userAgentData.brands){let n=l.userAgentData.brands.find((r)=>{return r.brand==="Chromium"});if(n)return{browser:"chrome",version:parseInt(n.version,10)}}if(l.mozGetUserMedia)e.browser="firefox",e.version=parseInt(bl(l.userAgent,/Firefox\/(\d+)\./,1));else if(l.webkitGetUserMedia||t.isSecureContext===!1&&t.webkitRTCPeerConnection)e.browser="chrome",e.version=parseInt(bl(l.userAgent,/Chrom(e|ium)\/(\d+)\./,2));else if(t.RTCPeerConnection&&l.userAgent.match(/AppleWebKit\/(\d+)\./))e.browser="safari",e.version=parseInt(bl(l.userAgent,/AppleWebKit\/(\d+)\./,1)),e.supportsUnifiedPlan=t.RTCRtpTransceiver&&"currentDirection"in t.RTCRtpTransceiver.prototype,e._safariVersion=bl(l.userAgent,/Version\/(\d+(\.?\d+))/,1);else return e.browser="Not a supported browser.",e;return e}function Os(t){return Object.prototype.toString.call(t)==="[object Object]"}function Ec(t){if(!Os(t))return t;return Object.keys(t).reduce(function(e,l){let n=Os(t[l]),r=n?Ec(t[l]):t[l],o=n&&!Object.keys(r).length;if(r===void 0||o)return e;return Object.assign(e,{[l]:r})},{})}function Hr(t,e,l){if(!e||l.has(e.id))return;l.set(e.id,e),Object.keys(e).forEach((n)=>{if(n.endsWith("Id"))Hr(t,t.get(e[n]),l);else if(n.endsWith("Ids"))e[n].forEach((r)=>{Hr(t,t.get(r),l)})})}function Ds(t,e,l){let n=l?"outbound-rtp":"inbound-rtp",r=new Map;if(e===null)return r;let o=[];return t.forEach((s)=>{if(s.type==="track"&&s.trackIdentifier===e.id)o.push(s)}),o.forEach((s)=>{t.forEach((c)=>{if(c.type===n&&c.trackId===s.id)Hr(t,c,r)})}),r}function Vc(t,e){let l=t&&t.navigator;if(!l.mediaDevices)return;let n=function(c){if(typeof c!=="object"||c.mandatory||c.optional)return c;let i={};if(Object.keys(c).forEach((h)=>{if(h==="require"||h==="advanced"||h==="mediaSource")return;let f=typeof c[h]==="object"?c[h]:{ideal:c[h]};if(f.exact!==void 0&&typeof f.exact==="number")f.min=f.max=f.exact;let u=function(d,x){if(d)return d+x.charAt(0).toUpperCase()+x.slice(1);return x==="deviceId"?"sourceId":x};if(f.ideal!==void 0){i.optional=i.optional||[];let d={};if(typeof f.ideal==="number")d[u("min",h)]=f.ideal,i.optional.push(d),d={},d[u("max",h)]=f.ideal,i.optional.push(d);else d[u("",h)]=f.ideal,i.optional.push(d)}if(f.exact!==void 0&&typeof f.exact!=="number")i.mandatory=i.mandatory||{},i.mandatory[u("",h)]=f.exact;else["min","max"].forEach((d)=>{if(f[d]!==void 0)i.mandatory=i.mandatory||{},i.mandatory[u(d,h)]=f[d]})}),c.advanced)i.optional=(i.optional||[]).concat(c.advanced);return i},r=function(c,i){if(e.version>=61)return i(c);if(c=JSON.parse(JSON.stringify(c)),c&&typeof c.audio==="object"){let h=function(f,u,d){if(u in f&&!(d in f))f[d]=f[u],delete f[u]};c=JSON.parse(JSON.stringify(c)),h(c.audio,"autoGainControl","googAutoGainControl"),h(c.audio,"noiseSuppression","googNoiseSuppression"),c.audio=n(c.audio)}if(c&&typeof c.video==="object"){let h=c.video.facingMode;h=h&&(typeof h==="object"?h:{ideal:h});let f=e.version<66;if(h&&(h.exact==="user"||h.exact==="environment"||h.ideal==="user"||h.ideal==="environment")&&!(l.mediaDevices.getSupportedConstraints&&l.mediaDevices.getSupportedConstraints().facingMode&&!f)){delete c.video.facingMode;let u;if(h.exact==="environment"||h.ideal==="environment")u=["back","rear"];else if(h.exact==="user"||h.ideal==="user")u=["front"];if(u)return l.mediaDevices.enumerateDevices().then((d)=>{d=d.filter((g)=>g.kind==="videoinput");let x=d.find((g)=>u.some((w)=>g.label.toLowerCase().includes(w)));if(!x&&d.length&&u.includes("back"))x=d[d.length-1];if(x)c.video.deviceId=h.exact?{exact:x.deviceId}:{ideal:x.deviceId};return c.video=n(c.video),Ys("chrome: "+JSON.stringify(c)),i(c)})}c.video=n(c.video)}return Ys("chrome: "+JSON.stringify(c)),i(c)},o=function(c){if(e.version>=64)return c;return{name:{PermissionDeniedError:"NotAllowedError",PermissionDismissedError:"NotAllowedError",InvalidStateError:"NotAllowedError",DevicesNotFoundError:"NotFoundError",ConstraintNotSatisfiedError:"OverconstrainedError",TrackStartError:"NotReadableError",MediaDeviceFailedDueToShutdown:"NotAllowedError",MediaDeviceKillSwitchOn:"NotAllowedError",TabCaptureError:"AbortError",ScreenCaptureError:"AbortError",DeviceCaptureError:"AbortError"}[c.name]||c.name,message:c.message,constraint:c.constraint||c.constraintName,toString(){return this.name+(this.message&&": ")+this.message}}},s=function(c,i,h){r(c,(f)=>{l.webkitGetUserMedia(f,i,(u)=>{if(h)h(o(u))})})};if(l.getUserMedia=s.bind(l),l.mediaDevices.getUserMedia){let c=l.mediaDevices.getUserMedia.bind(l.mediaDevices);l.mediaDevices.getUserMedia=function(i){return r(i,(h)=>c(h).then((f)=>{if(h.audio&&!f.getAudioTracks().length||h.video&&!f.getVideoTracks().length)throw f.getTracks().forEach((u)=>{u.stop()}),new DOMException("","NotFoundError");return f},(f)=>Promise.reject(o(f))))}}}function Xc(t){t.MediaStream=t.MediaStream||t.webkitMediaStream}function Gc(t){if(typeof t==="object"&&t.RTCPeerConnection&&!("ontrack"in t.RTCPeerConnection.prototype)){Object.defineProperty(t.RTCPeerConnection.prototype,"ontrack",{get(){return this._ontrack},set(l){if(this._ontrack)this.removeEventListener("track",this._ontrack);this.addEventListener("track",this._ontrack=l)},enumerable:!0,configurable:!0});let e=t.RTCPeerConnection.prototype.setRemoteDescription;t.RTCPeerConnection.prototype.setRemoteDescription=function(){if(!this._ontrackpoly)this._ontrackpoly=(n)=>{n.stream.addEventListener("addtrack",(r)=>{let o;if(t.RTCPeerConnection.prototype.getReceivers)o=this.getReceivers().find((c)=>c.track&&c.track.id===r.track.id);else o={track:r.track};let s=new Event("track");s.track=r.track,s.receiver=o,s.transceiver={receiver:o},s.streams=[n.stream],this.dispatchEvent(s)}),n.stream.getTracks().forEach((r)=>{let o;if(t.RTCPeerConnection.prototype.getReceivers)o=this.getReceivers().find((c)=>c.track&&c.track.id===r.id);else o={track:r};let s=new Event("track");s.track=r,s.receiver=o,s.transceiver={receiver:o},s.streams=[n.stream],this.dispatchEvent(s)})},this.addEventListener("addstream",this._ontrackpoly);return e.apply(this,arguments)}}else De(t,"track",(e)=>{if(!e.transceiver)Object.defineProperty(e,"transceiver",{value:{receiver:e.receiver}});return e})}function zc(t){if(typeof t==="object"&&t.RTCPeerConnection&&!("getSenders"in t.RTCPeerConnection.prototype)&&"createDTMFSender"in t.RTCPeerConnection.prototype){let e=function(r,o){return{track:o,get dtmf(){if(this._dtmf===void 0)if(o.kind==="audio")this._dtmf=r.createDTMFSender(o);else this._dtmf=null;return this._dtmf},_pc:r}};if(!t.RTCPeerConnection.prototype.getSenders){t.RTCPeerConnection.prototype.getSenders=function(){return this._senders=this._senders||[],this._senders.slice()};let r=t.RTCPeerConnection.prototype.addTrack;t.RTCPeerConnection.prototype.addTrack=function(c,i){let h=r.apply(this,arguments);if(!h)h=e(this,c),this._senders.push(h);return h};let o=t.RTCPeerConnection.prototype.removeTrack;t.RTCPeerConnection.prototype.removeTrack=function(c){o.apply(this,arguments);let i=this._senders.indexOf(c);if(i!==-1)this._senders.splice(i,1)}}let l=t.RTCPeerConnection.prototype.addStream;t.RTCPeerConnection.prototype.addStream=function(o){this._senders=this._senders||[],l.apply(this,[o]),o.getTracks().forEach((s)=>{this._senders.push(e(this,s))})};let n=t.RTCPeerConnection.prototype.removeStream;t.RTCPeerConnection.prototype.removeStream=function(o){this._senders=this._senders||[],n.apply(this,[o]),o.getTracks().forEach((s)=>{let c=this._senders.find((i)=>i.track===s);if(c)this._senders.splice(this._senders.indexOf(c),1)})}}else if(typeof t==="object"&&t.RTCPeerConnection&&"getSenders"in t.RTCPeerConnection.prototype&&"createDTMFSender"in t.RTCPeerConnection.prototype&&t.RTCRtpSender&&!("dtmf"in t.RTCRtpSender.prototype)){let e=t.RTCPeerConnection.prototype.getSenders;t.RTCPeerConnection.prototype.getSenders=function(){let n=e.apply(this,[]);return n.forEach((r)=>r._pc=this),n},Object.defineProperty(t.RTCRtpSender.prototype,"dtmf",{get(){if(this._dtmf===void 0)if(this.track.kind==="audio")this._dtmf=this._pc.createDTMFSender(this.track);else this._dtmf=null;return this._dtmf}})}}function Oc(t){if(!(typeof t==="object"&&t.RTCPeerConnection&&t.RTCRtpSender&&t.RTCRtpReceiver))return;if(!("getStats"in t.RTCRtpSender.prototype)){let l=t.RTCPeerConnection.prototype.getSenders;if(l)t.RTCPeerConnection.prototype.getSenders=function(){let o=l.apply(this,[]);return o.forEach((s)=>s._pc=this),o};let n=t.RTCPeerConnection.prototype.addTrack;if(n)t.RTCPeerConnection.prototype.addTrack=function(){let o=n.apply(this,arguments);return o._pc=this,o};t.RTCRtpSender.prototype.getStats=function(){let o=this;return this._pc.getStats().then((s)=>Ds(s,o.track,!0))}}if(!("getStats"in t.RTCRtpReceiver.prototype)){let l=t.RTCPeerConnection.prototype.getReceivers;if(l)t.RTCPeerConnection.prototype.getReceivers=function(){let r=l.apply(this,[]);return r.forEach((o)=>o._pc=this),r};De(t,"track",(n)=>{return n.receiver._pc=n.srcElement,n}),t.RTCRtpReceiver.prototype.getStats=function(){let r=this;return this._pc.getStats().then((o)=>Ds(o,r.track,!1))}}if(!(("getStats"in t.RTCRtpSender.prototype)&&("getStats"in t.RTCRtpReceiver.prototype)))return;let e=t.RTCPeerConnection.prototype.getStats;t.RTCPeerConnection.prototype.getStats=function(){if(arguments.length>0&&arguments[0]instanceof t.MediaStreamTrack){let n=arguments[0],r,o,s;if(this.getSenders().forEach((c)=>{if(c.track===n)if(r)s=!0;else r=c}),this.getReceivers().forEach((c)=>{if(c.track===n)if(o)s=!0;else o=c;return c.track===n}),s||r&&o)return Promise.reject(new DOMException("There are more than one sender or receiver for the track.","InvalidAccessError"));else if(r)return r.getStats();else if(o)return o.getStats();return Promise.reject(new DOMException("There is no sender or receiver for the track.","InvalidAccessError"))}return e.apply(this,arguments)}}function Dc(t){t.RTCPeerConnection.prototype.getLocalStreams=function(){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},Object.keys(this._shimmedLocalStreams).map((s)=>this._shimmedLocalStreams[s][0])};let e=t.RTCPeerConnection.prototype.addTrack;t.RTCPeerConnection.prototype.addTrack=function(s,c){if(!c)return e.apply(this,arguments);this._shimmedLocalStreams=this._shimmedLocalStreams||{};let i=e.apply(this,arguments);if(!this._shimmedLocalStreams[c.id])this._shimmedLocalStreams[c.id]=[c,i];else if(this._shimmedLocalStreams[c.id].indexOf(i)===-1)this._shimmedLocalStreams[c.id].push(i);return i};let l=t.RTCPeerConnection.prototype.addStream;t.RTCPeerConnection.prototype.addStream=function(s){this._shimmedLocalStreams=this._shimmedLocalStreams||{},s.getTracks().forEach((h)=>{if(this.getSenders().find((u)=>u.track===h))throw new DOMException("Track already exists.","InvalidAccessError")});let c=this.getSenders();l.apply(this,arguments);let i=this.getSenders().filter((h)=>c.indexOf(h)===-1);this._shimmedLocalStreams[s.id]=[s].concat(i)};let n=t.RTCPeerConnection.prototype.removeStream;t.RTCPeerConnection.prototype.removeStream=function(s){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},delete this._shimmedLocalStreams[s.id],n.apply(this,arguments)};let r=t.RTCPeerConnection.prototype.removeTrack;t.RTCPeerConnection.prototype.removeTrack=function(s){if(this._shimmedLocalStreams=this._shimmedLocalStreams||{},s)Object.keys(this._shimmedLocalStreams).forEach((c)=>{let i=this._shimmedLocalStreams[c].indexOf(s);if(i!==-1)this._shimmedLocalStreams[c].splice(i,1);if(this._shimmedLocalStreams[c].length===1)delete this._shimmedLocalStreams[c]});return r.apply(this,arguments)}}function Yc(t,e){if(!t.RTCPeerConnection)return;if(t.RTCPeerConnection.prototype.addTrack&&e.version>=65)return Dc(t);let l=t.RTCPeerConnection.prototype.getLocalStreams;t.RTCPeerConnection.prototype.getLocalStreams=function(){let f=l.apply(this);return this._reverseStreams=this._reverseStreams||{},f.map((u)=>this._reverseStreams[u.id])};let n=t.RTCPeerConnection.prototype.addStream;t.RTCPeerConnection.prototype.addStream=function(f){if(this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},f.getTracks().forEach((u)=>{if(this.getSenders().find((x)=>x.track===u))throw new DOMException("Track already exists.","InvalidAccessError")}),!this._reverseStreams[f.id]){let u=new t.MediaStream(f.getTracks());this._streams[f.id]=u,this._reverseStreams[u.id]=f,f=u}n.apply(this,[f])};let r=t.RTCPeerConnection.prototype.removeStream;t.RTCPeerConnection.prototype.removeStream=function(f){this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},r.apply(this,[this._streams[f.id]||f]),delete this._reverseStreams[this._streams[f.id]?this._streams[f.id].id:f.id],delete this._streams[f.id]},t.RTCPeerConnection.prototype.addTrack=function(f,u){if(this.signalingState==="closed")throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");let d=[].slice.call(arguments,1);if(d.length!==1||!d[0].getTracks().find((w)=>w===f))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((w)=>w.track===f))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(f),Promise.resolve().then(()=>{this.dispatchEvent(new Event("negotiationneeded"))});else{let w=new t.MediaStream([f]);this._streams[u.id]=w,this._reverseStreams[w.id]=u,this.addStream(w)}return this.getSenders().find((w)=>w.track===f)};function o(h,f){let u=f.sdp;return Object.keys(h._reverseStreams||[]).forEach((d)=>{let x=h._reverseStreams[d],g=h._streams[x.id];u=u.replace(new RegExp(g.id,"g"),x.id)}),new RTCSessionDescription({type:f.type,sdp:u})}function s(h,f){let u=f.sdp;return Object.keys(h._reverseStreams||[]).forEach((d)=>{let x=h._reverseStreams[d],g=h._streams[x.id];u=u.replace(new RegExp(x.id,"g"),g.id)}),new RTCSessionDescription({type:f.type,sdp:u})}["createOffer","createAnswer"].forEach(function(h){let f=t.RTCPeerConnection.prototype[h],u={[h](){let d=arguments;if(arguments.length&&typeof arguments[0]==="function")return f.apply(this,[(g)=>{let w=o(this,g);d[0].apply(null,[w])},(g)=>{if(d[1])d[1].apply(null,g)},arguments[2]]);return f.apply(this,arguments).then((g)=>o(this,g))}};t.RTCPeerConnection.prototype[h]=u[h]});let c=t.RTCPeerConnection.prototype.setLocalDescription;t.RTCPeerConnection.prototype.setLocalDescription=function(){if(!arguments.length||!arguments[0].type)return c.apply(this,arguments);return arguments[0]=s(this,arguments[0]),c.apply(this,arguments)};let i=Object.getOwnPropertyDescriptor(t.RTCPeerConnection.prototype,"localDescription");Object.defineProperty(t.RTCPeerConnection.prototype,"localDescription",{get(){let h=i.get.apply(this);if(h.type==="")return h;return o(this,h)}}),t.RTCPeerConnection.prototype.removeTrack=function(f){if(this.signalingState==="closed")throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");if(!f._pc)throw new DOMException("Argument 1 of RTCPeerConnection.removeTrack does not implement interface RTCRtpSender.","TypeError");if(f._pc!==this)throw new DOMException("Sender was not created by this connection.","InvalidAccessError");this._streams=this._streams||{};let d;if(Object.keys(this._streams).forEach((x)=>{if(this._streams[x].getTracks().find((w)=>f.track===w))d=this._streams[x]}),d){if(d.getTracks().length===1)this.removeStream(this._reverseStreams[d.id]);else d.removeTrack(f.track);this.dispatchEvent(new Event("negotiationneeded"))}}}function Er(t,e){if(!t.RTCPeerConnection&&t.webkitRTCPeerConnection)t.RTCPeerConnection=t.webkitRTCPeerConnection;if(!t.RTCPeerConnection)return;if(e.version<53)["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach(function(l){let n=t.RTCPeerConnection.prototype[l],r={[l](){return arguments[0]=new(l==="addIceCandidate"?t.RTCIceCandidate:t.RTCSessionDescription)(arguments[0]),n.apply(this,arguments)}};t.RTCPeerConnection.prototype[l]=r[l]})}function Qc(t,e){De(t,"negotiationneeded",(l)=>{let n=l.target;if(e.version<72||n.getConfiguration&&n.getConfiguration().sdpSemantics==="plan-b"){if(n.signalingState!=="stable")return}return l})}function Sc(t,e){let l=t&&t.navigator,n=t&&t.MediaStreamTrack;if(l.getUserMedia=function(r,o,s){Ao("navigator.getUserMedia","navigator.mediaDevices.getUserMedia"),l.mediaDevices.getUserMedia(r).then(o,s)},!(e.version>55&&("autoGainControl"in l.mediaDevices.getSupportedConstraints()))){let r=function(s,c,i){if(c in s&&!(i in s))s[i]=s[c],delete s[c]},o=l.mediaDevices.getUserMedia.bind(l.mediaDevices);if(l.mediaDevices.getUserMedia=function(s){if(typeof s==="object"&&typeof s.audio==="object")s=JSON.parse(JSON.stringify(s)),r(s.audio,"autoGainControl","mozAutoGainControl"),r(s.audio,"noiseSuppression","mozNoiseSuppression");return o(s)},n&&n.prototype.getSettings){let s=n.prototype.getSettings;n.prototype.getSettings=function(){let c=s.apply(this,arguments);return r(c,"mozAutoGainControl","autoGainControl"),r(c,"mozNoiseSuppression","noiseSuppression"),c}}if(n&&n.prototype.applyConstraints){let s=n.prototype.applyConstraints;n.prototype.applyConstraints=function(c){if(this.kind==="audio"&&typeof c==="object")c=JSON.parse(JSON.stringify(c)),r(c,"autoGainControl","mozAutoGainControl"),r(c,"noiseSuppression","mozNoiseSuppression");return s.apply(this,[c])}}}}function xa(t,e){if(t.navigator.mediaDevices&&"getDisplayMedia"in t.navigator.mediaDevices)return;if(!t.navigator.mediaDevices)return;t.navigator.mediaDevices.getDisplayMedia=function(n){if(!(n&&n.video)){let r=new DOMException("getDisplayMedia without video constraints is undefined");return r.name="NotFoundError",r.code=8,Promise.reject(r)}if(n.video===!0)n.video={mediaSource:e};else n.video.mediaSource=e;return t.navigator.mediaDevices.getUserMedia(n)}}function Zc(t){if(typeof t==="object"&&t.RTCTrackEvent&&"receiver"in t.RTCTrackEvent.prototype&&!("transceiver"in t.RTCTrackEvent.prototype))Object.defineProperty(t.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function Vr(t,e){if(typeof t!=="object"||!(t.RTCPeerConnection||t.mozRTCPeerConnection))return;if(!t.RTCPeerConnection&&t.mozRTCPeerConnection)t.RTCPeerConnection=t.mozRTCPeerConnection;if(e.version<53)["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach(function(r){let o=t.RTCPeerConnection.prototype[r],s={[r](){return arguments[0]=new(r==="addIceCandidate"?t.RTCIceCandidate:t.RTCSessionDescription)(arguments[0]),o.apply(this,arguments)}};t.RTCPeerConnection.prototype[r]=s[r]});let l={inboundrtp:"inbound-rtp",outboundrtp:"outbound-rtp",candidatepair:"candidate-pair",localcandidate:"local-candidate",remotecandidate:"remote-candidate"},n=t.RTCPeerConnection.prototype.getStats;t.RTCPeerConnection.prototype.getStats=function(){let[o,s,c]=arguments;return n.apply(this,[o||null]).then((i)=>{if(e.version<53&&!s)try{i.forEach((h)=>{h.type=l[h.type]||h.type})}catch(h){if(h.name!=="TypeError")throw h;i.forEach((f,u)=>{i.set(u,Object.assign({},f,{type:l[f.type]||f.type}))})}return i}).then(s,c)}}function Kc(t){if(!(typeof t==="object"&&t.RTCPeerConnection&&t.RTCRtpSender))return;if(t.RTCRtpSender&&"getStats"in t.RTCRtpSender.prototype)return;let e=t.RTCPeerConnection.prototype.getSenders;if(e)t.RTCPeerConnection.prototype.getSenders=function(){let r=e.apply(this,[]);return r.forEach((o)=>o._pc=this),r};let l=t.RTCPeerConnection.prototype.addTrack;if(l)t.RTCPeerConnection.prototype.addTrack=function(){let r=l.apply(this,arguments);return r._pc=this,r};t.RTCRtpSender.prototype.getStats=function(){return this.track?this._pc.getStats(this.track):Promise.resolve(new Map)}}function jc(t){if(!(typeof t==="object"&&t.RTCPeerConnection&&t.RTCRtpSender))return;if(t.RTCRtpSender&&"getStats"in t.RTCRtpReceiver.prototype)return;let e=t.RTCPeerConnection.prototype.getReceivers;if(e)t.RTCPeerConnection.prototype.getReceivers=function(){let n=e.apply(this,[]);return n.forEach((r)=>r._pc=this),n};De(t,"track",(l)=>{return l.receiver._pc=l.srcElement,l}),t.RTCRtpReceiver.prototype.getStats=function(){return this._pc.getStats(this.track)}}function qc(t){if(!t.RTCPeerConnection||"removeStream"in t.RTCPeerConnection.prototype)return;t.RTCPeerConnection.prototype.removeStream=function(l){Ao("removeStream","removeTrack"),this.getSenders().forEach((n)=>{if(n.track&&l.getTracks().includes(n.track))this.removeTrack(n)})}}function Tc(t){if(t.DataChannel&&!t.RTCDataChannel)t.RTCDataChannel=t.DataChannel}function Fc(t){if(!(typeof t==="object"&&t.RTCPeerConnection))return;let e=t.RTCPeerConnection.prototype.addTransceiver;if(e)t.RTCPeerConnection.prototype.addTransceiver=function(){this.setParametersPromises=[];let n=arguments[1]&&arguments[1].sendEncodings;if(n===void 0)n=[];n=[...n];let r=n.length>0;if(r)n.forEach((s)=>{if("rid"in s){if(!/^[a-z0-9]{0,16}$/i.test(s.rid))throw TypeError("Invalid RID value provided.")}if("scaleResolutionDownBy"in s){if(!(parseFloat(s.scaleResolutionDownBy)>=1))throw RangeError("scale_resolution_down_by must be >= 1.0")}if("maxFramerate"in s){if(!(parseFloat(s.maxFramerate)>=0))throw RangeError("max_framerate must be >= 0.0")}});let o=e.apply(this,arguments);if(r){let{sender:s}=o,c=s.getParameters();if(!("encodings"in c)||c.encodings.length===1&&Object.keys(c.encodings[0]).length===0)c.encodings=n,s.sendEncodings=n,this.setParametersPromises.push(s.setParameters(c).then(()=>{delete s.sendEncodings}).catch(()=>{delete s.sendEncodings}))}return o}}function kc(t){if(!(typeof t==="object"&&t.RTCRtpSender))return;let e=t.RTCRtpSender.prototype.getParameters;if(e)t.RTCRtpSender.prototype.getParameters=function(){let n=e.apply(this,arguments);if(!("encodings"in n))n.encodings=[].concat(this.sendEncodings||[{}]);return n}}function Pc(t){if(!(typeof t==="object"&&t.RTCPeerConnection))return;let e=t.RTCPeerConnection.prototype.createOffer;t.RTCPeerConnection.prototype.createOffer=function(){if(this.setParametersPromises&&this.setParametersPromises.length)return Promise.all(this.setParametersPromises).then(()=>{return e.apply(this,arguments)}).finally(()=>{this.setParametersPromises=[]});return e.apply(this,arguments)}}function Uc(t){if(!(typeof t==="object"&&t.RTCPeerConnection))return;let e=t.RTCPeerConnection.prototype.createAnswer;t.RTCPeerConnection.prototype.createAnswer=function(){if(this.setParametersPromises&&this.setParametersPromises.length)return Promise.all(this.setParametersPromises).then(()=>{return e.apply(this,arguments)}).finally(()=>{this.setParametersPromises=[]});return e.apply(this,arguments)}}function Jc(t){if(typeof t!=="object"||!t.RTCPeerConnection)return;if(!("getLocalStreams"in t.RTCPeerConnection.prototype))t.RTCPeerConnection.prototype.getLocalStreams=function(){if(!this._localStreams)this._localStreams=[];return this._localStreams};if(!("addStream"in t.RTCPeerConnection.prototype)){let e=t.RTCPeerConnection.prototype.addTrack;t.RTCPeerConnection.prototype.addStream=function(n){if(!this._localStreams)this._localStreams=[];if(!this._localStreams.includes(n))this._localStreams.push(n);n.getAudioTracks().forEach((r)=>e.call(this,r,n)),n.getVideoTracks().forEach((r)=>e.call(this,r,n))},t.RTCPeerConnection.prototype.addTrack=function(n){for(var r=arguments.length,o=Array(r>1?r-1:0),s=1;s<r;s++)o[s-1]=arguments[s];if(o)o.forEach((c)=>{if(!this._localStreams)this._localStreams=[c];else if(!this._localStreams.includes(c))this._localStreams.push(c)});return e.apply(this,arguments)}}if(!("removeStream"in t.RTCPeerConnection.prototype))t.RTCPeerConnection.prototype.removeStream=function(l){if(!this._localStreams)this._localStreams=[];let n=this._localStreams.indexOf(l);if(n===-1)return;this._localStreams.splice(n,1);let r=l.getTracks();this.getSenders().forEach((o)=>{if(r.includes(o.track))this.removeTrack(o)})}}function _c(t){if(typeof t!=="object"||!t.RTCPeerConnection)return;if(!("getRemoteStreams"in t.RTCPeerConnection.prototype))t.RTCPeerConnection.prototype.getRemoteStreams=function(){return this._remoteStreams?this._remoteStreams:[]};if(!("onaddstream"in t.RTCPeerConnection.prototype)){Object.defineProperty(t.RTCPeerConnection.prototype,"onaddstream",{get(){return this._onaddstream},set(l){if(this._onaddstream)this.removeEventListener("addstream",this._onaddstream),this.removeEventListener("track",this._onaddstreampoly);this.addEventListener("addstream",this._onaddstream=l),this.addEventListener("track",this._onaddstreampoly=(n)=>{n.streams.forEach((r)=>{if(!this._remoteStreams)this._remoteStreams=[];if(this._remoteStreams.includes(r))return;this._remoteStreams.push(r);let o=new Event("addstream");o.stream=r,this.dispatchEvent(o)})})}});let e=t.RTCPeerConnection.prototype.setRemoteDescription;t.RTCPeerConnection.prototype.setRemoteDescription=function(){let n=this;if(!this._onaddstreampoly)this.addEventListener("track",this._onaddstreampoly=function(r){r.streams.forEach((o)=>{if(!n._remoteStreams)n._remoteStreams=[];if(n._remoteStreams.indexOf(o)>=0)return;n._remoteStreams.push(o);let s=new Event("addstream");s.stream=o,n.dispatchEvent(s)})});return e.apply(n,arguments)}}}function vc(t){if(typeof t!=="object"||!t.RTCPeerConnection)return;let e=t.RTCPeerConnection.prototype,l=e.createOffer,n=e.createAnswer,r=e.setLocalDescription,o=e.setRemoteDescription,s=e.addIceCandidate;e.createOffer=function(h,f){let u=arguments.length>=2?arguments[2]:arguments[0],d=l.apply(this,[u]);if(!f)return d;return d.then(h,f),Promise.resolve()},e.createAnswer=function(h,f){let u=arguments.length>=2?arguments[2]:arguments[0],d=n.apply(this,[u]);if(!f)return d;return d.then(h,f),Promise.resolve()};let c=function(i,h,f){let u=r.apply(this,[i]);if(!f)return u;return u.then(h,f),Promise.resolve()};e.setLocalDescription=c,c=function(i,h,f){let u=o.apply(this,[i]);if(!f)return u;return u.then(h,f),Promise.resolve()},e.setRemoteDescription=c,c=function(i,h,f){let u=s.apply(this,[i]);if(!f)return u;return u.then(h,f),Promise.resolve()},e.addIceCandidate=c}function th(t){let e=t&&t.navigator;if(e.mediaDevices&&e.mediaDevices.getUserMedia){let l=e.mediaDevices,n=l.getUserMedia.bind(l);e.mediaDevices.getUserMedia=(r)=>{return n(eh(r))}}if(!e.getUserMedia&&e.mediaDevices&&e.mediaDevices.getUserMedia)e.getUserMedia=function(n,r,o){e.mediaDevices.getUserMedia(n).then(r,o)}.bind(e)}function eh(t){if(t&&t.video!==void 0)return Object.assign({},t,{video:Ec(t.video)});return t}function lh(t){if(!t.RTCPeerConnection)return;let e=t.RTCPeerConnection;if(t.RTCPeerConnection=function(n,r){if(n&&n.iceServers){let o=[];for(let s=0;s<n.iceServers.length;s++){let c=n.iceServers[s];if(c.urls===void 0&&c.url)Ao("RTCIceServer.url","RTCIceServer.urls"),c=JSON.parse(JSON.stringify(c)),c.urls=c.url,delete c.url,o.push(c);else o.push(n.iceServers[s])}n.iceServers=o}return new e(n,r)},t.RTCPeerConnection.prototype=e.prototype,"generateCertificate"in e)Object.defineProperty(t.RTCPeerConnection,"generateCertificate",{get(){return e.generateCertificate}})}function nh(t){if(typeof t==="object"&&t.RTCTrackEvent&&"receiver"in t.RTCTrackEvent.prototype&&!("transceiver"in t.RTCTrackEvent.prototype))Object.defineProperty(t.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function rh(t){let e=t.RTCPeerConnection.prototype.createOffer;t.RTCPeerConnection.prototype.createOffer=function(n){if(n){if(typeof n.offerToReceiveAudio<"u")n.offerToReceiveAudio=!!n.offerToReceiveAudio;let r=this.getTransceivers().find((s)=>s.receiver.track.kind==="audio");if(n.offerToReceiveAudio===!1&&r){if(r.direction==="sendrecv")if(r.setDirection)r.setDirection("sendonly");else r.direction="sendonly";else if(r.direction==="recvonly")if(r.setDirection)r.setDirection("inactive");else r.direction="inactive"}else if(n.offerToReceiveAudio===!0&&!r)this.addTransceiver("audio",{direction:"recvonly"});if(typeof n.offerToReceiveVideo<"u")n.offerToReceiveVideo=!!n.offerToReceiveVideo;let o=this.getTransceivers().find((s)=>s.receiver.track.kind==="video");if(n.offerToReceiveVideo===!1&&o){if(o.direction==="sendrecv")if(o.setDirection)o.setDirection("sendonly");else o.direction="sendonly";else if(o.direction==="recvonly")if(o.setDirection)o.setDirection("inactive");else o.direction="inactive"}else if(n.offerToReceiveVideo===!0&&!o)this.addTransceiver("video",{direction:"recvonly"})}return e.apply(this,arguments)}}function oh(t){if(typeof t!=="object"||t.AudioContext)return;t.AudioContext=t.webkitAudioContext}function ga(){if(Ks)return or.exports;return Ks=1,function(t){let e={};e.generateIdentifier=function(){return Math.random().toString(36).substring(2,12)},e.localCName=e.generateIdentifier(),e.splitLines=function(l){return l.trim().split(`
2
+ `).map((n)=>n.trim())},e.splitSections=function(l){return l.split(`
3
+ m=`).map((r,o)=>(o>0?"m="+r:r).trim()+`\r
4
+ `)},e.getDescription=function(l){let n=e.splitSections(l);return n&&n[0]},e.getMediaSections=function(l){let n=e.splitSections(l);return n.shift(),n},e.matchPrefix=function(l,n){return e.splitLines(l).filter((r)=>r.indexOf(n)===0)},e.parseCandidate=function(l){let n;if(l.indexOf("a=candidate:")===0)n=l.substring(12).split(" ");else n=l.substring(10).split(" ");let r={foundation:n[0],component:{1:"rtp",2:"rtcp"}[n[1]]||n[1],protocol:n[2].toLowerCase(),priority:parseInt(n[3],10),ip:n[4],address:n[4],port:parseInt(n[5],10),type:n[7]};for(let o=8;o<n.length;o+=2)switch(n[o]){case"raddr":r.relatedAddress=n[o+1];break;case"rport":r.relatedPort=parseInt(n[o+1],10);break;case"tcptype":r.tcpType=n[o+1];break;case"ufrag":r.ufrag=n[o+1],r.usernameFragment=n[o+1];break;default:if(r[n[o]]===void 0)r[n[o]]=n[o+1];break}return r},e.writeCandidate=function(l){let n=[];n.push(l.foundation);let r=l.component;if(r==="rtp")n.push(1);else if(r==="rtcp")n.push(2);else n.push(r);n.push(l.protocol.toUpperCase()),n.push(l.priority),n.push(l.address||l.ip),n.push(l.port);let o=l.type;if(n.push("typ"),n.push(o),o!=="host"&&l.relatedAddress&&l.relatedPort)n.push("raddr"),n.push(l.relatedAddress),n.push("rport"),n.push(l.relatedPort);if(l.tcpType&&l.protocol.toLowerCase()==="tcp")n.push("tcptype"),n.push(l.tcpType);if(l.usernameFragment||l.ufrag)n.push("ufrag"),n.push(l.usernameFragment||l.ufrag);return"candidate:"+n.join(" ")},e.parseIceOptions=function(l){return l.substring(14).split(" ")},e.parseRtpMap=function(l){let n=l.substring(9).split(" "),r={payloadType:parseInt(n.shift(),10)};return n=n[0].split("/"),r.name=n[0],r.clockRate=parseInt(n[1],10),r.channels=n.length===3?parseInt(n[2],10):1,r.numChannels=r.channels,r},e.writeRtpMap=function(l){let n=l.payloadType;if(l.preferredPayloadType!==void 0)n=l.preferredPayloadType;let r=l.channels||l.numChannels||1;return"a=rtpmap:"+n+" "+l.name+"/"+l.clockRate+(r!==1?"/"+r:"")+`\r
5
+ `},e.parseExtmap=function(l){let n=l.substring(9).split(" ");return{id:parseInt(n[0],10),direction:n[0].indexOf("/")>0?n[0].split("/")[1]:"sendrecv",uri:n[1],attributes:n.slice(2).join(" ")}},e.writeExtmap=function(l){return"a=extmap:"+(l.id||l.preferredId)+(l.direction&&l.direction!=="sendrecv"?"/"+l.direction:"")+" "+l.uri+(l.attributes?" "+l.attributes:"")+`\r
6
+ `},e.parseFmtp=function(l){let n={},r,o=l.substring(l.indexOf(" ")+1).split(";");for(let s=0;s<o.length;s++)r=o[s].trim().split("="),n[r[0].trim()]=r[1];return n},e.writeFmtp=function(l){let n="",r=l.payloadType;if(l.preferredPayloadType!==void 0)r=l.preferredPayloadType;if(l.parameters&&Object.keys(l.parameters).length){let o=[];Object.keys(l.parameters).forEach((s)=>{if(l.parameters[s]!==void 0)o.push(s+"="+l.parameters[s]);else o.push(s)}),n+="a=fmtp:"+r+" "+o.join(";")+`\r
7
+ `}return n},e.parseRtcpFb=function(l){let n=l.substring(l.indexOf(" ")+1).split(" ");return{type:n.shift(),parameter:n.join(" ")}},e.writeRtcpFb=function(l){let n="",r=l.payloadType;if(l.preferredPayloadType!==void 0)r=l.preferredPayloadType;if(l.rtcpFeedback&&l.rtcpFeedback.length)l.rtcpFeedback.forEach((o)=>{n+="a=rtcp-fb:"+r+" "+o.type+(o.parameter&&o.parameter.length?" "+o.parameter:"")+`\r
8
+ `});return n},e.parseSsrcMedia=function(l){let n=l.indexOf(" "),r={ssrc:parseInt(l.substring(7,n),10)},o=l.indexOf(":",n);if(o>-1)r.attribute=l.substring(n+1,o),r.value=l.substring(o+1);else r.attribute=l.substring(n+1);return r},e.parseSsrcGroup=function(l){let n=l.substring(13).split(" ");return{semantics:n.shift(),ssrcs:n.map((r)=>parseInt(r,10))}},e.getMid=function(l){let n=e.matchPrefix(l,"a=mid:")[0];if(n)return n.substring(6)},e.parseFingerprint=function(l){let n=l.substring(14).split(" ");return{algorithm:n[0].toLowerCase(),value:n[1].toUpperCase()}},e.getDtlsParameters=function(l,n){return{role:"auto",fingerprints:e.matchPrefix(l+n,"a=fingerprint:").map(e.parseFingerprint)}},e.writeDtlsParameters=function(l,n){let r="a=setup:"+n+`\r
9
+ `;return l.fingerprints.forEach((o)=>{r+="a=fingerprint:"+o.algorithm+" "+o.value+`\r
10
+ `}),r},e.parseCryptoLine=function(l){let n=l.substring(9).split(" ");return{tag:parseInt(n[0],10),cryptoSuite:n[1],keyParams:n[2],sessionParams:n.slice(3)}},e.writeCryptoLine=function(l){return"a=crypto:"+l.tag+" "+l.cryptoSuite+" "+(typeof l.keyParams==="object"?e.writeCryptoKeyParams(l.keyParams):l.keyParams)+(l.sessionParams?" "+l.sessionParams.join(" "):"")+`\r
11
+ `},e.parseCryptoKeyParams=function(l){if(l.indexOf("inline:")!==0)return null;let n=l.substring(7).split("|");return{keyMethod:"inline",keySalt:n[0],lifeTime:n[1],mkiValue:n[2]?n[2].split(":")[0]:void 0,mkiLength:n[2]?n[2].split(":")[1]:void 0}},e.writeCryptoKeyParams=function(l){return l.keyMethod+":"+l.keySalt+(l.lifeTime?"|"+l.lifeTime:"")+(l.mkiValue&&l.mkiLength?"|"+l.mkiValue+":"+l.mkiLength:"")},e.getCryptoParameters=function(l,n){return e.matchPrefix(l+n,"a=crypto:").map(e.parseCryptoLine)},e.getIceParameters=function(l,n){let r=e.matchPrefix(l+n,"a=ice-ufrag:")[0],o=e.matchPrefix(l+n,"a=ice-pwd:")[0];if(!(r&&o))return null;return{usernameFragment:r.substring(12),password:o.substring(10)}},e.writeIceParameters=function(l){let n="a=ice-ufrag:"+l.usernameFragment+`\r
12
+ a=ice-pwd:`+l.password+`\r
13
+ `;if(l.iceLite)n+=`a=ice-lite\r
14
+ `;return n},e.parseRtpParameters=function(l){let n={codecs:[],headerExtensions:[],fecMechanisms:[],rtcp:[]},o=e.splitLines(l)[0].split(" ");n.profile=o[2];for(let c=3;c<o.length;c++){let i=o[c],h=e.matchPrefix(l,"a=rtpmap:"+i+" ")[0];if(h){let f=e.parseRtpMap(h),u=e.matchPrefix(l,"a=fmtp:"+i+" ");switch(f.parameters=u.length?e.parseFmtp(u[0]):{},f.rtcpFeedback=e.matchPrefix(l,"a=rtcp-fb:"+i+" ").map(e.parseRtcpFb),n.codecs.push(f),f.name.toUpperCase()){case"RED":case"ULPFEC":n.fecMechanisms.push(f.name.toUpperCase());break}}}e.matchPrefix(l,"a=extmap:").forEach((c)=>{n.headerExtensions.push(e.parseExtmap(c))});let s=e.matchPrefix(l,"a=rtcp-fb:* ").map(e.parseRtcpFb);return n.codecs.forEach((c)=>{s.forEach((i)=>{if(!c.rtcpFeedback.find((f)=>{return f.type===i.type&&f.parameter===i.parameter}))c.rtcpFeedback.push(i)})}),n},e.writeRtpDescription=function(l,n){let r="";r+="m="+l+" ",r+=n.codecs.length>0?"9":"0",r+=" "+(n.profile||"UDP/TLS/RTP/SAVPF")+" ",r+=n.codecs.map((s)=>{if(s.preferredPayloadType!==void 0)return s.preferredPayloadType;return s.payloadType}).join(" ")+`\r
15
+ `,r+=`c=IN IP4 0.0.0.0\r
16
+ `,r+=`a=rtcp:9 IN IP4 0.0.0.0\r
17
+ `,n.codecs.forEach((s)=>{r+=e.writeRtpMap(s),r+=e.writeFmtp(s),r+=e.writeRtcpFb(s)});let o=0;if(n.codecs.forEach((s)=>{if(s.maxptime>o)o=s.maxptime}),o>0)r+="a=maxptime:"+o+`\r
18
+ `;if(n.headerExtensions)n.headerExtensions.forEach((s)=>{r+=e.writeExtmap(s)});return r},e.parseRtpEncodingParameters=function(l){let n=[],r=e.parseRtpParameters(l),o=r.fecMechanisms.indexOf("RED")!==-1,s=r.fecMechanisms.indexOf("ULPFEC")!==-1,c=e.matchPrefix(l,"a=ssrc:").map((d)=>e.parseSsrcMedia(d)).filter((d)=>d.attribute==="cname"),i=c.length>0&&c[0].ssrc,h,f=e.matchPrefix(l,"a=ssrc-group:FID").map((d)=>{return d.substring(17).split(" ").map((g)=>parseInt(g,10))});if(f.length>0&&f[0].length>1&&f[0][0]===i)h=f[0][1];if(r.codecs.forEach((d)=>{if(d.name.toUpperCase()==="RTX"&&d.parameters.apt){let x={ssrc:i,codecPayloadType:parseInt(d.parameters.apt,10)};if(i&&h)x.rtx={ssrc:h};if(n.push(x),o)x=JSON.parse(JSON.stringify(x)),x.fec={ssrc:i,mechanism:s?"red+ulpfec":"red"},n.push(x)}}),n.length===0&&i)n.push({ssrc:i});let u=e.matchPrefix(l,"b=");if(u.length){if(u[0].indexOf("b=TIAS:")===0)u=parseInt(u[0].substring(7),10);else if(u[0].indexOf("b=AS:")===0)u=parseInt(u[0].substring(5),10)*1000*0.95-16000;else u=void 0;n.forEach((d)=>{d.maxBitrate=u})}return n},e.parseRtcpParameters=function(l){let n={},r=e.matchPrefix(l,"a=ssrc:").map((c)=>e.parseSsrcMedia(c)).filter((c)=>c.attribute==="cname")[0];if(r)n.cname=r.value,n.ssrc=r.ssrc;let o=e.matchPrefix(l,"a=rtcp-rsize");n.reducedSize=o.length>0,n.compound=o.length===0;let s=e.matchPrefix(l,"a=rtcp-mux");return n.mux=s.length>0,n},e.writeRtcpParameters=function(l){let n="";if(l.reducedSize)n+=`a=rtcp-rsize\r
19
+ `;if(l.mux)n+=`a=rtcp-mux\r
20
+ `;if(l.ssrc!==void 0&&l.cname)n+="a=ssrc:"+l.ssrc+" cname:"+l.cname+`\r
21
+ `;return n},e.parseMsid=function(l){let n,r=e.matchPrefix(l,"a=msid:");if(r.length===1)return n=r[0].substring(7).split(" "),{stream:n[0],track:n[1]};let o=e.matchPrefix(l,"a=ssrc:").map((s)=>e.parseSsrcMedia(s)).filter((s)=>s.attribute==="msid");if(o.length>0)return n=o[0].value.split(" "),{stream:n[0],track:n[1]}},e.parseSctpDescription=function(l){let n=e.parseMLine(l),r=e.matchPrefix(l,"a=max-message-size:"),o;if(r.length>0)o=parseInt(r[0].substring(19),10);if(isNaN(o))o=65536;let s=e.matchPrefix(l,"a=sctp-port:");if(s.length>0)return{port:parseInt(s[0].substring(12),10),protocol:n.fmt,maxMessageSize:o};let c=e.matchPrefix(l,"a=sctpmap:");if(c.length>0){let i=c[0].substring(10).split(" ");return{port:parseInt(i[0],10),protocol:i[1],maxMessageSize:o}}},e.writeSctpDescription=function(l,n){let r=[];if(l.protocol!=="DTLS/SCTP")r=["m="+l.kind+" 9 "+l.protocol+" "+n.protocol+`\r
22
+ `,`c=IN IP4 0.0.0.0\r
23
+ `,"a=sctp-port:"+n.port+`\r
24
+ `];else r=["m="+l.kind+" 9 "+l.protocol+" "+n.port+`\r
25
+ `,`c=IN IP4 0.0.0.0\r
26
+ `,"a=sctpmap:"+n.port+" "+n.protocol+` 65535\r
27
+ `];if(n.maxMessageSize!==void 0)r.push("a=max-message-size:"+n.maxMessageSize+`\r
28
+ `);return r.join("")},e.generateSessionId=function(){return Math.random().toString().substr(2,22)},e.writeSessionBoilerplate=function(l,n,r){let o,s=n!==void 0?n:2;if(l)o=l;else o=e.generateSessionId();return`v=0\r
29
+ o=`+(r||"thisisadapterortc")+" "+o+" "+s+` IN IP4 127.0.0.1\r
30
+ s=-\r
31
+ t=0 0\r
32
+ `},e.getDirection=function(l,n){let r=e.splitLines(l);for(let o=0;o<r.length;o++)switch(r[o]){case"a=sendrecv":case"a=sendonly":case"a=recvonly":case"a=inactive":return r[o].substring(2)}if(n)return e.getDirection(n);return"sendrecv"},e.getKind=function(l){return e.splitLines(l)[0].split(" ")[0].substring(2)},e.isRejected=function(l){return l.split(" ",2)[1]==="0"},e.parseMLine=function(l){let r=e.splitLines(l)[0].substring(2).split(" ");return{kind:r[0],port:parseInt(r[1],10),protocol:r[2],fmt:r.slice(3).join(" ")}},e.parseOLine=function(l){let r=e.matchPrefix(l,"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]}},e.isValidSDP=function(l){if(typeof l!=="string"||l.length===0)return!1;let n=e.splitLines(l);for(let r=0;r<n.length;r++)if(n[r].length<2||n[r].charAt(1)!=="=")return!1;return!0},t.exports=e}(or),or.exports}function kl(t){if(!t.RTCIceCandidate||t.RTCIceCandidate&&"foundation"in t.RTCIceCandidate.prototype)return;let e=t.RTCIceCandidate;t.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);if(n.candidate&&n.candidate.length){let r=new e(n),o=qe.parseCandidate(n.candidate);for(let s in o)if(!(s in r))Object.defineProperty(r,s,{value:o[s]});return r.toJSON=function(){return{candidate:r.candidate,sdpMid:r.sdpMid,sdpMLineIndex:r.sdpMLineIndex,usernameFragment:r.usernameFragment}},r}return new e(n)},t.RTCIceCandidate.prototype=e.prototype,De(t,"icecandidate",(l)=>{if(l.candidate)Object.defineProperty(l,"candidate",{value:new t.RTCIceCandidate(l.candidate),writable:"false"});return l})}function Xr(t){if(!t.RTCIceCandidate||t.RTCIceCandidate&&"relayProtocol"in t.RTCIceCandidate.prototype)return;De(t,"icecandidate",(e)=>{if(e.candidate){let l=qe.parseCandidate(e.candidate.candidate);if(l.type==="relay")e.candidate.relayProtocol={0:"tls",1:"tcp",2:"udp"}[l.priority>>24]}return e})}function Pl(t,e){if(!t.RTCPeerConnection)return;if(!("sctp"in t.RTCPeerConnection.prototype))Object.defineProperty(t.RTCPeerConnection.prototype,"sctp",{get(){return typeof this._sctp>"u"?null:this._sctp}});let l=function(c){if(!c||!c.sdp)return!1;let i=qe.splitSections(c.sdp);return i.shift(),i.some((h)=>{let f=qe.parseMLine(h);return f&&f.kind==="application"&&f.protocol.indexOf("SCTP")!==-1})},n=function(c){let i=c.sdp.match(/mozilla...THIS_IS_SDPARTA-(\d+)/);if(i===null||i.length<2)return-1;let h=parseInt(i[1],10);return h!==h?-1:h},r=function(c){let i=65536;if(e.browser==="firefox")if(e.version<57)if(c===-1)i=16384;else i=2147483637;else if(e.version<60)i=e.version===57?65535:65536;else i=2147483637;return i},o=function(c,i){let h=65536;if(e.browser==="firefox"&&e.version===57)h=65535;let f=qe.matchPrefix(c.sdp,"a=max-message-size:");if(f.length>0)h=parseInt(f[0].substring(19),10);else if(e.browser==="firefox"&&i!==-1)h=2147483637;return h},s=t.RTCPeerConnection.prototype.setRemoteDescription;t.RTCPeerConnection.prototype.setRemoteDescription=function(){if(this._sctp=null,e.browser==="chrome"&&e.version>=76){let{sdpSemantics:i}=this.getConfiguration();if(i==="plan-b")Object.defineProperty(this,"sctp",{get(){return typeof this._sctp>"u"?null:this._sctp},enumerable:!0,configurable:!0})}if(l(arguments[0])){let i=n(arguments[0]),h=r(i),f=o(arguments[0],i),u;if(h===0&&f===0)u=Number.POSITIVE_INFINITY;else if(h===0||f===0)u=Math.max(h,f);else u=Math.min(h,f);let d={};Object.defineProperty(d,"maxMessageSize",{get(){return u}}),this._sctp=d}return s.apply(this,arguments)}}function Ul(t){if(!(t.RTCPeerConnection&&("createDataChannel"in t.RTCPeerConnection.prototype)))return;function e(n,r){let o=n.send;n.send=function(){let c=arguments[0],i=c.length||c.size||c.byteLength;if(n.readyState==="open"&&r.sctp&&i>r.sctp.maxMessageSize)throw TypeError("Message too large (can send a maximum of "+r.sctp.maxMessageSize+" bytes)");return o.apply(n,arguments)}}let l=t.RTCPeerConnection.prototype.createDataChannel;t.RTCPeerConnection.prototype.createDataChannel=function(){let r=l.apply(this,arguments);return e(r,this),r},De(t,"datachannel",(n)=>{return e(n.channel,n.target),n})}function Gr(t){if(!t.RTCPeerConnection||"connectionState"in t.RTCPeerConnection.prototype)return;let e=t.RTCPeerConnection.prototype;Object.defineProperty(e,"connectionState",{get(){return{completed:"connected",checking:"connecting"}[this.iceConnectionState]||this.iceConnectionState},enumerable:!0,configurable:!0}),Object.defineProperty(e,"onconnectionstatechange",{get(){return this._onconnectionstatechange||null},set(l){if(this._onconnectionstatechange)this.removeEventListener("connectionstatechange",this._onconnectionstatechange),delete this._onconnectionstatechange;if(l)this.addEventListener("connectionstatechange",this._onconnectionstatechange=l)},enumerable:!0,configurable:!0}),["setLocalDescription","setRemoteDescription"].forEach((l)=>{let n=e[l];e[l]=function(){if(!this._connectionstatechangepoly)this._connectionstatechangepoly=(r)=>{let o=r.target;if(o._lastConnectionState!==o.connectionState){o._lastConnectionState=o.connectionState;let s=new Event("connectionstatechange",r);o.dispatchEvent(s)}return r},this.addEventListener("iceconnectionstatechange",this._connectionstatechangepoly);return n.apply(this,arguments)}})}function zr(t,e){if(!t.RTCPeerConnection)return;if(e.browser==="chrome"&&e.version>=71)return;if(e.browser==="safari"&&e._safariVersion>=13.1)return;let l=t.RTCPeerConnection.prototype.setRemoteDescription;t.RTCPeerConnection.prototype.setRemoteDescription=function(r){if(r&&r.sdp&&r.sdp.indexOf(`
33
+ a=extmap-allow-mixed`)!==-1){let o=r.sdp.split(`
34
+ `).filter((s)=>{return s.trim()!=="a=extmap-allow-mixed"}).join(`
35
+ `);if(t.RTCSessionDescription&&r instanceof t.RTCSessionDescription)arguments[0]=new t.RTCSessionDescription({type:r.type,sdp:o});else r.sdp=o}return l.apply(this,arguments)}}function Jl(t,e){if(!(t.RTCPeerConnection&&t.RTCPeerConnection.prototype))return;let l=t.RTCPeerConnection.prototype.addIceCandidate;if(!l||l.length===0)return;t.RTCPeerConnection.prototype.addIceCandidate=function(){if(!arguments[0]){if(arguments[1])arguments[1].apply(null);return Promise.resolve()}if((e.browser==="chrome"&&e.version<78||e.browser==="firefox"&&e.version<68||e.browser==="safari")&&arguments[0]&&arguments[0].candidate==="")return Promise.resolve();return l.apply(this,arguments)}}function _l(t,e){if(!(t.RTCPeerConnection&&t.RTCPeerConnection.prototype))return;let l=t.RTCPeerConnection.prototype.setLocalDescription;if(!l||l.length===0)return;t.RTCPeerConnection.prototype.setLocalDescription=function(){let r=arguments[0]||{};if(typeof r!=="object"||r.type&&r.sdp)return l.apply(this,arguments);if(r={type:r.type,sdp:r.sdp},!r.type)switch(this.signalingState){case"stable":case"have-local-offer":case"have-remote-pranswer":r.type="offer";break;default:r.type="answer";break}if(r.sdp||r.type!=="offer"&&r.type!=="answer")return l.apply(this,[r]);return(r.type==="offer"?this.createOffer:this.createAnswer).apply(this).then((s)=>l.apply(this,[s]))}}function ya(){let{window:t}=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{shimChrome:!0,shimFirefox:!0,shimSafari:!0},l=Hc,n=ba(t),r={browserDetails:n,commonShim:ma,extractVersion:bl,disableLog:da,disableWarnings:aa,sdp:wa};switch(n.browser){case"chrome":if(!Qs||!Er||!e.shimChrome)return l("Chrome shim is not included in this adapter release."),r;if(n.version===null)return l("Chrome shim can not determine version, not shimming."),r;l("adapter.js shimming chrome."),r.browserShim=Qs,Jl(t,n),_l(t),Vc(t,n),Xc(t),Er(t,n),Gc(t),Yc(t,n),zc(t),Oc(t),Qc(t,n),kl(t),Xr(t),Gr(t),Pl(t,n),Ul(t),zr(t,n);break;case"firefox":if(!Ss||!Vr||!e.shimFirefox)return l("Firefox shim is not included in this adapter release."),r;l("adapter.js shimming firefox."),r.browserShim=Ss,Jl(t,n),_l(t),Sc(t,n),Vr(t,n),Zc(t),qc(t),Kc(t),jc(t),Tc(t),Fc(t),kc(t),Pc(t),Uc(t),kl(t),Gr(t),Pl(t,n),Ul(t);break;case"safari":if(!Zs||!e.shimSafari)return l("Safari shim is not included in this adapter release."),r;l("adapter.js shimming safari."),r.browserShim=Zs,Jl(t,n),_l(t),lh(t),rh(t),vc(t),Jc(t),_c(t),nh(t),th(t),oh(t),kl(t),Xr(t),Pl(t,n),Ul(t),zr(t,n);break;default:l("Unsupported browser!");break}return r}function At(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;if(typeof t>"u"&&typeof navigator>"u")return;let l=(t!==null&&t!==void 0?t:navigator.userAgent).toLowerCase();if(sr===void 0||e){let n=pa.find((r)=>{let{test:o}=r;return o.test(l)});sr=n===null||n===void 0?void 0:n.describe(l)}return sr}function vl(t,e){let l=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,n=e.match(t);return n&&n.length>=l&&n[l]||""}function ir(t){return t.includes("mac os")?vl(/\(.+?(\d+_\d+(:?_\d+)?)/,t,1).replace(/_/g,"."):void 0}class et{}function Ca(t){if(typeof t>"u")return t;if(typeof structuredClone==="function"){if(typeof t==="object"&&t!==null)return structuredClone(Object.assign({},t));return structuredClone(t)}else return JSON.parse(JSON.stringify(t))}class j{constructor(t,e,l,n,r){if(typeof t==="object")this.width=t.width,this.height=t.height,this.aspectRatio=t.aspectRatio,this.encoding={maxBitrate:t.maxBitrate,maxFramerate:t.maxFramerate,priority:t.priority};else if(e!==void 0&&l!==void 0)this.width=t,this.height=e,this.aspectRatio=t/e,this.encoding={maxBitrate:l,maxFramerate:n,priority:r};else throw TypeError("Unsupported options: provide at least width, height and maxBitrate")}get resolution(){return{width:this.width,height:this.height,frameRate:this.encoding.maxFramerate,aspectRatio:this.aspectRatio}}}function bh(t){return!!Ia.find((e)=>e===t)}function gh(t,e,l){var n,r,o,s;let{optionsWithoutProcessor:c,audioProcessor:i,videoProcessor:h}=yh(t!==null&&t!==void 0?t:{}),f=e===null||e===void 0?void 0:e.processor,u=l===null||l===void 0?void 0:l.processor,d=c!==null&&c!==void 0?c:{};if(d.audio===!0)d.audio={};if(d.video===!0)d.video={};if(d.audio){if(Yr(d.audio,e),(n=(o=d.audio).deviceId)!==null&&n!==void 0||(o.deviceId={ideal:"default"}),i||f)d.audio.processor=i!==null&&i!==void 0?i:f}if(d.video){if(Yr(d.video,l),(r=(s=d.video).deviceId)!==null&&r!==void 0||(s.deviceId={ideal:"default"}),h||u)d.video.processor=h!==null&&h!==void 0?h:u}return d}function Yr(t,e){return Object.keys(e).forEach((l)=>{if(t[l]===void 0)t[l]=e[l]}),t}function Lo(t){var e,l,n,r;let o={};if(t.video)if(typeof t.video==="object"){let s={},c=s,i=t.video;Object.keys(i).forEach((h)=>{switch(h){case"resolution":Yr(c,i.resolution);break;default:c[h]=i[h]}}),o.video=s,(e=(n=o.video).deviceId)!==null&&e!==void 0||(n.deviceId={ideal:"default"})}else o.video=t.video?{deviceId:{ideal:"default"}}:!1;else o.video=!1;if(t.audio)if(typeof t.audio==="object")o.audio=t.audio,(l=(r=o.audio).deviceId)!==null&&l!==void 0||(r.deviceId={ideal:"default"});else o.audio={deviceId:{ideal:"default"}};else o.audio=!1;return o}function wh(t){return a(this,arguments,void 0,function(e){let l=arguments.length>1&&arguments[1]!==void 0?arguments[1]:200;return function*(){let n=Co();if(n){let r=n.createAnalyser();r.fftSize=2048;let o=r.frequencyBinCount,s=new Uint8Array(o);n.createMediaStreamSource(new MediaStream([e.mediaStreamTrack])).connect(r),yield ut(l),r.getByteTimeDomainData(s);let i=s.some((h)=>h!==128&&h!==0);return n.close(),!i}return!1}()})}function Co(){var t;let e=typeof window<"u"&&(window.AudioContext||window.webkitAudioContext);if(e){let l=new e({latencyHint:"interactive"});if(l.state==="suspended"&&typeof window<"u"&&((t=window.document)===null||t===void 0?void 0:t.body)){let n=()=>a(this,void 0,void 0,function*(){var r;try{if(l.state==="suspended")yield l.resume()}catch(o){console.warn("Error trying to auto-resume audio context",o)}finally{(r=window.document.body)===null||r===void 0||r.removeEventListener("click",n)}});l.addEventListener("statechange",()=>{var r;if(l.state==="closed")(r=window.document.body)===null||r===void 0||r.removeEventListener("click",n)}),window.document.body.addEventListener("click",n)}return l}}function Ba(t){if(t==="audioinput")return L.Source.Microphone;else if(t==="videoinput")return L.Source.Camera;else return L.Source.Unknown}function Qr(t){if(t===L.Source.Microphone)return"audioinput";else if(t===L.Source.Camera)return"videoinput";else return}function mh(t){var e,l;let n=(e=t.video)!==null&&e!==void 0?e:!0;if(t.resolution&&t.resolution.width>0&&t.resolution.height>0)if(n=typeof n==="boolean"?{}:n,Ge())n=Object.assign(Object.assign({},n),{width:{max:t.resolution.width},height:{max:t.resolution.height},frameRate:t.resolution.frameRate});else n=Object.assign(Object.assign({},n),{width:{ideal:t.resolution.width},height:{ideal:t.resolution.height},frameRate:t.resolution.frameRate});return{audio:(l=t.audio)!==null&&l!==void 0?l:!1,video:n,controller:t.controller,selfBrowserSurface:t.selfBrowserSurface,surfaceSwitching:t.surfaceSwitching,systemAudio:t.systemAudio,preferCurrentTab:t.preferCurrentTab}}function wl(t){return t.split("/")[1].toLowerCase()}function Wa(t){let e=[];return t.forEach((l)=>{if(l.track!==void 0)e.push(new ao({cid:l.track.mediaStreamID,track:l.trackInfo}))}),e}function Y(t){if("mediaStreamTrack"in t)return{trackID:t.sid,source:t.source,muted:t.isMuted,enabled:t.mediaStreamTrack.enabled,kind:t.kind,streamID:t.mediaStreamID,streamTrackID:t.mediaStreamTrack.id};else return{trackID:t.trackSid,enabled:t.isEnabled,muted:t.isMuted,trackInfo:Object.assign({mimeType:t.mimeType,name:t.trackName,encrypted:t.isEncrypted,kind:t.kind,source:t.source},t.track?Y(t.track):{})}}function Ra(){return typeof RTCRtpReceiver<"u"&&"getSynchronizationSources"in RTCRtpReceiver}function $a(t,e){var l;if(t===void 0)t={};if(e===void 0)e={};let n=[...Object.keys(e),...Object.keys(t)],r={};for(let o of n)if(t[o]!==e[o])r[o]=(l=e[o])!==null&&l!==void 0?l:"";return r}function yh(t){let e=Object.assign({},t),l,n;if(typeof e.audio==="object"&&e.audio.processor)l=e.audio.processor,e.audio=Object.assign(Object.assign({},e.audio),{processor:void 0});if(typeof e.video==="object"&&e.video.processor)n=e.video.processor,e.video=Object.assign(Object.assign({},e.video),{processor:void 0});return{audioProcessor:l,videoProcessor:n,optionsWithoutProcessor:Ca(e)}}function Na(t){switch(t){case rt.CAMERA:return L.Source.Camera;case rt.MICROPHONE:return L.Source.Microphone;case rt.SCREEN_SHARE:return L.Source.ScreenShare;case rt.SCREEN_SHARE_AUDIO:return L.Source.ScreenShareAudio;default:return L.Source.Unknown}}function js(t,e){return t.width*t.height<e.width*e.height}function Ma(t,e){var l;return(l=t.layers)===null||l===void 0?void 0:l.find((n)=>n.quality===e)}function $e(t,e){let l;if(e.srcObject instanceof MediaStream)l=e.srcObject;else l=new MediaStream;let n;if(t.kind==="audio")n=l.getAudioTracks();else n=l.getVideoTracks();if(!n.includes(t))n.forEach((r)=>{l.removeTrack(r)}),l.addTrack(t);if(!Ge()||!(e instanceof HTMLVideoElement))e.autoplay=!0;if(e.muted=l.getAudioTracks().length===0,e instanceof HTMLVideoElement)e.playsInline=!0;if(e.srcObject!==l){if(e.srcObject=l,(Ge()||Xe())&&e instanceof HTMLVideoElement)setTimeout(()=>{e.srcObject=l,e.play().catch(()=>{})},0)}}function Ne(t,e){if(e.srcObject instanceof MediaStream){let l=e.srcObject;if(l.removeTrack(t),l.getTracks().length>0)e.srcObject=l;else e.srcObject=null}}function Va(t){let e=t.split(Ea);if(e.length>1)return[e[0],t.substr(e[0].length+1)];return[t,""]}function ut(t){return new ft((e)=>et.setTimeout(e,t))}function xn(){return"addTransceiver"in RTCPeerConnection.prototype}function Sr(){return"addTrack"in RTCPeerConnection.prototype}function Xa(){return typeof ResizeObserver!==void 0&&typeof IntersectionObserver!==void 0}function Ga(){return xn()}function Ah(){if(!("getCapabilities"in RTCRtpSender))return!1;if(Ge()||Xe())return!1;let t=RTCRtpSender.getCapabilities("video"),e=!1;if(t){for(let l of t.codecs)if(l.mimeType.toLowerCase()==="video/av1"){e=!0;break}}return e}function ph(){if(!("getCapabilities"in RTCRtpSender))return!1;if(Xe())return!1;if(Ge()){let l=At();if((l===null||l===void 0?void 0:l.version)&&kt(l.version,"16")<0)return!1;if((l===null||l===void 0?void 0:l.os)==="iOS"&&(l===null||l===void 0?void 0:l.osVersion)&&kt(l.osVersion,"16")<0)return!1}let t=RTCRtpSender.getCapabilities("video"),e=!1;if(t){for(let l of t.codecs)if(l.mimeType.toLowerCase()==="video/vp9"){e=!0;break}}return e}function Kt(t){return t==="av1"||t==="vp9"}function gn(t){if(!document||Bl())return!1;if(!t)t=document.createElement("audio");return"setSinkId"in t}function za(){return gn()}function Lh(){if(typeof RTCPeerConnection>"u")return!1;return xn()||Sr()}function Xe(){var t;return((t=At())===null||t===void 0?void 0:t.name)==="Firefox"}function Ts(){let t=At();return!!t&&t.name==="Chrome"&&t.os!=="iOS"}function Ge(){var t;return((t=At())===null||t===void 0?void 0:t.name)==="Safari"}function Bl(){let t=At();return(t===null||t===void 0?void 0:t.name)==="Safari"||(t===null||t===void 0?void 0:t.os)==="iOS"}function Ch(){let t=At();return(t===null||t===void 0?void 0:t.name)==="Safari"&&t.version.startsWith("17.")||(t===null||t===void 0?void 0:t.os)==="iOS"&&!!(t===null||t===void 0?void 0:t.osVersion)&&kt(t.osVersion,"17")>=0}function Oa(t){if(!t)t=At();return(t===null||t===void 0?void 0:t.name)==="Safari"&&kt(t.version,"18.3")>0||(t===null||t===void 0?void 0:t.os)==="iOS"&&!!(t===null||t===void 0?void 0:t.osVersion)&&kt(t.osVersion,"18.3")>0}function Ih(){var t,e;if(!Bt())return!1;return(e=(t=navigator.userAgentData)===null||t===void 0?void 0:t.mobile)!==null&&e!==void 0?e:/Tablet|iPad|Mobile|Android|BlackBerry/.test(navigator.userAgent)}function Da(){let t=At(),e="17.2";if(t)if(t.name!=="Safari"&&t.os!=="iOS")return!0;else if(t.os==="iOS"&&t.osVersion&&kt(t.osVersion,"17.2")>=0)return!0;else if(t.name==="Safari"&&kt(t.version,"17.2")>=0)return!0;else return!1}function Bt(){return typeof document<"u"}function Jt(){return navigator.product=="ReactNative"}function tl(t){return t.hostname.endsWith(".livekit.cloud")||t.hostname.endsWith(".livekit.run")}function cr(t){if(!tl(t))return null;return t.hostname.split(".")[0]}function Bh(){if(global&&global.LiveKitReactNativeGlobal)return global.LiveKitReactNativeGlobal;return}function Wh(){if(!Jt())return;let t=Bh();if(t)return t.platform;return}function Fs(){if(Bt())return window.devicePixelRatio;if(Jt()){let t=Bh();if(t)return t.devicePixelRatio}return 1}function kt(t,e){let l=t.split("."),n=e.split("."),r=Math.min(l.length,n.length);for(let o=0;o<r;++o){let s=parseInt(l[o],10),c=parseInt(n[o],10);if(s>c)return 1;if(s<c)return-1;if(o===r-1&&s===c)return 0}if(t===""&&e!=="")return-1;else if(e==="")return 1;return l.length==n.length?0:l.length<n.length?-1:1}function Ya(t){for(let e of t)e.target.handleResize(e)}function Qa(t){for(let e of t)e.target.handleVisibilityChanged(e)}function Sa(){var t;let e=new sc({sdk:ic.JS,protocol:hh,version:ch});if(Jt())e.os=(t=Wh())!==null&&t!==void 0?t:"";return e}function Za(){if(!ur)ur=Zr();return ur.clone()}function Zr(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:16,e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:16,l=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1,r=document.createElement("canvas");r.width=t,r.height=e;let o=r.getContext("2d");if(o===null||o===void 0||o.fillRect(0,0,r.width,r.height),n&&o)o.beginPath(),o.arc(t/2,e/2,50,0,Math.PI*2,!0),o.closePath(),o.fillStyle="grey",o.fill();let s=r.captureStream(),[c]=s.getTracks();if(!c)throw Error("Could not get empty media stream video track");return c.enabled=l,c}function tn(){if(!fl){let t=new AudioContext,e=t.createOscillator(),l=t.createGain();l.gain.setValueAtTime(0,0);let n=t.createMediaStreamDestination();if(e.connect(l),l.connect(n),e.start(),[fl]=n.stream.getAudioTracks(),!fl)throw Error("Could not get empty media stream audio track");fl.enabled=!1}return fl.clone()}class yt{get isResolved(){return this._isResolved}constructor(t,e){this._isResolved=!1,this.onFinally=e,this.promise=new Promise((l,n)=>a(this,void 0,void 0,function*(){if(this.resolve=l,this.reject=n,t)yield t(l,n)})).finally(()=>{var l;this._isResolved=!0,(l=this.onFinally)===null||l===void 0||l.call(this)})}}function Ka(t,e){let l=Object.assign({cloneTrack:!1,fftSize:2048,smoothingTimeConstant:0.8,minDecibels:-100,maxDecibels:-80},e),n=Co();if(!n)throw Error("Audio Context not supported on this browser");let r=l.cloneTrack?t.mediaStreamTrack.clone():t.mediaStreamTrack,o=n.createMediaStreamSource(new MediaStream([r])),s=n.createAnalyser();s.minDecibels=l.minDecibels,s.maxDecibels=l.maxDecibels,s.fftSize=l.fftSize,s.smoothingTimeConstant=l.smoothingTimeConstant,o.connect(s);let c=new Uint8Array(s.frequencyBinCount);return{calculateVolume:()=>{s.getByteFrequencyData(c);let f=0;for(let d of c)f+=Math.pow(d/255,2);return Math.sqrt(f/c.length)},analyser:s,cleanup:()=>a(this,void 0,void 0,function*(){if(yield n.close(),l.cloneTrack)r.stop()})}}function ja(t){return dh.includes(t)}function Rh(t){return ah.includes(t)}function Me(t){if(typeof t==="string"||typeof t==="number")return t;if(Array.isArray(t))return t[0];if(t.exact!==void 0){if(Array.isArray(t.exact))return t.exact[0];return t.exact}if(t.ideal!==void 0){if(Array.isArray(t.ideal))return t.ideal[0];return t.ideal}throw Error("could not unwrap constraint")}function qa(t){if(t.startsWith("http"))return t.replace(/^(http)/,"ws");return t}function Wl(t){if(t.startsWith("ws"))return t.replace(/^(ws)/,"http");return t}function Ta(t,e){return t.segments.map((l)=>{let{id:n,text:r,language:o,startTime:s,endTime:c,final:i}=l;var h;let f=(h=e.get(n))!==null&&h!==void 0?h:Date.now(),u=Date.now();if(i)e.delete(n);else e.set(n,f);return{id:n,text:r,startTime:Number.parseInt(s.toString()),endTime:Number.parseInt(c.toString()),final:i,language:o,firstReceivedTime:f,lastReceivedTime:u}})}function Fa(t){let{id:e,timestamp:l,message:n,editTimestamp:r}=t;return{id:e,timestamp:Number.parseInt(l.toString()),editTimestamp:r?Number.parseInt(r.toString()):void 0,message:n}}function Us(t){switch(t.reason){case q.LeaveRequest:return t.context;case q.Cancelled:return Gt.CLIENT_INITIATED;case q.NotAllowed:return Gt.USER_REJECTED;case q.ServerUnreachable:return Gt.JOIN_FAILURE;default:return Gt.UNKNOWN_REASON}}function en(t){return t!==void 0?Number(t):void 0}function Le(t){return t!==void 0?BigInt(t):void 0}function me(t){return!!t&&!(t instanceof MediaStreamTrack)&&t.isLocal}function Ft(t){return!!t&&t.kind==L.Kind.Audio}function ue(t){return!!t&&t.kind==L.Kind.Video}function ae(t){return me(t)&&ue(t)}function le(t){return me(t)&&Ft(t)}function wn(t){return!!t&&!t.isLocal}function ka(t){return!!t&&!t.isLocal}function dr(t){return wn(t)&&ue(t)}function $h(t){return t.isLocal}function Pa(t){return!t.isLocal}function Ua(t,e){let l=[],n=new TextEncoder().encode(t);while(n.length>e){let r=e;while(r>0){let o=n[r];if(o!==void 0&&(o&192)!==128)break;r--}l.push(n.slice(0,r)),n=n.slice(r)}if(n.length>0)l.push(n);return l}function Ja(t){var e;let l=t.get("Cache-Control");if(l){let n=(e=l.match(/(?:^|[,\s])max-age=(\d+)/))===null||e===void 0?void 0:e[1];if(n)return parseInt(n,10)}return}function Kr(){return typeof CompressionStream<"u"}function _a(t,e){let l=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,n=va(t,e);if(l)return n;else return Io(n,"v1")}function va(t,e){let l=new URL(qa(t));return e.forEach((n,r)=>{l.searchParams.set(r,n)}),Io(l,"rtc")}function tb(t){let e=new URL(Wl(t));return Io(e,"validate")}function Nh(t){return t.endsWith("/")?t:"".concat(t,"/")}function Io(t,e){return t.pathname="".concat(Nh(t.pathname)).concat(e),t}function Js(t){if(typeof t==="string")return Es.fromJson(JSON.parse(t),{ignoreUnknownFields:!0});else if(t instanceof ArrayBuffer)return Es.fromBinary(new Uint8Array(t));throw Error("could not decode websocket message: ".concat(typeof t))}function eb(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"Unknown reason";if(!(t instanceof AbortSignal))return e;let l=t.reason;switch(typeof l){case"string":return l;case"object":return l instanceof Error?l.message:e;default:return"toString"in l?l.toString():e}}function Hh(){return Eh()||mn()}function mn(){return typeof window.RTCRtpScriptTransform<"u"}function Eh(){return typeof window.RTCRtpSender<"u"&&typeof window.RTCRtpSender.prototype.createEncodedStreams<"u"}function ob(t){return"type"in t}function sb(t){return a(this,arguments,void 0,function(e){let l=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{name:Mh},n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"encrypt";return function*(){return crypto.subtle.importKey("raw",e,l,!1,n==="derive"?["deriveBits","deriveKey"]:["encrypt","decrypt"])}()})}function Vh(t){return a(this,void 0,void 0,function*(){let e=new TextEncoder;return yield crypto.subtle.importKey("raw",e.encode(t),{name:"PBKDF2"},!1,["deriveBits","deriveKey"])})}function Xh(t){return a(this,void 0,void 0,function*(){return yield crypto.subtle.importKey("raw",t,"HKDF",!1,["deriveBits","deriveKey"])})}function Gh(t,e){let n=new TextEncoder().encode(e);switch(t){case"HKDF":return{name:"HKDF",salt:n,hash:"SHA-256",info:new ArrayBuffer(128)};case"PBKDF2":return{name:"PBKDF2",salt:n,hash:"SHA-256",iterations:1e5};default:throw Error("algorithm ".concat(t," is currently unsupported"))}}function ib(t,e){return a(this,void 0,void 0,function*(){let l=Gh(t.algorithm.name,e.ratchetSalt),n=yield crypto.subtle.deriveKey(l,t,{name:Mh,length:e.keySize},!1,["encrypt","decrypt"]);return{material:t,encryptionKey:n}})}function cb(){return window.crypto.getRandomValues(new Uint8Array(32))}function hb(t,e){return a(this,void 0,void 0,function*(){let l=Gh(t.algorithm.name,e);return crypto.subtle.deriveBits(l,t,256)})}function fb(t){for(var e=0;e<t.length-3;e++)if(t[e]==0&&t[e+1]==0&&t[e+2]==3)return!0;return!1}function ub(t){let e=[];var l=t.length;for(var n=0;n<t.length;)if(l-n>=3&&!t[n]&&!t[n+1]&&t[n+2]==3)e.push(t[n++]),e.push(t[n++]),n++;else e.push(t[n++]);return new Uint8Array(e)}function ab(t){let e=[];var l=0;for(var n=0;n<t.length;++n){var r=t[n];if(r<=_s&&l>=db)e.push(_s),l=0;if(e.push(r),r==0)++l;else l=0}return new Uint8Array(e)}function zh(t){var e,l,n,r,o;if(((e=t.value)===null||e===void 0?void 0:e.case)!=="sipDtmf"&&((l=t.value)===null||l===void 0?void 0:l.case)!=="metrics"&&((n=t.value)===null||n===void 0?void 0:n.case)!=="speaker"&&((r=t.value)===null||r===void 0?void 0:r.case)!=="transcription"&&((o=t.value)===null||o===void 0?void 0:o.case)!=="encryptedPacket")return new vi({value:t.value});return}class Te{constructor(){this.failedConnectionAttempts=new Map,this.backOffPromises=new Map}static getInstance(){if(!this._instance)this._instance=new Te;return this._instance}addFailedConnectionAttempt(t){var e;let l=new URL(t),n=cr(l);if(!n)return;let r=(e=this.failedConnectionAttempts.get(n))!==null&&e!==void 0?e:0;this.failedConnectionAttempts.set(n,r+1),this.backOffPromises.set(n,ut(Math.min(bb*Math.pow(2,r),xb)))}getBackOffPromise(t){let e=new URL(t),l=e&&cr(e);return l&&this.backOffPromises.get(l)||Promise.resolve()}resetFailedConnectionAttempts(t){let e=new URL(t),l=e&&cr(e);if(l)this.failedConnectionAttempts.set(l,0),this.backOffPromises.set(l,Promise.resolve())}resetAll(){this.backOffPromises.clear(),this.failedConnectionAttempts.clear()}}class ct{constructor(){this._previousDevices=[]}static getInstance(){if(this.instance===void 0)this.instance=new ct;return this.instance}get previousDevices(){return this._previousDevices}getDevices(t){return a(this,arguments,void 0,function(e){var l=this;let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return function*(){var r;if(((r=ct.userMediaPromiseMap)===null||r===void 0?void 0:r.size)>0){O.debug("awaiting getUserMedia promise");try{if(e)yield ct.userMediaPromiseMap.get(e);else yield Promise.all(ct.userMediaPromiseMap.values())}catch(s){O.warn("error waiting for media permissons")}}let o=yield navigator.mediaDevices.enumerateDevices();if(n&&!(Ge()&&l.hasDeviceInUse(e))){if(o.filter((c)=>c.kind===e).length===0||o.some((c)=>{let i=c.label==="",h=e?c.kind===e:!0;return i&&h})){let c={video:e!=="audioinput"&&e!=="audiooutput",audio:e!=="videoinput"&&{deviceId:{ideal:"default"}}},i=yield navigator.mediaDevices.getUserMedia(c);o=yield navigator.mediaDevices.enumerateDevices(),i.getTracks().forEach((h)=>{h.stop()})}}if(l._previousDevices=o,e)o=o.filter((s)=>s.kind===e);return o}()})}normalizeDeviceId(t,e,l){return a(this,void 0,void 0,function*(){if(e!==ar)return e;let n=yield this.getDevices(t),r=n.find((s)=>s.deviceId===ar);if(!r){O.warn("could not reliably determine default device");return}let o=n.find((s)=>s.deviceId!==ar&&s.groupId===(l!==null&&l!==void 0?l:r.groupId));if(!o){O.warn("could not reliably determine default device");return}return o===null||o===void 0?void 0:o.deviceId})}hasDeviceInUse(t){return t?ct.userMediaPromiseMap.has(t):ct.userMediaPromiseMap.size>0}}class Tt{static u16(t){return new Tt(t,Wo)}static u32(t){return new Tt(t,Qh)}constructor(t,e){if(this.value=t,t<0)throw Error("WrapAroundUnsignedInt: cannot faithfully represent an integer smaller than 0");if(e>Number.MAX_SAFE_INTEGER)throw Error("WrapAroundUnsignedInt: cannot faithfully represent an integer bigger than MAX_SAFE_INTEGER.");this.maxSize=e,this.clamp()}clamp(){while(this.value>this.maxSize)this.value-=this.maxSize+1;while(this.value<0)this.value+=this.maxSize+1}clone(){return new Tt(this.value,this.maxSize)}update(t){this.value=t(this.value),this.clamp()}increment(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:1;this.update((e)=>e+t)}decrement(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:1;this.update((e)=>e-t)}getThenIncrement(){let t=this.value;return this.increment(),new Tt(t,this.maxSize)}isBefore(t){let e=this.value>>>0,n=(t.value>>>0)-e>>>0;return n!==0&&n<this.maxSize+1}}class Fe{static fromRtpTicks(t){return new Fe(t,90000)}static rtpRandom(){let t=Math.round(Math.random()*Qh);return Fe.fromRtpTicks(t)}constructor(t,e){this.timestamp=Tt.u32(t),this.rateInHz=e}asTicks(){return this.timestamp.value}clone(){return new Fe(this.timestamp.value,this.rateInHz)}wrappingAdd(t){this.timestamp.increment(t)}isBefore(t){return this.timestamp.isBefore(t.timestamp)}}class Ie{constructor(t,e,l){this.epoch=e,this.base=l,this.previous=l.clone(),this.rateInHz=t}static startingNow(t,e){return new Ie(e,new Date,t)}static startingAtTime(t,e,l){return new Ie(l,t,e)}static rtpStartingNow(t){return Ie.startingNow(t,90000)}static rtpStartingAtTime(t,e){return Ie.startingAtTime(t,e,90000)}now(){return this.at(new Date)}at(t){let e=t.getTime()-this.epoch.getTime(),l=Ie.durationInMsToTicks(e,this.rateInHz),n=this.base.clone();if(n.wrappingAdd(l),n.isBefore(this.previous))n=this.previous;return this.previous=n.clone(),n.clone()}static durationInMsToTicks(t,e){let n=(t*1e6*e+500000000)/1e9;return Math.round(n)}}function Ro(t){if(t instanceof DataView)return t;else if(t instanceof ArrayBuffer)return new DataView(t);else if(t instanceof Uint8Array)return new DataView(t.buffer,t.byteOffset,t.byteLength);else throw Error("Error coercing ".concat(t," to DataView - input was not DataView, ArrayBuffer, or Uint8Array."))}class Sh{constructor(){this.value=0}get(){if(this.value+=1,this.value>Wo)return null;return this.value}}class Zh{constructor(){this.pendingTasks=new Map,this.taskMutex=new ht,this.nextTaskIndex=0}run(t){return a(this,void 0,void 0,function*(){let e={id:this.nextTaskIndex++,enqueuedAt:Date.now(),status:ml.WAITING};this.pendingTasks.set(e.id,e);let l=yield this.taskMutex.lock();try{return e.executedAt=Date.now(),e.status=ml.RUNNING,yield t()}finally{e.status=ml.COMPLETED,this.pendingTasks.delete(e.id),l()}})}flush(){return a(this,void 0,void 0,function*(){return this.run(()=>a(this,void 0,void 0,function*(){}))})}snapshot(){return Array.from(this.pendingTasks.values())}}class Kh{get readyState(){return this.ws.readyState}constructor(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};var l,n;if((l=e.signal)===null||l===void 0?void 0:l.aborted)throw new DOMException("This operation was aborted","AbortError");this.url=t;let r=new WebSocket(t,(n=e.protocols)!==null&&n!==void 0?n:[]);r.binaryType="arraybuffer",this.ws=r;let o=function(){let{closeCode:s,reason:c}=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return r.close(s,c)};if(this.opened=new ft((s,c)=>{let i=()=>{c(G.websocket("Encountered websocket error during connection establishment"))};r.onopen=()=>{s({readable:new ReadableStream({start(h){r.onmessage=(f)=>{let{data:u}=f;return h.enqueue(u)},r.onerror=(f)=>h.error(f)},cancel:o}),writable:new WritableStream({write(h){r.send(h)},abort(){r.close()},close:o}),protocol:r.protocol,extensions:r.extensions}),r.removeEventListener("error",i)},r.addEventListener("error",i)}),this.closed=new ft((s,c)=>{let i=()=>a(this,void 0,void 0,function*(){let h=new ft((u)=>{if(r.readyState===WebSocket.CLOSED)return;else r.addEventListener("close",(d)=>{u(d)},{once:!0})}),f=yield ft.race([ut(250),h]);if(!f)c(G.websocket("Encountered unspecified websocket error without a timely close event"));else s(f)});r.onclose=(h)=>{let{code:f,reason:u}=h;s({closeCode:f,reason:u}),r.removeEventListener("error",i)},r.addEventListener("error",i)}),e.signal)e.signal.onabort=()=>r.close();this.close=o}}function mb(t){let e=wb.indexOf(t.case)>=0;return O.trace("request allowed to bypass queue:",{canPass:e,req:t}),e}class Vn{get currentState(){return this.state}get isDisconnected(){return this.state===F.DISCONNECTING||this.state===F.DISCONNECTED}get isEstablishingConnection(){return this.state===F.CONNECTING||this.state===F.RECONNECTING}getNextRequestId(){return this._requestId+=1,this._requestId}constructor(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};var l;this.rtt=0,this.state=F.DISCONNECTED,this.log=O,this._requestId=0,this.useV0SignalPath=!1,this.resetCallbacks=()=>{this.onAnswer=void 0,this.onLeave=void 0,this.onLocalTrackPublished=void 0,this.onLocalTrackUnpublished=void 0,this.onNegotiateRequested=void 0,this.onOffer=void 0,this.onRemoteMuteChanged=void 0,this.onSubscribedQualityUpdate=void 0,this.onTokenRefresh=void 0,this.onTrickle=void 0,this.onClose=void 0,this.onMediaSectionsRequirement=void 0},this.log=pt((l=e.loggerName)!==null&&l!==void 0?l:dt.Signal),this.loggerContextCb=e.loggerContextCb,this.useJSON=t,this.requestQueue=new Zh,this.queuedRequests=[],this.closingLock=new ht,this.connectionLock=new ht,this.state=F.DISCONNECTED}get logContext(){var t,e;return(e=(t=this.loggerContextCb)===null||t===void 0?void 0:t.call(this))!==null&&e!==void 0?e:{}}join(t,e,l,n){return a(this,arguments,void 0,function(r,o,s,c){var i=this;let h=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!1,f=arguments.length>5?arguments[5]:void 0;return function*(){return i.state=F.CONNECTING,i.options=s,yield i.connect(r,o,s,c,h,f)}()})}reconnect(t,e,l,n){return a(this,void 0,void 0,function*(){if(!this.options){this.log.warn("attempted to reconnect without signal options being set, ignoring",this.logContext);return}return this.state=F.RECONNECTING,this.clearPingInterval(),yield this.connect(t,e,Object.assign(Object.assign({},this.options),{reconnect:!0,sid:l,reconnectReason:n}),void 0,this.useV0SignalPath)})}connect(t,e,l,n){return a(this,arguments,void 0,function(r,o,s,c){var i=this;let h=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!1,f=arguments.length>5?arguments[5]:void 0;return function*(){let u=yield i.connectionLock.lock();i.connectOptions=s,i.useV0SignalPath=h;let d=Sa(),x=h?Ab(o,d,s):yield pb(o,d,s,f),g=_a(r,x,h).toString(),w=tb(g).toString();return new Promise((p,y)=>a(i,void 0,void 0,function*(){var $,E;try{let A=!1,m=(V)=>a(this,void 0,void 0,function*(){if(A)return;A=!0;let X=V instanceof Event?V.currentTarget:V,S=eb(X,"Abort handler called");if(this.streamWriter&&!this.isDisconnected)this.sendLeave().then(()=>this.close(S)).catch((nt)=>{this.log.error(nt),this.close()});else this.close();R(),y(G.cancelled(S))});c===null||c===void 0||c.addEventListener("abort",m);let R=()=>{clearTimeout(M),c===null||c===void 0||c.removeEventListener("abort",m)},M=setTimeout(()=>{m(G.timeout("room connection has timed out (signal)"))},s.websocketTimeout),H=(V,X)=>{this.handleSignalConnected(V,M,X)},z=new URL(g);if(z.searchParams.has("access_token"))z.searchParams.set("access_token","<redacted>");if(this.log.debug("connecting to ".concat(z),Object.assign({reconnect:s.reconnect,reconnectReason:s.reconnectReason},this.logContext)),this.ws)yield this.close(!1);this.ws=new Kh(g);try{this.ws.closed.then((xt)=>{var vt;if(this.isEstablishingConnection)y(G.internal("Websocket got closed during a (re)connection attempt: ".concat(xt.reason)));if(xt.closeCode!==1000){if(this.log.warn("websocket closed",Object.assign(Object.assign({},this.logContext),{reason:xt.reason,code:xt.closeCode,wasClean:xt.closeCode===1000,state:this.state})),this.state===F.CONNECTED)this.handleOnClose((vt=xt.reason)!==null&&vt!==void 0?vt:"Unexpected WS error")}return}).catch((xt)=>{if(this.isEstablishingConnection)y(G.internal("Websocket error during a (re)connection attempt: ".concat(xt)))});let V=yield this.ws.opened.catch((xt)=>a(this,void 0,void 0,function*(){if(this.state!==F.CONNECTED){this.state=F.DISCONNECTED,clearTimeout(M);let vt=yield this.handleConnectionError(xt,w);y(vt);return}this.handleWSError(xt),y(xt);return}));if(clearTimeout(M),!V)return;let X=V.readable.getReader();this.streamWriter=V.writable.getWriter();let S=yield X.read();if(X.releaseLock(),!S.value)throw G.internal("no message received as first message");let nt=Js(S.value),Rt=this.validateFirstMessage(nt,($=s.reconnect)!==null&&$!==void 0?$:!1);if(!Rt.isValid){y(Rt.error);return}if(((E=nt.message)===null||E===void 0?void 0:E.case)==="join"){if(this.pingTimeoutDuration=nt.message.value.pingTimeout,this.pingIntervalDuration=nt.message.value.pingInterval,this.pingTimeoutDuration&&this.pingTimeoutDuration>0)this.log.debug("ping config",Object.assign(Object.assign({},this.logContext),{timeout:this.pingTimeoutDuration,interval:this.pingIntervalDuration}));if(this.onJoined)this.onJoined(nt.message.value)}let Ye=Rt.shouldProcessFirstMessage?nt:void 0;H(V,Ye),p(Rt.response)}catch(V){y(V)}finally{R()}}finally{u()}}))}()})}startReadingLoop(t,e){return a(this,void 0,void 0,function*(){if(e)this.handleSignalResponse(e);while(!0){if(this.signalLatency)yield ut(this.signalLatency);let{done:l,value:n}=yield t.read();if(l)break;let r=Js(n);this.handleSignalResponse(r)}})}close(){return a(this,arguments,void 0,function(){var t=this;let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,l=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"Close method called on signal client";return function*(){if([F.DISCONNECTING||F.DISCONNECTED].includes(t.state)){t.log.debug("ignoring signal close as it's already in disconnecting state");return}let n=yield t.closingLock.lock();try{if(t.clearPingInterval(),e)t.state=F.DISCONNECTING;if(t.ws){t.ws.close({closeCode:1000,reason:l});let r=t.ws.closed;t.ws=void 0,t.streamWriter=void 0,yield Promise.race([r,ut(yb)])}}catch(r){t.log.debug("websocket error while closing",Object.assign(Object.assign({},t.logContext),{error:r}))}finally{if(e)t.state=F.DISCONNECTED;n()}}()})}sendOffer(t,e){this.log.debug("sending offer",Object.assign(Object.assign({},this.logContext),{offerSdp:t.sdp})),this.sendRequest({case:"offer",value:Be(t,e)})}sendAnswer(t,e){return this.log.debug("sending answer",Object.assign(Object.assign({},this.logContext),{answerSdp:t.sdp})),this.sendRequest({case:"answer",value:Be(t,e)})}sendIceCandidate(t,e){return this.log.debug("sending ice candidate",Object.assign(Object.assign({},this.logContext),{candidate:t})),this.sendRequest({case:"trickle",value:new Bn({candidateInit:JSON.stringify(t),target:e})})}sendMuteTrack(t,e){return this.sendRequest({case:"mute",value:new Wn({sid:t,muted:e})})}sendAddTrack(t){return this.sendRequest({case:"addTrack",value:t})}sendUpdateLocalMetadata(t,e){return a(this,arguments,void 0,function(l,n){var r=this;let o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return function*(){let s=r.getNextRequestId();return yield r.sendRequest({case:"updateMetadata",value:new xo({requestId:s,metadata:l,name:n,attributes:o})}),s}()})}sendUpdateTrackSettings(t){this.sendRequest({case:"trackSetting",value:t})}sendUpdateSubscription(t){return this.sendRequest({case:"subscription",value:t})}sendSyncState(t){return this.sendRequest({case:"syncState",value:t})}sendUpdateVideoLayers(t,e){return this.sendRequest({case:"updateLayers",value:new gc({trackSid:t,layers:e})})}sendUpdateSubscriptionPermissions(t,e){return this.sendRequest({case:"subscriptionPermission",value:new yc({allParticipants:t,trackPermissions:e})})}sendSimulateScenario(t){return this.sendRequest({case:"simulate",value:t})}sendPing(){return Promise.all([this.sendRequest({case:"ping",value:P.parse(Date.now())}),this.sendRequest({case:"pingReq",value:new Lc({timestamp:P.parse(Date.now()),rtt:P.parse(this.rtt)})})])}sendUpdateLocalAudioTrack(t,e){return this.sendRequest({case:"updateAudioTrack",value:new bo({trackSid:t,features:e})})}sendLeave(){return this.sendRequest({case:"leave",value:new $n({reason:Gt.CLIENT_INITIATED,action:je.DISCONNECT})})}sendPublishDataTrackRequest(t,e,l){return this.sendRequest({case:"publishDataTrackRequest",value:new ho({pubHandle:t,name:e,encryption:l?T.GCM:T.NONE})})}sendUnPublishDataTrackRequest(t){return this.sendRequest({case:"unpublishDataTrackRequest",value:new uo({pubHandle:t})})}sendUpdateDataSubscription(t,e){return this.sendRequest({case:"updateDataSubscription",value:new dc({updates:[new ac({trackSid:t,subscribe:e})]})})}sendRequest(t){return a(this,arguments,void 0,function(e){var l=this;let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;return function*(){if(!n&&!mb(e)&&l.state===F.RECONNECTING){l.queuedRequests.push(()=>a(l,void 0,void 0,function*(){yield this.sendRequest(e,!0)}));return}if(!n)yield l.requestQueue.flush();if(l.signalLatency)yield ut(l.signalLatency);if(l.isDisconnected){l.log.debug("skipping signal request (type: ".concat(e.case,") - SignalClient disconnected"));return}if(!l.streamWriter){l.log.error("cannot send signal request before connected, type: ".concat(e===null||e===void 0?void 0:e.case),l.logContext);return}let o=new gd({message:e});try{if(l.useJSON)yield l.streamWriter.write(o.toJsonString());else yield l.streamWriter.write(o.toBinary())}catch(s){l.log.error("error sending signal message",Object.assign(Object.assign({},l.logContext),{error:s}))}}()})}handleSignalResponse(t){var e,l;let n=t.message;if(n==null){this.log.debug("received unsupported message",this.logContext);return}let r=!1;if(n.case==="answer"){let o=vs(n.value);if(this.onAnswer)this.onAnswer(o,n.value.id,n.value.midToTrackId)}else if(n.case==="offer"){let o=vs(n.value);if(this.onOffer)this.onOffer(o,n.value.id,n.value.midToTrackId)}else if(n.case==="trickle"){let o=JSON.parse(n.value.candidateInit);if(this.onTrickle)this.onTrickle(o,n.value.target)}else if(n.case==="update"){if(this.onParticipantUpdate)this.onParticipantUpdate((e=n.value.participants)!==null&&e!==void 0?e:[])}else if(n.case==="trackPublished"){if(this.onLocalTrackPublished)this.onLocalTrackPublished(n.value)}else if(n.case==="speakersChanged"){if(this.onSpeakersChanged)this.onSpeakersChanged((l=n.value.speakers)!==null&&l!==void 0?l:[])}else if(n.case==="leave"){if(this.onLeave)this.onLeave(n.value)}else if(n.case==="mute"){if(this.onRemoteMuteChanged)this.onRemoteMuteChanged(n.value.sid,n.value.muted)}else if(n.case==="roomUpdate"){if(this.onRoomUpdate&&n.value.room)this.onRoomUpdate(n.value.room)}else if(n.case==="connectionQuality"){if(this.onConnectionQuality)this.onConnectionQuality(n.value)}else if(n.case==="streamStateUpdate"){if(this.onStreamStateUpdate)this.onStreamStateUpdate(n.value)}else if(n.case==="subscribedQualityUpdate"){if(this.onSubscribedQualityUpdate)this.onSubscribedQualityUpdate(n.value)}else if(n.case==="subscriptionPermissionUpdate"){if(this.onSubscriptionPermissionUpdate)this.onSubscriptionPermissionUpdate(n.value)}else if(n.case==="refreshToken"){if(this.onTokenRefresh)this.onTokenRefresh(n.value)}else if(n.case==="trackUnpublished"){if(this.onLocalTrackUnpublished)this.onLocalTrackUnpublished(n.value)}else if(n.case==="subscriptionResponse"){if(this.onSubscriptionError)this.onSubscriptionError(n.value)}else if(n.case==="pong");else if(n.case==="pongResp")this.rtt=Date.now()-Number.parseInt(n.value.lastPingTimestamp.toString()),this.resetPingTimeout(),r=!0;else if(n.case==="requestResponse"){if(this.onRequestResponse)this.onRequestResponse(n.value)}else if(n.case==="trackSubscribed"){if(this.onLocalTrackSubscribed)this.onLocalTrackSubscribed(n.value.trackSid)}else if(n.case==="roomMoved"){if(this.onTokenRefresh)this.onTokenRefresh(n.value.token);if(this.onRoomMoved)this.onRoomMoved(n.value)}else if(n.case==="mediaSectionsRequirement"){if(this.onMediaSectionsRequirement)this.onMediaSectionsRequirement(n.value)}else if(n.case==="publishDataTrackResponse"){if(this.onPublishDataTrackResponse)this.onPublishDataTrackResponse(n.value)}else if(n.case==="unpublishDataTrackResponse"){if(this.onUnPublishDataTrackResponse)this.onUnPublishDataTrackResponse(n.value)}else if(n.case==="dataTrackSubscriberHandles"){if(this.onDataTrackSubscriberHandles)this.onDataTrackSubscriberHandles(n.value)}else this.log.debug("unsupported message",Object.assign(Object.assign({},this.logContext),{msgCase:n.case}));if(!r)this.resetPingTimeout()}setReconnected(){while(this.queuedRequests.length>0){let t=this.queuedRequests.shift();if(t)this.requestQueue.run(t)}}handleOnClose(t){return a(this,void 0,void 0,function*(){if(this.state===F.DISCONNECTED)return;let e=this.onClose;if(yield this.close(void 0,t),this.log.debug("websocket connection closed: ".concat(t),Object.assign(Object.assign({},this.logContext),{reason:t})),e)e(t)})}handleWSError(t){this.log.error("websocket error",Object.assign(Object.assign({},this.logContext),{error:t}))}resetPingTimeout(){if(this.clearPingTimeout(),!this.pingTimeoutDuration){this.log.warn("ping timeout duration not set",this.logContext);return}this.pingTimeout=et.setTimeout(()=>{this.log.warn("ping timeout triggered. last pong received at: ".concat(new Date(Date.now()-this.pingTimeoutDuration*1000).toUTCString()),this.logContext),this.handleOnClose("ping timeout")},this.pingTimeoutDuration*1000)}clearPingTimeout(){if(this.pingTimeout)et.clearTimeout(this.pingTimeout)}startPingInterval(){if(this.clearPingInterval(),this.resetPingTimeout(),!this.pingIntervalDuration){this.log.warn("ping interval duration not set",this.logContext);return}this.log.debug("start ping interval",this.logContext),this.pingInterval=et.setInterval(()=>{this.sendPing()},this.pingIntervalDuration*1000)}clearPingInterval(){if(this.log.debug("clearing ping interval",this.logContext),this.clearPingTimeout(),this.pingInterval)et.clearInterval(this.pingInterval)}handleSignalConnected(t,e,l){this.state=F.CONNECTED,clearTimeout(e),this.startPingInterval(),this.startReadingLoop(t.readable.getReader(),l)}validateFirstMessage(t,e){var l,n,r,o,s;if(((l=t.message)===null||l===void 0?void 0:l.case)==="join")return{isValid:!0,response:t.message.value};else if(this.state===F.RECONNECTING&&((n=t.message)===null||n===void 0?void 0:n.case)!=="leave")if(((r=t.message)===null||r===void 0?void 0:r.case)==="reconnect")return{isValid:!0,response:t.message.value};else return this.log.debug("declaring signal reconnected without reconnect response received",this.logContext),{isValid:!0,response:void 0,shouldProcessFirstMessage:!0};else if(this.isEstablishingConnection&&((o=t.message)===null||o===void 0?void 0:o.case)==="leave")return{isValid:!1,error:G.leaveRequest("Received leave request while trying to (re)connect",t.message.value.reason)};else if(!e)return{isValid:!1,error:G.internal("did not receive join response, got ".concat((s=t.message)===null||s===void 0?void 0:s.case," instead"))};return{isValid:!1,error:G.internal("Unexpected first message")}}handleConnectionError(t,e){return a(this,void 0,void 0,function*(){try{let l=yield fetch(e);switch(l.status){case 404:return G.serviceNotFound("v1 RTC path not found. Consider upgrading your LiveKit server version","v0-rtc");case 401:case 403:let n=yield l.text();return G.notAllowed(n,l.status);default:break}if(t instanceof G)return t;else return G.internal("Encountered unknown websocket error during connection: ".concat(t),{status:l.status,statusText:l.statusText})}catch(l){return l instanceof G?l:G.serverUnreachable(l instanceof Error?l.message:"server was not reachable")}})}}function vs(t){let e={type:"offer",sdp:t.sdp};switch(t.type){case"answer":case"offer":case"pranswer":case"rollback":e.type=t.type;break}return e}function Be(t,e){return new Ae({sdp:t.sdp,type:t.type,id:e})}function Ab(t,e,l){var n;let r=new URLSearchParams;if(r.set("access_token",t),l.reconnect){if(r.set("reconnect","1"),l.sid)r.set("sid",l.sid)}if(r.set("auto_subscribe",l.autoSubscribe?"1":"0"),r.set("sdk",Jt()?"reactnative":"js"),r.set("version",e.version),r.set("protocol",e.protocol.toString()),e.deviceModel)r.set("device_model",e.deviceModel);if(e.os)r.set("os",e.os);if(e.osVersion)r.set("os_version",e.osVersion);if(e.browser)r.set("browser",e.browser);if(e.browserVersion)r.set("browser_version",e.browserVersion);if(l.adaptiveStream)r.set("adaptive_stream","1");if(l.reconnectReason)r.set("reconnect_reason",l.reconnectReason.toString());if((n=navigator.connection)===null||n===void 0?void 0:n.type)r.set("network",navigator.connection.type);return r}function pb(t,e,l,n){return a(this,void 0,void 0,function*(){let r=new URLSearchParams;r.set("access_token",t);let o=new Sd({clientInfo:e,connectionSettings:new Cc({autoSubscribe:!!l.autoSubscribe,adaptiveStream:!!l.adaptiveStream}),reconnect:!!l.reconnect,participantSid:l.sid?l.sid:void 0,publisherOffer:n});if(l.reconnectReason)o.reconnectReason=l.reconnectReason;let s=o.toBinary(),c,i;if(Kr()){let d=new CompressionStream("gzip"),x=d.writable.getWriter();x.write(new Uint8Array(s)),x.close();let g=[],w=d.readable.getReader();while(!0){let{done:E,value:A}=yield w.read();if(E)break;g.push(A)}let p=g.reduce((E,A)=>E+A.length,0),y=new Uint8Array(p),$=0;for(let E of g)y.set(E,$),$+=E.length;c=y,i=$r.GZIP}else c=s,i=$r.NONE;let f=new Zd({joinRequest:c,compression:i}).toBinary(),u=(d)=>{let x=Array.from(d,(g)=>String.fromCodePoint(g)).join("");return btoa(x)};return r.set("join_request",u(f).replace(/\+/g,"-").replace(/\//g,"_")),r})}class Fr{constructor(){this.buffer=[],this._totalSize=0}push(t){this.buffer.push(t),this._totalSize+=t.data.byteLength}pop(){let t=this.buffer.shift();if(t)this._totalSize-=t.data.byteLength;return t}getAll(){return this.buffer.slice()}popToSequence(t){while(this.buffer.length>0)if(this.buffer[0].sequence<=t)this.pop();else break}alignBufferedAmount(t){while(this.buffer.length>0){let e=this.buffer[0];if(this._totalSize-e.data.byteLength<=t)break;this.pop()}}get length(){return this.buffer.length}}class jh{constructor(t){this._map=new Map,this._lastCleanup=0,this.ttl=t}set(t,e){let l=Date.now();if(l-this._lastCleanup>this.ttl/2)this.cleanup();let n=l+this.ttl;return this._map.set(t,{value:e,expiresAt:n}),this}get(t){let e=this._map.get(t);if(!e)return;if(e.expiresAt<Date.now()){this._map.delete(t);return}return e.value}has(t){let e=this._map.get(t);if(!e)return!1;if(e.expiresAt<Date.now())return this._map.delete(t),!1;return!0}delete(t){return this._map.delete(t)}clear(){this._map.clear()}cleanup(){let t=Date.now();for(let[e,l]of this._map.entries())if(l.expiresAt<t)this._map.delete(e);this._lastCleanup=t}get size(){return this.cleanup(),this._map.size}forEach(t){this.cleanup();for(let[e,l]of this._map.entries())if(l.expiresAt>=Date.now())t(l.value,e,this.asValueMap())}map(t){this.cleanup();let e=[],l=this.asValueMap();for(let[n,r]of l.entries())e.push(t(r,n,l));return e}asValueMap(){let t=new Map;for(let[e,l]of this._map.entries())if(l.expiresAt>=Date.now())t.set(e,l.value);return t}}function $o(){if(ti)return xr.exports;ti=1;var t=xr.exports={v:[{name:"version",reg:/^(\d*)$/}],o:[{name:"origin",reg:/^(\S*) (\d*) (\d*) (\S*) IP(\d) (\S*)/,names:["username","sessionId","sessionVersion","netType","ipVer","address"],format:"%s %s %d %s IP%d %s"}],s:[{name:"name"}],i:[{name:"description"}],u:[{name:"uri"}],e:[{name:"email"}],p:[{name:"phone"}],z:[{name:"timezones"}],r:[{name:"repeats"}],t:[{name:"timing",reg:/^(\d*) (\d*)/,names:["start","stop"],format:"%d %d"}],c:[{name:"connection",reg:/^IN IP(\d) (\S*)/,names:["version","ip"],format:"IN IP%d %s"}],b:[{push:"bandwidth",reg:/^(TIAS|AS|CT|RR|RS):(\d*)/,names:["type","limit"],format:"%s:%s"}],m:[{reg:/^(\w*) (\d*) ([\w/]*)(?: (.*))?/,names:["type","port","protocol","payloads"],format:"%s %d %s %s"}],a:[{push:"rtp",reg:/^rtpmap:(\d*) ([\w\-.]*)(?:\s*\/(\d*)(?:\s*\/(\S*))?)?/,names:["payload","codec","rate","encoding"],format:function(e){return e.encoding?"rtpmap:%d %s/%s/%s":e.rate?"rtpmap:%d %s/%s":"rtpmap:%d %s"}},{push:"fmtp",reg:/^fmtp:(\d*) ([\S| ]*)/,names:["payload","config"],format:"fmtp:%d %s"},{name:"control",reg:/^control:(.*)/,format:"control:%s"},{name:"rtcp",reg:/^rtcp:(\d*)(?: (\S*) IP(\d) (\S*))?/,names:["port","netType","ipVer","address"],format:function(e){return e.address!=null?"rtcp:%d %s IP%d %s":"rtcp:%d"}},{push:"rtcpFbTrrInt",reg:/^rtcp-fb:(\*|\d*) trr-int (\d*)/,names:["payload","value"],format:"rtcp-fb:%s trr-int %d"},{push:"rtcpFb",reg:/^rtcp-fb:(\*|\d*) ([\w-_]*)(?: ([\w-_]*))?/,names:["payload","type","subtype"],format:function(e){return e.subtype!=null?"rtcp-fb:%s %s %s":"rtcp-fb:%s %s"}},{push:"ext",reg:/^extmap:(\d+)(?:\/(\w+))?(?: (urn:ietf:params:rtp-hdrext:encrypt))? (\S*)(?: (\S*))?/,names:["value","direction","encrypt-uri","uri","config"],format:function(e){return"extmap:%d"+(e.direction?"/%s":"%v")+(e["encrypt-uri"]?" %s":"%v")+" %s"+(e.config?" %s":"")}},{name:"extmapAllowMixed",reg:/^(extmap-allow-mixed)/},{push:"crypto",reg:/^crypto:(\d*) ([\w_]*) (\S*)(?: (\S*))?/,names:["id","suite","config","sessionConfig"],format:function(e){return e.sessionConfig!=null?"crypto:%d %s %s %s":"crypto:%d %s %s"}},{name:"setup",reg:/^setup:(\w*)/,format:"setup:%s"},{name:"connectionType",reg:/^connection:(new|existing)/,format:"connection:%s"},{name:"mid",reg:/^mid:([^\s]*)/,format:"mid:%s"},{name:"msid",reg:/^msid:(.*)/,format:"msid:%s"},{name:"ptime",reg:/^ptime:(\d*(?:\.\d*)*)/,format:"ptime:%d"},{name:"maxptime",reg:/^maxptime:(\d*(?:\.\d*)*)/,format:"maxptime:%d"},{name:"direction",reg:/^(sendrecv|recvonly|sendonly|inactive)/},{name:"icelite",reg:/^(ice-lite)/},{name:"iceUfrag",reg:/^ice-ufrag:(\S*)/,format:"ice-ufrag:%s"},{name:"icePwd",reg:/^ice-pwd:(\S*)/,format:"ice-pwd:%s"},{name:"fingerprint",reg:/^fingerprint:(\S*) (\S*)/,names:["type","hash"],format:"fingerprint:%s %s"},{push:"candidates",reg:/^candidate:(\S*) (\d*) (\S*) (\d*) (\S*) (\d*) typ (\S*)(?: raddr (\S*) rport (\d*))?(?: tcptype (\S*))?(?: generation (\d*))?(?: network-id (\d*))?(?: network-cost (\d*))?/,names:["foundation","component","transport","priority","ip","port","type","raddr","rport","tcptype","generation","network-id","network-cost"],format:function(e){var l="candidate:%s %d %s %d %s %d typ %s";if(l+=e.raddr!=null?" raddr %s rport %d":"%v%v",l+=e.tcptype!=null?" tcptype %s":"%v",e.generation!=null)l+=" generation %d";return l+=e["network-id"]!=null?" network-id %d":"%v",l+=e["network-cost"]!=null?" network-cost %d":"%v",l}},{name:"endOfCandidates",reg:/^(end-of-candidates)/},{name:"remoteCandidates",reg:/^remote-candidates:(.*)/,format:"remote-candidates:%s"},{name:"iceOptions",reg:/^ice-options:(\S*)/,format:"ice-options:%s"},{push:"ssrcs",reg:/^ssrc:(\d*) ([\w_-]*)(?::(.*))?/,names:["id","attribute","value"],format:function(e){var l="ssrc:%d";if(e.attribute!=null){if(l+=" %s",e.value!=null)l+=":%s"}return l}},{push:"ssrcGroups",reg:/^ssrc-group:([\x21\x23\x24\x25\x26\x27\x2A\x2B\x2D\x2E\w]*) (.*)/,names:["semantics","ssrcs"],format:"ssrc-group:%s %s"},{name:"msidSemantic",reg:/^msid-semantic:\s?(\w*) (\S*)/,names:["semantic","token"],format:"msid-semantic: %s %s"},{push:"groups",reg:/^group:(\w*) (.*)/,names:["type","mids"],format:"group:%s %s"},{name:"rtcpMux",reg:/^(rtcp-mux)/},{name:"rtcpRsize",reg:/^(rtcp-rsize)/},{name:"sctpmap",reg:/^sctpmap:([\w_/]*) (\S*)(?: (\S*))?/,names:["sctpmapNumber","app","maxMessageSize"],format:function(e){return e.maxMessageSize!=null?"sctpmap:%s %s %s":"sctpmap:%s %s"}},{name:"xGoogleFlag",reg:/^x-google-flag:([^\s]*)/,format:"x-google-flag:%s"},{push:"rids",reg:/^rid:([\d\w]+) (\w+)(?: ([\S| ]*))?/,names:["id","direction","params"],format:function(e){return e.params?"rid:%s %s %s":"rid:%s %s"}},{push:"imageattrs",reg:new RegExp("^imageattr:(\\d+|\\*)[\\s\\t]+(send|recv)[\\s\\t]+(\\*|\\[\\S+\\](?:[\\s\\t]+\\[\\S+\\])*)(?:[\\s\\t]+(recv|send)[\\s\\t]+(\\*|\\[\\S+\\](?:[\\s\\t]+\\[\\S+\\])*))?"),names:["pt","dir1","attrs1","dir2","attrs2"],format:function(e){return"imageattr:%s %s %s"+(e.dir2?" %s %s":"")}},{name:"simulcast",reg:new RegExp("^simulcast:(send|recv) ([a-zA-Z0-9\\-_~;,]+)(?:\\s?(send|recv) ([a-zA-Z0-9\\-_~;,]+))?$"),names:["dir1","list1","dir2","list2"],format:function(e){return"simulcast:%s %s"+(e.dir2?" %s %s":"")}},{name:"simulcast_03",reg:/^simulcast:[\s\t]+([\S+\s\t]+)$/,names:["value"],format:"simulcast: %s"},{name:"framerate",reg:/^framerate:(\d+(?:$|\.\d+))/,format:"framerate:%s"},{name:"sourceFilter",reg:/^source-filter: *(excl|incl) (\S*) (IP4|IP6|\*) (\S*) (.*)/,names:["filterMode","netType","addressTypes","destAddress","srcList"],format:"source-filter: %s %s %s %s %s"},{name:"bundleOnly",reg:/^(bundle-only)/},{name:"label",reg:/^label:(.+)/,format:"label:%s"},{name:"sctpPort",reg:/^sctp-port:(\d+)$/,format:"sctp-port:%s"},{name:"maxMessageSize",reg:/^max-message-size:(\d+)$/,format:"max-message-size:%s"},{push:"tsRefClocks",reg:/^ts-refclk:([^\s=]*)(?:=(\S*))?/,names:["clksrc","clksrcExt"],format:function(e){return"ts-refclk:%s"+(e.clksrcExt!=null?"=%s":"")}},{name:"mediaClk",reg:/^mediaclk:(?:id=(\S*))? *([^\s=]*)(?:=(\S*))?(?: *rate=(\d+)\/(\d+))?/,names:["id","mediaClockName","mediaClockValue","rateNumerator","rateDenominator"],format:function(e){var l="mediaclk:";return l+=e.id!=null?"id=%s %s":"%v%s",l+=e.mediaClockValue!=null?"=%s":"",l+=e.rateNumerator!=null?" rate=%s":"",l+=e.rateDenominator!=null?"/%s":"",l}},{name:"keywords",reg:/^keywds:(.+)$/,format:"keywds:%s"},{name:"content",reg:/^content:(.+)/,format:"content:%s"},{name:"bfcpFloorCtrl",reg:/^floorctrl:(c-only|s-only|c-s)/,format:"floorctrl:%s"},{name:"bfcpConfId",reg:/^confid:(\d+)/,format:"confid:%s"},{name:"bfcpUserId",reg:/^userid:(\d+)/,format:"userid:%s"},{name:"bfcpFloorId",reg:/^floorid:(.+) (?:m-stream|mstrm):(.+)/,names:["id","mStream"],format:"floorid:%s mstrm:%s"},{push:"invalid",names:["value"]}]};return Object.keys(t).forEach(function(e){var l=t[e];l.forEach(function(n){if(!n.reg)n.reg=/(.*)/;if(!n.format)n.format="%s"})}),xr.exports}function Lb(){if(ei)return br;return ei=1,function(t){var e=function(c){return String(Number(c))===c?Number(c):c},l=function(c,i,h,f){if(f&&!h)i[f]=e(c[1]);else for(var u=0;u<h.length;u+=1)if(c[u+1]!=null)i[h[u]]=e(c[u+1])},n=function(c,i,h){var f=c.name&&c.names;if(c.push&&!i[c.push])i[c.push]=[];else if(f&&!i[c.name])i[c.name]={};var u=c.push?{}:f?i[c.name]:i;if(l(h.match(c.reg),u,c.names,c.name),c.push)i[c.push].push(u)},r=$o(),o=RegExp.prototype.test.bind(/^([a-z])=(.*)/);t.parse=function(c){var i={},h=[],f=i;return c.split(/(\r\n|\r|\n)/).filter(o).forEach(function(u){var d=u[0],x=u.slice(2);if(d==="m")h.push({rtp:[],fmtp:[]}),f=h[h.length-1];for(var g=0;g<(r[d]||[]).length;g+=1){var w=r[d][g];if(w.reg.test(x))return n(w,f,x)}}),i.media=h,i};var s=function(c,i){var h=i.split(/=(.+)/,2);if(h.length===2)c[h[0]]=e(h[1]);else if(h.length===1&&i.length>1)c[h[0]]=void 0;return c};t.parseParams=function(c){return c.split(/;\s?/).reduce(s,{})},t.parseFmtpConfig=t.parseParams,t.parsePayloads=function(c){return c.toString().split(" ").map(Number)},t.parseRemoteCandidates=function(c){var i=[],h=c.split(" ").map(e);for(var f=0;f<h.length;f+=3)i.push({component:h[f],ip:h[f+1],port:h[f+2]});return i},t.parseImageAttributes=function(c){return c.split(" ").map(function(i){return i.substring(1,i.length-1).split(",").reduce(s,{})})},t.parseSimulcastStreamList=function(c){return c.split(";").map(function(i){return i.split(",").map(function(h){var f,u=!1;if(h[0]!=="~")f=e(h);else f=e(h.substring(1,h.length)),u=!0;return{scid:f,paused:u}})})}}(br),br}function Cb(){if(li)return gr;li=1;var t=$o(),e=/%[sdv%]/g,l=function(s){var c=1,i=arguments,h=i.length;return s.replace(e,function(f){if(c>=h)return f;var u=i[c];switch(c+=1,f){case"%%":return"%";case"%s":return String(u);case"%d":return Number(u);case"%v":return""}})},n=function(s,c,i){var h=c.format instanceof Function?c.format(c.push?i:i[c.name]):c.format,f=[s+"="+h];if(c.names)for(var u=0;u<c.names.length;u+=1){var d=c.names[u];if(c.name)f.push(i[c.name][d]);else f.push(i[c.names[u]])}else f.push(i[c.name]);return l.apply(null,f)},r=["v","o","s","i","u","e","p","c","b","t","r","z","a"],o=["i","c","b","a"];return gr=function(s,c){if(c=c||{},s.version==null)s.version=0;if(s.name==null)s.name=" ";s.media.forEach(function(u){if(u.payloads==null)u.payloads=""});var i=c.outerOrder||r,h=c.innerOrder||o,f=[];return i.forEach(function(u){t[u].forEach(function(d){if(d.name in s&&s[d.name]!=null)f.push(n(u,d,s));else if(d.push in s&&s[d.push]!=null)s[d.push].forEach(function(x){f.push(n(u,d,x))})})}),s.media.forEach(function(u){f.push(n("m",t.m[0],u)),h.forEach(function(d){t[d].forEach(function(x){if(x.name in u&&u[x.name]!=null)f.push(n(d,x,u));else if(x.push in u&&u[x.push]!=null)u[x.push].forEach(function(g){f.push(n(d,x,g))})})})}),f.join(`\r
36
+ `)+`\r
37
+ `},gr}function Ib(){if(ni)return Ot;ni=1;var t=Lb(),e=Cb(),l=$o();return Ot.grammar=l,Ot.write=e,Ot.parse=t.parse,Ot.parseParams=t.parseParams,Ot.parseFmtpConfig=t.parseFmtpConfig,Ot.parsePayloads=t.parsePayloads,Ot.parseRemoteCandidates=t.parseRemoteCandidates,Ot.parseImageAttributes=t.parseImageAttributes,Ot.parseSimulcastStreamList=t.parseSimulcastStreamList,Ot}function No(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:50,l=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};var n,r;let o,s=(n=l.isImmediate)!==null&&n!==void 0?n:!1,c=(r=l.callback)!==null&&r!==void 0?r:!1,i=l.maxWait,h=Date.now(),f=[];function u(){if(i!==void 0){let x=Date.now()-h;if(x+e>=i)return i-x}return e}let d=function(){for(var x=arguments.length,g=Array(x),w=0;w<x;w++)g[w]=arguments[w];let p=this;return new Promise((y,$)=>{let E=function(){if(o=void 0,h=Date.now(),!s){let m=t.apply(p,g);c&&c(m),f.forEach((R)=>{let{resolve:M}=R;return M(m)}),f=[]}},A=s&&o===void 0;if(o!==void 0)et.clearTimeout(o);if(o=et.setTimeout(E,u()),A){let m=t.apply(p,g);return c&&c(m),y(m)}f.push({resolve:y,reject:$})})};return d.cancel=function(x){if(o!==void 0)et.clearTimeout(o);f.forEach((g)=>{let{reject:w}=g;return w(x)}),f=[]},d}function ri(t,e,l){let n=Mo(t.mid),r=0;if(t.rtp.some((o)=>{if(o.codec==="opus")return r=o.payload,!0;return!1}),r>0){if(!t.rtcpFb)t.rtcpFb=[];if(l.includes(n)&&!t.rtcpFb.some((o)=>o.payload===r&&o.type==="nack"))t.rtcpFb.push({payload:r,type:"nack"});if(e.includes(n)||e.length===1&&e[0]==="all")t.fmtp.some((o)=>{if(o.payload===r){if(!o.config.includes("stereo=1"))o.config+=";stereo=1";return!0}return!1})}}function Rb(t){var e;let l=[],n=[],r=Nt.parse((e=t.sdp)!==null&&e!==void 0?e:""),o=0;return r.media.forEach((s)=>{var c;let i=Mo(s.mid);if(s.type==="audio"){if(s.rtp.some((h)=>{if(h.codec==="opus")return o=h.payload,!0;return!1}),(c=s.rtcpFb)===null||c===void 0?void 0:c.some((h)=>h.payload===o&&h.type==="nack"))n.push(i);s.fmtp.some((h)=>{if(h.payload===o){if(h.config.includes("sprop-stereo=1"))l.push(i);return!0}return!1})}}),{stereoMids:l,nackMids:n}}function Sl(t){if(t.connection){let e=t.connection.ip.indexOf(":")>=0;if(t.connection.version===4&&e||t.connection.version===6&&!e)t.connection.ip="0.0.0.0",t.connection.version=4}}function Mo(t){return typeof t==="number"?t.toFixed(0):t}class Ur{get needsPublisher(){return this.isPublisherConnectionRequired}get needsSubscriber(){return this.isSubscriberConnectionRequired}get currentState(){return this.state}get mode(){return this._mode}constructor(t,e,l){var n;if(this.peerConnectionTimeout=Ho.peerConnectionTimeout,this.log=O,this.updateState=()=>{var r,o;let s=this.state,c=this.requiredTransports.map((i)=>i.getConnectionState());if(c.every((i)=>i==="connected"))this.state=J.CONNECTED;else if(c.some((i)=>i==="failed"))this.state=J.FAILED;else if(c.some((i)=>i==="connecting"))this.state=J.CONNECTING;else if(c.every((i)=>i==="closed"))this.state=J.CLOSED;else if(c.some((i)=>i==="closed"))this.state=J.CLOSING;else if(c.every((i)=>i==="new"))this.state=J.NEW;if(s!==this.state)this.log.debug("pc state change: from ".concat(J[s]," to ").concat(J[this.state]),this.logContext),(r=this.onStateChange)===null||r===void 0||r.call(this,this.state,this.publisher.getConnectionState(),(o=this.subscriber)===null||o===void 0?void 0:o.getConnectionState())},this.log=pt((n=e.loggerName)!==null&&n!==void 0?n:dt.PCManager),this.loggerOptions=e,this.isPublisherConnectionRequired=t!=="subscriber-primary",this.isSubscriberConnectionRequired=t==="subscriber-primary",this.publisher=new kr(l,e),this._mode=t,t!=="publisher-only")this.subscriber=new kr(l,e),this.subscriber.onConnectionStateChange=this.updateState,this.subscriber.onIceConnectionStateChange=this.updateState,this.subscriber.onSignalingStatechange=this.updateState,this.subscriber.onIceCandidate=(r)=>{var o;(o=this.onIceCandidate)===null||o===void 0||o.call(this,r,St.SUBSCRIBER)},this.subscriber.onDataChannel=(r)=>{var o;(o=this.onDataChannel)===null||o===void 0||o.call(this,r)},this.subscriber.onTrack=(r)=>{var o;(o=this.onTrack)===null||o===void 0||o.call(this,r)};this.publisher.onConnectionStateChange=this.updateState,this.publisher.onIceConnectionStateChange=this.updateState,this.publisher.onSignalingStatechange=this.updateState,this.publisher.onIceCandidate=(r)=>{var o;(o=this.onIceCandidate)===null||o===void 0||o.call(this,r,St.PUBLISHER)},this.publisher.onTrack=(r)=>{var o;(o=this.onTrack)===null||o===void 0||o.call(this,r)},this.publisher.onOffer=(r,o)=>{var s;(s=this.onPublisherOffer)===null||s===void 0||s.call(this,r,o)},this.state=J.NEW,this.connectionLock=new ht,this.remoteOfferLock=new ht}get logContext(){var t,e;return Object.assign({},(e=(t=this.loggerOptions).loggerContextCb)===null||e===void 0?void 0:e.call(t))}requirePublisher(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;this.isPublisherConnectionRequired=t,this.updateState()}createAndSendPublisherOffer(t){return this.publisher.createAndSendOffer(t)}setPublisherAnswer(t,e){return this.publisher.setRemoteDescription(t,e)}removeTrack(t){return this.publisher.removeTrack(t)}close(){return a(this,void 0,void 0,function*(){var t;if(this.publisher&&this.publisher.getSignallingState()!=="closed"){let e=this.publisher;for(let l of e.getSenders())try{if(e.canRemoveTrack())e.removeTrack(l)}catch(n){this.log.warn("could not removeTrack",Object.assign(Object.assign({},this.logContext),{error:n}))}}yield Promise.all([this.publisher.close(),(t=this.subscriber)===null||t===void 0?void 0:t.close()]),this.updateState()})}triggerIceRestart(){return a(this,void 0,void 0,function*(){if(this.subscriber)this.subscriber.restartingIce=!0;if(this.needsPublisher)yield this.createAndSendPublisherOffer({iceRestart:!0})})}addIceCandidate(t,e){return a(this,void 0,void 0,function*(){var l;if(e===St.PUBLISHER)yield this.publisher.addIceCandidate(t);else yield(l=this.subscriber)===null||l===void 0?void 0:l.addIceCandidate(t)})}createSubscriberAnswerFromOffer(t,e){return a(this,void 0,void 0,function*(){var l,n,r;this.log.debug("received server offer",Object.assign(Object.assign({},this.logContext),{RTCSdpType:t.type,sdp:t.sdp,signalingState:(l=this.subscriber)===null||l===void 0?void 0:l.getSignallingState().toString()}));let o=yield this.remoteOfferLock.lock();try{if(!(yield(n=this.subscriber)===null||n===void 0?void 0:n.setRemoteDescription(t,e)))return;return yield(r=this.subscriber)===null||r===void 0?void 0:r.createAndSetAnswer()}finally{o()}})}updateConfiguration(t,e){var l;if(this.publisher.setConfiguration(t),(l=this.subscriber)===null||l===void 0||l.setConfiguration(t),e)this.triggerIceRestart()}ensurePCTransportConnection(t,e){return a(this,void 0,void 0,function*(){var l;let n=yield this.connectionLock.lock();try{if(this.isPublisherConnectionRequired&&this.publisher.getConnectionState()!=="connected"&&this.publisher.getConnectionState()!=="connecting")this.log.debug("negotiation required, start negotiating",this.logContext),this.publisher.negotiate();yield Promise.all((l=this.requiredTransports)===null||l===void 0?void 0:l.map((r)=>this.ensureTransportConnected(r,t,e)))}finally{n()}})}negotiate(t){return a(this,void 0,void 0,function*(){return new ft((e,l)=>a(this,void 0,void 0,function*(){let n=setTimeout(()=>{l(new he("negotiation timed out"))},this.peerConnectionTimeout),r=()=>{clearTimeout(n),this.publisher.off(Ee.NegotiationStarted,s),t.signal.removeEventListener("abort",o)},o=()=>{r(),l(new he("negotiation aborted"))},s=()=>{if(t.signal.aborted)return;clearTimeout(n),n=setTimeout(()=>{r(),l(new he("negotiation timed out"))},this.peerConnectionTimeout)};t.signal.addEventListener("abort",o),this.publisher.on(Ee.NegotiationStarted,s),this.publisher.once(Ee.NegotiationComplete,()=>{r(),e()}),yield this.publisher.negotiate((c)=>{if(r(),c instanceof Error)l(c);else l(Error(String(c)))})}))})}addPublisherTransceiver(t,e){return this.publisher.addTransceiver(t,e)}addPublisherTransceiverOfKind(t,e){return this.publisher.addTransceiverOfKind(t,e)}getMidForReceiver(t){let l=(this.subscriber?this.subscriber.getTransceivers():this.publisher.getTransceivers()).find((n)=>n.receiver===t);return l===null||l===void 0?void 0:l.mid}addPublisherTrack(t){return this.publisher.addTrack(t)}createPublisherDataChannel(t,e){return this.publisher.createDataChannel(t,e)}getConnectedAddress(t){if(t===St.PUBLISHER)return this.publisher.getConnectedAddress();else if(t===St.SUBSCRIBER)return this.publisher.getConnectedAddress();return this.requiredTransports[0].getConnectedAddress()}get requiredTransports(){let t=[];if(this.isPublisherConnectionRequired)t.push(this.publisher);if(this.isSubscriberConnectionRequired&&this.subscriber)t.push(this.subscriber);return t}ensureTransportConnected(t,e){return a(this,arguments,void 0,function(l,n){var r=this;let o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:this.peerConnectionTimeout;return function*(){if(l.getConnectionState()==="connected")return;return new Promise((c,i)=>a(r,void 0,void 0,function*(){let h=()=>{this.log.warn("abort transport connection",this.logContext),et.clearTimeout(f),i(G.cancelled("room connection has been cancelled"))};if(n===null||n===void 0?void 0:n.signal.aborted)h();n===null||n===void 0||n.signal.addEventListener("abort",h);let f=et.setTimeout(()=>{n===null||n===void 0||n.signal.removeEventListener("abort",h),i(G.internal("could not establish pc connection"))},o);while(this.state!==J.CONNECTED)if(yield ut(50),n===null||n===void 0?void 0:n.signal.aborted){i(G.cancelled("room connection has been cancelled"));return}et.clearTimeout(f),n===null||n===void 0||n.signal.removeEventListener("abort",h),c()}))}()})}}class Z{static fetchRegionSettings(t,e,l){return a(this,void 0,void 0,function*(){let n=yield Z.fetchLock.lock();try{let r=yield fetch("".concat(Hb(t),"/regions"),{headers:{authorization:"Bearer ".concat(e)},signal:l});if(r.ok){let o=Ja(r.headers),s=o?o*1000:Fh;return{regionSettings:yield r.json(),updatedAtInMs:Date.now(),maxAgeInMs:s}}else if(r.status===401)throw G.notAllowed("Could not fetch region settings: ".concat(r.statusText),r.status);else throw G.internal("Could not fetch region settings: ".concat(r.statusText))}catch(r){if(r instanceof G)throw r;else if(l===null||l===void 0?void 0:l.aborted)throw G.cancelled("Region fetching was aborted");else throw G.serverUnreachable("Could not fetch region settings, ".concat(r instanceof Error?"".concat(r.name,": ").concat(r.message):r))}finally{n()}})}static scheduleRefetch(t,e,l){return a(this,void 0,void 0,function*(){let n=Z.settingsTimeouts.get(t.hostname);clearTimeout(n),Z.settingsTimeouts.set(t.hostname,setTimeout(()=>a(this,void 0,void 0,function*(){try{let r=yield Z.fetchRegionSettings(t,e);Z.updateCachedRegionSettings(t,e,r)}catch(r){if(r instanceof G&&r.reason===q.NotAllowed){O.debug("token is not valid, cancelling auto region refresh");return}O.debug("auto refetching of region settings failed",{error:r}),Z.scheduleRefetch(t,e,l)}}),l))})}static updateCachedRegionSettings(t,e,l){Z.cache.set(t.hostname,l),Z.scheduleRefetch(t,e,l.maxAgeInMs)}static stopRefetch(t){let e=Z.settingsTimeouts.get(t);if(e)clearTimeout(e),Z.settingsTimeouts.delete(t)}static scheduleCleanup(t){let e=Z.connectionTrackers.get(t);if(!e)return;if(e.cleanupTimeout)clearTimeout(e.cleanupTimeout);e.cleanupTimeout=setTimeout(()=>{let l=Z.connectionTrackers.get(t);if(l&&l.connectionCount===0)O.debug("stopping region refetch after disconnect delay",{hostname:t}),Z.stopRefetch(t);if(l)l.cleanupTimeout=void 0},Mb)}static cancelCleanup(t){let e=Z.connectionTrackers.get(t);if(e===null||e===void 0?void 0:e.cleanupTimeout)clearTimeout(e.cleanupTimeout),e.cleanupTimeout=void 0}notifyConnected(){let t=this.serverUrl.hostname,e=Z.connectionTrackers.get(t);if(!e)e={connectionCount:0},Z.connectionTrackers.set(t,e);e.connectionCount++,Z.cancelCleanup(t)}notifyDisconnected(){let t=this.serverUrl.hostname,e=Z.connectionTrackers.get(t);if(!e)return;if(e.connectionCount=Math.max(0,e.connectionCount-1),e.connectionCount===0)Z.scheduleCleanup(t)}constructor(t,e){this.attemptedRegions=[],this.serverUrl=new URL(t),this.token=e}updateToken(t){this.token=t}isCloud(){return tl(this.serverUrl)}getServerUrl(){return this.serverUrl}fetchRegionSettings(t){return a(this,void 0,void 0,function*(){return Z.fetchRegionSettings(this.serverUrl,this.token,t)})}getNextBestRegionUrl(t){return a(this,void 0,void 0,function*(){if(!this.isCloud())throw Error("region availability is only supported for LiveKit Cloud domains");let e=Z.cache.get(this.serverUrl.hostname);if(!e||Date.now()-e.updatedAtInMs>e.maxAgeInMs)e=yield this.fetchRegionSettings(t),Z.updateCachedRegionSettings(this.serverUrl,this.token,e);let l=e.regionSettings.regions.filter((n)=>!this.attemptedRegions.find((r)=>r.url===n.url));if(l.length>0){let n=l[0];return this.attemptedRegions.push(n),O.debug("next region: ".concat(n.region)),n.url}else return null})}resetAttempts(){this.attemptedRegions=[]}setServerReportedRegions(t){Z.updateCachedRegionSettings(this.serverUrl,this.token,t)}}function Hb(t){return"".concat(t.protocol.replace("ws","http"),"//").concat(t.host,"/settings")}function Eo(t){return new TextEncoder().encode(t).length}function oi(t,e){if(Eo(t)<=e)return t;let l=0,n=t.length,r=new TextEncoder;while(l<n){let o=Math.floor((l+n+1)/2);if(r.encode(t.slice(0,o)).length<=e)l=o;else n=o-1}return t.slice(0,l)}function Xn(t,e){if(!e)return 0;let l,n;if("bytesReceived"in t)l=t.bytesReceived,n=e.bytesReceived;else if("bytesSent"in t)l=t.bytesSent,n=e.bytesSent;if(l===void 0||n===void 0||t.timestamp===void 0||e.timestamp===void 0)return 0;return(l-n)*8*1000/(t.timestamp-e.timestamp)}class Ph{constructor(){throw Error("MediaRecorder is not available in this environment")}}function Vb(){return Xo}function zb(t,e,l){switch(t.kind){case"audio":return new ze(t,e,!1,void 0,l);case"video":return new Oe(t,e,!1,l);default:throw new Xt("unsupported track type: ".concat(t.kind))}}function _r(t,e,l,n){var r,o;let s=n===null||n===void 0?void 0:n.videoEncoding;if(t)s=n===null||n===void 0?void 0:n.screenShareEncoding;let c=n===null||n===void 0?void 0:n.simulcast,i=n===null||n===void 0?void 0:n.scalabilityMode,h=n===null||n===void 0?void 0:n.videoCodec;if(!s&&!c&&!i||!e||!l)return[{}];if(!s)s=jb(t,e,l,h),O.debug("using video encoding",s);let f=s.maxFramerate,u=new j(e,l,s.maxBitrate,s.maxFramerate,s.priority);if(i&&Kt(h)){let g=new zo(i),w=[];if(g.spatial>3)throw Error("unsupported scalabilityMode: ".concat(i));let p=At();if(Bl()||Jt()||(p===null||p===void 0?void 0:p.name)==="Chrome"&&kt(p===null||p===void 0?void 0:p.version,"113")<0){let y=g.suffix=="h"?2:3,$=Oa(p);for(let E=0;E<g.spatial;E+=1)w.push({rid:Jr[2-E],maxBitrate:s.maxBitrate/Math.pow(y,E),maxFramerate:u.encoding.maxFramerate,scaleResolutionDownBy:$?Math.pow(2,E):void 0});w[0].scalabilityMode=i}else w.push({maxBitrate:s.maxBitrate,maxFramerate:u.encoding.maxFramerate,scalabilityMode:i});if(u.encoding.priority)w[0].priority=u.encoding.priority,w[0].networkPriority=u.encoding.priority;return O.debug("using svc encoding",{encodings:w}),w}if(!c)return[s];let d=[];if(t)d=(r=ii(n===null||n===void 0?void 0:n.screenShareSimulcastLayers))!==null&&r!==void 0?r:si(t,u);else d=(o=ii(n===null||n===void 0?void 0:n.videoSimulcastLayers))!==null&&o!==void 0?o:si(t,u);let x;if(d.length>0){let g=d[0];if(d.length>1)[,x]=d;let w=Math.max(e,l);if(w>=960&&x)return wr(e,l,[g,x,u],f);if(w>=480)return wr(e,l,[g,u],f)}return wr(e,l,[u])}function Kb(t,e,l){var n,r,o,s;if(!l.backupCodec||l.backupCodec===!0||l.backupCodec.codec===l.videoCodec)return;if(e!==l.backupCodec.codec)O.warn("requested a different codec than specified as backup",{serverRequested:e,backup:l.backupCodec.codec});l.videoCodec=e,l.videoEncoding=l.backupCodec.encoding;let c=t.mediaStreamTrack.getSettings(),i=(n=c.width)!==null&&n!==void 0?n:(r=t.dimensions)===null||r===void 0?void 0:r.width,h=(o=c.height)!==null&&o!==void 0?o:(s=t.dimensions)===null||s===void 0?void 0:s.height;if(t.source===L.Source.ScreenShare&&l.simulcast)l.simulcast=!1;return _r(t.source===L.Source.ScreenShare,i,h,l)}function jb(t,e,l,n){let r=qb(t,e,l),{encoding:o}=r[0],s=Math.max(e,l);for(let c=0;c<r.length;c+=1){let i=r[c];if(o=i.encoding,i.width>=s)break}if(n)switch(n){case"av1":case"h265":o=Object.assign({},o),o.maxBitrate=o.maxBitrate*0.7;break;case"vp9":o=Object.assign({},o),o.maxBitrate=o.maxBitrate*0.85;break}return o}function qb(t,e,l){if(t)return Yb;let n=e>l?e/l:l/e;if(Math.abs(n-1.7777777777777777)<Math.abs(n-1.3333333333333333))return Ob;return Db}function si(t,e){if(t)return Zb(e);let{width:l,height:n}=e,r=l>n?l/n:n/l;if(Math.abs(r-1.7777777777777777)<Math.abs(r-1.3333333333333333))return Qb;return Sb}function wr(t,e,l,n){let r=[];if(l.forEach((o,s)=>{if(s>=Jr.length)return;let c=Math.min(t,e),h={rid:Jr[s],scaleResolutionDownBy:Math.max(1,c/Math.min(o.width,o.height)),maxBitrate:o.encoding.maxBitrate},f=n&&o.encoding.maxFramerate?Math.min(n,o.encoding.maxFramerate):o.encoding.maxFramerate;if(f)h.maxFramerate=f;let u=Xe()||s===0;if(o.encoding.priority&&u)h.priority=o.encoding.priority,h.networkPriority=o.encoding.priority;r.push(h)}),Jt()&&Wh()==="ios"){let o=void 0;r.forEach((c)=>{if(!o)o=c.maxFramerate;else if(c.maxFramerate&&c.maxFramerate>o)o=c.maxFramerate});let s=!0;r.forEach((c)=>{var i;if(c.maxFramerate!=o){if(s)s=!1,O.info("Simulcast on iOS React-Native requires all encodings to share the same framerate.");O.info('Setting framerate of encoding "'.concat((i=c.rid)!==null&&i!==void 0?i:"",'" to ').concat(o)),c.maxFramerate=o}})}return r}function ii(t){if(!t)return;return t.sort((e,l)=>{let{encoding:n}=e,{encoding:r}=l;if(n.maxBitrate>r.maxBitrate)return 1;if(n.maxBitrate<r.maxBitrate)return-1;if(n.maxBitrate===r.maxBitrate&&n.maxFramerate&&r.maxFramerate)return n.maxFramerate>r.maxFramerate?1:-1;return 0})}class zo{constructor(t){let e=t.match(/^L(\d)T(\d)(h|_KEY|_KEY_SHIFT){0,1}$/);if(!e)throw Error("invalid scalability mode");if(this.spatial=parseInt(e[1]),this.temporal=parseInt(e[2]),e.length>3)switch(e[3]){case"h":case"_KEY":case"_KEY_SHIFT":this.suffix=e[3]}}toString(){var t;return"L".concat(this.spatial,"T").concat(this.temporal).concat((t=this.suffix)!==null&&t!==void 0?t:"")}}function Tb(t){if(t.source===L.Source.ScreenShare||t.constraints.height&&Me(t.constraints.height)>=1080)return"maintain-resolution";else return"balanced"}function ci(t,e,l,n,r,o,s){return a(this,void 0,void 0,function*(){let c=yield n.lock();o.debug("setPublishingLayersForSender",Object.assign(Object.assign({},s),{sender:t,qualities:l,senderEncodings:e}));try{let i=t.getParameters(),{encodings:h}=i;if(!h)return;if(h.length!==e.length){o.warn("cannot set publishing layers, encodings mismatch",Object.assign(Object.assign({},s),{encodings:h,senderEncodings:e}));return}let f=!1;if(!1);else{if(r){if(l.some((x)=>x.enabled))l.forEach((x)=>x.enabled=!0)}h.forEach((d,x)=>{var g;let w=(g=d.rid)!==null&&g!==void 0?g:"";if(w==="")w="q";let p=Uh(w),y=l.find(($)=>$.quality===p);if(!y)return;if(d.active!==y.enabled){if(f=!0,d.active=y.enabled,o.debug("setting layer ".concat(y.quality," to ").concat(d.active?"enabled":"disabled"),s),Xe())if(y.enabled)d.scaleResolutionDownBy=e[x].scaleResolutionDownBy,d.maxBitrate=e[x].maxBitrate,d.maxFrameRate=e[x].maxFrameRate;else d.scaleResolutionDownBy=4,d.maxBitrate=10,d.maxFrameRate=2}})}if(f)i.encodings=h,o.debug("setting encodings",Object.assign(Object.assign({},s),{encodings:i.encodings})),yield t.setParameters(i)}finally{c()}})}function Uh(t){switch(t){case"f":return It.HIGH;case"h":return It.MEDIUM;case"q":return It.LOW;default:return It.HIGH}}function hi(t,e,l,n){if(!l)return[new we({quality:It.HIGH,width:t,height:e,bitrate:0,ssrc:0})];if(n){let r=l[0].scalabilityMode,o=new zo(r),s=[],c=o.suffix=="h"?1.5:2,i=o.suffix=="h"?2:3;for(let h=0;h<o.spatial;h+=1)s.push(new we({quality:Math.min(It.HIGH,o.spatial-1)-h,width:Math.ceil(t/Math.pow(c,h)),height:Math.ceil(e/Math.pow(c,h)),bitrate:l[0].maxBitrate?Math.ceil(l[0].maxBitrate/Math.pow(i,h)):0,ssrc:0}));return s}return l.map((r)=>{var o,s,c;let i=(o=r.scaleResolutionDownBy)!==null&&o!==void 0?o:1,h=Uh((s=r.rid)!==null&&s!==void 0?s:"");return new we({quality:h,width:Math.ceil(t/i),height:Math.ceil(e/i),bitrate:(c=r.maxBitrate)!==null&&c!==void 0?c:0,ssrc:0})})}function ai(t,e){let l=t.participantIdentity?t.participantIdentity:e.participantIdentity;t.participantIdentity=l,e.participantIdentity=l;let n=t.destinationIdentities.length!==0?t.destinationIdentities:e.destinationIdentities;t.destinationIdentities=n,e.destinationIdentities=n}class Oo{get info(){return this._info}validateBytesReceived(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1;if(typeof this.totalByteSize!=="number"||this.totalByteSize===0)return;if(t&&this.bytesReceived<this.totalByteSize)throw new Lt("Not enough chunk(s) received - expected ".concat(this.totalByteSize," bytes of data total, only received ").concat(this.bytesReceived," bytes"),at.Incomplete);else if(this.bytesReceived>this.totalByteSize)throw new Lt("Extra chunk(s) received - expected ".concat(this.totalByteSize," bytes of data total, received ").concat(this.bytesReceived," bytes"),at.LengthExceeded)}constructor(t,e,l){this.reader=e,this.totalByteSize=l,this._info=t,this.bytesReceived=0}}class tf{constructor(){this.log=O,this.byteStreamControllers=new Map,this.textStreamControllers=new Map,this.byteStreamHandlers=new Map,this.textStreamHandlers=new Map}registerTextStreamHandler(t,e){if(this.textStreamHandlers.has(t))throw new Lt('A text stream handler for topic "'.concat(t,'" has already been set.'),at.HandlerAlreadyRegistered);this.textStreamHandlers.set(t,e)}unregisterTextStreamHandler(t){this.textStreamHandlers.delete(t)}registerByteStreamHandler(t,e){if(this.byteStreamHandlers.has(t))throw new Lt('A byte stream handler for topic "'.concat(t,'" has already been set.'),at.HandlerAlreadyRegistered);this.byteStreamHandlers.set(t,e)}unregisterByteStreamHandler(t){this.byteStreamHandlers.delete(t)}clearControllers(){this.byteStreamControllers.clear(),this.textStreamControllers.clear()}validateParticipantHasNoActiveDataStreams(t){let e=Array.from(this.textStreamControllers.entries()).filter((n)=>n[1].sendingParticipantIdentity===t),l=Array.from(this.byteStreamControllers.entries()).filter((n)=>n[1].sendingParticipantIdentity===t);if(e.length>0||l.length>0){let n=new Lt("Participant ".concat(t," unexpectedly disconnected in the middle of sending data"),at.AbnormalEnd);for(let[r,o]of l)o.controller.error(n),this.byteStreamControllers.delete(r);for(let[r,o]of e)o.controller.error(n),this.textStreamControllers.delete(r)}}handleDataStreamPacket(t,e){return a(this,void 0,void 0,function*(){switch(t.value.case){case"streamHeader":return this.handleStreamHeader(t.value.value,t.participantIdentity,e);case"streamChunk":return this.handleStreamChunk(t.value.value,e);case"streamTrailer":return this.handleStreamTrailer(t.value.value,e);default:throw Error('DataPacket of value "'.concat(t.value.case,'" is not data stream related!'))}})}handleStreamHeader(t,e,l){return a(this,void 0,void 0,function*(){var n;if(t.contentHeader.case==="byteHeader"){let r=this.byteStreamHandlers.get(t.topic);if(!r){this.log.debug("ignoring incoming byte stream due to no handler for topic",t.topic);return}let o,s={id:t.streamId,name:(n=t.contentHeader.value.name)!==null&&n!==void 0?n:"unknown",mimeType:t.mimeType,size:t.totalLength?Number(t.totalLength):void 0,topic:t.topic,timestamp:en(t.timestamp),attributes:t.attributes,encryptionType:l},c=new ReadableStream({start:(i)=>{if(o=i,this.textStreamControllers.has(t.streamId))throw new Lt("A data stream read is already in progress for a stream with id ".concat(t.streamId,"."),at.AlreadyOpened);this.byteStreamControllers.set(t.streamId,{info:s,controller:o,startTime:Date.now(),sendingParticipantIdentity:e})}});r(new _h(s,c,en(t.totalLength)),{identity:e})}else if(t.contentHeader.case==="textHeader"){let r=this.textStreamHandlers.get(t.topic);if(!r){this.log.debug("ignoring incoming text stream due to no handler for topic",t.topic);return}let o,s={id:t.streamId,mimeType:t.mimeType,size:t.totalLength?Number(t.totalLength):void 0,topic:t.topic,timestamp:Number(t.timestamp),attributes:t.attributes,encryptionType:l,attachedStreamIds:t.contentHeader.value.attachedStreamIds},c=new ReadableStream({start:(i)=>{if(o=i,this.textStreamControllers.has(t.streamId))throw new Lt("A data stream read is already in progress for a stream with id ".concat(t.streamId,"."),at.AlreadyOpened);this.textStreamControllers.set(t.streamId,{info:s,controller:o,startTime:Date.now(),sendingParticipantIdentity:e})}});r(new vh(s,c,en(t.totalLength)),{identity:e})}})}handleStreamChunk(t,e){let l=this.byteStreamControllers.get(t.streamId);if(l){if(l.info.encryptionType!==e)l.controller.error(new Lt("Encryption type mismatch for stream ".concat(t.streamId,". Expected ").concat(e,", got ").concat(l.info.encryptionType),at.EncryptionTypeMismatch)),this.byteStreamControllers.delete(t.streamId);else if(t.content.length>0)l.controller.enqueue(t)}let n=this.textStreamControllers.get(t.streamId);if(n){if(n.info.encryptionType!==e)n.controller.error(new Lt("Encryption type mismatch for stream ".concat(t.streamId,". Expected ").concat(e,", got ").concat(n.info.encryptionType),at.EncryptionTypeMismatch)),this.textStreamControllers.delete(t.streamId);else if(t.content.length>0)n.controller.enqueue(t)}}handleStreamTrailer(t,e){let l=this.textStreamControllers.get(t.streamId);if(l)if(l.info.encryptionType!==e)l.controller.error(new Lt("Encryption type mismatch for stream ".concat(t.streamId,". Expected ").concat(e,", got ").concat(l.info.encryptionType),at.EncryptionTypeMismatch));else l.info.attributes=Object.assign(Object.assign({},l.info.attributes),t.attributes),l.controller.close(),this.textStreamControllers.delete(t.streamId);let n=this.byteStreamControllers.get(t.streamId);if(n){if(n.info.encryptionType!==e)n.controller.error(new Lt("Encryption type mismatch for stream ".concat(t.streamId,". Expected ").concat(e,", got ").concat(n.info.encryptionType),at.EncryptionTypeMismatch));else n.info.attributes=Object.assign(Object.assign({},n.info.attributes),t.attributes),n.controller.close();this.byteStreamControllers.delete(t.streamId)}}}class Do{constructor(t,e,l){this.writableStream=t,this.defaultWriter=t.getWriter(),this.onClose=l,this.info=e}write(t){return this.defaultWriter.write(t)}close(){return a(this,void 0,void 0,function*(){var t;yield this.defaultWriter.close(),this.defaultWriter.releaseLock(),(t=this.onClose)===null||t===void 0||t.call(this)})}}class nf{constructor(t,e){this.engine=t,this.log=e}setupEngine(t){this.engine=t}sendText(t,e){return a(this,void 0,void 0,function*(){var l;let n=crypto.randomUUID(),o=new TextEncoder().encode(t).byteLength,s=(l=e===null||e===void 0?void 0:e.attachments)===null||l===void 0?void 0:l.map(()=>crypto.randomUUID()),c=Array(s?s.length+1:1).fill(0),i=(f,u)=>{var d;c[u]=f;let x=c.reduce((g,w)=>g+w,0);(d=e===null||e===void 0?void 0:e.onProgress)===null||d===void 0||d.call(e,x)},h=yield this.streamText({streamId:n,totalSize:o,destinationIdentities:e===null||e===void 0?void 0:e.destinationIdentities,topic:e===null||e===void 0?void 0:e.topic,attachedStreamIds:s,attributes:e===null||e===void 0?void 0:e.attributes});if(yield h.write(t),i(1,0),yield h.close(),(e===null||e===void 0?void 0:e.attachments)&&s)yield Promise.all(e.attachments.map((f,u)=>a(this,void 0,void 0,function*(){return this._sendFile(s[u],f,{topic:e.topic,mimeType:f.type,onProgress:(d)=>{i(d,u+1)}})})));return h.info})}streamText(t){return a(this,void 0,void 0,function*(){var e,l,n;let r=(e=t===null||t===void 0?void 0:t.streamId)!==null&&e!==void 0?e:crypto.randomUUID(),o={id:r,mimeType:"text/plain",timestamp:Date.now(),topic:(l=t===null||t===void 0?void 0:t.topic)!==null&&l!==void 0?l:"",size:t===null||t===void 0?void 0:t.totalSize,attributes:t===null||t===void 0?void 0:t.attributes,encryptionType:((n=this.engine.e2eeManager)===null||n===void 0?void 0:n.isDataChannelEncryptionEnabled)?T.GCM:T.NONE,attachedStreamIds:t===null||t===void 0?void 0:t.attachedStreamIds},s=new sn({streamId:r,mimeType:o.mimeType,topic:o.topic,timestamp:Le(o.timestamp),totalLength:Le(o.size),attributes:o.attributes,contentHeader:{case:"textHeader",value:new fc({version:t===null||t===void 0?void 0:t.version,attachedStreamIds:o.attachedStreamIds,replyToStreamId:t===null||t===void 0?void 0:t.replyToStreamId,operationType:(t===null||t===void 0?void 0:t.type)==="update"?Ir.UPDATE:Ir.CREATE})}}),c=t===null||t===void 0?void 0:t.destinationIdentities,i=new wt({destinationIdentities:c,value:{case:"streamHeader",value:s}});yield this.engine.sendDataPacket(i,D.RELIABLE);let h=0,f=this.engine,u=new WritableStream({write(g){return a(this,void 0,void 0,function*(){for(let w of Ua(g,bi)){let p=new cn({content:w,streamId:r,chunkIndex:Le(h)}),y=new wt({destinationIdentities:c,value:{case:"streamChunk",value:p}});yield f.sendDataPacket(y,D.RELIABLE),h+=1}})},close(){return a(this,void 0,void 0,function*(){let g=new hn({streamId:r}),w=new wt({destinationIdentities:c,value:{case:"streamTrailer",value:g}});yield f.sendDataPacket(w,D.RELIABLE)})},abort(g){console.log("Sink error:",g)}}),d=()=>a(this,void 0,void 0,function*(){yield x.close()});f.once(B.Closing,d);let x=new ef(u,o,()=>this.engine.off(B.Closing,d));return x})}sendFile(t,e){return a(this,void 0,void 0,function*(){let l=crypto.randomUUID();return yield this._sendFile(l,t,e),{id:l}})}_sendFile(t,e,l){return a(this,void 0,void 0,function*(){var n;let r=yield this.streamBytes({streamId:t,totalSize:e.size,name:e.name,mimeType:(n=l===null||l===void 0?void 0:l.mimeType)!==null&&n!==void 0?n:e.type,topic:l===null||l===void 0?void 0:l.topic,destinationIdentities:l===null||l===void 0?void 0:l.destinationIdentities}),o=e.stream().getReader();while(!0){let{done:s,value:c}=yield o.read();if(s)break;yield r.write(c)}return yield r.close(),r.info})}streamBytes(t){return a(this,void 0,void 0,function*(){var e,l,n,r,o;let s=(e=t===null||t===void 0?void 0:t.streamId)!==null&&e!==void 0?e:crypto.randomUUID(),c=t===null||t===void 0?void 0:t.destinationIdentities,i={id:s,mimeType:(l=t===null||t===void 0?void 0:t.mimeType)!==null&&l!==void 0?l:"application/octet-stream",topic:(n=t===null||t===void 0?void 0:t.topic)!==null&&n!==void 0?n:"",timestamp:Date.now(),attributes:t===null||t===void 0?void 0:t.attributes,size:t===null||t===void 0?void 0:t.totalSize,name:(r=t===null||t===void 0?void 0:t.name)!==null&&r!==void 0?r:"unknown",encryptionType:((o=this.engine.e2eeManager)===null||o===void 0?void 0:o.isDataChannelEncryptionEnabled)?T.GCM:T.NONE},h=new sn({totalLength:Le(i.size),mimeType:i.mimeType,streamId:s,topic:i.topic,timestamp:Le(Date.now()),attributes:i.attributes,contentHeader:{case:"byteHeader",value:new uc({name:i.name})}}),f=new wt({destinationIdentities:c,value:{case:"streamHeader",value:h}});yield this.engine.sendDataPacket(f,D.RELIABLE);let u=0,d=new ht,x=this.engine,g=this.log,w=new WritableStream({write(y){return a(this,void 0,void 0,function*(){let $=yield d.lock(),E=0;try{while(E<y.byteLength){let A=y.slice(E,E+bi),m=new wt({destinationIdentities:c,value:{case:"streamChunk",value:new cn({content:A,streamId:s,chunkIndex:Le(u)})}});yield x.sendDataPacket(m,D.RELIABLE),u+=1,E+=A.byteLength}}finally{$()}})},close(){return a(this,void 0,void 0,function*(){let y=new hn({streamId:s}),$=new wt({destinationIdentities:c,value:{case:"streamTrailer",value:y}});yield x.sendDataPacket($,D.RELIABLE)})},abort(y){g.error("Sink error:",y)}});return new lf(w,i)})}}function rf(t){if(t.length===0)return new AbortController().signal;if(t.length===1)return t[0];for(let r of t)if(r.aborted)return r;let e=new AbortController,l=Array(t.length),n=()=>{for(let r of l)r()};return t.forEach((r,o)=>{let s=()=>{e.abort(r.reason),n()};r.addEventListener("abort",s),l[o]=()=>r.removeEventListener("abort",s)}),e.signal}function of(t){let e=new AbortController;return setTimeout(()=>{e.abort(new DOMException("signal timed out after ".concat(t," ms"),"TimeoutError"))},t),e.signal}class Xl{toBinary(){let t=this.toBinaryLengthBytes(),e=new ArrayBuffer(t),l=new DataView(e),n=this.toBinaryInto(l);if(t!==n)throw Error("".concat(this.constructor.name,".toBinary: written bytes (").concat(n," bytes) not equal to allocated array buffer length (").concat(t," bytes)."));return new Uint8Array(e)}}class Qo{constructor(t,e,l){this.trackSymbol=cf,this.isLocal=!1,this.typeSymbol=hf,this.info=t,this.manager=e,this.publisherIdentity=l.publisherIdentity}subscribe(t){try{let[e]=this.manager.openSubscriptionStream(this.info.sid,t===null||t===void 0?void 0:t.signal,t===null||t===void 0?void 0:t.bufferSize);return e}catch(e){throw e}}}class zn{constructor(){this.partial=null}push(t,e){switch(t.header.marker){case k.Single:return this.frameFromSingle(t,e);case k.Start:return this.beginPartial(t,e);case k.Inter:case k.Final:return this.pushToPartial(t)}}reset(){this.partial=null}frameFromSingle(t,e){if(t.header.marker!==k.Single)throw Error("Depacketizer.frameFromSingle: packet.header.marker was not FrameMarker.Single, found ".concat(t.header.marker,"."));if(this.partial)if(e===null||e===void 0?void 0:e.errorOnPartialFrames){let l=this.partial.frameNumber;throw this.reset(),Yt.interrupted(l,t.header.frameNumber.value)}else yr.warn("Data track frame ".concat(this.partial.frameNumber," was interrupted by the start of a new frame, dropping."));return this.reset(),{payload:t.payload,extensions:t.header.extensions}}beginPartial(t,e){if(t.header.marker!==k.Start)throw Error("Depacketizer.beginPartial: packet.header.marker was not FrameMarker.Start, found ".concat(t.header.marker,"."));if(this.partial)if(e===null||e===void 0?void 0:e.errorOnPartialFrames){let n=this.partial.frameNumber;throw this.reset(),Yt.interrupted(n,t.header.frameNumber.value)}else yr.warn("Data track frame ".concat(this.partial.frameNumber," was interrupted by the start of a new frame ").concat(t.header.frameNumber.value,", dropping."));this.reset();let l=t.header.sequence;return this.partial={frameNumber:t.header.frameNumber.value,startSequence:l,extensions:t.header.extensions,payloads:new Map([[l.value,t.payload]])},null}pushToPartial(t){if(t.header.marker!==k.Inter&&t.header.marker!==k.Final)throw Error("Depacketizer.pushToPartial: packet.header.marker was not FrameMarker.Inter or FrameMarker.Final, found ".concat(t.header.marker,"."));if(!this.partial)throw this.reset(),Yt.unknownFrame(t.header.frameNumber.value);if(t.header.frameNumber.value!==this.partial.frameNumber){let e=this.partial.frameNumber;throw this.reset(),Yt.interrupted(e,t.header.frameNumber.value)}if(this.partial.payloads.size>=zn.MAX_BUFFER_PACKETS){let e=this.partial.frameNumber;throw this.reset(),Yt.bufferFull(e)}if(this.partial.payloads.has(t.header.sequence.value))yr.warn("Data track frame ".concat(this.partial.frameNumber," received duplicate packet for sequence ").concat(t.header.sequence.value,", so replacing with newly received packet."));if(this.partial.payloads.set(t.header.sequence.value,t.payload),t.header.marker===k.Final)return this.finalize(this.partial,t.header.sequence.value);return null}finalize(t,e){let l=t.payloads.size,n=0;for(let c of t.payloads.values())n+=c.length;let r=new Uint8Array(n),o=t.startSequence.clone(),s=0;while(!0){let c=t.payloads.get(o.value);if(!c)break;t.payloads.delete(o.value);let i=r.length-s;if(c.length>i)throw Error("Depacketizer.finalize: Expected at least ".concat(c.length," more bytes left in the payload buffer, only got ").concat(i," bytes."));if(r.set(c,s),s+=c.length,o.value!=e){o.increment();continue}return this.reset(),{payload:r,extensions:t.extensions}}throw this.reset(),Yt.incomplete(t.frameNumber,l,e-t.startSequence.value+1)}}class ff{constructor(t){var e;let l=t.e2eeManager!==null;if(t.info.usesE2ee!==l)throw Error("IncomingDataTrackPipeline: DataTrackInfo.usesE2ee must match presence of decryptionProvider");let n=new zn;this.publisherIdentity=t.publisherIdentity,this.e2eeManager=(e=t.e2eeManager)!==null&&e!==void 0?e:null,this.depacketizer=n}updateE2eeManager(t){this.e2eeManager=t}processPacket(t){return a(this,void 0,void 0,function*(){let e=this.depacketize(t);if(!e)return null;let l=yield this.decryptIfNeeded(e);if(!l)return null;return l})}depacketize(t){let e;try{e=this.depacketizer.push(t)}catch(l){return Ar.warn("Data frame depacketize error: ".concat(l)),null}return e}decryptIfNeeded(t){return a(this,void 0,void 0,function*(){var e,l;let n=this.e2eeManager;if(!n)return t;let r=(l=(e=t.extensions)===null||e===void 0?void 0:e.e2ee)!==null&&l!==void 0?l:null;if(!r)return Ar.error("Missing E2EE meta"),null;let o;try{o=yield n.handleEncryptedData(t.payload,r.iv,this.publisherIdentity,r.keyIndex)}catch(s){return Ar.error("Error decrypting packet: ".concat(s)),null}return t.payload=o.payload,t})}}class So{constructor(t,e){this.sequence=Tt.u16(0),this.frameNumber=Tt.u16(0),this.clock=Ie.rtpStartingNow(Fe.rtpRandom()),this.handle=t,this.mtuSizeBytes=e}static computeFrameMarker(t,e){if(e<=1)return k.Single;if(t===0)return k.Start;else if(t===e-1)return k.Final;else return k.Inter}*packetize(t,e){var l;let n=this.frameNumber.getThenIncrement(),r={marker:k.Inter,trackHandle:this.handle,sequence:Tt.u16(0),frameNumber:n,timestamp:(l=e===null||e===void 0?void 0:e.now)!==null&&l!==void 0?l:this.clock.now(),extensions:t.extensions},o=new $l(r).toBinaryLengthBytes();if(o>=this.mtuSizeBytes)throw On.mtuTooShort();let s=this.mtuSizeBytes-o,c=Math.ceil(t.payload.byteLength/s);for(let i=0,h=0;h<t.payload.byteLength;[i,h]=[i+1,h+s]){let f=this.sequence.getThenIncrement(),u=new $l(Object.assign(Object.assign({},r),{marker:So.computeFrameMarker(i,c),sequence:f})),d=Math.min(s,t.payload.byteLength-h),x=new Uint8Array(t.payload.buffer,t.payload.byteOffset+h,d);yield new Gl(u,x)}}}class zl{constructor(t,e){this.trackSymbol=cf,this.isLocal=!0,this.typeSymbol=hf,this.handle=null,this.log=O,this.options=t,this.manager=e,this.log=pt(dt.DataTracks)}static withExplicitHandle(t,e,l){let n=new zl(t,e);return n.handle=l,n}get info(){let t=this.descriptor;if((t===null||t===void 0?void 0:t.type)==="active")return t.info;else return}get descriptor(){return this.handle?this.manager.getDescriptor(this.handle):null}publish(t){return a(this,void 0,void 0,function*(){try{this.handle=yield this.manager.publishRequest(this.options,t)}catch(e){throw e}})}isPublished(){var t;return((t=this.descriptor)===null||t===void 0?void 0:t.type)==="active"&&this.descriptor.publishState!=="unpublished"}tryPush(t){if(!this.handle)throw ge.trackUnpublished();let e=sf.from(t);try{return this.manager.tryProcessAndSend(this.handle,e)}catch(l){throw l}}unpublish(){return a(this,void 0,void 0,function*(){if(!this.handle){O.warn('Data track "'.concat(this.options.name,'" is not published, so unpublishing has no effect.'));return}try{yield this.manager.unpublishRequest(this.handle)}catch(t){throw t}})}}class Dn{constructor(t){this.e2eeManager=t.e2eeManager,this.packetizer=new So(t.info.pubHandle,Dn.TRANSPORT_MTU_BYTES)}updateE2eeManager(t){this.e2eeManager=t}processFrame(t){return ha(this,arguments,function*(){let l=yield _e(this.encryptIfNeeded(t));try{yield _e(yield*fa(Zt(this.packetizer.packetize(l))))}catch(n){if(n instanceof On)throw Nl.packetizer(n);throw n}})}encryptIfNeeded(t){return a(this,void 0,void 0,function*(){if(!this.e2eeManager)return t;let e;try{e=yield this.e2eeManager.encryptData(t.payload)}catch(l){throw Nl.encryption(l)}return t.payload=e.payload,t.extensions.e2ee=new qt(e.keyIndex,e.iv),t})}}class df{get visible(){return this.isPiP||this.isIntersecting}get pictureInPicture(){return this.isPiP}constructor(t,e){this.onVisibilityChanged=(l)=>{var n;let{target:r,isIntersecting:o}=l;if(r===this.element)this.isIntersecting=o,this.isPiP=dl(this.element),this.visibilityChangedAt=Date.now(),(n=this.handleVisibilityChanged)===null||n===void 0||n.call(this)},this.onEnterPiP=()=>{var l,n,r;(n=(l=window.documentPictureInPicture)===null||l===void 0?void 0:l.window)===null||n===void 0||n.addEventListener("pagehide",this.onLeavePiP),this.isPiP=dl(this.element),(r=this.handleVisibilityChanged)===null||r===void 0||r.call(this)},this.onLeavePiP=()=>{var l;this.isPiP=dl(this.element),(l=this.handleVisibilityChanged)===null||l===void 0||l.call(this)},this.element=t,this.isIntersecting=e!==null&&e!==void 0?e:vr(t),this.isPiP=Bt()&&dl(t),this.visibilityChangedAt=0}width(){return this.element.clientWidth}height(){return this.element.clientHeight}observe(){var t,e,l;this.isIntersecting=vr(this.element),this.isPiP=dl(this.element),this.element.handleResize=()=>{var n;(n=this.handleResize)===null||n===void 0||n.call(this)},this.element.handleVisibilityChanged=this.onVisibilityChanged,Ps().observe(this.element),ks().observe(this.element),this.element.addEventListener("enterpictureinpicture",this.onEnterPiP),this.element.addEventListener("leavepictureinpicture",this.onLeavePiP),(t=window.documentPictureInPicture)===null||t===void 0||t.addEventListener("enter",this.onEnterPiP),(l=(e=window.documentPictureInPicture)===null||e===void 0?void 0:e.window)===null||l===void 0||l.addEventListener("pagehide",this.onLeavePiP)}stopObserving(){var t,e,l,n,r;(t=Ps())===null||t===void 0||t.unobserve(this.element),(e=ks())===null||e===void 0||e.unobserve(this.element),this.element.removeEventListener("enterpictureinpicture",this.onEnterPiP),this.element.removeEventListener("leavepictureinpicture",this.onLeavePiP),(l=window.documentPictureInPicture)===null||l===void 0||l.removeEventListener("enter",this.onEnterPiP),(r=(n=window.documentPictureInPicture)===null||n===void 0?void 0:n.window)===null||r===void 0||r.removeEventListener("pagehide",this.onLeavePiP)}}function dl(t){var e,l;if(document.pictureInPictureElement===t)return!0;if((e=window.documentPictureInPicture)===null||e===void 0?void 0:e.window)return vr(t,(l=window.documentPictureInPicture)===null||l===void 0?void 0:l.window);return!1}function vr(t,e){let l=e||window,n=t.offsetTop,r=t.offsetLeft,o=t.offsetWidth,s=t.offsetHeight,{hidden:c}=t,{display:i}=getComputedStyle(t);while(t.offsetParent)t=t.offsetParent,n+=t.offsetTop,r+=t.offsetLeft;return n<l.pageYOffset+l.innerHeight&&r<l.pageXOffset+l.innerWidth&&n+s>l.pageYOffset&&r+o>l.pageXOffset&&!c&&i!=="none"}function Ol(t,e){return a(this,void 0,void 0,function*(){t!==null&&t!==void 0||(t={});let l=!1,{audioProcessor:n,videoProcessor:r,optionsWithoutProcessor:o}=yh(t),s=o.audio,c=o.video;if(n&&typeof o.audio==="object")o.audio.processor=n;if(r&&typeof o.video==="object")o.video.processor=r;if(t.audio&&typeof o.audio==="object"&&typeof o.audio.deviceId==="string"){let u=o.audio.deviceId;o.audio.deviceId={exact:u},l=!0,s=Object.assign(Object.assign({},o.audio),{deviceId:{ideal:u}})}if(o.video&&typeof o.video==="object"&&typeof o.video.deviceId==="string"){let u=o.video.deviceId;o.video.deviceId={exact:u},l=!0,c=Object.assign(Object.assign({},o.video),{deviceId:{ideal:u}})}if(o.audio===!0)o.audio={deviceId:"default"};else if(typeof o.audio==="object"&&o.audio!==null)o.audio=Object.assign(Object.assign({},o.audio),{deviceId:o.audio.deviceId||"default"});if(o.video===!0)o.video={deviceId:"default"};else if(typeof o.video==="object"&&!o.video.deviceId)o.video.deviceId="default";let i=gh(o,qh,Th),h=Lo(i),f=navigator.mediaDevices.getUserMedia(h);if(o.audio)ct.userMediaPromiseMap.set("audioinput",f),f.catch(()=>ct.userMediaPromiseMap.delete("audioinput"));if(o.video)ct.userMediaPromiseMap.set("videoinput",f),f.catch(()=>ct.userMediaPromiseMap.delete("videoinput"));try{let u=yield f;return yield Promise.all(u.getTracks().map((d)=>a(this,void 0,void 0,function*(){let x=d.kind==="audio",g=x?i.audio:i.video;if(typeof g==="boolean"||!g)g={};let w,p=x?h.audio:h.video;if(typeof p!=="boolean")w=p;let y=d.getSettings().deviceId;if((w===null||w===void 0?void 0:w.deviceId)&&Me(w.deviceId)!==y)w.deviceId=y;else if(!w)w={deviceId:y};let $=zb(d,w,e);if($.kind===L.Kind.Video)$.source=L.Source.Camera;else if($.kind===L.Kind.Audio)$.source=L.Source.Microphone;if($.mediaStream=u,Ft($)&&n)yield $.setProcessor(n);else if(ue($)&&r)yield $.setProcessor(r);return $})))}catch(u){if(!l)throw u;return Ol(Object.assign(Object.assign({},t),{audio:s,video:c}),e)}})}function af(t){return a(this,void 0,void 0,function*(){return(yield Ol({audio:!1,video:t!==null&&t!==void 0?t:!0}))[0]})}function bf(t){return a(this,void 0,void 0,function*(){return(yield Ol({audio:t!==null&&t!==void 0?t:!0,video:!1}))[0]})}function hx(t){return a(this,void 0,void 0,function*(){if(t===void 0)t={};if(t.resolution===void 0&&!Ch())t.resolution=Vl.h1080fps30.resolution;if(navigator.mediaDevices.getDisplayMedia===void 0)throw new rl("getDisplayMedia not supported");let e=mh(t),l=yield navigator.mediaDevices.getDisplayMedia(e),n=l.getVideoTracks();if(n.length===0)throw new Xt("no video track found");let r=new Oe(n[0],void 0,!1);r.source=L.Source.ScreenShare;let o=[r];if(l.getAudioTracks().length>0){let s=new ze(l.getAudioTracks()[0],void 0,!1);s.source=L.Source.ScreenShareAudio,o.push(s)}return o})}function fx(t){switch(t){case al.EXCELLENT:return ie.Excellent;case al.GOOD:return ie.Good;case al.POOR:return ie.Poor;case al.LOST:return ie.Lost;default:return ie.Unknown}}function ux(t){var e,l,n;if(!t.participantSid&&!t.participantIdentity)throw Error("Invalid track permission, must provide at least one of participantIdentity and participantSid");return new mc({participantIdentity:(e=t.participantIdentity)!==null&&e!==void 0?e:"",participantSid:(l=t.participantSid)!==null&&l!==void 0?l:"",allTracks:(n=t.allowAll)!==null&&n!==void 0?n:!1,trackSids:t.allowedTrackSids||[]})}function gf(t){return t.map((e)=>{if(!e)return;if(Array.isArray(e))return gf(e);if(typeof e==="object")return"logContext"in e?e.logContext:void 0;return e})}class wf{static toAgentAttributes(t){return JSON.parse(t)}static agentAttributesToJson(t){return JSON.stringify(t)}static toTranscriptionAttributes(t){return JSON.parse(t)}static transcriptionAttributesToJson(t){return JSON.stringify(t)}}function bx(t){let e=t.split(".");if(e.length===4){if(e[0]==="10")return!0;else if(e[0]==="192"&&e[1]==="168")return!0;else if(e[0]==="172"){let l=parseInt(e[1],10);if(l>=16&&l<=31)return!0}}return!1}class Fo{}class ko{}function Q(t,e,l){return(e=gx(e))in t?Object.defineProperty(t,e,{value:l,enumerable:!0,configurable:!0,writable:!0}):t[e]=l,t}function xx(t,e){if(typeof t!="object"||!t)return t;var l=t[Symbol.toPrimitive];if(l!==void 0){var n=l.call(t,e);if(typeof n!="object")return n;throw TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(t)}function gx(t){var e=xx(t,"string");return typeof e=="symbol"?e:e+""}function wx(t){if(Uint8Array.fromBase64)return Uint8Array.fromBase64(t);let e=atob(t),l=new Uint8Array(e.length);for(let n=0;n<e.length;n++)l[n]=e.charCodeAt(n);return l}function mx(t){if(Uint8Array.fromBase64)return Uint8Array.fromBase64(typeof t==="string"?t:eo.decode(t),{alphabet:"base64url"});let e=t;if(e instanceof Uint8Array)e=eo.decode(e);e=e.replace(/-/g,"+").replace(/_/g,"/");try{return wx(e)}catch(l){throw TypeError("The input to be decoded is not correctly encoded.")}}function Ax(t){if(!yx(t)||Object.prototype.toString.call(t)!=="[object Object]")return!1;if(Object.getPrototypeOf(t)===null)return!0;let e=t;while(Object.getPrototypeOf(e)!==null)e=Object.getPrototypeOf(e);return Object.getPrototypeOf(t)===e}function px(t){if(typeof t!=="string")throw new re("JWTs must use Compact JWS serialization, JWT must be a string");let{1:e,length:l}=t.split(".");if(l===5)throw new re("Only JWTs using Compact JWS serialization can be decoded");if(l!==3)throw new re("Invalid JWT");if(!e)throw new re("JWTs must contain a payload");let n;try{n=mx(e)}catch(o){throw new re("Failed to base64url decode the payload")}let r;try{r=JSON.parse(eo.decode(n))}catch(o){throw new re("Failed to parse the decoded payload as JSON")}if(!Ax(r))throw new re("Invalid JWT Claims Set");return r}function Cx(t){let e=Po(t.participantToken);if(!(e===null||e===void 0?void 0:e.nbf)||!(e===null||e===void 0?void 0:e.exp))return!0;let l=new Date,n=e.nbf*lo,r=new Date(n),o=e.exp*lo,s=new Date(o-Lx);return r<=l&&s>l}function Po(t){let e=px(t),{roomConfig:l}=e,n=yo(e,["roomConfig"]);return Object.assign(Object.assign({},n),{roomConfig:e.roomConfig?fn.fromJson(e.roomConfig):void 0})}function Ix(t,e){let l=new Set([...Object.keys(t),...Object.keys(e)]);for(let n of l)switch(n){case"roomName":case"participantName":case"participantIdentity":case"participantMetadata":case"participantAttributes":case"agentName":case"agentMetadata":if(t[n]!==e[n])return!1;break;default:let r=n;throw Error("Options key ".concat(r," not being checked for equality!"))}return!0}function Wx(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};var l;let n=me(t)?t.mediaStreamTrack:t,r=n.getSettings(),o={facingMode:(l=e.defaultFacingMode)!==null&&l!==void 0?l:"user",confidence:"low"};if("facingMode"in r){let s=r.facingMode;if(O.trace("rawFacingMode",{rawFacingMode:s}),s&&typeof s==="string"&&$x(s))o={facingMode:s,confidence:"high"}}if(["low","medium"].includes(o.confidence)){O.trace("Try to get facing mode from device label: (".concat(n.label,")"));let s=Kf(n.label);if(s!==void 0)o=s}return o}function Kf(t){var e;let l=t.trim().toLowerCase();if(l==="")return;if(Wi.has(l))return Wi.get(l);return(e=Array.from(Rx.entries()).find((n)=>{let[r]=n;return l.includes(r)}))===null||e===void 0?void 0:e[1]}function $x(t){return t===void 0||["user","environment","left","right"].includes(t)}var fu,uu=(t,e,l)=>(e in t)?fu(t,e,{enumerable:!0,configurable:!0,writable:!0,value:l}):t[e]=l,ws=(t,e,l)=>uu(t,typeof e!="symbol"?e+"":e,l),du=340282346638528860000000000000000000000,au=-340282346638528860000000000000000000000,bu=4294967295,xu=2147483647,gu=-2147483648,$i,Kl=4294967296,ys=(t)=>{let e=String(t);return"0000000".slice(e.length)+e},P,C,ye,lt,oe,Ln,Di,Ls,Cs,ln,jl,Se,Ws,Rs,qu,Tu,Fu,Fi=(t)=>"".concat(t,"$"),ku=(t)=>{if(Fu.has(t))return Fi(t);return t},Pu=(t)=>{if(Tu.has(t))return Fi(t);return t},b,Ct,Ju,_u,vu,td,ed,ld,nd,Pi,Vt,rt,ro,al,Ll,Gt,pe,Ui,it,Cn,rn,rd,Ve,Ke,Ue,od,T,sd,Ze,In,id,we,Ji,wt,xe,_i,vi,cd,tc,oo,ec,hd,fd,on,so,io,co,lc,nc,rc,oc,sc,ic,cc,Hs,ud,hc,Ir,fc,uc,sn,cn,hn,dd,ad,bd,Br,St,Wr,xd,gd,Es,Rr,Cl,ho,fo,uo,wd,md,yd,Bn,Wn,Ad,pd,ao,Ld,Ae,Cd,Rn,dc,ac,bc,bo,xc,$n,je,gc,xo,wc,Id,Bd,Wd,Rd,$d,Nd,go,Md,Hd,Ed,mc,yc,Vd,Xd,wo,Ac,pc,Pt,Lc,Gd,zd,Od,Dd,Yd,Ce,Qd,Cc,Sd,Zd,$r,Kd,jd,qd,Td,Fd,kd,Pd,Ic,Ud,Nr,Mr,Jd,Nn,Mn,Hn,En,Bc,Vs,Wc,_d,vd,ta,fn,ea,Rc,Fl,na,Xs,El,Je,dt,O,$c,ia,cl=7000,ca,Ql,zs,zt,Nc=!0,Mc=!0,Ys,Qs,Ss,Zs,or,Ks,sh,qe,wa,ma,Or,ih,ft,Aa,sr,pa,La="2.18.1",ch,hh=16,$t,Wt,fh,q,G,rl,Xt,po,U,he,uh,un,dn,at,Lt,be,Il,I,N,B,W,dh,Ia,ah,xh,Dr,an,ve,bn,Vl,Ha=5000,hl,It,L,Ea="|",qs="https://aomediacodec.github.io/av1-rtp-spec/#dependency-descriptor-rtp-header-extension",hr=null,ks=()=>{if(!hr)hr=new ResizeObserver(Ya);return hr},fr=null,Ps=()=>{if(!fr)fr=new IntersectionObserver(Qa,{root:null,rootMargin:"0px"});return fr},ur,fl,Mh="AES-GCM",lb=10,ul="lk_e2ee",nb="LKFrameEncryptionKey",rb,fe,jr,ce,qr,db=2,_s=3,Bo,Oh,yn,Dh,Yh,bb=500,xb=15000,ar="default",Wo=65535,Qh=4294967295,He,el,gb,Tr,ml,wb,F,yb=250,Ot,br,xr,ti,ei,gr,li,ni,Nt,Bb=0.7,Wb=20,Ee,kr,Pr="vp8",$b,qh,Th,Nb,Ho,J,Fh=5000,Mb=30000,_,kh=15360,Vo=2000,Xo,Eb,Go,Xb=1000,Gb=1e4,Gn,ze,Ob,Db,Yb,Qb,Sb,Zb=(t)=>{return[{scaleResolutionDownBy:2,fps:t.encoding.maxFramerate}].map((l)=>{var n,r;return new j(Math.floor(t.width/l.scaleResolutionDownBy),Math.floor(t.height/l.scaleResolutionDownBy),Math.max(150000,Math.floor(t.encoding.maxBitrate/(Math.pow(l.scaleResolutionDownBy,2)*(((n=t.encoding.maxFramerate)!==null&&n!==void 0?n:30)/((r=l.fps)!==null&&r!==void 0?r:30))))),l.fps,t.encoding.priority)})},Jr,Fb=5000,Oe,fi="_lossy",ui="_reliable",di="_data_track",kb=2000,mr="leave-reconnect",Pb=30000,Ub=8192,Jb=262144,_b=3,vb=3,Mt,D,Jh,_h,vh,ef,lf,bi=15000,tt=1,te=2,xi=4,tx=8,gi=0,wi=12,mi=5,ex=7,yi=3,lx=3,Ai=2,pi=1,Li=0,Ci=3,nx=2,Ii=2,rx=1,ox=0,ne,mt,yl,Rl,ll,Yo,jt,qt,ke,sf,cf,hf,$l,k,Gl,yr,Yt,We,Re,Ht,Ar,gt,sx=1e4,ix=16,uf,On,An,Dt,ot,Al,ge,pl,Nl,ee,Bi,cx=1e4,Zo,Yn,Ko,pr=100,jo,Qt,Ml,ie,Qn,qo,to,xf,To,Hl,K,dx=4000,nl,ax,Et,_t,mf,Lr=1e4,yf,Af,pf,Lf,Cf,If,Bf,Wf,eo,bt,Rf,$f,Nf,Mf,Hf,Ef,Vf,re,Xf,Gf,zf,Of,Df,Yf,yx=(t)=>typeof t==="object"&&t!==null,lo=1000,Lx,Uo,Qf,Sf,Jo,Zf,Bx,Wi,Rx;var qf=vf(()=>{fu=Object.defineProperty;$i=Symbol("@bufbuild/protobuf/enum-type");P=Iu();(function(t){t[t.DOUBLE=1]="DOUBLE",t[t.FLOAT=2]="FLOAT",t[t.INT64=3]="INT64",t[t.UINT64=4]="UINT64",t[t.INT32=5]="INT32",t[t.FIXED64=6]="FIXED64",t[t.FIXED32=7]="FIXED32",t[t.BOOL=8]="BOOL",t[t.STRING=9]="STRING",t[t.BYTES=12]="BYTES",t[t.UINT32=13]="UINT32",t[t.SFIXED32=15]="SFIXED32",t[t.SFIXED64=16]="SFIXED64",t[t.SINT32=17]="SINT32",t[t.SINT64=18]="SINT64"})(C||(C={}));(function(t){t[t.BIGINT=0]="BIGINT",t[t.STRING=1]="STRING"})(ye||(ye={}));(function(t){t[t.Varint=0]="Varint",t[t.Bit64=1]="Bit64",t[t.LengthDelimited=2]="LengthDelimited",t[t.StartGroup=3]="StartGroup",t[t.EndGroup=4]="EndGroup",t[t.Bit32=5]="Bit32"})(lt||(lt={}));oe="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""),Ln=[];for(let t=0;t<oe.length;t++)Ln[oe[t].charCodeAt(0)]=t;Ln[45]=oe.indexOf("+");Ln[95]=oe.indexOf("/");Di={dec(t){let e=t.length*3/4;if(t[t.length-2]=="=")e-=2;else if(t[t.length-1]=="=")e-=1;let l=new Uint8Array(e),n=0,r=0,o,s=0;for(let c=0;c<t.length;c++){if(o=Ln[t.charCodeAt(c)],o===void 0)switch(t[c]){case"=":r=0;case`
38
+ `:case"\r":case"\t":case" ":continue;default:throw Error("invalid base64 string.")}switch(r){case 0:s=o,r=1;break;case 1:l[n++]=s<<2|(o&48)>>4,s=o,r=2;break;case 2:l[n++]=(s&15)<<4|(o&60)>>2,s=o,r=3;break;case 3:l[n++]=(s&3)<<6|o,r=0;break}}if(r==1)throw Error("invalid base64 string.");return l.subarray(0,n)},enc(t){let e="",l=0,n,r=0;for(let o=0;o<t.length;o++)switch(n=t[o],l){case 0:e+=oe[n>>2],r=(n&3)<<4,l=1;break;case 1:e+=oe[r|n>>4],r=(n&15)<<2,l=2;break;case 2:e+=oe[r|n>>6],e+=oe[n&63],l=0;break}if(l){if(e+=oe[r],e+="=",l==1)e+="="}return e}};C.DOUBLE,C.FLOAT,C.INT64,C.UINT64,C.INT32,C.UINT32,C.BOOL,C.STRING,C.BYTES;Ls={ignoreUnknownFields:!1},Cs={emitDefaultValues:!1,enumAsInteger:!1,useProtoFieldName:!1,prettySpaces:0};ln=Symbol(),jl=Symbol();Se=Symbol("@bufbuild/protobuf/unknown-fields"),Ws={readUnknownFields:!0,readerFactory:(t)=>new zi(t)},Rs={writeUnknownFields:!0,writerFactory:()=>new Gi};qu=Ti;Tu=new Set(["constructor","toString","toJSON","valueOf"]),Fu=new Set(["getType","clone","equals","fromBinary","fromJson","fromJsonString","toBinary","toJson","toJsonString","toObject"]);b=Ku("proto3",(t)=>{return new ji(t,(e)=>Uu(e))},(t)=>{for(let e of t.getType().fields.byMember()){if(e.opt)continue;let l=e.localName,n=t;if(e.repeated){n[l]=[];continue}switch(e.kind){case"oneof":n[l]={case:void 0};break;case"enum":n[l]=0;break;case"map":n[l]={};break;case"scalar":n[l]=Pe(e.T,e.L);break}}});Ct=class Ct extends pn{constructor(t){super();this.seconds=P.zero,this.nanos=0,b.util.initPartial(t,this)}fromJson(t,e){if(typeof t!=="string")throw Error("cannot decode google.protobuf.Timestamp from JSON: ".concat(b.json.debug(t)));let l=t.match(/^([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})(?:Z|\.([0-9]{3,9})Z|([+-][0-9][0-9]:[0-9][0-9]))$/);if(!l)throw Error("cannot decode google.protobuf.Timestamp from JSON: invalid RFC 3339 string");let n=Date.parse(l[1]+"-"+l[2]+"-"+l[3]+"T"+l[4]+":"+l[5]+":"+l[6]+(l[8]?l[8]:"Z"));if(Number.isNaN(n))throw Error("cannot decode google.protobuf.Timestamp from JSON: invalid RFC 3339 string");if(n<Date.parse("0001-01-01T00:00:00Z")||n>Date.parse("9999-12-31T23:59:59Z"))throw Error("cannot decode message google.protobuf.Timestamp from JSON: must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive");if(this.seconds=P.parse(n/1000),this.nanos=0,l[7])this.nanos=parseInt("1"+l[7]+"0".repeat(9-l[7].length))-1e9;return this}toJson(t){let e=Number(this.seconds)*1000;if(e<Date.parse("0001-01-01T00:00:00Z")||e>Date.parse("9999-12-31T23:59:59Z"))throw Error("cannot encode google.protobuf.Timestamp to JSON: must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive");if(this.nanos<0)throw Error("cannot encode google.protobuf.Timestamp to JSON: nanos must not be negative");let l="Z";if(this.nanos>0){let n=(this.nanos+1e9).toString().substring(1);if(n.substring(3)==="000000")l="."+n.substring(0,3)+"Z";else if(n.substring(6)==="000")l="."+n.substring(0,6)+"Z";else l="."+n+"Z"}return new Date(e).toISOString().replace(".000Z",l)}toDate(){return new Date(Number(this.seconds)*1000+Math.ceil(this.nanos/1e6))}static now(){return Ct.fromDate(new Date)}static fromDate(t){let e=t.getTime();return new Ct({seconds:P.parse(Math.floor(e/1000)),nanos:e%1000*1e6})}static fromBinary(t,e){return new Ct().fromBinary(t,e)}static fromJson(t,e){return new Ct().fromJson(t,e)}static fromJsonString(t,e){return new Ct().fromJsonString(t,e)}static equals(t,e){return b.util.equals(Ct,t,e)}};Ct.runtime=b;Ct.typeName="google.protobuf.Timestamp";Ct.fields=b.util.newFieldList(()=>[{no:1,name:"seconds",kind:"scalar",T:3},{no:2,name:"nanos",kind:"scalar",T:5}]);Ju=b.makeMessageType("livekit.MetricsBatch",()=>[{no:1,name:"timestamp_ms",kind:"scalar",T:3},{no:2,name:"normalized_timestamp",kind:"message",T:Ct},{no:3,name:"str_data",kind:"scalar",T:9,repeated:!0},{no:4,name:"time_series",kind:"message",T:_u,repeated:!0},{no:5,name:"events",kind:"message",T:td,repeated:!0}]),_u=b.makeMessageType("livekit.TimeSeriesMetric",()=>[{no:1,name:"label",kind:"scalar",T:13},{no:2,name:"participant_identity",kind:"scalar",T:13},{no:3,name:"track_sid",kind:"scalar",T:13},{no:4,name:"samples",kind:"message",T:vu,repeated:!0},{no:5,name:"rid",kind:"scalar",T:13}]),vu=b.makeMessageType("livekit.MetricSample",()=>[{no:1,name:"timestamp_ms",kind:"scalar",T:3},{no:2,name:"normalized_timestamp",kind:"message",T:Ct},{no:3,name:"value",kind:"scalar",T:2}]),td=b.makeMessageType("livekit.EventMetric",()=>[{no:1,name:"label",kind:"scalar",T:13},{no:2,name:"participant_identity",kind:"scalar",T:13},{no:3,name:"track_sid",kind:"scalar",T:13},{no:4,name:"start_timestamp_ms",kind:"scalar",T:3},{no:5,name:"end_timestamp_ms",kind:"scalar",T:3,opt:!0},{no:6,name:"normalized_start_timestamp",kind:"message",T:Ct},{no:7,name:"normalized_end_timestamp",kind:"message",T:Ct,opt:!0},{no:8,name:"metadata",kind:"scalar",T:9},{no:9,name:"rid",kind:"scalar",T:13}]),ed=b.makeEnum("livekit.AudioCodec",[{no:0,name:"DEFAULT_AC"},{no:1,name:"OPUS"},{no:2,name:"AAC"},{no:3,name:"AC_MP3"}]),ld=b.makeEnum("livekit.VideoCodec",[{no:0,name:"DEFAULT_VC"},{no:1,name:"H264_BASELINE"},{no:2,name:"H264_MAIN"},{no:3,name:"H264_HIGH"},{no:4,name:"VP8"}]),nd=b.makeEnum("livekit.ImageCodec",[{no:0,name:"IC_DEFAULT"},{no:1,name:"IC_JPEG"}]),Pi=b.makeEnum("livekit.BackupCodecPolicy",[{no:0,name:"PREFER_REGRESSION"},{no:1,name:"SIMULCAST"},{no:2,name:"REGRESSION"}]),Vt=b.makeEnum("livekit.TrackType",[{no:0,name:"AUDIO"},{no:1,name:"VIDEO"},{no:2,name:"DATA"}]),rt=b.makeEnum("livekit.TrackSource",[{no:0,name:"UNKNOWN"},{no:1,name:"CAMERA"},{no:2,name:"MICROPHONE"},{no:3,name:"SCREEN_SHARE"},{no:4,name:"SCREEN_SHARE_AUDIO"}]),ro=b.makeEnum("livekit.VideoQuality",[{no:0,name:"LOW"},{no:1,name:"MEDIUM"},{no:2,name:"HIGH"},{no:3,name:"OFF"}]),al=b.makeEnum("livekit.ConnectionQuality",[{no:0,name:"POOR"},{no:1,name:"GOOD"},{no:2,name:"EXCELLENT"},{no:3,name:"LOST"}]),Ll=b.makeEnum("livekit.ClientConfigSetting",[{no:0,name:"UNSET"},{no:1,name:"DISABLED"},{no:2,name:"ENABLED"}]),Gt=b.makeEnum("livekit.DisconnectReason",[{no:0,name:"UNKNOWN_REASON"},{no:1,name:"CLIENT_INITIATED"},{no:2,name:"DUPLICATE_IDENTITY"},{no:3,name:"SERVER_SHUTDOWN"},{no:4,name:"PARTICIPANT_REMOVED"},{no:5,name:"ROOM_DELETED"},{no:6,name:"STATE_MISMATCH"},{no:7,name:"JOIN_FAILURE"},{no:8,name:"MIGRATION"},{no:9,name:"SIGNAL_CLOSE"},{no:10,name:"ROOM_CLOSED"},{no:11,name:"USER_UNAVAILABLE"},{no:12,name:"USER_REJECTED"},{no:13,name:"SIP_TRUNK_FAILURE"},{no:14,name:"CONNECTION_TIMEOUT"},{no:15,name:"MEDIA_FAILURE"}]),pe=b.makeEnum("livekit.ReconnectReason",[{no:0,name:"RR_UNKNOWN"},{no:1,name:"RR_SIGNAL_DISCONNECTED"},{no:2,name:"RR_PUBLISHER_FAILED"},{no:3,name:"RR_SUBSCRIBER_FAILED"},{no:4,name:"RR_SWITCH_CANDIDATE"}]),Ui=b.makeEnum("livekit.SubscriptionError",[{no:0,name:"SE_UNKNOWN"},{no:1,name:"SE_CODEC_UNSUPPORTED"},{no:2,name:"SE_TRACK_NOTFOUND"}]),it=b.makeEnum("livekit.AudioTrackFeature",[{no:0,name:"TF_STEREO"},{no:1,name:"TF_NO_DTX"},{no:2,name:"TF_AUTO_GAIN_CONTROL"},{no:3,name:"TF_ECHO_CANCELLATION"},{no:4,name:"TF_NOISE_SUPPRESSION"},{no:5,name:"TF_ENHANCED_NOISE_CANCELLATION"},{no:6,name:"TF_PRECONNECT_BUFFER"}]),Cn=b.makeMessageType("livekit.Room",()=>[{no:1,name:"sid",kind:"scalar",T:9},{no:2,name:"name",kind:"scalar",T:9},{no:3,name:"empty_timeout",kind:"scalar",T:13},{no:14,name:"departure_timeout",kind:"scalar",T:13},{no:4,name:"max_participants",kind:"scalar",T:13},{no:5,name:"creation_time",kind:"scalar",T:3},{no:15,name:"creation_time_ms",kind:"scalar",T:3},{no:6,name:"turn_password",kind:"scalar",T:9},{no:7,name:"enabled_codecs",kind:"message",T:rn,repeated:!0},{no:8,name:"metadata",kind:"scalar",T:9},{no:9,name:"num_participants",kind:"scalar",T:13},{no:11,name:"num_publishers",kind:"scalar",T:13},{no:10,name:"active_recording",kind:"scalar",T:8},{no:13,name:"version",kind:"message",T:hc}]),rn=b.makeMessageType("livekit.Codec",()=>[{no:1,name:"mime",kind:"scalar",T:9},{no:2,name:"fmtp_line",kind:"scalar",T:9}]),rd=b.makeMessageType("livekit.ParticipantPermission",()=>[{no:1,name:"can_subscribe",kind:"scalar",T:8},{no:2,name:"can_publish",kind:"scalar",T:8},{no:3,name:"can_publish_data",kind:"scalar",T:8},{no:9,name:"can_publish_sources",kind:"enum",T:b.getEnumType(rt),repeated:!0},{no:7,name:"hidden",kind:"scalar",T:8},{no:8,name:"recorder",kind:"scalar",T:8},{no:10,name:"can_update_metadata",kind:"scalar",T:8},{no:11,name:"agent",kind:"scalar",T:8},{no:12,name:"can_subscribe_metrics",kind:"scalar",T:8}]),Ve=b.makeMessageType("livekit.ParticipantInfo",()=>[{no:1,name:"sid",kind:"scalar",T:9},{no:2,name:"identity",kind:"scalar",T:9},{no:3,name:"state",kind:"enum",T:b.getEnumType(Ke)},{no:4,name:"tracks",kind:"message",T:Ze,repeated:!0},{no:5,name:"metadata",kind:"scalar",T:9},{no:6,name:"joined_at",kind:"scalar",T:3},{no:17,name:"joined_at_ms",kind:"scalar",T:3},{no:9,name:"name",kind:"scalar",T:9},{no:10,name:"version",kind:"scalar",T:13},{no:11,name:"permission",kind:"message",T:rd},{no:12,name:"region",kind:"scalar",T:9},{no:13,name:"is_publisher",kind:"scalar",T:8},{no:14,name:"kind",kind:"enum",T:b.getEnumType(Ue)},{no:15,name:"attributes",kind:"map",K:9,V:{kind:"scalar",T:9}},{no:16,name:"disconnect_reason",kind:"enum",T:b.getEnumType(Gt)},{no:18,name:"kind_details",kind:"enum",T:b.getEnumType(od),repeated:!0},{no:19,name:"data_tracks",kind:"message",T:In,repeated:!0}]),Ke=b.makeEnum("livekit.ParticipantInfo.State",[{no:0,name:"JOINING"},{no:1,name:"JOINED"},{no:2,name:"ACTIVE"},{no:3,name:"DISCONNECTED"}]),Ue=b.makeEnum("livekit.ParticipantInfo.Kind",[{no:0,name:"STANDARD"},{no:1,name:"INGRESS"},{no:2,name:"EGRESS"},{no:3,name:"SIP"},{no:4,name:"AGENT"},{no:7,name:"CONNECTOR"},{no:8,name:"BRIDGE"}]),od=b.makeEnum("livekit.ParticipantInfo.KindDetail",[{no:0,name:"CLOUD_AGENT"},{no:1,name:"FORWARDED"},{no:2,name:"CONNECTOR_WHATSAPP"},{no:3,name:"CONNECTOR_TWILIO"},{no:4,name:"BRIDGE_RTSP"}]),T=b.makeEnum("livekit.Encryption.Type",[{no:0,name:"NONE"},{no:1,name:"GCM"},{no:2,name:"CUSTOM"}]),sd=b.makeMessageType("livekit.SimulcastCodecInfo",()=>[{no:1,name:"mime_type",kind:"scalar",T:9},{no:2,name:"mid",kind:"scalar",T:9},{no:3,name:"cid",kind:"scalar",T:9},{no:4,name:"layers",kind:"message",T:we,repeated:!0},{no:5,name:"video_layer_mode",kind:"enum",T:b.getEnumType(Ji)},{no:6,name:"sdp_cid",kind:"scalar",T:9}]),Ze=b.makeMessageType("livekit.TrackInfo",()=>[{no:1,name:"sid",kind:"scalar",T:9},{no:2,name:"type",kind:"enum",T:b.getEnumType(Vt)},{no:3,name:"name",kind:"scalar",T:9},{no:4,name:"muted",kind:"scalar",T:8},{no:5,name:"width",kind:"scalar",T:13},{no:6,name:"height",kind:"scalar",T:13},{no:7,name:"simulcast",kind:"scalar",T:8},{no:8,name:"disable_dtx",kind:"scalar",T:8},{no:9,name:"source",kind:"enum",T:b.getEnumType(rt)},{no:10,name:"layers",kind:"message",T:we,repeated:!0},{no:11,name:"mime_type",kind:"scalar",T:9},{no:12,name:"mid",kind:"scalar",T:9},{no:13,name:"codecs",kind:"message",T:sd,repeated:!0},{no:14,name:"stereo",kind:"scalar",T:8},{no:15,name:"disable_red",kind:"scalar",T:8},{no:16,name:"encryption",kind:"enum",T:b.getEnumType(T)},{no:17,name:"stream",kind:"scalar",T:9},{no:18,name:"version",kind:"message",T:hc},{no:19,name:"audio_features",kind:"enum",T:b.getEnumType(it),repeated:!0},{no:20,name:"backup_codec_policy",kind:"enum",T:b.getEnumType(Pi)}]),In=b.makeMessageType("livekit.DataTrackInfo",()=>[{no:1,name:"pub_handle",kind:"scalar",T:13},{no:2,name:"sid",kind:"scalar",T:9},{no:3,name:"name",kind:"scalar",T:9},{no:4,name:"encryption",kind:"enum",T:b.getEnumType(T)}]),id=b.makeMessageType("livekit.DataTrackSubscriptionOptions",()=>[{no:1,name:"target_fps",kind:"scalar",T:13,opt:!0}]),we=b.makeMessageType("livekit.VideoLayer",()=>[{no:1,name:"quality",kind:"enum",T:b.getEnumType(ro)},{no:2,name:"width",kind:"scalar",T:13},{no:3,name:"height",kind:"scalar",T:13},{no:4,name:"bitrate",kind:"scalar",T:13},{no:5,name:"ssrc",kind:"scalar",T:13},{no:6,name:"spatial_layer",kind:"scalar",T:5},{no:7,name:"rid",kind:"scalar",T:9},{no:8,name:"repair_ssrc",kind:"scalar",T:13}]),Ji=b.makeEnum("livekit.VideoLayer.Mode",[{no:0,name:"MODE_UNUSED"},{no:1,name:"ONE_SPATIAL_LAYER_PER_STREAM"},{no:2,name:"MULTIPLE_SPATIAL_LAYERS_PER_STREAM"},{no:3,name:"ONE_SPATIAL_LAYER_PER_STREAM_INCOMPLETE_RTCP_SR"}]),wt=b.makeMessageType("livekit.DataPacket",()=>[{no:1,name:"kind",kind:"enum",T:b.getEnumType(xe)},{no:4,name:"participant_identity",kind:"scalar",T:9},{no:5,name:"destination_identities",kind:"scalar",T:9,repeated:!0},{no:2,name:"user",kind:"message",T:oo,oneof:"value"},{no:3,name:"speaker",kind:"message",T:cd,oneof:"value"},{no:6,name:"sip_dtmf",kind:"message",T:ec,oneof:"value"},{no:7,name:"transcription",kind:"message",T:hd,oneof:"value"},{no:8,name:"metrics",kind:"message",T:Ju,oneof:"value"},{no:9,name:"chat_message",kind:"message",T:on,oneof:"value"},{no:10,name:"rpc_request",kind:"message",T:so,oneof:"value"},{no:11,name:"rpc_ack",kind:"message",T:io,oneof:"value"},{no:12,name:"rpc_response",kind:"message",T:co,oneof:"value"},{no:13,name:"stream_header",kind:"message",T:sn,oneof:"value"},{no:14,name:"stream_chunk",kind:"message",T:cn,oneof:"value"},{no:15,name:"stream_trailer",kind:"message",T:hn,oneof:"value"},{no:18,name:"encrypted_packet",kind:"message",T:_i,oneof:"value"},{no:16,name:"sequence",kind:"scalar",T:13},{no:17,name:"participant_sid",kind:"scalar",T:9}]),xe=b.makeEnum("livekit.DataPacket.Kind",[{no:0,name:"RELIABLE"},{no:1,name:"LOSSY"}]),_i=b.makeMessageType("livekit.EncryptedPacket",()=>[{no:1,name:"encryption_type",kind:"enum",T:b.getEnumType(T)},{no:2,name:"iv",kind:"scalar",T:12},{no:3,name:"key_index",kind:"scalar",T:13},{no:4,name:"encrypted_value",kind:"scalar",T:12}]),vi=b.makeMessageType("livekit.EncryptedPacketPayload",()=>[{no:1,name:"user",kind:"message",T:oo,oneof:"value"},{no:3,name:"chat_message",kind:"message",T:on,oneof:"value"},{no:4,name:"rpc_request",kind:"message",T:so,oneof:"value"},{no:5,name:"rpc_ack",kind:"message",T:io,oneof:"value"},{no:6,name:"rpc_response",kind:"message",T:co,oneof:"value"},{no:7,name:"stream_header",kind:"message",T:sn,oneof:"value"},{no:8,name:"stream_chunk",kind:"message",T:cn,oneof:"value"},{no:9,name:"stream_trailer",kind:"message",T:hn,oneof:"value"}]),cd=b.makeMessageType("livekit.ActiveSpeakerUpdate",()=>[{no:1,name:"speakers",kind:"message",T:tc,repeated:!0}]),tc=b.makeMessageType("livekit.SpeakerInfo",()=>[{no:1,name:"sid",kind:"scalar",T:9},{no:2,name:"level",kind:"scalar",T:2},{no:3,name:"active",kind:"scalar",T:8}]),oo=b.makeMessageType("livekit.UserPacket",()=>[{no:1,name:"participant_sid",kind:"scalar",T:9},{no:5,name:"participant_identity",kind:"scalar",T:9},{no:2,name:"payload",kind:"scalar",T:12},{no:3,name:"destination_sids",kind:"scalar",T:9,repeated:!0},{no:6,name:"destination_identities",kind:"scalar",T:9,repeated:!0},{no:4,name:"topic",kind:"scalar",T:9,opt:!0},{no:8,name:"id",kind:"scalar",T:9,opt:!0},{no:9,name:"start_time",kind:"scalar",T:4,opt:!0},{no:10,name:"end_time",kind:"scalar",T:4,opt:!0},{no:11,name:"nonce",kind:"scalar",T:12}]),ec=b.makeMessageType("livekit.SipDTMF",()=>[{no:3,name:"code",kind:"scalar",T:13},{no:4,name:"digit",kind:"scalar",T:9}]),hd=b.makeMessageType("livekit.Transcription",()=>[{no:2,name:"transcribed_participant_identity",kind:"scalar",T:9},{no:3,name:"track_id",kind:"scalar",T:9},{no:4,name:"segments",kind:"message",T:fd,repeated:!0}]),fd=b.makeMessageType("livekit.TranscriptionSegment",()=>[{no:1,name:"id",kind:"scalar",T:9},{no:2,name:"text",kind:"scalar",T:9},{no:3,name:"start_time",kind:"scalar",T:4},{no:4,name:"end_time",kind:"scalar",T:4},{no:5,name:"final",kind:"scalar",T:8},{no:6,name:"language",kind:"scalar",T:9}]),on=b.makeMessageType("livekit.ChatMessage",()=>[{no:1,name:"id",kind:"scalar",T:9},{no:2,name:"timestamp",kind:"scalar",T:3},{no:3,name:"edit_timestamp",kind:"scalar",T:3,opt:!0},{no:4,name:"message",kind:"scalar",T:9},{no:5,name:"deleted",kind:"scalar",T:8},{no:6,name:"generated",kind:"scalar",T:8}]),so=b.makeMessageType("livekit.RpcRequest",()=>[{no:1,name:"id",kind:"scalar",T:9},{no:2,name:"method",kind:"scalar",T:9},{no:3,name:"payload",kind:"scalar",T:9},{no:4,name:"response_timeout_ms",kind:"scalar",T:13},{no:5,name:"version",kind:"scalar",T:13}]),io=b.makeMessageType("livekit.RpcAck",()=>[{no:1,name:"request_id",kind:"scalar",T:9}]),co=b.makeMessageType("livekit.RpcResponse",()=>[{no:1,name:"request_id",kind:"scalar",T:9},{no:2,name:"payload",kind:"scalar",T:9,oneof:"value"},{no:3,name:"error",kind:"message",T:lc,oneof:"value"}]),lc=b.makeMessageType("livekit.RpcError",()=>[{no:1,name:"code",kind:"scalar",T:13},{no:2,name:"message",kind:"scalar",T:9},{no:3,name:"data",kind:"scalar",T:9}]),nc=b.makeMessageType("livekit.ParticipantTracks",()=>[{no:1,name:"participant_sid",kind:"scalar",T:9},{no:2,name:"track_sids",kind:"scalar",T:9,repeated:!0}]),rc=b.makeMessageType("livekit.ServerInfo",()=>[{no:1,name:"edition",kind:"enum",T:b.getEnumType(oc)},{no:2,name:"version",kind:"scalar",T:9},{no:3,name:"protocol",kind:"scalar",T:5},{no:4,name:"region",kind:"scalar",T:9},{no:5,name:"node_id",kind:"scalar",T:9},{no:6,name:"debug_info",kind:"scalar",T:9},{no:7,name:"agent_protocol",kind:"scalar",T:5}]),oc=b.makeEnum("livekit.ServerInfo.Edition",[{no:0,name:"Standard"},{no:1,name:"Cloud"}]),sc=b.makeMessageType("livekit.ClientInfo",()=>[{no:1,name:"sdk",kind:"enum",T:b.getEnumType(ic)},{no:2,name:"version",kind:"scalar",T:9},{no:3,name:"protocol",kind:"scalar",T:5},{no:4,name:"os",kind:"scalar",T:9},{no:5,name:"os_version",kind:"scalar",T:9},{no:6,name:"device_model",kind:"scalar",T:9},{no:7,name:"browser",kind:"scalar",T:9},{no:8,name:"browser_version",kind:"scalar",T:9},{no:9,name:"address",kind:"scalar",T:9},{no:10,name:"network",kind:"scalar",T:9},{no:11,name:"other_sdks",kind:"scalar",T:9}]),ic=b.makeEnum("livekit.ClientInfo.SDK",[{no:0,name:"UNKNOWN"},{no:1,name:"JS"},{no:2,name:"SWIFT"},{no:3,name:"ANDROID"},{no:4,name:"FLUTTER"},{no:5,name:"GO"},{no:6,name:"UNITY"},{no:7,name:"REACT_NATIVE"},{no:8,name:"RUST"},{no:9,name:"PYTHON"},{no:10,name:"CPP"},{no:11,name:"UNITY_WEB"},{no:12,name:"NODE"},{no:13,name:"UNREAL"},{no:14,name:"ESP32"}]),cc=b.makeMessageType("livekit.ClientConfiguration",()=>[{no:1,name:"video",kind:"message",T:Hs},{no:2,name:"screen",kind:"message",T:Hs},{no:3,name:"resume_connection",kind:"enum",T:b.getEnumType(Ll)},{no:4,name:"disabled_codecs",kind:"message",T:ud},{no:5,name:"force_relay",kind:"enum",T:b.getEnumType(Ll)}]),Hs=b.makeMessageType("livekit.VideoConfiguration",()=>[{no:1,name:"hardware_encoder",kind:"enum",T:b.getEnumType(Ll)}]),ud=b.makeMessageType("livekit.DisabledCodecs",()=>[{no:1,name:"codecs",kind:"message",T:rn,repeated:!0},{no:2,name:"publish",kind:"message",T:rn,repeated:!0}]),hc=b.makeMessageType("livekit.TimedVersion",()=>[{no:1,name:"unix_micro",kind:"scalar",T:3},{no:2,name:"ticks",kind:"scalar",T:5}]),Ir=b.makeEnum("livekit.DataStream.OperationType",[{no:0,name:"CREATE"},{no:1,name:"UPDATE"},{no:2,name:"DELETE"},{no:3,name:"REACTION"}]),fc=b.makeMessageType("livekit.DataStream.TextHeader",()=>[{no:1,name:"operation_type",kind:"enum",T:b.getEnumType(Ir)},{no:2,name:"version",kind:"scalar",T:5},{no:3,name:"reply_to_stream_id",kind:"scalar",T:9},{no:4,name:"attached_stream_ids",kind:"scalar",T:9,repeated:!0},{no:5,name:"generated",kind:"scalar",T:8}],{localName:"DataStream_TextHeader"}),uc=b.makeMessageType("livekit.DataStream.ByteHeader",()=>[{no:1,name:"name",kind:"scalar",T:9}],{localName:"DataStream_ByteHeader"}),sn=b.makeMessageType("livekit.DataStream.Header",()=>[{no:1,name:"stream_id",kind:"scalar",T:9},{no:2,name:"timestamp",kind:"scalar",T:3},{no:3,name:"topic",kind:"scalar",T:9},{no:4,name:"mime_type",kind:"scalar",T:9},{no:5,name:"total_length",kind:"scalar",T:4,opt:!0},{no:7,name:"encryption_type",kind:"enum",T:b.getEnumType(T)},{no:8,name:"attributes",kind:"map",K:9,V:{kind:"scalar",T:9}},{no:9,name:"text_header",kind:"message",T:fc,oneof:"content_header"},{no:10,name:"byte_header",kind:"message",T:uc,oneof:"content_header"}],{localName:"DataStream_Header"}),cn=b.makeMessageType("livekit.DataStream.Chunk",()=>[{no:1,name:"stream_id",kind:"scalar",T:9},{no:2,name:"chunk_index",kind:"scalar",T:4},{no:3,name:"content",kind:"scalar",T:12},{no:4,name:"version",kind:"scalar",T:5},{no:5,name:"iv",kind:"scalar",T:12,opt:!0}],{localName:"DataStream_Chunk"}),hn=b.makeMessageType("livekit.DataStream.Trailer",()=>[{no:1,name:"stream_id",kind:"scalar",T:9},{no:2,name:"reason",kind:"scalar",T:9},{no:3,name:"attributes",kind:"map",K:9,V:{kind:"scalar",T:9}}],{localName:"DataStream_Trailer"}),dd=b.makeMessageType("livekit.FilterParams",()=>[{no:1,name:"include_events",kind:"scalar",T:9,repeated:!0},{no:2,name:"exclude_events",kind:"scalar",T:9,repeated:!0}]),ad=b.makeMessageType("livekit.WebhookConfig",()=>[{no:1,name:"url",kind:"scalar",T:9},{no:2,name:"signing_key",kind:"scalar",T:9},{no:3,name:"filter_params",kind:"message",T:dd}]),bd=b.makeMessageType("livekit.SubscribedAudioCodec",()=>[{no:1,name:"codec",kind:"scalar",T:9},{no:2,name:"enabled",kind:"scalar",T:8}]),Br=b.makeMessageType("livekit.RoomAgentDispatch",()=>[{no:1,name:"agent_name",kind:"scalar",T:9},{no:2,name:"metadata",kind:"scalar",T:9}]),St=b.makeEnum("livekit.SignalTarget",[{no:0,name:"PUBLISHER"},{no:1,name:"SUBSCRIBER"}]),Wr=b.makeEnum("livekit.StreamState",[{no:0,name:"ACTIVE"},{no:1,name:"PAUSED"}]),xd=b.makeEnum("livekit.CandidateProtocol",[{no:0,name:"UDP"},{no:1,name:"TCP"},{no:2,name:"TLS"}]),gd=b.makeMessageType("livekit.SignalRequest",()=>[{no:1,name:"offer",kind:"message",T:Ae,oneof:"message"},{no:2,name:"answer",kind:"message",T:Ae,oneof:"message"},{no:3,name:"trickle",kind:"message",T:Bn,oneof:"message"},{no:4,name:"add_track",kind:"message",T:Cl,oneof:"message"},{no:5,name:"mute",kind:"message",T:Wn,oneof:"message"},{no:6,name:"subscription",kind:"message",T:Rn,oneof:"message"},{no:7,name:"track_setting",kind:"message",T:bc,oneof:"message"},{no:8,name:"leave",kind:"message",T:$n,oneof:"message"},{no:10,name:"update_layers",kind:"message",T:gc,oneof:"message"},{no:11,name:"subscription_permission",kind:"message",T:yc,oneof:"message"},{no:12,name:"sync_state",kind:"message",T:wo,oneof:"message"},{no:13,name:"simulate",kind:"message",T:Pt,oneof:"message"},{no:14,name:"ping",kind:"scalar",T:3,oneof:"message"},{no:15,name:"update_metadata",kind:"message",T:xo,oneof:"message"},{no:16,name:"ping_req",kind:"message",T:Lc,oneof:"message"},{no:17,name:"update_audio_track",kind:"message",T:bo,oneof:"message"},{no:18,name:"update_video_track",kind:"message",T:xc,oneof:"message"},{no:19,name:"publish_data_track_request",kind:"message",T:ho,oneof:"message"},{no:20,name:"unpublish_data_track_request",kind:"message",T:uo,oneof:"message"},{no:21,name:"update_data_subscription",kind:"message",T:dc,oneof:"message"}]),Es=b.makeMessageType("livekit.SignalResponse",()=>[{no:1,name:"join",kind:"message",T:Ad,oneof:"message"},{no:2,name:"answer",kind:"message",T:Ae,oneof:"message"},{no:3,name:"offer",kind:"message",T:Ae,oneof:"message"},{no:4,name:"trickle",kind:"message",T:Bn,oneof:"message"},{no:5,name:"update",kind:"message",T:Cd,oneof:"message"},{no:6,name:"track_published",kind:"message",T:ao,oneof:"message"},{no:8,name:"leave",kind:"message",T:$n,oneof:"message"},{no:9,name:"mute",kind:"message",T:Wn,oneof:"message"},{no:10,name:"speakers_changed",kind:"message",T:Id,oneof:"message"},{no:11,name:"room_update",kind:"message",T:Bd,oneof:"message"},{no:12,name:"connection_quality",kind:"message",T:Rd,oneof:"message"},{no:13,name:"stream_state_update",kind:"message",T:Nd,oneof:"message"},{no:14,name:"subscribed_quality_update",kind:"message",T:Hd,oneof:"message"},{no:15,name:"subscription_permission_update",kind:"message",T:Vd,oneof:"message"},{no:16,name:"refresh_token",kind:"scalar",T:9,oneof:"message"},{no:17,name:"track_unpublished",kind:"message",T:Ld,oneof:"message"},{no:18,name:"pong",kind:"scalar",T:3,oneof:"message"},{no:19,name:"reconnect",kind:"message",T:pd,oneof:"message"},{no:20,name:"pong_resp",kind:"message",T:Gd,oneof:"message"},{no:21,name:"subscription_response",kind:"message",T:Dd,oneof:"message"},{no:22,name:"request_response",kind:"message",T:Yd,oneof:"message"},{no:23,name:"track_subscribed",kind:"message",T:Qd,oneof:"message"},{no:24,name:"room_moved",kind:"message",T:Xd,oneof:"message"},{no:25,name:"media_sections_requirement",kind:"message",T:Kd,oneof:"message"},{no:26,name:"subscribed_audio_codec_update",kind:"message",T:Ed,oneof:"message"},{no:27,name:"publish_data_track_response",kind:"message",T:fo,oneof:"message"},{no:28,name:"unpublish_data_track_response",kind:"message",T:wd,oneof:"message"},{no:29,name:"data_track_subscriber_handles",kind:"message",T:md,oneof:"message"}]),Rr=b.makeMessageType("livekit.SimulcastCodec",()=>[{no:1,name:"codec",kind:"scalar",T:9},{no:2,name:"cid",kind:"scalar",T:9},{no:4,name:"layers",kind:"message",T:we,repeated:!0},{no:5,name:"video_layer_mode",kind:"enum",T:b.getEnumType(Ji)}]),Cl=b.makeMessageType("livekit.AddTrackRequest",()=>[{no:1,name:"cid",kind:"scalar",T:9},{no:2,name:"name",kind:"scalar",T:9},{no:3,name:"type",kind:"enum",T:b.getEnumType(Vt)},{no:4,name:"width",kind:"scalar",T:13},{no:5,name:"height",kind:"scalar",T:13},{no:6,name:"muted",kind:"scalar",T:8},{no:7,name:"disable_dtx",kind:"scalar",T:8},{no:8,name:"source",kind:"enum",T:b.getEnumType(rt)},{no:9,name:"layers",kind:"message",T:we,repeated:!0},{no:10,name:"simulcast_codecs",kind:"message",T:Rr,repeated:!0},{no:11,name:"sid",kind:"scalar",T:9},{no:12,name:"stereo",kind:"scalar",T:8},{no:13,name:"disable_red",kind:"scalar",T:8},{no:14,name:"encryption",kind:"enum",T:b.getEnumType(T)},{no:15,name:"stream",kind:"scalar",T:9},{no:16,name:"backup_codec_policy",kind:"enum",T:b.getEnumType(Pi)},{no:17,name:"audio_features",kind:"enum",T:b.getEnumType(it),repeated:!0}]),ho=b.makeMessageType("livekit.PublishDataTrackRequest",()=>[{no:1,name:"pub_handle",kind:"scalar",T:13},{no:2,name:"name",kind:"scalar",T:9},{no:3,name:"encryption",kind:"enum",T:b.getEnumType(T)}]),fo=b.makeMessageType("livekit.PublishDataTrackResponse",()=>[{no:1,name:"info",kind:"message",T:In}]),uo=b.makeMessageType("livekit.UnpublishDataTrackRequest",()=>[{no:1,name:"pub_handle",kind:"scalar",T:13}]),wd=b.makeMessageType("livekit.UnpublishDataTrackResponse",()=>[{no:1,name:"info",kind:"message",T:In}]),md=b.makeMessageType("livekit.DataTrackSubscriberHandles",()=>[{no:1,name:"sub_handles",kind:"map",K:13,V:{kind:"message",T:yd}}]),yd=b.makeMessageType("livekit.DataTrackSubscriberHandles.PublishedDataTrack",()=>[{no:1,name:"publisher_identity",kind:"scalar",T:9},{no:2,name:"publisher_sid",kind:"scalar",T:9},{no:3,name:"track_sid",kind:"scalar",T:9}],{localName:"DataTrackSubscriberHandles_PublishedDataTrack"}),Bn=b.makeMessageType("livekit.TrickleRequest",()=>[{no:1,name:"candidateInit",kind:"scalar",T:9},{no:2,name:"target",kind:"enum",T:b.getEnumType(St)},{no:3,name:"final",kind:"scalar",T:8}]),Wn=b.makeMessageType("livekit.MuteTrackRequest",()=>[{no:1,name:"sid",kind:"scalar",T:9},{no:2,name:"muted",kind:"scalar",T:8}]),Ad=b.makeMessageType("livekit.JoinResponse",()=>[{no:1,name:"room",kind:"message",T:Cn},{no:2,name:"participant",kind:"message",T:Ve},{no:3,name:"other_participants",kind:"message",T:Ve,repeated:!0},{no:4,name:"server_version",kind:"scalar",T:9},{no:5,name:"ice_servers",kind:"message",T:wc,repeated:!0},{no:6,name:"subscriber_primary",kind:"scalar",T:8},{no:7,name:"alternative_url",kind:"scalar",T:9},{no:8,name:"client_configuration",kind:"message",T:cc},{no:9,name:"server_region",kind:"scalar",T:9},{no:10,name:"ping_timeout",kind:"scalar",T:5},{no:11,name:"ping_interval",kind:"scalar",T:5},{no:12,name:"server_info",kind:"message",T:rc},{no:13,name:"sif_trailer",kind:"scalar",T:12},{no:14,name:"enabled_publish_codecs",kind:"message",T:rn,repeated:!0},{no:15,name:"fast_publish",kind:"scalar",T:8}]),pd=b.makeMessageType("livekit.ReconnectResponse",()=>[{no:1,name:"ice_servers",kind:"message",T:wc,repeated:!0},{no:2,name:"client_configuration",kind:"message",T:cc},{no:3,name:"server_info",kind:"message",T:rc},{no:4,name:"last_message_seq",kind:"scalar",T:13}]),ao=b.makeMessageType("livekit.TrackPublishedResponse",()=>[{no:1,name:"cid",kind:"scalar",T:9},{no:2,name:"track",kind:"message",T:Ze}]),Ld=b.makeMessageType("livekit.TrackUnpublishedResponse",()=>[{no:1,name:"track_sid",kind:"scalar",T:9}]),Ae=b.makeMessageType("livekit.SessionDescription",()=>[{no:1,name:"type",kind:"scalar",T:9},{no:2,name:"sdp",kind:"scalar",T:9},{no:3,name:"id",kind:"scalar",T:13},{no:4,name:"mid_to_track_id",kind:"map",K:9,V:{kind:"scalar",T:9}}]),Cd=b.makeMessageType("livekit.ParticipantUpdate",()=>[{no:1,name:"participants",kind:"message",T:Ve,repeated:!0}]),Rn=b.makeMessageType("livekit.UpdateSubscription",()=>[{no:1,name:"track_sids",kind:"scalar",T:9,repeated:!0},{no:2,name:"subscribe",kind:"scalar",T:8},{no:3,name:"participant_tracks",kind:"message",T:nc,repeated:!0}]),dc=b.makeMessageType("livekit.UpdateDataSubscription",()=>[{no:1,name:"updates",kind:"message",T:ac,repeated:!0}]),ac=b.makeMessageType("livekit.UpdateDataSubscription.Update",()=>[{no:1,name:"track_sid",kind:"scalar",T:9},{no:2,name:"subscribe",kind:"scalar",T:8},{no:3,name:"options",kind:"message",T:id}],{localName:"UpdateDataSubscription_Update"}),bc=b.makeMessageType("livekit.UpdateTrackSettings",()=>[{no:1,name:"track_sids",kind:"scalar",T:9,repeated:!0},{no:3,name:"disabled",kind:"scalar",T:8},{no:4,name:"quality",kind:"enum",T:b.getEnumType(ro)},{no:5,name:"width",kind:"scalar",T:13},{no:6,name:"height",kind:"scalar",T:13},{no:7,name:"fps",kind:"scalar",T:13},{no:8,name:"priority",kind:"scalar",T:13}]),bo=b.makeMessageType("livekit.UpdateLocalAudioTrack",()=>[{no:1,name:"track_sid",kind:"scalar",T:9},{no:2,name:"features",kind:"enum",T:b.getEnumType(it),repeated:!0}]),xc=b.makeMessageType("livekit.UpdateLocalVideoTrack",()=>[{no:1,name:"track_sid",kind:"scalar",T:9},{no:2,name:"width",kind:"scalar",T:13},{no:3,name:"height",kind:"scalar",T:13}]),$n=b.makeMessageType("livekit.LeaveRequest",()=>[{no:1,name:"can_reconnect",kind:"scalar",T:8},{no:2,name:"reason",kind:"enum",T:b.getEnumType(Gt)},{no:3,name:"action",kind:"enum",T:b.getEnumType(je)},{no:4,name:"regions",kind:"message",T:zd}]),je=b.makeEnum("livekit.LeaveRequest.Action",[{no:0,name:"DISCONNECT"},{no:1,name:"RESUME"},{no:2,name:"RECONNECT"}]),gc=b.makeMessageType("livekit.UpdateVideoLayers",()=>[{no:1,name:"track_sid",kind:"scalar",T:9},{no:2,name:"layers",kind:"message",T:we,repeated:!0}]),xo=b.makeMessageType("livekit.UpdateParticipantMetadata",()=>[{no:1,name:"metadata",kind:"scalar",T:9},{no:2,name:"name",kind:"scalar",T:9},{no:3,name:"attributes",kind:"map",K:9,V:{kind:"scalar",T:9}},{no:4,name:"request_id",kind:"scalar",T:13}]),wc=b.makeMessageType("livekit.ICEServer",()=>[{no:1,name:"urls",kind:"scalar",T:9,repeated:!0},{no:2,name:"username",kind:"scalar",T:9},{no:3,name:"credential",kind:"scalar",T:9}]),Id=b.makeMessageType("livekit.SpeakersChanged",()=>[{no:1,name:"speakers",kind:"message",T:tc,repeated:!0}]),Bd=b.makeMessageType("livekit.RoomUpdate",()=>[{no:1,name:"room",kind:"message",T:Cn}]),Wd=b.makeMessageType("livekit.ConnectionQualityInfo",()=>[{no:1,name:"participant_sid",kind:"scalar",T:9},{no:2,name:"quality",kind:"enum",T:b.getEnumType(al)},{no:3,name:"score",kind:"scalar",T:2}]),Rd=b.makeMessageType("livekit.ConnectionQualityUpdate",()=>[{no:1,name:"updates",kind:"message",T:Wd,repeated:!0}]),$d=b.makeMessageType("livekit.StreamStateInfo",()=>[{no:1,name:"participant_sid",kind:"scalar",T:9},{no:2,name:"track_sid",kind:"scalar",T:9},{no:3,name:"state",kind:"enum",T:b.getEnumType(Wr)}]),Nd=b.makeMessageType("livekit.StreamStateUpdate",()=>[{no:1,name:"stream_states",kind:"message",T:$d,repeated:!0}]),go=b.makeMessageType("livekit.SubscribedQuality",()=>[{no:1,name:"quality",kind:"enum",T:b.getEnumType(ro)},{no:2,name:"enabled",kind:"scalar",T:8}]),Md=b.makeMessageType("livekit.SubscribedCodec",()=>[{no:1,name:"codec",kind:"scalar",T:9},{no:2,name:"qualities",kind:"message",T:go,repeated:!0}]),Hd=b.makeMessageType("livekit.SubscribedQualityUpdate",()=>[{no:1,name:"track_sid",kind:"scalar",T:9},{no:2,name:"subscribed_qualities",kind:"message",T:go,repeated:!0},{no:3,name:"subscribed_codecs",kind:"message",T:Md,repeated:!0}]),Ed=b.makeMessageType("livekit.SubscribedAudioCodecUpdate",()=>[{no:1,name:"track_sid",kind:"scalar",T:9},{no:2,name:"subscribed_audio_codecs",kind:"message",T:bd,repeated:!0}]),mc=b.makeMessageType("livekit.TrackPermission",()=>[{no:1,name:"participant_sid",kind:"scalar",T:9},{no:2,name:"all_tracks",kind:"scalar",T:8},{no:3,name:"track_sids",kind:"scalar",T:9,repeated:!0},{no:4,name:"participant_identity",kind:"scalar",T:9}]),yc=b.makeMessageType("livekit.SubscriptionPermission",()=>[{no:1,name:"all_participants",kind:"scalar",T:8},{no:2,name:"track_permissions",kind:"message",T:mc,repeated:!0}]),Vd=b.makeMessageType("livekit.SubscriptionPermissionUpdate",()=>[{no:1,name:"participant_sid",kind:"scalar",T:9},{no:2,name:"track_sid",kind:"scalar",T:9},{no:3,name:"allowed",kind:"scalar",T:8}]),Xd=b.makeMessageType("livekit.RoomMovedResponse",()=>[{no:1,name:"room",kind:"message",T:Cn},{no:2,name:"token",kind:"scalar",T:9},{no:3,name:"participant",kind:"message",T:Ve},{no:4,name:"other_participants",kind:"message",T:Ve,repeated:!0}]),wo=b.makeMessageType("livekit.SyncState",()=>[{no:1,name:"answer",kind:"message",T:Ae},{no:2,name:"subscription",kind:"message",T:Rn},{no:3,name:"publish_tracks",kind:"message",T:ao,repeated:!0},{no:4,name:"data_channels",kind:"message",T:pc,repeated:!0},{no:5,name:"offer",kind:"message",T:Ae},{no:6,name:"track_sids_disabled",kind:"scalar",T:9,repeated:!0},{no:7,name:"datachannel_receive_states",kind:"message",T:Ac,repeated:!0},{no:8,name:"publish_data_tracks",kind:"message",T:fo,repeated:!0}]),Ac=b.makeMessageType("livekit.DataChannelReceiveState",()=>[{no:1,name:"publisher_sid",kind:"scalar",T:9},{no:2,name:"last_seq",kind:"scalar",T:13}]),pc=b.makeMessageType("livekit.DataChannelInfo",()=>[{no:1,name:"label",kind:"scalar",T:9},{no:2,name:"id",kind:"scalar",T:13},{no:3,name:"target",kind:"enum",T:b.getEnumType(St)}]),Pt=b.makeMessageType("livekit.SimulateScenario",()=>[{no:1,name:"speaker_update",kind:"scalar",T:5,oneof:"scenario"},{no:2,name:"node_failure",kind:"scalar",T:8,oneof:"scenario"},{no:3,name:"migration",kind:"scalar",T:8,oneof:"scenario"},{no:4,name:"server_leave",kind:"scalar",T:8,oneof:"scenario"},{no:5,name:"switch_candidate_protocol",kind:"enum",T:b.getEnumType(xd),oneof:"scenario"},{no:6,name:"subscriber_bandwidth",kind:"scalar",T:3,oneof:"scenario"},{no:7,name:"disconnect_signal_on_resume",kind:"scalar",T:8,oneof:"scenario"},{no:8,name:"disconnect_signal_on_resume_no_messages",kind:"scalar",T:8,oneof:"scenario"},{no:9,name:"leave_request_full_reconnect",kind:"scalar",T:8,oneof:"scenario"}]),Lc=b.makeMessageType("livekit.Ping",()=>[{no:1,name:"timestamp",kind:"scalar",T:3},{no:2,name:"rtt",kind:"scalar",T:3}]),Gd=b.makeMessageType("livekit.Pong",()=>[{no:1,name:"last_ping_timestamp",kind:"scalar",T:3},{no:2,name:"timestamp",kind:"scalar",T:3}]),zd=b.makeMessageType("livekit.RegionSettings",()=>[{no:1,name:"regions",kind:"message",T:Od,repeated:!0}]),Od=b.makeMessageType("livekit.RegionInfo",()=>[{no:1,name:"region",kind:"scalar",T:9},{no:2,name:"url",kind:"scalar",T:9},{no:3,name:"distance",kind:"scalar",T:3}]),Dd=b.makeMessageType("livekit.SubscriptionResponse",()=>[{no:1,name:"track_sid",kind:"scalar",T:9},{no:2,name:"err",kind:"enum",T:b.getEnumType(Ui)}]),Yd=b.makeMessageType("livekit.RequestResponse",()=>[{no:1,name:"request_id",kind:"scalar",T:13},{no:2,name:"reason",kind:"enum",T:b.getEnumType(Ce)},{no:3,name:"message",kind:"scalar",T:9},{no:4,name:"trickle",kind:"message",T:Bn,oneof:"request"},{no:5,name:"add_track",kind:"message",T:Cl,oneof:"request"},{no:6,name:"mute",kind:"message",T:Wn,oneof:"request"},{no:7,name:"update_metadata",kind:"message",T:xo,oneof:"request"},{no:8,name:"update_audio_track",kind:"message",T:bo,oneof:"request"},{no:9,name:"update_video_track",kind:"message",T:xc,oneof:"request"},{no:10,name:"publish_data_track",kind:"message",T:ho,oneof:"request"},{no:11,name:"unpublish_data_track",kind:"message",T:uo,oneof:"request"}]),Ce=b.makeEnum("livekit.RequestResponse.Reason",[{no:0,name:"OK"},{no:1,name:"NOT_FOUND"},{no:2,name:"NOT_ALLOWED"},{no:3,name:"LIMIT_EXCEEDED"},{no:4,name:"QUEUED"},{no:5,name:"UNSUPPORTED_TYPE"},{no:6,name:"UNCLASSIFIED_ERROR"},{no:7,name:"INVALID_HANDLE"},{no:8,name:"INVALID_NAME"},{no:9,name:"DUPLICATE_HANDLE"},{no:10,name:"DUPLICATE_NAME"}]),Qd=b.makeMessageType("livekit.TrackSubscribed",()=>[{no:1,name:"track_sid",kind:"scalar",T:9}]),Cc=b.makeMessageType("livekit.ConnectionSettings",()=>[{no:1,name:"auto_subscribe",kind:"scalar",T:8},{no:2,name:"adaptive_stream",kind:"scalar",T:8},{no:3,name:"subscriber_allow_pause",kind:"scalar",T:8,opt:!0},{no:4,name:"disable_ice_lite",kind:"scalar",T:8},{no:5,name:"auto_subscribe_data_track",kind:"scalar",T:8,opt:!0}]),Sd=b.makeMessageType("livekit.JoinRequest",()=>[{no:1,name:"client_info",kind:"message",T:sc},{no:2,name:"connection_settings",kind:"message",T:Cc},{no:3,name:"metadata",kind:"scalar",T:9},{no:4,name:"participant_attributes",kind:"map",K:9,V:{kind:"scalar",T:9}},{no:5,name:"add_track_requests",kind:"message",T:Cl,repeated:!0},{no:6,name:"publisher_offer",kind:"message",T:Ae},{no:7,name:"reconnect",kind:"scalar",T:8},{no:8,name:"reconnect_reason",kind:"enum",T:b.getEnumType(pe)},{no:9,name:"participant_sid",kind:"scalar",T:9},{no:10,name:"sync_state",kind:"message",T:wo}]),Zd=b.makeMessageType("livekit.WrappedJoinRequest",()=>[{no:1,name:"compression",kind:"enum",T:b.getEnumType($r)},{no:2,name:"join_request",kind:"scalar",T:12}]),$r=b.makeEnum("livekit.WrappedJoinRequest.Compression",[{no:0,name:"NONE"},{no:1,name:"GZIP"}]),Kd=b.makeMessageType("livekit.MediaSectionsRequirement",()=>[{no:1,name:"num_audios",kind:"scalar",T:13},{no:2,name:"num_videos",kind:"scalar",T:13}]),jd=b.makeEnum("livekit.EncodedFileType",[{no:0,name:"DEFAULT_FILETYPE"},{no:1,name:"MP4"},{no:2,name:"OGG"},{no:3,name:"MP3"}]),qd=b.makeEnum("livekit.SegmentedFileProtocol",[{no:0,name:"DEFAULT_SEGMENTED_FILE_PROTOCOL"},{no:1,name:"HLS_PROTOCOL"}]),Td=b.makeEnum("livekit.SegmentedFileSuffix",[{no:0,name:"INDEX"},{no:1,name:"TIMESTAMP"}]),Fd=b.makeEnum("livekit.ImageFileSuffix",[{no:0,name:"IMAGE_SUFFIX_INDEX"},{no:1,name:"IMAGE_SUFFIX_TIMESTAMP"},{no:2,name:"IMAGE_SUFFIX_NONE_OVERWRITE"}]),kd=b.makeEnum("livekit.StreamProtocol",[{no:0,name:"DEFAULT_PROTOCOL"},{no:1,name:"RTMP"},{no:2,name:"SRT"}]),Pd=b.makeEnum("livekit.AudioMixing",[{no:0,name:"DEFAULT_MIXING"},{no:1,name:"DUAL_CHANNEL_AGENT"},{no:2,name:"DUAL_CHANNEL_ALTERNATE"}]),Ic=b.makeEnum("livekit.EncodingOptionsPreset",[{no:0,name:"H264_720P_30"},{no:1,name:"H264_720P_60"},{no:2,name:"H264_1080P_30"},{no:3,name:"H264_1080P_60"},{no:4,name:"PORTRAIT_H264_720P_30"},{no:5,name:"PORTRAIT_H264_720P_60"},{no:6,name:"PORTRAIT_H264_1080P_30"},{no:7,name:"PORTRAIT_H264_1080P_60"}]),Ud=b.makeMessageType("livekit.RoomCompositeEgressRequest",()=>[{no:1,name:"room_name",kind:"scalar",T:9},{no:2,name:"layout",kind:"scalar",T:9},{no:3,name:"audio_only",kind:"scalar",T:8},{no:15,name:"audio_mixing",kind:"enum",T:b.getEnumType(Pd)},{no:4,name:"video_only",kind:"scalar",T:8},{no:5,name:"custom_base_url",kind:"scalar",T:9},{no:6,name:"file",kind:"message",T:Nr,oneof:"output"},{no:7,name:"stream",kind:"message",T:Vs,oneof:"output"},{no:10,name:"segments",kind:"message",T:Mr,oneof:"output"},{no:8,name:"preset",kind:"enum",T:b.getEnumType(Ic),oneof:"options"},{no:9,name:"advanced",kind:"message",T:Wc,oneof:"options"},{no:11,name:"file_outputs",kind:"message",T:Nr,repeated:!0},{no:12,name:"stream_outputs",kind:"message",T:Vs,repeated:!0},{no:13,name:"segment_outputs",kind:"message",T:Mr,repeated:!0},{no:14,name:"image_outputs",kind:"message",T:Jd,repeated:!0},{no:16,name:"webhooks",kind:"message",T:ad,repeated:!0}]),Nr=b.makeMessageType("livekit.EncodedFileOutput",()=>[{no:1,name:"file_type",kind:"enum",T:b.getEnumType(jd)},{no:2,name:"filepath",kind:"scalar",T:9},{no:6,name:"disable_manifest",kind:"scalar",T:8},{no:3,name:"s3",kind:"message",T:Nn,oneof:"output"},{no:4,name:"gcp",kind:"message",T:Mn,oneof:"output"},{no:5,name:"azure",kind:"message",T:Hn,oneof:"output"},{no:7,name:"aliOSS",kind:"message",T:En,oneof:"output"}]),Mr=b.makeMessageType("livekit.SegmentedFileOutput",()=>[{no:1,name:"protocol",kind:"enum",T:b.getEnumType(qd)},{no:2,name:"filename_prefix",kind:"scalar",T:9},{no:3,name:"playlist_name",kind:"scalar",T:9},{no:11,name:"live_playlist_name",kind:"scalar",T:9},{no:4,name:"segment_duration",kind:"scalar",T:13},{no:10,name:"filename_suffix",kind:"enum",T:b.getEnumType(Td)},{no:8,name:"disable_manifest",kind:"scalar",T:8},{no:5,name:"s3",kind:"message",T:Nn,oneof:"output"},{no:6,name:"gcp",kind:"message",T:Mn,oneof:"output"},{no:7,name:"azure",kind:"message",T:Hn,oneof:"output"},{no:9,name:"aliOSS",kind:"message",T:En,oneof:"output"}]),Jd=b.makeMessageType("livekit.ImageOutput",()=>[{no:1,name:"capture_interval",kind:"scalar",T:13},{no:2,name:"width",kind:"scalar",T:5},{no:3,name:"height",kind:"scalar",T:5},{no:4,name:"filename_prefix",kind:"scalar",T:9},{no:5,name:"filename_suffix",kind:"enum",T:b.getEnumType(Fd)},{no:6,name:"image_codec",kind:"enum",T:b.getEnumType(nd)},{no:7,name:"disable_manifest",kind:"scalar",T:8},{no:8,name:"s3",kind:"message",T:Nn,oneof:"output"},{no:9,name:"gcp",kind:"message",T:Mn,oneof:"output"},{no:10,name:"azure",kind:"message",T:Hn,oneof:"output"},{no:11,name:"aliOSS",kind:"message",T:En,oneof:"output"}]),Nn=b.makeMessageType("livekit.S3Upload",()=>[{no:1,name:"access_key",kind:"scalar",T:9},{no:2,name:"secret",kind:"scalar",T:9},{no:11,name:"session_token",kind:"scalar",T:9},{no:12,name:"assume_role_arn",kind:"scalar",T:9},{no:13,name:"assume_role_external_id",kind:"scalar",T:9},{no:3,name:"region",kind:"scalar",T:9},{no:4,name:"endpoint",kind:"scalar",T:9},{no:5,name:"bucket",kind:"scalar",T:9},{no:6,name:"force_path_style",kind:"scalar",T:8},{no:7,name:"metadata",kind:"map",K:9,V:{kind:"scalar",T:9}},{no:8,name:"tagging",kind:"scalar",T:9},{no:9,name:"content_disposition",kind:"scalar",T:9},{no:10,name:"proxy",kind:"message",T:Bc}]),Mn=b.makeMessageType("livekit.GCPUpload",()=>[{no:1,name:"credentials",kind:"scalar",T:9},{no:2,name:"bucket",kind:"scalar",T:9},{no:3,name:"proxy",kind:"message",T:Bc}]),Hn=b.makeMessageType("livekit.AzureBlobUpload",()=>[{no:1,name:"account_name",kind:"scalar",T:9},{no:2,name:"account_key",kind:"scalar",T:9},{no:3,name:"container_name",kind:"scalar",T:9}]),En=b.makeMessageType("livekit.AliOSSUpload",()=>[{no:1,name:"access_key",kind:"scalar",T:9},{no:2,name:"secret",kind:"scalar",T:9},{no:3,name:"region",kind:"scalar",T:9},{no:4,name:"endpoint",kind:"scalar",T:9},{no:5,name:"bucket",kind:"scalar",T:9}]),Bc=b.makeMessageType("livekit.ProxyConfig",()=>[{no:1,name:"url",kind:"scalar",T:9},{no:2,name:"username",kind:"scalar",T:9},{no:3,name:"password",kind:"scalar",T:9}]),Vs=b.makeMessageType("livekit.StreamOutput",()=>[{no:1,name:"protocol",kind:"enum",T:b.getEnumType(kd)},{no:2,name:"urls",kind:"scalar",T:9,repeated:!0}]),Wc=b.makeMessageType("livekit.EncodingOptions",()=>[{no:1,name:"width",kind:"scalar",T:5},{no:2,name:"height",kind:"scalar",T:5},{no:3,name:"depth",kind:"scalar",T:5},{no:4,name:"framerate",kind:"scalar",T:5},{no:5,name:"audio_codec",kind:"enum",T:b.getEnumType(ed)},{no:6,name:"audio_bitrate",kind:"scalar",T:5},{no:11,name:"audio_quality",kind:"scalar",T:5},{no:7,name:"audio_frequency",kind:"scalar",T:5},{no:8,name:"video_codec",kind:"enum",T:b.getEnumType(ld)},{no:9,name:"video_bitrate",kind:"scalar",T:5},{no:12,name:"video_quality",kind:"scalar",T:5},{no:10,name:"key_frame_interval",kind:"scalar",T:1}]),_d=b.makeMessageType("livekit.AutoParticipantEgress",()=>[{no:1,name:"preset",kind:"enum",T:b.getEnumType(Ic),oneof:"options"},{no:2,name:"advanced",kind:"message",T:Wc,oneof:"options"},{no:3,name:"file_outputs",kind:"message",T:Nr,repeated:!0},{no:4,name:"segment_outputs",kind:"message",T:Mr,repeated:!0}]),vd=b.makeMessageType("livekit.AutoTrackEgress",()=>[{no:1,name:"filepath",kind:"scalar",T:9},{no:5,name:"disable_manifest",kind:"scalar",T:8},{no:2,name:"s3",kind:"message",T:Nn,oneof:"output"},{no:3,name:"gcp",kind:"message",T:Mn,oneof:"output"},{no:4,name:"azure",kind:"message",T:Hn,oneof:"output"},{no:6,name:"aliOSS",kind:"message",T:En,oneof:"output"}]),ta=b.makeMessageType("livekit.RoomEgress",()=>[{no:1,name:"room",kind:"message",T:Ud},{no:3,name:"participant",kind:"message",T:_d},{no:2,name:"tracks",kind:"message",T:vd}]),fn=b.makeMessageType("livekit.RoomConfiguration",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"empty_timeout",kind:"scalar",T:13},{no:3,name:"departure_timeout",kind:"scalar",T:13},{no:4,name:"max_participants",kind:"scalar",T:13},{no:11,name:"metadata",kind:"scalar",T:9},{no:5,name:"egress",kind:"message",T:ta},{no:7,name:"min_playout_delay",kind:"scalar",T:13},{no:8,name:"max_playout_delay",kind:"scalar",T:13},{no:9,name:"sync_streams",kind:"scalar",T:8},{no:10,name:"agents",kind:"message",T:Br,repeated:!0}]),ea=b.makeMessageType("livekit.TokenSourceRequest",()=>[{no:1,name:"room_name",kind:"scalar",T:9,opt:!0},{no:2,name:"participant_name",kind:"scalar",T:9,opt:!0},{no:3,name:"participant_identity",kind:"scalar",T:9,opt:!0},{no:4,name:"participant_metadata",kind:"scalar",T:9,opt:!0},{no:5,name:"participant_attributes",kind:"map",K:9,V:{kind:"scalar",T:9}},{no:6,name:"room_config",kind:"message",T:fn,opt:!0}]),Rc=b.makeMessageType("livekit.TokenSourceResponse",()=>[{no:1,name:"server_url",kind:"scalar",T:9},{no:2,name:"participant_token",kind:"scalar",T:9}]);Fl={exports:{}},na=Fl.exports;El=ra();(function(t){t[t.trace=0]="trace",t[t.debug=1]="debug",t[t.info=2]="info",t[t.warn=3]="warn",t[t.error=4]="error",t[t.silent=5]="silent"})(Je||(Je={}));(function(t){t.Default="livekit",t.Room="livekit-room",t.TokenSource="livekit-token-source",t.Participant="livekit-participant",t.Track="livekit-track",t.Publication="livekit-track-publication",t.Engine="livekit-engine",t.Signal="livekit-signal",t.PCManager="livekit-pc-manager",t.PCTransport="livekit-pc-transport",t.E2EE="lk-e2ee",t.DataTracks="livekit-data-tracks"})(dt||(dt={}));O=El.getLogger("livekit"),$c=Object.values(dt).map((t)=>El.getLogger(t));O.setDefaultLevel(Je.info);ia=El.getLogger("lk-e2ee"),ca=[0,300,1200,2700,4800,cl,cl,cl,cl,cl];Ql={exports:{}};zt=ua();Ys=Hc;Qs=Object.freeze({__proto__:null,fixNegotiationNeeded:Qc,shimAddTrackRemoveTrack:Yc,shimAddTrackRemoveTrackWithNative:Dc,shimGetSendersWithDtmf:zc,shimGetUserMedia:Vc,shimMediaStream:Xc,shimOnTrack:Gc,shimPeerConnection:Er,shimSenderReceiverGetStats:Oc});Ss=Object.freeze({__proto__:null,shimAddTransceiver:Fc,shimCreateAnswer:Uc,shimCreateOffer:Pc,shimGetDisplayMedia:xa,shimGetParameters:kc,shimGetUserMedia:Sc,shimOnTrack:Zc,shimPeerConnection:Vr,shimRTCDataChannel:Tc,shimReceiverGetStats:jc,shimRemoveStream:qc,shimSenderGetStats:Kc});Zs=Object.freeze({__proto__:null,shimAudioContext:oh,shimCallbacksAPI:vc,shimConstraints:eh,shimCreateOfferLegacy:rh,shimGetUserMedia:th,shimLocalStreamsAPI:Jc,shimRTCIceServerUrls:lh,shimRemoteStreamsAPI:_c,shimTrackEventTransceiver:nh}),or={exports:{}};sh=ga(),qe=la(sh),wa=hu({__proto__:null,default:qe},[sh]);ma=Object.freeze({__proto__:null,removeExtmapAllowMixed:zr,shimAddIceCandidateNullOrEmpty:Jl,shimConnectionState:Gr,shimMaxMessageSize:Pl,shimParameterlessSetLocalDescription:_l,shimRTCIceCandidate:kl,shimRTCIceCandidateRelayProtocol:Xr,shimSendThrowTypeError:Ul});ya({window:typeof window>"u"?void 0:window});ft=class ft extends(ih=Promise){constructor(t){super(t)}catch(t){return super.catch(t)}static reject(t){return super.reject(t)}static all(t){return super.all(t)}static race(t){return super.race(t)}};Or=ft;ft.resolve=(t)=>{return Reflect.get(ih,"resolve",Or).call(Or,t)};Aa=/version\/(\d+(\.?_?\d+)+)/i;pa=[{test:/firefox|iceweasel|fxios/i,describe(t){return{name:"Firefox",version:vl(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,t),os:t.toLowerCase().includes("fxios")?"iOS":void 0,osVersion:ir(t)}}},{test:/chrom|crios|crmo/i,describe(t){return{name:"Chrome",version:vl(/(?:chrome|chromium|crios|crmo)\/(\d+(\.?_?\d+)+)/i,t),os:t.toLowerCase().includes("crios")?"iOS":void 0,osVersion:ir(t)}}},{test:/safari|applewebkit/i,describe(t){return{name:"Safari",version:vl(Aa,t),os:t.includes("mobile/")?"iOS":"macOS",osVersion:ir(t)}}}];ch=La;$t=class $t extends Error{constructor(t,e,l){super(e||"an error has occurred");if(this.name="LiveKitError",this.code=t,typeof(l===null||l===void 0?void 0:l.cause)<"u")this.cause=l===null||l===void 0?void 0:l.cause}};Wt=class Wt extends $t{};fh=class fh extends $t{constructor(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"Simulated failure";super(-1,t);this.name="simulated"}};(function(t){t[t.NotAllowed=0]="NotAllowed",t[t.ServerUnreachable=1]="ServerUnreachable",t[t.InternalError=2]="InternalError",t[t.Cancelled=3]="Cancelled",t[t.LeaveRequest=4]="LeaveRequest",t[t.Timeout=5]="Timeout",t[t.WebSocket=6]="WebSocket",t[t.ServiceNotFound=7]="ServiceNotFound"})(q||(q={}));G=class G extends Wt{constructor(t,e,l,n){super(1,t);this.name="ConnectionError",this.status=l,this.reason=e,this.context=n,this.reasonName=q[e]}static notAllowed(t,e,l){return new G(t,q.NotAllowed,e,l)}static timeout(t){return new G(t,q.Timeout)}static leaveRequest(t,e){return new G(t,q.LeaveRequest,void 0,e)}static internal(t,e){return new G(t,q.InternalError,void 0,e)}static cancelled(t){return new G(t,q.Cancelled)}static serverUnreachable(t,e){return new G(t,q.ServerUnreachable,e)}static websocket(t,e,l){return new G(t,q.WebSocket,e,l)}static serviceNotFound(t,e){return new G(t,q.ServiceNotFound,void 0,e)}};rl=class rl extends $t{constructor(t){super(21,t!==null&&t!==void 0?t:"device is unsupported");this.name="DeviceUnsupportedError"}};Xt=class Xt extends $t{constructor(t){super(20,t!==null&&t!==void 0?t:"track is invalid");this.name="TrackInvalidError"}};po=class po extends $t{constructor(t){super(10,t!==null&&t!==void 0?t:"unsupported server");this.name="UnsupportedServer"}};U=class U extends $t{constructor(t){super(12,t!==null&&t!==void 0?t:"unexpected connection state");this.name="UnexpectedConnectionState"}};he=class he extends $t{constructor(t){super(13,t!==null&&t!==void 0?t:"unable to negotiate");this.name="NegotiationError"}};uh=class uh extends $t{constructor(t){super(14,t!==null&&t!==void 0?t:"unable to publish data");this.name="PublishDataError"}};un=class un extends $t{constructor(t,e){super(15,t);this.name="PublishTrackError",this.status=e}};dn=class dn extends Wt{constructor(t,e){super(15,t);this.name="SignalRequestError",this.reason=e,this.reasonName=typeof e==="string"?e:Ce[e]}};(function(t){t[t.AlreadyOpened=0]="AlreadyOpened",t[t.AbnormalEnd=1]="AbnormalEnd",t[t.DecodeFailed=2]="DecodeFailed",t[t.LengthExceeded=3]="LengthExceeded",t[t.Incomplete=4]="Incomplete",t[t.HandlerAlreadyRegistered=7]="HandlerAlreadyRegistered",t[t.EncryptionTypeMismatch=8]="EncryptionTypeMismatch"})(at||(at={}));Lt=class Lt extends Wt{constructor(t,e){super(16,t);this.name="DataStreamError",this.reason=e,this.reasonName=at[e]}};be=class be extends $t{constructor(t){super(18,t);this.name="SignalReconnectError"}};(function(t){t.PermissionDenied="PermissionDenied",t.NotFound="NotFound",t.DeviceInUse="DeviceInUse",t.Other="Other"})(Il||(Il={}));(function(t){function e(l){if(l&&"name"in l){if(l.name==="NotFoundError"||l.name==="DevicesNotFoundError")return t.NotFound;if(l.name==="NotAllowedError"||l.name==="PermissionDeniedError")return t.PermissionDenied;if(l.name==="NotReadableError"||l.name==="TrackStartError")return t.DeviceInUse;return t.Other}}t.getFailure=e})(Il||(Il={}));et.setTimeout=function(){return setTimeout(...arguments)};et.setInterval=function(){return setInterval(...arguments)};et.clearTimeout=function(){return clearTimeout(...arguments)};et.clearInterval=function(){return clearInterval(...arguments)};(function(t){t.Connected="connected",t.Reconnecting="reconnecting",t.SignalReconnecting="signalReconnecting",t.Reconnected="reconnected",t.Disconnected="disconnected",t.ConnectionStateChanged="connectionStateChanged",t.Moved="moved",t.MediaDevicesChanged="mediaDevicesChanged",t.ParticipantConnected="participantConnected",t.ParticipantDisconnected="participantDisconnected",t.TrackPublished="trackPublished",t.TrackSubscribed="trackSubscribed",t.TrackSubscriptionFailed="trackSubscriptionFailed",t.TrackUnpublished="trackUnpublished",t.TrackUnsubscribed="trackUnsubscribed",t.TrackMuted="trackMuted",t.TrackUnmuted="trackUnmuted",t.LocalTrackPublished="localTrackPublished",t.LocalTrackUnpublished="localTrackUnpublished",t.LocalAudioSilenceDetected="localAudioSilenceDetected",t.ActiveSpeakersChanged="activeSpeakersChanged",t.ParticipantMetadataChanged="participantMetadataChanged",t.ParticipantNameChanged="participantNameChanged",t.ParticipantAttributesChanged="participantAttributesChanged",t.ParticipantActive="participantActive",t.RoomMetadataChanged="roomMetadataChanged",t.DataReceived="dataReceived",t.SipDTMFReceived="sipDTMFReceived",t.TranscriptionReceived="transcriptionReceived",t.ConnectionQualityChanged="connectionQualityChanged",t.TrackStreamStateChanged="trackStreamStateChanged",t.TrackSubscriptionPermissionChanged="trackSubscriptionPermissionChanged",t.TrackSubscriptionStatusChanged="trackSubscriptionStatusChanged",t.AudioPlaybackStatusChanged="audioPlaybackChanged",t.VideoPlaybackStatusChanged="videoPlaybackChanged",t.MediaDevicesError="mediaDevicesError",t.ParticipantPermissionsChanged="participantPermissionsChanged",t.SignalConnected="signalConnected",t.RecordingStatusChanged="recordingStatusChanged",t.ParticipantEncryptionStatusChanged="participantEncryptionStatusChanged",t.EncryptionError="encryptionError",t.DCBufferStatusChanged="dcBufferStatusChanged",t.ActiveDeviceChanged="activeDeviceChanged",t.ChatMessage="chatMessage",t.LocalTrackSubscribed="localTrackSubscribed",t.MetricsReceived="metricsReceived",t.DataTrackPublished="dataTrackPublished",t.DataTrackUnpublished="dataTrackUnpublished",t.LocalDataTrackPublished="localDataTrackPublished",t.LocalDataTrackUnpublished="localDataTrackUnpublished"})(I||(I={}));(function(t){t.TrackPublished="trackPublished",t.TrackSubscribed="trackSubscribed",t.TrackSubscriptionFailed="trackSubscriptionFailed",t.TrackUnpublished="trackUnpublished",t.TrackUnsubscribed="trackUnsubscribed",t.TrackMuted="trackMuted",t.TrackUnmuted="trackUnmuted",t.LocalTrackPublished="localTrackPublished",t.LocalTrackUnpublished="localTrackUnpublished",t.LocalTrackCpuConstrained="localTrackCpuConstrained",t.LocalSenderCreated="localSenderCreated",t.ParticipantMetadataChanged="participantMetadataChanged",t.ParticipantNameChanged="participantNameChanged",t.DataReceived="dataReceived",t.SipDTMFReceived="sipDTMFReceived",t.TranscriptionReceived="transcriptionReceived",t.IsSpeakingChanged="isSpeakingChanged",t.ConnectionQualityChanged="connectionQualityChanged",t.TrackStreamStateChanged="trackStreamStateChanged",t.TrackSubscriptionPermissionChanged="trackSubscriptionPermissionChanged",t.TrackSubscriptionStatusChanged="trackSubscriptionStatusChanged",t.TrackCpuConstrained="trackCpuConstrained",t.MediaDevicesError="mediaDevicesError",t.AudioStreamAcquired="audioStreamAcquired",t.ParticipantPermissionsChanged="participantPermissionsChanged",t.PCTrackAdded="pcTrackAdded",t.AttributesChanged="attributesChanged",t.LocalTrackSubscribed="localTrackSubscribed",t.ChatMessage="chatMessage",t.Active="active"})(N||(N={}));(function(t){t.TransportsCreated="transportsCreated",t.Connected="connected",t.Disconnected="disconnected",t.Resuming="resuming",t.Resumed="resumed",t.Restarting="restarting",t.Restarted="restarted",t.SignalResumed="signalResumed",t.SignalRestarted="signalRestarted",t.Closing="closing",t.MediaTrackAdded="mediaTrackAdded",t.ActiveSpeakersUpdate="activeSpeakersUpdate",t.DataPacketReceived="dataPacketReceived",t.RTPVideoMapUpdate="rtpVideoMapUpdate",t.DCBufferStatusChanged="dcBufferStatusChanged",t.ParticipantUpdate="participantUpdate",t.RoomUpdate="roomUpdate",t.SpeakersChanged="speakersChanged",t.StreamStateChanged="streamStateChanged",t.ConnectionQualityUpdate="connectionQualityUpdate",t.SubscriptionError="subscriptionError",t.SubscriptionPermissionUpdate="subscriptionPermissionUpdate",t.RemoteMute="remoteMute",t.SubscribedQualityUpdate="subscribedQualityUpdate",t.LocalTrackUnpublished="localTrackUnpublished",t.LocalTrackSubscribed="localTrackSubscribed",t.Offline="offline",t.SignalRequestResponse="signalRequestResponse",t.SignalConnected="signalConnected",t.RoomMoved="roomMoved",t.PublishDataTrackResponse="publishDataTrackResponse",t.UnPublishDataTrackResponse="unPublishDataTrackResponse",t.DataTrackSubscriberHandles="dataTrackSubscriberHandles",t.DataTrackPacketReceived="dataTrackPacketReceived",t.Joined="joined"})(B||(B={}));(function(t){t.Message="message",t.Muted="muted",t.Unmuted="unmuted",t.Restarted="restarted",t.Ended="ended",t.Subscribed="subscribed",t.Unsubscribed="unsubscribed",t.CpuConstrained="cpuConstrained",t.UpdateSettings="updateSettings",t.UpdateSubscription="updateSubscription",t.AudioPlaybackStarted="audioPlaybackStarted",t.AudioPlaybackFailed="audioPlaybackFailed",t.AudioSilenceDetected="audioSilenceDetected",t.VisibilityChanged="visibilityChanged",t.VideoDimensionsChanged="videoDimensionsChanged",t.VideoPlaybackStarted="videoPlaybackStarted",t.VideoPlaybackFailed="videoPlaybackFailed",t.ElementAttached="elementAttached",t.ElementDetached="elementDetached",t.UpstreamPaused="upstreamPaused",t.UpstreamResumed="upstreamResumed",t.SubscriptionPermissionChanged="subscriptionPermissionChanged",t.SubscriptionStatusChanged="subscriptionStatusChanged",t.SubscriptionFailed="subscriptionFailed",t.TrackProcessorUpdate="trackProcessorUpdate",t.AudioTrackFeatureUpdate="audioTrackFeatureUpdate",t.TranscriptionReceived="transcriptionReceived",t.TimeSyncUpdate="timeSyncUpdate",t.PreConnectBufferFlushed="preConnectBufferFlushed"})(W||(W={}));dh=["opus","red"],Ia=["vp8","h264"],ah=["vp8","h264","vp9","av1","h265"];xh=bh;(function(t){t[t.PREFER_REGRESSION=0]="PREFER_REGRESSION",t[t.SIMULCAST=1]="SIMULCAST",t[t.REGRESSION=2]="REGRESSION"})(Dr||(Dr={}));(function(t){t.telephone={maxBitrate:12000},t.speech={maxBitrate:24000},t.music={maxBitrate:48000},t.musicStereo={maxBitrate:64000},t.musicHighQuality={maxBitrate:96000},t.musicHighQualityStereo={maxBitrate:128000}})(an||(an={}));ve={h90:new j(160,90,90000,20),h180:new j(320,180,160000,20),h216:new j(384,216,180000,20),h360:new j(640,360,450000,20),h540:new j(960,540,800000,25),h720:new j(1280,720,1700000,30),h1080:new j(1920,1080,3000000,30),h1440:new j(2560,1440,5000000,30),h2160:new j(3840,2160,8000000,30)},bn={h120:new j(160,120,70000,20),h180:new j(240,180,125000,20),h240:new j(320,240,140000,20),h360:new j(480,360,330000,20),h480:new j(640,480,500000,20),h540:new j(720,540,600000,25),h720:new j(960,720,1300000,30),h1080:new j(1440,1080,2300000,30),h1440:new j(1920,1440,3800000,30)},Vl={h360fps3:new j(640,360,200000,3,"medium"),h360fps15:new j(640,360,400000,15,"medium"),h720fps5:new j(1280,720,800000,5,"medium"),h720fps15:new j(1280,720,1500000,15,"medium"),h720fps30:new j(1280,720,2000000,30,"medium"),h1080fps15:new j(1920,1080,2500000,15,"medium"),h1080fps30:new j(1920,1080,5000000,30,"medium"),original:new j(0,0,7000000,30,"medium")};hl=[];(function(t){t[t.LOW=0]="LOW",t[t.MEDIUM=1]="MEDIUM",t[t.HIGH=2]="HIGH"})(It||(It={}));L=class L extends zt.EventEmitter{get streamState(){return this._streamState}setStreamState(t){this._streamState=t}constructor(t,e){let l=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};var n;super();this.attachedElements=[],this.isMuted=!1,this._streamState=L.StreamState.Active,this.isInBackground=!1,this._currentBitrate=0,this.log=O,this.appVisibilityChangedListener=()=>{if(this.backgroundTimeout)clearTimeout(this.backgroundTimeout);if(document.visibilityState==="hidden")this.backgroundTimeout=setTimeout(()=>this.handleAppVisibilityChanged(),Ha);else this.handleAppVisibilityChanged()},this.log=pt((n=l.loggerName)!==null&&n!==void 0?n:dt.Track),this.loggerContextCb=l.loggerContextCb,this.setMaxListeners(100),this.kind=e,this._mediaStreamTrack=t,this._mediaStreamID=t.id,this.source=L.Source.Unknown}get logContext(){var t;return Object.assign(Object.assign({},(t=this.loggerContextCb)===null||t===void 0?void 0:t.call(this)),Y(this))}get currentBitrate(){return this._currentBitrate}get mediaStreamTrack(){return this._mediaStreamTrack}get mediaStreamID(){return this._mediaStreamID}attach(t){let e="audio";if(this.kind===L.Kind.Video)e="video";if(this.attachedElements.length===0&&this.kind===L.Kind.Video)this.addAppVisibilityListener();if(!t){if(e==="audio"){if(hl.forEach((r)=>{if(r.parentElement===null&&!t)t=r}),t)hl.splice(hl.indexOf(t),1)}if(!t)t=document.createElement(e)}if(!this.attachedElements.includes(t))this.attachedElements.push(t);$e(this.mediaStreamTrack,t);let l=t.srcObject.getTracks(),n=l.some((r)=>r.kind==="audio");return t.play().then(()=>{this.emit(n?W.AudioPlaybackStarted:W.VideoPlaybackStarted)}).catch((r)=>{if(r.name==="NotAllowedError")this.emit(n?W.AudioPlaybackFailed:W.VideoPlaybackFailed,r);else if(r.name==="AbortError")O.debug("".concat(n?"audio":"video"," playback aborted, likely due to new play request"));else O.warn("could not playback ".concat(n?"audio":"video"),r);if(n&&t&&l.some((o)=>o.kind==="video")&&r.name==="NotAllowedError")t.muted=!0,t.play().catch(()=>{})}),this.emit(W.ElementAttached,t),t}detach(t){try{if(t){Ne(this.mediaStreamTrack,t);let l=this.attachedElements.indexOf(t);if(l>=0)this.attachedElements.splice(l,1),this.recycleElement(t),this.emit(W.ElementDetached,t);return t}let e=[];return this.attachedElements.forEach((l)=>{Ne(this.mediaStreamTrack,l),e.push(l),this.recycleElement(l),this.emit(W.ElementDetached,l)}),this.attachedElements=[],e}finally{if(this.attachedElements.length===0)this.removeAppVisibilityListener()}}stop(){this.stopMonitor(),this._mediaStreamTrack.stop()}enable(){this._mediaStreamTrack.enabled=!0}disable(){this._mediaStreamTrack.enabled=!1}stopMonitor(){if(this.monitorInterval)clearInterval(this.monitorInterval);if(this.timeSyncHandle)cancelAnimationFrame(this.timeSyncHandle)}updateLoggerOptions(t){if(t.loggerName)this.log=pt(t.loggerName);if(t.loggerContextCb)this.loggerContextCb=t.loggerContextCb}recycleElement(t){if(t instanceof HTMLAudioElement){let e=!0;if(t.pause(),hl.forEach((l)=>{if(!l.parentElement)e=!1}),e)hl.push(t)}}handleAppVisibilityChanged(){return a(this,void 0,void 0,function*(){if(this.isInBackground=document.visibilityState==="hidden",!this.isInBackground&&this.kind===L.Kind.Video)setTimeout(()=>this.attachedElements.forEach((t)=>t.play().catch(()=>{})),0)})}addAppVisibilityListener(){if(Bt())this.isInBackground=document.visibilityState==="hidden",document.addEventListener("visibilitychange",this.appVisibilityChangedListener);else this.isInBackground=!1}removeAppVisibilityListener(){if(Bt())document.removeEventListener("visibilitychange",this.appVisibilityChangedListener)}};(function(t){let e;(function(h){h.Audio="audio",h.Video="video",h.Unknown="unknown"})(e=t.Kind||(t.Kind={}));let l;(function(h){h.Camera="camera",h.Microphone="microphone",h.ScreenShare="screen_share",h.ScreenShareAudio="screen_share_audio",h.Unknown="unknown"})(l=t.Source||(t.Source={}));let n;(function(h){h.Active="active",h.Paused="paused",h.Unknown="unknown"})(n=t.StreamState||(t.StreamState={}));function r(h){switch(h){case e.Audio:return Vt.AUDIO;case e.Video:return Vt.VIDEO;default:return Vt.DATA}}t.kindToProto=r;function o(h){switch(h){case Vt.AUDIO:return e.Audio;case Vt.VIDEO:return e.Video;default:return e.Unknown}}t.kindFromProto=o;function s(h){switch(h){case l.Camera:return rt.CAMERA;case l.Microphone:return rt.MICROPHONE;case l.ScreenShare:return rt.SCREEN_SHARE;case l.ScreenShareAudio:return rt.SCREEN_SHARE_AUDIO;default:return rt.UNKNOWN}}t.sourceToProto=s;function c(h){switch(h){case rt.CAMERA:return l.Camera;case rt.MICROPHONE:return l.Microphone;case rt.SCREEN_SHARE:return l.ScreenShare;case rt.SCREEN_SHARE_AUDIO:return l.ScreenShareAudio;default:return l.Unknown}}t.sourceFromProto=c;function i(h){switch(h){case Wr.ACTIVE:return n.Active;case Wr.PAUSED:return n.Paused;default:return n.Unknown}}t.streamStateFromProto=i})(L||(L={}));rb={sharedKey:!1,ratchetSalt:nb,ratchetWindowSize:8,failureTolerance:lb,keyringSize:16,keySize:128};(function(t){t.SetKey="setKey",t.RatchetRequest="ratchetRequest",t.KeyRatcheted="keyRatcheted"})(fe||(fe={}));(function(t){t.KeyRatcheted="keyRatcheted"})(jr||(jr={}));(function(t){t.ParticipantEncryptionStatusChanged="participantEncryptionStatusChanged",t.EncryptionError="encryptionError"})(ce||(ce={}));(function(t){t.Error="cryptorError"})(qr||(qr={}));Bo=class Bo extends zt.EventEmitter{constructor(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};super();this.latestManuallySetKeyIndex=0,this.onKeyRatcheted=(e,l,n)=>{O.debug("key ratcheted event received",{ratchetResult:e,participantId:l,keyIndex:n})},this.keyInfoMap=new Map,this.options=Object.assign(Object.assign({},rb),t),this.on(fe.KeyRatcheted,this.onKeyRatcheted)}onSetEncryptionKey(t,e,l){let n={key:t,participantIdentity:e,keyIndex:l};if(!this.options.sharedKey&&!e)throw Error("participant identity needs to be passed for encryption key if sharedKey option is false");if(this.keyInfoMap.set("".concat(e!==null&&e!==void 0?e:"shared","-").concat(l!==null&&l!==void 0?l:0),n),l!==void 0)this.latestManuallySetKeyIndex=l;this.emit(fe.SetKey,n,l!==void 0)}getKeys(){return Array.from(this.keyInfoMap.values())}getLatestManuallySetKeyIndex(){return this.latestManuallySetKeyIndex}getOptions(){return this.options}ratchetKey(t,e){this.emit(fe.RatchetRequest,t,e)}};Oh=class Oh extends Bo{constructor(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},e=Object.assign(Object.assign({},t),{sharedKey:!0,ratchetWindowSize:0,failureTolerance:-1});super(e)}setKey(t){return a(this,void 0,void 0,function*(){let e=typeof t==="string"?yield Vh(t):yield Xh(t);this.onSetEncryptionKey(e)})}};(function(t){t[t.InvalidKey=0]="InvalidKey",t[t.MissingKey=1]="MissingKey",t[t.InternalError=2]="InternalError"})(yn||(yn={}));Dh=class Dh extends $t{constructor(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:yn.InternalError,l=arguments.length>2?arguments[2]:void 0;super(40,t);this.reason=e,this.participantIdentity=l}};Yh=class Yh extends zt.EventEmitter{constructor(t,e){super();this.decryptDataRequests=new Map,this.encryptDataRequests=new Map,this.onWorkerMessage=(l)=>{var n,r;let{kind:o,data:s}=l.data;switch(o){case"error":if(O.error(s.error.message),s.uuid){let h=this.decryptDataRequests.get(s.uuid);if(h===null||h===void 0?void 0:h.reject){h.reject(s.error);break}let f=this.encryptDataRequests.get(s.uuid);if(f===null||f===void 0?void 0:f.reject){f.reject(s.error);break}}this.emit(ce.EncryptionError,s.error,s.participantIdentity);break;case"initAck":if(s.enabled)this.keyProvider.getKeys().forEach((h)=>{this.postKey(h,!1)});break;case"enable":if(s.enabled)this.keyProvider.getKeys().forEach((h)=>{this.postKey(h,!1)});if(this.encryptionEnabled!==s.enabled&&s.participantIdentity===((n=this.room)===null||n===void 0?void 0:n.localParticipant.identity))this.emit(ce.ParticipantEncryptionStatusChanged,s.enabled,this.room.localParticipant),this.encryptionEnabled=s.enabled;else if(s.participantIdentity){let h=(r=this.room)===null||r===void 0?void 0:r.getParticipantByIdentity(s.participantIdentity);if(!h)throw TypeError("couldn't set encryption status, participant not found".concat(s.participantIdentity));this.emit(ce.ParticipantEncryptionStatusChanged,s.enabled,h)}break;case"ratchetKey":this.keyProvider.emit(fe.KeyRatcheted,s.ratchetResult,s.participantIdentity,s.keyIndex);break;case"decryptDataResponse":let c=this.decryptDataRequests.get(s.uuid);if(c===null||c===void 0?void 0:c.resolve)c.resolve(s);break;case"encryptDataResponse":let i=this.encryptDataRequests.get(s.uuid);if(i===null||i===void 0?void 0:i.resolve)i.resolve(s);break}},this.onWorkerError=(l)=>{O.error("e2ee worker encountered an error:",{error:l.error}),this.emit(ce.EncryptionError,l.error,void 0)},this.keyProvider=t.keyProvider,this.worker=t.worker,this.encryptionEnabled=!1,this.dataChannelEncryptionEnabled=e}get isEnabled(){return this.encryptionEnabled}get isDataChannelEncryptionEnabled(){return this.isEnabled&&this.dataChannelEncryptionEnabled}setup(t){if(!Hh())throw new rl("tried to setup end-to-end encryption on an unsupported browser");if(O.info("setting up e2ee"),t!==this.room){this.room=t,this.setupEventListeners(t,this.keyProvider);let e={kind:"init",data:{keyProviderOptions:this.keyProvider.getOptions(),loglevel:ia.getLevel()}};if(this.worker)O.info("initializing worker",{worker:this.worker}),this.worker.onmessage=this.onWorkerMessage,this.worker.onerror=this.onWorkerError,this.worker.postMessage(e)}}setParticipantCryptorEnabled(t,e){O.debug("set e2ee to ".concat(t," for participant ").concat(e)),this.postEnable(t,e)}setSifTrailer(t){if(!t||t.length===0)O.warn("ignoring server sent trailer as it's empty");else this.postSifTrailer(t)}setupEngine(t){t.on(B.RTPVideoMapUpdate,(e)=>{this.postRTPMap(e)})}setupEventListeners(t,e){t.on(I.TrackPublished,(l,n)=>this.setParticipantCryptorEnabled(l.trackInfo.encryption!==T.NONE,n.identity)),t.on(I.ConnectionStateChanged,(l)=>{if(l===K.Connected)t.remoteParticipants.forEach((n)=>{n.trackPublications.forEach((r)=>{this.setParticipantCryptorEnabled(r.trackInfo.encryption!==T.NONE,n.identity)})})}).on(I.TrackUnsubscribed,(l,n,r)=>{var o;let s={kind:"removeTransform",data:{participantIdentity:r.identity,trackId:l.mediaStreamID}};(o=this.worker)===null||o===void 0||o.postMessage(s)}).on(I.TrackSubscribed,(l,n,r)=>{this.setupE2EEReceiver(l,r.identity,n.trackInfo)}).on(I.SignalConnected,()=>{if(!this.room)throw TypeError("expected room to be present on signal connect");let l=e.getLatestManuallySetKeyIndex();e.getKeys().forEach((n)=>{var r;this.postKey(n,l===((r=n.keyIndex)!==null&&r!==void 0?r:0))}),this.setParticipantCryptorEnabled(this.room.localParticipant.isE2EEEnabled,this.room.localParticipant.identity)}),t.localParticipant.on(N.LocalSenderCreated,(l,n)=>a(this,void 0,void 0,function*(){this.setupE2EESender(n,l)})),t.localParticipant.on(N.LocalTrackPublished,(l)=>{if(!ue(l.track)||!Bl())return;let n={kind:"updateCodec",data:{trackId:l.track.mediaStreamID,codec:wl(l.trackInfo.codecs[0].mimeType),participantIdentity:this.room.localParticipant.identity}};this.worker.postMessage(n)}),e.on(fe.SetKey,(l,n)=>this.postKey(l,n!==null&&n!==void 0?n:!0)).on(fe.RatchetRequest,(l,n)=>this.postRatchetRequest(l,n))}encryptData(t){return a(this,void 0,void 0,function*(){if(!this.worker)throw Error("could not encrypt data, worker is missing");let e=crypto.randomUUID(),l={kind:"encryptDataRequest",data:{uuid:e,payload:t,participantIdentity:this.room.localParticipant.identity}},n=new yt;return n.onFinally=()=>{this.encryptDataRequests.delete(e)},this.encryptDataRequests.set(e,n),this.worker.postMessage(l),n.promise})}handleEncryptedData(t,e,l,n){if(!this.worker)throw Error("could not handle encrypted data, worker is missing");let r=crypto.randomUUID(),o={kind:"decryptDataRequest",data:{uuid:r,payload:t,iv:e,participantIdentity:l,keyIndex:n}},s=new yt;return s.onFinally=()=>{this.decryptDataRequests.delete(r)},this.decryptDataRequests.set(r,s),this.worker.postMessage(o),s.promise}postRatchetRequest(t,e){if(!this.worker)throw Error("could not ratchet key, worker is missing");let l={kind:"ratchetRequest",data:{participantIdentity:t,keyIndex:e}};this.worker.postMessage(l)}postKey(t,e){let{key:l,participantIdentity:n,keyIndex:r}=t;var o;if(!this.worker)throw Error("could not set key, worker is missing");let s={kind:"setKey",data:{participantIdentity:n,isPublisher:n===((o=this.room)===null||o===void 0?void 0:o.localParticipant.identity),key:l,keyIndex:r,updateCurrentKeyIndex:e}};this.worker.postMessage(s)}postEnable(t,e){if(this.worker){let l={kind:"enable",data:{enabled:t,participantIdentity:e}};this.worker.postMessage(l)}else throw ReferenceError("failed to enable e2ee, worker is not ready")}postRTPMap(t){var e;if(!this.worker)throw TypeError("could not post rtp map, worker is missing");if(!((e=this.room)===null||e===void 0?void 0:e.localParticipant.identity))throw TypeError("could not post rtp map, local participant identity is missing");let l={kind:"setRTPMap",data:{map:t,participantIdentity:this.room.localParticipant.identity}};this.worker.postMessage(l)}postSifTrailer(t){if(!this.worker)throw Error("could not post SIF trailer, worker is missing");let e={kind:"setSifTrailer",data:{trailer:t}};this.worker.postMessage(e)}setupE2EEReceiver(t,e,l){if(!t.receiver)return;if(!(l===null||l===void 0?void 0:l.mimeType)||l.mimeType==="")throw TypeError("MimeType missing from trackInfo, cannot set up E2EE cryptor");this.handleReceiver(t.receiver,t.mediaStreamID,e,t.kind==="video"?wl(l.mimeType):void 0)}setupE2EESender(t,e){if(!me(t)||!e){if(!e)O.warn("early return because sender is not ready");return}this.handleSender(e,t.mediaStreamID,void 0)}handleReceiver(t,e,l,n){return a(this,void 0,void 0,function*(){if(!this.worker)return;if(mn()&&!Ts()){let r={kind:"decode",participantIdentity:l,trackId:e,codec:n};t.transform=new RTCRtpScriptTransform(this.worker,r)}else{if(ul in t&&n){let c={kind:"updateCodec",data:{trackId:e,codec:n,participantIdentity:l}};this.worker.postMessage(c);return}let{writableStream:r,readableStream:o}=t;if(!r||!o){let c=t.createEncodedStreams();t.writableStream=c.writable,r=c.writable,t.readableStream=c.readable,o=c.readable}let s={kind:"decode",data:{readableStream:o,writableStream:r,trackId:e,codec:n,participantIdentity:l,isReuse:ul in t}};this.worker.postMessage(s,[o,r])}t[ul]=!0})}handleSender(t,e,l){var n;if(ul in t||!this.worker)return;if(!((n=this.room)===null||n===void 0?void 0:n.localParticipant.identity)||this.room.localParticipant.identity==="")throw TypeError("local identity needs to be known in order to set up encrypted sender");if(mn()&&!Ts()){O.info("initialize script transform");let r={kind:"encode",participantIdentity:this.room.localParticipant.identity,trackId:e,codec:l};t.transform=new RTCRtpScriptTransform(this.worker,r)}else{O.info("initialize encoded streams");let r=t.createEncodedStreams(),o={kind:"encode",data:{readableStream:r.readable,writableStream:r.writable,codec:l,trackId:e,participantIdentity:this.room.localParticipant.identity,isReuse:!1}};this.worker.postMessage(o,[r.readable,r.writable])}t[ul]=!0}};Te._instance=null;ct.mediaDeviceKinds=["audioinput","audiooutput","videoinput"];ct.userMediaPromiseMap=new Map;(function(t){t[t.Reserved=0]="Reserved",t[t.TooLarge=1]="TooLarge"})(He||(He={}));el=class el extends Wt{constructor(t,e){super(19,t);this.name="DataTrackHandleError",this.reason=e,this.reasonName=He[e]}isReason(t){return this.reason===t}static tooLarge(){return new el("Value too large to be a valid track handle",He.TooLarge)}static reserved(t){return new el("0x".concat(t.toString(16)," is a reserved value."),He.Reserved)}};gb={fromNumber(t){if(t===0)throw el.reserved(t);if(t>Wo)throw el.tooLarge();return t}};Tr={from(t){return{sid:t.sid,pubHandle:t.pubHandle,name:t.name,usesE2ee:t.encryption!==T.NONE}},toProtobuf(t){return new In({sid:t.sid,pubHandle:t.pubHandle,name:t.name,encryption:t.usesE2ee?T.GCM:T.NONE})}};(function(t){t[t.WAITING=0]="WAITING",t[t.RUNNING=1]="RUNNING",t[t.COMPLETED=2]="COMPLETED"})(ml||(ml={}));wb=["syncState","trickle","offer","answer","simulate","leave"];(function(t){t[t.CONNECTING=0]="CONNECTING",t[t.CONNECTED=1]="CONNECTED",t[t.RECONNECTING=2]="RECONNECTING",t[t.DISCONNECTING=3]="DISCONNECTING",t[t.DISCONNECTED=4]="DISCONNECTED"})(F||(F={}));Ot={},br={},xr={exports:{}};Nt=Ib();Ee={NegotiationStarted:"negotiationStarted",NegotiationComplete:"negotiationComplete",RTPVideoPayloadTypes:"rtpVideoPayloadTypes"};kr=class kr extends zt.EventEmitter{get pc(){if(!this._pc)this._pc=this.createPC();return this._pc}constructor(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};var l;super();this.log=O,this.ddExtID=0,this.latestOfferId=0,this.pendingCandidates=[],this.restartingIce=!1,this.renegotiate=!1,this.trackBitrates=[],this.remoteStereoMids=[],this.remoteNackMids=[],this.negotiate=No((n)=>a(this,void 0,void 0,function*(){this.emit(Ee.NegotiationStarted);try{yield this.createAndSendOffer()}catch(r){if(n)n(r);else throw r}}),Wb),this.close=()=>{if(!this._pc)return;this._pc.close(),this._pc.onconnectionstatechange=null,this._pc.oniceconnectionstatechange=null,this._pc.onicegatheringstatechange=null,this._pc.ondatachannel=null,this._pc.onnegotiationneeded=null,this._pc.onsignalingstatechange=null,this._pc.onicecandidate=null,this._pc.ondatachannel=null,this._pc.ontrack=null,this._pc.onconnectionstatechange=null,this._pc.oniceconnectionstatechange=null,this._pc=null},this.log=pt((l=e.loggerName)!==null&&l!==void 0?l:dt.PCTransport),this.loggerOptions=e,this.config=t,this._pc=this.createPC(),this.offerLock=new ht}createPC(){let t=new RTCPeerConnection(this.config);return t.onicecandidate=(e)=>{var l;if(!e.candidate)return;(l=this.onIceCandidate)===null||l===void 0||l.call(this,e.candidate)},t.onicecandidateerror=(e)=>{var l;(l=this.onIceCandidateError)===null||l===void 0||l.call(this,e)},t.oniceconnectionstatechange=()=>{var e;(e=this.onIceConnectionStateChange)===null||e===void 0||e.call(this,t.iceConnectionState)},t.onsignalingstatechange=()=>{var e;(e=this.onSignalingStatechange)===null||e===void 0||e.call(this,t.signalingState)},t.onconnectionstatechange=()=>{var e;(e=this.onConnectionStateChange)===null||e===void 0||e.call(this,t.connectionState)},t.ondatachannel=(e)=>{var l;(l=this.onDataChannel)===null||l===void 0||l.call(this,e)},t.ontrack=(e)=>{var l;(l=this.onTrack)===null||l===void 0||l.call(this,e)},t}get logContext(){var t,e;return Object.assign({},(e=(t=this.loggerOptions).loggerContextCb)===null||e===void 0?void 0:e.call(t))}get isICEConnected(){return this._pc!==null&&(this.pc.iceConnectionState==="connected"||this.pc.iceConnectionState==="completed")}addIceCandidate(t){return a(this,void 0,void 0,function*(){if(this.pc.remoteDescription&&!this.restartingIce)return this.pc.addIceCandidate(t);this.pendingCandidates.push(t)})}setRemoteDescription(t,e){return a(this,void 0,void 0,function*(){var l,n;if(t.type==="answer"&&this.latestOfferId>0&&e>0&&e!==this.latestOfferId)return this.log.warn("ignoring answer for old offer",Object.assign(Object.assign({},this.logContext),{offerId:e,latestOfferId:this.latestOfferId})),!1;let r=void 0;if(t.type==="offer"){let{stereoMids:o,nackMids:s}=Rb(t);this.remoteStereoMids=o,this.remoteNackMids=s}else if(t.type==="answer"){if(this.pendingInitialOffer){let s=this.pendingInitialOffer;this.pendingInitialOffer=void 0;let c=Nt.parse((l=s.sdp)!==null&&l!==void 0?l:"");c.media.forEach((i)=>{Sl(i)}),this.log.debug("setting pending initial offer before processing answer",this.logContext),yield this.setMungedSDP(s,Nt.write(c))}let o=Nt.parse((n=t.sdp)!==null&&n!==void 0?n:"");o.media.forEach((s)=>{let c=Mo(s.mid);if(s.type==="audio")this.trackBitrates.some((i)=>{if(!i.transceiver||c!=i.transceiver.mid)return!1;let h=0;if(s.rtp.some((u)=>{if(u.codec.toUpperCase()===i.codec.toUpperCase())return h=u.payload,!0;return!1}),h===0)return!0;let f=!1;for(let u of s.fmtp)if(u.payload===h){if(u.config=u.config.split(";").filter((d)=>!d.includes("maxaveragebitrate")).join(";"),i.maxbr>0)u.config+=";maxaveragebitrate=".concat(i.maxbr*1000);f=!0;break}if(!f){if(i.maxbr>0)s.fmtp.push({payload:h,config:"maxaveragebitrate=".concat(i.maxbr*1000)})}return!0})}),r=Nt.write(o)}if(yield this.setMungedSDP(t,r,!0),this.pendingCandidates.forEach((o)=>{this.pc.addIceCandidate(o)}),this.pendingCandidates=[],this.restartingIce=!1,this.renegotiate)this.renegotiate=!1,yield this.createAndSendOffer();else if(t.type==="answer"){if(this.emit(Ee.NegotiationComplete),t.sdp)Nt.parse(t.sdp).media.forEach((s)=>{if(s.type==="video")this.emit(Ee.RTPVideoPayloadTypes,s.rtp)})}return!0})}createInitialOffer(){return a(this,void 0,void 0,function*(){var t;let e=yield this.offerLock.lock();try{if(this.pc.signalingState!=="stable"){this.log.warn("signaling state is not stable, cannot create initial offer",this.logContext);return}let l=this.latestOfferId+1;this.latestOfferId=l;let n=yield this.pc.createOffer();this.pendingInitialOffer={sdp:n.sdp,type:n.type};let r=Nt.parse((t=n.sdp)!==null&&t!==void 0?t:"");return r.media.forEach((o)=>{Sl(o)}),n.sdp=Nt.write(r),{offer:n,offerId:l}}finally{e()}})}createAndSendOffer(t){return a(this,void 0,void 0,function*(){var e;let l=yield this.offerLock.lock();try{if(this.onOffer===void 0)return;if(t===null||t===void 0?void 0:t.iceRestart)this.log.debug("restarting ICE",this.logContext),this.restartingIce=!0;if(this._pc&&(this._pc.signalingState==="have-local-offer"||this.pendingInitialOffer)){let s=this._pc.remoteDescription;if((t===null||t===void 0?void 0:t.iceRestart)&&s)yield this._pc.setRemoteDescription(s);else{this.renegotiate=!0,this.log.debug("requesting renegotiation",Object.assign({},this.logContext));return}}else if(!this._pc||this._pc.signalingState==="closed"){this.log.warn("could not createOffer with closed peer connection",this.logContext);return}this.log.debug("starting to negotiate",this.logContext);let n=this.latestOfferId+1;this.latestOfferId=n;let r=yield this.pc.createOffer(t);this.log.debug("original offer",Object.assign({sdp:r.sdp},this.logContext));let o=Nt.parse((e=r.sdp)!==null&&e!==void 0?e:"");if(o.media.forEach((s)=>{if(Sl(s),s.type==="audio")ri(s,["all"],[]);else if(s.type==="video")this.trackBitrates.some((c)=>{if(!s.msid||!c.cid||!s.msid.includes(c.cid))return!1;let i=0;if(s.rtp.some((f)=>{if(f.codec.toUpperCase()===c.codec.toUpperCase())return i=f.payload,!0;return!1}),i===0)return!0;if(Kt(c.codec)&&!Ge())this.ensureVideoDDExtensionForSVC(s,o);if(!Kt(c.codec))return!0;let h=Math.round(c.maxbr*Bb);for(let f of s.fmtp)if(f.payload===i){if(!f.config.includes("x-google-start-bitrate"))f.config+=";x-google-start-bitrate=".concat(h);break}return!0})}),this.latestOfferId>n){this.log.warn("latestOfferId mismatch",Object.assign(Object.assign({},this.logContext),{latestOfferId:this.latestOfferId,offerId:n}));return}yield this.setMungedSDP(r,Nt.write(o)),this.onOffer(r,this.latestOfferId)}finally{l()}})}createAndSetAnswer(){return a(this,void 0,void 0,function*(){var t;let e=yield this.pc.createAnswer(),l=Nt.parse((t=e.sdp)!==null&&t!==void 0?t:"");return l.media.forEach((n)=>{if(Sl(n),n.type==="audio")ri(n,this.remoteStereoMids,this.remoteNackMids)}),yield this.setMungedSDP(e,Nt.write(l)),e})}createDataChannel(t,e){return this.pc.createDataChannel(t,e)}addTransceiver(t,e){return this.pc.addTransceiver(t,e)}addTransceiverOfKind(t,e){return this.pc.addTransceiver(t,e)}addTrack(t){if(!this._pc)throw new U("PC closed, cannot add track");return this._pc.addTrack(t)}setTrackCodecBitrate(t){this.trackBitrates.push(t)}setConfiguration(t){var e;if(!this._pc)throw new U("PC closed, cannot configure");return(e=this._pc)===null||e===void 0?void 0:e.setConfiguration(t)}canRemoveTrack(){var t;return!!((t=this._pc)===null||t===void 0?void 0:t.removeTrack)}removeTrack(t){var e;return(e=this._pc)===null||e===void 0?void 0:e.removeTrack(t)}getConnectionState(){var t,e;return(e=(t=this._pc)===null||t===void 0?void 0:t.connectionState)!==null&&e!==void 0?e:"closed"}getICEConnectionState(){var t,e;return(e=(t=this._pc)===null||t===void 0?void 0:t.iceConnectionState)!==null&&e!==void 0?e:"closed"}getSignallingState(){var t,e;return(e=(t=this._pc)===null||t===void 0?void 0:t.signalingState)!==null&&e!==void 0?e:"closed"}getTransceivers(){var t,e;return(e=(t=this._pc)===null||t===void 0?void 0:t.getTransceivers())!==null&&e!==void 0?e:[]}getSenders(){var t,e;return(e=(t=this._pc)===null||t===void 0?void 0:t.getSenders())!==null&&e!==void 0?e:[]}getLocalDescription(){var t;return(t=this._pc)===null||t===void 0?void 0:t.localDescription}getRemoteDescription(){var t;return(t=this.pc)===null||t===void 0?void 0:t.remoteDescription}getStats(){return this.pc.getStats()}getConnectedAddress(){return a(this,void 0,void 0,function*(){var t;if(!this._pc)return;let e="",l=new Map,n=new Map;if((yield this._pc.getStats()).forEach((s)=>{switch(s.type){case"transport":e=s.selectedCandidatePairId;break;case"candidate-pair":if(e===""&&s.selected)e=s.id;l.set(s.id,s);break;case"remote-candidate":n.set(s.id,"".concat(s.address,":").concat(s.port));break}}),e==="")return;let o=(t=l.get(e))===null||t===void 0?void 0:t.remoteCandidateId;if(o===void 0)return;return n.get(o)})}setMungedSDP(t,e,l){return a(this,void 0,void 0,function*(){if(e){let n=t.sdp;t.sdp=e;try{if(this.log.debug("setting munged ".concat(l?"remote":"local"," description"),this.logContext),l)yield this.pc.setRemoteDescription(t);else yield this.pc.setLocalDescription(t);return}catch(r){this.log.warn("not able to set ".concat(t.type,", falling back to unmodified sdp"),Object.assign(Object.assign({},this.logContext),{error:r,sdp:e})),t.sdp=n}}try{if(l)yield this.pc.setRemoteDescription(t);else yield this.pc.setLocalDescription(t)}catch(n){let r="unknown error";if(n instanceof Error)r=n.message;else if(typeof n==="string")r=n;let o={error:r,sdp:t.sdp};if(!l&&this.pc.remoteDescription)o.remoteSdp=this.pc.remoteDescription;throw this.log.error("unable to set ".concat(t.type),Object.assign(Object.assign({},this.logContext),{fields:o})),new he(r)}})}ensureVideoDDExtensionForSVC(t,e){var l,n;if(!((l=t.ext)===null||l===void 0?void 0:l.some((o)=>{if(o.uri===qs)return!0;return!1}))){if(this.ddExtID===0){let o=0;e.media.forEach((s)=>{var c;if(s.type!=="video")return;(c=s.ext)===null||c===void 0||c.forEach((i)=>{if(i.value>o)o=i.value})}),this.ddExtID=o+1}(n=t.ext)===null||n===void 0||n.push({value:this.ddExtID,uri:qs})}}};$b={audioPreset:an.music,dtx:!0,red:!0,forceStereo:!1,simulcast:!0,screenShareEncoding:Vl.h1080fps15.encoding,stopMicTrackOnMute:!1,videoCodec:Pr,backupCodec:!0,preConnectBuffer:!1},qh={deviceId:{ideal:"default"},autoGainControl:!0,echoCancellation:!0,noiseSuppression:!0,voiceIsolation:!0},Th={deviceId:{ideal:"default"},resolution:ve.h720.resolution},Nb={adaptiveStream:!1,dynacast:!1,stopLocalTrackOnUnpublish:!0,reconnectPolicy:new mo,disconnectOnPageLeave:!0,webAudioMix:!1,singlePeerConnection:!0},Ho={autoSubscribe:!0,maxRetries:1,peerConnectionTimeout:15000,websocketTimeout:15000};(function(t){t[t.NEW=0]="NEW",t[t.CONNECTING=1]="CONNECTING",t[t.CONNECTED=2]="CONNECTED",t[t.FAILED=3]="FAILED",t[t.CLOSING=4]="CLOSING",t[t.CLOSED=5]="CLOSED"})(J||(J={}));Z.cache=new Map;Z.settingsTimeouts=new Map;Z.connectionTrackers=new Map;Z.fetchLock=new ht;_=class _ extends Error{constructor(t,e,l){super(e);this.code=t,this.message=oi(e,_.MAX_MESSAGE_BYTES),this.data=l?oi(l,_.MAX_DATA_BYTES):void 0}static fromProto(t){return new _(t.code,t.message,t.data)}toProto(){return new lc({code:this.code,message:this.message,data:this.data})}static builtIn(t,e){return new _(_.ErrorCode[t],_.ErrorMessage[t],e)}};_.MAX_MESSAGE_BYTES=256;_.MAX_DATA_BYTES=15360;_.ErrorCode={APPLICATION_ERROR:1500,CONNECTION_TIMEOUT:1501,RESPONSE_TIMEOUT:1502,RECIPIENT_DISCONNECTED:1503,RESPONSE_PAYLOAD_TOO_LARGE:1504,SEND_FAILED:1505,UNSUPPORTED_METHOD:1400,RECIPIENT_NOT_FOUND:1401,REQUEST_PAYLOAD_TOO_LARGE:1402,UNSUPPORTED_SERVER:1403,UNSUPPORTED_VERSION:1404};_.ErrorMessage={APPLICATION_ERROR:"Application error in method handler",CONNECTION_TIMEOUT:"Connection timeout",RESPONSE_TIMEOUT:"Response timeout",RECIPIENT_DISCONNECTED:"Recipient disconnected",RESPONSE_PAYLOAD_TOO_LARGE:"Response payload too large",SEND_FAILED:"Failed to send",UNSUPPORTED_METHOD:"Method not supported at destination",RECIPIENT_NOT_FOUND:"Recipient not found",REQUEST_PAYLOAD_TOO_LARGE:"Request payload too large",UNSUPPORTED_SERVER:"RPC not supported by server",UNSUPPORTED_VERSION:"Unsupported RPC version"};Xo=typeof MediaRecorder<"u";Eb=Xo?MediaRecorder:Ph;Go=class Go extends Eb{constructor(t,e){if(!Xo)throw Error("MediaRecorder is not available in this environment");super(new MediaStream([t.mediaStreamTrack]),e);let l,n,r=()=>n===void 0,o=()=>{this.removeEventListener("dataavailable",l),this.removeEventListener("stop",o),this.removeEventListener("error",s),n===null||n===void 0||n.close(),n=void 0},s=(c)=>{n===null||n===void 0||n.error(c),this.removeEventListener("dataavailable",l),this.removeEventListener("stop",o),this.removeEventListener("error",s),n=void 0};this.byteStream=new ReadableStream({start:(c)=>{n=c,l=(i)=>a(this,void 0,void 0,function*(){let h;if(i.data.arrayBuffer){let f=yield i.data.arrayBuffer();h=new Uint8Array(f)}else if(i.data.byteArray)h=i.data.byteArray;else throw Error("no data available!");if(r())return;c.enqueue(h)}),this.addEventListener("dataavailable",l)},cancel:()=>{o()}}),this.addEventListener("stop",o),this.addEventListener("error",s)}};Gn=class Gn extends L{get sender(){return this._sender}set sender(t){this._sender=t}get constraints(){return this._constraints}get hasPreConnectBuffer(){return!!this.localTrackRecorder}constructor(t,e,l){let n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1,r=arguments.length>4?arguments[4]:void 0;super(t,e,r);if(this.manuallyStopped=!1,this.pendingDeviceChange=!1,this._isUpstreamPaused=!1,this.handleTrackMuteEvent=()=>this.debouncedTrackMuteHandler().catch(()=>this.log.debug("track mute bounce got cancelled by an unmute event",this.logContext)),this.debouncedTrackMuteHandler=No(()=>a(this,void 0,void 0,function*(){yield this.pauseUpstream()}),5000),this.handleTrackUnmuteEvent=()=>a(this,void 0,void 0,function*(){this.debouncedTrackMuteHandler.cancel("unmute"),yield this.resumeUpstream()}),this.handleEnded=()=>{if(this.isInBackground)this.reacquireTrack=!0;this._mediaStreamTrack.removeEventListener("mute",this.handleTrackMuteEvent),this._mediaStreamTrack.removeEventListener("unmute",this.handleTrackUnmuteEvent),this.emit(W.Ended,this)},this.reacquireTrack=!1,this.providedByUser=n,this.muteLock=new ht,this.pauseUpstreamLock=new ht,this.trackChangeLock=new ht,this.trackChangeLock.lock().then((o)=>a(this,void 0,void 0,function*(){try{yield this.setMediaStreamTrack(t,!0)}finally{o()}})),this._constraints=t.getConstraints(),l)this._constraints=l}get id(){return this._mediaStreamTrack.id}get dimensions(){if(this.kind!==L.Kind.Video)return;let{width:t,height:e}=this._mediaStreamTrack.getSettings();if(t&&e)return{width:t,height:e};return}get isUpstreamPaused(){return this._isUpstreamPaused}get isUserProvided(){return this.providedByUser}get mediaStreamTrack(){var t,e;return(e=(t=this.processor)===null||t===void 0?void 0:t.processedTrack)!==null&&e!==void 0?e:this._mediaStreamTrack}get isLocal(){return!0}getSourceTrackSettings(){return this._mediaStreamTrack.getSettings()}setMediaStreamTrack(t,e,l){return a(this,void 0,void 0,function*(){var n;if(t===this._mediaStreamTrack&&!e)return;if(this._mediaStreamTrack)this.attachedElements.forEach((o)=>{Ne(this._mediaStreamTrack,o)}),this.debouncedTrackMuteHandler.cancel("new-track"),this._mediaStreamTrack.removeEventListener("ended",this.handleEnded),this._mediaStreamTrack.removeEventListener("mute",this.handleTrackMuteEvent),this._mediaStreamTrack.removeEventListener("unmute",this.handleTrackUnmuteEvent);if(this.mediaStream=new MediaStream([t]),t)t.addEventListener("ended",this.handleEnded),t.addEventListener("mute",this.handleTrackMuteEvent),t.addEventListener("unmute",this.handleTrackUnmuteEvent),this._constraints=t.getConstraints();let r;if(this.processor&&t){if(this.log.debug("restarting processor",this.logContext),this.kind==="unknown")throw TypeError("cannot set processor on track of unknown kind");if(this.processorElement)$e(t,this.processorElement),this.processorElement.muted=!0;yield this.processor.restart({track:t,kind:this.kind,element:this.processorElement}),r=this.processor.processedTrack}if(this.sender&&((n=this.sender.transport)===null||n===void 0?void 0:n.state)!=="closed")yield this.sender.replaceTrack(r!==null&&r!==void 0?r:t);if(!this.providedByUser&&this._mediaStreamTrack!==t)this._mediaStreamTrack.stop();if(this._mediaStreamTrack=t,t)this._mediaStreamTrack.enabled=l?!0:!this.isMuted,yield this.resumeUpstream(),this.attachedElements.forEach((o)=>{$e(r!==null&&r!==void 0?r:t,o)})})}waitForDimensions(){return a(this,arguments,void 0,function(){var t=this;let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Xb;return function*(){var l;if(t.kind===L.Kind.Audio)throw Error("cannot get dimensions for audio tracks");if(((l=At())===null||l===void 0?void 0:l.os)==="iOS")yield ut(10);let n=Date.now();while(Date.now()-n<e){let r=t.dimensions;if(r)return r;yield ut(50)}throw new Xt("unable to get track dimensions after timeout")}()})}setDeviceId(t){return a(this,void 0,void 0,function*(){if(this._constraints.deviceId===t&&this._mediaStreamTrack.getSettings().deviceId===Me(t))return!0;if(this._constraints.deviceId=t,this.isMuted)return this.pendingDeviceChange=!0,!0;return yield this.restartTrack(),Me(t)===this._mediaStreamTrack.getSettings().deviceId})}getDeviceId(){return a(this,arguments,void 0,function(){var t=this;let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;return function*(){if(t.source===L.Source.ScreenShare)return;let{deviceId:l,groupId:n}=t._mediaStreamTrack.getSettings(),r=t.kind===L.Kind.Audio?"audioinput":"videoinput";return e?ct.getInstance().normalizeDeviceId(r,l,n):l}()})}mute(){return a(this,void 0,void 0,function*(){return this.setTrackMuted(!0),this})}unmute(){return a(this,void 0,void 0,function*(){return this.setTrackMuted(!1),this})}replaceTrack(t,e){return a(this,void 0,void 0,function*(){let l=yield this.trackChangeLock.lock();try{if(!this.sender)throw new Xt("unable to replace an unpublished track");let n,r;if(typeof e==="boolean")n=e;else if(e!==void 0)n=e.userProvidedTrack,r=e.stopProcessor;if(this.providedByUser=n!==null&&n!==void 0?n:!0,this.log.debug("replace MediaStreamTrack",this.logContext),yield this.setMediaStreamTrack(t),r&&this.processor)yield this.internalStopProcessor();return this}finally{l()}})}restart(t,e){return a(this,void 0,void 0,function*(){this.manuallyStopped=!1;let l=yield this.trackChangeLock.lock();try{if(!t)t=this._constraints;let{deviceId:n,facingMode:r}=t,o=yo(t,["deviceId","facingMode"]);this.log.debug("restarting track with constraints",Object.assign(Object.assign({},this.logContext),{constraints:t}));let s={audio:!1,video:!1};if(this.kind===L.Kind.Video)s.video=n||r?{deviceId:n,facingMode:r}:!0;else s.audio=n?Object.assign({deviceId:n},o):!0;this.attachedElements.forEach((h)=>{Ne(this.mediaStreamTrack,h)}),this._mediaStreamTrack.removeEventListener("ended",this.handleEnded),this._mediaStreamTrack.stop();let i=(yield navigator.mediaDevices.getUserMedia(s)).getTracks()[0];if(this.kind===L.Kind.Video)yield i.applyConstraints(o);if(i.addEventListener("ended",this.handleEnded),this.log.debug("re-acquired MediaStreamTrack",this.logContext),yield this.setMediaStreamTrack(i,!1,e),this._constraints=t,this.pendingDeviceChange=!1,this.emit(W.Restarted,this),this.manuallyStopped)this.log.warn("track was stopped during a restart, stopping restarted track",this.logContext),this.stop();return this}finally{l()}})}setTrackMuted(t){if(this.log.debug("setting ".concat(this.kind," track ").concat(t?"muted":"unmuted"),this.logContext),this.isMuted===t&&this._mediaStreamTrack.enabled!==t)return;this.isMuted=t,this._mediaStreamTrack.enabled=!t,this.emit(t?W.Muted:W.Unmuted,this)}get needsReAcquisition(){return this._mediaStreamTrack.readyState!=="live"||this._mediaStreamTrack.muted||!this._mediaStreamTrack.enabled||this.reacquireTrack}handleAppVisibilityChanged(){let t=Object.create(null,{handleAppVisibilityChanged:{get:()=>super.handleAppVisibilityChanged}});return a(this,void 0,void 0,function*(){if(yield t.handleAppVisibilityChanged.call(this),!Ih())return;if(this.log.debug("visibility changed, is in Background: ".concat(this.isInBackground),this.logContext),!this.isInBackground&&this.needsReAcquisition&&!this.isUserProvided&&!this.isMuted)this.log.debug("track needs to be reacquired, restarting ".concat(this.source),this.logContext),yield this.restart(),this.reacquireTrack=!1})}stop(){var t;this.manuallyStopped=!0,super.stop(),this._mediaStreamTrack.removeEventListener("ended",this.handleEnded),this._mediaStreamTrack.removeEventListener("mute",this.handleTrackMuteEvent),this._mediaStreamTrack.removeEventListener("unmute",this.handleTrackUnmuteEvent),(t=this.processor)===null||t===void 0||t.destroy(),this.processor=void 0}pauseUpstream(){return a(this,void 0,void 0,function*(){var t;let e=yield this.pauseUpstreamLock.lock();try{if(this._isUpstreamPaused===!0)return;if(!this.sender){this.log.warn("unable to pause upstream for an unpublished track",this.logContext);return}this._isUpstreamPaused=!0,this.emit(W.UpstreamPaused,this);let l=At();if((l===null||l===void 0?void 0:l.name)==="Safari"&&kt(l.version,"12.0")<0)throw new rl("pauseUpstream is not supported on Safari < 12.");if(((t=this.sender.transport)===null||t===void 0?void 0:t.state)!=="closed")yield this.sender.replaceTrack(null)}finally{e()}})}resumeUpstream(){return a(this,void 0,void 0,function*(){var t;let e=yield this.pauseUpstreamLock.lock();try{if(this._isUpstreamPaused===!1)return;if(!this.sender){this.log.warn("unable to resume upstream for an unpublished track",this.logContext);return}if(this._isUpstreamPaused=!1,this.emit(W.UpstreamResumed,this),((t=this.sender.transport)===null||t===void 0?void 0:t.state)!=="closed")yield this.sender.replaceTrack(this.mediaStreamTrack)}finally{e()}})}getRTCStatsReport(){return a(this,void 0,void 0,function*(){var t;if(!((t=this.sender)===null||t===void 0?void 0:t.getStats))return;return yield this.sender.getStats()})}setProcessor(t){return a(this,arguments,void 0,function(e){var l=this;let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return function*(){var r;let o=yield l.trackChangeLock.lock();try{l.log.debug("setting up processor",l.logContext);let s=document.createElement(l.kind),c={kind:l.kind,track:l._mediaStreamTrack,element:s,audioContext:l.audioContext};if(yield e.init(c),l.log.debug("processor initialized",l.logContext),l.processor)yield l.internalStopProcessor();if(l.kind==="unknown")throw TypeError("cannot set processor on track of unknown kind");if($e(l._mediaStreamTrack,s),s.muted=!0,s.play().catch((i)=>{if(i instanceof DOMException&&i.name==="AbortError")l.log.warn("failed to play processor element, retrying",Object.assign(Object.assign({},l.logContext),{error:i})),setTimeout(()=>{s.play().catch((h)=>{l.log.error("failed to play processor element",Object.assign(Object.assign({},l.logContext),{err:h}))})},100);else l.log.error("failed to play processor element",Object.assign(Object.assign({},l.logContext),{error:i}))}),l.processor=e,l.processorElement=s,l.processor.processedTrack){for(let i of l.attachedElements)if(i!==l.processorElement&&n)Ne(l._mediaStreamTrack,i),$e(l.processor.processedTrack,i);yield(r=l.sender)===null||r===void 0?void 0:r.replaceTrack(l.processor.processedTrack)}l.emit(W.TrackProcessorUpdate,l.processor)}finally{o()}}()})}getProcessor(){return this.processor}stopProcessor(){return a(this,arguments,void 0,function(){var t=this;let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;return function*(){let l=yield t.trackChangeLock.lock();try{yield t.internalStopProcessor(e)}finally{l()}}()})}internalStopProcessor(){return a(this,arguments,void 0,function(){var t=this;let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;return function*(){var l,n;if(!t.processor)return;if(t.log.debug("stopping processor",t.logContext),(l=t.processor.processedTrack)===null||l===void 0||l.stop(),yield t.processor.destroy(),t.processor=void 0,!e)(n=t.processorElement)===null||n===void 0||n.remove(),t.processorElement=void 0;yield t._mediaStreamTrack.applyConstraints(t._constraints),yield t.setMediaStreamTrack(t._mediaStreamTrack,!0),t.emit(W.TrackProcessorUpdate)}()})}startPreConnectBuffer(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:100;if(!Vb()){this.log.warn("MediaRecorder is not available, cannot start preconnect buffer",this.logContext);return}if(!this.localTrackRecorder){let e="audio/webm;codecs=opus";if(!MediaRecorder.isTypeSupported(e))e="video/mp4";this.localTrackRecorder=new Go(this,{mimeType:e})}else{this.log.warn("preconnect buffer already started");return}this.localTrackRecorder.start(t),this.autoStopPreConnectBuffer=setTimeout(()=>{this.log.warn("preconnect buffer timed out, stopping recording automatically",this.logContext),this.stopPreConnectBuffer()},Gb)}stopPreConnectBuffer(){if(clearTimeout(this.autoStopPreConnectBuffer),this.localTrackRecorder)this.localTrackRecorder.stop(),this.localTrackRecorder=void 0}getPreConnectBuffer(){var t;return(t=this.localTrackRecorder)===null||t===void 0?void 0:t.byteStream}getPreConnectBufferMimeType(){var t;return(t=this.localTrackRecorder)===null||t===void 0?void 0:t.mimeType}};ze=class ze extends Gn{get enhancedNoiseCancellation(){return this.isKrispNoiseFilterEnabled}constructor(t,e){let l=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,n=arguments.length>3?arguments[3]:void 0,r=arguments.length>4?arguments[4]:void 0;super(t,L.Kind.Audio,e,l,r);this.stopOnMute=!1,this.isKrispNoiseFilterEnabled=!1,this.monitorSender=()=>a(this,void 0,void 0,function*(){if(!this.sender){this._currentBitrate=0;return}let o;try{o=yield this.getSenderStats()}catch(s){this.log.error("could not get audio sender stats",Object.assign(Object.assign({},this.logContext),{error:s}));return}if(o&&this.prevStats)this._currentBitrate=Xn(o,this.prevStats);this.prevStats=o}),this.handleKrispNoiseFilterEnable=()=>{this.isKrispNoiseFilterEnabled=!0,this.log.debug("Krisp noise filter enabled",this.logContext),this.emit(W.AudioTrackFeatureUpdate,this,it.TF_ENHANCED_NOISE_CANCELLATION,!0)},this.handleKrispNoiseFilterDisable=()=>{this.isKrispNoiseFilterEnabled=!1,this.log.debug("Krisp noise filter disabled",this.logContext),this.emit(W.AudioTrackFeatureUpdate,this,it.TF_ENHANCED_NOISE_CANCELLATION,!1)},this.audioContext=n,this.checkForSilence()}mute(){let t=Object.create(null,{mute:{get:()=>super.mute}});return a(this,void 0,void 0,function*(){let e=yield this.muteLock.lock();try{if(this.isMuted)return this.log.debug("Track already muted",this.logContext),this;if(this.source===L.Source.Microphone&&this.stopOnMute&&!this.isUserProvided)this.log.debug("stopping mic track",this.logContext),this._mediaStreamTrack.stop();return yield t.mute.call(this),this}finally{e()}})}unmute(){let t=Object.create(null,{unmute:{get:()=>super.unmute}});return a(this,void 0,void 0,function*(){let e=yield this.muteLock.lock();try{if(!this.isMuted)return this.log.debug("Track already unmuted",this.logContext),this;if(this.source===L.Source.Microphone&&(this.stopOnMute||this._mediaStreamTrack.readyState==="ended"||this.pendingDeviceChange)&&!this.isUserProvided)this.log.debug("reacquiring mic track",this.logContext),yield this.restart(void 0,!0);return yield t.unmute.call(this),this}finally{e()}})}restartTrack(t){return a(this,void 0,void 0,function*(){let e;if(t){let l=Lo({audio:t});if(typeof l.audio!=="boolean")e=l.audio}yield this.restart(e)})}restart(t,e){let l=Object.create(null,{restart:{get:()=>super.restart}});return a(this,void 0,void 0,function*(){let n=yield l.restart.call(this,t,e);return this.checkForSilence(),n})}startMonitor(){if(!Bt())return;if(this.monitorInterval)return;this.monitorInterval=setInterval(()=>{this.monitorSender()},Vo)}setProcessor(t){return a(this,void 0,void 0,function*(){var e;let l=yield this.trackChangeLock.lock();try{if(!Jt()&&!this.audioContext)throw Error("Audio context needs to be set on LocalAudioTrack in order to enable processors");if(this.processor)yield this.internalStopProcessor();let n={kind:this.kind,track:this._mediaStreamTrack,audioContext:this.audioContext};if(this.log.debug("setting up audio processor ".concat(t.name),this.logContext),yield t.init(n),this.processor=t,this.processor.processedTrack)yield(e=this.sender)===null||e===void 0?void 0:e.replaceTrack(this.processor.processedTrack),this.processor.processedTrack.addEventListener("enable-lk-krisp-noise-filter",this.handleKrispNoiseFilterEnable),this.processor.processedTrack.addEventListener("disable-lk-krisp-noise-filter",this.handleKrispNoiseFilterDisable);this.emit(W.TrackProcessorUpdate,this.processor)}finally{l()}})}setAudioContext(t){this.audioContext=t}getSenderStats(){return a(this,void 0,void 0,function*(){var t;if(!((t=this.sender)===null||t===void 0?void 0:t.getStats))return;let e=yield this.sender.getStats(),l;return e.forEach((n)=>{if(n.type==="outbound-rtp")l={type:"audio",streamId:n.id,packetsSent:n.packetsSent,packetsLost:n.packetsLost,bytesSent:n.bytesSent,timestamp:n.timestamp,roundTripTime:n.roundTripTime,jitter:n.jitter}}),l})}checkForSilence(){return a(this,void 0,void 0,function*(){let t=yield wh(this);if(t){if(!this.isMuted)this.log.debug("silence detected on local audio track",this.logContext);this.emit(W.AudioSilenceDetected)}return t})}};Ob=Object.values(ve),Db=Object.values(bn),Yb=Object.values(Vl),Qb=[ve.h180,ve.h360],Sb=[bn.h180,bn.h360],Jr=["q","h","f"];Oe=class Oe extends Gn{get sender(){return this._sender}set sender(t){if(this._sender=t,this.degradationPreference)this.setDegradationPreference(this.degradationPreference)}constructor(t,e){let l=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,n=arguments.length>3?arguments[3]:void 0;super(t,L.Kind.Video,e,l,n);this.simulcastCodecs=new Map,this.degradationPreference="balanced",this.isCpuConstrained=!1,this.optimizeForPerformance=!1,this.monitorSender=()=>a(this,void 0,void 0,function*(){if(!this.sender){this._currentBitrate=0;return}let r;try{r=yield this.getSenderStats()}catch(c){this.log.error("could not get video sender stats",Object.assign(Object.assign({},this.logContext),{error:c}));return}let o=new Map(r.map((c)=>[c.rid,c])),s=r.some((c)=>c.qualityLimitationReason==="cpu");if(s!==this.isCpuConstrained){if(this.isCpuConstrained=s,this.isCpuConstrained)this.emit(W.CpuConstrained)}if(this.prevStats){let c=0;o.forEach((i,h)=>{var f;let u=(f=this.prevStats)===null||f===void 0?void 0:f.get(h);c+=Xn(i,u)}),this._currentBitrate=c}this.prevStats=o}),this.senderLock=new ht}get isSimulcast(){if(this.sender&&this.sender.getParameters().encodings.length>1)return!0;return!1}startMonitor(t){var e;if(this.signalClient=t,!Bt())return;let l=(e=this.sender)===null||e===void 0?void 0:e.getParameters();if(l)this.encodings=l.encodings;if(this.monitorInterval)return;this.monitorInterval=setInterval(()=>{this.monitorSender()},Vo)}stop(){this._mediaStreamTrack.getConstraints(),this.simulcastCodecs.forEach((t)=>{t.mediaStreamTrack.stop()}),super.stop()}pauseUpstream(){let t=Object.create(null,{pauseUpstream:{get:()=>super.pauseUpstream}});return a(this,void 0,void 0,function*(){var e,l,n,r,o;yield t.pauseUpstream.call(this);try{for(var s=!0,c=Zt(this.simulcastCodecs.values()),i;i=yield c.next(),e=i.done,!e;s=!0)r=i.value,s=!1,yield(o=r.sender)===null||o===void 0?void 0:o.replaceTrack(null)}catch(h){l={error:h}}finally{try{if(!s&&!e&&(n=c.return))yield n.call(c)}finally{if(l)throw l.error}}})}resumeUpstream(){let t=Object.create(null,{resumeUpstream:{get:()=>super.resumeUpstream}});return a(this,void 0,void 0,function*(){var e,l,n,r,o;yield t.resumeUpstream.call(this);try{for(var s=!0,c=Zt(this.simulcastCodecs.values()),i;i=yield c.next(),e=i.done,!e;s=!0){r=i.value,s=!1;let h=r;yield(o=h.sender)===null||o===void 0?void 0:o.replaceTrack(h.mediaStreamTrack)}}catch(h){l={error:h}}finally{try{if(!s&&!e&&(n=c.return))yield n.call(c)}finally{if(l)throw l.error}}})}mute(){let t=Object.create(null,{mute:{get:()=>super.mute}});return a(this,void 0,void 0,function*(){let e=yield this.muteLock.lock();try{if(this.isMuted)return this.log.debug("Track already muted",this.logContext),this;if(this.source===L.Source.Camera&&!this.isUserProvided)this.log.debug("stopping camera track",this.logContext),this._mediaStreamTrack.stop();return yield t.mute.call(this),this}finally{e()}})}unmute(){let t=Object.create(null,{unmute:{get:()=>super.unmute}});return a(this,void 0,void 0,function*(){let e=yield this.muteLock.lock();try{if(!this.isMuted)return this.log.debug("Track already unmuted",this.logContext),this;if(this.source===L.Source.Camera&&!this.isUserProvided)this.log.debug("reacquiring camera track",this.logContext),yield this.restart(void 0,!0);return yield t.unmute.call(this),this}finally{e()}})}setTrackMuted(t){super.setTrackMuted(t);for(let e of this.simulcastCodecs.values())e.mediaStreamTrack.enabled=!t}getSenderStats(){return a(this,void 0,void 0,function*(){var t;if(!((t=this.sender)===null||t===void 0?void 0:t.getStats))return[];let e=[],l=yield this.sender.getStats();return l.forEach((n)=>{var r;if(n.type==="outbound-rtp"){let o={type:"video",streamId:n.id,frameHeight:n.frameHeight,frameWidth:n.frameWidth,framesPerSecond:n.framesPerSecond,framesSent:n.framesSent,firCount:n.firCount,pliCount:n.pliCount,nackCount:n.nackCount,packetsSent:n.packetsSent,bytesSent:n.bytesSent,qualityLimitationReason:n.qualityLimitationReason,qualityLimitationDurations:n.qualityLimitationDurations,qualityLimitationResolutionChanges:n.qualityLimitationResolutionChanges,rid:(r=n.rid)!==null&&r!==void 0?r:n.id,retransmittedPacketsSent:n.retransmittedPacketsSent,targetBitrate:n.targetBitrate,timestamp:n.timestamp},s=l.get(n.remoteId);if(s)o.jitter=s.jitter,o.packetsLost=s.packetsLost,o.roundTripTime=s.roundTripTime;e.push(o)}}),e.sort((n,r)=>{var o,s;return((o=r.frameWidth)!==null&&o!==void 0?o:0)-((s=n.frameWidth)!==null&&s!==void 0?s:0)}),e})}setPublishingQuality(t){let e=[];for(let l=It.LOW;l<=It.HIGH;l+=1)e.push(new go({quality:l,enabled:l<=t}));this.log.debug("setting publishing quality. max quality ".concat(t),this.logContext),this.setPublishingLayers(Kt(this.codec),e)}restartTrack(t){return a(this,void 0,void 0,function*(){var e,l,n,r,o;let s;if(t){let f=Lo({video:t});if(typeof f.video!=="boolean")s=f.video}yield this.restart(s),this.isCpuConstrained=!1;try{for(var c=!0,i=Zt(this.simulcastCodecs.values()),h;h=yield i.next(),e=h.done,!e;c=!0){r=h.value,c=!1;let f=r;if(f.sender&&((o=f.sender.transport)===null||o===void 0?void 0:o.state)!=="closed")f.mediaStreamTrack=this.mediaStreamTrack.clone(),yield f.sender.replaceTrack(f.mediaStreamTrack)}}catch(f){l={error:f}}finally{try{if(!c&&!e&&(n=i.return))yield n.call(i)}finally{if(l)throw l.error}}})}setProcessor(t){let e=Object.create(null,{setProcessor:{get:()=>super.setProcessor}});return a(this,arguments,void 0,function(l){var n=this;let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return function*(){var o,s,c,i,h,f;if(yield e.setProcessor.call(n,l,r),(h=n.processor)===null||h===void 0?void 0:h.processedTrack)try{for(var u=!0,d=Zt(n.simulcastCodecs.values()),x;x=yield d.next(),o=x.done,!o;u=!0)i=x.value,u=!1,yield(f=i.sender)===null||f===void 0?void 0:f.replaceTrack(n.processor.processedTrack)}catch(g){s={error:g}}finally{try{if(!u&&!o&&(c=d.return))yield c.call(d)}finally{if(s)throw s.error}}}()})}setDegradationPreference(t){return a(this,void 0,void 0,function*(){if(this.degradationPreference=t,this.sender)try{this.log.debug("setting degradationPreference to ".concat(t),this.logContext);let e=this.sender.getParameters();e.degradationPreference=t,this.sender.setParameters(e)}catch(e){this.log.warn("failed to set degradationPreference",Object.assign({error:e},this.logContext))}})}addSimulcastTrack(t,e){if(this.simulcastCodecs.has(t)){this.log.error("".concat(t," already added, skipping adding simulcast codec"),this.logContext);return}let l={codec:t,mediaStreamTrack:this.mediaStreamTrack.clone(),sender:void 0,encodings:e};return this.simulcastCodecs.set(t,l),l}setSimulcastTrackSender(t,e){let l=this.simulcastCodecs.get(t);if(!l)return;l.sender=e,setTimeout(()=>{if(this.subscribedCodecs)this.setPublishingCodecs(this.subscribedCodecs)},Fb)}setPublishingCodecs(t){return a(this,void 0,void 0,function*(){var e,l,n,r,o,s,c;if(this.log.debug("setting publishing codecs",Object.assign(Object.assign({},this.logContext),{codecs:t,currentCodec:this.codec})),!this.codec&&t.length>0)return yield this.setPublishingLayers(Kt(t[0].codec),t[0].qualities),[];this.subscribedCodecs=t;let i=[];try{for(e=!0,l=Zt(t);n=yield l.next(),r=n.done,!r;e=!0){c=n.value,e=!1;let h=c;if(!this.codec||this.codec===h.codec)yield this.setPublishingLayers(Kt(h.codec),h.qualities);else{let f=this.simulcastCodecs.get(h.codec);if(this.log.debug("try setPublishingCodec for ".concat(h.codec),Object.assign(Object.assign({},this.logContext),{simulcastCodecInfo:f})),!f||!f.sender){for(let u of h.qualities)if(u.enabled){i.push(h.codec);break}}else if(f.encodings)this.log.debug("try setPublishingLayersForSender ".concat(h.codec),this.logContext),yield ci(f.sender,f.encodings,h.qualities,this.senderLock,Kt(h.codec),this.log,this.logContext)}}}catch(h){o={error:h}}finally{try{if(!e&&!r&&(s=l.return))yield s.call(l)}finally{if(o)throw o.error}}return i})}setPublishingLayers(t,e){return a(this,void 0,void 0,function*(){if(this.optimizeForPerformance){this.log.info("skipping setPublishingLayers due to optimized publishing performance",Object.assign(Object.assign({},this.logContext),{qualities:e}));return}if(this.log.debug("setting publishing layers",Object.assign(Object.assign({},this.logContext),{qualities:e})),!this.sender||!this.encodings)return;yield ci(this.sender,this.encodings,e,this.senderLock,t,this.log,this.logContext)})}prioritizePerformance(){return a(this,void 0,void 0,function*(){if(!this.sender)throw Error("sender not found");let t=yield this.senderLock.lock();try{this.optimizeForPerformance=!0;let e=this.sender.getParameters();e.encodings=e.encodings.map((l,n)=>{var r;return Object.assign(Object.assign({},l),{active:n===0,scaleResolutionDownBy:Math.max(1,Math.ceil(((r=this.mediaStreamTrack.getSettings().height)!==null&&r!==void 0?r:360)/360)),scalabilityMode:n===0&&Kt(this.codec)?"L1T3":void 0,maxFramerate:n===0?15:0,maxBitrate:n===0?l.maxBitrate:0})}),this.log.debug("setting performance optimised encodings",Object.assign(Object.assign({},this.logContext),{encodings:e.encodings})),this.encodings=e.encodings,yield this.sender.setParameters(e)}catch(e){this.log.error("failed to set performance optimised encodings",Object.assign(Object.assign({},this.logContext),{error:e})),this.optimizeForPerformance=!1}finally{t()}})}handleAppVisibilityChanged(){let t=Object.create(null,{handleAppVisibilityChanged:{get:()=>super.handleAppVisibilityChanged}});return a(this,void 0,void 0,function*(){if(yield t.handleAppVisibilityChanged.call(this),!Ih())return;if(this.isInBackground&&this.source===L.Source.Camera)this._mediaStreamTrack.enabled=!1})}};(function(t){t[t.New=0]="New",t[t.Connected=1]="Connected",t[t.Disconnected=2]="Disconnected",t[t.Reconnecting=3]="Reconnecting",t[t.Closed=4]="Closed"})(Mt||(Mt={}));(function(t){t[t.RELIABLE=0]="RELIABLE",t[t.LOSSY=1]="LOSSY",t[t.DATA_TRACK_LOSSY=2]="DATA_TRACK_LOSSY"})(D||(D={}));Jh=class Jh extends zt.EventEmitter{get isClosed(){return this._isClosed}get isNewlyCreated(){return this._isNewlyCreated}get pendingReconnect(){return!!this.reconnectTimeout}constructor(t){var e;super();this.options=t,this.rtcConfig={},this.peerConnectionTimeout=Ho.peerConnectionTimeout,this.fullReconnectOnNext=!1,this.latestRemoteOfferId=0,this.subscriberPrimary=!1,this.pcState=Mt.New,this._isClosed=!0,this._isNewlyCreated=!0,this.pendingTrackResolvers={},this.reconnectAttempts=0,this.reconnectStart=0,this.attemptingReconnect=!1,this.joinAttempts=0,this.maxJoinAttempts=1,this.shouldFailNext=!1,this.log=O,this.reliableDataSequence=1,this.reliableMessageBuffer=new Fr,this.reliableReceivedState=new jh(Pb),this.lossyDataStatCurrentBytes=0,this.lossyDataStatByterate=0,this.lossyDataDropCount=0,this.midToTrackId={},this.isWaitingForNetworkReconnect=!1,this.handleDataChannel=(l)=>a(this,[l],void 0,function(n){var r=this;let{channel:o}=n;return function*(){if(!o)return;let s;if(o.label===ui)r.reliableDCSub=o,s=r.handleDataMessage;else if(o.label===fi)r.lossyDCSub=o,s=r.handleDataMessage;else if(o.label===di)r.dataTrackDCSub=o,s=r.handleDataTrackMessage;else return;r.log.debug("on data channel ".concat(o.id,", ").concat(o.label),r.logContext),o.onmessage=s}()}),this.handleDataMessage=(l)=>a(this,void 0,void 0,function*(){var n,r,o,s,c;let i=yield this.dataProcessLock.lock();try{let h;if(l.data instanceof ArrayBuffer)h=l.data;else if(l.data instanceof Blob)h=yield l.data.arrayBuffer();else{this.log.error("unsupported data type",Object.assign(Object.assign({},this.logContext),{data:l.data}));return}let f=wt.fromBinary(new Uint8Array(h));if(f.sequence>0&&f.participantSid!==""){let u=this.reliableReceivedState.get(f.participantSid);if(u&&f.sequence<=u)return;this.reliableReceivedState.set(f.participantSid,f.sequence)}if(((n=f.value)===null||n===void 0?void 0:n.case)==="speaker")this.emit(B.ActiveSpeakersUpdate,f.value.value.speakers);else if(((r=f.value)===null||r===void 0?void 0:r.case)==="encryptedPacket"){if(!this.e2eeManager){this.log.error("Received encrypted packet but E2EE not set up",this.logContext);return}let u=yield(o=this.e2eeManager)===null||o===void 0?void 0:o.handleEncryptedData(f.value.value.encryptedValue,f.value.value.iv,f.participantIdentity,f.value.value.keyIndex),d=vi.fromBinary(u.payload),x=new wt({value:d.value,participantIdentity:f.participantIdentity,participantSid:f.participantSid});if(((s=x.value)===null||s===void 0?void 0:s.case)==="user")ai(x,x.value.value);this.emit(B.DataPacketReceived,x,f.value.value.encryptionType)}else{if(((c=f.value)===null||c===void 0?void 0:c.case)==="user")ai(f,f.value.value);this.emit(B.DataPacketReceived,f,T.NONE)}}finally{i()}}),this.handleDataTrackMessage=(l)=>a(this,void 0,void 0,function*(){let n;if(l.data instanceof ArrayBuffer)n=l.data;else if(l.data instanceof Blob)n=yield l.data.arrayBuffer();else{this.log.error("unsupported data type",Object.assign(Object.assign({},this.logContext),{data:l.data}));return}this.emit("dataTrackPacketReceived",new Uint8Array(n))}),this.handleDataError=(l)=>{let r=l.currentTarget.maxRetransmits===0?"lossy":"reliable";if(l instanceof ErrorEvent&&l.error){let{error:o}=l.error;this.log.error("DataChannel error on ".concat(r,": ").concat(l.message),Object.assign(Object.assign({},this.logContext),{error:o}))}else this.log.error("Unknown DataChannel error on ".concat(r),Object.assign(Object.assign({},this.logContext),{event:l}))},this.handleBufferedAmountLow=(l)=>{this.updateAndEmitDCBufferStatus(l)},this.handleDisconnect=(l,n)=>{if(this._isClosed)return;if(this.log.warn("".concat(l," disconnected"),this.logContext),this.reconnectAttempts===0)this.reconnectStart=Date.now();let r=(c)=>{this.log.warn("could not recover connection after ".concat(this.reconnectAttempts," attempts, ").concat(c,"ms. giving up"),this.logContext),this.emit(B.Disconnected),this.close()},o=Date.now()-this.reconnectStart,s=this.getNextRetryDelay({elapsedMs:o,retryCount:this.reconnectAttempts});if(s===null){r(o);return}if(l===mr)s=0;if(this.log.debug("reconnecting in ".concat(s,"ms"),this.logContext),this.clearReconnectTimeout(),this.token&&this.regionUrlProvider)this.regionUrlProvider.updateToken(this.token);this.reconnectTimeout=et.setTimeout(()=>this.attemptReconnect(n).finally(()=>this.reconnectTimeout=void 0),s)},this.waitForRestarted=()=>{return new Promise((l,n)=>{if(this.pcState===Mt.Connected)l();let r=()=>{this.off(B.Disconnected,o),l()},o=()=>{this.off(B.Restarted,r),n()};this.once(B.Restarted,r),this.once(B.Disconnected,o)})},this.updateAndEmitDCBufferStatus=(l)=>{if(l===D.RELIABLE){let r=this.dataChannelForKind(l);if(r)this.reliableMessageBuffer.alignBufferedAmount(r.bufferedAmount)}let n=this.isBufferStatusLow(l);if(typeof n<"u"&&n!==this.dcBufferStatus.get(l))this.dcBufferStatus.set(l,n),this.emit(B.DCBufferStatusChanged,n,l)},this.isBufferStatusLow=(l)=>{let n=this.dataChannelForKind(l);if(n)return n.bufferedAmount<=n.bufferedAmountLowThreshold},this.handleBrowserOnLine=()=>a(this,void 0,void 0,function*(){if(!this.url)return;if(!(yield fetch(Wl(this.url),{method:"HEAD"}).then((n)=>n.ok).catch(()=>!1)))return;if(this.log.info("detected network reconnected"),this.client.currentState===F.RECONNECTING||this.isWaitingForNetworkReconnect&&this.client.currentState===F.CONNECTED)this.clearReconnectTimeout(),this.attemptReconnect(pe.RR_SIGNAL_DISCONNECTED),this.isWaitingForNetworkReconnect=!1}),this.handleBrowserOffline=()=>a(this,void 0,void 0,function*(){if(!this.url)return;try{yield Promise.race([fetch(Wl(this.url),{method:"HEAD"}),ut(4000).then(()=>Promise.reject())])}catch(l){if(window.navigator.onLine===!1)this.log.info("detected network interruption"),this.isWaitingForNetworkReconnect=!0}}),this.log=pt((e=t.loggerName)!==null&&e!==void 0?e:dt.Engine),this.loggerOptions={loggerName:t.loggerName,loggerContextCb:()=>this.logContext},this.client=new Vn(void 0,this.loggerOptions),this.client.signalLatency=this.options.expSignalLatency,this.reconnectPolicy=this.options.reconnectPolicy,this.closingLock=new ht,this.dataProcessLock=new ht,this.dcBufferStatus=new Map([[D.RELIABLE,!0],[D.LOSSY,!0],[D.DATA_TRACK_LOSSY,!0]]),this.client.onParticipantUpdate=(l)=>this.emit(B.ParticipantUpdate,l),this.client.onConnectionQuality=(l)=>this.emit(B.ConnectionQualityUpdate,l),this.client.onRoomUpdate=(l)=>this.emit(B.RoomUpdate,l),this.client.onSubscriptionError=(l)=>this.emit(B.SubscriptionError,l),this.client.onSubscriptionPermissionUpdate=(l)=>this.emit(B.SubscriptionPermissionUpdate,l),this.client.onSpeakersChanged=(l)=>this.emit(B.SpeakersChanged,l),this.client.onStreamStateUpdate=(l)=>this.emit(B.StreamStateChanged,l),this.client.onRequestResponse=(l)=>this.emit(B.SignalRequestResponse,l),this.client.onParticipantUpdate=(l)=>this.emit(B.ParticipantUpdate,l),this.client.onJoined=(l)=>this.emit(B.Joined,l)}get logContext(){var t,e,l,n,r,o;return{room:(e=(t=this.latestJoinResponse)===null||t===void 0?void 0:t.room)===null||e===void 0?void 0:e.name,roomID:(n=(l=this.latestJoinResponse)===null||l===void 0?void 0:l.room)===null||n===void 0?void 0:n.sid,participant:(o=(r=this.latestJoinResponse)===null||r===void 0?void 0:r.participant)===null||o===void 0?void 0:o.identity,participantID:this.participantSid}}join(t,e,l,n){return a(this,arguments,void 0,function(r,o,s,c){var i=this;let h=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!1;return function*(){var f,u,d;i._isNewlyCreated=!1,i.url=r,i.token=o,i.signalOpts=s,i.maxJoinAttempts=s.maxRetries;try{i.joinAttempts+=1,i.setupSignalClientCallbacks();let x;if(!h&&Kr()){if(!i.pcManager)yield i.configure(),i.createDataChannels(),i.addMediaSections(_b,vb);let w=yield(f=i.pcManager)===null||f===void 0?void 0:f.publisher.createInitialOffer();if(w)x=Be(w.offer,w.offerId)}if(c===null||c===void 0?void 0:c.aborted)throw G.cancelled("Connection aborted");let g=yield i.client.join(r,o,s,c,h,x);if(i._isClosed=!1,i.latestJoinResponse=g,i.participantSid=(u=g.participant)===null||u===void 0?void 0:u.sid,i.subscriberPrimary=g.subscriberPrimary,!h&&Kr())(d=i.pcManager)===null||d===void 0||d.updateConfiguration(i.makeRTCConfiguration(g));else{if(!i.pcManager)yield i.configure(g,!h);if(!i.subscriberPrimary||g.fastPublish)i.negotiate().catch((w)=>{O.error(w,i.logContext)})}return i.registerOnLineListener(),i.clientConfiguration=g.clientConfiguration,i.emit(B.SignalConnected,g),g}catch(x){if(x instanceof G){if(x.reason===q.ServerUnreachable){if(i.log.warn("Couldn't connect to server, attempt ".concat(i.joinAttempts," of ").concat(i.maxJoinAttempts),i.logContext),i.joinAttempts<i.maxJoinAttempts)return i.join(r,o,s,c,h)}else if(x.reason===q.ServiceNotFound)return i.log.warn("Initial connection failed: ".concat(x.message," – Retrying")),i.join(r,o,s,c,!0)}throw x}}()})}close(){return a(this,void 0,void 0,function*(){let t=yield this.closingLock.lock();if(this.isClosed){t();return}try{this._isClosed=!0,this.joinAttempts=0,this.emit(B.Closing),this.removeAllListeners(),this.deregisterOnLineListener(),this.clearPendingReconnect(),this.cleanupLossyDataStats(),yield this.cleanupPeerConnections(),yield this.cleanupClient()}finally{t()}})}cleanupPeerConnections(){return a(this,void 0,void 0,function*(){var t;yield(t=this.pcManager)===null||t===void 0?void 0:t.close(),this.pcManager=void 0;let e=(l)=>{if(!l)return;l.close(),l.onbufferedamountlow=null,l.onclose=null,l.onclosing=null,l.onerror=null,l.onmessage=null,l.onopen=null};e(this.lossyDC),e(this.lossyDCSub),e(this.reliableDC),e(this.reliableDCSub),e(this.dataTrackDC),e(this.dataTrackDCSub),this.lossyDC=void 0,this.lossyDCSub=void 0,this.reliableDC=void 0,this.reliableDCSub=void 0,this.dataTrackDC=void 0,this.dataTrackDCSub=void 0,this.reliableMessageBuffer=new Fr,this.reliableDataSequence=1,this.reliableReceivedState.clear()})}cleanupLossyDataStats(){if(this.lossyDataStatByterate=0,this.lossyDataStatCurrentBytes=0,this.lossyDataStatInterval)clearInterval(this.lossyDataStatInterval),this.lossyDataStatInterval=void 0;this.lossyDataDropCount=0}cleanupClient(){return a(this,void 0,void 0,function*(){yield this.client.close(),this.client.resetCallbacks()})}addTrack(t){if(this.pendingTrackResolvers[t.cid])throw new Xt("a track with the same ID has already been published");return new Promise((e,l)=>{let n=setTimeout(()=>{delete this.pendingTrackResolvers[t.cid],l(G.timeout("publication of local track timed out, no response from server"))},1e4);this.pendingTrackResolvers[t.cid]={resolve:(r)=>{clearTimeout(n),e(r)},reject:()=>{clearTimeout(n),l(Error("Cancelled publication by calling unpublish"))}},this.client.sendAddTrack(t)})}removeTrack(t){if(t.track&&this.pendingTrackResolvers[t.track.id]){let{reject:e}=this.pendingTrackResolvers[t.track.id];if(e)e();delete this.pendingTrackResolvers[t.track.id]}try{return this.pcManager.removeTrack(t),!0}catch(e){this.log.warn("failed to remove track",Object.assign(Object.assign({},this.logContext),{error:e}))}return!1}updateMuteStatus(t,e){this.client.sendMuteTrack(t,e)}get dataSubscriberReadyState(){var t;return(t=this.reliableDCSub)===null||t===void 0?void 0:t.readyState}getConnectedServerAddress(){return a(this,void 0,void 0,function*(){var t;return(t=this.pcManager)===null||t===void 0?void 0:t.getConnectedAddress()})}setRegionUrlProvider(t){this.regionUrlProvider=t}configure(t,e){return a(this,void 0,void 0,function*(){var l;if(this.pcManager&&this.pcManager.currentState!==J.NEW)return;if(!t){let n=this.makeRTCConfiguration();this.pcManager=new Ur("publisher-only",this.loggerOptions,n)}else{this.participantSid=(l=t.participant)===null||l===void 0?void 0:l.sid;let n=this.makeRTCConfiguration(t);this.pcManager=new Ur(e?"publisher-only":t.subscriberPrimary?"subscriber-primary":"publisher-primary",this.loggerOptions,n)}this.emit(B.TransportsCreated,this.pcManager.publisher,this.pcManager.subscriber),this.pcManager.onIceCandidate=(n,r)=>{this.client.sendIceCandidate(n,r)},this.pcManager.onPublisherOffer=(n,r)=>{this.client.sendOffer(n,r)},this.pcManager.onDataChannel=this.handleDataChannel,this.pcManager.onStateChange=(n,r,o)=>a(this,void 0,void 0,function*(){if(this.log.debug("primary PC state changed ".concat(n),this.logContext),["closed","disconnected","failed"].includes(r))this.publisherConnectionPromise=void 0;if(n===J.CONNECTED){let i=this.pcState===Mt.New;if(this.pcState=Mt.Connected,i)this.emit(B.Connected,this.latestJoinResponse)}else if(n===J.FAILED){if(this.pcState===Mt.Connected||this.pcState===Mt.Reconnecting)this.pcState=Mt.Disconnected,this.handleDisconnect("peerconnection failed",o==="failed"?pe.RR_SUBSCRIBER_FAILED:pe.RR_PUBLISHER_FAILED)}let s=this.client.isDisconnected||this.client.currentState===F.RECONNECTING,c=[J.FAILED,J.CLOSING,J.CLOSED].includes(n);if(s&&c&&!this._isClosed)this.emit(B.Offline)}),this.pcManager.onTrack=(n)=>{if(n.streams.length===0)return;this.emit(B.MediaTrackAdded,n.track,n.streams[0],n.receiver)}})}setupSignalClientCallbacks(){this.client.onAnswer=(t,e,l)=>a(this,void 0,void 0,function*(){if(!this.pcManager)return;this.log.debug("received server answer",Object.assign(Object.assign({},this.logContext),{RTCSdpType:t.type,sdp:t.sdp,midToTrackId:l})),this.midToTrackId=l,yield this.pcManager.setPublisherAnswer(t,e)}),this.client.onTrickle=(t,e)=>{if(!this.pcManager)return;this.log.debug("got ICE candidate from peer",Object.assign(Object.assign({},this.logContext),{candidate:t,target:e})),this.pcManager.addIceCandidate(t,e)},this.client.onOffer=(t,e,l)=>a(this,void 0,void 0,function*(){if(this.latestRemoteOfferId=e,!this.pcManager)return;this.midToTrackId=l;let n=yield this.pcManager.createSubscriberAnswerFromOffer(t,e);if(n)this.client.sendAnswer(n,e)}),this.client.onLocalTrackPublished=(t)=>{var e;if(this.log.debug("received trackPublishedResponse",Object.assign(Object.assign({},this.logContext),{cid:t.cid,track:(e=t.track)===null||e===void 0?void 0:e.sid})),!this.pendingTrackResolvers[t.cid]){this.log.error("missing track resolver for ".concat(t.cid),Object.assign(Object.assign({},this.logContext),{cid:t.cid}));return}let{resolve:l}=this.pendingTrackResolvers[t.cid];delete this.pendingTrackResolvers[t.cid],l(t.track)},this.client.onLocalTrackUnpublished=(t)=>{this.emit(B.LocalTrackUnpublished,t)},this.client.onLocalTrackSubscribed=(t)=>{this.emit(B.LocalTrackSubscribed,t)},this.client.onTokenRefresh=(t)=>{var e;this.token=t,(e=this.regionUrlProvider)===null||e===void 0||e.updateToken(t)},this.client.onRemoteMuteChanged=(t,e)=>{this.emit(B.RemoteMute,t,e)},this.client.onSubscribedQualityUpdate=(t)=>{this.emit(B.SubscribedQualityUpdate,t)},this.client.onRoomMoved=(t)=>{var e;if(this.participantSid=(e=t.participant)===null||e===void 0?void 0:e.sid,this.latestJoinResponse)this.latestJoinResponse.room=t.room;this.emit(B.RoomMoved,t)},this.client.onMediaSectionsRequirement=(t)=>{this.addMediaSections(t.numAudios,t.numVideos),this.negotiate()},this.client.onPublishDataTrackResponse=(t)=>{this.emit(B.PublishDataTrackResponse,t)},this.client.onUnPublishDataTrackResponse=(t)=>{this.emit(B.UnPublishDataTrackResponse,t)},this.client.onDataTrackSubscriberHandles=(t)=>{this.emit(B.DataTrackSubscriberHandles,t)},this.client.onClose=()=>{this.handleDisconnect("signal",pe.RR_SIGNAL_DISCONNECTED)},this.client.onLeave=(t)=>{if(this.log.debug("client leave request",Object.assign(Object.assign({},this.logContext),{reason:t===null||t===void 0?void 0:t.reason})),t.regions&&this.regionUrlProvider)this.log.debug("updating regions",this.logContext),this.regionUrlProvider.setServerReportedRegions({updatedAtInMs:Date.now(),maxAgeInMs:Fh,regionSettings:t.regions});switch(t.action){case je.DISCONNECT:this.emit(B.Disconnected,t===null||t===void 0?void 0:t.reason),this.close();break;case je.RECONNECT:this.fullReconnectOnNext=!0,this.handleDisconnect(mr);break;case je.RESUME:this.handleDisconnect(mr)}}}makeRTCConfiguration(t){var e;let l=Object.assign({},this.rtcConfig);if((e=this.signalOpts)===null||e===void 0?void 0:e.e2eeEnabled)this.log.debug("E2EE - setting up transports with insertable streams",this.logContext),l.encodedInsertableStreams=!0;if(l.sdpSemantics="unified-plan",l.continualGatheringPolicy="gather_continually",!t)return l;if(t.iceServers&&!l.iceServers){let n=[];t.iceServers.forEach((r)=>{let o={urls:r.urls};if(r.username)o.username=r.username;if(r.credential)o.credential=r.credential;n.push(o)}),l.iceServers=n}if(t.clientConfiguration&&t.clientConfiguration.forceRelay===Ll.ENABLED)l.iceTransportPolicy="relay";return l}addMediaSections(t,e){var l,n;let r={direction:"recvonly"};for(let o=0;o<t;o++)(l=this.pcManager)===null||l===void 0||l.addPublisherTransceiverOfKind("audio",r);for(let o=0;o<e;o++)(n=this.pcManager)===null||n===void 0||n.addPublisherTransceiverOfKind("video",r)}createDataChannels(){if(!this.pcManager)return;if(this.lossyDC)this.lossyDC.onmessage=null,this.lossyDC.onerror=null;if(this.reliableDC)this.reliableDC.onmessage=null,this.reliableDC.onerror=null;if(this.dataTrackDC)this.dataTrackDC.onmessage=null,this.dataTrackDC.onerror=null;this.lossyDC=this.pcManager.createPublisherDataChannel(fi,{ordered:!1,maxRetransmits:0}),this.reliableDC=this.pcManager.createPublisherDataChannel(ui,{ordered:!0}),this.dataTrackDC=this.pcManager.createPublisherDataChannel(di,{ordered:!1,maxRetransmits:0}),this.lossyDC.onmessage=this.handleDataMessage,this.reliableDC.onmessage=this.handleDataMessage,this.dataTrackDC.onmessage=this.handleDataTrackMessage,this.lossyDC.onerror=this.handleDataError,this.reliableDC.onerror=this.handleDataError,this.dataTrackDC.onerror=this.handleDataError,this.lossyDC.bufferedAmountLowThreshold=65535,this.reliableDC.bufferedAmountLowThreshold=65535,this.dataTrackDC.bufferedAmountLowThreshold=65535,this.lossyDC.onbufferedamountlow=()=>this.handleBufferedAmountLow(D.LOSSY),this.reliableDC.onbufferedamountlow=()=>this.handleBufferedAmountLow(D.RELIABLE),this.dataTrackDC.onbufferedamountlow=()=>this.handleBufferedAmountLow(D.DATA_TRACK_LOSSY),this.cleanupLossyDataStats(),this.lossyDataStatInterval=setInterval(()=>{this.lossyDataStatByterate=this.lossyDataStatCurrentBytes,this.lossyDataStatCurrentBytes=0;let t=this.dataChannelForKind(D.LOSSY);if(t){let e=this.lossyDataStatByterate/10;t.bufferedAmountLowThreshold=Math.min(Math.max(e,Ub),Jb)}},1000)}createSender(t,e,l){return a(this,void 0,void 0,function*(){if(xn())return yield this.createTransceiverRTCRtpSender(t,e,l);if(Sr())return this.log.warn("using add-track fallback",this.logContext),yield this.createRTCRtpSender(t.mediaStreamTrack);throw new U("Required webRTC APIs not supported on this device")})}createSimulcastSender(t,e,l,n){return a(this,void 0,void 0,function*(){if(xn())return this.createSimulcastTransceiverSender(t,e,l,n);if(Sr())return this.log.debug("using add-track fallback",this.logContext),this.createRTCRtpSender(t.mediaStreamTrack);throw new U("Cannot stream on this device")})}createTransceiverRTCRtpSender(t,e,l){return a(this,void 0,void 0,function*(){if(!this.pcManager)throw new U("publisher is closed");let n=[];if(t.mediaStream)n.push(t.mediaStream);if(ue(t))t.codec=e.videoCodec;let r={direction:"sendonly",streams:n};if(l)r.sendEncodings=l;return(yield this.pcManager.addPublisherTransceiver(t.mediaStreamTrack,r)).sender})}createSimulcastTransceiverSender(t,e,l,n){return a(this,void 0,void 0,function*(){if(!this.pcManager)throw new U("publisher is closed");let r={direction:"sendonly"};if(n)r.sendEncodings=n;let o=yield this.pcManager.addPublisherTransceiver(e.mediaStreamTrack,r);if(!l.videoCodec)return;return t.setSimulcastTrackSender(l.videoCodec,o.sender),o.sender})}createRTCRtpSender(t){return a(this,void 0,void 0,function*(){if(!this.pcManager)throw new U("publisher is closed");return this.pcManager.addPublisherTrack(t)})}attemptReconnect(t){return a(this,void 0,void 0,function*(){var e,l,n;if(this._isClosed)return;if(this.attemptingReconnect){O.warn("already attempting reconnect, returning early",this.logContext);return}if(((e=this.clientConfiguration)===null||e===void 0?void 0:e.resumeConnection)===Ll.DISABLED||((n=(l=this.pcManager)===null||l===void 0?void 0:l.currentState)!==null&&n!==void 0?n:J.NEW)===J.NEW)this.fullReconnectOnNext=!0;try{if(this.attemptingReconnect=!0,this.fullReconnectOnNext)yield this.restartConnection();else yield this.resumeConnection(t);this.clearPendingReconnect(),this.fullReconnectOnNext=!1}catch(r){this.reconnectAttempts+=1;let o=!0;if(r instanceof U)this.log.debug("received unrecoverable error",Object.assign(Object.assign({},this.logContext),{error:r})),o=!1;else if(!(r instanceof be))this.fullReconnectOnNext=!0;if(o)this.handleDisconnect("reconnect",pe.RR_UNKNOWN);else this.log.info("could not recover connection after ".concat(this.reconnectAttempts," attempts, ").concat(Date.now()-this.reconnectStart,"ms. giving up"),this.logContext),this.emit(B.Disconnected),yield this.close()}finally{this.attemptingReconnect=!1}})}getNextRetryDelay(t){try{return this.reconnectPolicy.nextRetryDelayInMs(t)}catch(e){this.log.warn("encountered error in reconnect policy",Object.assign(Object.assign({},this.logContext),{error:e}))}return null}restartConnection(t){return a(this,void 0,void 0,function*(){var e,l,n;try{if(!this.url||!this.token)throw new U("could not reconnect, url or token not saved");if(this.log.info("reconnecting, attempt: ".concat(this.reconnectAttempts),this.logContext),this.emit(B.Restarting),!this.client.isDisconnected)yield this.client.sendLeave();yield this.cleanupPeerConnections(),yield this.cleanupClient();let r;try{if(!this.signalOpts)throw this.log.warn("attempted connection restart, without signal options present",this.logContext),new be;r=yield this.join(t!==null&&t!==void 0?t:this.url,this.token,this.signalOpts,void 0,!this.options.singlePeerConnection)}catch(o){if(o instanceof G&&o.reason===q.NotAllowed)throw new U("could not reconnect, token might be expired");throw new be}if(this.shouldFailNext)throw this.shouldFailNext=!1,Error("simulated failure");if(this.client.setReconnected(),this.emit(B.SignalRestarted,r),yield this.waitForPCReconnected(),this.client.currentState!==F.CONNECTED)throw new be("Signal connection got severed during reconnect");(e=this.regionUrlProvider)===null||e===void 0||e.resetAttempts(),this.emit(B.Restarted)}catch(r){let o=yield(l=this.regionUrlProvider)===null||l===void 0?void 0:l.getNextBestRegionUrl();if(o){yield this.restartConnection(o);return}else throw(n=this.regionUrlProvider)===null||n===void 0||n.resetAttempts(),r}})}resumeConnection(t){return a(this,void 0,void 0,function*(){var e;if(!this.url||!this.token)throw new U("could not reconnect, url or token not saved");if(!this.pcManager)throw new U("publisher and subscriber connections unset");this.log.info("resuming signal connection, attempt ".concat(this.reconnectAttempts),this.logContext),this.emit(B.Resuming);let l;try{this.setupSignalClientCallbacks(),l=yield this.client.reconnect(this.url,this.token,this.participantSid,t)}catch(n){let r="";if(n instanceof Error)r=n.message,this.log.error(n.message,Object.assign(Object.assign({},this.logContext),{error:n}));if(n instanceof G&&n.reason===q.NotAllowed)throw new U("could not reconnect, token might be expired");if(n instanceof G&&n.reason===q.LeaveRequest)throw n;throw new be(r)}if(this.emit(B.SignalResumed),l){let n=this.makeRTCConfiguration(l);if(this.pcManager.updateConfiguration(n),this.latestJoinResponse)this.latestJoinResponse.serverInfo=l.serverInfo}else this.log.warn("Did not receive reconnect response",this.logContext);if(this.shouldFailNext)throw this.shouldFailNext=!1,Error("simulated failure");if(yield this.pcManager.triggerIceRestart(),yield this.waitForPCReconnected(),this.client.currentState!==F.CONNECTED)throw new be("Signal connection got severed during reconnect");if(this.client.setReconnected(),((e=this.reliableDC)===null||e===void 0?void 0:e.readyState)==="open"&&this.reliableDC.id===null)this.createDataChannels();if(l===null||l===void 0?void 0:l.lastMessageSeq)this.resendReliableMessagesForResume(l.lastMessageSeq);this.emit(B.Resumed)})}waitForPCInitialConnection(t,e){return a(this,void 0,void 0,function*(){if(!this.pcManager)throw new U("PC manager is closed");yield this.pcManager.ensurePCTransportConnection(e,t)})}waitForPCReconnected(){return a(this,void 0,void 0,function*(){this.pcState=Mt.Reconnecting,this.log.debug("waiting for peer connection to reconnect",this.logContext);try{if(yield ut(kb),!this.pcManager)throw new U("PC manager is closed");yield this.pcManager.ensurePCTransportConnection(void 0,this.peerConnectionTimeout),this.pcState=Mt.Connected}catch(t){throw this.pcState=Mt.Disconnected,G.internal("could not establish PC connection, ".concat(t.message))}})}publishRpcResponse(t,e,l,n){return a(this,void 0,void 0,function*(){let r=new wt({destinationIdentities:[t],kind:xe.RELIABLE,value:{case:"rpcResponse",value:new co({requestId:e,value:n?{case:"error",value:n.toProto()}:{case:"payload",value:l!==null&&l!==void 0?l:""}})}});yield this.sendDataPacket(r,D.RELIABLE)})}publishRpcAck(t,e){return a(this,void 0,void 0,function*(){let l=new wt({destinationIdentities:[t],kind:xe.RELIABLE,value:{case:"rpcAck",value:new io({requestId:e})}});yield this.sendDataPacket(l,D.RELIABLE)})}sendDataPacket(t,e){return a(this,void 0,void 0,function*(){if(yield this.ensurePublisherConnected(e),this.e2eeManager&&this.e2eeManager.isDataChannelEncryptionEnabled){let n=zh(t);if(n){let r=yield this.e2eeManager.encryptData(n.toBinary());t.value={case:"encryptedPacket",value:new _i({encryptedValue:r.payload,iv:r.iv,keyIndex:r.keyIndex})}}}if(e===D.RELIABLE)t.sequence=this.reliableDataSequence,this.reliableDataSequence+=1;let l=t.toBinary();switch(e){case D.LOSSY:case D.DATA_TRACK_LOSSY:return this.sendLossyBytes(l,e);case D.RELIABLE:let n=this.dataChannelForKind(e);if(n){if(yield this.waitForBufferStatusLow(e),this.reliableMessageBuffer.push({data:l,sequence:t.sequence}),this.attemptingReconnect)return;n.send(l)}this.updateAndEmitDCBufferStatus(e);break}})}sendLossyBytes(t,e){return a(this,arguments,void 0,function(l,n){var r=this;let o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"drop";return function*(){yield r.ensurePublisherConnected(n);let s=r.dataChannelForKind(n);if(s){if(!r.isBufferStatusLow(n))switch(o){case"wait":yield r.waitForBufferStatusLow(n);break;case"drop":if(r.lossyDataDropCount+=1,r.lossyDataDropCount%100===0)r.log.warn("dropping lossy data channel messages, total dropped: ".concat(r.lossyDataDropCount),r.logContext);return}if(r.lossyDataStatCurrentBytes+=l.byteLength,r.attemptingReconnect)return;s.send(l)}r.updateAndEmitDCBufferStatus(n)}()})}resendReliableMessagesForResume(t){return a(this,void 0,void 0,function*(){yield this.ensurePublisherConnected(D.RELIABLE);let e=this.dataChannelForKind(D.RELIABLE);if(e)this.reliableMessageBuffer.popToSequence(t),this.reliableMessageBuffer.getAll().forEach((l)=>{e.send(l.data)});this.updateAndEmitDCBufferStatus(D.RELIABLE)})}waitForBufferStatusLow(t){return new ft((e,l)=>a(this,void 0,void 0,function*(){if(this.isBufferStatusLow(t))e();else{let n=()=>l(new U("engine closed"));this.once(B.Closing,n);while(!this.dcBufferStatus.get(t))yield ut(10);this.off(B.Closing,n),e()}}))}ensureDataTransportConnected(t){return a(this,arguments,void 0,function(e){var l=this;let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.subscriberPrimary;return function*(){var r;if(!l.pcManager)throw new U("PC manager is closed");let o=n?l.pcManager.subscriber:l.pcManager.publisher,s=n?"Subscriber":"Publisher";if(!o)throw G.internal("".concat(s," connection not set"));let c=!1;if(!n&&!l.dataChannelForKind(e,n))l.createDataChannels(),c=!0;if(!c&&!n&&!l.pcManager.publisher.isICEConnected&&l.pcManager.publisher.getICEConnectionState()!=="checking")c=!0;if(c)l.negotiate().catch((f)=>{O.error(f,l.logContext)});let i=l.dataChannelForKind(e,n);if((i===null||i===void 0?void 0:i.readyState)==="open")return;let h=new Date().getTime()+l.peerConnectionTimeout;while(new Date().getTime()<h){if(o.isICEConnected&&((r=l.dataChannelForKind(e,n))===null||r===void 0?void 0:r.readyState)==="open")return;yield ut(50)}throw G.internal("could not establish ".concat(s," connection, state: ").concat(o.getICEConnectionState()))}()})}ensurePublisherConnected(t){return a(this,void 0,void 0,function*(){if(!this.publisherConnectionPromise)this.publisherConnectionPromise=this.ensureDataTransportConnected(t,!1);yield this.publisherConnectionPromise})}verifyTransport(){if(!this.pcManager)return!1;if(![J.CONNECTING,J.CONNECTED].includes(this.pcManager.currentState))return!1;if(!this.client.ws||this.client.ws.readyState===WebSocket.CLOSED)return!1;return!0}negotiate(){return a(this,void 0,void 0,function*(){return new ft((t,e)=>a(this,void 0,void 0,function*(){if(!this.pcManager){e(new he("PC manager is closed"));return}if(this.pcManager.requirePublisher(),this.pcManager.publisher.getTransceivers().length==0&&!this.lossyDC&&!this.reliableDC&&!this.dataTrackDC)this.createDataChannels();let l=new AbortController,n=()=>{l.abort(),this.log.debug("engine disconnected while negotiation was ongoing",this.logContext),t();return};if(this.isClosed)e(new he("cannot negotiate on closed engine"));this.on(B.Closing,n),this.on(B.Restarting,n),this.pcManager.publisher.once(Ee.RTPVideoPayloadTypes,(r)=>{let o=new Map;r.forEach((s)=>{let c=s.codec.toLowerCase();if(Rh(c))o.set(s.payload,c)}),this.emit(B.RTPVideoMapUpdate,o)});try{yield this.pcManager.negotiate(l),t()}catch(r){if(l.signal.aborted){t();return}if(r instanceof he)this.fullReconnectOnNext=!0;if(this.handleDisconnect("negotiation",pe.RR_UNKNOWN),r instanceof Error)e(r);else e(Error(String(r)))}finally{this.off(B.Closing,n),this.off(B.Restarting,n)}}))})}dataChannelForKind(t,e){switch(t){case D.RELIABLE:if(!e)return this.reliableDC;else return this.reliableDCSub;case D.LOSSY:if(!e)return this.lossyDC;else return this.lossyDCSub;case D.DATA_TRACK_LOSSY:if(!e)return this.dataTrackDC;else return this.dataTrackDCSub}}sendSyncState(t,e,l){var n,r,o,s;if(!this.pcManager){this.log.warn("sync state cannot be sent without peer connection setup",this.logContext);return}let c=this.pcManager.publisher.getLocalDescription(),i=this.pcManager.publisher.getRemoteDescription(),h=(n=this.pcManager.subscriber)===null||n===void 0?void 0:n.getRemoteDescription(),f=(r=this.pcManager.subscriber)===null||r===void 0?void 0:r.getLocalDescription(),u=(s=(o=this.signalOpts)===null||o===void 0?void 0:o.autoSubscribe)!==null&&s!==void 0?s:!0,d=[],x=[];t.forEach((g)=>{if(g.isDesired!==u)d.push(g.trackSid);if(!g.isEnabled)x.push(g.trackSid)}),this.client.sendSyncState(new wo({answer:this.pcManager.mode==="publisher-only"?i?Be({sdp:i.sdp,type:i.type}):void 0:f?Be({sdp:f.sdp,type:f.type}):void 0,offer:this.pcManager.mode==="publisher-only"?c?Be({sdp:c.sdp,type:c.type}):void 0:h?Be({sdp:h.sdp,type:h.type}):void 0,subscription:new Rn({trackSids:d,subscribe:!u,participantTracks:[]}),publishTracks:Wa(e),dataChannels:this.dataChannelsInfo(),trackSidsDisabled:x,datachannelReceiveStates:this.reliableReceivedState.map((g,w)=>{return new Ac({publisherSid:w,lastSeq:g})}),publishDataTracks:l.map((g)=>{return new fo({info:Tr.toProtobuf(g)})})}))}failNext(){this.shouldFailNext=!0}dataChannelsInfo(){let t=[],e=(l,n)=>{if((l===null||l===void 0?void 0:l.id)!==void 0&&l.id!==null)t.push(new pc({label:l.label,id:l.id,target:n}))};return e(this.dataChannelForKind(D.LOSSY),St.PUBLISHER),e(this.dataChannelForKind(D.RELIABLE),St.PUBLISHER),e(this.dataChannelForKind(D.LOSSY,!0),St.SUBSCRIBER),e(this.dataChannelForKind(D.RELIABLE,!0),St.SUBSCRIBER),t}clearReconnectTimeout(){if(this.reconnectTimeout)et.clearTimeout(this.reconnectTimeout)}clearPendingReconnect(){this.clearReconnectTimeout(),this.reconnectAttempts=0}registerOnLineListener(){if(Bt())window.addEventListener("online",this.handleBrowserOnLine),window.addEventListener("offline",this.handleBrowserOffline)}deregisterOnLineListener(){if(Bt())window.removeEventListener("online",this.handleBrowserOnLine),window.removeEventListener("offline",this.handleBrowserOffline)}getTrackIdForReceiver(t){var e;let l=(e=this.pcManager)===null||e===void 0?void 0:e.getMidForReceiver(t);if(l){let n=Object.entries(this.midToTrackId).find((r)=>{let[o]=r;return o===l});if(n)return n[1]}}};_h=class _h extends Oo{handleChunkReceived(t){var e;this.bytesReceived+=t.content.byteLength,this.validateBytesReceived();let l=this.totalByteSize?this.bytesReceived/this.totalByteSize:void 0;(e=this.onProgress)===null||e===void 0||e.call(this,l)}[Symbol.asyncIterator](){let t=this.reader.getReader();t.closed.catch(()=>{});let e=()=>{t.releaseLock(),this.signal=void 0};return{next:()=>a(this,void 0,void 0,function*(){try{let l=this.signal;if(l===null||l===void 0?void 0:l.aborted)throw l.reason;let n=yield new Promise((r,o)=>{if(l){let s=()=>o(l.reason);l.addEventListener("abort",s,{once:!0}),t.read().then(r,o).finally(()=>{l.removeEventListener("abort",s)})}else t.read().then(r,o)});if(n.done)return this.validateBytesReceived(!0),{done:!0,value:void 0};else return this.handleChunkReceived(n.value),{done:!1,value:n.value.content}}catch(l){throw e(),l}}),return(){return a(this,void 0,void 0,function*(){return e(),{done:!0,value:void 0}})}}}withAbortSignal(t){return this.signal=t,this}readAll(){return a(this,arguments,void 0,function(){var t=this;let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return function*(){var l,n,r,o;let s=new Set,c=e.signal?t.withAbortSignal(e.signal):t;try{for(var i=!0,h=Zt(c),f;f=yield h.next(),l=f.done,!l;i=!0){o=f.value,i=!1;let u=o;s.add(u)}}catch(u){n={error:u}}finally{try{if(!i&&!l&&(r=h.return))yield r.call(h)}finally{if(n)throw n.error}}return Array.from(s)}()})}};vh=class vh extends Oo{constructor(t,e,l){super(t,e,l);this.receivedChunks=new Map}handleChunkReceived(t){var e;let l=en(t.chunkIndex),n=this.receivedChunks.get(l);if(n&&n.version>t.version)return;this.receivedChunks.set(l,t),this.bytesReceived+=t.content.byteLength,this.validateBytesReceived();let r=this.totalByteSize?this.bytesReceived/this.totalByteSize:void 0;(e=this.onProgress)===null||e===void 0||e.call(this,r)}[Symbol.asyncIterator](){let t=this.reader.getReader();t.closed.catch(()=>{});let e=new TextDecoder("utf-8",{fatal:!0}),l=this.signal,n=()=>{t.releaseLock(),this.signal=void 0};return{next:()=>a(this,void 0,void 0,function*(){try{if(l===null||l===void 0?void 0:l.aborted)throw l.reason;let r=yield new Promise((o,s)=>{if(l){let c=()=>s(l.reason);l.addEventListener("abort",c,{once:!0}),t.read().then(o,s).finally(()=>{l.removeEventListener("abort",c)})}else t.read().then(o,s)});if(r.done)return this.validateBytesReceived(!0),{done:!0,value:void 0};else{this.handleChunkReceived(r.value);let o;try{o=e.decode(r.value.content)}catch(s){throw new Lt("Cannot decode datastream chunk ".concat(r.value.chunkIndex," as text: ").concat(s),at.DecodeFailed)}return{done:!1,value:o}}}catch(r){throw n(),r}}),return(){return a(this,void 0,void 0,function*(){return n(),{done:!0,value:void 0}})}}}withAbortSignal(t){return this.signal=t,this}readAll(){return a(this,arguments,void 0,function(){var t=this;let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return function*(){var l,n,r,o;let s="",c=e.signal?t.withAbortSignal(e.signal):t;try{for(var i=!0,h=Zt(c),f;f=yield h.next(),l=f.done,!l;i=!0)o=f.value,i=!1,s+=o}catch(u){n={error:u}}finally{try{if(!i&&!l&&(r=h.return))yield r.call(h)}finally{if(n)throw n.error}}return s}()})}};ef=class ef extends Do{};lf=class lf extends Do{};(function(t){t[t.TooShort=0]="TooShort",t[t.HeaderOverrun=1]="HeaderOverrun",t[t.MissingExtWords=2]="MissingExtWords",t[t.UnsupportedVersion=3]="UnsupportedVersion",t[t.InvalidHandle=4]="InvalidHandle",t[t.MalformedExt=5]="MalformedExt"})(ne||(ne={}));mt=class mt extends Wt{constructor(t,e,l){super(19,t,l);this.name="DataTrackDeserializeError",this.reason=e,this.reasonName=ne[e]}static tooShort(){return new mt("Too short to contain a valid header",ne.TooShort)}static headerOverrun(){return new mt("Header exceeds total packet length",ne.HeaderOverrun)}static missingExtWords(){return new mt("Extension word indicator is missing",ne.MissingExtWords)}static unsupportedVersion(t){return new mt("Unsupported version ".concat(t),ne.UnsupportedVersion)}static invalidHandle(t){return new mt("invalid track handle: ".concat(t.message),ne.InvalidHandle,{cause:t})}static malformedExt(t){return new mt("Extension with tag ".concat(t," is malformed"),ne.MalformedExt)}};(function(t){t[t.TooSmallForHeader=0]="TooSmallForHeader",t[t.TooSmallForPayload=1]="TooSmallForPayload"})(yl||(yl={}));Rl=class Rl extends Wt{constructor(t,e,l){super(19,t,l);this.name="DataTrackSerializeError",this.reason=e,this.reasonName=yl[e]}static tooSmallForHeader(){return new Rl("Buffer cannot fit header",yl.TooSmallForHeader)}static tooSmallForPayload(){return new Rl("Buffer cannot fit payload",yl.TooSmallForPayload)}};(function(t){t[t.UserTimestamp=2]="UserTimestamp",t[t.E2ee=1]="E2ee"})(ll||(ll={}));Yo=class Yo extends Xl{};jt=class jt extends Yo{constructor(t){super();this.timestamp=t}toBinaryLengthBytes(){return tt+tt+jt.lengthBytes}toBinaryInto(t){let e=0;t.setUint8(e,jt.tag),e+=tt,t.setUint8(e,jt.lengthBytes),e+=tt,t.setBigUint64(e,this.timestamp),e+=tx;let l=this.toBinaryLengthBytes();if(e!==l)throw Error("DataTrackUserTimestampExtension.toBinaryInto: Wrote ".concat(e," bytes but expected length was ").concat(l," bytes"));return e}toJSON(){return{tag:jt.tag,lengthBytes:jt.lengthBytes,timestamp:this.timestamp}}};jt.tag=ll.UserTimestamp;jt.lengthBytes=8;qt=class qt extends Yo{constructor(t,e){super();this.keyIndex=t,this.iv=e}toBinaryLengthBytes(){return tt+tt+qt.lengthBytes}toBinaryInto(t){let e=0;t.setUint8(e,qt.tag),e+=tt,t.setUint8(e,qt.lengthBytes),e+=tt,t.setUint8(e,this.keyIndex),e+=tt;for(let n=0;n<this.iv.length;n+=1)t.setUint8(e,this.iv[n]),e+=tt;let l=this.toBinaryLengthBytes();if(e!==l)throw Error("DataTrackE2eeExtension.toBinaryInto: Wrote ".concat(e," bytes but expected length was ").concat(l," bytes"));return e}toJSON(){return{tag:qt.tag,lengthBytes:qt.lengthBytes,keyIndex:this.keyIndex,iv:this.iv}}};qt.tag=ll.E2ee;qt.lengthBytes=13;ke=class ke extends Xl{constructor(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};super();this.userTimestamp=t.userTimestamp,this.e2ee=t.e2ee}toBinaryLengthBytes(){let t=0;if(this.userTimestamp)t+=this.userTimestamp.toBinaryLengthBytes();if(this.e2ee)t+=this.e2ee.toBinaryLengthBytes();return t}toBinaryInto(t){let e=0;if(this.e2ee){let n=this.e2ee.toBinaryInto(t);e+=n}if(this.userTimestamp){let n=this.userTimestamp.toBinaryInto(new DataView(t.buffer,t.byteOffset+e));e+=n}let l=this.toBinaryLengthBytes();if(e!==l)throw Error("DataTrackExtensions.toBinaryInto: Wrote ".concat(e," bytes but expected length was ").concat(l," bytes"));return e}static fromBinary(t){let e=Ro(t),l,n,r=0;while(e.byteLength-r>=tt+tt){let o=e.getUint8(r);r+=tt;let s=e.getUint8(r);if(r+=tt,o===ox)continue;switch(o){case ll.UserTimestamp:if(e.byteLength-r<jt.lengthBytes)throw mt.malformedExt(o);l=new jt(e.getBigUint64(r)),r+=s;break;case ll.E2ee:if(e.byteLength-r<qt.lengthBytes)throw mt.malformedExt(o);let c=e.getUint8(r),i=new Uint8Array(12);for(let h=0;h<i.length;h+=1){let f=r;f+=tt,f+=h*tt,i[h]=e.getUint8(f)}n=new qt(c,i),r+=s;break;default:if(e.byteLength-r<s)throw mt.malformedExt(o);r+=s;break}}return[new ke({userTimestamp:l,e2ee:n}),e.byteLength]}toJSON(){var t,e,l,n;return{userTimestamp:(e=(t=this.userTimestamp)===null||t===void 0?void 0:t.toJSON())!==null&&e!==void 0?e:null,e2ee:(n=(l=this.e2ee)===null||l===void 0?void 0:l.toJSON())!==null&&n!==void 0?n:null}}};sf={from(t){return{payload:t.payload,extensions:new ke({userTimestamp:t.userTimestamp?new jt(t.userTimestamp):void 0})}},lossyIntoFrame(t){var e;return{payload:t.payload,userTimestamp:(e=t.extensions.userTimestamp)===null||e===void 0?void 0:e.timestamp}}},cf=Symbol.for("lk.track"),hf=Symbol.for("lk.data-track");$l=class $l extends Xl{constructor(t){var e;super();this.marker=t.marker,this.trackHandle=t.trackHandle,this.sequence=t.sequence,this.frameNumber=t.frameNumber,this.timestamp=t.timestamp,this.extensions=(e=t.extensions)!==null&&e!==void 0?e:new ke}extensionsMetrics(){let t=this.extensions.toBinaryLengthBytes(),e=Math.ceil(t/4),l=e*4-t;return{lengthBytes:t,lengthWords:e,paddingLengthBytes:l}}toBinaryLengthBytes(){let{lengthBytes:t,paddingLengthBytes:e}=this.extensionsMetrics(),l=wi;if(t>0)l+=nx+t+e;return l}toBinaryInto(t){if(t.byteLength<this.toBinaryLengthBytes())throw Rl.tooSmallForHeader();let e=gi<<mi,l;switch(this.marker){case k.Inter:l=Li;break;case k.Final:l=pi;break;case k.Start:l=Ai;break;case k.Single:l=Ci;break}e|=l<<yi;let{lengthBytes:n,lengthWords:r,paddingLengthBytes:o}=this.extensionsMetrics();if(n>0)e|=1<<Ii;let s=0;if(t.setUint8(s,e),s+=tt,t.setUint8(s,0),s+=tt,t.setUint16(s,this.trackHandle),s+=te,t.setUint16(s,this.sequence.value),s+=te,t.setUint16(s,this.frameNumber.value),s+=te,t.setUint32(s,this.timestamp.asTicks()),s+=xi,n>0){let i=r-1;t.setUint16(s,i),s+=te;let h=this.extensions.toBinaryInto(new DataView(t.buffer,t.byteOffset+s));s+=h;for(let f=0;f<o;f+=1)t.setUint8(s,0),s+=tt}let c=this.toBinaryLengthBytes();if(s!==c)throw Error("DataTrackPacketHeader.toBinaryInto: Wrote ".concat(s," bytes but expected length was ").concat(c," bytes"));return c}static fromBinary(t){let e=Ro(t);if(e.byteLength<wi)throw mt.tooShort();let l=0,n=e.getUint8(l);l+=tt;let r=n>>mi&ex;if(r>gi)throw mt.unsupportedVersion(r);let o;switch(n>>yi&lx){case Ai:o=k.Start;break;case pi:o=k.Final;break;case Ci:o=k.Single;break;case Li:default:o=k.Inter;break}let s=(n>>Ii&rx)>0;l+=tt;let c;try{c=gb.fromNumber(e.getUint16(l))}catch(d){if(d instanceof el&&(d.isReason(He.Reserved)||d.isReason(He.TooLarge)))throw mt.invalidHandle(d);else throw d}l+=te;let i=Tt.u16(e.getUint16(l));l+=te;let h=Tt.u16(e.getUint16(l));l+=te;let f=Fe.fromRtpTicks(e.getUint32(l));l+=xi;let u=new ke;if(s){if(e.byteLength-l<te)throw mt.missingExtWords();let d=e.getUint16(l);l+=te;let g=4*(d+1);if(l+g>e.byteLength)throw mt.headerOverrun();let w=new DataView(e.buffer,e.byteOffset+l,g),[p,y]=ke.fromBinary(w);u=p,l+=y}return[new $l({marker:o,trackHandle:c,sequence:i,frameNumber:h,timestamp:f,extensions:u}),l]}toJSON(){return{marker:this.marker,trackHandle:this.trackHandle,sequence:this.sequence.value,frameNumber:this.frameNumber.value,timestamp:this.timestamp.asTicks(),extensions:this.extensions.toJSON()}}};(function(t){t[t.Start=0]="Start",t[t.Inter=1]="Inter",t[t.Final=2]="Final",t[t.Single=3]="Single"})(k||(k={}));Gl=class Gl extends Xl{constructor(t,e){super();this.header=t,this.payload=e}toBinaryLengthBytes(){return this.header.toBinaryLengthBytes()+this.payload.byteLength}toBinaryInto(t){let e=0,l=this.header.toBinaryInto(t);if(e+=l,t.byteLength-e<this.payload.byteLength)throw Rl.tooSmallForPayload();for(let r=0;r<this.payload.length;r+=1)t.setUint8(e,this.payload[r]),e+=tt;let n=this.toBinaryLengthBytes();if(e!==n)throw Error("DataTrackPacket.toBinaryInto: Wrote ".concat(e," bytes but expected length was ").concat(n," bytes"));return n}static fromBinary(t){let e=Ro(t),[l,n]=$l.fromBinary(e),r=e.buffer.slice(e.byteOffset+n,e.byteOffset+e.byteLength);return[new Gl(l,new Uint8Array(r)),e.byteLength]}toJSON(){return{header:this.header.toJSON(),payload:this.payload}}};yr=pt(dt.DataTracks);Yt=class Yt extends Wt{constructor(t,e,l,n){super(19,"Frame ".concat(l," dropped: ").concat(t),n);this.name="DataTrackDepacketizerDropError",this.reason=e,this.reasonName=We[e],this.frameNumber=l}static interrupted(t,e){return new Yt("Interrupted by the start of a new frame ".concat(e),We.Interrupted,t)}static unknownFrame(t){return new Yt("Initial packet was never received.",We.UnknownFrame,t)}static bufferFull(t){return new Yt("Reorder buffer is full.",We.BufferFull,t)}static incomplete(t,e,l){return new Yt("Not all packets received before final packet. Received ".concat(e," packets, expected ").concat(l," packets."),We.Incomplete,t)}};(function(t){t[t.Interrupted=0]="Interrupted",t[t.UnknownFrame=1]="UnknownFrame",t[t.BufferFull=2]="BufferFull",t[t.Incomplete=3]="Incomplete"})(We||(We={}));zn.MAX_BUFFER_PACKETS=128;(function(t){t[t.Unpublished=0]="Unpublished",t[t.Timeout=1]="Timeout",t[t.Disconnected=2]="Disconnected",t[t.Cancelled=4]="Cancelled"})(Re||(Re={}));Ht=class Ht extends Wt{constructor(t,e,l){super(22,t,l);this.name="DataTrackSubscribeError",this.reason=e,this.reasonName=Re[e]}static unpublished(){return new Ht("The track has been unpublished and is no longer available",Re.Unpublished)}static timeout(){return new Ht("Request to subscribe to data track timed-out",Re.Timeout)}static disconnected(){return new Ht("Cannot subscribe to data track when disconnected",Re.Disconnected)}static cancelled(){return new Ht("Subscription to data track cancelled by caller",Re.Cancelled)}};Ar=pt(dt.DataTracks);gt=pt(dt.DataTracks);uf=class uf extends zt.EventEmitter{constructor(t){var e;super();this.descriptors=new Map,this.subscriptionHandles=new Map,this.e2eeManager=(e=t===null||t===void 0?void 0:t.e2eeManager)!==null&&e!==void 0?e:null}updateE2eeManager(t){this.e2eeManager=t;for(let e of this.descriptors.values())if(e.subscription.type==="active")e.subscription.pipeline.updateE2eeManager(t)}openSubscriptionStream(t,e){let l=arguments.length>2&&arguments[2]!==void 0?arguments[2]:ix,n=null,r=new yt;return[new ReadableStream({start:(s)=>{n=s;let c=()=>{var i;s.error(Ht.cancelled()),(i=r.reject)===null||i===void 0||i.call(r,Ht.cancelled())};this.subscribeRequest(t,e).then(()=>a(this,void 0,void 0,function*(){var i;e===null||e===void 0||e.addEventListener("abort",c);let h=this.descriptors.get(t);if(!h){gt.error("Unknown track ".concat(t));return}if(h.subscription.type!=="active"){gt.error("Subscription for track ".concat(t," is not active"));return}h.subscription.streamControllers.add(s),(i=r.resolve)===null||i===void 0||i.call(r)})).catch((i)=>{var h;s.error(i),(h=r.reject)===null||h===void 0||h.call(r,i)}).finally(()=>{e===null||e===void 0||e.removeEventListener("abort",c)})},cancel:()=>{if(!n){gt.warn("ReadableStream subscribed to ".concat(t," was not started."));return}let s=this.descriptors.get(t);if(!s){gt.warn("Unknown track ".concat(t,", skipping cancel..."));return}if(s.subscription.type!=="active"){gt.warn("Subscription for track ".concat(t," is not active, skipping cancel..."));return}if(s.subscription.streamControllers.delete(n),s.subscription.streamControllers.size===0)this.unSubscribeRequest(s.info.sid)}},new CountQueuingStrategy({highWaterMark:l})),r.promise]}subscribeRequest(t,e){return a(this,void 0,void 0,function*(){let l=this.descriptors.get(t);if(!l)throw Error("Cannot subscribe to unknown track");let n=(r,o,s)=>a(this,void 0,void 0,function*(){if(r.subscription.type==="active")return;if(r.subscription.type!=="pending")throw Error("Descriptor for track ".concat(t," is not pending, found ").concat(r.subscription.type));let c=rf([o,s].filter((f)=>typeof f<"u")),i=new yt;r.subscription.completionFuture.promise.then(()=>{var f;return(f=i.resolve)===null||f===void 0?void 0:f.call(i)}).catch((f)=>{var u;return(u=i.reject)===null||u===void 0?void 0:u.call(i,f)});let h=()=>{var f;if(r.subscription.type!=="pending")return;if(r.subscription.pendingRequestCount-=1,s===null||s===void 0?void 0:s.aborted){r.subscription.cancel();return}if(r.subscription.pendingRequestCount<=0){r.subscription.cancel();return}(f=i.reject)===null||f===void 0||f.call(i,Ht.cancelled())};if(c.aborted)h();c.addEventListener("abort",h),yield i.promise,c.removeEventListener("abort",h)});switch(l.subscription.type){case"none":{l.subscription={type:"pending",completionFuture:new yt,pendingRequestCount:1,cancel:()=>{var o,s;let c=l.subscription;if(l.subscription={type:"none"},this.emit("sfuUpdateSubscription",{sid:t,subscribe:!1}),c.type==="pending")(s=(o=c.completionFuture).reject)===null||s===void 0||s.call(o,r.aborted?Ht.timeout():Ht.cancelled())}},this.emit("sfuUpdateSubscription",{sid:t,subscribe:!0});let r=of(sx);yield n(l,e,r);return}case"pending":{l.subscription.pendingRequestCount+=1,yield n(l,e);return}case"active":return}})}querySubscribed(){return a(this,void 0,void 0,function*(){return Array.from(this.descriptors.values()).filter((e)=>e.subscription.type==="active").map((e)=>[e.info,e.publisherIdentity])})}unSubscribeRequest(t){var e;let l=this.descriptors.get(t);if(!l)throw Error("Cannot subscribe to unknown track");if(l.subscription.type!=="active"){gt.warn("Unexpected descriptor state in unSubscribeRequest, expected active, found ".concat((e=l.subscription)===null||e===void 0?void 0:e.type));return}for(let r of l.subscription.streamControllers)r.close();let n=l.subscription;l.subscription={type:"none"},this.subscriptionHandles.delete(n.subcriptionHandle),this.emit("sfuUpdateSubscription",{sid:t,subscribe:!1})}receiveSfuPublicationUpdates(t){return a(this,void 0,void 0,function*(){if(t.size===0)return;let e=new Map;for(let[l,n]of t.entries()){let r=new Set;for(let o of n){if(r.add(o.sid),this.descriptors.has(o.sid))continue;yield this.handleTrackPublished(l,o)}e.set(l,r)}for(let[l,n]of e.entries()){let o=Array.from(this.descriptors.entries()).filter((s)=>{let[c,i]=s;return i.publisherIdentity===l}).map((s)=>{let[c]=s;return c}).filter((s)=>!n.has(s));for(let s of o)this.handleTrackUnpublished(s)}})}queryPublications(){return a(this,void 0,void 0,function*(){return Array.from(this.descriptors.values()).map((t)=>t.info)})}handleTrackPublished(t,e){return a(this,void 0,void 0,function*(){if(this.descriptors.has(e.sid)){gt.error("Existing descriptor for track ".concat(e.sid));return}let l={info:e,publisherIdentity:t,subscription:{type:"none"}};this.descriptors.set(l.info.sid,l);let n=new Qo(l.info,this,{publisherIdentity:t});this.emit("trackPublished",{track:n})})}handleTrackUnpublished(t){let e=this.descriptors.get(t);if(!e){gt.error("Unknown track ".concat(t));return}if(this.descriptors.delete(t),e.subscription.type==="active")this.subscriptionHandles.delete(e.subscription.subcriptionHandle);this.emit("trackUnpublished",{sid:t,publisherIdentity:e.publisherIdentity})}receivedSfuSubscriberHandles(t){for(let[e,l]of t.entries())this.registerSubscriberHandle(e,l)}registerSubscriberHandle(t,e){var l,n;let r=this.descriptors.get(e);if(!r){gt.error("Unknown track ".concat(e));return}switch(r.subscription.type){case"none":{gt.warn("No subscription for ".concat(e));return}case"active":{r.subscription.subcriptionHandle=t,this.subscriptionHandles.set(t,e);return}case"pending":{let o=new ff({info:r.info,publisherIdentity:r.publisherIdentity,e2eeManager:this.e2eeManager}),s=r.subscription;r.subscription={type:"active",subcriptionHandle:t,pipeline:o,streamControllers:new Set},this.subscriptionHandles.set(t,e),(n=(l=s.completionFuture).resolve)===null||n===void 0||n.call(l)}}}packetReceived(t){return a(this,void 0,void 0,function*(){let e;try{[e]=Gl.fromBinary(t)}catch(o){gt.error("Failed to deserialize packet: ".concat(o));return}let l=this.subscriptionHandles.get(e.header.trackHandle);if(!l){gt.warn("Unknown subscriber handle ".concat(e.header.trackHandle));return}let n=this.descriptors.get(l);if(!n){gt.error("Missing descriptor for track ".concat(l));return}if(n.subscription.type!=="active"){gt.warn("Received packet for track ".concat(l," without active subscription"));return}let r=yield n.subscription.pipeline.processPacket(e);if(!r)return;for(let o of n.subscription.streamControllers){if(o.desiredSize!==null&&o.desiredSize<=0){gt.warn("Cannot send frame to subscribers: readable stream is full (desiredSize is ".concat(o.desiredSize,"). To increase this threshold, set a higher 'options.highWaterMark' when calling .subscribe()."));continue}let s=sf.lossyIntoFrame(r);o.enqueue(s)}})}resendSubscriptionUpdates(){for(let[t,e]of this.descriptors){if(e.subscription.type==="none")continue;this.emit("sfuUpdateSubscription",{sid:t,subscribe:!0})}}handleRemoteParticipantDisconnected(t){var e,l;for(let n of this.descriptors.values()){if(n.publisherIdentity!==t)continue;switch(n.subscription.type){case"none":break;case"pending":(l=(e=n.subscription.completionFuture).reject)===null||l===void 0||l.call(e,Ht.disconnected());break;case"active":this.unSubscribeRequest(n.info.sid);break}}}shutdown(){var t,e;for(let l of this.descriptors.values())if(this.emit("trackUnpublished",{sid:l.info.sid,publisherIdentity:l.publisherIdentity}),l.subscription.type==="pending")(e=(t=l.subscription.completionFuture).reject)===null||e===void 0||e.call(t,Ht.disconnected());this.descriptors.clear()}};On=class On extends Wt{constructor(t,e,l){super(19,t,l);this.name="DataTrackPacketizerError",this.reason=e,this.reasonName=An[e]}static mtuTooShort(){return new On("MTU is too short to send frame",An.MtuTooShort)}};(function(t){t[t.MtuTooShort=0]="MtuTooShort"})(An||(An={}));(function(t){t[t.NotAllowed=0]="NotAllowed",t[t.DuplicateName=1]="DuplicateName",t[t.Timeout=2]="Timeout",t[t.LimitReached=3]="LimitReached",t[t.Disconnected=4]="Disconnected",t[t.Cancelled=5]="Cancelled",t[t.InvalidName=6]="InvalidName",t[t.Unknown=7]="Unknown"})(Dt||(Dt={}));ot=class ot extends Wt{constructor(t,e,l){super(21,t,l);this.name="DataTrackPublishError",this.reason=e,this.reasonName=Dt[e],this.rawMessage=l===null||l===void 0?void 0:l.rawMessage}static notAllowed(t){return new ot("Data track publishing unauthorized",Dt.NotAllowed,{rawMessage:t})}static duplicateName(t){return new ot("Track name already taken",Dt.DuplicateName,{rawMessage:t})}static invalidName(t){return new ot("Track name is invalid",Dt.InvalidName,{rawMessage:t})}static timeout(){return new ot("Publish data track timed-out. Does the LiveKit server support data tracks?",Dt.Timeout)}static limitReached(t){return new ot("Data track publication limit reached",Dt.LimitReached,{rawMessage:t})}static unknown(t,e){return new ot("Received RequestResponse for publishDataTrack, but reason was unrecognised (".concat(t,", ").concat(e,")"),Dt.Unknown)}static disconnected(){return new ot("Room disconnected",Dt.Disconnected)}static cancelled(){return new ot("Publish data track cancelled by caller",Dt.Cancelled)}};(function(t){t[t.TrackUnpublished=0]="TrackUnpublished",t[t.Dropped=1]="Dropped"})(Al||(Al={}));ge=class ge extends Wt{constructor(t,e,l){super(22,t,l);this.name="DataTrackPushFrameError",this.reason=e,this.reasonName=Al[e]}static trackUnpublished(){return new ge("Track is no longer published",Al.TrackUnpublished)}static dropped(t){return new ge("Frame was dropped",Al.Dropped,{cause:t})}};(function(t){t[t.Packetizer=0]="Packetizer",t[t.Encryption=1]="Encryption"})(pl||(pl={}));Nl=class Nl extends Wt{constructor(t,e,l){super(21,t,l);this.name="DataTrackOutgoingPipelineError",this.reason=e,this.reasonName=pl[e]}static packetizer(t){return new Nl("Error packetizing frame",pl.Packetizer,{cause:t})}static encryption(t){return new Nl("Error encrypting frame",pl.Encryption,{cause:t})}};Dn.TRANSPORT_MTU_BYTES=16000;ee=pt(dt.DataTracks),Bi={pending(){return{type:"pending",completionFuture:new yt}},active(t,e){return{type:"active",info:t,publishState:"published",pipeline:new Dn({info:t,e2eeManager:e}),unpublishingFuture:new yt}}};Zo=class Zo extends zt.EventEmitter{constructor(t){var e;super();this.handleAllocator=new Sh,this.descriptors=new Map,this.e2eeManager=(e=t===null||t===void 0?void 0:t.e2eeManager)!==null&&e!==void 0?e:null}static withDescriptors(t){let e=new Zo;return e.descriptors=t,e}updateE2eeManager(t){this.e2eeManager=t;for(let e of this.descriptors.values())if(e.type==="active")e.pipeline.updateE2eeManager(t)}getDescriptor(t){var e;return(e=this.descriptors.get(t))!==null&&e!==void 0?e:null}tryProcessAndSend(t,e){return a(this,void 0,void 0,function*(){var l,n,r,o;let s=this.getDescriptor(t);if((s===null||s===void 0?void 0:s.type)!=="active")throw ge.trackUnpublished();if(s.publishState==="unpublished")throw ge.trackUnpublished();if(s.publishState==="republishing")throw ge.dropped("Data track republishing");try{try{for(var c=!0,i=Zt(s.pipeline.processFrame(e)),h;h=yield i.next(),l=h.done,!l;c=!0){o=h.value,c=!1;let f=o;this.emit("packetAvailable",{bytes:f.toBinary()})}}catch(f){n={error:f}}finally{try{if(!c&&!l&&(r=i.return))yield r.call(i)}finally{if(n)throw n.error}}}catch(f){throw ge.dropped(f)}})}publishRequest(t,e){return a(this,void 0,void 0,function*(){let l=this.handleAllocator.get();if(!l)throw ot.limitReached();let n=of(cx),r=e?rf([e,n]):n;if(this.descriptors.has(l))throw Error("Descriptor for handle already exists");let o=Bi.pending();this.descriptors.set(l,o);let s=()=>{var c,i;let h=this.descriptors.get(l);if(!h){ee.warn("No descriptor for ".concat(l));return}if(this.descriptors.delete(l),this.emit("sfuUnpublishRequest",{handle:l}),h.type==="pending")(i=(c=h.completionFuture).reject)===null||i===void 0||i.call(c,n.aborted?ot.timeout():ot.cancelled())};if(r.aborted)return s(),o.completionFuture.promise.then(()=>l);return r.addEventListener("abort",s),this.emit("sfuPublishRequest",{handle:l,name:t.name,usesE2ee:this.e2eeManager!==null}),yield o.completionFuture.promise,r.removeEventListener("abort",s),this.emit("trackPublished",{track:zl.withExplicitHandle(t,this,l)}),l})}queryPublished(){return Array.from(this.descriptors.values()).filter((e)=>e.type==="active").map((e)=>e.info)}unpublishRequest(t){return a(this,void 0,void 0,function*(){let e=this.descriptors.get(t);if(!e){ee.warn("No descriptor for ".concat(t));return}if(e.type!=="active"){ee.warn("Track ".concat(t," not active"));return}this.emit("sfuUnpublishRequest",{handle:t}),yield e.unpublishingFuture.promise,this.emit("trackUnpublished",{sid:e.info.sid})})}receivedSfuPublishResponse(t,e){var l,n,r,o;let s=this.descriptors.get(t);if(!s){ee.warn("No descriptor for ".concat(t));return}switch(this.descriptors.delete(t),s.type){case"pending":{if(e.type==="ok"){let c=e.data,i=c.usesE2ee?this.e2eeManager:null;this.descriptors.set(c.pubHandle,Bi.active(c,i)),(n=(l=s.completionFuture).resolve)===null||n===void 0||n.call(l)}else(o=(r=s.completionFuture).reject)===null||o===void 0||o.call(r,e.error);return}case"active":{if(s.publishState!=="republishing"){ee.warn("Track ".concat(t," already active"));return}if(e.type==="error"){ee.warn("Republish failed for track ".concat(t));return}ee.debug("Track ".concat(t," republished")),s.info.sid=e.data.sid,s.publishState="published",this.descriptors.set(s.info.pubHandle,s)}}}receivedSfuUnpublishResponse(t){var e,l;let n=this.descriptors.get(t);if(!n){ee.warn("No descriptor for ".concat(t));return}if(this.descriptors.delete(t),n.type!=="active"){ee.warn("Track ".concat(t," not active"));return}n.publishState="unpublished",(l=(e=n.unpublishingFuture).resolve)===null||l===void 0||l.call(e)}sfuWillRepublishTracks(){var t,e;for(let[l,n]of this.descriptors.entries())switch(n.type){case"pending":this.descriptors.delete(l),(e=(t=n.completionFuture).reject)===null||e===void 0||e.call(t,ot.disconnected());break;case"active":n.publishState="republishing",this.emit("sfuPublishRequest",{handle:n.info.pubHandle,name:n.info.name,usesE2ee:n.info.usesE2ee})}}shutdown(){return a(this,void 0,void 0,function*(){var t,e,l,n;for(let r of this.descriptors.values())switch(r.type){case"pending":(e=(t=r.completionFuture).reject)===null||e===void 0||e.call(t,ot.disconnected());break;case"active":(n=(l=r.unpublishingFuture).resolve)===null||n===void 0||n.call(l),yield this.unpublishRequest(r.info.pubHandle);break}this.descriptors.clear()})}};Yn=class Yn extends L{constructor(t,e,l,n,r){super(t,l,r);this.sid=e,this.receiver=n}get isLocal(){return!1}setMuted(t){if(this.isMuted!==t)this.isMuted=t,this._mediaStreamTrack.enabled=!t,this.emit(t?W.Muted:W.Unmuted,this)}setMediaStream(t){this.mediaStream=t;let e=(l)=>{if(l.track===this._mediaStreamTrack){if(t.removeEventListener("removetrack",e),this.receiver&&"playoutDelayHint"in this.receiver)this.receiver.playoutDelayHint=void 0;this.receiver=void 0,this._currentBitrate=0,this.emit(W.Ended,this)}};t.addEventListener("removetrack",e)}start(){this.startMonitor(),super.enable()}stop(){this.stopMonitor(),super.disable()}getRTCStatsReport(){return a(this,void 0,void 0,function*(){var t;if(!((t=this.receiver)===null||t===void 0?void 0:t.getStats))return;return yield this.receiver.getStats()})}setPlayoutDelay(t){if(this.receiver)if("playoutDelayHint"in this.receiver)this.receiver.playoutDelayHint=t;else this.log.warn("Playout delay not supported in this browser");else this.log.warn("Cannot set playout delay, track already ended")}getPlayoutDelay(){if(this.receiver)if("playoutDelayHint"in this.receiver)return this.receiver.playoutDelayHint;else this.log.warn("Playout delay not supported in this browser");else this.log.warn("Cannot get playout delay, track already ended");return 0}startMonitor(){if(!this.monitorInterval)this.monitorInterval=setInterval(()=>this.monitorReceiver(),Vo);if(Ra())this.registerTimeSyncUpdate()}registerTimeSyncUpdate(){let t=()=>{var e;this.timeSyncHandle=requestAnimationFrame(()=>t());let l=(e=this.receiver)===null||e===void 0?void 0:e.getSynchronizationSources()[0];if(l){let{timestamp:n,rtpTimestamp:r}=l;if(r&&this.rtpTimestamp!==r)this.emit(W.TimeSyncUpdate,{timestamp:n,rtpTimestamp:r}),this.rtpTimestamp=r}};t()}};Ko=class Ko extends Yn{constructor(t,e,l,n,r,o){super(t,e,L.Kind.Audio,l,o);if(this.monitorReceiver=()=>a(this,void 0,void 0,function*(){if(!this.receiver){this._currentBitrate=0;return}let s=yield this.getReceiverStats();if(s&&this.prevStats&&this.receiver)this._currentBitrate=Xn(s,this.prevStats);this.prevStats=s}),this.audioContext=n,this.webAudioPluginNodes=[],r)this.sinkId=r.deviceId}setVolume(t){var e;for(let l of this.attachedElements)if(this.audioContext)(e=this.gainNode)===null||e===void 0||e.gain.setTargetAtTime(t,0,0.1);else l.volume=t;if(Jt())this._mediaStreamTrack._setVolume(t);this.elementVolume=t}getVolume(){if(this.elementVolume)return this.elementVolume;if(Jt())return 1;let t=0;return this.attachedElements.forEach((e)=>{if(e.volume>t)t=e.volume}),t}setSinkId(t){return a(this,void 0,void 0,function*(){this.sinkId=t,yield Promise.all(this.attachedElements.map((e)=>{if(!gn(e))return;return e.setSinkId(t)}))})}attach(t){let e=this.attachedElements.length===0;if(!t)t=super.attach();else super.attach(t);if(this.sinkId&&gn(t))t.setSinkId(this.sinkId).catch((l)=>{this.log.error("Failed to set sink id on remote audio track",l,this.logContext)});if(this.audioContext&&e)this.log.debug("using audio context mapping",this.logContext),this.connectWebAudio(this.audioContext,t),t.volume=0,t.muted=!0;if(this.elementVolume)this.setVolume(this.elementVolume);return t}detach(t){let e;if(!t)e=super.detach(),this.disconnectWebAudio();else if(e=super.detach(t),this.audioContext)if(this.attachedElements.length>0)this.connectWebAudio(this.audioContext,this.attachedElements[0]);else this.disconnectWebAudio();return e}setAudioContext(t){if(this.audioContext=t,t&&this.attachedElements.length>0)this.connectWebAudio(t,this.attachedElements[0]);else if(!t)this.disconnectWebAudio()}setWebAudioPlugins(t){if(this.webAudioPluginNodes=t,this.attachedElements.length>0&&this.audioContext)this.connectWebAudio(this.audioContext,this.attachedElements[0])}connectWebAudio(t,e){this.disconnectWebAudio(),this.sourceNode=t.createMediaStreamSource(e.srcObject);let l=this.sourceNode;if(this.webAudioPluginNodes.forEach((n)=>{l.connect(n),l=n}),this.gainNode=t.createGain(),l.connect(this.gainNode),this.gainNode.connect(t.destination),this.elementVolume)this.gainNode.gain.setTargetAtTime(this.elementVolume,0,0.1);if(t.state!=="running")t.resume().then(()=>{if(t.state!=="running")this.emit(W.AudioPlaybackFailed,Error("Audio Context couldn't be started automatically"))}).catch((n)=>{this.emit(W.AudioPlaybackFailed,n)})}disconnectWebAudio(){var t,e;(t=this.gainNode)===null||t===void 0||t.disconnect(),(e=this.sourceNode)===null||e===void 0||e.disconnect(),this.gainNode=void 0,this.sourceNode=void 0}getReceiverStats(){return a(this,void 0,void 0,function*(){if(!this.receiver||!this.receiver.getStats)return;let t=yield this.receiver.getStats(),e;return t.forEach((l)=>{if(l.type==="inbound-rtp")e={type:"audio",streamId:l.id,timestamp:l.timestamp,jitter:l.jitter,bytesReceived:l.bytesReceived,concealedSamples:l.concealedSamples,concealmentEvents:l.concealmentEvents,silentConcealedSamples:l.silentConcealedSamples,silentConcealmentEvents:l.silentConcealmentEvents,totalAudioEnergy:l.totalAudioEnergy,totalSamplesDuration:l.totalSamplesDuration}}),e})}};jo=class jo extends Yn{constructor(t,e,l,n,r){super(t,e,L.Kind.Video,l,r);this.elementInfos=[],this.monitorReceiver=()=>a(this,void 0,void 0,function*(){if(!this.receiver){this._currentBitrate=0;return}let o=yield this.getReceiverStats();if(o&&this.prevStats&&this.receiver)this._currentBitrate=Xn(o,this.prevStats);this.prevStats=o}),this.debouncedHandleResize=No(()=>{this.updateDimensions()},pr),this.adaptiveStreamSettings=n}get isAdaptiveStream(){return this.adaptiveStreamSettings!==void 0}setStreamState(t){if(super.setStreamState(t),this.log.debug("setStreamState",t),this.isAdaptiveStream&&t===L.StreamState.Active)this.updateVisibility()}get mediaStreamTrack(){return this._mediaStreamTrack}setMuted(t){super.setMuted(t),this.attachedElements.forEach((e)=>{if(t)Ne(this._mediaStreamTrack,e);else $e(this._mediaStreamTrack,e)})}attach(t){if(!t)t=super.attach();else super.attach(t);if(this.adaptiveStreamSettings&&this.elementInfos.find((e)=>e.element===t)===void 0){let e=new df(t);this.observeElementInfo(e)}return t}observeElementInfo(t){if(this.adaptiveStreamSettings&&this.elementInfos.find((e)=>e===t)===void 0)t.handleResize=()=>{this.debouncedHandleResize()},t.handleVisibilityChanged=()=>{this.updateVisibility()},this.elementInfos.push(t),t.observe(),this.debouncedHandleResize(),this.updateVisibility();else this.log.warn("visibility resize observer not triggered",this.logContext)}stopObservingElementInfo(t){if(!this.isAdaptiveStream){this.log.warn("stopObservingElementInfo ignored",this.logContext);return}let e=this.elementInfos.filter((l)=>l===t);for(let l of e)l.stopObserving();this.elementInfos=this.elementInfos.filter((l)=>l!==t),this.updateVisibility(),this.debouncedHandleResize()}detach(t){let e=[];if(t)return this.stopObservingElement(t),super.detach(t);e=super.detach();for(let l of e)this.stopObservingElement(l);return e}getDecoderImplementation(){var t;return(t=this.prevStats)===null||t===void 0?void 0:t.decoderImplementation}getReceiverStats(){return a(this,void 0,void 0,function*(){if(!this.receiver||!this.receiver.getStats)return;let t=yield this.receiver.getStats(),e,l="",n=new Map;if(t.forEach((r)=>{if(r.type==="inbound-rtp")l=r.codecId,e={type:"video",streamId:r.id,framesDecoded:r.framesDecoded,framesDropped:r.framesDropped,framesReceived:r.framesReceived,packetsReceived:r.packetsReceived,packetsLost:r.packetsLost,frameWidth:r.frameWidth,frameHeight:r.frameHeight,pliCount:r.pliCount,firCount:r.firCount,nackCount:r.nackCount,jitter:r.jitter,timestamp:r.timestamp,bytesReceived:r.bytesReceived,decoderImplementation:r.decoderImplementation};else if(r.type==="codec")n.set(r.id,r)}),e&&l!==""&&n.get(l))e.mimeType=n.get(l).mimeType;return e})}stopObservingElement(t){let e=this.elementInfos.filter((l)=>l.element===t);for(let l of e)this.stopObservingElementInfo(l)}handleAppVisibilityChanged(){let t=Object.create(null,{handleAppVisibilityChanged:{get:()=>super.handleAppVisibilityChanged}});return a(this,void 0,void 0,function*(){if(yield t.handleAppVisibilityChanged.call(this),!this.isAdaptiveStream)return;this.updateVisibility()})}updateVisibility(t){var e,l;let n=this.elementInfos.reduce((c,i)=>Math.max(c,i.visibilityChangedAt||0),0),r=((l=(e=this.adaptiveStreamSettings)===null||e===void 0?void 0:e.pauseVideoInBackground)!==null&&l!==void 0?l:!0)?this.isInBackground:!1,o=this.elementInfos.some((c)=>c.pictureInPicture),s=this.elementInfos.some((c)=>c.visible)&&!r||o;if(this.lastVisible===s&&!t)return;if(!s&&Date.now()-n<pr){et.setTimeout(()=>{this.updateVisibility()},pr);return}this.lastVisible=s,this.emit(W.VisibilityChanged,s,this)}updateDimensions(){var t,e;let l=0,n=0,r=this.getPixelDensity();for(let o of this.elementInfos){let s=o.width()*r,c=o.height()*r;if(s+c>l+n)l=s,n=c}if(((t=this.lastDimensions)===null||t===void 0?void 0:t.width)===l&&((e=this.lastDimensions)===null||e===void 0?void 0:e.height)===n)return;this.lastDimensions={width:l,height:n},this.emit(W.VideoDimensionsChanged,this.lastDimensions,this)}getPixelDensity(){var t;let e=(t=this.adaptiveStreamSettings)===null||t===void 0?void 0:t.pixelDensity;if(e==="screen")return Fs();else if(!e)if(Fs()>2)return 2;else return 1;return e}};Qt=class Qt extends zt.EventEmitter{constructor(t,e,l,n){var r;super();this.metadataMuted=!1,this.encryption=T.NONE,this.log=O,this.handleMuted=()=>{this.emit(W.Muted)},this.handleUnmuted=()=>{this.emit(W.Unmuted)},this.log=pt((r=n===null||n===void 0?void 0:n.loggerName)!==null&&r!==void 0?r:dt.Publication),this.loggerContextCb=this.loggerContextCb,this.setMaxListeners(100),this.kind=t,this.trackSid=e,this.trackName=l,this.source=L.Source.Unknown}setTrack(t){if(this.track)this.track.off(W.Muted,this.handleMuted),this.track.off(W.Unmuted,this.handleUnmuted);if(this.track=t,t)t.on(W.Muted,this.handleMuted),t.on(W.Unmuted,this.handleUnmuted)}get logContext(){var t;return Object.assign(Object.assign({},(t=this.loggerContextCb)===null||t===void 0?void 0:t.call(this)),Y(this))}get isMuted(){return this.metadataMuted}get isEnabled(){return!0}get isSubscribed(){return this.track!==void 0}get isEncrypted(){return this.encryption!==T.NONE}get audioTrack(){if(Ft(this.track))return this.track}get videoTrack(){if(ue(this.track))return this.track}updateInfo(t){if(this.trackSid=t.sid,this.trackName=t.name,this.source=L.sourceFromProto(t.source),this.mimeType=t.mimeType,this.kind===L.Kind.Video&&t.width>0)this.dimensions={width:t.width,height:t.height},this.simulcasted=t.simulcast;this.encryption=t.encryption,this.trackInfo=t,this.log.debug("update publication info",Object.assign(Object.assign({},this.logContext),{info:t}))}};(function(t){(function(e){e.Desired="desired",e.Subscribed="subscribed",e.Unsubscribed="unsubscribed"})(t.SubscriptionStatus||(t.SubscriptionStatus={})),function(e){e.Allowed="allowed",e.NotAllowed="not_allowed"}(t.PermissionStatus||(t.PermissionStatus={}))})(Qt||(Qt={}));Ml=class Ml extends Qt{get isUpstreamPaused(){var t;return(t=this.track)===null||t===void 0?void 0:t.isUpstreamPaused}constructor(t,e,l,n){super(t,e.sid,e.name,n);this.track=void 0,this.handleTrackEnded=()=>{this.emit(W.Ended)},this.handleCpuConstrained=()=>{if(this.track&&ue(this.track))this.emit(W.CpuConstrained,this.track)},this.updateInfo(e),this.setTrack(l)}setTrack(t){if(this.track)this.track.off(W.Ended,this.handleTrackEnded),this.track.off(W.CpuConstrained,this.handleCpuConstrained);if(super.setTrack(t),t)t.on(W.Ended,this.handleTrackEnded),t.on(W.CpuConstrained,this.handleCpuConstrained)}get isMuted(){if(this.track)return this.track.isMuted;return super.isMuted}get audioTrack(){return super.audioTrack}get videoTrack(){return super.videoTrack}get isLocal(){return!0}mute(){return a(this,void 0,void 0,function*(){var t;return(t=this.track)===null||t===void 0?void 0:t.mute()})}unmute(){return a(this,void 0,void 0,function*(){var t;return(t=this.track)===null||t===void 0?void 0:t.unmute()})}pauseUpstream(){return a(this,void 0,void 0,function*(){var t;yield(t=this.track)===null||t===void 0?void 0:t.pauseUpstream()})}resumeUpstream(){return a(this,void 0,void 0,function*(){var t;yield(t=this.track)===null||t===void 0?void 0:t.resumeUpstream()})}getTrackFeatures(){var t;if(Ft(this.track)){let e=this.track.getSourceTrackSettings(),l=new Set;if(e.autoGainControl)l.add(it.TF_AUTO_GAIN_CONTROL);if(e.echoCancellation)l.add(it.TF_ECHO_CANCELLATION);if(e.noiseSuppression)l.add(it.TF_NOISE_SUPPRESSION);if(e.channelCount&&e.channelCount>1)l.add(it.TF_STEREO);if(!((t=this.options)===null||t===void 0?void 0:t.dtx))l.add(it.TF_NO_DTX);if(this.track.enhancedNoiseCancellation)l.add(it.TF_ENHANCED_NOISE_CANCELLATION);return Array.from(l.values())}else return[]}};(function(t){t.Excellent="excellent",t.Good="good",t.Poor="poor",t.Lost="lost",t.Unknown="unknown"})(ie||(ie={}));Qn=class Qn extends zt.EventEmitter{get logContext(){var t,e;return Object.assign({},(e=(t=this.loggerOptions)===null||t===void 0?void 0:t.loggerContextCb)===null||e===void 0?void 0:e.call(t))}get isEncrypted(){return this.trackPublications.size>0&&Array.from(this.trackPublications.values()).every((t)=>t.isEncrypted)}get isAgent(){var t;return((t=this.permissions)===null||t===void 0?void 0:t.agent)||this.kind===Ue.AGENT}get isActive(){var t;return((t=this.participantInfo)===null||t===void 0?void 0:t.state)===Ke.ACTIVE}get kind(){return this._kind}get attributes(){return Object.freeze(Object.assign({},this._attributes))}constructor(t,e,l,n,r,o){let s=arguments.length>6&&arguments[6]!==void 0?arguments[6]:Ue.STANDARD;var c;super();this.audioLevel=0,this.isSpeaking=!1,this._connectionQuality=ie.Unknown,this.log=O,this.log=pt((c=o===null||o===void 0?void 0:o.loggerName)!==null&&c!==void 0?c:dt.Participant),this.loggerOptions=o,this.setMaxListeners(100),this.sid=t,this.identity=e,this.name=l,this.metadata=n,this.audioTrackPublications=new Map,this.videoTrackPublications=new Map,this.trackPublications=new Map,this._kind=s,this._attributes=r!==null&&r!==void 0?r:{}}getTrackPublications(){return Array.from(this.trackPublications.values())}getTrackPublication(t){for(let[,e]of this.trackPublications)if(e.source===t)return e}getTrackPublicationByName(t){for(let[,e]of this.trackPublications)if(e.trackName===t)return e}waitUntilActive(){if(this.isActive)return Promise.resolve();if(this.activeFuture)return this.activeFuture.promise;return this.activeFuture=new yt,this.once(N.Active,()=>{var t,e;(e=(t=this.activeFuture)===null||t===void 0?void 0:t.resolve)===null||e===void 0||e.call(t),this.activeFuture=void 0}),this.activeFuture.promise}get connectionQuality(){return this._connectionQuality}get isCameraEnabled(){var t;let e=this.getTrackPublication(L.Source.Camera);return!((t=e===null||e===void 0?void 0:e.isMuted)!==null&&t!==void 0?t:!0)}get isMicrophoneEnabled(){var t;let e=this.getTrackPublication(L.Source.Microphone);return!((t=e===null||e===void 0?void 0:e.isMuted)!==null&&t!==void 0?t:!0)}get isScreenShareEnabled(){return!!this.getTrackPublication(L.Source.ScreenShare)}get isLocal(){return!1}get joinedAt(){if(this.participantInfo)return new Date(Number.parseInt(this.participantInfo.joinedAt.toString())*1000);return new Date}updateInfo(t){var e;if(this.participantInfo&&this.participantInfo.sid===t.sid&&this.participantInfo.version>t.version)return!1;if(this.identity=t.identity,this.sid=t.sid,this._setName(t.name),this._setMetadata(t.metadata),this._setAttributes(t.attributes),t.state===Ke.ACTIVE&&((e=this.participantInfo)===null||e===void 0?void 0:e.state)!==Ke.ACTIVE)this.emit(N.Active);if(t.permission)this.setPermissions(t.permission);return this.participantInfo=t,!0}_setMetadata(t){let e=this.metadata!==t,l=this.metadata;if(this.metadata=t,e)this.emit(N.ParticipantMetadataChanged,l)}_setName(t){let e=this.name!==t;if(this.name=t,e)this.emit(N.ParticipantNameChanged,t)}_setAttributes(t){let e=$a(this.attributes,t);if(this._attributes=t,Object.keys(e).length>0)this.emit(N.AttributesChanged,e)}setPermissions(t){var e,l,n,r,o,s;let c=this.permissions,i=t.canPublish!==((e=this.permissions)===null||e===void 0?void 0:e.canPublish)||t.canSubscribe!==((l=this.permissions)===null||l===void 0?void 0:l.canSubscribe)||t.canPublishData!==((n=this.permissions)===null||n===void 0?void 0:n.canPublishData)||t.hidden!==((r=this.permissions)===null||r===void 0?void 0:r.hidden)||t.recorder!==((o=this.permissions)===null||o===void 0?void 0:o.recorder)||t.canPublishSources.length!==this.permissions.canPublishSources.length||t.canPublishSources.some((h,f)=>{var u;return h!==((u=this.permissions)===null||u===void 0?void 0:u.canPublishSources[f])})||t.canSubscribeMetrics!==((s=this.permissions)===null||s===void 0?void 0:s.canSubscribeMetrics);if(this.permissions=t,i)this.emit(N.ParticipantPermissionsChanged,c);return i}setIsSpeaking(t){if(t===this.isSpeaking)return;if(this.isSpeaking=t,t)this.lastSpokeAt=new Date;this.emit(N.IsSpeakingChanged,t)}setConnectionQuality(t){let e=this._connectionQuality;if(this._connectionQuality=fx(t),e!==this._connectionQuality)this.emit(N.ConnectionQualityChanged,this._connectionQuality)}setDisconnected(){var t,e;if(this.activeFuture)(e=(t=this.activeFuture).reject)===null||e===void 0||e.call(t,Error("Participant disconnected")),this.activeFuture=void 0}setAudioContext(t){this.audioContext=t,this.audioTrackPublications.forEach((e)=>Ft(e.track)&&e.track.setAudioContext(t))}addTrackPublication(t){t.on(W.Muted,()=>{this.emit(N.TrackMuted,t)}),t.on(W.Unmuted,()=>{this.emit(N.TrackUnmuted,t)});let e=t;if(e.track)e.track.sid=t.trackSid;switch(this.trackPublications.set(t.trackSid,t),t.kind){case L.Kind.Audio:this.audioTrackPublications.set(t.trackSid,t);break;case L.Kind.Video:this.videoTrackPublications.set(t.trackSid,t);break}}};qo=class qo extends Qn{constructor(t,e,l,n,r,o,s){super(t,e,void 0,void 0,void 0,{loggerName:n.loggerName,loggerContextCb:()=>this.engine.logContext});this.pendingPublishing=new Set,this.pendingPublishPromises=new Map,this.participantTrackPermissions=[],this.allParticipantsAllowedToSubscribe=!0,this.encryptionType=T.NONE,this.enabledPublishVideoCodecs=[],this.pendingAcks=new Map,this.pendingResponses=new Map,this.handleReconnecting=()=>{if(!this.reconnectFuture)this.reconnectFuture=new yt},this.handleReconnected=()=>{var c,i;(i=(c=this.reconnectFuture)===null||c===void 0?void 0:c.resolve)===null||i===void 0||i.call(c),this.reconnectFuture=void 0,this.updateTrackSubscriptionPermissions()},this.handleClosing=()=>{var c,i,h,f,u,d;if(this.reconnectFuture)this.reconnectFuture.promise.catch((x)=>this.log.warn(x.message,this.logContext)),(i=(c=this.reconnectFuture)===null||c===void 0?void 0:c.reject)===null||i===void 0||i.call(c,Error("Got disconnected during reconnection attempt")),this.reconnectFuture=void 0;if(this.signalConnectedFuture)(f=(h=this.signalConnectedFuture).reject)===null||f===void 0||f.call(h,Error("Got disconnected without signal connected")),this.signalConnectedFuture=void 0;(d=(u=this.activeAgentFuture)===null||u===void 0?void 0:u.reject)===null||d===void 0||d.call(u,Error("Got disconnected without active agent present")),this.activeAgentFuture=void 0,this.firstActiveAgent=void 0},this.handleSignalConnected=(c)=>{var i,h;if(c.participant)this.updateInfo(c.participant);if(!this.signalConnectedFuture)this.signalConnectedFuture=new yt;(h=(i=this.signalConnectedFuture).resolve)===null||h===void 0||h.call(i)},this.handleSignalRequestResponse=(c)=>{let{requestId:i,reason:h,message:f}=c,u=this.pendingSignalRequests.get(i);if(u){if(h!==Ce.OK)u.reject(new dn(f,h));this.pendingSignalRequests.delete(i)}switch(c.request.case){case"publishDataTrack":{let d;switch(c.reason){case Ce.NOT_ALLOWED:d=ot.notAllowed(c.message);break;case Ce.DUPLICATE_NAME:d=ot.duplicateName(c.message);break;case Ce.INVALID_NAME:d=ot.invalidName(c.message);break;case Ce.LIMIT_EXCEEDED:d=ot.limitReached(c.message);break;default:d=ot.unknown(c.reason,c.message);return}this.roomOutgoingDataTrackManager.receivedSfuPublishResponse(c.request.value.pubHandle,{type:"error",error:d});break}}},this.handleDataPacket=(c)=>{switch(c.value.case){case"rpcResponse":let i=c.value.value,h=null,f=null;if(i.value.case==="payload")h=i.value.value;else if(i.value.case==="error")f=_.fromProto(i.value.value);this.handleIncomingRpcResponse(i.requestId,h,f);break;case"rpcAck":let u=c.value.value;this.handleIncomingRpcAck(u.requestId);break}},this.updateTrackSubscriptionPermissions=()=>{this.log.debug("updating track subscription permissions",Object.assign(Object.assign({},this.logContext),{allParticipantsAllowed:this.allParticipantsAllowedToSubscribe,participantTrackPermissions:this.participantTrackPermissions})),this.engine.client.sendUpdateSubscriptionPermissions(this.allParticipantsAllowedToSubscribe,this.participantTrackPermissions.map((c)=>ux(c)))},this.onTrackUnmuted=(c)=>{this.onTrackMuted(c,c.isUpstreamPaused)},this.onTrackMuted=(c,i)=>{if(i===void 0)i=!0;if(!c.sid){this.log.error("could not update mute status for unpublished track",Object.assign(Object.assign({},this.logContext),Y(c)));return}this.engine.updateMuteStatus(c.sid,i)},this.onTrackUpstreamPaused=(c)=>{this.log.debug("upstream paused",Object.assign(Object.assign({},this.logContext),Y(c))),this.onTrackMuted(c,!0)},this.onTrackUpstreamResumed=(c)=>{this.log.debug("upstream resumed",Object.assign(Object.assign({},this.logContext),Y(c))),this.onTrackMuted(c,c.isMuted)},this.onTrackFeatureUpdate=(c)=>{let i=this.audioTrackPublications.get(c.sid);if(!i){this.log.warn("Could not update local audio track settings, missing publication for track ".concat(c.sid),this.logContext);return}this.engine.client.sendUpdateLocalAudioTrack(i.trackSid,i.getTrackFeatures())},this.onTrackCpuConstrained=(c,i)=>{this.log.debug("track cpu constrained",Object.assign(Object.assign({},this.logContext),Y(i))),this.emit(N.LocalTrackCpuConstrained,c,i)},this.handleSubscribedQualityUpdate=(c)=>a(this,void 0,void 0,function*(){var i,h,f,u,d;if(!((d=this.roomOptions)===null||d===void 0?void 0:d.dynacast))return;let x=this.videoTrackPublications.get(c.trackSid);if(!x){this.log.warn("received subscribed quality update for unknown track",Object.assign(Object.assign({},this.logContext),{trackSid:c.trackSid}));return}if(!x.videoTrack)return;let g=yield x.videoTrack.setPublishingCodecs(c.subscribedCodecs);try{for(var w=!0,p=Zt(g),y;y=yield p.next(),i=y.done,!i;w=!0){u=y.value,w=!1;let $=u;if(xh($))this.log.debug("publish ".concat($," for ").concat(x.videoTrack.sid),Object.assign(Object.assign({},this.logContext),Y(x))),yield this.publishAdditionalCodecForTrack(x.videoTrack,$,x.options)}}catch($){h={error:$}}finally{try{if(!w&&!i&&(f=p.return))yield f.call(p)}finally{if(h)throw h.error}}}),this.handleLocalTrackUnpublished=(c)=>{let i=this.trackPublications.get(c.trackSid);if(!i){this.log.warn("received unpublished event for unknown track",Object.assign(Object.assign({},this.logContext),{trackSid:c.trackSid}));return}this.unpublishTrack(i.track)},this.handleTrackEnded=(c)=>a(this,void 0,void 0,function*(){if(c.source===L.Source.ScreenShare||c.source===L.Source.ScreenShareAudio)this.log.debug("unpublishing local track due to TrackEnded",Object.assign(Object.assign({},this.logContext),Y(c))),this.unpublishTrack(c);else if(c.isUserProvided)yield c.mute();else if(le(c)||ae(c))try{if(Bt())try{let i=yield navigator===null||navigator===void 0?void 0:navigator.permissions.query({name:c.source===L.Source.Camera?"camera":"microphone"});if(i&&i.state==="denied")throw this.log.warn("user has revoked access to ".concat(c.source),Object.assign(Object.assign({},this.logContext),Y(c))),i.onchange=()=>{if(i.state!=="denied"){if(!c.isMuted)c.restartTrack();i.onchange=null}},Error("GetUserMedia Permission denied")}catch(i){}if(!c.isMuted)if(this.log.debug("track ended, attempting to use a different device",Object.assign(Object.assign({},this.logContext),Y(c))),le(c))yield c.restartTrack({deviceId:"default"});else yield c.restartTrack()}catch(i){this.log.warn("could not restart track, muting instead",Object.assign(Object.assign({},this.logContext),Y(c))),yield c.mute()}}),this.audioTrackPublications=new Map,this.videoTrackPublications=new Map,this.trackPublications=new Map,this.engine=l,this.roomOptions=n,this.setupEngine(l),this.activeDeviceMap=new Map([["audioinput","default"],["videoinput","default"],["audiooutput","default"]]),this.pendingSignalRequests=new Map,this.rpcHandlers=r,this.roomOutgoingDataStreamManager=o,this.roomOutgoingDataTrackManager=s}get lastCameraError(){return this.cameraError}get lastMicrophoneError(){return this.microphoneError}get isE2EEEnabled(){return this.encryptionType!==T.NONE}getTrackPublication(t){let e=super.getTrackPublication(t);if(e)return e}getTrackPublicationByName(t){let e=super.getTrackPublicationByName(t);if(e)return e}setupEngine(t){var e;if(this.engine=t,this.engine.on(B.RemoteMute,(l,n)=>{let r=this.trackPublications.get(l);if(!r||!r.track)return;if(n)r.mute();else r.unmute()}),(e=this.signalConnectedFuture)===null||e===void 0?void 0:e.isResolved)this.signalConnectedFuture=void 0;this.engine.on(B.Connected,this.handleReconnected).on(B.SignalConnected,this.handleSignalConnected).on(B.SignalRestarted,this.handleReconnected).on(B.SignalResumed,this.handleReconnected).on(B.Restarting,this.handleReconnecting).on(B.Resuming,this.handleReconnecting).on(B.LocalTrackUnpublished,this.handleLocalTrackUnpublished).on(B.SubscribedQualityUpdate,this.handleSubscribedQualityUpdate).on(B.Closing,this.handleClosing).on(B.SignalRequestResponse,this.handleSignalRequestResponse).on(B.DataPacketReceived,this.handleDataPacket)}setMetadata(t){return a(this,void 0,void 0,function*(){yield this.requestMetadataUpdate({metadata:t})})}setName(t){return a(this,void 0,void 0,function*(){yield this.requestMetadataUpdate({name:t})})}setAttributes(t){return a(this,void 0,void 0,function*(){yield this.requestMetadataUpdate({attributes:t})})}requestMetadataUpdate(t){return a(this,arguments,void 0,function(e){var l=this;let{metadata:n,name:r,attributes:o}=e;return function*(){return new ft((s,c)=>a(l,void 0,void 0,function*(){var i,h;try{let f=!1,u=yield this.engine.client.sendUpdateLocalMetadata((i=n!==null&&n!==void 0?n:this.metadata)!==null&&i!==void 0?i:"",(h=r!==null&&r!==void 0?r:this.name)!==null&&h!==void 0?h:"",o),d=performance.now();this.pendingSignalRequests.set(u,{resolve:s,reject:(x)=>{c(x),f=!0},values:{name:r,metadata:n,attributes:o}});while(performance.now()-d<5000&&!f){if((!r||this.name===r)&&(!n||this.metadata===n)&&(!o||Object.entries(o).every((x)=>{let[g,w]=x;return this.attributes[g]===w||w===""&&!this.attributes[g]}))){this.pendingSignalRequests.delete(u),s();return}yield ut(50)}c(new dn("Request to update local metadata timed out","TimeoutError"))}catch(f){if(f instanceof Error)c(f);else c(Error(String(f)))}}))}()})}setCameraEnabled(t,e,l){return this.setTrackEnabled(L.Source.Camera,t,e,l)}setMicrophoneEnabled(t,e,l){return this.setTrackEnabled(L.Source.Microphone,t,e,l)}setScreenShareEnabled(t,e,l){return this.setTrackEnabled(L.Source.ScreenShare,t,e,l)}setE2EEEnabled(t){return a(this,void 0,void 0,function*(){this.encryptionType=t?T.GCM:T.NONE,yield this.republishAllTracks(void 0,!1)})}setTrackEnabled(t,e,l,n){return a(this,void 0,void 0,function*(){var r,o;if(this.log.debug("setTrackEnabled",Object.assign(Object.assign({},this.logContext),{source:t,enabled:e})),this.republishPromise)yield this.republishPromise;let s=this.getTrackPublication(t);if(e)if(s)yield s.unmute();else{let c;if(this.pendingPublishing.has(t)){let i=yield this.waitForPendingPublicationOfSource(t);if(!i)this.log.info("waiting for pending publication promise timed out",Object.assign(Object.assign({},this.logContext),{source:t}));return yield i===null||i===void 0?void 0:i.unmute(),i}this.pendingPublishing.add(t);try{switch(t){case L.Source.Camera:c=yield this.createTracks({video:(r=l)!==null&&r!==void 0?r:!0});break;case L.Source.Microphone:c=yield this.createTracks({audio:(o=l)!==null&&o!==void 0?o:!0});break;case L.Source.ScreenShare:c=yield this.createScreenTracks(Object.assign({},l));break;default:throw new Xt(t)}}catch(i){if(c===null||c===void 0||c.forEach((h)=>{h.stop()}),i instanceof Error)this.emit(N.MediaDevicesError,i,Qr(t));throw this.pendingPublishing.delete(t),i}for(let i of c){let h=Object.assign(Object.assign({},this.roomOptions.publishDefaults),l);if(t===L.Source.Microphone&&Ft(i)&&h.preConnectBuffer)this.log.info("starting preconnect buffer for microphone",Object.assign({},this.logContext)),i.startPreConnectBuffer()}try{let i=[];for(let f of c)this.log.info("publishing track",Object.assign(Object.assign({},this.logContext),Y(f))),i.push(this.publishTrack(f,n));[s]=yield Promise.all(i)}catch(i){throw c===null||c===void 0||c.forEach((h)=>{h.stop()}),i}finally{this.pendingPublishing.delete(t)}}else{if(!(s===null||s===void 0?void 0:s.track)&&this.pendingPublishing.has(t)){if(s=yield this.waitForPendingPublicationOfSource(t),!s)this.log.info("waiting for pending publication promise timed out",Object.assign(Object.assign({},this.logContext),{source:t}))}if(s&&s.track)if(t===L.Source.ScreenShare){s=yield this.unpublishTrack(s.track);let c=this.getTrackPublication(L.Source.ScreenShareAudio);if(c&&c.track)this.unpublishTrack(c.track)}else yield s.mute()}return s})}enableCameraAndMicrophone(){return a(this,void 0,void 0,function*(){if(this.pendingPublishing.has(L.Source.Camera)||this.pendingPublishing.has(L.Source.Microphone))return;this.pendingPublishing.add(L.Source.Camera),this.pendingPublishing.add(L.Source.Microphone);try{let t=yield this.createTracks({audio:!0,video:!0});yield Promise.all(t.map((e)=>this.publishTrack(e)))}finally{this.pendingPublishing.delete(L.Source.Camera),this.pendingPublishing.delete(L.Source.Microphone)}})}createTracks(t){return a(this,void 0,void 0,function*(){var e,l;t!==null&&t!==void 0||(t={});let n=gh(t,(e=this.roomOptions)===null||e===void 0?void 0:e.audioCaptureDefaults,(l=this.roomOptions)===null||l===void 0?void 0:l.videoCaptureDefaults);try{return(yield Ol(n,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext})).map((s)=>{if(Ft(s))this.microphoneError=void 0,s.setAudioContext(this.audioContext),s.source=L.Source.Microphone,this.emit(N.AudioStreamAcquired);if(ue(s))this.cameraError=void 0,s.source=L.Source.Camera;return s})}catch(r){if(r instanceof Error){if(t.audio)this.microphoneError=r;if(t.video)this.cameraError=r}throw r}})}createScreenTracks(t){return a(this,void 0,void 0,function*(){if(t===void 0)t={};if(navigator.mediaDevices.getDisplayMedia===void 0)throw new rl("getDisplayMedia not supported");if(t.resolution===void 0&&!Ch())t.resolution=Vl.h1080fps30.resolution;let e=mh(t),l=yield navigator.mediaDevices.getDisplayMedia(e),n=l.getVideoTracks();if(n.length===0)throw new Xt("no video track found");let r=new Oe(n[0],void 0,!1,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});if(r.source=L.Source.ScreenShare,t.contentHint)r.mediaStreamTrack.contentHint=t.contentHint;let o=[r];if(l.getAudioTracks().length>0){this.emit(N.AudioStreamAcquired);let s=new ze(l.getAudioTracks()[0],void 0,!1,this.audioContext,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});s.source=L.Source.ScreenShareAudio,o.push(s)}return o})}publishTrack(t,e){return a(this,void 0,void 0,function*(){return this.publishOrRepublishTrack(t,e)})}publishOrRepublishTrack(t,e){return a(this,arguments,void 0,function(l,n){var r=this;let o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;return function*(){var s,c,i,h;if(le(l))l.setAudioContext(r.audioContext);if(yield(s=r.reconnectFuture)===null||s===void 0?void 0:s.promise,r.republishPromise&&!o)yield r.republishPromise;if(me(l)&&r.pendingPublishPromises.has(l))yield r.pendingPublishPromises.get(l);let f;if(l instanceof MediaStreamTrack)f=l.getConstraints();else{f=l.constraints;let p=void 0;switch(l.source){case L.Source.Microphone:p="audioinput";break;case L.Source.Camera:p="videoinput"}if(p&&r.activeDeviceMap.has(p))f=Object.assign(Object.assign({},f),{deviceId:r.activeDeviceMap.get(p)})}if(l instanceof MediaStreamTrack)switch(l.kind){case"audio":l=new ze(l,f,!0,r.audioContext,{loggerName:r.roomOptions.loggerName,loggerContextCb:()=>r.logContext});break;case"video":l=new Oe(l,f,!0,{loggerName:r.roomOptions.loggerName,loggerContextCb:()=>r.logContext});break;default:throw new Xt("unsupported MediaStreamTrack kind ".concat(l.kind))}else l.updateLoggerOptions({loggerName:r.roomOptions.loggerName,loggerContextCb:()=>r.logContext});let u;if(r.trackPublications.forEach((p)=>{if(!p.track)return;if(p.track===l)u=p}),u)return r.log.warn("track has already been published, skipping",Object.assign(Object.assign({},r.logContext),Y(u))),u;let d=Object.assign(Object.assign({},r.roomOptions.publishDefaults),n),x="channelCount"in l.mediaStreamTrack.getSettings()&&l.mediaStreamTrack.getSettings().channelCount===2||l.mediaStreamTrack.getConstraints().channelCount===2,g=(c=d.forceStereo)!==null&&c!==void 0?c:x;if(g){if(d.dtx===void 0)r.log.info("Opus DTX will be disabled for stereo tracks by default. Enable them explicitly to make it work.",Object.assign(Object.assign({},r.logContext),Y(l)));if(d.red===void 0)r.log.info("Opus RED will be disabled for stereo tracks by default. Enable them explicitly to make it work.");(i=d.dtx)!==null&&i!==void 0||(d.dtx=!1),(h=d.red)!==null&&h!==void 0||(d.red=!1)}if(!Da()&&r.roomOptions.e2ee)r.log.info("End-to-end encryption is set up, simulcast publishing will be disabled on Safari versions and iOS browsers running iOS < v17.2",Object.assign({},r.logContext)),d.simulcast=!1;if(d.source)l.source=d.source;let w=new Promise((p,y)=>a(r,void 0,void 0,function*(){try{if(this.engine.client.currentState!==F.CONNECTED){this.log.debug("deferring track publication until signal is connected",Object.assign(Object.assign({},this.logContext),{track:Y(l)}));let $=!1,E=setTimeout(()=>{$=!0,l.stop(),y(new un("publishing rejected as engine not connected within timeout",408))},15000);if(yield this.waitUntilEngineConnected(),clearTimeout(E),$)return;let A=yield this.publish(l,d,g);p(A)}else try{let $=yield this.publish(l,d,g);p($)}catch($){y($)}}catch($){y($)}}));r.pendingPublishPromises.set(l,w);try{return yield w}catch(p){throw p}finally{r.pendingPublishPromises.delete(l)}}()})}waitUntilEngineConnected(){if(!this.signalConnectedFuture)this.signalConnectedFuture=new yt;return this.signalConnectedFuture.promise}hasPermissionsToPublish(t){if(!this.permissions)return this.log.warn("no permissions present for publishing track",Object.assign(Object.assign({},this.logContext),Y(t))),!1;let{canPublish:e,canPublishSources:l}=this.permissions;if(e&&(l.length===0||l.map((n)=>Na(n)).includes(t.source)))return!0;return this.log.warn("insufficient permissions to publish",Object.assign(Object.assign({},this.logContext),Y(t))),!1}publish(t,e,l){return a(this,void 0,void 0,function*(){var n,r,o,s,c,i,h,f,u,d;if(!this.hasPermissionsToPublish(t))throw new un("failed to publish track, insufficient permissions",403);if(Array.from(this.trackPublications.values()).find((H)=>me(t)&&H.source===t.source)&&t.source!==L.Source.Unknown)this.log.info("publishing a second track with the same source: ".concat(t.source),Object.assign(Object.assign({},this.logContext),Y(t)));if(e.stopMicTrackOnMute&&Ft(t))t.stopOnMute=!0;if(t.source===L.Source.ScreenShare&&Xe())e.simulcast=!1;if(e.videoCodec==="av1"&&!Ah())e.videoCodec=void 0;if(e.videoCodec==="vp9"&&!ph())e.videoCodec=void 0;if(e.videoCodec===void 0)e.videoCodec=Pr;if(this.enabledPublishVideoCodecs.length>0){if(!this.enabledPublishVideoCodecs.some((H)=>e.videoCodec===wl(H.mime)))e.videoCodec=wl(this.enabledPublishVideoCodecs[0].mime)}let g=e.videoCodec;t.on(W.Muted,this.onTrackMuted),t.on(W.Unmuted,this.onTrackUnmuted),t.on(W.Ended,this.handleTrackEnded),t.on(W.UpstreamPaused,this.onTrackUpstreamPaused),t.on(W.UpstreamResumed,this.onTrackUpstreamResumed),t.on(W.AudioTrackFeatureUpdate,this.onTrackFeatureUpdate);let w=[],p=!((n=e.dtx)!==null&&n!==void 0?n:!0),y=t.getSourceTrackSettings();if(y.autoGainControl)w.push(it.TF_AUTO_GAIN_CONTROL);if(y.echoCancellation)w.push(it.TF_ECHO_CANCELLATION);if(y.noiseSuppression)w.push(it.TF_NOISE_SUPPRESSION);if(y.channelCount&&y.channelCount>1)w.push(it.TF_STEREO);if(p)w.push(it.TF_NO_DTX);if(le(t)&&t.hasPreConnectBuffer)w.push(it.TF_PRECONNECT_BUFFER);let $=new Cl({cid:t.mediaStreamTrack.id,name:e.name,type:L.kindToProto(t.kind),muted:t.isMuted,source:L.sourceToProto(t.source),disableDtx:p,encryption:this.encryptionType,stereo:l,disableRed:this.isE2EEEnabled||!((r=e.red)!==null&&r!==void 0?r:!0),stream:e===null||e===void 0?void 0:e.stream,backupCodecPolicy:e===null||e===void 0?void 0:e.backupCodecPolicy,audioFeatures:w}),E;if(t.kind===L.Kind.Video){let H={width:0,height:0};try{H=yield t.waitForDimensions()}catch(z){let V=(s=(o=this.roomOptions.videoCaptureDefaults)===null||o===void 0?void 0:o.resolution)!==null&&s!==void 0?s:ve.h720.resolution;H={width:V.width,height:V.height},this.log.error("could not determine track dimensions, using defaults",Object.assign(Object.assign(Object.assign({},this.logContext),Y(t)),{dims:H}))}if($.width=H.width,$.height=H.height,ae(t)){if(Kt(g)){if(t.source===L.Source.ScreenShare){if(e.scalabilityMode="L1T3","contentHint"in t.mediaStreamTrack)t.mediaStreamTrack.contentHint="motion",this.log.info("forcing contentHint to motion for screenshare with SVC codecs",Object.assign(Object.assign({},this.logContext),Y(t)))}e.scalabilityMode=(c=e.scalabilityMode)!==null&&c!==void 0?c:"L3T3_KEY"}if($.simulcastCodecs=[new Rr({codec:g,cid:t.mediaStreamTrack.id})],e.backupCodec===!0)e.backupCodec={codec:Pr};if(e.backupCodec&&g!==e.backupCodec.codec&&$.encryption===T.NONE){if(!this.roomOptions.dynacast)this.roomOptions.dynacast=!0;$.simulcastCodecs.push(new Rr({codec:e.backupCodec.codec,cid:""}))}}E=_r(t.source===L.Source.ScreenShare,$.width,$.height,e),$.layers=hi($.width,$.height,E,Kt(e.videoCodec))}else if(t.kind===L.Kind.Audio)E=[{maxBitrate:(i=e.audioPreset)===null||i===void 0?void 0:i.maxBitrate,priority:(f=(h=e.audioPreset)===null||h===void 0?void 0:h.priority)!==null&&f!==void 0?f:"high",networkPriority:(d=(u=e.audioPreset)===null||u===void 0?void 0:u.priority)!==null&&d!==void 0?d:"high"}];if(!this.engine||this.engine.isClosed)throw new U("cannot publish track when not connected");let A=()=>a(this,void 0,void 0,function*(){var H,z,V;if(!this.engine.pcManager)throw new U("pcManager is not ready");if(t.sender=yield this.engine.createSender(t,e,E),this.emit(N.LocalSenderCreated,t.sender,t),ae(t))(H=e.degradationPreference)!==null&&H!==void 0||(e.degradationPreference=Tb(t)),t.setDegradationPreference(e.degradationPreference);if(E){if(Xe()&&t.kind===L.Kind.Audio){let X=void 0;for(let S of this.engine.pcManager.publisher.getTransceivers())if(S.sender===t.sender){X=S;break}if(X)this.engine.pcManager.publisher.setTrackCodecBitrate({transceiver:X,codec:"opus",maxbr:((z=E[0])===null||z===void 0?void 0:z.maxBitrate)?E[0].maxBitrate/1000:0})}else if(t.codec&&Kt(t.codec)&&((V=E[0])===null||V===void 0?void 0:V.maxBitrate))this.engine.pcManager.publisher.setTrackCodecBitrate({cid:$.cid,codec:t.codec,maxbr:E[0].maxBitrate/1000})}yield this.engine.negotiate()}),m,R=new Promise((H,z)=>a(this,void 0,void 0,function*(){var V;try{m=yield this.engine.addTrack($),H(m)}catch(X){if(t.sender&&((V=this.engine.pcManager)===null||V===void 0?void 0:V.publisher))this.engine.pcManager.publisher.removeTrack(t.sender),yield this.engine.negotiate().catch((S)=>{this.log.error("failed to negotiate after removing track due to failed add track request",Object.assign(Object.assign(Object.assign({},this.logContext),Y(t)),{error:S}))});z(X)}}));if(this.enabledPublishVideoCodecs.length>0)m=(yield Promise.all([R,A()]))[0];else{m=yield R;let H;if(m.codecs.forEach((z)=>{if(H===void 0)H=z.mimeType}),H&&t.kind===L.Kind.Video){let z=wl(H);if(z!==g)this.log.debug("falling back to server selected codec",Object.assign(Object.assign(Object.assign({},this.logContext),Y(t)),{codec:z})),e.videoCodec=z,E=_r(t.source===L.Source.ScreenShare,$.width,$.height,e)}yield A()}let M=new Ml(t.kind,m,t,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});if(M.on(W.CpuConstrained,(H)=>this.onTrackCpuConstrained(H,M)),M.options=e,t.sid=m.sid,this.log.debug("publishing ".concat(t.kind," with encodings"),Object.assign(Object.assign({},this.logContext),{encodings:E,trackInfo:m})),ae(t))t.startMonitor(this.engine.client);else if(le(t))t.startMonitor();if(this.addTrackPublication(M),this.emit(N.LocalTrackPublished,M),le(t)&&m.audioFeatures.includes(it.TF_PRECONNECT_BUFFER)){let H=t.getPreConnectBuffer(),z=t.getPreConnectBufferMimeType();if(this.on(N.LocalTrackSubscribed,(V)=>{if(V.trackSid===m.sid){if(!t.hasPreConnectBuffer){this.log.warn("subscribe event came to late, buffer already closed",this.logContext);return}this.log.debug("finished recording preconnect buffer",Object.assign(Object.assign({},this.logContext),Y(t))),t.stopPreConnectBuffer()}}),H)new Promise((X,S)=>a(this,void 0,void 0,function*(){var nt,Rt,Ye,xt,vt,Zn;try{this.log.debug("waiting for agent",Object.assign(Object.assign({},this.logContext),Y(t)));let Tn=setTimeout(()=>{S(Error("agent not active within 10 seconds"))},1e4),kf=yield this.waitUntilActiveAgentPresent();clearTimeout(Tn),this.log.debug("sending preconnect buffer",Object.assign(Object.assign({},this.logContext),Y(t)));let vo=yield this.streamBytes({name:"preconnect-buffer",mimeType:z,topic:"lk.agent.pre-connect-audio-buffer",destinationIdentities:[kf.identity],attributes:{trackId:M.trackSid,sampleRate:String((vt=y.sampleRate)!==null&&vt!==void 0?vt:"48000"),channels:String((Zn=y.channelCount)!==null&&Zn!==void 0?Zn:"1")}});try{for(var Kn=!0,jn=Zt(H),qn;qn=yield jn.next(),nt=qn.done,!nt;Kn=!0){xt=qn.value,Kn=!1;let Fn=xt;yield vo.write(Fn)}}catch(Fn){Rt={error:Fn}}finally{try{if(!Kn&&!nt&&(Ye=jn.return))yield Ye.call(jn)}finally{if(Rt)throw Rt.error}}yield vo.close(),X()}catch(Tn){S(Tn)}})).then(()=>{this.log.debug("preconnect buffer sent successfully",Object.assign(Object.assign({},this.logContext),Y(t)))}).catch((X)=>{this.log.error("error sending preconnect buffer",Object.assign(Object.assign(Object.assign({},this.logContext),Y(t)),{error:X}))})}return M})}get isLocal(){return!0}publishAdditionalCodecForTrack(t,e,l){return a(this,void 0,void 0,function*(){var n;if(this.encryptionType!==T.NONE)return;let r;if(this.trackPublications.forEach((d)=>{if(!d.track)return;if(d.track===t)r=d}),!r)throw new Xt("track is not published");if(!ae(t))throw new Xt("track is not a video track");let o=Object.assign(Object.assign({},(n=this.roomOptions)===null||n===void 0?void 0:n.publishDefaults),l),s=Kb(t,e,o);if(!s){this.log.info("backup codec has been disabled, ignoring request to add additional codec for track",Object.assign(Object.assign({},this.logContext),Y(t)));return}let c=t.addSimulcastTrack(e,s);if(!c)return;let i=new Cl({cid:c.mediaStreamTrack.id,type:L.kindToProto(t.kind),muted:t.isMuted,source:L.sourceToProto(t.source),sid:t.sid,simulcastCodecs:[{codec:o.videoCodec,cid:c.mediaStreamTrack.id}]});if(i.layers=hi(i.width,i.height,s),!this.engine||this.engine.isClosed)throw new U("cannot publish track when not connected");let h=()=>a(this,void 0,void 0,function*(){yield this.engine.createSimulcastSender(t,c,o,s),yield this.engine.negotiate()}),u=(yield Promise.all([this.engine.addTrack(i),h()]))[0];this.log.debug("published ".concat(e," for track ").concat(t.sid),Object.assign(Object.assign({},this.logContext),{encodings:s,trackInfo:u}))})}unpublishTrack(t,e){return a(this,void 0,void 0,function*(){var l,n;if(me(t)){let i=this.pendingPublishPromises.get(t);if(i)this.log.info("awaiting publish promise before attempting to unpublish",Object.assign(Object.assign({},this.logContext),Y(t))),yield i}let r=this.getPublicationForTrack(t),o=r?Y(r):void 0;if(this.log.debug("unpublishing track",Object.assign(Object.assign({},this.logContext),o)),!r||!r.track){this.log.warn("track was not unpublished because no publication was found",Object.assign(Object.assign({},this.logContext),o));return}if(t=r.track,t.off(W.Muted,this.onTrackMuted),t.off(W.Unmuted,this.onTrackUnmuted),t.off(W.Ended,this.handleTrackEnded),t.off(W.UpstreamPaused,this.onTrackUpstreamPaused),t.off(W.UpstreamResumed,this.onTrackUpstreamResumed),t.off(W.AudioTrackFeatureUpdate,this.onTrackFeatureUpdate),e===void 0)e=(n=(l=this.roomOptions)===null||l===void 0?void 0:l.stopLocalTrackOnUnpublish)!==null&&n!==void 0?n:!0;if(e)t.stop();else t.stopMonitor();let s=!1,c=t.sender;if(t.sender=void 0,this.engine.pcManager&&this.engine.pcManager.currentState<J.FAILED&&c)try{for(let i of this.engine.pcManager.publisher.getTransceivers())if(i.sender===c)i.direction="inactive",s=!0;if(this.engine.removeTrack(c))s=!0;if(ae(t)){for(let[,i]of t.simulcastCodecs)if(i.sender){if(this.engine.removeTrack(i.sender))s=!0;i.sender=void 0}t.simulcastCodecs.clear()}}catch(i){this.log.warn("failed to unpublish track",Object.assign(Object.assign(Object.assign({},this.logContext),o),{error:i}))}switch(this.trackPublications.delete(r.trackSid),r.kind){case L.Kind.Audio:this.audioTrackPublications.delete(r.trackSid);break;case L.Kind.Video:this.videoTrackPublications.delete(r.trackSid);break}if(this.emit(N.LocalTrackUnpublished,r),r.setTrack(void 0),s)yield this.engine.negotiate();return r})}unpublishTracks(t){return a(this,void 0,void 0,function*(){return(yield Promise.all(t.map((l)=>this.unpublishTrack(l)))).filter((l)=>!!l)})}republishAllTracks(t){return a(this,arguments,void 0,function(e){var l=this;let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return function*(){if(l.republishPromise)yield l.republishPromise;l.republishPromise=new ft((r,o)=>a(l,void 0,void 0,function*(){try{let s=[];this.trackPublications.forEach((c)=>{if(c.track){if(e)c.options=Object.assign(Object.assign({},c.options),e);s.push(c)}}),yield Promise.all(s.map((c)=>a(this,void 0,void 0,function*(){let i=c.track;if(yield this.unpublishTrack(i,!1),n&&!i.isMuted&&i.source!==L.Source.ScreenShare&&i.source!==L.Source.ScreenShareAudio&&(le(i)||ae(i))&&!i.isUserProvided)this.log.debug("restarting existing track",Object.assign(Object.assign({},this.logContext),{track:c.trackSid})),yield i.restartTrack();yield this.publishOrRepublishTrack(i,c.options,!0)}))),r()}catch(s){if(s instanceof Error)o(s);else o(Error(String(s)))}finally{this.republishPromise=void 0}})),yield l.republishPromise}()})}publishData(t){return a(this,arguments,void 0,function(e){var l=this;let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return function*(){let r=n.reliable?D.RELIABLE:D.LOSSY,o=n.reliable?xe.RELIABLE:xe.LOSSY,s=n.destinationIdentities,c=n.topic,i=new oo({participantIdentity:l.identity,payload:e,destinationIdentities:s,topic:c}),h=new wt({kind:o,value:{case:"user",value:i}});yield l.engine.sendDataPacket(h,r)}()})}publishDtmf(t,e){return a(this,void 0,void 0,function*(){let l=new wt({kind:xe.RELIABLE,value:{case:"sipDtmf",value:new ec({code:t,digit:e})}});yield this.engine.sendDataPacket(l,D.RELIABLE)})}sendChatMessage(t,e){return a(this,void 0,void 0,function*(){let l={id:crypto.randomUUID(),message:t,timestamp:Date.now(),attachedFiles:e===null||e===void 0?void 0:e.attachments},n=new wt({value:{case:"chatMessage",value:new on(Object.assign(Object.assign({},l),{timestamp:P.parse(l.timestamp)}))}});return yield this.engine.sendDataPacket(n,D.RELIABLE),this.emit(N.ChatMessage,l),l})}editChatMessage(t,e){return a(this,void 0,void 0,function*(){let l=Object.assign(Object.assign({},e),{message:t,editTimestamp:Date.now()}),n=new wt({value:{case:"chatMessage",value:new on(Object.assign(Object.assign({},l),{timestamp:P.parse(l.timestamp),editTimestamp:P.parse(l.editTimestamp)}))}});return yield this.engine.sendDataPacket(n,D.RELIABLE),this.emit(N.ChatMessage,l),l})}sendText(t,e){return a(this,void 0,void 0,function*(){return this.roomOutgoingDataStreamManager.sendText(t,e)})}streamText(t){return a(this,void 0,void 0,function*(){return this.roomOutgoingDataStreamManager.streamText(t)})}sendFile(t,e){return a(this,void 0,void 0,function*(){return this.roomOutgoingDataStreamManager.sendFile(t,e)})}streamBytes(t){return a(this,void 0,void 0,function*(){return this.roomOutgoingDataStreamManager.streamBytes(t)})}performRpc(t){let{destinationIdentity:e,method:l,payload:n,responseTimeout:r=15000}=t,o=7000,s=8000;return new ft((c,i)=>a(this,void 0,void 0,function*(){var h,f,u,d;if(Eo(n)>kh){i(_.builtIn("REQUEST_PAYLOAD_TOO_LARGE"));return}if(((f=(h=this.engine.latestJoinResponse)===null||h===void 0?void 0:h.serverInfo)===null||f===void 0?void 0:f.version)&&kt((d=(u=this.engine.latestJoinResponse)===null||u===void 0?void 0:u.serverInfo)===null||d===void 0?void 0:d.version,"1.8.0")<0){i(_.builtIn("UNSUPPORTED_SERVER"));return}let x=Math.max(r,8000),g=crypto.randomUUID();yield this.publishRpcRequest(e,g,l,n,x);let w=setTimeout(()=>{this.pendingAcks.delete(g),i(_.builtIn("CONNECTION_TIMEOUT")),this.pendingResponses.delete(g),clearTimeout(p)},7000);this.pendingAcks.set(g,{resolve:()=>{clearTimeout(w)},participantIdentity:e});let p=setTimeout(()=>{this.pendingResponses.delete(g),i(_.builtIn("RESPONSE_TIMEOUT"))},r);this.pendingResponses.set(g,{resolve:(y,$)=>{if(clearTimeout(p),this.pendingAcks.has(g))this.log.warn("RPC response received before ack",g),this.pendingAcks.delete(g),clearTimeout(w);if($)i($);else c(y!==null&&y!==void 0?y:"")},participantIdentity:e})}))}registerRpcMethod(t,e){if(this.rpcHandlers.has(t))this.log.warn("you're overriding the RPC handler for method ".concat(t,", in the future this will throw an error"));this.rpcHandlers.set(t,e)}unregisterRpcMethod(t){this.rpcHandlers.delete(t)}setTrackSubscriptionPermissions(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[];if(this.participantTrackPermissions=e,this.allParticipantsAllowedToSubscribe=t,!this.engine.client.isDisconnected)this.updateTrackSubscriptionPermissions()}handleIncomingRpcAck(t){let e=this.pendingAcks.get(t);if(e)e.resolve(),this.pendingAcks.delete(t);else console.error("Ack received for unexpected RPC request",t)}handleIncomingRpcResponse(t,e,l){let n=this.pendingResponses.get(t);if(n)n.resolve(e,l),this.pendingResponses.delete(t);else console.error("Response received for unexpected RPC request",t)}publishRpcRequest(t,e,l,n,r){return a(this,void 0,void 0,function*(){let o=new wt({destinationIdentities:[t],kind:xe.RELIABLE,value:{case:"rpcRequest",value:new so({id:e,method:l,payload:n,responseTimeoutMs:r,version:1})}});yield this.engine.sendDataPacket(o,D.RELIABLE)})}handleParticipantDisconnected(t){for(let[e,{participantIdentity:l}]of this.pendingAcks)if(l===t)this.pendingAcks.delete(e);for(let[e,{participantIdentity:l,resolve:n}]of this.pendingResponses)if(l===t)n(null,_.builtIn("RECIPIENT_DISCONNECTED")),this.pendingResponses.delete(e)}setEnabledPublishCodecs(t){this.enabledPublishVideoCodecs=t.filter((e)=>e.mime.split("/")[0].toLowerCase()==="video")}updateInfo(t){if(!super.updateInfo(t))return!1;return t.tracks.forEach((e)=>{var l,n;let r=this.trackPublications.get(e.sid);if(r){let o=r.isMuted||((n=(l=r.track)===null||l===void 0?void 0:l.isUpstreamPaused)!==null&&n!==void 0?n:!1);if(o!==e.muted)this.log.debug("updating server mute state after reconcile",Object.assign(Object.assign(Object.assign({},this.logContext),Y(r)),{mutedOnServer:o})),this.engine.client.sendMuteTrack(e.sid,o)}}),!0}setActiveAgent(t){var e,l,n,r;if(this.firstActiveAgent=t,t&&!this.firstActiveAgent)this.firstActiveAgent=t;if(t)(l=(e=this.activeAgentFuture)===null||e===void 0?void 0:e.resolve)===null||l===void 0||l.call(e,t);else(r=(n=this.activeAgentFuture)===null||n===void 0?void 0:n.reject)===null||r===void 0||r.call(n,Error("Agent disconnected"));this.activeAgentFuture=void 0}waitUntilActiveAgentPresent(){if(this.firstActiveAgent)return Promise.resolve(this.firstActiveAgent);if(!this.activeAgentFuture)this.activeAgentFuture=new yt;return this.activeAgentFuture.promise}getPublicationForTrack(t){let e;return this.trackPublications.forEach((l)=>{let n=l.track;if(!n)return;if(t instanceof MediaStreamTrack){if(le(n)||ae(n)){if(n.mediaStreamTrack===t)e=l}}else if(t===n)e=l}),e}waitForPendingPublicationOfSource(t){return a(this,void 0,void 0,function*(){let l=Date.now();while(Date.now()<l+1e4){let n=Array.from(this.pendingPublishPromises.entries()).find((r)=>{let[o]=r;return o.source===t});if(n)return n[1];yield ut(20)}})}publishDataTrack(t){return a(this,void 0,void 0,function*(){let e=new zl(t,this.roomOutgoingDataTrackManager);return yield e.publish(),e})}};to=class to extends DOMException{constructor(t,e){super(t,"AbortError");this.reason=e}};xf=class xf extends Map{constructor(){super(...arguments);this.pending=new Map}set(t,e){var l;super.set(t,e);let n=this.pending.get(t);if(n){for(let r of n)if(!r.isResolved)(l=r.resolve)===null||l===void 0||l.call(r,e);this.pending.delete(t)}return this}get[Symbol.toStringTag](){return"WaitableMap"}getDeferred(t,e){return a(this,void 0,void 0,function*(){let l=this.get(t);if(typeof l<"u")return l;if(e===null||e===void 0?void 0:e.aborted)throw new to("The operation was aborted.",e.reason);let n=new yt(void 0,()=>{let o=this.pending.get(t);if(!o)return;let s=o.indexOf(n);if(s!==-1)o.splice(s,1);if(o.length===0)this.pending.delete(t)}),r=this.pending.get(t);if(r)r.push(n);else this.pending.set(t,[n]);if(e){let o=()=>{var s;if(!n.isResolved)(s=n.reject)===null||s===void 0||s.call(n,new to("The operation was aborted.",e.reason))};e.addEventListener("abort",o,{once:!0}),n.promise.finally(()=>{e.removeEventListener("abort",o)})}return n.promise})}};To=class To extends Qt{constructor(t,e,l,n){super(t,e.sid,e.name,n);this.track=void 0,this.allowed=!0,this.requestedDisabled=void 0,this.visible=!0,this.handleEnded=(r)=>{this.setTrack(void 0),this.emit(W.Ended,r)},this.handleVisibilityChange=(r)=>{this.log.debug("adaptivestream video visibility ".concat(this.trackSid,", visible=").concat(r),this.logContext),this.visible=r,this.emitTrackUpdate()},this.handleVideoDimensionsChange=(r)=>{this.log.debug("adaptivestream video dimensions ".concat(r.width,"x").concat(r.height),this.logContext),this.videoDimensionsAdaptiveStream=r,this.emitTrackUpdate()},this.subscribed=l,this.updateInfo(e)}setSubscribed(t){let e=this.subscriptionStatus,l=this.permissionStatus;if(this.subscribed=t,t)this.allowed=!0;let n=new Rn({trackSids:[this.trackSid],subscribe:this.subscribed,participantTracks:[new nc({participantSid:"",trackSids:[this.trackSid]})]});this.emit(W.UpdateSubscription,n),this.emitSubscriptionUpdateIfChanged(e),this.emitPermissionUpdateIfChanged(l)}get subscriptionStatus(){if(this.subscribed===!1)return Qt.SubscriptionStatus.Unsubscribed;if(!super.isSubscribed)return Qt.SubscriptionStatus.Desired;return Qt.SubscriptionStatus.Subscribed}get permissionStatus(){return this.allowed?Qt.PermissionStatus.Allowed:Qt.PermissionStatus.NotAllowed}get isSubscribed(){if(this.subscribed===!1)return!1;return super.isSubscribed}get isDesired(){return this.subscribed!==!1}get isEnabled(){return this.requestedDisabled!==void 0?!this.requestedDisabled:this.isAdaptiveStream?this.visible:!0}get isLocal(){return!1}setEnabled(t){if(!this.isManualOperationAllowed()||this.requestedDisabled===!t)return;this.requestedDisabled=!t,this.emitTrackUpdate()}setVideoQuality(t){if(!this.isManualOperationAllowed()||this.requestedMaxQuality===t)return;this.requestedMaxQuality=t,this.requestedVideoDimensions=void 0,this.emitTrackUpdate()}setVideoDimensions(t){var e,l;if(!this.isManualOperationAllowed())return;if(((e=this.requestedVideoDimensions)===null||e===void 0?void 0:e.width)===t.width&&((l=this.requestedVideoDimensions)===null||l===void 0?void 0:l.height)===t.height)return;if(dr(this.track))this.requestedVideoDimensions=t;this.requestedMaxQuality=void 0,this.emitTrackUpdate()}setVideoFPS(t){if(!this.isManualOperationAllowed())return;if(!dr(this.track))return;if(this.fps===t)return;this.fps=t,this.emitTrackUpdate()}get videoQuality(){var t;return(t=this.requestedMaxQuality)!==null&&t!==void 0?t:It.HIGH}setTrack(t){let e=this.subscriptionStatus,l=this.permissionStatus,n=this.track;if(n===t)return;if(n)n.off(W.VideoDimensionsChanged,this.handleVideoDimensionsChange),n.off(W.VisibilityChanged,this.handleVisibilityChange),n.off(W.Ended,this.handleEnded),n.detach(),n.stopMonitor(),this.emit(W.Unsubscribed,n);if(super.setTrack(t),t)t.sid=this.trackSid,t.on(W.VideoDimensionsChanged,this.handleVideoDimensionsChange),t.on(W.VisibilityChanged,this.handleVisibilityChange),t.on(W.Ended,this.handleEnded),this.emit(W.Subscribed,t);this.emitPermissionUpdateIfChanged(l),this.emitSubscriptionUpdateIfChanged(e)}setAllowed(t){let e=this.subscriptionStatus,l=this.permissionStatus;this.allowed=t,this.emitPermissionUpdateIfChanged(l),this.emitSubscriptionUpdateIfChanged(e)}setSubscriptionError(t){this.emit(W.SubscriptionFailed,t)}updateInfo(t){super.updateInfo(t);let e=this.metadataMuted;if(this.metadataMuted=t.muted,this.track)this.track.setMuted(t.muted);else if(e!==t.muted)this.emit(t.muted?W.Muted:W.Unmuted)}emitSubscriptionUpdateIfChanged(t){let e=this.subscriptionStatus;if(t===e)return;this.emit(W.SubscriptionStatusChanged,e,t)}emitPermissionUpdateIfChanged(t){if(this.permissionStatus!==t)this.emit(W.SubscriptionPermissionChanged,this.permissionStatus,t)}isManualOperationAllowed(){if(!this.isDesired)return this.log.warn("cannot update track settings when not subscribed",this.logContext),!1;return!0}get isAdaptiveStream(){return dr(this.track)&&this.track.isAdaptiveStream}emitTrackUpdate(){let t=new bc({trackSids:[this.trackSid],disabled:!this.isEnabled,fps:this.fps});if(this.kind===L.Kind.Video){let e=this.requestedVideoDimensions;if(this.videoDimensionsAdaptiveStream!==void 0)if(e){if(js(this.videoDimensionsAdaptiveStream,e))this.log.debug("using adaptive stream dimensions instead of requested",Object.assign(Object.assign({},this.logContext),this.videoDimensionsAdaptiveStream)),e=this.videoDimensionsAdaptiveStream}else if(this.requestedMaxQuality!==void 0&&this.trackInfo){let l=Ma(this.trackInfo,this.requestedMaxQuality);if(l&&js(this.videoDimensionsAdaptiveStream,l))this.log.debug("using adaptive stream dimensions instead of max quality layer",Object.assign(Object.assign({},this.logContext),this.videoDimensionsAdaptiveStream)),e=this.videoDimensionsAdaptiveStream}else this.log.debug("using adaptive stream dimensions",Object.assign(Object.assign({},this.logContext),this.videoDimensionsAdaptiveStream)),e=this.videoDimensionsAdaptiveStream;if(e)t.width=Math.ceil(e.width),t.height=Math.ceil(e.height);else if(this.requestedMaxQuality!==void 0)this.log.debug("using requested max quality",Object.assign(Object.assign({},this.logContext),{quality:this.requestedMaxQuality})),t.quality=this.requestedMaxQuality;else this.log.debug("using default quality",Object.assign(Object.assign({},this.logContext),{quality:It.HIGH})),t.quality=It.HIGH}this.emit(W.UpdateSettings,t)}};Hl=class Hl extends Qn{static fromParticipantInfo(t,e,l){return new Hl(t,e.sid,e.identity,e.name,e.metadata,e.attributes,l,e.kind)}get logContext(){return Object.assign(Object.assign({},super.logContext),{remoteParticipantID:this.sid,remoteParticipant:this.identity})}constructor(t,e,l,n,r,o,s){let c=arguments.length>7&&arguments[7]!==void 0?arguments[7]:Ue.STANDARD;super(e,l||"",n,r,o,s,c);this.signalClient=t,this.trackPublications=new Map,this.audioTrackPublications=new Map,this.videoTrackPublications=new Map,this.dataTracks=new xf,this.volumeMap=new Map}addTrackPublication(t){super.addTrackPublication(t),t.on(W.UpdateSettings,(e)=>{this.log.debug("send update settings",Object.assign(Object.assign(Object.assign({},this.logContext),Y(t)),{settings:e})),this.signalClient.sendUpdateTrackSettings(e)}),t.on(W.UpdateSubscription,(e)=>{e.participantTracks.forEach((l)=>{l.participantSid=this.sid}),this.signalClient.sendUpdateSubscription(e)}),t.on(W.SubscriptionPermissionChanged,(e)=>{this.emit(N.TrackSubscriptionPermissionChanged,t,e)}),t.on(W.SubscriptionStatusChanged,(e)=>{this.emit(N.TrackSubscriptionStatusChanged,t,e)}),t.on(W.Subscribed,(e)=>{this.emit(N.TrackSubscribed,e,t)}),t.on(W.Unsubscribed,(e)=>{this.emit(N.TrackUnsubscribed,e,t)}),t.on(W.SubscriptionFailed,(e)=>{this.emit(N.TrackSubscriptionFailed,t.trackSid,e)})}getTrackPublication(t){let e=super.getTrackPublication(t);if(e)return e}getTrackPublicationByName(t){let e=super.getTrackPublicationByName(t);if(e)return e}setVolume(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:L.Source.Microphone;this.volumeMap.set(e,t);let l=this.getTrackPublication(e);if(l&&l.track)l.track.setVolume(t)}getVolume(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:L.Source.Microphone,e=this.getTrackPublication(t);if(e&&e.track)return e.track.getVolume();return this.volumeMap.get(t)}addSubscribedMediaTrack(t,e,l,n,r,o){let s=this.getTrackPublicationBySid(e);if(!s){if(!e.startsWith("TR"))this.trackPublications.forEach((h)=>{if(!s&&t.kind===h.kind.toString())s=h})}if(!s){if(o===0){this.log.error("could not find published track",Object.assign(Object.assign({},this.logContext),{trackSid:e})),this.emit(N.TrackSubscriptionFailed,e);return}if(o===void 0)o=20;setTimeout(()=>{this.addSubscribedMediaTrack(t,e,l,n,r,o-1)},150);return}if(t.readyState==="ended"){this.log.error("unable to subscribe because MediaStreamTrack is ended. Do not call MediaStreamTrack.stop()",Object.assign(Object.assign({},this.logContext),Y(s))),this.emit(N.TrackSubscriptionFailed,e);return}let c=t.kind==="video",i;if(c)i=new jo(t,e,n,r);else i=new Ko(t,e,n,this.audioContext,this.audioOutput);if(i.source=s.source,i.isMuted=s.isMuted,i.setMediaStream(l),i.start(),s.setTrack(i),this.volumeMap.has(s.source)&&wn(i)&&Ft(i))i.setVolume(this.volumeMap.get(s.source));return s}get hasMetadata(){return!!this.participantInfo}getTrackPublicationBySid(t){return this.trackPublications.get(t)}updateInfo(t){if(!super.updateInfo(t))return!1;let e=new Map,l=new Map;return t.tracks.forEach((n)=>{var r,o;let s=this.getTrackPublicationBySid(n.sid);if(!s){let c=L.kindFromProto(n.type);if(!c)return;s=new To(c,n,(r=this.signalClient.connectOptions)===null||r===void 0?void 0:r.autoSubscribe,{loggerContextCb:()=>this.logContext,loggerName:(o=this.loggerOptions)===null||o===void 0?void 0:o.loggerName}),s.updateInfo(n),l.set(n.sid,s);let i=Array.from(this.trackPublications.values()).find((h)=>h.source===(s===null||s===void 0?void 0:s.source));if(i&&s.source!==L.Source.Unknown)this.log.debug("received a second track publication for ".concat(this.identity," with the same source: ").concat(s.source),Object.assign(Object.assign({},this.logContext),{oldTrack:Y(i),newTrack:Y(s)}));this.addTrackPublication(s)}else s.updateInfo(n);e.set(n.sid,s)}),this.trackPublications.forEach((n)=>{if(!e.has(n.trackSid))this.log.trace("detected removed track on remote participant, unpublishing",Object.assign(Object.assign({},this.logContext),Y(n))),this.unpublishTrack(n.trackSid,!0)}),l.forEach((n)=>{this.emit(N.TrackPublished,n)}),!0}unpublishTrack(t,e){let l=this.trackPublications.get(t);if(!l)return;let{track:n}=l;if(n)n.stop(),l.setTrack(void 0);switch(this.trackPublications.delete(t),l.kind){case L.Kind.Audio:this.audioTrackPublications.delete(t);break;case L.Kind.Video:this.videoTrackPublications.delete(t);break}if(e)this.emit(N.TrackUnpublished,l)}setAudioOutput(t){return a(this,void 0,void 0,function*(){this.audioOutput=t;let e=[];this.audioTrackPublications.forEach((l)=>{var n;if(Ft(l.track)&&wn(l.track))e.push(l.track.setSinkId((n=t.deviceId)!==null&&n!==void 0?n:"default"))}),yield Promise.all(e)})}addRemoteDataTrack(t){this.dataTracks.set(t.info.name,t)}removeRemoteDataTrack(t){for(let[e,l]of this.dataTracks.entries())if(t===l.info.sid)this.dataTracks.delete(e)}emit(t){for(var e=arguments.length,l=Array(e>1?e-1:0),n=1;n<e;n++)l[n-1]=arguments[n];return this.log.trace("participant event",Object.assign(Object.assign({},this.logContext),{event:t,args:l})),super.emit(t,...l)}};(function(t){t.Disconnected="disconnected",t.Connecting="connecting",t.Connected="connected",t.Reconnecting="reconnecting",t.SignalReconnecting="signalReconnecting"})(K||(K={}));nl=class nl extends zt.EventEmitter{get hasE2EESetup(){return this.e2eeManager!==void 0}constructor(t){var e,l,n,r,o,s,c;super();if(e=this,this.state=K.Disconnected,this.activeSpeakers=[],this.isE2EEEnabled=!1,this.audioEnabled=!0,this.isVideoPlaybackBlocked=!1,this.log=O,this.bufferedEvents=[],this.isResuming=!1,this.rpcHandlers=new Map,this.connect=(i,h,f)=>a(this,void 0,void 0,function*(){var u;if(!Lh())if(Jt())throw Error("WebRTC isn't detected, have you called registerGlobals?");else throw Error("LiveKit doesn't seem to be supported on this browser. Try to update your browser and make sure no browser extensions are disabling webRTC.");let d=yield this.disconnectLock.lock();if(this.state===K.Connected)return this.log.info("already connected to room ".concat(this.name),this.logContext),d(),Promise.resolve();if(this.connectFuture)return d(),this.connectFuture.promise;if(this.setAndEmitConnectionState(K.Connecting),((u=this.regionUrlProvider)===null||u===void 0?void 0:u.getServerUrl().toString())!==Nh(i))this.regionUrl=void 0,this.regionUrlProvider=void 0;if(tl(new URL(i))){if(this.regionUrlProvider===void 0)this.regionUrlProvider=new Z(i,h);else this.regionUrlProvider.updateToken(h);this.regionUrlProvider.fetchRegionSettings().then((w)=>{var p;(p=this.regionUrlProvider)===null||p===void 0||p.setServerReportedRegions(w)}).catch((w)=>{this.log.warn("could not fetch region settings",Object.assign(Object.assign({},this.logContext),{error:w}))})}let x=(w,p,y)=>a(this,void 0,void 0,function*(){var $,E;if(this.abortController)this.abortController.abort();let A=new AbortController;this.abortController=A,d===null||d===void 0||d();try{if(yield Te.getInstance().getBackOffPromise(i),A.signal.aborted)throw G.cancelled("Connection attempt aborted");yield this.attemptConnection(y!==null&&y!==void 0?y:i,h,f,A),this.abortController=void 0,w()}catch(m){if(this.regionUrlProvider&&m instanceof G&&m.reason!==q.Cancelled&&m.reason!==q.NotAllowed){let R=null;try{this.log.debug("Fetching next region"),R=yield this.regionUrlProvider.getNextBestRegionUrl(($=this.abortController)===null||$===void 0?void 0:$.signal)}catch(M){if(M instanceof G&&(M.status===401||M.reason===q.Cancelled)){this.handleDisconnect(this.options.stopLocalTrackOnUnpublish),p(M);return}}if([q.InternalError,q.ServerUnreachable,q.Timeout].includes(m.reason))this.log.debug("Adding failed connection attempt to back off"),Te.getInstance().addFailedConnectionAttempt(i);if(R&&!((E=this.abortController)===null||E===void 0?void 0:E.signal.aborted))this.log.info("Initial connection failed with ConnectionError: ".concat(m.message,". Retrying with another region: ").concat(R),this.logContext),this.recreateEngine(!0),yield x(w,p,R);else this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,Us(m)),p(m)}else{let R=Gt.UNKNOWN_REASON;if(m instanceof G)R=Us(m);this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,R),p(m)}}}),g=this.regionUrl;return this.regionUrl=void 0,this.connectFuture=new yt((w,p)=>{x(w,p,g)},()=>{this.clearConnectionFutures()}),this.connectFuture.promise}),this.connectSignal=(i,h,f,u,d,x)=>a(this,void 0,void 0,function*(){var g,w,p;let y=yield f.join(i,h,{autoSubscribe:u.autoSubscribe,adaptiveStream:typeof d.adaptiveStream==="object"?!0:d.adaptiveStream,maxRetries:u.maxRetries,e2eeEnabled:!!this.e2eeManager,websocketTimeout:u.websocketTimeout},x.signal,!d.singlePeerConnection),$=y.serverInfo;if(!$)$={version:y.serverVersion,region:y.serverRegion};if(this.serverInfo=$,this.log.debug("connected to Livekit Server ".concat(Object.entries($).map((E)=>{let[A,m]=E;return"".concat(A,": ").concat(m)}).join(", ")),{room:(g=y.room)===null||g===void 0?void 0:g.name,roomSid:(w=y.room)===null||w===void 0?void 0:w.sid,identity:(p=y.participant)===null||p===void 0?void 0:p.identity}),!$.version)throw new po("unknown server version");if($.version==="0.15.1"&&this.options.dynacast)this.log.debug("disabling dynacast due to server version",this.logContext),d.dynacast=!1;return y}),this.applyJoinResponse=(i)=>{let h=i.participant;if(this.localParticipant.sid=h.sid,this.localParticipant.identity=h.identity,this.localParticipant.setEnabledPublishCodecs(i.enabledPublishCodecs),this.e2eeManager)try{this.e2eeManager.setSifTrailer(i.sifTrailer)}catch(f){this.log.error(f instanceof Error?f.message:"Could not set SifTrailer",Object.assign(Object.assign({},this.logContext),{error:f}))}if(this.handleParticipantUpdates([h,...i.otherParticipants]),i.room)this.handleRoomUpdate(i.room)},this.attemptConnection=(i,h,f,u)=>a(this,void 0,void 0,function*(){var d,x;if(this.state===K.Reconnecting||this.isResuming||((d=this.engine)===null||d===void 0?void 0:d.pendingReconnect))this.log.info("Reconnection attempt replaced by new connection attempt",this.logContext),this.recreateEngine(!0);else this.maybeCreateEngine();if((x=this.regionUrlProvider)===null||x===void 0?void 0:x.isCloud())this.engine.setRegionUrlProvider(this.regionUrlProvider);if(this.acquireAudioContext(),this.connOptions=Object.assign(Object.assign({},Ho),f),this.connOptions.rtcConfig)this.engine.rtcConfig=this.connOptions.rtcConfig;if(this.connOptions.peerConnectionTimeout)this.engine.peerConnectionTimeout=this.connOptions.peerConnectionTimeout;try{let g=yield this.connectSignal(i,h,this.engine,this.connOptions,this.options,u);this.applyJoinResponse(g),this.setupLocalParticipantEvents(),this.emit(I.SignalConnected)}catch(g){yield this.engine.close(),this.recreateEngine();let w=u.signal.aborted?G.cancelled("Signal connection aborted"):G.serverUnreachable("could not establish signal connection");if(g instanceof Error)w.message="".concat(w.message,": ").concat(g.message);if(g instanceof G)w.reason=g.reason,w.status=g.status;throw this.log.debug("error trying to establish signal connection",Object.assign(Object.assign({},this.logContext),{error:g})),w}if(u.signal.aborted)throw yield this.engine.close(),this.recreateEngine(),G.cancelled("Connection attempt aborted");try{yield this.engine.waitForPCInitialConnection(this.connOptions.peerConnectionTimeout,u)}catch(g){throw yield this.engine.close(),this.recreateEngine(),g}if(Bt()&&this.options.disconnectOnPageLeave)window.addEventListener("pagehide",this.onPageLeave),window.addEventListener("beforeunload",this.onPageLeave);if(Bt())window.addEventListener("freeze",this.onPageLeave);if(this.setAndEmitConnectionState(K.Connected),this.emit(I.Connected),Te.getInstance().resetFailedConnectionAttempts(i),this.registerConnectionReconcile(),this.regionUrlProvider)this.regionUrlProvider.notifyConnected()}),this.disconnect=function(){for(var i=arguments.length,h=Array(i),f=0;f<i;f++)h[f]=arguments[f];return a(e,[...h],void 0,function(){var u=this;let d=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;return function*(){var x,g,w;let p=yield u.disconnectLock.lock();try{if(u.state===K.Disconnected){u.log.debug("already disconnected",u.logContext);return}if(u.log.info("disconnect from room",Object.assign({},u.logContext)),u.state===K.Connecting||u.state===K.Reconnecting||u.isResuming)u.log.warn("Abort connection attempt due to user initiated disconnect",u.logContext),(x=u.abortController)===null||x===void 0||x.abort("Abort connection attempt due to user initiated disconnect"),(w=(g=u.connectFuture)===null||g===void 0?void 0:g.reject)===null||w===void 0||w.call(g,G.cancelled("Client initiated disconnect")),u.connectFuture=void 0;if(u.engine){if(!u.engine.client.isDisconnected)yield u.engine.client.sendLeave();yield u.engine.close()}u.handleDisconnect(d,Gt.CLIENT_INITIATED),u.engine=void 0}finally{p()}}()})},this.onPageLeave=()=>a(this,void 0,void 0,function*(){this.log.info("Page leave detected, disconnecting",this.logContext),yield this.disconnect()}),this.startAudio=()=>a(this,void 0,void 0,function*(){let i=[],h=At();if(h&&h.os==="iOS"){let u=document.getElementById("livekit-dummy-audio-el");if(!u){u=document.createElement("audio"),u.id="livekit-dummy-audio-el",u.autoplay=!0,u.hidden=!0;let d=tn();d.enabled=!0;let x=new MediaStream([d]);u.srcObject=x,document.addEventListener("visibilitychange",()=>{if(!u)return;if(u.srcObject=document.hidden?null:x,!document.hidden)this.log.debug("page visible again, triggering startAudio to resume playback and update playback status",this.logContext),this.startAudio()}),document.body.append(u),this.once(I.Disconnected,()=>{u===null||u===void 0||u.remove(),u=null})}i.push(u)}this.remoteParticipants.forEach((f)=>{f.audioTrackPublications.forEach((u)=>{if(u.track)u.track.attachedElements.forEach((d)=>{i.push(d)})})});try{yield Promise.all([this.acquireAudioContext(),...i.map((f)=>{return f.muted=!1,f.play()})]),this.handleAudioPlaybackStarted()}catch(f){throw this.handleAudioPlaybackFailed(f),f}}),this.startVideo=()=>a(this,void 0,void 0,function*(){let i=[];for(let h of this.remoteParticipants.values())h.videoTrackPublications.forEach((f)=>{var u;(u=f.track)===null||u===void 0||u.attachedElements.forEach((d)=>{if(!i.includes(d))i.push(d)})});yield Promise.all(i.map((h)=>h.play())).then(()=>{this.handleVideoPlaybackStarted()}).catch((h)=>{if(h.name==="NotAllowedError")this.handleVideoPlaybackFailed();else this.log.warn("Resuming video playback failed, make sure you call `startVideo` directly in a user gesture handler",this.logContext)})}),this.handleRestarting=()=>{this.clearConnectionReconcile(),this.isResuming=!1;for(let i of this.remoteParticipants.values())this.handleParticipantDisconnected(i.identity,i);if(this.setAndEmitConnectionState(K.Reconnecting))this.emit(I.Reconnecting)},this.handleRestarted=()=>{this.outgoingDataTrackManager.sfuWillRepublishTracks(),this.incomingDataTrackManager.resendSubscriptionUpdates()},this.handleSignalRestarted=(i)=>a(this,void 0,void 0,function*(){this.log.debug("signal reconnected to server, region ".concat(i.serverRegion),Object.assign(Object.assign({},this.logContext),{region:i.serverRegion})),this.bufferedEvents=[],this.applyJoinResponse(i);try{yield this.localParticipant.republishAllTracks(void 0,!0)}catch(h){this.log.error("error trying to re-publish tracks after reconnection",Object.assign(Object.assign({},this.logContext),{error:h}))}try{yield this.engine.waitForRestarted(),this.log.debug("fully reconnected to server",Object.assign(Object.assign({},this.logContext),{region:i.serverRegion}))}catch(h){return}this.setAndEmitConnectionState(K.Connected),this.emit(I.Reconnected),this.registerConnectionReconcile(),this.emitBufferedEvents()}),this.handleParticipantUpdates=(i)=>{var h;for(let u of i){if(u.identity===this.localParticipant.identity){this.localParticipant.updateInfo(u);continue}if(u.identity==="")u.identity=(h=this.sidToIdentity.get(u.sid))!==null&&h!==void 0?h:"";let d=this.remoteParticipants.get(u.identity);if(u.state===Ke.DISCONNECTED)this.handleParticipantDisconnected(u.identity,d);else d=this.getOrCreateParticipant(u.identity,u)}let f=new Map(i.filter((u)=>u.identity!==this.localParticipant.identity).map((u)=>{return[u.identity,u.dataTracks.map((d)=>Tr.from(d))]}));this.incomingDataTrackManager.receiveSfuPublicationUpdates(f)},this.handleActiveSpeakersUpdate=(i)=>{let h=[],f={};if(i.forEach((u)=>{if(f[u.sid]=!0,u.sid===this.localParticipant.sid)this.localParticipant.audioLevel=u.level,this.localParticipant.setIsSpeaking(!0),h.push(this.localParticipant);else{let d=this.getRemoteParticipantBySid(u.sid);if(d)d.audioLevel=u.level,d.setIsSpeaking(!0),h.push(d)}}),!f[this.localParticipant.sid])this.localParticipant.audioLevel=0,this.localParticipant.setIsSpeaking(!1);this.remoteParticipants.forEach((u)=>{if(!f[u.sid])u.audioLevel=0,u.setIsSpeaking(!1)}),this.activeSpeakers=h,this.emitWhenConnected(I.ActiveSpeakersChanged,h)},this.handleSpeakersChanged=(i)=>{let h=new Map;this.activeSpeakers.forEach((u)=>{let d=this.remoteParticipants.get(u.identity);if(d&&d.sid!==u.sid)return;h.set(u.sid,u)}),i.forEach((u)=>{let d=this.getRemoteParticipantBySid(u.sid);if(u.sid===this.localParticipant.sid)d=this.localParticipant;if(!d)return;if(d.audioLevel=u.level,d.setIsSpeaking(u.active),u.active)h.set(u.sid,d);else h.delete(u.sid)});let f=Array.from(h.values());f.sort((u,d)=>d.audioLevel-u.audioLevel),this.activeSpeakers=f,this.emitWhenConnected(I.ActiveSpeakersChanged,f)},this.handleStreamStateUpdate=(i)=>{i.streamStates.forEach((h)=>{let f=this.getRemoteParticipantBySid(h.participantSid);if(!f)return;let u=f.getTrackPublicationBySid(h.trackSid);if(!u||!u.track)return;let d=L.streamStateFromProto(h.state);if(u.track.setStreamState(d),d!==u.track.streamState)f.emit(N.TrackStreamStateChanged,u,u.track.streamState),this.emitWhenConnected(I.TrackStreamStateChanged,u,u.track.streamState,f)})},this.handleSubscriptionPermissionUpdate=(i)=>{let h=this.getRemoteParticipantBySid(i.participantSid);if(!h)return;let f=h.getTrackPublicationBySid(i.trackSid);if(!f)return;f.setAllowed(i.allowed)},this.handleSubscriptionError=(i)=>{let h=Array.from(this.remoteParticipants.values()).find((u)=>u.trackPublications.has(i.trackSid));if(!h)return;let f=h.getTrackPublicationBySid(i.trackSid);if(!f)return;f.setSubscriptionError(i.err)},this.handleDataPacket=(i,h)=>{let f=this.remoteParticipants.get(i.participantIdentity);if(i.value.case==="user")this.handleUserPacket(f,i.value.value,i.kind,h);else if(i.value.case==="transcription")this.handleTranscription(f,i.value.value);else if(i.value.case==="sipDtmf")this.handleSipDtmf(f,i.value.value);else if(i.value.case==="chatMessage")this.handleChatMessage(f,i.value.value);else if(i.value.case==="metrics")this.handleMetrics(i.value.value,f);else if(i.value.case==="streamHeader"||i.value.case==="streamChunk"||i.value.case==="streamTrailer")this.handleDataStream(i,h);else if(i.value.case==="rpcRequest"){let u=i.value.value;this.handleIncomingRpcRequest(i.participantIdentity,u.id,u.method,u.payload,u.responseTimeoutMs,u.version)}},this.handleUserPacket=(i,h,f,u)=>{this.emit(I.DataReceived,h.payload,i,f,h.topic,u),i===null||i===void 0||i.emit(N.DataReceived,h.payload,f,u)},this.handleSipDtmf=(i,h)=>{this.emit(I.SipDTMFReceived,h,i),i===null||i===void 0||i.emit(N.SipDTMFReceived,h)},this.handleTranscription=(i,h)=>{let f=h.transcribedParticipantIdentity===this.localParticipant.identity?this.localParticipant:this.getParticipantByIdentity(h.transcribedParticipantIdentity),u=f===null||f===void 0?void 0:f.trackPublications.get(h.trackId),d=Ta(h,this.transcriptionReceivedTimes);u===null||u===void 0||u.emit(W.TranscriptionReceived,d),f===null||f===void 0||f.emit(N.TranscriptionReceived,d,u),this.emit(I.TranscriptionReceived,d,f,u)},this.handleChatMessage=(i,h)=>{let f=Fa(h);this.emit(I.ChatMessage,f,i)},this.handleMetrics=(i,h)=>{this.emit(I.MetricsReceived,i,h)},this.handleDataStream=(i,h)=>{this.incomingDataStreamManager.handleDataStreamPacket(i,h)},this.bufferedSegments=new Map,this.handleAudioPlaybackStarted=()=>{if(this.canPlaybackAudio)return;this.audioEnabled=!0,this.emit(I.AudioPlaybackStatusChanged,!0)},this.handleAudioPlaybackFailed=(i)=>{if(this.log.warn("could not playback audio",Object.assign(Object.assign({},this.logContext),{error:i})),!this.canPlaybackAudio)return;this.audioEnabled=!1,this.emit(I.AudioPlaybackStatusChanged,!1)},this.handleVideoPlaybackStarted=()=>{if(this.isVideoPlaybackBlocked)this.isVideoPlaybackBlocked=!1,this.emit(I.VideoPlaybackStatusChanged,!0)},this.handleVideoPlaybackFailed=()=>{if(!this.isVideoPlaybackBlocked)this.isVideoPlaybackBlocked=!0,this.emit(I.VideoPlaybackStatusChanged,!1)},this.handleDeviceChange=()=>a(this,void 0,void 0,function*(){var i;if(((i=At())===null||i===void 0?void 0:i.os)!=="iOS")yield this.selectDefaultDevices();this.emit(I.MediaDevicesChanged)}),this.handleRoomUpdate=(i)=>{let h=this.roomInfo;if(this.roomInfo=i,h&&h.metadata!==i.metadata)this.emitWhenConnected(I.RoomMetadataChanged,i.metadata);if((h===null||h===void 0?void 0:h.activeRecording)!==i.activeRecording)this.emitWhenConnected(I.RecordingStatusChanged,i.activeRecording)},this.handleConnectionQualityUpdate=(i)=>{i.updates.forEach((h)=>{if(h.participantSid===this.localParticipant.sid){this.localParticipant.setConnectionQuality(h.quality);return}let f=this.getRemoteParticipantBySid(h.participantSid);if(f)f.setConnectionQuality(h.quality)})},this.onLocalParticipantMetadataChanged=(i)=>{this.emit(I.ParticipantMetadataChanged,i,this.localParticipant)},this.onLocalParticipantNameChanged=(i)=>{this.emit(I.ParticipantNameChanged,i,this.localParticipant)},this.onLocalAttributesChanged=(i)=>{this.emit(I.ParticipantAttributesChanged,i,this.localParticipant)},this.onLocalTrackMuted=(i)=>{this.emit(I.TrackMuted,i,this.localParticipant)},this.onLocalTrackUnmuted=(i)=>{this.emit(I.TrackUnmuted,i,this.localParticipant)},this.onTrackProcessorUpdate=(i)=>{var h;(h=i===null||i===void 0?void 0:i.onPublish)===null||h===void 0||h.call(i,this)},this.onLocalTrackPublished=(i)=>a(this,void 0,void 0,function*(){var h,f,u,d,x,g;if((h=i.track)===null||h===void 0||h.on(W.TrackProcessorUpdate,this.onTrackProcessorUpdate),(f=i.track)===null||f===void 0||f.on(W.Restarted,this.onLocalTrackRestarted),(x=(d=(u=i.track)===null||u===void 0?void 0:u.getProcessor())===null||d===void 0?void 0:d.onPublish)===null||x===void 0||x.call(d,this),this.emit(I.LocalTrackPublished,i,this.localParticipant),le(i.track)){if(yield i.track.checkForSilence())this.emit(I.LocalAudioSilenceDetected,i)}let w=yield(g=i.track)===null||g===void 0?void 0:g.getDeviceId(!1),p=Qr(i.source);if(p&&w&&w!==this.localParticipant.activeDeviceMap.get(p))this.localParticipant.activeDeviceMap.set(p,w),this.emit(I.ActiveDeviceChanged,p,w)}),this.onLocalTrackUnpublished=(i)=>{var h,f;(h=i.track)===null||h===void 0||h.off(W.TrackProcessorUpdate,this.onTrackProcessorUpdate),(f=i.track)===null||f===void 0||f.off(W.Restarted,this.onLocalTrackRestarted),this.emit(I.LocalTrackUnpublished,i,this.localParticipant)},this.onLocalTrackRestarted=(i)=>a(this,void 0,void 0,function*(){let h=yield i.getDeviceId(!1),f=Qr(i.source);if(f&&h&&h!==this.localParticipant.activeDeviceMap.get(f))this.log.debug("local track restarted, setting ".concat(f," ").concat(h," active"),this.logContext),this.localParticipant.activeDeviceMap.set(f,h),this.emit(I.ActiveDeviceChanged,f,h)}),this.onLocalConnectionQualityChanged=(i)=>{this.emit(I.ConnectionQualityChanged,i,this.localParticipant)},this.onMediaDevicesError=(i,h)=>{this.emit(I.MediaDevicesError,i,h)},this.onLocalParticipantPermissionsChanged=(i)=>{this.emit(I.ParticipantPermissionsChanged,i,this.localParticipant)},this.onLocalChatMessageSent=(i)=>{this.emit(I.ChatMessage,i,this.localParticipant)},this.setMaxListeners(100),this.remoteParticipants=new Map,this.sidToIdentity=new Map,this.options=Object.assign(Object.assign({},Nb),t),this.log=pt((l=this.options.loggerName)!==null&&l!==void 0?l:dt.Room),this.transcriptionReceivedTimes=new Map,this.options.audioCaptureDefaults=Object.assign(Object.assign({},qh),t===null||t===void 0?void 0:t.audioCaptureDefaults),this.options.videoCaptureDefaults=Object.assign(Object.assign({},Th),t===null||t===void 0?void 0:t.videoCaptureDefaults),this.options.publishDefaults=Object.assign(Object.assign({},$b),t===null||t===void 0?void 0:t.publishDefaults),this.maybeCreateEngine(),this.incomingDataStreamManager=new tf,this.outgoingDataStreamManager=new nf(this.engine,this.log),this.incomingDataTrackManager=new uf({e2eeManager:this.e2eeManager}),this.incomingDataTrackManager.on("sfuUpdateSubscription",(i)=>{this.engine.client.sendUpdateDataSubscription(i.sid,i.subscribe)}).on("trackPublished",(i)=>{var h;if(i.track.publisherIdentity===this.localParticipant.identity)return;this.emit(I.DataTrackPublished,i.track),(h=this.remoteParticipants.get(i.track.publisherIdentity))===null||h===void 0||h.addRemoteDataTrack(i.track)}).on("trackUnpublished",(i)=>{var h;if(i.publisherIdentity===this.localParticipant.identity)return;this.emit(I.DataTrackUnpublished,i.sid),(h=this.remoteParticipants.get(i.publisherIdentity))===null||h===void 0||h.removeRemoteDataTrack(i.sid)}),this.outgoingDataTrackManager=new Zo({e2eeManager:this.e2eeManager}),this.outgoingDataTrackManager.on("sfuPublishRequest",(i)=>{this.engine.client.sendPublishDataTrackRequest(i.handle,i.name,i.usesE2ee)}).on("sfuUnpublishRequest",(i)=>{this.engine.client.sendUnPublishDataTrackRequest(i.handle)}).on("trackPublished",(i)=>{this.emit(I.LocalDataTrackPublished,i.track)}).on("trackUnpublished",(i)=>{this.emit(I.LocalDataTrackUnpublished,i.sid)}).on("packetAvailable",(i)=>{let{bytes:h}=i;this.engine.sendLossyBytes(h,D.DATA_TRACK_LOSSY,"wait")}),this.disconnectLock=new ht,this.localParticipant=new qo("","",this.engine,this.options,this.rpcHandlers,this.outgoingDataStreamManager,this.outgoingDataTrackManager),this.options.e2ee||this.options.encryption)this.setupE2EE();if(this.engine.e2eeManager=this.e2eeManager,this.incomingDataTrackManager.updateE2eeManager((n=this.e2eeManager)!==null&&n!==void 0?n:null),this.outgoingDataTrackManager.updateE2eeManager((r=this.e2eeManager)!==null&&r!==void 0?r:null),this.options.videoCaptureDefaults.deviceId)this.localParticipant.activeDeviceMap.set("videoinput",Me(this.options.videoCaptureDefaults.deviceId));if(this.options.audioCaptureDefaults.deviceId)this.localParticipant.activeDeviceMap.set("audioinput",Me(this.options.audioCaptureDefaults.deviceId));if((o=this.options.audioOutput)===null||o===void 0?void 0:o.deviceId)this.switchActiveDevice("audiooutput",Me(this.options.audioOutput.deviceId)).catch((i)=>this.log.warn("Could not set audio output: ".concat(i.message),this.logContext));if(Bt()){let i=new AbortController;if((c=(s=navigator.mediaDevices)===null||s===void 0?void 0:s.addEventListener)===null||c===void 0||c.call(s,"devicechange",this.handleDeviceChange,{signal:i.signal}),nl.cleanupRegistry)nl.cleanupRegistry.register(this,()=>{i.abort()})}}registerTextStreamHandler(t,e){return this.incomingDataStreamManager.registerTextStreamHandler(t,e)}unregisterTextStreamHandler(t){return this.incomingDataStreamManager.unregisterTextStreamHandler(t)}registerByteStreamHandler(t,e){return this.incomingDataStreamManager.registerByteStreamHandler(t,e)}unregisterByteStreamHandler(t){return this.incomingDataStreamManager.unregisterByteStreamHandler(t)}registerRpcMethod(t,e){if(this.rpcHandlers.has(t))throw Error("RPC handler already registered for method ".concat(t,", unregisterRpcMethod before trying to register again"));this.rpcHandlers.set(t,e)}unregisterRpcMethod(t){this.rpcHandlers.delete(t)}setE2EEEnabled(t){return a(this,void 0,void 0,function*(){if(this.e2eeManager){if(yield Promise.all([this.localParticipant.setE2EEEnabled(t)]),this.localParticipant.identity!=="")this.e2eeManager.setParticipantCryptorEnabled(t,this.localParticipant.identity)}else throw Error("e2ee not configured, please set e2ee settings within the room options")})}setupE2EE(){var t;let e=!!this.options.encryption,l=this.options.encryption||this.options.e2ee;if(l){if("e2eeManager"in l)this.e2eeManager=l.e2eeManager,this.e2eeManager.isDataChannelEncryptionEnabled=e;else this.e2eeManager=new Yh(l,e);this.e2eeManager.on(ce.ParticipantEncryptionStatusChanged,(n,r)=>{if($h(r))this.isE2EEEnabled=n;this.emit(I.ParticipantEncryptionStatusChanged,n,r)}),this.e2eeManager.on(ce.EncryptionError,(n,r)=>{let o=r?this.getParticipantByIdentity(r):void 0;this.emit(I.EncryptionError,n,o)}),(t=this.e2eeManager)===null||t===void 0||t.setup(this)}}get logContext(){var t;return{room:this.name,roomID:(t=this.roomInfo)===null||t===void 0?void 0:t.sid,participant:this.localParticipant.identity,participantID:this.localParticipant.sid}}get isRecording(){var t,e;return(e=(t=this.roomInfo)===null||t===void 0?void 0:t.activeRecording)!==null&&e!==void 0?e:!1}getSid(){if(this.state===K.Disconnected)return ft.resolve("");if(this.roomInfo&&this.roomInfo.sid!=="")return ft.resolve(this.roomInfo.sid);return new ft((t,e)=>{let l=(n)=>{if(n.sid!=="")this.engine.off(B.RoomUpdate,l),t(n.sid)};this.engine.on(B.RoomUpdate,l),this.once(I.Disconnected,()=>{this.engine.off(B.RoomUpdate,l),e(new U("Room disconnected before room server id was available"))})})}get name(){var t,e;return(e=(t=this.roomInfo)===null||t===void 0?void 0:t.name)!==null&&e!==void 0?e:""}get metadata(){var t;return(t=this.roomInfo)===null||t===void 0?void 0:t.metadata}get numParticipants(){var t,e;return(e=(t=this.roomInfo)===null||t===void 0?void 0:t.numParticipants)!==null&&e!==void 0?e:0}get numPublishers(){var t,e;return(e=(t=this.roomInfo)===null||t===void 0?void 0:t.numPublishers)!==null&&e!==void 0?e:0}maybeCreateEngine(){if(this.engine&&(this.engine.isNewlyCreated||!this.engine.isClosed))return;if(this.engine=new Jh(this.options),this.engine.e2eeManager=this.e2eeManager,this.engine.on(B.ParticipantUpdate,this.handleParticipantUpdates).on(B.RoomUpdate,this.handleRoomUpdate).on(B.SpeakersChanged,this.handleSpeakersChanged).on(B.StreamStateChanged,this.handleStreamStateUpdate).on(B.ConnectionQualityUpdate,this.handleConnectionQualityUpdate).on(B.SubscriptionError,this.handleSubscriptionError).on(B.SubscriptionPermissionUpdate,this.handleSubscriptionPermissionUpdate).on(B.MediaTrackAdded,(t,e,l)=>{this.onTrackAdded(t,e,l)}).on(B.Disconnected,(t)=>{this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,t)}).on(B.ActiveSpeakersUpdate,this.handleActiveSpeakersUpdate).on(B.DataPacketReceived,this.handleDataPacket).on(B.Resuming,()=>{if(this.clearConnectionReconcile(),this.isResuming=!0,this.log.info("Resuming signal connection",this.logContext),this.setAndEmitConnectionState(K.SignalReconnecting))this.emit(I.SignalReconnecting)}).on(B.Resumed,()=>{if(this.registerConnectionReconcile(),this.isResuming=!1,this.log.info("Resumed signal connection",this.logContext),this.updateSubscriptions(),this.emitBufferedEvents(),this.setAndEmitConnectionState(K.Connected))this.emit(I.Reconnected)}).on(B.SignalResumed,()=>{if(this.bufferedEvents=[],this.state===K.Reconnecting||this.isResuming)this.sendSyncState()}).on(B.Restarting,this.handleRestarting).on(B.Restarted,this.handleRestarted).on(B.SignalRestarted,this.handleSignalRestarted).on(B.Offline,()=>{if(this.setAndEmitConnectionState(K.Reconnecting))this.emit(I.Reconnecting)}).on(B.DCBufferStatusChanged,(t,e)=>{this.emit(I.DCBufferStatusChanged,t,e)}).on(B.LocalTrackSubscribed,(t)=>{let e=this.localParticipant.getTrackPublications().find((l)=>{let{trackSid:n}=l;return n===t});if(!e){this.log.warn("could not find local track subscription for subscribed event",this.logContext);return}this.localParticipant.emit(N.LocalTrackSubscribed,e),this.emitWhenConnected(I.LocalTrackSubscribed,e,this.localParticipant)}).on(B.RoomMoved,(t)=>{if(this.log.debug("room moved",t),t.room)this.handleRoomUpdate(t.room);if(this.remoteParticipants.forEach((e,l)=>{this.handleParticipantDisconnected(l,e)}),this.emit(I.Moved,t.room.name),t.participant)this.handleParticipantUpdates([t.participant,...t.otherParticipants]);else this.handleParticipantUpdates(t.otherParticipants)}).on(B.PublishDataTrackResponse,(t)=>{if(!t.info){this.log.warn("received PublishDataTrackResponse, but event.info was ".concat(t.info,", so skipping."),this.logContext);return}this.outgoingDataTrackManager.receivedSfuPublishResponse(t.info.pubHandle,{type:"ok",data:{sid:t.info.sid,pubHandle:t.info.pubHandle,name:t.info.name,usesE2ee:t.info.encryption!==T.NONE}})}).on(B.UnPublishDataTrackResponse,(t)=>{if(!t.info){this.log.warn("received UnPublishDataTrackResponse, but event.info was ".concat(t.info,", so skipping."),this.logContext);return}this.outgoingDataTrackManager.receivedSfuUnpublishResponse(t.info.pubHandle)}).on(B.DataTrackSubscriberHandles,(t)=>{let e=new Map(Object.entries(t.subHandles).map((l)=>{let[n,r]=l;return[parseInt(n,10),r.trackSid]}));this.incomingDataTrackManager.receivedSfuSubscriberHandles(e)}).on(B.DataTrackPacketReceived,(t)=>{try{this.incomingDataTrackManager.packetReceived(t)}catch(e){throw e}}).on(B.Joined,(t)=>{let e=new Map(t.otherParticipants.map((l)=>{return[l.identity,l.dataTracks.map((n)=>Tr.from(n))]}));this.incomingDataTrackManager.receiveSfuPublicationUpdates(e)}),this.localParticipant)this.localParticipant.setupEngine(this.engine);if(this.e2eeManager)this.e2eeManager.setupEngine(this.engine);if(this.outgoingDataStreamManager)this.outgoingDataStreamManager.setupEngine(this.engine)}static getLocalDevices(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return ct.getInstance().getDevices(t,e)}prepareConnection(t,e){return a(this,void 0,void 0,function*(){if(this.state!==K.Disconnected)return;this.log.debug("prepareConnection to ".concat(t),this.logContext);try{if(tl(new URL(t))&&e){this.regionUrlProvider=new Z(t,e);let l=yield this.regionUrlProvider.getNextBestRegionUrl();if(l&&this.state===K.Disconnected)this.regionUrl=l,yield fetch(Wl(l),{method:"HEAD"}),this.log.debug("prepared connection to ".concat(l),this.logContext)}else yield fetch(Wl(t),{method:"HEAD"})}catch(l){this.log.warn("could not prepare connection",Object.assign(Object.assign({},this.logContext),{error:l}))}})}getParticipantByIdentity(t){if(this.localParticipant.identity===t)return this.localParticipant;return this.remoteParticipants.get(t)}clearConnectionFutures(){this.connectFuture=void 0}simulateScenario(t,e){return a(this,void 0,void 0,function*(){let l=()=>a(this,void 0,void 0,function*(){}),n;switch(t){case"signal-reconnect":yield this.engine.client.handleOnClose("simulate disconnect");break;case"speaker":n=new Pt({scenario:{case:"speakerUpdate",value:3}});break;case"node-failure":n=new Pt({scenario:{case:"nodeFailure",value:!0}});break;case"server-leave":n=new Pt({scenario:{case:"serverLeave",value:!0}});break;case"migration":n=new Pt({scenario:{case:"migration",value:!0}});break;case"resume-reconnect":this.engine.failNext(),yield this.engine.client.handleOnClose("simulate resume-disconnect");break;case"disconnect-signal-on-resume":l=()=>a(this,void 0,void 0,function*(){yield this.engine.client.handleOnClose("simulate resume-disconnect")}),n=new Pt({scenario:{case:"disconnectSignalOnResume",value:!0}});break;case"disconnect-signal-on-resume-no-messages":l=()=>a(this,void 0,void 0,function*(){yield this.engine.client.handleOnClose("simulate resume-disconnect")}),n=new Pt({scenario:{case:"disconnectSignalOnResumeNoMessages",value:!0}});break;case"full-reconnect":this.engine.fullReconnectOnNext=!0,yield this.engine.client.handleOnClose("simulate full-reconnect");break;case"force-tcp":case"force-tls":n=new Pt({scenario:{case:"switchCandidateProtocol",value:t==="force-tls"?2:1}}),l=()=>a(this,void 0,void 0,function*(){let r=this.engine.client.onLeave;if(r)r(new $n({reason:Gt.CLIENT_INITIATED,action:je.RECONNECT}))});break;case"subscriber-bandwidth":if(e===void 0||typeof e!=="number")throw Error("subscriber-bandwidth requires a number as argument");n=new Pt({scenario:{case:"subscriberBandwidth",value:Le(e)}});break;case"leave-full-reconnect":n=new Pt({scenario:{case:"leaveRequestFullReconnect",value:!0}})}if(n)yield this.engine.client.sendSimulateScenario(n),yield l()})}get canPlaybackAudio(){return this.audioEnabled}get canPlaybackVideo(){return!this.isVideoPlaybackBlocked}getActiveDevice(t){return this.localParticipant.activeDeviceMap.get(t)}switchActiveDevice(t,e){return a(this,arguments,void 0,function(l,n){var r=this;let o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;return function*(){var s,c,i,h,f,u,d;let x=!0,g=!1,w=o?{exact:n}:n;if(l==="audioinput"){g=r.localParticipant.audioTrackPublications.size===0;let p=(s=r.getActiveDevice(l))!==null&&s!==void 0?s:r.options.audioCaptureDefaults.deviceId;r.options.audioCaptureDefaults.deviceId=w;let y=Array.from(r.localParticipant.audioTrackPublications.values()).filter((E)=>E.source===L.Source.Microphone);try{x=(yield Promise.all(y.map((E)=>{var A;return(A=E.audioTrack)===null||A===void 0?void 0:A.setDeviceId(w)}))).every((E)=>E===!0)}catch(E){throw r.options.audioCaptureDefaults.deviceId=p,E}let $=y.some((E)=>{var A,m;return(m=(A=E.track)===null||A===void 0?void 0:A.isMuted)!==null&&m!==void 0?m:!1});if(x&&$)g=!0}else if(l==="videoinput"){g=r.localParticipant.videoTrackPublications.size===0;let p=(c=r.getActiveDevice(l))!==null&&c!==void 0?c:r.options.videoCaptureDefaults.deviceId;r.options.videoCaptureDefaults.deviceId=w;let y=Array.from(r.localParticipant.videoTrackPublications.values()).filter((E)=>E.source===L.Source.Camera);try{x=(yield Promise.all(y.map((E)=>{var A;return(A=E.videoTrack)===null||A===void 0?void 0:A.setDeviceId(w)}))).every((E)=>E===!0)}catch(E){throw r.options.videoCaptureDefaults.deviceId=p,E}let $=y.some((E)=>{var A,m;return(m=(A=E.track)===null||A===void 0?void 0:A.isMuted)!==null&&m!==void 0?m:!1});if(x&&$)g=!0}else if(l==="audiooutput"){if(g=!0,!gn()&&!r.options.webAudioMix||r.options.webAudioMix&&r.audioContext&&!("setSinkId"in r.audioContext))throw Error("cannot switch audio output, the current browser does not support it");if(r.options.webAudioMix)n=(i=yield ct.getInstance().normalizeDeviceId("audiooutput",n))!==null&&i!==void 0?i:"";(h=(d=r.options).audioOutput)!==null&&h!==void 0||(d.audioOutput={});let p=(f=r.getActiveDevice(l))!==null&&f!==void 0?f:r.options.audioOutput.deviceId;r.options.audioOutput.deviceId=n;try{if(r.options.webAudioMix)(u=r.audioContext)===null||u===void 0||u.setSinkId(n);yield Promise.all(Array.from(r.remoteParticipants.values()).map((y)=>y.setAudioOutput({deviceId:n})))}catch(y){throw r.options.audioOutput.deviceId=p,y}}if(g)r.localParticipant.activeDeviceMap.set(l,n),r.emit(I.ActiveDeviceChanged,l,n);return x}()})}setupLocalParticipantEvents(){this.localParticipant.on(N.ParticipantMetadataChanged,this.onLocalParticipantMetadataChanged).on(N.ParticipantNameChanged,this.onLocalParticipantNameChanged).on(N.AttributesChanged,this.onLocalAttributesChanged).on(N.TrackMuted,this.onLocalTrackMuted).on(N.TrackUnmuted,this.onLocalTrackUnmuted).on(N.LocalTrackPublished,this.onLocalTrackPublished).on(N.LocalTrackUnpublished,this.onLocalTrackUnpublished).on(N.ConnectionQualityChanged,this.onLocalConnectionQualityChanged).on(N.MediaDevicesError,this.onMediaDevicesError).on(N.AudioStreamAcquired,this.startAudio).on(N.ChatMessage,this.onLocalChatMessageSent).on(N.ParticipantPermissionsChanged,this.onLocalParticipantPermissionsChanged)}recreateEngine(t){let e=this.engine;if(t&&e&&!e.client.isDisconnected)e.client.sendLeave().finally(()=>e.close());else e===null||e===void 0||e.close();this.engine=void 0,this.isResuming=!1,this.remoteParticipants.clear(),this.sidToIdentity.clear(),this.bufferedEvents=[],this.maybeCreateEngine()}onTrackAdded(t,e,l){if(this.state===K.Connecting||this.state===K.Reconnecting){let f=()=>{this.log.debug("deferring on track for later",{mediaTrackId:t.id,mediaStreamId:e.id,tracksInStream:e.getTracks().map((d)=>d.id)}),this.onTrackAdded(t,e,l),u()},u=()=>{this.off(I.Reconnected,f),this.off(I.Connected,f),this.off(I.Disconnected,u)};this.once(I.Reconnected,f),this.once(I.Connected,f),this.once(I.Disconnected,u);return}if(this.state===K.Disconnected){this.log.warn("skipping incoming track after Room disconnected",this.logContext);return}if(t.readyState==="ended"){this.log.info("skipping incoming track as it already ended",this.logContext);return}let n=Va(e.id),r=n[0],o=n[1],s=t.id;if(o&&o.startsWith("TR"))s=o;if(r===this.localParticipant.sid){this.log.warn("tried to create RemoteParticipant for local participant",this.logContext);return}let c=Array.from(this.remoteParticipants.values()).find((f)=>f.sid===r);if(!c){if(r.startsWith("PA"))this.log.error("Tried to add a track for a participant, that's not present. Sid: ".concat(r),this.logContext);return}if(!s.startsWith("TR")){let f=this.engine.getTrackIdForReceiver(l);if(!f){this.log.error("Tried to add a track whose 'sid' could not be found for a participant, that's not present. Sid: ".concat(r),this.logContext);return}s=f}if(!s.startsWith("TR"))this.log.warn("Tried to add a track whose 'sid' could not be determined for a participant, that's not present. Sid: ".concat(r,", streamId: ").concat(o,", trackId: ").concat(s),Object.assign(Object.assign({},this.logContext),{remoteParticipantID:r,streamId:o,trackId:s}));let i;if(this.options.adaptiveStream)if(typeof this.options.adaptiveStream==="object")i=this.options.adaptiveStream;else i={};let h=c.addSubscribedMediaTrack(t,s,e,l,i);if((h===null||h===void 0?void 0:h.isEncrypted)&&!this.e2eeManager)this.emit(I.EncryptionError,Error("Encrypted ".concat(h.source," track received from participant ").concat(c.sid,", but room does not have encryption enabled!")))}handleDisconnect(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,e=arguments.length>1?arguments[1]:void 0;var l,n;if(this.clearConnectionReconcile(),this.isResuming=!1,this.bufferedEvents=[],this.transcriptionReceivedTimes.clear(),this.incomingDataStreamManager.clearControllers(),this.state===K.Disconnected)return;if(this.regionUrl=void 0,this.regionUrlProvider)this.regionUrlProvider.notifyDisconnected();try{if(this.remoteParticipants.forEach((r)=>{r.trackPublications.forEach((o)=>{r.unpublishTrack(o.trackSid)})}),this.localParticipant.trackPublications.forEach((r)=>{var o,s,c;if(r.track)this.localParticipant.unpublishTrack(r.track,t);if(t)(o=r.track)===null||o===void 0||o.detach(),(s=r.track)===null||s===void 0||s.stop();else(c=r.track)===null||c===void 0||c.stopMonitor()}),this.localParticipant.off(N.ParticipantMetadataChanged,this.onLocalParticipantMetadataChanged).off(N.ParticipantNameChanged,this.onLocalParticipantNameChanged).off(N.AttributesChanged,this.onLocalAttributesChanged).off(N.TrackMuted,this.onLocalTrackMuted).off(N.TrackUnmuted,this.onLocalTrackUnmuted).off(N.LocalTrackPublished,this.onLocalTrackPublished).off(N.LocalTrackUnpublished,this.onLocalTrackUnpublished).off(N.ConnectionQualityChanged,this.onLocalConnectionQualityChanged).off(N.MediaDevicesError,this.onMediaDevicesError).off(N.AudioStreamAcquired,this.startAudio).off(N.ChatMessage,this.onLocalChatMessageSent).off(N.ParticipantPermissionsChanged,this.onLocalParticipantPermissionsChanged),this.localParticipant.trackPublications.clear(),this.localParticipant.videoTrackPublications.clear(),this.localParticipant.audioTrackPublications.clear(),this.remoteParticipants.clear(),this.sidToIdentity.clear(),this.activeSpeakers=[],this.audioContext&&typeof this.options.webAudioMix==="boolean")this.audioContext.close(),this.audioContext=void 0;if(Bt())window.removeEventListener("beforeunload",this.onPageLeave),window.removeEventListener("pagehide",this.onPageLeave),window.removeEventListener("freeze",this.onPageLeave),(n=(l=navigator.mediaDevices)===null||l===void 0?void 0:l.removeEventListener)===null||n===void 0||n.call(l,"devicechange",this.handleDeviceChange)}finally{this.setAndEmitConnectionState(K.Disconnected),this.emit(I.Disconnected,e)}}handleParticipantDisconnected(t,e){var l;if(this.remoteParticipants.delete(t),!e)return;this.incomingDataStreamManager.validateParticipantHasNoActiveDataStreams(t),this.incomingDataTrackManager.handleRemoteParticipantDisconnected(t),e.trackPublications.forEach((n)=>{e.unpublishTrack(n.trackSid,!0)}),this.emit(I.ParticipantDisconnected,e),e.setDisconnected(),(l=this.localParticipant)===null||l===void 0||l.handleParticipantDisconnected(e.identity)}handleIncomingRpcRequest(t,e,l,n,r,o){return a(this,void 0,void 0,function*(){if(yield this.engine.publishRpcAck(t,e),o!==1){yield this.engine.publishRpcResponse(t,e,null,_.builtIn("UNSUPPORTED_VERSION"));return}let s=this.rpcHandlers.get(l);if(!s){yield this.engine.publishRpcResponse(t,e,null,_.builtIn("UNSUPPORTED_METHOD"));return}let c=null,i=null;try{let h=yield s({requestId:e,callerIdentity:t,payload:n,responseTimeout:r});if(Eo(h)>kh)c=_.builtIn("RESPONSE_PAYLOAD_TOO_LARGE"),this.log.warn("RPC Response payload too large for ".concat(l));else i=h}catch(h){if(h instanceof _)c=h;else this.log.warn("Uncaught error returned by RPC handler for ".concat(l,". Returning APPLICATION_ERROR instead."),h),c=_.builtIn("APPLICATION_ERROR")}yield this.engine.publishRpcResponse(t,e,i,c)})}selectDefaultDevices(){return a(this,void 0,void 0,function*(){var t,e,l;let n=ct.getInstance().previousDevices,r=yield ct.getInstance().getDevices(void 0,!1),o=At();if((o===null||o===void 0?void 0:o.name)==="Chrome"&&o.os!=="iOS")for(let c of r){let i=n.find((h)=>h.deviceId===c.deviceId);if(i&&i.label!==""&&i.kind===c.kind&&i.label!==c.label){if(this.getActiveDevice(c.kind)==="default")this.emit(I.ActiveDeviceChanged,c.kind,c.deviceId)}}let s=["audiooutput","audioinput","videoinput"];for(let c of s){let i=Ba(c),h=this.localParticipant.getTrackPublication(i);if(h&&((t=h.track)===null||t===void 0?void 0:t.isUserProvided))continue;let f=r.filter((d)=>d.kind===c),u=this.getActiveDevice(c);if(u===((e=n.filter((d)=>d.kind===c)[0])===null||e===void 0?void 0:e.deviceId)){if(f.length>0&&((l=f[0])===null||l===void 0?void 0:l.deviceId)!==u){yield this.switchActiveDevice(c,f[0].deviceId);continue}}if(c==="audioinput"&&!Bl()||c==="videoinput")continue;if(f.length>0&&!f.find((d)=>d.deviceId===this.getActiveDevice(c))&&(c!=="audiooutput"||!Bl()))yield this.switchActiveDevice(c,f[0].deviceId)}})}acquireAudioContext(){return a(this,void 0,void 0,function*(){var t,e;if(typeof this.options.webAudioMix!=="boolean"&&this.options.webAudioMix.audioContext)this.audioContext=this.options.webAudioMix.audioContext;else if(!this.audioContext||this.audioContext.state==="closed")this.audioContext=(t=Co())!==null&&t!==void 0?t:void 0;if(this.options.webAudioMix)this.remoteParticipants.forEach((n)=>n.setAudioContext(this.audioContext));if(this.localParticipant.setAudioContext(this.audioContext),this.audioContext&&this.audioContext.state==="suspended")try{yield Promise.race([this.audioContext.resume(),ut(200)])}catch(n){this.log.warn("Could not resume audio context",Object.assign(Object.assign({},this.logContext),{error:n}))}let l=((e=this.audioContext)===null||e===void 0?void 0:e.state)==="running";if(l!==this.canPlaybackAudio)this.audioEnabled=l,this.emit(I.AudioPlaybackStatusChanged,l)})}createParticipant(t,e){var l;let n;if(e)n=Hl.fromParticipantInfo(this.engine.client,e,{loggerContextCb:()=>this.logContext,loggerName:this.options.loggerName});else n=new Hl(this.engine.client,"",t,void 0,void 0,void 0,{loggerContextCb:()=>this.logContext,loggerName:this.options.loggerName});if(this.options.webAudioMix)n.setAudioContext(this.audioContext);if((l=this.options.audioOutput)===null||l===void 0?void 0:l.deviceId)n.setAudioOutput(this.options.audioOutput).catch((r)=>this.log.warn("Could not set audio output: ".concat(r.message),this.logContext));return n}getOrCreateParticipant(t,e){if(this.remoteParticipants.has(t)){let n=this.remoteParticipants.get(t);if(e){if(n.updateInfo(e))this.sidToIdentity.set(e.sid,e.identity)}return n}let l=this.createParticipant(t,e);if(this.remoteParticipants.set(t,l),this.sidToIdentity.set(e.sid,e.identity),this.emitWhenConnected(I.ParticipantConnected,l),l.on(N.TrackPublished,(n)=>{this.emitWhenConnected(I.TrackPublished,n,l)}).on(N.TrackSubscribed,(n,r)=>{if(n.kind===L.Kind.Audio)n.on(W.AudioPlaybackStarted,this.handleAudioPlaybackStarted),n.on(W.AudioPlaybackFailed,this.handleAudioPlaybackFailed);else if(n.kind===L.Kind.Video)n.on(W.VideoPlaybackFailed,this.handleVideoPlaybackFailed),n.on(W.VideoPlaybackStarted,this.handleVideoPlaybackStarted);this.emitWhenConnected(I.TrackSubscribed,n,r,l)}).on(N.TrackUnpublished,(n)=>{this.emit(I.TrackUnpublished,n,l)}).on(N.TrackUnsubscribed,(n,r)=>{this.emit(I.TrackUnsubscribed,n,r,l)}).on(N.TrackMuted,(n)=>{this.emitWhenConnected(I.TrackMuted,n,l)}).on(N.TrackUnmuted,(n)=>{this.emitWhenConnected(I.TrackUnmuted,n,l)}).on(N.ParticipantMetadataChanged,(n)=>{this.emitWhenConnected(I.ParticipantMetadataChanged,n,l)}).on(N.ParticipantNameChanged,(n)=>{this.emitWhenConnected(I.ParticipantNameChanged,n,l)}).on(N.AttributesChanged,(n)=>{this.emitWhenConnected(I.ParticipantAttributesChanged,n,l)}).on(N.ConnectionQualityChanged,(n)=>{this.emitWhenConnected(I.ConnectionQualityChanged,n,l)}).on(N.ParticipantPermissionsChanged,(n)=>{this.emitWhenConnected(I.ParticipantPermissionsChanged,n,l)}).on(N.TrackSubscriptionStatusChanged,(n,r)=>{this.emitWhenConnected(I.TrackSubscriptionStatusChanged,n,r,l)}).on(N.TrackSubscriptionFailed,(n,r)=>{this.emit(I.TrackSubscriptionFailed,n,l,r)}).on(N.TrackSubscriptionPermissionChanged,(n,r)=>{this.emitWhenConnected(I.TrackSubscriptionPermissionChanged,n,r,l)}).on(N.Active,()=>{if(this.emitWhenConnected(I.ParticipantActive,l),l.kind===Ue.AGENT)this.localParticipant.setActiveAgent(l)}),e)l.updateInfo(e);return l}sendSyncState(){let t=Array.from(this.remoteParticipants.values()).reduce((n,r)=>{return n.push(...r.getTrackPublications()),n},[]),e=this.localParticipant.getTrackPublications(),l=this.outgoingDataTrackManager.queryPublished();this.engine.sendSyncState(t,e,l)}updateSubscriptions(){for(let t of this.remoteParticipants.values())for(let e of t.videoTrackPublications.values())if(e.isSubscribed&&ka(e))e.emitTrackUpdate()}getRemoteParticipantBySid(t){let e=this.sidToIdentity.get(t);if(e)return this.remoteParticipants.get(e)}registerConnectionReconcile(){this.clearConnectionReconcile();let t=0;this.connectionReconcileInterval=et.setInterval(()=>{if(!this.engine||this.engine.isClosed||!this.engine.verifyTransport()){if(t++,this.log.warn("detected connection state mismatch",Object.assign(Object.assign({},this.logContext),{numFailures:t,engine:this.engine?{closed:this.engine.isClosed,transportsConnectedOrConnecting:this.engine.verifyTransport()}:void 0})),t>=3)this.recreateEngine(),this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,Gt.STATE_MISMATCH)}else t=0},dx)}clearConnectionReconcile(){if(this.connectionReconcileInterval)et.clearInterval(this.connectionReconcileInterval)}setAndEmitConnectionState(t){if(t===this.state)return!1;return this.state=t,this.emit(I.ConnectionStateChanged,this.state),!0}emitBufferedEvents(){this.bufferedEvents.forEach((t)=>{let[e,l]=t;this.emit(e,...l)}),this.bufferedEvents=[]}emitWhenConnected(t){for(var e=arguments.length,l=Array(e>1?e-1:0),n=1;n<e;n++)l[n-1]=arguments[n];if(this.state===K.Reconnecting||this.isResuming||!this.engine||this.engine.pendingReconnect)this.bufferedEvents.push([t,l]);else if(this.state===K.Connected)return this.emit(t,...l);return!1}simulateParticipants(t){return a(this,void 0,void 0,function*(){var e,l,n,r;let o=Object.assign({audio:!0,video:!0,useRealTracks:!1},t.publish),s=Object.assign({count:9,audio:!1,video:!0,aspectRatios:[1.66,1.7,1.3]},t.participants);if(this.handleDisconnect(),this.roomInfo=new Cn({sid:"RM_SIMULATED",name:"simulated-room",emptyTimeout:0,maxParticipants:0,creationTime:P.parse(new Date().getTime()),metadata:"",numParticipants:1,numPublishers:1,turnPassword:"",enabledCodecs:[],activeRecording:!1}),this.localParticipant.updateInfo(new Ve({identity:"simulated-local",name:"local-name"})),this.setupLocalParticipantEvents(),this.emit(I.SignalConnected),this.emit(I.Connected),this.setAndEmitConnectionState(K.Connected),o.video){let c=new Ml(L.Kind.Video,new Ze({source:rt.CAMERA,sid:Math.floor(Math.random()*1e4).toString(),type:Vt.AUDIO,name:"video-dummy"}),new Oe(o.useRealTracks&&((e=window.navigator.mediaDevices)===null||e===void 0?void 0:e.getUserMedia)?(yield window.navigator.mediaDevices.getUserMedia({video:!0})).getVideoTracks()[0]:Zr(160*((l=s.aspectRatios[0])!==null&&l!==void 0?l:1),160,!0,!0),void 0,!1,{loggerName:this.options.loggerName,loggerContextCb:()=>this.logContext}),{loggerName:this.options.loggerName,loggerContextCb:()=>this.logContext});this.localParticipant.addTrackPublication(c),this.localParticipant.emit(N.LocalTrackPublished,c)}if(o.audio){let c=new Ml(L.Kind.Audio,new Ze({source:rt.MICROPHONE,sid:Math.floor(Math.random()*1e4).toString(),type:Vt.AUDIO}),new ze(o.useRealTracks&&((n=navigator.mediaDevices)===null||n===void 0?void 0:n.getUserMedia)?(yield navigator.mediaDevices.getUserMedia({audio:!0})).getAudioTracks()[0]:tn(),void 0,!1,this.audioContext,{loggerName:this.options.loggerName,loggerContextCb:()=>this.logContext}),{loggerName:this.options.loggerName,loggerContextCb:()=>this.logContext});this.localParticipant.addTrackPublication(c),this.localParticipant.emit(N.LocalTrackPublished,c)}for(let c=0;c<s.count-1;c+=1){let i=new Ve({sid:Math.floor(Math.random()*1e4).toString(),identity:"simulated-".concat(c),state:Ke.ACTIVE,tracks:[],joinedAt:P.parse(Date.now())}),h=this.getOrCreateParticipant(i.identity,i);if(s.video){let f=Zr(160*((r=s.aspectRatios[c%s.aspectRatios.length])!==null&&r!==void 0?r:1),160,!1,!0),u=new Ze({source:rt.CAMERA,sid:Math.floor(Math.random()*1e4).toString(),type:Vt.AUDIO});h.addSubscribedMediaTrack(f,u.sid,new MediaStream([f]),new RTCRtpReceiver),i.tracks=[...i.tracks,u]}if(s.audio){let f=tn(),u=new Ze({source:rt.MICROPHONE,sid:Math.floor(Math.random()*1e4).toString(),type:Vt.AUDIO});h.addSubscribedMediaTrack(f,u.sid,new MediaStream([f]),new RTCRtpReceiver),i.tracks=[...i.tracks,u]}h.updateInfo(i)}})}emit(t){for(var e=arguments.length,l=Array(e>1?e-1:0),n=1;n<e;n++)l[n-1]=arguments[n];if(t!==I.ActiveSpeakersChanged&&t!==I.TranscriptionReceived){let r=gf(l).filter((o)=>o!==void 0);if(t===I.TrackSubscribed||t===I.TrackUnsubscribed)this.log.trace("subscribe trace: ".concat(t),Object.assign(Object.assign({},this.logContext),{event:t,args:r}));this.log.debug("room event ".concat(t),Object.assign(Object.assign({},this.logContext),{event:t,args:r}))}return super.emit(t,...l)}};nl.cleanupRegistry=typeof FinalizationRegistry<"u"&&new FinalizationRegistry((t)=>{t()});ax=Object.freeze({__proto__:null,Convert:wf});(function(t){t[t.IDLE=0]="IDLE",t[t.RUNNING=1]="RUNNING",t[t.SKIPPED=2]="SKIPPED",t[t.SUCCESS=3]="SUCCESS",t[t.FAILED=4]="FAILED"})(Et||(Et={}));_t=class _t extends zt.EventEmitter{constructor(t,e){let l=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};super();this.status=Et.IDLE,this.logs=[],this.options={},this.url=t,this.token=e,this.name=this.constructor.name,this.room=new nl(l.roomOptions),this.connectOptions=l.connectOptions,this.options=l}run(t){return a(this,void 0,void 0,function*(){if(this.status!==Et.IDLE)throw Error("check is running already");this.setStatus(Et.RUNNING);try{yield this.perform()}catch(e){if(e instanceof Error)if(this.options.errorsAsWarnings)this.appendWarning(e.message);else this.appendError(e.message)}if(yield this.disconnect(),yield new Promise((e)=>setTimeout(e,500)),this.status!==Et.SKIPPED)this.setStatus(this.isSuccess()?Et.SUCCESS:Et.FAILED);if(t)t();return this.getInfo()})}isSuccess(){return!this.logs.some((t)=>t.level==="error")}connect(t){return a(this,void 0,void 0,function*(){if(this.room.state===K.Connected)return this.room;if(!t)t=this.url;return yield this.room.connect(t,this.token,this.connectOptions),this.room})}disconnect(){return a(this,void 0,void 0,function*(){if(this.room&&this.room.state!==K.Disconnected)yield this.room.disconnect(),yield new Promise((t)=>setTimeout(t,500))})}skip(){this.setStatus(Et.SKIPPED)}switchProtocol(t){return a(this,void 0,void 0,function*(){let e=!1,l=!1;if(this.room.on(I.Reconnecting,()=>{e=!0}),this.room.once(I.Reconnected,()=>{l=!0}),this.room.simulateScenario("force-".concat(t)),yield new Promise((r)=>setTimeout(r,1000)),!e)return;let n=Date.now()+1e4;while(Date.now()<n){if(l)return;yield ut(100)}throw Error("Could not reconnect using ".concat(t," protocol after 10 seconds"))})}appendMessage(t){this.logs.push({level:"info",message:t}),this.emit("update",this.getInfo())}appendWarning(t){this.logs.push({level:"warning",message:t}),this.emit("update",this.getInfo())}appendError(t){this.logs.push({level:"error",message:t}),this.emit("update",this.getInfo())}setStatus(t){this.status=t,this.emit("update",this.getInfo())}get engine(){var t;return(t=this.room)===null||t===void 0?void 0:t.engine}getInfo(){return{logs:this.logs,name:this.name,status:this.status,description:this.description}}};mf=class mf extends _t{get description(){return"Cloud regions"}perform(){return a(this,void 0,void 0,function*(){let t=new Z(this.url,this.token);if(!t.isCloud()){this.skip();return}let e=[],l=new Set;for(let r=0;r<3;r++){let o=yield t.getNextBestRegionUrl();if(!o)break;if(l.has(o))continue;l.add(o);let s=yield this.checkCloudRegion(o);this.appendMessage("".concat(s.region," RTT: ").concat(s.rtt,"ms, duration: ").concat(s.duration,"ms")),e.push(s)}e.sort((r,o)=>{return(r.duration-o.duration)*0.5+(r.rtt-o.rtt)*0.5});let n=e[0];this.bestStats=n,this.appendMessage("best Cloud region: ".concat(n.region))})}getInfo(){let t=super.getInfo();return t.data=this.bestStats,t}checkCloudRegion(t){return a(this,void 0,void 0,function*(){var e,l;if(yield this.connect(t),this.options.protocol==="tcp")yield this.switchProtocol("tcp");let n=(e=this.room.serverInfo)===null||e===void 0?void 0:e.region;if(!n)throw Error("Region not found");let r=yield this.room.localParticipant.streamText({topic:"test"}),o=1000,c=1e6/o,i="A".repeat(o),h=Date.now();for(let x=0;x<c;x++)yield r.write(i);yield r.close();let f=Date.now(),u=yield(l=this.room.engine.pcManager)===null||l===void 0?void 0:l.publisher.getStats(),d={region:n,rtt:1e4,duration:f-h};return u===null||u===void 0||u.forEach((x)=>{if(x.type==="candidate-pair"&&x.nominated)d.rtt=x.currentRoundTripTime*1000}),yield this.disconnect(),d})}};yf=class yf extends _t{get description(){return"Connection via UDP vs TCP"}perform(){return a(this,void 0,void 0,function*(){let t=yield this.checkConnectionProtocol("udp"),e=yield this.checkConnectionProtocol("tcp");if(this.bestStats=t,t.qualityLimitationDurations.bandwidth-e.qualityLimitationDurations.bandwidth>0.5||(t.packetsLost-e.packetsLost)/t.packetsSent>0.01)this.appendMessage("best connection quality via tcp"),this.bestStats=e;else this.appendMessage("best connection quality via udp");let l=this.bestStats;if(this.appendMessage("upstream bitrate: ".concat((l.bitrateTotal/l.count/1000/1000).toFixed(2)," mbps")),this.appendMessage("RTT: ".concat((l.rttTotal/l.count*1000).toFixed(2)," ms")),this.appendMessage("jitter: ".concat((l.jitterTotal/l.count*1000).toFixed(2)," ms")),l.packetsLost>0)this.appendWarning("packets lost: ".concat((l.packetsLost/l.packetsSent*100).toFixed(2),"%"));if(l.qualityLimitationDurations.bandwidth>1)this.appendWarning("bandwidth limited ".concat((l.qualityLimitationDurations.bandwidth/(Lr/1000)*100).toFixed(2),"%"));if(l.qualityLimitationDurations.cpu>0)this.appendWarning("cpu limited ".concat((l.qualityLimitationDurations.cpu/(Lr/1000)*100).toFixed(2),"%"))})}getInfo(){let t=super.getInfo();return t.data=this.bestStats,t}checkConnectionProtocol(t){return a(this,void 0,void 0,function*(){if(yield this.connect(),t==="tcp")yield this.switchProtocol("tcp");else yield this.switchProtocol("udp");let e=document.createElement("canvas");e.width=1280,e.height=720;let l=e.getContext("2d");if(!l)throw Error("Could not get canvas context");let n=0,r=()=>{n=(n+1)%360,l.fillStyle="hsl(".concat(n,", 100%, 50%)"),l.fillRect(0,0,e.width,e.height),requestAnimationFrame(r)};r();let s=e.captureStream(30).getVideoTracks()[0],i=(yield this.room.localParticipant.publishTrack(s,{simulcast:!1,degradationPreference:"maintain-resolution",videoEncoding:{maxBitrate:2000000}})).track,h={protocol:t,packetsLost:0,packetsSent:0,qualityLimitationDurations:{},rttTotal:0,jitterTotal:0,bitrateTotal:0,count:0},f=setInterval(()=>a(this,void 0,void 0,function*(){let u=yield i.getRTCStatsReport();u===null||u===void 0||u.forEach((d)=>{if(d.type==="outbound-rtp")h.packetsSent=d.packetsSent,h.qualityLimitationDurations=d.qualityLimitationDurations,h.bitrateTotal+=d.targetBitrate,h.count++;else if(d.type==="remote-inbound-rtp")h.packetsLost=d.packetsLost,h.rttTotal+=d.roundTripTime,h.jitterTotal+=d.jitter})}),1000);return yield new Promise((u)=>setTimeout(u,Lr)),clearInterval(f),s.stop(),e.remove(),yield this.disconnect(),h})}};Af=class Af extends _t{get description(){return"Can publish audio"}perform(){return a(this,void 0,void 0,function*(){var t;let e=yield this.connect(),l=yield bf();if(yield wh(l,1000))throw Error("unable to detect audio from microphone");this.appendMessage("detected audio from microphone"),e.localParticipant.publishTrack(l),yield new Promise((s)=>setTimeout(s,3000));let r=yield(t=l.sender)===null||t===void 0?void 0:t.getStats();if(!r)throw Error("Could not get RTCStats");let o=0;if(r.forEach((s)=>{if(s.type==="outbound-rtp"&&(s.kind==="audio"||!s.kind&&s.mediaType==="audio"))o=s.packetsSent}),o===0)throw Error("Could not determine packets are sent");this.appendMessage("published ".concat(o," audio packets"))})}};pf=class pf extends _t{get description(){return"Can publish video"}perform(){return a(this,void 0,void 0,function*(){var t;let e=yield this.connect(),l=yield af();yield this.checkForVideo(l.mediaStreamTrack),e.localParticipant.publishTrack(l),yield new Promise((o)=>setTimeout(o,5000));let n=yield(t=l.sender)===null||t===void 0?void 0:t.getStats();if(!n)throw Error("Could not get RTCStats");let r=0;if(n.forEach((o)=>{if(o.type==="outbound-rtp"&&(o.kind==="video"||!o.kind&&o.mediaType==="video"))r+=o.packetsSent}),r===0)throw Error("Could not determine packets are sent");this.appendMessage("published ".concat(r," video packets"))})}checkForVideo(t){return a(this,void 0,void 0,function*(){let e=new MediaStream;e.addTrack(t.clone());let l=document.createElement("video");l.srcObject=e,l.muted=!0,l.autoplay=!0,l.playsInline=!0,l.setAttribute("playsinline","true"),document.body.appendChild(l),yield new Promise((n)=>{l.onplay=()=>{setTimeout(()=>{var r,o,s,c;let i=document.createElement("canvas"),h=t.getSettings(),f=(o=(r=h.width)!==null&&r!==void 0?r:l.videoWidth)!==null&&o!==void 0?o:1280,u=(c=(s=h.height)!==null&&s!==void 0?s:l.videoHeight)!==null&&c!==void 0?c:720;i.width=f,i.height=u;let d=i.getContext("2d");d.drawImage(l,0,0);let g=d.getImageData(0,0,i.width,i.height).data,w=!0;for(let p=0;p<g.length;p+=4)if(g[p]!==0||g[p+1]!==0||g[p+2]!==0){w=!1;break}if(w)this.appendError("camera appears to be producing only black frames");else this.appendMessage("received video frames");n()},1000)},l.play()}),e.getTracks().forEach((n)=>n.stop()),l.remove()})}};Lf=class Lf extends _t{get description(){return"Resuming connection after interruption"}perform(){return a(this,void 0,void 0,function*(){var t;let e=yield this.connect(),l=!1,n=!1,r,o=new Promise((i)=>{setTimeout(i,5000),r=i}),s=()=>{l=!0};e.on(I.SignalReconnecting,s).on(I.Reconnecting,s).on(I.Reconnected,()=>{n=!0,r(!0)}),(t=e.engine.client.ws)===null||t===void 0||t.close();let c=e.engine.client.onClose;if(c)c("");if(yield o,!l)throw Error("Did not attempt to reconnect");else if(!n||e.state!==K.Connected)throw this.appendWarning("reconnection is only possible in Redis-based configurations"),Error("Not able to reconnect")})}};Cf=class Cf extends _t{get description(){return"Can connect via TURN"}perform(){return a(this,void 0,void 0,function*(){var t,e,l;if(tl(new URL(this.url)))this.appendMessage("Using region specific url"),this.url=(t=yield new Z(this.url,this.token).getNextBestRegionUrl())!==null&&t!==void 0?t:this.url;let n=new Vn,r=yield n.join(this.url,this.token,{autoSubscribe:!0,maxRetries:0,e2eeEnabled:!1,websocketTimeout:15000},void 0,!0),o=!1,s=!1,c=!1;for(let i of r.iceServers)for(let h of i.urls){if(h.startsWith("turn:"))s=!0,c=!0;else if(h.startsWith("turns:"))s=!0,c=!0,o=!0;if(h.startsWith("stun:"))c=!0}if(!c)this.appendWarning("No STUN servers configured on server side.");else if(s&&!o)this.appendWarning("TURN is configured server side, but TURN/TLS is unavailable.");if(yield n.close(),((l=(e=this.connectOptions)===null||e===void 0?void 0:e.rtcConfig)===null||l===void 0?void 0:l.iceServers)||s)yield this.room.connect(this.url,this.token,{rtcConfig:{iceTransportPolicy:"relay"}});else this.appendWarning("No TURN servers configured."),this.skip(),yield new Promise((i)=>setTimeout(i,0))})}};If=class If extends _t{get description(){return"Establishing WebRTC connection"}perform(){return a(this,void 0,void 0,function*(){let t=!1,e=!1;this.room.on(I.SignalConnected,()=>{var l;let n=this.room.engine.client.onTrickle;if(this.room.engine.client.onTrickle=(r,o)=>{if(r.candidate){let s=new RTCIceCandidate(r),c="".concat(s.protocol," ").concat(s.address,":").concat(s.port," ").concat(s.type);if(s.address){if(bx(s.address))c+=" (private)";else if(s.protocol==="tcp"&&s.tcpType==="passive")t=!0,c+=" (passive)";else if(s.protocol==="udp")e=!0}this.appendMessage(c)}if(n)n(r,o)},(l=this.room.engine.pcManager)===null||l===void 0?void 0:l.subscriber)this.room.engine.pcManager.subscriber.onIceCandidateError=(r)=>{if(r instanceof RTCPeerConnectionIceErrorEvent)this.appendWarning("error with ICE candidate: ".concat(r.errorCode," ").concat(r.errorText," ").concat(r.url))}});try{yield this.connect(),O.info("now the room is connected")}catch(l){throw this.appendWarning("ports need to be open on firewall in order to connect."),l}if(!t)this.appendWarning("Server is not configured for ICE/TCP");if(!e)this.appendWarning("No public IPv4 UDP candidates were found. Your server is likely not configured correctly")})}};Bf=class Bf extends _t{get description(){return"Connecting to signal connection via WebSocket"}perform(){return a(this,void 0,void 0,function*(){var t,e,l;if(this.url.startsWith("ws:")||this.url.startsWith("http:"))this.appendWarning("Server is insecure, clients may block connections to it");let n=new Vn,r;try{r=yield n.join(this.url,this.token,{autoSubscribe:!0,maxRetries:0,e2eeEnabled:!1,websocketTimeout:15000},void 0,!0)}catch(o){if(tl(new URL(this.url))){this.appendMessage("Initial connection failed with error ".concat(o.message,". Retrying with region fallback"));let c=yield new Z(this.url,this.token).getNextBestRegionUrl();if(c)r=yield n.join(c,this.token,{autoSubscribe:!0,maxRetries:0,e2eeEnabled:!1,websocketTimeout:15000},void 0,!0),this.appendMessage("Fallback to region worked. To avoid initial connections failing, ensure you're calling room.prepareConnection() ahead of time")}}if(r){if(this.appendMessage("Connected to server, version ".concat(r.serverVersion,".")),((t=r.serverInfo)===null||t===void 0?void 0:t.edition)===oc.Cloud&&((e=r.serverInfo)===null||e===void 0?void 0:e.region))this.appendMessage("LiveKit Cloud: ".concat((l=r.serverInfo)===null||l===void 0?void 0:l.region))}else this.appendError("Websocket connection could not be established");yield n.close()})}};Wf=class Wf extends zt.EventEmitter{constructor(t,e){let l=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};super();this.options={},this.checkResults=new Map,this.url=t,this.token=e,this.options=l}getNextCheckId(){let t=this.checkResults.size;return this.checkResults.set(t,{logs:[],status:Et.IDLE,name:"",description:""}),t}updateCheck(t,e){this.checkResults.set(t,e),this.emit("checkUpdate",t,e)}isSuccess(){return Array.from(this.checkResults.values()).every((t)=>t.status!==Et.FAILED)}getResults(){return Array.from(this.checkResults.values())}createAndRunCheck(t){return a(this,void 0,void 0,function*(){let e=this.getNextCheckId(),l=new t(this.url,this.token,this.options),n=(o)=>{this.updateCheck(e,o)};l.on("update",n);let r=yield l.run();return l.off("update",n),r})}checkWebsocket(){return a(this,void 0,void 0,function*(){return this.createAndRunCheck(Bf)})}checkWebRTC(){return a(this,void 0,void 0,function*(){return this.createAndRunCheck(If)})}checkTURN(){return a(this,void 0,void 0,function*(){return this.createAndRunCheck(Cf)})}checkReconnect(){return a(this,void 0,void 0,function*(){return this.createAndRunCheck(Lf)})}checkPublishAudio(){return a(this,void 0,void 0,function*(){return this.createAndRunCheck(Af)})}checkPublishVideo(){return a(this,void 0,void 0,function*(){return this.createAndRunCheck(pf)})}checkConnectionProtocol(){return a(this,void 0,void 0,function*(){let t=yield this.createAndRunCheck(yf);if(t.data&&"protocol"in t.data){let e=t.data;this.options.protocol=e.protocol}return t})}checkCloudRegion(){return a(this,void 0,void 0,function*(){return this.createAndRunCheck(mf)})}};eo=new TextDecoder;bt=class bt extends Error{constructor(t,e){var l;super(t,e);Q(this,"code","ERR_JOSE_GENERIC"),this.name=this.constructor.name,(l=Error.captureStackTrace)===null||l===void 0||l.call(Error,this,this.constructor)}};Q(bt,"code","ERR_JOSE_GENERIC");Rf=class Rf extends bt{constructor(t,e){let l=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"unspecified",n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"unspecified";super(t,{cause:{claim:l,reason:n,payload:e}});Q(this,"code","ERR_JWT_CLAIM_VALIDATION_FAILED"),Q(this,"claim",void 0),Q(this,"reason",void 0),Q(this,"payload",void 0),this.claim=l,this.reason=n,this.payload=e}};Q(Rf,"code","ERR_JWT_CLAIM_VALIDATION_FAILED");$f=class $f extends bt{constructor(t,e){let l=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"unspecified",n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"unspecified";super(t,{cause:{claim:l,reason:n,payload:e}});Q(this,"code","ERR_JWT_EXPIRED"),Q(this,"claim",void 0),Q(this,"reason",void 0),Q(this,"payload",void 0),this.claim=l,this.reason=n,this.payload=e}};Q($f,"code","ERR_JWT_EXPIRED");Nf=class Nf extends bt{constructor(){super(...arguments);Q(this,"code","ERR_JOSE_ALG_NOT_ALLOWED")}};Q(Nf,"code","ERR_JOSE_ALG_NOT_ALLOWED");Mf=class Mf extends bt{constructor(){super(...arguments);Q(this,"code","ERR_JOSE_NOT_SUPPORTED")}};Q(Mf,"code","ERR_JOSE_NOT_SUPPORTED");Hf=class Hf extends bt{constructor(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"decryption operation failed",e=arguments.length>1?arguments[1]:void 0;super(t,e);Q(this,"code","ERR_JWE_DECRYPTION_FAILED")}};Q(Hf,"code","ERR_JWE_DECRYPTION_FAILED");Ef=class Ef extends bt{constructor(){super(...arguments);Q(this,"code","ERR_JWE_INVALID")}};Q(Ef,"code","ERR_JWE_INVALID");Vf=class Vf extends bt{constructor(){super(...arguments);Q(this,"code","ERR_JWS_INVALID")}};Q(Vf,"code","ERR_JWS_INVALID");re=class re extends bt{constructor(){super(...arguments);Q(this,"code","ERR_JWT_INVALID")}};Q(re,"code","ERR_JWT_INVALID");Xf=class Xf extends bt{constructor(){super(...arguments);Q(this,"code","ERR_JWK_INVALID")}};Q(Xf,"code","ERR_JWK_INVALID");Gf=class Gf extends bt{constructor(){super(...arguments);Q(this,"code","ERR_JWKS_INVALID")}};Q(Gf,"code","ERR_JWKS_INVALID");zf=class zf extends bt{constructor(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"no applicable key found in the JSON Web Key Set",e=arguments.length>1?arguments[1]:void 0;super(t,e);Q(this,"code","ERR_JWKS_NO_MATCHING_KEY")}};Q(zf,"code","ERR_JWKS_NO_MATCHING_KEY");Of=class Of extends bt{constructor(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"multiple matching keys found in the JSON Web Key Set",e=arguments.length>1?arguments[1]:void 0;super(t,e);Q(this,Symbol.asyncIterator,void 0),Q(this,"code","ERR_JWKS_MULTIPLE_MATCHING_KEYS")}};Q(Of,"code","ERR_JWKS_MULTIPLE_MATCHING_KEYS");Df=class Df extends bt{constructor(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"request timed out",e=arguments.length>1?arguments[1]:void 0;super(t,e);Q(this,"code","ERR_JWKS_TIMEOUT")}};Q(Df,"code","ERR_JWKS_TIMEOUT");Yf=class Yf extends bt{constructor(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"signature verification failed",e=arguments.length>1?arguments[1]:void 0;super(t,e);Q(this,"code","ERR_JWS_SIGNATURE_VERIFICATION_FAILED")}};Q(Yf,"code","ERR_JWS_SIGNATURE_VERIFICATION_FAILED");Lx=60*lo;Uo=class Uo extends ko{constructor(){super(...arguments);this.cachedFetchOptions=null,this.cachedResponse=null,this.fetchMutex=new ht}isSameAsCachedFetchOptions(t){if(!this.cachedFetchOptions)return!1;for(let e of Object.keys(this.cachedFetchOptions))switch(e){case"roomName":case"participantName":case"participantIdentity":case"participantMetadata":case"participantAttributes":case"agentName":case"agentMetadata":if(this.cachedFetchOptions[e]!==t[e])return!1;break;default:let l=e;throw Error("Options key ".concat(l," not being checked for equality!"))}return!0}shouldReturnCachedValueFromFetch(t){if(!this.cachedResponse)return!1;if(!Cx(this.cachedResponse))return!1;if(!this.isSameAsCachedFetchOptions(t))return!1;return!0}getCachedResponseJwtPayload(){if(!this.cachedResponse)return null;return Po(this.cachedResponse.participantToken)}fetch(t,e){return a(this,void 0,void 0,function*(){let l=yield this.fetchMutex.lock();try{if(e)this.cachedResponse=null;if(this.shouldReturnCachedValueFromFetch(t))return this.cachedResponse.toJson();this.cachedFetchOptions=t;let n=yield this.update(t);return this.cachedResponse=n,n.toJson()}finally{l()}})}};Qf=class Qf extends Fo{constructor(t){super();this.literalOrFn=t}fetch(){return a(this,void 0,void 0,function*(){if(typeof this.literalOrFn==="function")return this.literalOrFn();else return this.literalOrFn})}};Sf=class Sf extends Uo{constructor(t){super();this.customFn=t}update(t){return a(this,void 0,void 0,function*(){let e=this.customFn(t),l;if(e instanceof Promise)l=yield e;else l=e;return Rc.fromJson(l,{ignoreUnknownFields:!0})})}};Jo=class Jo extends Uo{constructor(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};super();this.url=t,this.endpointOptions=e}createRequestFromOptions(t){var e,l,n;let r=new ea;for(let o of Object.keys(t))switch(o){case"roomName":case"participantName":case"participantIdentity":case"participantMetadata":r[o]=t[o];break;case"participantAttributes":r.participantAttributes=(e=t.participantAttributes)!==null&&e!==void 0?e:{};break;case"agentName":if(r.roomConfig=(l=r.roomConfig)!==null&&l!==void 0?l:new fn,r.roomConfig.agents.length===0)r.roomConfig.agents.push(new Br);r.roomConfig.agents[0].agentName=t.agentName;break;case"agentMetadata":if(r.roomConfig=(n=r.roomConfig)!==null&&n!==void 0?n:new fn,r.roomConfig.agents.length===0)r.roomConfig.agents.push(new Br);r.roomConfig.agents[0].metadata=t.agentMetadata;break;default:let s=o;throw Error("Options key ".concat(s," not being included in forming request!"))}return r}update(t){return a(this,void 0,void 0,function*(){var e;let l=this.createRequestFromOptions(t),n=yield fetch(this.url,Object.assign(Object.assign({},this.endpointOptions),{method:(e=this.endpointOptions.method)!==null&&e!==void 0?e:"POST",headers:Object.assign({"Content-Type":"application/json"},this.endpointOptions.headers),body:l.toJsonString({useProtoFieldName:!0})}));if(!n.ok)throw Error("Error generating token from endpoint ".concat(this.url,": received ").concat(n.status," / ").concat(yield n.text()));let r=yield n.json();return Rc.fromJson(r,{ignoreUnknownFields:!0})})}};Zf=class Zf extends Jo{constructor(t,e){let{baseUrl:l="https://cloud-api.livekit.io"}=e,n=yo(e,["baseUrl"]);super("".concat(l,"/api/v2/sandbox/connection-details"),Object.assign(Object.assign({},n),{headers:{"X-Sandbox-ID":t}}))}};Bx={literal(t){return new Qf(t)},custom(t){return new Sf(t)},endpoint(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return new Jo(t,e)},sandboxTokenServer(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return new Zf(t,e)}};Wi=new Map([["obs virtual camera",{facingMode:"environment",confidence:"medium"}]]),Rx=new Map([["iphone",{facingMode:"environment",confidence:"medium"}],["ipad",{facingMode:"environment",confidence:"medium"}]])});var ts="https://sable-api-gateway-9dfmhij9.wl.gateway.dev";async function es(t){let e=new URL("/connection-details",t.apiUrl);e.searchParams.set("agentPublicId",t.publicKey),e.searchParams.set("bridge","user");let l=await fetch(e.toString());if(!l.ok){let n=await l.text().catch(()=>"");throw Error(`connection-details failed: ${l.status} ${n}`)}return await l.json()}class kn{listeners=new Map;on(t,e){let l=this.listeners.get(t);if(!l)l=new Set,this.listeners.set(t,l);return l.add(e),()=>{l?.delete(e)}}emit(t,e){let l=this.listeners.get(t);if(!l||l.size===0)return;for(let n of l)try{n(e)}catch(r){console.warn(`[Sable] event handler for "${String(t)}" threw`,r)}}clear(){this.listeners.clear()}}function ls(t){try{return t?JSON.parse(t):{}}catch{return{}}}async function Pn(t,e){let l=typeof e.message==="string"?e.message:"",r=(typeof e.url==="string"?e.url:"")||l;if(!r)return console.warn(`[Sable] ${t}: empty payload, nothing to copy`),{success:!1,error:"empty payload"};try{if(navigator.clipboard?.writeText)return await navigator.clipboard.writeText(r),{success:!0};let o=document.createElement("textarea");o.value=r,o.style.position="fixed",o.style.opacity="0",document.body.appendChild(o),o.select();let s=document.execCommand("copy");if(document.body.removeChild(o),!s)throw Error("execCommand copy returned false");return{success:!0}}catch(o){let s=o instanceof Error?o.message:String(o);return console.warn(`[Sable] ${t}: copy failed`,s),{success:!1,error:s}}}var ol=null;function sl(){if(ol)ol.remove(),ol=null}function ns(t){sl();let e=document.createElement("div");e.setAttribute("data-sable","view-overlay"),Object.assign(e.style,{position:"fixed",top:"50%",left:"50%",transform:"translate(-50%, -50%)",zIndex:"2147483646",background:"rgba(0, 0, 0, 0.85)",borderRadius:"12px",padding:"8px",boxShadow:"0 10px 40px rgba(0, 0, 0, 0.5)",maxWidth:"min(80vw, 960px)",maxHeight:"80vh",display:"flex",flexDirection:"column",gap:"8px"});let l=document.createElement("button");l.textContent="✕",l.setAttribute("aria-label","Close video"),Object.assign(l.style,{alignSelf:"flex-end",background:"rgba(255,255,255,0.15)",color:"white",border:"none",borderRadius:"999px",width:"28px",height:"28px",cursor:"pointer",fontSize:"14px",lineHeight:"1"}),l.addEventListener("click",sl);let n=document.createElement("video");n.src=t,n.controls=!1,n.autoplay=!0,n.playsInline=!0,n.disablePictureInPicture=!0,n.setAttribute("controlslist","nodownload nofullscreen noremoteplayback noplaybackrate"),Object.assign(n.style,{maxWidth:"100%",maxHeight:"70vh",borderRadius:"8px",display:"block"});let r=()=>{if(ol===e)sl()};n.addEventListener("ended",r),e.appendChild(l),e.appendChild(n),document.body.appendChild(e),ol=e,n.play().catch((o)=>{console.warn("[Sable] switchView video autoplay blocked",o)})}function st(){return Promise.resolve({success:!0})}var Un={sendToolMessage:(t)=>Pn("sendToolMessage",t),sendCopyableText:(t)=>Pn("sendCopyableText",t),switchView:async(t)=>{let e=typeof t.mode==="string"?t.mode:"",l=typeof t.url==="string"?t.url:"";if(e==="video"&&l)try{return ns(l),{success:!0}}catch(n){let r=n instanceof Error?n.message:String(n);return console.warn("[Sable] switchView: failed to mount video overlay",r),{success:!1,error:r}}return sl(),{success:!0}},setCallControlsEnabled:st,setUserInputEnabled:st,setAgentInControl:st,showSuggestedReplies:st,hideSuggestedReplies:st,highlightHangup:st,hideVideo:st,showVideo:st,stopScreenShare:st,showSlide:st,hideSlide:st,responseFailed:st,requestContinue:st,greetingComplete:st,speechComplete:st,enableMicrophone:st,requestDisconnect:st,setNickelSession:st};function tu(t,e){return async(l)=>{let n=ls(l.payload);try{let r=await e(n);return JSON.stringify(r??{success:!0})}catch(r){let o=r instanceof Error?r.message:String(r);return console.warn(`[Sable] runtime method "${t}" threw`,o),JSON.stringify({success:!1,error:o})}}}function rs(t,e={}){let l={...Un,...e};for(let[o,s]of Object.entries(l))t.registerRpcMethod(o,tu(o,s));let n=Object.keys(e).filter((o)=>(o in Un)),r=Object.keys(e).filter((o)=>!(o in Un));console.log("[Sable] runtime installed",{total:Object.keys(l).length,overrides:n,extensions:r})}function eu(t){return typeof t==="object"&&t!==null&&typeof t.x==="number"&&typeof t.y==="number"}function Jn(t){if(eu(t))return document.elementFromPoint(t.x,t.y);if(typeof t==="string")try{return document.querySelector(t)}catch{return null}return null}async function os(t){switch(t.kind){case"click":{let e=Jn(t.payload);if(!e)throw Error("click: target not found");e.scrollIntoView({block:"center",inline:"center"}),e.click();return}case"hover":{let e=Jn(t.payload);if(!e)return;e.dispatchEvent(new MouseEvent("mouseover",{bubbles:!0,cancelable:!0}));return}case"type":{let e=Jn(t.payload);if(!e)throw Error("type: target not found");let l=e;if(l.focus(),t.replace)l.value="";let n=t.text??"",r=l instanceof HTMLTextAreaElement?HTMLTextAreaElement.prototype:HTMLInputElement.prototype,o=Object.getOwnPropertyDescriptor(r,"value")?.set;if(o)o.call(l,(l.value??"")+n);else l.value=(l.value??"")+n;l.dispatchEvent(new Event("input",{bubbles:!0})),l.dispatchEvent(new Event("change",{bubbles:!0}));return}case"key":{let e=document.activeElement??document.body,l=t.key??"";e.dispatchEvent(new KeyboardEvent("keydown",{key:l,bubbles:!0,cancelable:!0})),e.dispatchEvent(new KeyboardEvent("keyup",{key:l,bubbles:!0,cancelable:!0}));return}case"clear":{let e=document.activeElement;if(!e||!("value"in e))return;e.value="",e.dispatchEvent(new Event("input",{bubbles:!0})),e.dispatchEvent(new Event("change",{bubbles:!0}));return}case"navigate":{let e=t.url??"";if(!e)return;if(e===window.location.href)return;console.warn("[Sable] browser.navigate will reload the page; SDK must be re-injected on the new document",{url:e}),window.location.assign(e);return}case"evaluate":{let e=t.expression??"";(0,eval)(e);return}case"highlight_box":case"highlight_text":case"select_text":case"center_scroll":case"drag":case"hide_cursor":case"show_cursor":return;default:throw Error(`unsupported action kind: ${t.kind}`)}}var ss=` () => {
39
+ const vw = window.innerWidth || document.documentElement.clientWidth || 0;
40
+ const vh = window.innerHeight || document.documentElement.clientHeight || 0;
41
+ const sx = window.scrollX || window.pageXOffset || 0;
42
+ const sy = window.scrollY || window.pageYOffset || 0;
43
+
44
+ const clamp = (v, lo, hi) => Math.max(lo, Math.min(hi, v));
45
+ const norm = (s) => (s || "").trim().replace(/\\s+/g, " ");
46
+ const SKIP_TAGS = new Set(["script","style","noscript","template"]);
47
+ const WRAPPER_TAGS = new Set(["div","span","section","article","main","nav","header","footer"]);
48
+
49
+ const styleCache = new WeakMap();
50
+ const getStyleBits = (el) => {
51
+ const cached = styleCache.get(el);
52
+ if (cached) return cached;
53
+ let cs;
54
+ try { cs = window.getComputedStyle(el); } catch { cs = null; }
55
+ const bits = cs ? {
56
+ display: cs.display || "",
57
+ visibility: cs.visibility || "",
58
+ opacity: cs.opacity || "1",
59
+ } : { display: "", visibility: "", opacity: "1" };
60
+ styleCache.set(el, bits);
61
+ return bits;
62
+ };
63
+
64
+ // Cache for getBoundingClientRect - avoids redundant layout calls
65
+ const rectCache = new WeakMap();
66
+ const getCachedRect = (el) => {
67
+ const cached = rectCache.get(el);
68
+ if (cached !== undefined) return cached;
69
+ let r;
70
+ try { r = el.getBoundingClientRect(); } catch { r = null; }
71
+ rectCache.set(el, r);
72
+ return r;
73
+ };
74
+
75
+ // Cache for isControlLike - called multiple times per element
76
+ const controlCache = new WeakMap();
77
+
78
+ const isSkippableTag = (el) => {
79
+ const tag = (el.tagName || "").toLowerCase();
80
+ return !tag || SKIP_TAGS.has(tag);
81
+ };
82
+
83
+ const intersectViewport = (r) => {
84
+ const left = clamp(r.left, 0, vw);
85
+ const right = clamp(r.right, 0, vw);
86
+ const top = clamp(r.top, 0, vh);
87
+ const bottom = clamp(r.bottom, 0, vh);
88
+ const w = Math.max(0, right - left);
89
+ const h = Math.max(0, bottom - top);
90
+ return { x: left, y: top, width: w, height: h };
91
+ };
92
+
93
+ const roleOf = (el) => el.getAttribute?.("role") || null;
94
+
95
+ const directText = (el) => {
96
+ try {
97
+ let out = "";
98
+ for (const n of el.childNodes || []) {
99
+ if (n && n.nodeType === 3) {
100
+ const t = norm(n.textContent);
101
+ if (t) out += (out ? " " : "") + t;
102
+ }
103
+ }
104
+ return out;
105
+ } catch { return ""; }
106
+ };
107
+ const descendantText = (el, maxLen = 80) => {
108
+ try {
109
+ let t = norm(el.innerText || el.textContent || "");
110
+ if (!t) return "";
111
+ if (t.length > maxLen) t = t.slice(0, maxLen) + "…";
112
+ return t;
113
+ } catch { return ""; }
114
+ };
115
+
116
+ const isMedia = (el) => {
117
+ const tag = (el.tagName || "").toLowerCase();
118
+ return tag === "svg" || tag === "img" || tag === "canvas" || tag === "video";
119
+ };
120
+
121
+ const isControlLike = (el) => {
122
+ const cached = controlCache.get(el);
123
+ if (cached !== undefined) return cached;
124
+
125
+ const tag = (el.tagName || "").toLowerCase();
126
+ if (tag === "input" || tag === "textarea" || tag === "select" || tag === "button") {
127
+ controlCache.set(el, true); return true;
128
+ }
129
+ if (tag === "a") {
130
+ // treat as interactive even if Gatsby/JS navigation omits href
131
+ const href = (el.getAttribute("href") || "").trim();
132
+ if (href) { controlCache.set(el, true); return true; }
133
+ const role = (roleOf(el) || "").toLowerCase();
134
+ if (role === "link" || role === "button") { controlCache.set(el, true); return true; }
135
+ }
136
+ if (el.isContentEditable) { controlCache.set(el, true); return true; }
137
+
138
+ const role = roleOf(el);
139
+ if (role) {
140
+ const r = role.toLowerCase();
141
+ if ([
142
+ "textbox","searchbox","combobox","listbox","option",
143
+ "button","link","checkbox","radio","switch",
144
+ "tab","menuitem","slider","spinbutton"
145
+ ].includes(r)) { controlCache.set(el, true); return true; }
146
+ }
147
+
148
+ const tabindex = el.getAttribute?.("tabindex");
149
+ if (tabindex !== null && tabindex !== "-1") { controlCache.set(el, true); return true; }
150
+ if (el.hasAttribute?.("onclick")) { controlCache.set(el, true); return true; }
151
+ if (typeof el.onclick === "function") { controlCache.set(el, true); return true; }
152
+
153
+ // common misuse: clickable divs/spans with pointer cursor
154
+ try {
155
+ const cs = window.getComputedStyle(el);
156
+ if (cs && cs.cursor === "pointer") { controlCache.set(el, true); return true; }
157
+ } catch {}
158
+ controlCache.set(el, false);
159
+ return false;
160
+ };
161
+
162
+ const hasOwnLabeling = (el) => {
163
+ if (directText(el)) return true;
164
+ const a = norm(el.getAttribute?.("aria-label"));
165
+ const t = norm(el.getAttribute?.("title"));
166
+ const alt = norm(el.getAttribute?.("alt"));
167
+ const ph = norm(el.getAttribute?.("placeholder"));
168
+ if (a || t || alt || ph) return true;
169
+ const cls = norm(el.getAttribute?.("class"));
170
+ if (cls) return true;
171
+ return false;
172
+ };
173
+
174
+ const isImportant = (el) => {
175
+ if (isControlLike(el)) return true;
176
+ if (isMedia(el)) return true;
177
+ if (roleOf(el)) return true;
178
+ if (hasOwnLabeling(el)) return true;
179
+ return false;
180
+ };
181
+
182
+ const cssEscape = (s) => {
183
+ if (window.CSS && typeof window.CSS.escape === "function") return window.CSS.escape(s);
184
+ return s.replace(/[^a-zA-Z0-9_\\-]/g, (c) => "\\\\" + c);
185
+ };
186
+
187
+ const domPath = (el) => {
188
+ const parts = [];
189
+ let cur = el;
190
+ while (cur && cur.nodeType === 1) {
191
+ const tag = cur.tagName.toLowerCase();
192
+ const id = cur.getAttribute?.("id");
193
+ // IDs are unique by HTML spec; skip querySelectorAll validation for speed
194
+ if (id) { parts.push("#" + cssEscape(id)); break; }
195
+ let nth = 1;
196
+ let sib = cur;
197
+ while ((sib = sib.previousElementSibling)) {
198
+ if (sib.tagName.toLowerCase() === tag) nth++;
199
+ }
200
+ parts.push(\`\${tag}:nth-of-type(\${nth})\`);
201
+ cur = cur.parentElement;
202
+ if (parts.length >= 12) break;
203
+ }
204
+ return parts.reverse().join(" > ");
205
+ };
206
+
207
+ const attrsOf = (el) => ({
208
+ "id": el.getAttribute?.("id") || null,
209
+ "class": el.getAttribute?.("class") || null,
210
+ "href": el.getAttribute?.("href") || null,
211
+ "type": el.getAttribute?.("type") || null,
212
+ "name": el.getAttribute?.("name") || null,
213
+ "placeholder": el.getAttribute?.("placeholder") || null,
214
+ "aria-label": el.getAttribute?.("aria-label") || null,
215
+ "aria-labelledby": el.getAttribute?.("aria-labelledby") || null,
216
+ "aria-expanded": el.getAttribute?.("aria-expanded") || null,
217
+ "aria-haspopup": el.getAttribute?.("aria-haspopup") || null,
218
+ "title": el.getAttribute?.("title") || null,
219
+ "alt": el.getAttribute?.("alt") || null,
220
+ "tabindex": el.getAttribute?.("tabindex") || null,
221
+ "contenteditable": el.isContentEditable ? "true" : (el.getAttribute?.("contenteditable") || null),
222
+ });
223
+
224
+ const svgDescriptor = (svg) => {
225
+ try {
226
+ if (!svg || (svg.tagName || "").toLowerCase() !== "svg") return "";
227
+ const viewBox = norm(svg.getAttribute("viewBox"));
228
+ const w = norm(svg.getAttribute("width"));
229
+ const h = norm(svg.getAttribute("height"));
230
+ const fill = norm(svg.getAttribute("fill"));
231
+ const stroke = norm(svg.getAttribute("stroke"));
232
+ const sw = norm(svg.getAttribute("stroke-width"));
233
+
234
+ const title = norm(svg.querySelector?.("title")?.textContent);
235
+
236
+ const cls = norm(svg.getAttribute("class"));
237
+ const useHref = norm(svg.querySelector?.("use")?.getAttribute("href") || svg.querySelector?.("use")?.getAttribute("xlink:href"));
238
+
239
+ const paths = svg.querySelectorAll?.("path") || [];
240
+ const pathCount = paths.length;
241
+
242
+ let dHash = "";
243
+ if (pathCount > 0) {
244
+ const d = paths[0].getAttribute("d") || "";
245
+ let hsh = 0;
246
+ for (let i = 0; i < d.length; i++) hsh = ((hsh << 5) - hsh + d.charCodeAt(i)) | 0;
247
+ dHash = String(hsh);
248
+ }
249
+
250
+ const parts = [];
251
+ if (title) parts.push(\`title=\${title}\`);
252
+ if (useHref) parts.push(\`use=\${useHref}\`);
253
+ if (viewBox) parts.push(\`vb=\${viewBox}\`);
254
+ if (w || h) parts.push(\`wh=\${w||"?"}x\${h||"?"}\`);
255
+ if (stroke || sw) parts.push(\`stroke=\${stroke||""}:\${sw||""}\`);
256
+ if (fill) parts.push(\`fill=\${fill}\`);
257
+ if (cls) parts.push(\`cls=\${cls.split(/\\s+/).slice(0,3).join(".")}\`);
258
+ if (pathCount) parts.push(\`paths=\${pathCount}\`);
259
+ if (dHash) parts.push(\`dhash=\${dHash}\`);
260
+ return parts.join(" ");
261
+ } catch { return ""; }
262
+ };
263
+
264
+ const iconDescriptorFromDescendants = (el, maxSvgs = 2) => {
265
+ try {
266
+ const out = [];
267
+ const svgs = el.querySelectorAll?.("svg") || [];
268
+ for (const svg of svgs) {
269
+ const d = svgDescriptor(svg);
270
+ if (d) out.push(d);
271
+ if (out.length >= maxSvgs) break;
272
+ }
273
+ const imgs = el.querySelectorAll?.("img") || [];
274
+ for (const img of imgs) {
275
+ const alt = norm(img.getAttribute("alt"));
276
+ const title = norm(img.getAttribute("title"));
277
+ const cls = norm(img.getAttribute("class"));
278
+ const parts = [];
279
+ if (alt) parts.push(\`alt=\${alt}\`);
280
+ if (title) parts.push(\`title=\${title}\`);
281
+ if (cls) parts.push(\`cls=\${cls.split(/\\s+/).slice(0,3).join(".")}\`);
282
+ const d = parts.join(" ");
283
+ if (d) out.push("img:" + d);
284
+ if (out.length >= maxSvgs + 1) break;
285
+ }
286
+ return out.join(" | ");
287
+ } catch { return ""; }
288
+ };
289
+
290
+ const baseLabelTextOf = (el) => {
291
+ const chunks = [];
292
+ const own = directText(el) || (isControlLike(el) ? descendantText(el) : "");
293
+ if (own) chunks.push(own);
294
+
295
+ for (const k of ["aria-label","title","alt","placeholder"]) {
296
+ const v = norm(el.getAttribute?.(k));
297
+ if (v) chunks.push(\`\${k}=\${v}\`);
298
+ }
299
+
300
+ const cls = norm(el.getAttribute?.("class"));
301
+ if (cls) chunks.push(\`class=\${cls.split(/\\s+/).slice(0,3).join(" ")}\`);
302
+
303
+ const tag = (el.tagName || "").toLowerCase();
304
+ if (tag === "svg") {
305
+ const sd = svgDescriptor(el);
306
+ if (sd) chunks.push(sd);
307
+ }
308
+ return chunks.join(" | ");
309
+ };
310
+
311
+ const needsIconScan = (el, baseName) => {
312
+ if (!isControlLike(el)) return false;
313
+
314
+ const dt = directText(el);
315
+ const a = norm(el.getAttribute?.("aria-label"));
316
+ const t = norm(el.getAttribute?.("title"));
317
+ const alt = norm(el.getAttribute?.("alt"));
318
+ const ph = norm(el.getAttribute?.("placeholder"));
319
+ const hasStrong = !!(dt || a || t || alt || ph);
320
+ if (!hasStrong) return true;
321
+
322
+ // still scan when label is basically only a class stub / generic tokens
323
+ const s = norm(baseName);
324
+ if (!s) return true;
325
+ if (/^class=/.test(s) && s.length < 40) return true;
326
+ return false;
327
+ };
328
+
329
+ const labelTextOf = (el) => {
330
+ const base = baseLabelTextOf(el);
331
+ if (needsIconScan(el, base)) {
332
+ const desc = iconDescriptorFromDescendants(el);
333
+ return desc ? (base ? \`\${base} | \${desc}\` : desc) : base;
334
+ }
335
+ return base;
336
+ };
337
+
338
+ const mergeIntoName = (entry, extra) => {
339
+ const v = norm(extra);
340
+ if (!v) return;
341
+ if (!entry.name) entry.name = v;
342
+ else if (!entry.name.includes(v)) entry.name = \`\${entry.name} | \${v}\`;
343
+ };
344
+
345
+ const fastIntersectInfo = (el) => {
346
+ if (!el || el.nodeType !== 1) return { ok: false };
347
+ if (isSkippableTag(el)) return { ok: false };
348
+ const r = getCachedRect(el);
349
+ if (!r || r.width < 1 || r.height < 1) return { ok: false };
350
+ const ib = intersectViewport(r);
351
+ if (ib.width < 1 || ib.height < 1) return { ok: false };
352
+ return { ok: true, rect: r, ibox: ib };
353
+ };
354
+
355
+ const isRenderable = (el) => {
356
+ const bits = getStyleBits(el);
357
+ if (bits.display === "none" || bits.visibility === "hidden") return false;
358
+ if (parseFloat(bits.opacity || "1") === 0) return false;
359
+ return true;
360
+ };
361
+
362
+ const samplePointsAdaptive = (ibox, el) => {
363
+ if (ibox.width < 1 || ibox.height < 1) return [];
364
+ const a = ibox.width * ibox.height;
365
+ const inset = 2;
366
+ const cx = ibox.x + ibox.width / 2;
367
+ const cy = ibox.y + ibox.height / 2;
368
+
369
+ // dynamic sampling:
370
+ // - very large regions: center only
371
+ // - medium: center + 2 corners
372
+ // - small: 5 points
373
+ let mode = 5;
374
+ if (a >= 150 * 150) mode = 1;
375
+ else if (a >= 60 * 60) mode = 3;
376
+
377
+ // controls tend to be small/precise; keep stronger checks
378
+ if (isControlLike(el) && mode < 5) mode = 5;
379
+
380
+ const x1 = ibox.x + inset;
381
+ const y1 = ibox.y + inset;
382
+ const x2 = ibox.x + ibox.width - inset;
383
+ const y2 = ibox.y + ibox.height - inset;
384
+
385
+ const pts = [];
386
+ pts.push([cx, cy]);
387
+ if (mode >= 3) {
388
+ pts.push([x1, y1]);
389
+ pts.push([x2, y2]);
390
+ }
391
+ if (mode >= 5) {
392
+ pts.push([x2, y1]);
393
+ pts.push([x1, y2]);
394
+ }
395
+
396
+ const out = [];
397
+ for (const [x, y] of pts) {
398
+ out.push([clamp(x, 0, Math.max(0, vw - 1)), clamp(y, 0, Math.max(0, vh - 1))]);
399
+ }
400
+ return out;
401
+ };
402
+
403
+ const notFullyOccluded = (el, ibox) => {
404
+ const pts = samplePointsAdaptive(ibox, el);
405
+ if (!pts.length) return false;
406
+ for (const [x, y] of pts) {
407
+ const top = document.elementFromPoint(x, y);
408
+ if (!top) continue;
409
+ if (top === el || el.contains(top)) return true;
410
+ }
411
+ return false;
412
+ };
413
+
414
+ const visibleInfo = (el) => {
415
+ const fi = fastIntersectInfo(el);
416
+ if (!fi.ok) return { ok: false };
417
+
418
+ if (!isRenderable(el)) return { ok: false };
419
+
420
+ if (!notFullyOccluded(el, fi.ibox)) return { ok: false };
421
+
422
+ return { ok: true, rect: fi.rect, ibox: fi.ibox };
423
+ };
424
+
425
+ const childrenForTraversal = (el) => {
426
+ const out = [];
427
+ const pushKids = (parent) => {
428
+ try {
429
+ const kids = parent.children ? Array.from(parent.children) : [];
430
+ for (const c of kids) {
431
+ if (isSkippableTag(c)) continue;
432
+
433
+ const fi = fastIntersectInfo(c);
434
+ if (fi.ok) { out.push(c); continue; }
435
+
436
+ // "tunnel" cases: 0×0 wrappers that may contain visible grandchildren
437
+ try {
438
+ const bits = getStyleBits(c);
439
+ const hasKids = (c.children && c.children.length) || (c.shadowRoot && c.shadowRoot.children && c.shadowRoot.children.length);
440
+ if ((bits.display === "contents") || hasKids) out.push(c);
441
+ } catch {
442
+ // if we can't read style, but it has children, still worth tunneling
443
+ if (c.children && c.children.length) out.push(c);
444
+ }
445
+ }
446
+ } catch {}
447
+ };
448
+
449
+ pushKids(el);
450
+
451
+ // include shadow root children too
452
+ try {
453
+ const sr = el.shadowRoot;
454
+ if (sr) pushKids(sr);
455
+ } catch {}
456
+
457
+ return out;
458
+ };
459
+
460
+ const visibleChildrenStrict = (el) => {
461
+ const out = [];
462
+ try {
463
+ const kids = el.children ? Array.from(el.children) : [];
464
+ for (const c of kids) {
465
+ const v = visibleInfo(c);
466
+ if (v.ok) out.push(c);
467
+ }
468
+ } catch {}
469
+ try {
470
+ const sr = el.shadowRoot;
471
+ if (sr && sr.children) {
472
+ for (const c of Array.from(sr.children)) {
473
+ const v = visibleInfo(c);
474
+ if (v.ok) out.push(c);
475
+ }
476
+ }
477
+ } catch {}
478
+ return out;
479
+ };
480
+
481
+ const area = (b) => Math.max(0, b.width) * Math.max(0, b.height);
482
+ const intersectArea = (a, b) => {
483
+ const x1 = Math.max(a.x, b.x);
484
+ const y1 = Math.max(a.y, b.y);
485
+ const x2 = Math.min(a.x + a.width, b.x + b.width);
486
+ const y2 = Math.min(a.y + a.height, b.y + b.height);
487
+ const w = Math.max(0, x2 - x1);
488
+ const h = Math.max(0, y2 - y1);
489
+ return w * h;
490
+ };
491
+
492
+ const isUselessWrapper = (el, child) => {
493
+ const tag = (el.tagName || "").toLowerCase();
494
+ if (!WRAPPER_TAGS.has(tag)) return false;
495
+ if (isImportant(el)) return false;
496
+
497
+ if (el.getAttribute?.("id")) return false;
498
+ if (roleOf(el)) return false;
499
+ const tabindex = el.getAttribute?.("tabindex");
500
+ if (tabindex && tabindex !== "-1") return false;
501
+ if (el.hasAttribute?.("onclick")) return false;
502
+
503
+ const f1 = fastIntersectInfo(el);
504
+ const f2 = fastIntersectInfo(child);
505
+ if (!f1.ok || !f2.ok) return false;
506
+
507
+ const b1 = f1.ibox, b2 = f2.ibox;
508
+ const a1 = area(b1), a2 = area(b2);
509
+ if (a1 < 1 || a2 < 1) return false;
510
+ const ia = intersectArea(b1, b2);
511
+ const overlap = ia / Math.min(a1, a2);
512
+ return overlap >= 0.92;
513
+ };
514
+
515
+ const resolveRepresentative = (el) => {
516
+ let cur = el;
517
+ for (let steps = 0; steps < 50; steps++) {
518
+ const kids = childrenForTraversal(cur);
519
+ if (kids.length !== 1) break;
520
+ const child = kids[0];
521
+ if (isUselessWrapper(cur, child)) { cur = child; continue; }
522
+ break;
523
+ }
524
+ return cur;
525
+ };
526
+
527
+ const nearestVisibleControlAncestor = (el) => {
528
+ let cur = el?.parentElement || null;
529
+ while (cur && cur !== document.body) {
530
+ if (isControlLike(cur)) {
531
+ const v = visibleInfo(cur);
532
+ if (v.ok) return cur;
533
+ }
534
+ cur = cur.parentElement;
535
+ }
536
+ return null;
537
+ };
538
+
539
+ const shouldEmit = (el) => {
540
+ if (isControlLike(el)) return true;
541
+
542
+ // text-heavy, misused divs/spans:
543
+ // emit if it has meaningful direct text and isn't within a visible control
544
+ const dt = directText(el);
545
+ if (dt && dt.length >= 2) {
546
+ const ctrl = nearestVisibleControlAncestor(el);
547
+ if (!ctrl) return true;
548
+ }
549
+
550
+ if (isImportant(el)) {
551
+ const ctrl = nearestVisibleControlAncestor(el);
552
+ return !ctrl;
553
+ }
554
+ return false;
555
+ };
556
+
557
+ const raw = [];
558
+ const byId = new Map();
559
+ const idOf = new WeakMap();
560
+ let nextId = 0;
561
+
562
+ const addNode = (el, parentId, depth, ibox) => {
563
+ const id = nextId++;
564
+ idOf.set(el, id);
565
+ const entry = {
566
+ id,
567
+ el,
568
+ parent_id: parentId,
569
+ depth,
570
+ tag: (el.tagName || "").toLowerCase(),
571
+ role: roleOf(el),
572
+ name: labelTextOf(el),
573
+ bbox_viewport: {
574
+ x: Math.round(ibox.x),
575
+ y: Math.round(ibox.y),
576
+ width: Math.round(ibox.width),
577
+ height: Math.round(ibox.height),
578
+ },
579
+ bbox_page: {
580
+ x: Math.round(ibox.x + sx),
581
+ y: Math.round(ibox.y + sy),
582
+ width: Math.round(ibox.width),
583
+ height: Math.round(ibox.height),
584
+ },
585
+ attributes: attrsOf(el),
586
+ dom_path: domPath(el),
587
+ };
588
+ raw.push(entry);
589
+ byId.set(id, entry);
590
+ return entry;
591
+ };
592
+
593
+ const walk = (startEl, parentEntry, depth) => {
594
+ if (!startEl || startEl.nodeType !== 1) return;
595
+
596
+ // prune early by viewport intersection
597
+ const fi = fastIntersectInfo(startEl);
598
+ if (!fi.ok) {
599
+ // IMPORTANT: wrapper may be 0x0 (e.g. display:contents) but have visible descendants.
600
+ const kids = childrenForTraversal(startEl);
601
+ for (const c of kids) walk(c, parentEntry, depth);
602
+ return;
603
+ }
604
+
605
+ const rep = resolveRepresentative(startEl);
606
+ if (!rep || rep.nodeType !== 1) return;
607
+
608
+ const v = visibleInfo(rep);
609
+ if (!v.ok) {
610
+ // rep itself may fail occlusion / rect tests even though descendants are visible
611
+ const kids = childrenForTraversal(rep);
612
+ for (const c of kids) walk(c, parentEntry, depth);
613
+ return;
614
+ }
615
+
616
+ const ctrl = (!isControlLike(rep)) ? nearestVisibleControlAncestor(rep) : null;
617
+ if (ctrl) {
618
+ const cv = visibleInfo(ctrl);
619
+ if (cv.ok) {
620
+ let ctrlEntry = null;
621
+ const existingId = idOf.get(ctrl);
622
+ if (existingId !== undefined) ctrlEntry = byId.get(existingId) || null;
623
+ if (!ctrlEntry) ctrlEntry = addNode(ctrl, parentEntry ? parentEntry.id : null, depth, cv.ibox);
624
+
625
+ // merge rep's base label always; scan icons only when needed
626
+ const repBase = baseLabelTextOf(rep);
627
+ if (repBase) mergeIntoName(ctrlEntry, repBase);
628
+
629
+ if (needsIconScan(ctrl, baseLabelTextOf(ctrl)) || needsIconScan(rep, repBase)) {
630
+ const repIcon = iconDescriptorFromDescendants(rep);
631
+ if (repIcon) mergeIntoName(ctrlEntry, repIcon);
632
+ }
633
+
634
+ if (!ctrlEntry.attributes) ctrlEntry.attributes = {};
635
+ if (needsIconScan(ctrl, baseLabelTextOf(ctrl))) {
636
+ const iconDesc = norm(iconDescriptorFromDescendants(ctrl));
637
+ if (iconDesc) ctrlEntry.attributes["icon-desc"] = iconDesc;
638
+ }
639
+
640
+ const kids = childrenForTraversal(rep);
641
+ for (const c of kids) walk(c, ctrlEntry, ctrlEntry.depth + 1);
642
+ return;
643
+ }
644
+ }
645
+
646
+ let myEntry = parentEntry;
647
+ let nextDepth = depth;
648
+
649
+ if (shouldEmit(rep)) {
650
+ myEntry = addNode(rep, parentEntry ? parentEntry.id : null, depth, v.ibox);
651
+ nextDepth = depth + 1;
652
+
653
+ if (isControlLike(rep) && needsIconScan(rep, baseLabelTextOf(rep))) {
654
+ const iconDesc = norm(iconDescriptorFromDescendants(rep));
655
+ if (iconDesc) {
656
+ mergeIntoName(myEntry, iconDesc);
657
+ myEntry.attributes["icon-desc"] = iconDesc;
658
+ }
659
+ }
660
+ }
661
+
662
+ const kids = childrenForTraversal(rep);
663
+ for (const c of kids) walk(c, myEntry, nextDepth);
664
+ };
665
+
666
+ const root = document.body || document.documentElement;
667
+ if (!root) return [];
668
+
669
+ const topKids = childrenForTraversal(root);
670
+ for (const c of topKids) walk(c, null, 0);
671
+
672
+ if (!raw.length) return [];
673
+
674
+ // merge labels into controls; remove labels
675
+ const keptIds = new Set(raw.map(e => e.id));
676
+ const domToVisibleId = new WeakMap();
677
+ for (const e of raw) domToVisibleId.set(e.el, e.id);
678
+
679
+ const isLabelTag = (el) => (el?.tagName || "").toLowerCase() === "label";
680
+
681
+ const mergeLabelIntoControl = (controlId, labelId, text) => {
682
+ const c = byId.get(controlId);
683
+ const l = byId.get(labelId);
684
+ if (!c || !l) return;
685
+ if (!keptIds.has(controlId) || !keptIds.has(labelId)) return;
686
+ const t = norm(text || l.name || "");
687
+ if (!t) return;
688
+ mergeIntoName(c, t);
689
+ };
690
+
691
+ const labelRemoval = new Set();
692
+ const controls = raw.filter(e => keptIds.has(e.id) && e.el && isControlLike(e.el));
693
+
694
+ for (const c of controls) {
695
+ try {
696
+ const labs = c.el.labels ? Array.from(c.el.labels) : [];
697
+ for (const labEl of labs) {
698
+ const lid = domToVisibleId.get(labEl);
699
+ if (lid !== undefined && keptIds.has(lid)) {
700
+ mergeLabelIntoControl(c.id, lid, norm(labEl.innerText || labEl.textContent || ""));
701
+ labelRemoval.add(lid);
702
+ }
703
+ }
704
+ } catch {}
705
+ }
706
+
707
+ for (const c of controls) {
708
+ const v = c.el.getAttribute?.("aria-labelledby");
709
+ if (!v) continue;
710
+ const ids = v.split(/\\s+/).map(s => s.trim()).filter(Boolean);
711
+ for (const domId of ids) {
712
+ const labEl = document.getElementById(domId);
713
+ if (!labEl) continue;
714
+ const lid = domToVisibleId.get(labEl);
715
+ if (lid !== undefined && keptIds.has(lid)) {
716
+ mergeLabelIntoControl(c.id, lid, norm(labEl.innerText || labEl.textContent || ""));
717
+ labelRemoval.add(lid);
718
+ }
719
+ }
720
+ }
721
+
722
+ for (const e of raw) {
723
+ if (!keptIds.has(e.id)) continue;
724
+ if (!e.el || !isLabelTag(e.el)) continue;
725
+ const f = e.el.getAttribute?.("for");
726
+ if (!f) continue;
727
+ const target = document.getElementById(f);
728
+ if (!target) continue;
729
+ const tid = domToVisibleId.get(target);
730
+ if (tid !== undefined && keptIds.has(tid)) {
731
+ mergeLabelIntoControl(tid, e.id, norm(e.el.innerText || e.el.textContent || ""));
732
+ labelRemoval.add(e.id);
733
+ }
734
+ }
735
+
736
+ for (const lid of labelRemoval) keptIds.delete(lid);
737
+
738
+ // recompute parent/depth
739
+ const findNearestKeptAncestorId = (el) => {
740
+ let cur = el;
741
+ while (cur) {
742
+ let p = cur.parentElement;
743
+ while (p) {
744
+ const pid = idOf.get(p);
745
+ if (pid !== undefined && keptIds.has(pid)) return pid;
746
+ p = p.parentElement;
747
+ }
748
+ const rn = cur.getRootNode?.();
749
+ if (rn && rn.host) { cur = rn.host; continue; }
750
+ break;
751
+ }
752
+ return null;
753
+ };
754
+
755
+ for (const e of raw) {
756
+ if (!keptIds.has(e.id)) continue;
757
+ e.parent_id = findNearestKeptAncestorId(e.el);
758
+ }
759
+
760
+ const depthMemo = new Map();
761
+ const depthOf = (id) => {
762
+ if (depthMemo.has(id)) return depthMemo.get(id);
763
+ const e = byId.get(id);
764
+ if (!e || !keptIds.has(id)) return 0;
765
+ const p = e.parent_id;
766
+ const d = p === null ? 0 : depthOf(p) + 1;
767
+ depthMemo.set(id, d);
768
+ return d;
769
+ };
770
+
771
+ for (const e of raw) {
772
+ if (!keptIds.has(e.id)) continue;
773
+ e.depth = depthOf(e.id);
774
+ }
775
+
776
+ const kept = raw.filter(e => keptIds.has(e.id));
777
+ kept.sort((a,b) => {
778
+ const ay = a.bbox_viewport?.y ?? 0;
779
+ const by = b.bbox_viewport?.y ?? 0;
780
+ if (ay !== by) return ay - by;
781
+ const ax = a.bbox_viewport?.x ?? 0;
782
+ const bx = b.bbox_viewport?.x ?? 0;
783
+ if (ax !== bx) return ax - bx;
784
+ const aa = (a.bbox_viewport?.width ?? 0) * (a.bbox_viewport?.height ?? 0);
785
+ const ba = (b.bbox_viewport?.width ?? 0) * (b.bbox_viewport?.height ?? 0);
786
+ return aa - ba;
787
+ });
788
+
789
+ return kept.map(e => ({
790
+ id: e.id,
791
+ parent_id: e.parent_id,
792
+ depth: e.depth,
793
+ tag: e.tag,
794
+ role: e.role,
795
+ name: e.name || "",
796
+ bbox_viewport: e.bbox_viewport,
797
+ bbox_page: e.bbox_page,
798
+ attributes: e.attributes,
799
+ dom_path: e.dom_path,
800
+ }));
801
+ }
802
+ `;var is=`// wireframe.js — ultra-fast DOM wireframe renderer
803
+ // No dependencies needed
804
+
805
+ class Wireframe {
806
+ constructor(root = document.body, opts = {}) {
807
+ this.root = root;
808
+ this.scale = opts.scale || 1;
809
+ this.quality = opts.quality || 0.8;
810
+ this.maxDepth = opts.maxDepth || 30;
811
+ this.minSize = opts.minSize || 0; // temporarily 0 to debug
812
+ this.showText = opts.showText !== false;
813
+ this.showImages = opts.showImages !== false;
814
+ // When true, image elements (<img> and background-image divs) are
815
+ // rendered as their actual pixels using a CORS-aware fetch cache.
816
+ // When false (default), they render as labeled placeholder boxes.
817
+ // Either way they ALWAYS get a label now — the old behaviour of
818
+ // drawing a mystery yellow box with no hint is gone.
819
+ this.images = opts.images === true;
820
+ // Class-level cache so it persists across captures. \`null\` entries are
821
+ // negative cache (CORS failure, 404, decode error) — don't retry.
822
+ if (!Wireframe._imageCache) Wireframe._imageCache = new Map();
823
+ if (!Wireframe._imagePending) Wireframe._imagePending = new Map();
824
+ this.colors = {
825
+ bg: '#ffffff',
826
+ block: '#e2e8f0',
827
+ blockStroke: '#94a3b8',
828
+ text: '#334155',
829
+ input: '#dbeafe',
830
+ inputStroke: '#3b82f6',
831
+ button: '#bfdbfe',
832
+ buttonStroke: '#2563eb',
833
+ image: '#fde68a',
834
+ imageStroke: '#f59e0b',
835
+ imageCross: '#d97706',
836
+ link: '#2563eb',
837
+ heading: '#0f172a',
838
+ nav: '#e0e7ff',
839
+ navStroke: '#6366f1',
840
+ ...(opts.colors || {}),
841
+ };
842
+ }
843
+
844
+ async capture() {
845
+ const t = performance.now();
846
+ const rootRect = this.root.getBoundingClientRect();
847
+ const scrollX = window.scrollX;
848
+ const scrollY = window.scrollY;
849
+
850
+ const canvasW = rootRect.width;
851
+ const canvasH = rootRect.height;
852
+
853
+ const canvas = document.createElement('canvas');
854
+ canvas.width = canvasW * this.scale;
855
+ canvas.height = canvasH * this.scale;
856
+ const ctx = canvas.getContext('2d');
857
+ ctx.scale(this.scale, this.scale);
858
+
859
+ // White background
860
+ ctx.fillStyle = this.colors.bg;
861
+ ctx.fillRect(0, 0, canvasW, canvasH);
862
+
863
+ // Two-pass: collect elements, draw boxes, then draw text on top
864
+ this._drawCount = 0;
865
+ this._skipCount = { tiny: 0, offscreen: 0, hidden: 0, depth: 0 };
866
+ this._elements = [];
867
+ this._pendingImageFetches = [];
868
+ this._collectElements(this.root, rootRect, 0);
869
+
870
+ // If image rendering is enabled and the first pass kicked off some
871
+ // fetches, give them a short window to land before drawing — that way
872
+ // the first captured frame already has some images instead of only
873
+ // placeholders. Subsequent frames hit the cache and are instant.
874
+ if (this.images && this._pendingImageFetches.length > 0) {
875
+ await Promise.race([
876
+ Promise.all(this._pendingImageFetches),
877
+ new Promise((r) => setTimeout(r, 400)),
878
+ ]);
879
+ }
880
+
881
+ // Pass 1: draw all boxes/shapes
882
+ for (const item of this._elements) {
883
+ this._drawElementBox(ctx, item);
884
+ }
885
+ // Pass 2: find ALL text nodes directly via TreeWalker and draw them
886
+ this._textCount = 0;
887
+ this._drawAllText(ctx, rootRect);
888
+
889
+ console.log(\`[wireframe] drew \${this._drawCount} elements | skipped: \${JSON.stringify(this._skipCount)} | root: \${rootRect.width.toFixed(0)}x\${rootRect.height.toFixed(0)}\`);
890
+
891
+ const elapsed = performance.now() - t;
892
+ console.log(\`[wireframe] captured: \${elapsed.toFixed(0)}ms | \${canvas.width}x\${canvas.height}\`);
893
+
894
+ return { canvas, elapsed };
895
+ }
896
+
897
+ _collectElements(el, rootRect, depth) {
898
+ if (depth > this.maxDepth) { this._skipCount.depth++; return; }
899
+
900
+ const children = el.children;
901
+
902
+ if (el.shadowRoot) {
903
+ this._collectElements(el.shadowRoot, rootRect, depth);
904
+ }
905
+ for (let i = 0; i < children.length; i++) {
906
+ const child = children[i];
907
+ const rect = child.getBoundingClientRect();
908
+
909
+ if (rect.width < this.minSize || rect.height < this.minSize) { this._skipCount.tiny++; continue; }
910
+ if (rect.bottom < rootRect.top || rect.top > rootRect.bottom) { this._skipCount.offscreen++; continue; }
911
+ if (rect.right < rootRect.left || rect.left > rootRect.right) { this._skipCount.offscreen++; continue; }
912
+
913
+ const style = window.getComputedStyle(child);
914
+ if (style.display === 'none' || style.visibility === 'hidden' || style.opacity === '0') { this._skipCount.hidden++; continue; }
915
+
916
+ const x = rect.left - rootRect.left;
917
+ const y = rect.top - rootRect.top;
918
+ const w = rect.width;
919
+ const h = rect.height;
920
+ const tag = child.tagName;
921
+ const type = this._classifyElement(child, tag, style);
922
+
923
+ this._drawCount++;
924
+
925
+ // For image-like elements, capture a URL and a human label up front so
926
+ // the draw pass can either render the actual bitmap (opts.images=true
927
+ // + CORS-allowed fetch) or a labeled placeholder.
928
+ let url = null;
929
+ let label = null;
930
+ if (type === 'image' || (type === 'icon' && tag === 'IMG')) {
931
+ url = this._getImageUrl(child, style);
932
+ label = this._getImageLabel(child, url);
933
+ if (this.images && url) {
934
+ const p = this._ensureImage(url);
935
+ if (p && typeof p.then === 'function') {
936
+ this._pendingImageFetches.push(p);
937
+ }
938
+ }
939
+ }
940
+
941
+ this._elements.push({ type, x, y, w, h, el: child, style, tag, url, label });
942
+
943
+ this._collectElements(child, rootRect, depth + 1);
944
+ }
945
+ }
946
+
947
+ _classifyElement(el, tag, style) {
948
+ if (tag === 'VIDEO' || tag === 'CANVAS') return 'skip';
949
+ if (tag === 'IMG') return 'icon';
950
+ if (tag === 'SVG') return 'icon';
951
+ if (tag === 'INPUT' || tag === 'TEXTAREA' || tag === 'SELECT') return 'input';
952
+ if (tag === 'BUTTON') return 'button';
953
+ if (el.getAttribute('role') === 'button') {
954
+ const bg = style.backgroundColor;
955
+ if (bg && bg !== 'rgba(0, 0, 0, 0)' && bg !== 'transparent') return 'button';
956
+ }
957
+ if (tag === 'A') return 'link';
958
+ if (tag === 'NAV' || el.getAttribute('role') === 'navigation') return 'nav';
959
+ if (/^H[1-6]$/.test(tag)) return 'heading';
960
+ if (tag === 'SPAN' || tag === 'P' || tag === 'LABEL' || tag === 'LI' || tag === 'TD' || tag === 'TH') return 'text';
961
+ if (style.backgroundImage && style.backgroundImage !== 'none') return 'image';
962
+ // Check if this element has direct text content (not just from children)
963
+ if (this._hasDirectText(el)) return 'text';
964
+ return 'block';
965
+ }
966
+
967
+ // Extract a label for an icon — accessibility first
968
+ _getIconLabel(el) {
969
+ // Walk up to find the nearest interactive ancestor (often has the label)
970
+ const interactive = el.closest('[role="button"], button, a, [role="link"], [aria-label]');
971
+
972
+ // 1. aria-label (self or nearest ancestor)
973
+ const ariaLabel = el.getAttribute('aria-label') || (interactive && interactive.getAttribute('aria-label'));
974
+ if (ariaLabel) return ariaLabel;
975
+
976
+ // 2. aria-labelledby (self or ancestor)
977
+ const labelledBy = el.getAttribute('aria-labelledby') || (interactive && interactive.getAttribute('aria-labelledby'));
978
+ if (labelledBy) {
979
+ const ref = document.getElementById(labelledBy);
980
+ if (ref) return ref.textContent.trim();
981
+ }
982
+
983
+ // 3. aria-describedby
984
+ const describedBy = el.getAttribute('aria-describedby') || (interactive && interactive.getAttribute('aria-describedby'));
985
+ if (describedBy) {
986
+ const ref = document.getElementById(describedBy);
987
+ if (ref) return ref.textContent.trim();
988
+ }
989
+
990
+ // 4. alt / title
991
+ if (el.getAttribute('alt')) return el.getAttribute('alt');
992
+ if (el.getAttribute('title')) return el.getAttribute('title');
993
+ if (interactive && interactive.getAttribute('title')) return interactive.getAttribute('title');
994
+
995
+ // 5. Visible text content of parent button
996
+ if (interactive && interactive !== el) {
997
+ const text = interactive.textContent?.trim();
998
+ if (text && text.length < 30) return text;
999
+ }
1000
+
1001
+ return '◆';
1002
+
1003
+ return '◆';
1004
+ }
1005
+
1006
+ // Check if element has its own text nodes (not just inherited from children)
1007
+ _hasDirectText(el) {
1008
+ for (const node of el.childNodes) {
1009
+ if (node.nodeType === 3 && node.textContent.trim().length > 0) return true;
1010
+ }
1011
+ return false;
1012
+ }
1013
+
1014
+ // Resolve the image URL for an <img> or a background-image element.
1015
+ _getImageUrl(el, style) {
1016
+ if (el.tagName === 'IMG') {
1017
+ return el.currentSrc || el.src || null;
1018
+ }
1019
+ const bg = style && style.backgroundImage;
1020
+ if (bg && bg !== 'none') {
1021
+ // backgroundImage may contain multiple layers: url(a), linear-gradient(...)
1022
+ const m = bg.match(/url\\(["']?([^"')]+)["']?\\)/);
1023
+ if (m) return m[1];
1024
+ }
1025
+ return null;
1026
+ }
1027
+
1028
+ // Derive a human-readable label for an image element. Priority:
1029
+ // alt → aria-label → title → figcaption → nearest-ancestor aria-label
1030
+ // → nearest heading → decoded filename → "image"
1031
+ _getImageLabel(el, url) {
1032
+ const get = (attr) => {
1033
+ try { return el.getAttribute && el.getAttribute(attr); } catch { return null; }
1034
+ };
1035
+ if (get('alt')) return get('alt');
1036
+ if (get('aria-label')) return get('aria-label');
1037
+ if (get('title')) return get('title');
1038
+
1039
+ const fig = el.closest && el.closest('figure');
1040
+ if (fig) {
1041
+ const cap = fig.querySelector && fig.querySelector('figcaption');
1042
+ if (cap && cap.textContent) {
1043
+ const t = cap.textContent.trim();
1044
+ if (t) return t;
1045
+ }
1046
+ }
1047
+
1048
+ const labelledAncestor = el.closest && el.closest('[aria-label]');
1049
+ if (labelledAncestor && labelledAncestor !== el) {
1050
+ const a = labelledAncestor.getAttribute('aria-label');
1051
+ if (a) return a;
1052
+ }
1053
+
1054
+ // Notion cover images sit directly above the page H1 — use it as the
1055
+ // label when we have nothing else, so the agent can say "your Notion
1056
+ // page 'hello aidan' has a cover".
1057
+ if (url) {
1058
+ try {
1059
+ const u = new URL(url, window.location.href);
1060
+ const name = u.pathname.split('/').pop();
1061
+ if (name) {
1062
+ const decoded = decodeURIComponent(name).replace(/\\.[a-z0-9]{2,5}$/i, '');
1063
+ if (decoded && decoded.length < 60) return decoded;
1064
+ }
1065
+ } catch { /* ignore */ }
1066
+ }
1067
+
1068
+ return 'image';
1069
+ }
1070
+
1071
+ // Fetch → blob → ImageBitmap with CORS, class-level cache. Returns null
1072
+ // (and negatively caches) on any failure. Concurrent callers for the
1073
+ // same URL share one in-flight promise.
1074
+ _ensureImage(url) {
1075
+ const cache = Wireframe._imageCache;
1076
+ const pending = Wireframe._imagePending;
1077
+ if (cache.has(url)) return cache.get(url); // may be null
1078
+ if (pending.has(url)) return pending.get(url);
1079
+
1080
+ const p = (async () => {
1081
+ try {
1082
+ const res = await fetch(url, { mode: 'cors', cache: 'force-cache' });
1083
+ if (!res.ok) throw new Error(\`HTTP \${res.status}\`);
1084
+ const blob = await res.blob();
1085
+ const bitmap = await createImageBitmap(blob);
1086
+ cache.set(url, bitmap);
1087
+ // LRU bound
1088
+ if (cache.size > 50) {
1089
+ const firstKey = cache.keys().next().value;
1090
+ const evicted = cache.get(firstKey);
1091
+ if (evicted && typeof evicted.close === 'function') {
1092
+ try { evicted.close(); } catch { /* ignore */ }
1093
+ }
1094
+ cache.delete(firstKey);
1095
+ }
1096
+ return bitmap;
1097
+ } catch (e) {
1098
+ cache.set(url, null); // negative cache
1099
+ return null;
1100
+ } finally {
1101
+ pending.delete(url);
1102
+ }
1103
+ })();
1104
+ pending.set(url, p);
1105
+ return p;
1106
+ }
1107
+
1108
+ // Draw a labeled placeholder in the "yellow hatched box" style — used
1109
+ // whenever opts.images is off or the fetch failed. The label is the key
1110
+ // thing: the agent reads it off the frame and can reason about the
1111
+ // image's purpose without seeing the pixels.
1112
+ _drawImagePlaceholder(ctx, label, x, y, w, h, radius) {
1113
+ ctx.fillStyle = this.colors.image;
1114
+ this._roundRect(ctx, x, y, w, h, radius);
1115
+ ctx.fill();
1116
+ ctx.strokeStyle = this.colors.imageStroke;
1117
+ ctx.lineWidth = 1;
1118
+ ctx.stroke();
1119
+ if (this.showImages && w > 20 && h > 20) {
1120
+ ctx.strokeStyle = this.colors.imageCross;
1121
+ ctx.lineWidth = 0.5;
1122
+ ctx.beginPath();
1123
+ ctx.moveTo(x + 4, y + 4);
1124
+ ctx.lineTo(x + w - 4, y + h - 4);
1125
+ ctx.moveTo(x + w - 4, y + 4);
1126
+ ctx.lineTo(x + 4, y + h - 4);
1127
+ ctx.stroke();
1128
+ }
1129
+ // The label band: a semi-transparent stripe across the middle of the
1130
+ // placeholder with the text on top. Sized to remain legible at 1fps
1131
+ // capture resolution while not dominating the frame.
1132
+ if (label && w > 40 && h > 18) {
1133
+ const fontSize = Math.min(Math.max(Math.floor(h * 0.18), 11), 18);
1134
+ ctx.font = \`600 \${fontSize}px -apple-system, system-ui, sans-serif\`;
1135
+ const pad = 6;
1136
+ const bandH = fontSize + pad * 2;
1137
+ const bandY = y + (h - bandH) / 2;
1138
+ // Truncate label to fit
1139
+ let display = label;
1140
+ const maxW = w - pad * 4;
1141
+ while (ctx.measureText(display).width > maxW && display.length > 1) {
1142
+ display = display.slice(0, -2) + '…';
1143
+ }
1144
+ const textW = ctx.measureText(display).width;
1145
+ const bandW = Math.min(textW + pad * 2, w - 8);
1146
+ const bandX = x + (w - bandW) / 2;
1147
+ ctx.fillStyle = 'rgba(0, 0, 0, 0.55)';
1148
+ ctx.fillRect(bandX, bandY, bandW, bandH);
1149
+ ctx.fillStyle = '#ffffff';
1150
+ ctx.textBaseline = 'middle';
1151
+ ctx.textAlign = 'center';
1152
+ ctx.fillText(display, x + w / 2, bandY + bandH / 2);
1153
+ ctx.textAlign = 'start';
1154
+ }
1155
+ }
1156
+
1157
+ // Draw an actual raster image (from the cache) into the given rect.
1158
+ // Clips to the element's rounded-rect so the image respects border-radius.
1159
+ _drawImageBitmap(ctx, bitmap, x, y, w, h, radius) {
1160
+ try {
1161
+ ctx.save();
1162
+ this._roundRect(ctx, x, y, w, h, radius);
1163
+ ctx.clip();
1164
+ ctx.drawImage(bitmap, x, y, w, h);
1165
+ ctx.restore();
1166
+ ctx.strokeStyle = this.colors.imageStroke;
1167
+ ctx.lineWidth = 0.5;
1168
+ this._roundRect(ctx, x, y, w, h, radius);
1169
+ ctx.stroke();
1170
+ return true;
1171
+ } catch (e) {
1172
+ try { ctx.restore(); } catch { /* ignore */ }
1173
+ return false;
1174
+ }
1175
+ }
1176
+
1177
+ _drawElementBox(ctx, { type, x, y, w, h, el, style, url, label }) {
1178
+ const radius = Math.min(parseFloat(style.borderRadius) || 0, w / 2, h / 2, 8);
1179
+
1180
+ switch (type) {
1181
+ case 'skip':
1182
+ return; // don't draw images/video/canvas at all
1183
+
1184
+ case 'image': {
1185
+ // Try the cached bitmap first. If opts.images is off, \`url\` may be
1186
+ // set but the cache won't have it → falls through to placeholder.
1187
+ const cached = url ? Wireframe._imageCache.get(url) : null;
1188
+ if (cached && this._drawImageBitmap(ctx, cached, x, y, w, h, radius)) {
1189
+ break;
1190
+ }
1191
+ this._drawImagePlaceholder(ctx, label || 'image', x, y, w, h, radius);
1192
+ break;
1193
+ }
1194
+
1195
+ case 'icon': {
1196
+ // Large <img> tags are photos/avatars — render as real images if we
1197
+ // can, with a labeled placeholder fallback. Small <img> and <svg>
1198
+ // keep the tight "icon label" treatment.
1199
+ const isBigImg = el && el.tagName === 'IMG' && w >= 48 && h >= 48;
1200
+ if (isBigImg) {
1201
+ const cached = url ? Wireframe._imageCache.get(url) : null;
1202
+ if (cached && this._drawImageBitmap(ctx, cached, x, y, w, h, radius)) {
1203
+ break;
1204
+ }
1205
+ this._drawImagePlaceholder(ctx, label || 'image', x, y, w, h, radius);
1206
+ break;
1207
+ }
1208
+
1209
+ const iconLabel = label || this._getIconLabel(el);
1210
+
1211
+ ctx.fillStyle = '#f1f5f9';
1212
+ this._roundRect(ctx, x, y, w, h, 3);
1213
+ ctx.fill();
1214
+ ctx.strokeStyle = '#94a3b8';
1215
+ ctx.lineWidth = 0.5;
1216
+ ctx.stroke();
1217
+
1218
+ if (iconLabel && w >= 10 && h >= 8) {
1219
+ const fontSize = Math.min(Math.max(h * 0.55, 7), 11);
1220
+ ctx.fillStyle = '#64748b';
1221
+ ctx.font = \`\${fontSize}px -apple-system, sans-serif\`;
1222
+ ctx.textBaseline = 'middle';
1223
+ ctx.textAlign = 'center';
1224
+ const display = iconLabel.length > 6 ? iconLabel.slice(0, 5) + '…' : iconLabel;
1225
+ ctx.fillText(display, x + w / 2, y + h / 2);
1226
+ ctx.textAlign = 'start';
1227
+ }
1228
+ break;
1229
+ }
1230
+
1231
+ case 'input':
1232
+ ctx.fillStyle = this.colors.input;
1233
+ this._roundRect(ctx, x, y, w, h, radius);
1234
+ ctx.fill();
1235
+ ctx.strokeStyle = this.colors.inputStroke;
1236
+ ctx.lineWidth = 1;
1237
+ ctx.stroke();
1238
+ break;
1239
+
1240
+ case 'button': {
1241
+ // Use actual background color if it has one
1242
+ const btnBg = style.backgroundColor;
1243
+ if (btnBg && btnBg !== 'rgba(0, 0, 0, 0)' && btnBg !== 'transparent') {
1244
+ ctx.fillStyle = btnBg;
1245
+ } else {
1246
+ ctx.fillStyle = this.colors.button;
1247
+ }
1248
+ this._roundRect(ctx, x, y, w, h, radius);
1249
+ ctx.fill();
1250
+ ctx.strokeStyle = this.colors.buttonStroke;
1251
+ ctx.lineWidth = 1;
1252
+ ctx.stroke();
1253
+ break;
1254
+ }
1255
+
1256
+ case 'text':
1257
+ // Text elements don't need a box — just drawn in text pass
1258
+ break;
1259
+
1260
+ case 'nav':
1261
+ ctx.fillStyle = this.colors.nav;
1262
+ this._roundRect(ctx, x, y, w, h, radius);
1263
+ ctx.fill();
1264
+ ctx.strokeStyle = this.colors.navStroke;
1265
+ ctx.lineWidth = 1;
1266
+ ctx.stroke();
1267
+ break;
1268
+
1269
+ case 'block':
1270
+ default:
1271
+ ctx.strokeStyle = this.colors.blockStroke;
1272
+ ctx.lineWidth = 0.5;
1273
+ this._roundRect(ctx, x, y, w, h, radius);
1274
+ ctx.stroke();
1275
+
1276
+ const hasBg = style.backgroundColor && style.backgroundColor !== 'rgba(0, 0, 0, 0)' && style.backgroundColor !== 'transparent';
1277
+ if (hasBg) {
1278
+ ctx.fillStyle = this.colors.block;
1279
+ ctx.globalAlpha = 0.3;
1280
+ this._roundRect(ctx, x, y, w, h, radius);
1281
+ ctx.fill();
1282
+ ctx.globalAlpha = 1;
1283
+ }
1284
+ break;
1285
+ }
1286
+ }
1287
+
1288
+ // Use TreeWalker to find ALL visible text nodes, regardless of nesting depth
1289
+ _drawAllText(ctx, rootRect) {
1290
+ if (!this.showText) return;
1291
+ this._drawTextInRoot(ctx, rootRect, this.root);
1292
+ }
1293
+
1294
+ _drawTextInRoot(ctx, rootRect, root) {
1295
+ // Also handle shadow DOM roots
1296
+ const els = root.querySelectorAll('*');
1297
+ for (const el of els) {
1298
+ if (el.shadowRoot) {
1299
+ this._collectElements(el.shadowRoot, rootRect, 0);
1300
+ this._drawTextInRoot(ctx, rootRect, el.shadowRoot);
1301
+ }
1302
+ }
1303
+
1304
+ const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT, {
1305
+ acceptNode: (node) => {
1306
+ const text = node.textContent.trim();
1307
+ if (!text) return NodeFilter.FILTER_REJECT;
1308
+ return NodeFilter.FILTER_ACCEPT;
1309
+ }
1310
+ });
1311
+
1312
+ while (walker.nextNode()) {
1313
+ const textNode = walker.currentNode;
1314
+ const text = textNode.textContent.trim();
1315
+ if (!text) continue;
1316
+
1317
+ // Get the parent element for positioning and style
1318
+ const parent = textNode.parentElement;
1319
+ if (!parent) continue;
1320
+
1321
+ // Use Range to get exact bounding rect of the text node
1322
+ const range = document.createRange();
1323
+ range.selectNodeContents(textNode);
1324
+ const rects = range.getClientRects();
1325
+ if (rects.length === 0) continue;
1326
+
1327
+ const style = window.getComputedStyle(parent);
1328
+ if (style.visibility === 'hidden' || style.opacity === '0') continue;
1329
+
1330
+ // Draw text at each rect (text can wrap across lines)
1331
+ for (const rect of rects) {
1332
+ if (rect.width < 4 || rect.height < 4) continue;
1333
+ if (rect.bottom < rootRect.top || rect.top > rootRect.bottom) continue;
1334
+
1335
+ const x = rect.left - rootRect.left;
1336
+ const y = rect.top - rootRect.top;
1337
+ const w = rect.width;
1338
+ const h = rect.height;
1339
+
1340
+ const fontSize = Math.min(Math.max(parseFloat(style.fontSize) || 11, 9), 24);
1341
+ const bold = parseInt(style.fontWeight) >= 600;
1342
+ const isLink = parent.closest('a') !== null;
1343
+ const isButton = parent.closest('button, [role="button"]') !== null;
1344
+
1345
+ // Detect if text is on a colored background (like blue "New" button)
1346
+ let color = this.colors.text;
1347
+ if (isLink) {
1348
+ color = this.colors.link;
1349
+ } else if (isButton) {
1350
+ // Check if parent or ancestor button has a colored bg
1351
+ const btn = parent.closest('button, [role="button"]');
1352
+ if (btn) {
1353
+ const btnStyle = window.getComputedStyle(btn);
1354
+ const bg = btnStyle.backgroundColor;
1355
+ if (bg && bg !== 'rgba(0, 0, 0, 0)' && bg !== 'transparent') {
1356
+ // Dark background → white text
1357
+ const isDarkBg = this._isDarkColor(bg);
1358
+ color = isDarkBg ? '#ffffff' : this.colors.text;
1359
+ }
1360
+ }
1361
+ }
1362
+
1363
+ this._drawText(ctx, text, x, y, w, h, color, fontSize, 'left', isLink, bold);
1364
+ this._textCount++;
1365
+ }
1366
+ }
1367
+ console.log(\`[wireframe] drew \${this._textCount} text nodes\`);
1368
+ }
1369
+
1370
+ // Parse rgb/rgba string and check if it's dark
1371
+ _isDarkColor(colorStr) {
1372
+ const match = colorStr.match(/\\d+/g);
1373
+ if (!match || match.length < 3) return false;
1374
+ const [r, g, b] = match.map(Number);
1375
+ // Luminance formula
1376
+ return (r * 0.299 + g * 0.587 + b * 0.114) < 128;
1377
+ }
1378
+
1379
+ _drawText(ctx, text, x, y, w, h, color, fontSize = 11, align = 'left', underline = false, bold = false) {
1380
+ if (w < 10 || h < 8) return;
1381
+
1382
+ ctx.fillStyle = color;
1383
+ ctx.font = \`\${bold ? 'bold ' : ''}\${fontSize}px -apple-system, sans-serif\`;
1384
+ ctx.textBaseline = 'middle';
1385
+
1386
+ // Truncate text to fit
1387
+ let display = text;
1388
+ while (ctx.measureText(display).width > w && display.length > 1) {
1389
+ display = display.slice(0, -2) + '…';
1390
+ }
1391
+
1392
+ const textY = y + h / 2;
1393
+ let textX = x;
1394
+ if (align === 'center') {
1395
+ textX = x + (w - ctx.measureText(display).width) / 2;
1396
+ }
1397
+
1398
+ ctx.fillText(display, textX, textY);
1399
+
1400
+ if (underline) {
1401
+ const textW = ctx.measureText(display).width;
1402
+ ctx.beginPath();
1403
+ ctx.moveTo(textX, textY + fontSize / 2);
1404
+ ctx.lineTo(textX + textW, textY + fontSize / 2);
1405
+ ctx.strokeStyle = color;
1406
+ ctx.lineWidth = 0.5;
1407
+ ctx.stroke();
1408
+ }
1409
+ }
1410
+
1411
+ _roundRect(ctx, x, y, w, h, r) {
1412
+ ctx.beginPath();
1413
+ ctx.moveTo(x + r, y);
1414
+ ctx.lineTo(x + w - r, y);
1415
+ ctx.quadraticCurveTo(x + w, y, x + w, y + r);
1416
+ ctx.lineTo(x + w, y + h - r);
1417
+ ctx.quadraticCurveTo(x + w, y + h, x + w - r, y + h);
1418
+ ctx.lineTo(x + r, y + h);
1419
+ ctx.quadraticCurveTo(x, y + h, x, y + h - r);
1420
+ ctx.lineTo(x, y + r);
1421
+ ctx.quadraticCurveTo(x, y, x + r, y);
1422
+ ctx.closePath();
1423
+ }
1424
+
1425
+ // --- Export ---
1426
+ async download(filename) {
1427
+ const { canvas } = await this.capture();
1428
+ canvas.toBlob(b => {
1429
+ const a = document.createElement('a');
1430
+ a.href = URL.createObjectURL(b);
1431
+ a.download = filename || \`wireframe-\${Date.now()}.png\`;
1432
+ a.click();
1433
+ URL.revokeObjectURL(a.href);
1434
+ }, 'image/png');
1435
+ }
1436
+
1437
+ async toDataURL() {
1438
+ const { canvas } = await this.capture();
1439
+ return canvas.toDataURL('image/png');
1440
+ }
1441
+
1442
+ async toBlob() {
1443
+ const { canvas } = await this.capture();
1444
+ return new Promise(r => canvas.toBlob(r, 'image/png'));
1445
+ }
1446
+ }
1447
+
1448
+ // --- Quick API ---
1449
+ async function wireframe(el = document.body, opts = {}) {
1450
+ const w = new Wireframe(el, opts);
1451
+ return w.capture();
1452
+ }
1453
+
1454
+ async function demo() {
1455
+ const w = new Wireframe(document.body, { scale: 1 });
1456
+
1457
+ // Benchmark
1458
+ const runs = 5;
1459
+ const times = [];
1460
+ for (let i = 0; i < runs; i++) {
1461
+ const { elapsed } = await w.capture();
1462
+ times.push(elapsed);
1463
+ }
1464
+ const avg = times.reduce((a, b) => a + b) / times.length;
1465
+ console.log(\`\\n=== WIREFRAME BENCHMARK ===\`);
1466
+ console.log(\`Runs: \${times.map(t => t.toFixed(0) + 'ms').join(', ')}\`);
1467
+ console.log(\`Avg: \${avg.toFixed(0)}ms\`);
1468
+
1469
+ // Download
1470
+ await w.download();
1471
+
1472
+ window.__wireframe = w;
1473
+ return w;
1474
+ }
1475
+
1476
+ console.log('Wireframe ready! No dependencies needed.');
1477
+ console.log(' await demo() — benchmark + download');
1478
+ console.log(' await new Wireframe().download() — quick download');
1479
+ console.log(' await new Wireframe().toDataURL() — base64 for LLM');
1480
+ `;var _n=null;function Dl(){if(!_n)_n=(0,eval)(`(function(){
1481
+ var console = Object.assign({}, globalThis.console, {
1482
+ log: function(){}, info: function(){}, debug: function(){}
1483
+ });
1484
+ ${is};
1485
+ return Wireframe;
1486
+ })()`);return _n}var vn=null;function ru(){if(!vn)vn=(0,eval)(`(${ss})`);return vn}async function cs(){let t=ru()();return{screenshot_jpeg_b64:(await new(Dl())(document.body,{}).toDataURL()).replace(/^data:[^,]+,/,""),elements:t,viewport:{width:window.innerWidth,height:window.innerHeight},url:window.location.href}}async function hs(){let t=()=>new Promise((e)=>requestAnimationFrame(()=>requestAnimationFrame(()=>e())));await t(),await new Promise((e)=>{let r=performance.now(),o=performance.now(),s=new MutationObserver(()=>{o=performance.now()});s.observe(document.documentElement,{subtree:!0,childList:!0,attributes:!0,characterData:!0});let c=()=>{let i=performance.now();if(i-o>=30){s.disconnect(),e();return}if(i-r>=30){s.disconnect(),e();return}requestAnimationFrame(c)};requestAnimationFrame(c)}),await t()}function Qe(t,e){return async(l)=>{let n={};try{n=l.payload?JSON.parse(l.payload):{}}catch(r){console.warn(`[Sable] ${t}: bad JSON payload`,r)}try{let r=await e(n);return JSON.stringify(r??{})}catch(r){let o=r instanceof Error?r.message:String(r);return console.warn(`[Sable] ${t}: handler error`,o),JSON.stringify({error:o})}}}function fs(t){t.registerRpcMethod("browser.execute_action",Qe("browser.execute_action",async(e)=>{let l=e.action;if(!l||typeof l!=="object")throw Error("execute_action: missing action");return await os(l),{}})),t.registerRpcMethod("browser.get_dom_state",Qe("browser.get_dom_state",async()=>cs())),t.registerRpcMethod("browser.get_url",Qe("browser.get_url",async()=>({url:window.location.href}))),t.registerRpcMethod("browser.get_viewport",Qe("browser.get_viewport",async()=>({width:window.innerWidth,height:window.innerHeight}))),t.registerRpcMethod("browser.verify_selector",Qe("browser.verify_selector",async(e)=>{let l=typeof e.selector==="string"?e.selector:"",n=!1;try{n=!!document.querySelector(l)}catch{n=!1}return{matches:n}})),t.registerRpcMethod("browser.settle",Qe("browser.settle",async()=>{return await hs(),{}})),console.log("[Sable] browser bridge RPCs registered")}var ou=2;function su(t){let e=typeof t==="number"&&t>0?t:ou;return Math.max(1,Math.round(1000/e))}function iu(t){let e=Math.max(1,window.innerWidth),l=Math.max(1,window.innerHeight);if(t.width!==e||t.height!==l)t.width=e,t.height=l}function us(t,e){let l=e.getContext("2d",{alpha:!1});if(!l)return console.warn("[Sable] frame source: 2d context unavailable"),()=>{};let n=su(t.rate),r=!1,o,s=!1,c=async()=>{if(r)return;if(!s){s=!0;try{if(iu(e),t.type==="wireframe"){let i=t.features?.includeImages===!0,f=new(Dl())(document.body,{images:i}),{canvas:u}=await f.capture();l.fillStyle="#ffffff",l.fillRect(0,0,e.width,e.height),l.drawImage(u,0,0,e.width,e.height)}else if(t.type==="fn"){let i=t.captureFn();l.fillStyle="#ffffff",l.fillRect(0,0,e.width,e.height),l.drawImage(i,0,0,e.width,e.height)}}catch(i){console.warn("[Sable] frame source tick failed",i)}finally{s=!1}}if(!r)o=setTimeout(c,n)};return c(),()=>{if(r=!0,o!==void 0)clearTimeout(o)}}async function ds(t,e,l,n){let o=l.captureStream(n).getVideoTracks();if(o.length===0)throw Error("canvas.captureStream produced no video tracks");let s=o[0],c=new e.LocalVideoTrack(s,void 0,!0),i=await t.localParticipant.publishTrack(c,{source:e.Track.Source.ScreenShare,name:"browser"});return console.log("[Sable] vision track published",{trackSid:i.trackSid,fps:n}),async()=>{try{await t.localParticipant.unpublishTrack(c,!0)}catch(h){console.warn("[Sable] vision unpublishTrack failed",h)}try{s.stop()}catch{}console.log("[Sable] vision track stopped")}}var cu={type:"wireframe",rate:2,features:{includeImages:!1}};async function as(t){let e=t.options.frameSource??cu,l=typeof e.rate==="number"&&e.rate>0?e.rate:2,n=document.createElement("canvas");n.width=Math.max(1,window.innerWidth),n.height=Math.max(1,window.innerHeight);let r=us(e,n),o;try{o=await ds(t.room,t.lib,n,l)}catch(s){throw r(),s}return{canvas:n,stop:async()=>{r(),await o()}}}var tr="0.1.4";function er(){try{let t=window.localStorage?.getItem("sable:debug:panel");if(!t)return{};let e=JSON.parse(t);return typeof e==="object"&&e!==null?e:{}}catch{return{}}}function bs(t){try{window.localStorage?.setItem("sable:debug:panel",JSON.stringify(t))}catch{}}function xs(t){if(t)return!0;try{if(new URL(window.location.href).searchParams.get("sable-debug")==="1")return!0}catch{}try{if(window.localStorage?.getItem("sable:debug")==="1")return!0}catch{}return!1}function gs(t){let e=er(),l=document.createElement("div");if(l.setAttribute("data-sable-debug","vision"),Object.assign(l.style,{position:"fixed",width:"240px",zIndex:"2147483647",background:"#111",color:"#ddd",border:"1px solid #444",borderRadius:"8px",font:"11px/1.3 system-ui, sans-serif",boxShadow:"0 8px 24px rgba(0,0,0,.4)",pointerEvents:"none",userSelect:"none",overflow:"hidden"}),typeof e.left==="number"&&typeof e.top==="number")l.style.left=`${e.left}px`,l.style.top=`${e.top}px`;else l.style.right="12px",l.style.top="12px";let n=document.createElement("div");Object.assign(n.style,{display:"flex",alignItems:"center",justifyContent:"space-between",gap:"6px",padding:"6px 8px",background:"#1a1a1a",borderBottom:"1px solid #333",cursor:"move",pointerEvents:"auto"});let r=document.createElement("div");r.textContent="sable: agent vision",Object.assign(r.style,{opacity:"0.75",fontWeight:"600",flex:"1",pointerEvents:"none"}),n.appendChild(r);let o=document.createElement("button");o.setAttribute("aria-label","Minimize vision panel"),Object.assign(o.style,{background:"transparent",color:"#ddd",border:"1px solid #444",borderRadius:"4px",width:"20px",height:"20px",cursor:"pointer",fontSize:"12px",lineHeight:"1",padding:"0",pointerEvents:"auto"}),n.appendChild(o),l.appendChild(n);let s=document.createElement("div");Object.assign(s.style,{padding:"6px",background:"#111",pointerEvents:"none"}),t.style.width="100%",t.style.height="auto",t.style.display="block",t.style.background="#fff",t.style.borderRadius="4px",t.style.pointerEvents="none",s.appendChild(t),l.appendChild(s);let c=!!e.minimized,i=()=>{s.style.display=c?"none":"block",o.textContent=c?"▢":"–",o.setAttribute("aria-label",c?"Restore vision panel":"Minimize vision panel")};i(),o.addEventListener("click",(x)=>{x.stopPropagation(),c=!c,i(),bs({...er(),minimized:c})});let h=null,f=(x)=>{if(x.target instanceof HTMLElement&&x.target.closest("button"))return;let g=l.getBoundingClientRect();h={offsetX:x.clientX-g.left,offsetY:x.clientY-g.top},l.style.left=`${g.left}px`,l.style.top=`${g.top}px`,l.style.right="auto",l.style.bottom="auto",n.setPointerCapture(x.pointerId),x.preventDefault()},u=(x)=>{if(!h)return;let{innerWidth:g,innerHeight:w}=window,p=l.offsetWidth,y=x.clientX-h.offsetX,$=x.clientY-h.offsetY;y=Math.min(Math.max(y,-p+48),g-48),$=Math.min(Math.max($,0),w-24),l.style.left=`${y}px`,l.style.top=`${$}px`},d=(x)=>{if(!h)return;h=null;try{n.releasePointerCapture(x.pointerId)}catch{}let g=parseFloat(l.style.left)||0,w=parseFloat(l.style.top)||0;bs({...er(),left:g,top:w})};return n.addEventListener("pointerdown",f),n.addEventListener("pointermove",u),n.addEventListener("pointerup",d),n.addEventListener("pointercancel",d),document.body.appendChild(l),console.log("[Sable] debug vision panel mounted",{minimized:c,restoredPosition:typeof e.left==="number"&&typeof e.top==="number"}),()=>{try{n.removeEventListener("pointerdown",f),n.removeEventListener("pointermove",u),n.removeEventListener("pointerup",d),n.removeEventListener("pointercancel",d),l.remove()}catch{}}}var Nx=5,Tf=500;function Mx(t){let e=t.remoteParticipants?Array.from(t.remoteParticipants.values()):[];return e.find((n)=>typeof n.identity==="string"&&n.identity.startsWith("agent"))?.identity??e[0]?.identity??null}async function Hx(t){for(let e=1;e<=Nx;e++){let l=Mx(t);if(!l){console.warn("[Sable] sendUiReady: no agent participant yet",{attempt:e}),await new Promise((n)=>setTimeout(n,Tf));continue}try{await t.localParticipant.performRpc({destinationIdentity:l,method:"uiReady",payload:JSON.stringify({timestamp:Date.now()})}),console.log("[Sable] uiReady sent",{identity:l,attempt:e});return}catch(n){console.warn("[Sable] uiReady RPC failed",{attempt:e,err:n}),await new Promise((r)=>setTimeout(r,Tf))}}console.error("[Sable] uiReady: exhausted retries — agent will not greet")}class _o{version=tr;emitter=new kn;activeRoom=null;visionHandle=null;unmountDebugPanel=null;on(t,e){return this.emitter.on(t,e)}async start(t){if(this.activeRoom)throw Error("Sable already started; call stop() first");let e=t.publicKey??t.agentPublicId;if(!e)throw Error("Sable.start: `publicKey` is required");let l=t.apiUrl??ts;console.log("[Sable] fetching connection details",{apiUrl:l});let n=await es({apiUrl:l,publicKey:e});console.log("[Sable] connection details received",{roomName:n.roomName,participantName:n.participantName});let r=await Promise.resolve().then(() => (qf(),jf)),{Room:o,RoomEvent:s,LocalVideoTrack:c,Track:i}=r,h=new o,f={LocalVideoTrack:c,Track:i};if(h.registerRpcMethod("agentReady",async()=>{return console.log("[Sable] RPC agentReady received"),Hx(h),JSON.stringify({success:!0})}),fs(h),rs(h,t.runtime),this.wireRoomEvents(h,s),await h.connect(n.serverUrl,n.participantToken),await h.localParticipant.setMicrophoneEnabled(!0),this.activeRoom=h,t.vision?.enabled)try{if(this.visionHandle=await as({room:h,lib:f,options:t.vision}),xs(t.debug))this.unmountDebugPanel=gs(this.visionHandle.canvas)}catch(u){console.warn("[Sable] failed to start vision",u)}console.log("[Sable] session live",{roomName:n.roomName,participantName:n.participantName}),this.emitter.emit("session:started",{roomName:n.roomName,participantName:n.participantName}),setTimeout(()=>{if(this.activeRoom!==h)return;let u=h,x=(u.remoteParticipants?Array.from(u.remoteParticipants.values()):[]).map((w)=>({identity:w.identity,tracks:w.trackPublications?Array.from(w.trackPublications.values()).map((p)=>({kind:p.kind,subscribed:p.isSubscribed})):[]}));if(!x.some((w)=>w.tracks.some((p)=>p.kind==="audio")))console.warn("[Sable] no remote audio track after 10s — agent worker probably failed to publish. Remote participants:",x)},1e4)}async stop(){let t=this.activeRoom;if(!t)return;if(this.activeRoom=null,this.unmountDebugPanel){try{this.unmountDebugPanel()}catch(e){console.warn("[Sable] debug panel unmount failed",e)}this.unmountDebugPanel=null}if(this.visionHandle){try{await this.visionHandle.stop()}catch(e){console.warn("[Sable] vision stop failed",e)}this.visionHandle=null}try{await t.localParticipant.setMicrophoneEnabled(!1)}catch(e){console.warn("[Sable] setMicrophoneEnabled(false) failed",e)}await t.disconnect(),console.log("[Sable] session ended"),this.emitter.emit("session:ended",{})}wireRoomEvents(t,e){t.on(e.ConnectionStateChanged,(l)=>{console.log("[Sable] ConnectionStateChanged",l)}),t.on(e.Disconnected,(l)=>{if(console.log("[Sable] Disconnected",l),this.activeRoom===t)this.stop().catch((n)=>console.warn("[Sable] stop on disconnect failed",n))}),t.on(e.ParticipantConnected,(l)=>{let n=l;console.log("[Sable] ParticipantConnected",{identity:n.identity,sid:n.sid})}),t.on(e.ParticipantDisconnected,(l)=>{console.warn("[Sable] ParticipantDisconnected",{identity:l.identity})}),t.on(e.TrackSubscribed,(l,n,r)=>{let o=l,s=r;if(console.log("[Sable] TrackSubscribed",{kind:o.kind,participant:s.identity}),o.kind==="audio"&&typeof o.attach==="function"){let c=o.attach();c.setAttribute("data-sable","1"),c.setAttribute("playsinline",""),c.autoplay=!0,document.body.appendChild(c),console.log("[Sable] attached remote audio element")}}),t.on(e.TrackUnsubscribed,(l)=>{let n=l;if(typeof n.detach==="function")for(let r of n.detach())r.remove()}),t.on(e.ActiveSpeakersChanged,(l)=>{let n=l??[],r=n.some((s)=>typeof s.identity==="string"&&s.identity.startsWith("agent")),o=n.some((s)=>typeof s.identity==="string"&&!s.identity.startsWith("agent"));this.emitter.emit("agent:speaking",r),this.emitter.emit("user:speaking",o)})}}var Sn=new _o;function Ff(){if(typeof window>"u")return;if(window.Sable)return;window.Sable=Sn,console.log("[Sable] SDK loaded",Sn.version)}Ff();var Ag=Sn;export{Ag as default,tr as VERSION};