@koi-design/callkit 2.0.5-beta.13 → 2.0.5-beta.15

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.
@@ -1,16 +1,16 @@
1
- var WebCall=(()=>{var Gn=Object.create;var Yt=Object.defineProperty;var Vn=Object.getOwnPropertyDescriptor;var Wn=Object.getOwnPropertyNames;var Yn=Object.getPrototypeOf,Jn=Object.prototype.hasOwnProperty;var ye=(n=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(n,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):n)(function(n){if(typeof require<"u")return require.apply(this,arguments);throw new Error('Dynamic require of "'+n+'" is not supported')});var L=(n,e)=>()=>(e||n((e={exports:{}}).exports,e),e.exports),Wi=(n,e)=>{for(var t in e)Yt(n,t,{get:e[t],enumerable:!0})},Yi=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Wn(e))!Jn.call(n,i)&&i!==t&&Yt(n,i,{get:()=>e[i],enumerable:!(r=Vn(e,i))||r.enumerable});return n};var Xr=(n,e,t)=>(t=n!=null?Gn(Yn(n)):{},Yi(e||!n||!n.__esModule?Yt(t,"default",{value:n,enumerable:!0}):t,n)),zn=n=>Yi(Yt({},"__esModule",{value:!0}),n);var zi=L((Ji,Jt)=>{(function(n){"use strict";function e(f,x){var w=(f&65535)+(x&65535),U=(f>>16)+(x>>16)+(w>>16);return U<<16|w&65535}function t(f,x){return f<<x|f>>>32-x}function r(f,x,w,U,K,B){return e(t(e(e(x,f),e(U,B)),K),w)}function i(f,x,w,U,K,B,z){return r(x&w|~x&U,f,x,K,B,z)}function s(f,x,w,U,K,B,z){return r(x&U|w&~U,f,x,K,B,z)}function o(f,x,w,U,K,B,z){return r(x^w^U,f,x,K,B,z)}function a(f,x,w,U,K,B,z){return r(w^(x|~U),f,x,K,B,z)}function d(f,x){f[x>>5]|=128<<x%32,f[(x+64>>>9<<4)+14]=x;var w,U,K,B,z,y=1732584193,R=-271733879,c=-1732584194,S=271733878;for(w=0;w<f.length;w+=16)U=y,K=R,B=c,z=S,y=i(y,R,c,S,f[w],7,-680876936),S=i(S,y,R,c,f[w+1],12,-389564586),c=i(c,S,y,R,f[w+2],17,606105819),R=i(R,c,S,y,f[w+3],22,-1044525330),y=i(y,R,c,S,f[w+4],7,-176418897),S=i(S,y,R,c,f[w+5],12,1200080426),c=i(c,S,y,R,f[w+6],17,-1473231341),R=i(R,c,S,y,f[w+7],22,-45705983),y=i(y,R,c,S,f[w+8],7,1770035416),S=i(S,y,R,c,f[w+9],12,-1958414417),c=i(c,S,y,R,f[w+10],17,-42063),R=i(R,c,S,y,f[w+11],22,-1990404162),y=i(y,R,c,S,f[w+12],7,1804603682),S=i(S,y,R,c,f[w+13],12,-40341101),c=i(c,S,y,R,f[w+14],17,-1502002290),R=i(R,c,S,y,f[w+15],22,1236535329),y=s(y,R,c,S,f[w+1],5,-165796510),S=s(S,y,R,c,f[w+6],9,-1069501632),c=s(c,S,y,R,f[w+11],14,643717713),R=s(R,c,S,y,f[w],20,-373897302),y=s(y,R,c,S,f[w+5],5,-701558691),S=s(S,y,R,c,f[w+10],9,38016083),c=s(c,S,y,R,f[w+15],14,-660478335),R=s(R,c,S,y,f[w+4],20,-405537848),y=s(y,R,c,S,f[w+9],5,568446438),S=s(S,y,R,c,f[w+14],9,-1019803690),c=s(c,S,y,R,f[w+3],14,-187363961),R=s(R,c,S,y,f[w+8],20,1163531501),y=s(y,R,c,S,f[w+13],5,-1444681467),S=s(S,y,R,c,f[w+2],9,-51403784),c=s(c,S,y,R,f[w+7],14,1735328473),R=s(R,c,S,y,f[w+12],20,-1926607734),y=o(y,R,c,S,f[w+5],4,-378558),S=o(S,y,R,c,f[w+8],11,-2022574463),c=o(c,S,y,R,f[w+11],16,1839030562),R=o(R,c,S,y,f[w+14],23,-35309556),y=o(y,R,c,S,f[w+1],4,-1530992060),S=o(S,y,R,c,f[w+4],11,1272893353),c=o(c,S,y,R,f[w+7],16,-155497632),R=o(R,c,S,y,f[w+10],23,-1094730640),y=o(y,R,c,S,f[w+13],4,681279174),S=o(S,y,R,c,f[w],11,-358537222),c=o(c,S,y,R,f[w+3],16,-722521979),R=o(R,c,S,y,f[w+6],23,76029189),y=o(y,R,c,S,f[w+9],4,-640364487),S=o(S,y,R,c,f[w+12],11,-421815835),c=o(c,S,y,R,f[w+15],16,530742520),R=o(R,c,S,y,f[w+2],23,-995338651),y=a(y,R,c,S,f[w],6,-198630844),S=a(S,y,R,c,f[w+7],10,1126891415),c=a(c,S,y,R,f[w+14],15,-1416354905),R=a(R,c,S,y,f[w+5],21,-57434055),y=a(y,R,c,S,f[w+12],6,1700485571),S=a(S,y,R,c,f[w+3],10,-1894986606),c=a(c,S,y,R,f[w+10],15,-1051523),R=a(R,c,S,y,f[w+1],21,-2054922799),y=a(y,R,c,S,f[w+8],6,1873313359),S=a(S,y,R,c,f[w+15],10,-30611744),c=a(c,S,y,R,f[w+6],15,-1560198380),R=a(R,c,S,y,f[w+13],21,1309151649),y=a(y,R,c,S,f[w+4],6,-145523070),S=a(S,y,R,c,f[w+11],10,-1120210379),c=a(c,S,y,R,f[w+2],15,718787259),R=a(R,c,S,y,f[w+9],21,-343485551),y=e(y,U),R=e(R,K),c=e(c,B),S=e(S,z);return[y,R,c,S]}function h(f){var x,w="",U=f.length*32;for(x=0;x<U;x+=8)w+=String.fromCharCode(f[x>>5]>>>x%32&255);return w}function l(f){var x,w=[];for(w[(f.length>>2)-1]=void 0,x=0;x<w.length;x+=1)w[x]=0;var U=f.length*8;for(x=0;x<U;x+=8)w[x>>5]|=(f.charCodeAt(x/8)&255)<<x%32;return w}function u(f){return h(d(l(f),f.length*8))}function T(f,x){var w,U=l(f),K=[],B=[],z;for(K[15]=B[15]=void 0,U.length>16&&(U=d(U,f.length*8)),w=0;w<16;w+=1)K[w]=U[w]^909522486,B[w]=U[w]^1549556828;return z=d(K.concat(l(x)),512+x.length*8),h(d(B.concat(z),512+128))}function A(f){var x="0123456789abcdef",w="",U,K;for(K=0;K<f.length;K+=1)U=f.charCodeAt(K),w+=x.charAt(U>>>4&15)+x.charAt(U&15);return w}function _(f){return unescape(encodeURIComponent(f))}function $(f){return u(_(f))}function N(f){return A($(f))}function P(f,x){return T(_(f),_(x))}function k(f,x){return A(P(f,x))}function C(f,x,w){return x?w?P(x,f):k(x,f):w?$(f):N(f)}typeof define=="function"&&define.amd?define(function(){return C}):typeof Jt=="object"&&Jt.exports?Jt.exports=C:n.md5=C})(Ji)});var Qr=L((ic,Zi)=>{"use strict";Zi.exports=function(e,t){return function(){for(var i=new Array(arguments.length),s=0;s<i.length;s++)i[s]=arguments[s];return e.apply(t,i)}}});var de=L((sc,ts)=>{"use strict";var Zn=Qr(),We=Object.prototype.toString;function ri(n){return Array.isArray(n)}function ei(n){return typeof n>"u"}function Xn(n){return n!==null&&!ei(n)&&n.constructor!==null&&!ei(n.constructor)&&typeof n.constructor.isBuffer=="function"&&n.constructor.isBuffer(n)}function Xi(n){return We.call(n)==="[object ArrayBuffer]"}function Qn(n){return We.call(n)==="[object FormData]"}function eo(n){var e;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?e=ArrayBuffer.isView(n):e=n&&n.buffer&&Xi(n.buffer),e}function to(n){return typeof n=="string"}function ro(n){return typeof n=="number"}function Qi(n){return n!==null&&typeof n=="object"}function zt(n){if(We.call(n)!=="[object Object]")return!1;var e=Object.getPrototypeOf(n);return e===null||e===Object.prototype}function io(n){return We.call(n)==="[object Date]"}function so(n){return We.call(n)==="[object File]"}function no(n){return We.call(n)==="[object Blob]"}function es(n){return We.call(n)==="[object Function]"}function oo(n){return Qi(n)&&es(n.pipe)}function ao(n){return We.call(n)==="[object URLSearchParams]"}function co(n){return n.trim?n.trim():n.replace(/^\s+|\s+$/g,"")}function lo(){return typeof navigator<"u"&&(navigator.product==="ReactNative"||navigator.product==="NativeScript"||navigator.product==="NS")?!1:typeof window<"u"&&typeof document<"u"}function ii(n,e){if(!(n===null||typeof n>"u"))if(typeof n!="object"&&(n=[n]),ri(n))for(var t=0,r=n.length;t<r;t++)e.call(null,n[t],t,n);else for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&e.call(null,n[i],i,n)}function ti(){var n={};function e(i,s){zt(n[s])&&zt(i)?n[s]=ti(n[s],i):zt(i)?n[s]=ti({},i):ri(i)?n[s]=i.slice():n[s]=i}for(var t=0,r=arguments.length;t<r;t++)ii(arguments[t],e);return n}function ho(n,e,t){return ii(e,function(i,s){t&&typeof i=="function"?n[s]=Zn(i,t):n[s]=i}),n}function uo(n){return n.charCodeAt(0)===65279&&(n=n.slice(1)),n}ts.exports={isArray:ri,isArrayBuffer:Xi,isBuffer:Xn,isFormData:Qn,isArrayBufferView:eo,isString:to,isNumber:ro,isObject:Qi,isPlainObject:zt,isUndefined:ei,isDate:io,isFile:so,isBlob:no,isFunction:es,isStream:oo,isURLSearchParams:ao,isStandardBrowserEnv:lo,forEach:ii,merge:ti,extend:ho,trim:co,stripBOM:uo}});var Zt=L((nc,is)=>{"use strict";var ut=de();function rs(n){return encodeURIComponent(n).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}is.exports=function(e,t,r){if(!t)return e;var i;if(r)i=r(t);else if(ut.isURLSearchParams(t))i=t.toString();else{var s=[];ut.forEach(t,function(d,h){d===null||typeof d>"u"||(ut.isArray(d)?h=h+"[]":d=[d],ut.forEach(d,function(u){ut.isDate(u)?u=u.toISOString():ut.isObject(u)&&(u=JSON.stringify(u)),s.push(rs(h)+"="+rs(u))}))}),i=s.join("&")}if(i){var o=e.indexOf("#");o!==-1&&(e=e.slice(0,o)),e+=(e.indexOf("?")===-1?"?":"&")+i}return e}});var ns=L((oc,ss)=>{"use strict";var go=de();function Xt(){this.handlers=[]}Xt.prototype.use=function(e,t,r){return this.handlers.push({fulfilled:e,rejected:t,synchronous:r?r.synchronous:!1,runWhen:r?r.runWhen:null}),this.handlers.length-1};Xt.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)};Xt.prototype.forEach=function(e){go.forEach(this.handlers,function(r){r!==null&&e(r)})};ss.exports=Xt});var as=L((ac,os)=>{"use strict";var fo=de();os.exports=function(e,t){fo.forEach(e,function(i,s){s!==t&&s.toUpperCase()===t.toUpperCase()&&(e[t]=i,delete e[s])})}});var Qt=L((cc,cs)=>{"use strict";cs.exports=function(e,t,r,i,s){return e.config=t,r&&(e.code=r),e.request=i,e.response=s,e.isAxiosError=!0,e.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code,status:this.response&&this.response.status?this.response.status:null}},e}});var er=L((lc,ls)=>{"use strict";ls.exports={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1}});var tr=L((dc,ds)=>{"use strict";var po=Qt();ds.exports=function(e,t,r,i,s){var o=new Error(e);return po(o,t,r,i,s)}});var si=L((hc,hs)=>{"use strict";var mo=tr();hs.exports=function(e,t,r){var i=r.config.validateStatus;!r.status||!i||i(r.status)?e(r):t(mo("Request failed with status code "+r.status,r.config,null,r.request,r))}});var gs=L((uc,us)=>{"use strict";var rr=de();us.exports=rr.isStandardBrowserEnv()?function(){return{write:function(t,r,i,s,o,a){var d=[];d.push(t+"="+encodeURIComponent(r)),rr.isNumber(i)&&d.push("expires="+new Date(i).toGMTString()),rr.isString(s)&&d.push("path="+s),rr.isString(o)&&d.push("domain="+o),a===!0&&d.push("secure"),document.cookie=d.join("; ")},read:function(t){var r=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return r?decodeURIComponent(r[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()});var ps=L((gc,fs)=>{"use strict";fs.exports=function(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}});var Cs=L((fc,ms)=>{"use strict";ms.exports=function(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e}});var ni=L((pc,vs)=>{"use strict";var Co=ps(),vo=Cs();vs.exports=function(e,t){return e&&!Co(t)?vo(e,t):t}});var ws=L((mc,Es)=>{"use strict";var oi=de(),Eo=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];Es.exports=function(e){var t={},r,i,s;return e&&oi.forEach(e.split(`
2
- `),function(a){if(s=a.indexOf(":"),r=oi.trim(a.substr(0,s)).toLowerCase(),i=oi.trim(a.substr(s+1)),r){if(t[r]&&Eo.indexOf(r)>=0)return;r==="set-cookie"?t[r]=(t[r]?t[r]:[]).concat([i]):t[r]=t[r]?t[r]+", "+i:i}}),t}});var Ss=L((Cc,Rs)=>{"use strict";var Ts=de();Rs.exports=Ts.isStandardBrowserEnv()?function(){var e=/(msie|trident)/i.test(navigator.userAgent),t=document.createElement("a"),r;function i(s){var o=s;return e&&(t.setAttribute("href",o),o=t.href),t.setAttribute("href",o),{href:t.href,protocol:t.protocol?t.protocol.replace(/:$/,""):"",host:t.host,search:t.search?t.search.replace(/^\?/,""):"",hash:t.hash?t.hash.replace(/^#/,""):"",hostname:t.hostname,port:t.port,pathname:t.pathname.charAt(0)==="/"?t.pathname:"/"+t.pathname}}return r=i(window.location.href),function(o){var a=Ts.isString(o)?i(o):o;return a.protocol===r.protocol&&a.host===r.host}}():function(){return function(){return!0}}()});var gt=L((vc,ys)=>{"use strict";function ai(n){this.message=n}ai.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")};ai.prototype.__CANCEL__=!0;ys.exports=ai});var bs=L((Ec,Is)=>{"use strict";var ir=de(),wo=si(),To=gs(),Ro=Zt(),So=ni(),yo=ws(),Io=Ss(),ci=tr(),bo=er(),xo=gt();Is.exports=function(e){return new Promise(function(r,i){var s=e.data,o=e.headers,a=e.responseType,d;function h(){e.cancelToken&&e.cancelToken.unsubscribe(d),e.signal&&e.signal.removeEventListener("abort",d)}ir.isFormData(s)&&delete o["Content-Type"];var l=new XMLHttpRequest;if(e.auth){var u=e.auth.username||"",T=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";o.Authorization="Basic "+btoa(u+":"+T)}var A=So(e.baseURL,e.url);l.open(e.method.toUpperCase(),Ro(A,e.params,e.paramsSerializer),!0),l.timeout=e.timeout;function _(){if(l){var N="getAllResponseHeaders"in l?yo(l.getAllResponseHeaders()):null,P=!a||a==="text"||a==="json"?l.responseText:l.response,k={data:P,status:l.status,statusText:l.statusText,headers:N,config:e,request:l};wo(function(f){r(f),h()},function(f){i(f),h()},k),l=null}}if("onloadend"in l?l.onloadend=_:l.onreadystatechange=function(){!l||l.readyState!==4||l.status===0&&!(l.responseURL&&l.responseURL.indexOf("file:")===0)||setTimeout(_)},l.onabort=function(){l&&(i(ci("Request aborted",e,"ECONNABORTED",l)),l=null)},l.onerror=function(){i(ci("Network Error",e,null,l)),l=null},l.ontimeout=function(){var P=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded",k=e.transitional||bo;e.timeoutErrorMessage&&(P=e.timeoutErrorMessage),i(ci(P,e,k.clarifyTimeoutError?"ETIMEDOUT":"ECONNABORTED",l)),l=null},ir.isStandardBrowserEnv()){var $=(e.withCredentials||Io(A))&&e.xsrfCookieName?To.read(e.xsrfCookieName):void 0;$&&(o[e.xsrfHeaderName]=$)}"setRequestHeader"in l&&ir.forEach(o,function(P,k){typeof s>"u"&&k.toLowerCase()==="content-type"?delete o[k]:l.setRequestHeader(k,P)}),ir.isUndefined(e.withCredentials)||(l.withCredentials=!!e.withCredentials),a&&a!=="json"&&(l.responseType=e.responseType),typeof e.onDownloadProgress=="function"&&l.addEventListener("progress",e.onDownloadProgress),typeof e.onUploadProgress=="function"&&l.upload&&l.upload.addEventListener("progress",e.onUploadProgress),(e.cancelToken||e.signal)&&(d=function(N){l&&(i(!N||N&&N.type?new xo("canceled"):N),l.abort(),l=null)},e.cancelToken&&e.cancelToken.subscribe(d),e.signal&&(e.signal.aborted?d():e.signal.addEventListener("abort",d))),s||(s=null),l.send(s)})}});var As=L((wc,xs)=>{var ft=1e3,pt=ft*60,mt=pt*60,nt=mt*24,Ao=nt*7,_o=nt*365.25;xs.exports=function(n,e){e=e||{};var t=typeof n;if(t==="string"&&n.length>0)return $o(n);if(t==="number"&&isFinite(n))return e.long?Po(n):Do(n);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(n))};function $o(n){if(n=String(n),!(n.length>100)){var e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(n);if(e){var t=parseFloat(e[1]),r=(e[2]||"ms").toLowerCase();switch(r){case"years":case"year":case"yrs":case"yr":case"y":return t*_o;case"weeks":case"week":case"w":return t*Ao;case"days":case"day":case"d":return t*nt;case"hours":case"hour":case"hrs":case"hr":case"h":return t*mt;case"minutes":case"minute":case"mins":case"min":case"m":return t*pt;case"seconds":case"second":case"secs":case"sec":case"s":return t*ft;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return t;default:return}}}}function Do(n){var e=Math.abs(n);return e>=nt?Math.round(n/nt)+"d":e>=mt?Math.round(n/mt)+"h":e>=pt?Math.round(n/pt)+"m":e>=ft?Math.round(n/ft)+"s":n+"ms"}function Po(n){var e=Math.abs(n);return e>=nt?sr(n,e,nt,"day"):e>=mt?sr(n,e,mt,"hour"):e>=pt?sr(n,e,pt,"minute"):e>=ft?sr(n,e,ft,"second"):n+" ms"}function sr(n,e,t,r){var i=e>=t*1.5;return Math.round(n/t)+" "+r+(i?"s":"")}});var li=L((Tc,_s)=>{function No(n){t.debug=t,t.default=t,t.coerce=d,t.disable=o,t.enable=i,t.enabled=a,t.humanize=As(),t.destroy=h,Object.keys(n).forEach(l=>{t[l]=n[l]}),t.names=[],t.skips=[],t.formatters={};function e(l){let u=0;for(let T=0;T<l.length;T++)u=(u<<5)-u+l.charCodeAt(T),u|=0;return t.colors[Math.abs(u)%t.colors.length]}t.selectColor=e;function t(l){let u,T=null,A,_;function $(...N){if(!$.enabled)return;let P=$,k=Number(new Date),C=k-(u||k);P.diff=C,P.prev=u,P.curr=k,u=k,N[0]=t.coerce(N[0]),typeof N[0]!="string"&&N.unshift("%O");let f=0;N[0]=N[0].replace(/%([a-zA-Z%])/g,(w,U)=>{if(w==="%%")return"%";f++;let K=t.formatters[U];if(typeof K=="function"){let B=N[f];w=K.call(P,B),N.splice(f,1),f--}return w}),t.formatArgs.call(P,N),(P.log||t.log).apply(P,N)}return $.namespace=l,$.useColors=t.useColors(),$.color=t.selectColor(l),$.extend=r,$.destroy=t.destroy,Object.defineProperty($,"enabled",{enumerable:!0,configurable:!1,get:()=>T!==null?T:(A!==t.namespaces&&(A=t.namespaces,_=t.enabled(l)),_),set:N=>{T=N}}),typeof t.init=="function"&&t.init($),$}function r(l,u){let T=t(this.namespace+(typeof u>"u"?":":u)+l);return T.log=this.log,T}function i(l){t.save(l),t.namespaces=l,t.names=[],t.skips=[];let u=(typeof l=="string"?l:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(let T of u)T[0]==="-"?t.skips.push(T.slice(1)):t.names.push(T)}function s(l,u){let T=0,A=0,_=-1,$=0;for(;T<l.length;)if(A<u.length&&(u[A]===l[T]||u[A]==="*"))u[A]==="*"?(_=A,$=T,A++):(T++,A++);else if(_!==-1)A=_+1,$++,T=$;else return!1;for(;A<u.length&&u[A]==="*";)A++;return A===u.length}function o(){let l=[...t.names,...t.skips.map(u=>"-"+u)].join(",");return t.enable(""),l}function a(l){for(let u of t.skips)if(s(l,u))return!1;for(let u of t.names)if(s(l,u))return!0;return!1}function d(l){return l instanceof Error?l.stack||l.message:l}function h(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return t.enable(t.load()),t}_s.exports=No});var $s=L((ve,nr)=>{ve.formatArgs=ko;ve.save=Ho;ve.load=qo;ve.useColors=Oo;ve.storage=Lo();ve.destroy=(()=>{let n=!1;return()=>{n||(n=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})();ve.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function Oo(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let n;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&(n=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(n[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function ko(n){if(n[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+n[0]+(this.useColors?"%c ":" ")+"+"+nr.exports.humanize(this.diff),!this.useColors)return;let e="color: "+this.color;n.splice(1,0,e,"color: inherit");let t=0,r=0;n[0].replace(/%[a-zA-Z%]/g,i=>{i!=="%%"&&(t++,i==="%c"&&(r=t))}),n.splice(r,0,e)}ve.log=console.debug||console.log||(()=>{});function Ho(n){try{n?ve.storage.setItem("debug",n):ve.storage.removeItem("debug")}catch{}}function qo(){let n;try{n=ve.storage.getItem("debug")||ve.storage.getItem("DEBUG")}catch{}return!n&&typeof process<"u"&&"env"in process&&(n=process.env.DEBUG),n}function Lo(){try{return localStorage}catch{}}nr.exports=li()(ve);var{formatters:Mo}=nr.exports;Mo.j=function(n){try{return JSON.stringify(n)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}});var Ps=L((Rc,Ds)=>{"use strict";Ds.exports=(n,e=process.argv)=>{let t=n.startsWith("-")?"":n.length===1?"-":"--",r=e.indexOf(t+n),i=e.indexOf("--");return r!==-1&&(i===-1||r<i)}});var ks=L((Sc,Os)=>{"use strict";var Fo=ye("os"),Ns=ye("tty"),$e=Ps(),{env:oe}=process,Ye;$e("no-color")||$e("no-colors")||$e("color=false")||$e("color=never")?Ye=0:($e("color")||$e("colors")||$e("color=true")||$e("color=always"))&&(Ye=1);"FORCE_COLOR"in oe&&(oe.FORCE_COLOR==="true"?Ye=1:oe.FORCE_COLOR==="false"?Ye=0:Ye=oe.FORCE_COLOR.length===0?1:Math.min(parseInt(oe.FORCE_COLOR,10),3));function di(n){return n===0?!1:{level:n,hasBasic:!0,has256:n>=2,has16m:n>=3}}function hi(n,e){if(Ye===0)return 0;if($e("color=16m")||$e("color=full")||$e("color=truecolor"))return 3;if($e("color=256"))return 2;if(n&&!e&&Ye===void 0)return 0;let t=Ye||0;if(oe.TERM==="dumb")return t;if(process.platform==="win32"){let r=Fo.release().split(".");return Number(r[0])>=10&&Number(r[2])>=10586?Number(r[2])>=14931?3:2:1}if("CI"in oe)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI","GITHUB_ACTIONS","BUILDKITE"].some(r=>r in oe)||oe.CI_NAME==="codeship"?1:t;if("TEAMCITY_VERSION"in oe)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(oe.TEAMCITY_VERSION)?1:0;if(oe.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in oe){let r=parseInt((oe.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(oe.TERM_PROGRAM){case"iTerm.app":return r>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(oe.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(oe.TERM)||"COLORTERM"in oe?1:t}function Uo(n){let e=hi(n,n&&n.isTTY);return di(e)}Os.exports={supportsColor:Uo,stdout:di(hi(!0,Ns.isatty(1))),stderr:di(hi(!0,Ns.isatty(2)))}});var qs=L((ae,ar)=>{var Bo=ye("tty"),or=ye("util");ae.init=Jo;ae.log=Vo;ae.formatArgs=Ko;ae.save=Wo;ae.load=Yo;ae.useColors=jo;ae.destroy=or.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");ae.colors=[6,2,3,4,5,1];try{let n=ks();n&&(n.stderr||n).level>=2&&(ae.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221])}catch{}ae.inspectOpts=Object.keys(process.env).filter(n=>/^debug_/i.test(n)).reduce((n,e)=>{let t=e.substring(6).toLowerCase().replace(/_([a-z])/g,(i,s)=>s.toUpperCase()),r=process.env[e];return/^(yes|on|true|enabled)$/i.test(r)?r=!0:/^(no|off|false|disabled)$/i.test(r)?r=!1:r==="null"?r=null:r=Number(r),n[t]=r,n},{});function jo(){return"colors"in ae.inspectOpts?!!ae.inspectOpts.colors:Bo.isatty(process.stderr.fd)}function Ko(n){let{namespace:e,useColors:t}=this;if(t){let r=this.color,i="\x1B[3"+(r<8?r:"8;5;"+r),s=` ${i};1m${e} \x1B[0m`;n[0]=s+n[0].split(`
1
+ var WebCall=(()=>{var Gn=Object.create;var Yt=Object.defineProperty;var Vn=Object.getOwnPropertyDescriptor;var Wn=Object.getOwnPropertyNames;var Yn=Object.getPrototypeOf,Jn=Object.prototype.hasOwnProperty;var ye=(n=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(n,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):n)(function(n){if(typeof require<"u")return require.apply(this,arguments);throw new Error('Dynamic require of "'+n+'" is not supported')});var L=(n,e)=>()=>(e||n((e={exports:{}}).exports,e),e.exports),Yi=(n,e)=>{for(var t in e)Yt(n,t,{get:e[t],enumerable:!0})},Ji=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Wn(e))!Jn.call(n,i)&&i!==t&&Yt(n,i,{get:()=>e[i],enumerable:!(r=Vn(e,i))||r.enumerable});return n};var Xr=(n,e,t)=>(t=n!=null?Gn(Yn(n)):{},Ji(e||!n||!n.__esModule?Yt(t,"default",{value:n,enumerable:!0}):t,n)),zn=n=>Ji(Yt({},"__esModule",{value:!0}),n);var Zi=L((zi,Jt)=>{(function(n){"use strict";function e(f,x){var w=(f&65535)+(x&65535),U=(f>>16)+(x>>16)+(w>>16);return U<<16|w&65535}function t(f,x){return f<<x|f>>>32-x}function r(f,x,w,U,K,B){return e(t(e(e(x,f),e(U,B)),K),w)}function i(f,x,w,U,K,B,z){return r(x&w|~x&U,f,x,K,B,z)}function s(f,x,w,U,K,B,z){return r(x&U|w&~U,f,x,K,B,z)}function o(f,x,w,U,K,B,z){return r(x^w^U,f,x,K,B,z)}function a(f,x,w,U,K,B,z){return r(w^(x|~U),f,x,K,B,z)}function d(f,x){f[x>>5]|=128<<x%32,f[(x+64>>>9<<4)+14]=x;var w,U,K,B,z,y=1732584193,R=-271733879,c=-1732584194,S=271733878;for(w=0;w<f.length;w+=16)U=y,K=R,B=c,z=S,y=i(y,R,c,S,f[w],7,-680876936),S=i(S,y,R,c,f[w+1],12,-389564586),c=i(c,S,y,R,f[w+2],17,606105819),R=i(R,c,S,y,f[w+3],22,-1044525330),y=i(y,R,c,S,f[w+4],7,-176418897),S=i(S,y,R,c,f[w+5],12,1200080426),c=i(c,S,y,R,f[w+6],17,-1473231341),R=i(R,c,S,y,f[w+7],22,-45705983),y=i(y,R,c,S,f[w+8],7,1770035416),S=i(S,y,R,c,f[w+9],12,-1958414417),c=i(c,S,y,R,f[w+10],17,-42063),R=i(R,c,S,y,f[w+11],22,-1990404162),y=i(y,R,c,S,f[w+12],7,1804603682),S=i(S,y,R,c,f[w+13],12,-40341101),c=i(c,S,y,R,f[w+14],17,-1502002290),R=i(R,c,S,y,f[w+15],22,1236535329),y=s(y,R,c,S,f[w+1],5,-165796510),S=s(S,y,R,c,f[w+6],9,-1069501632),c=s(c,S,y,R,f[w+11],14,643717713),R=s(R,c,S,y,f[w],20,-373897302),y=s(y,R,c,S,f[w+5],5,-701558691),S=s(S,y,R,c,f[w+10],9,38016083),c=s(c,S,y,R,f[w+15],14,-660478335),R=s(R,c,S,y,f[w+4],20,-405537848),y=s(y,R,c,S,f[w+9],5,568446438),S=s(S,y,R,c,f[w+14],9,-1019803690),c=s(c,S,y,R,f[w+3],14,-187363961),R=s(R,c,S,y,f[w+8],20,1163531501),y=s(y,R,c,S,f[w+13],5,-1444681467),S=s(S,y,R,c,f[w+2],9,-51403784),c=s(c,S,y,R,f[w+7],14,1735328473),R=s(R,c,S,y,f[w+12],20,-1926607734),y=o(y,R,c,S,f[w+5],4,-378558),S=o(S,y,R,c,f[w+8],11,-2022574463),c=o(c,S,y,R,f[w+11],16,1839030562),R=o(R,c,S,y,f[w+14],23,-35309556),y=o(y,R,c,S,f[w+1],4,-1530992060),S=o(S,y,R,c,f[w+4],11,1272893353),c=o(c,S,y,R,f[w+7],16,-155497632),R=o(R,c,S,y,f[w+10],23,-1094730640),y=o(y,R,c,S,f[w+13],4,681279174),S=o(S,y,R,c,f[w],11,-358537222),c=o(c,S,y,R,f[w+3],16,-722521979),R=o(R,c,S,y,f[w+6],23,76029189),y=o(y,R,c,S,f[w+9],4,-640364487),S=o(S,y,R,c,f[w+12],11,-421815835),c=o(c,S,y,R,f[w+15],16,530742520),R=o(R,c,S,y,f[w+2],23,-995338651),y=a(y,R,c,S,f[w],6,-198630844),S=a(S,y,R,c,f[w+7],10,1126891415),c=a(c,S,y,R,f[w+14],15,-1416354905),R=a(R,c,S,y,f[w+5],21,-57434055),y=a(y,R,c,S,f[w+12],6,1700485571),S=a(S,y,R,c,f[w+3],10,-1894986606),c=a(c,S,y,R,f[w+10],15,-1051523),R=a(R,c,S,y,f[w+1],21,-2054922799),y=a(y,R,c,S,f[w+8],6,1873313359),S=a(S,y,R,c,f[w+15],10,-30611744),c=a(c,S,y,R,f[w+6],15,-1560198380),R=a(R,c,S,y,f[w+13],21,1309151649),y=a(y,R,c,S,f[w+4],6,-145523070),S=a(S,y,R,c,f[w+11],10,-1120210379),c=a(c,S,y,R,f[w+2],15,718787259),R=a(R,c,S,y,f[w+9],21,-343485551),y=e(y,U),R=e(R,K),c=e(c,B),S=e(S,z);return[y,R,c,S]}function h(f){var x,w="",U=f.length*32;for(x=0;x<U;x+=8)w+=String.fromCharCode(f[x>>5]>>>x%32&255);return w}function l(f){var x,w=[];for(w[(f.length>>2)-1]=void 0,x=0;x<w.length;x+=1)w[x]=0;var U=f.length*8;for(x=0;x<U;x+=8)w[x>>5]|=(f.charCodeAt(x/8)&255)<<x%32;return w}function u(f){return h(d(l(f),f.length*8))}function T(f,x){var w,U=l(f),K=[],B=[],z;for(K[15]=B[15]=void 0,U.length>16&&(U=d(U,f.length*8)),w=0;w<16;w+=1)K[w]=U[w]^909522486,B[w]=U[w]^1549556828;return z=d(K.concat(l(x)),512+x.length*8),h(d(B.concat(z),512+128))}function A(f){var x="0123456789abcdef",w="",U,K;for(K=0;K<f.length;K+=1)U=f.charCodeAt(K),w+=x.charAt(U>>>4&15)+x.charAt(U&15);return w}function _(f){return unescape(encodeURIComponent(f))}function $(f){return u(_(f))}function N(f){return A($(f))}function P(f,x){return T(_(f),_(x))}function k(f,x){return A(P(f,x))}function C(f,x,w){return x?w?P(x,f):k(x,f):w?$(f):N(f)}typeof define=="function"&&define.amd?define(function(){return C}):typeof Jt=="object"&&Jt.exports?Jt.exports=C:n.md5=C})(zi)});var Qr=L((ic,Xi)=>{"use strict";Xi.exports=function(e,t){return function(){for(var i=new Array(arguments.length),s=0;s<i.length;s++)i[s]=arguments[s];return e.apply(t,i)}}});var de=L((sc,rs)=>{"use strict";var Zn=Qr(),We=Object.prototype.toString;function ri(n){return Array.isArray(n)}function ei(n){return typeof n>"u"}function Xn(n){return n!==null&&!ei(n)&&n.constructor!==null&&!ei(n.constructor)&&typeof n.constructor.isBuffer=="function"&&n.constructor.isBuffer(n)}function Qi(n){return We.call(n)==="[object ArrayBuffer]"}function Qn(n){return We.call(n)==="[object FormData]"}function eo(n){var e;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?e=ArrayBuffer.isView(n):e=n&&n.buffer&&Qi(n.buffer),e}function to(n){return typeof n=="string"}function ro(n){return typeof n=="number"}function es(n){return n!==null&&typeof n=="object"}function zt(n){if(We.call(n)!=="[object Object]")return!1;var e=Object.getPrototypeOf(n);return e===null||e===Object.prototype}function io(n){return We.call(n)==="[object Date]"}function so(n){return We.call(n)==="[object File]"}function no(n){return We.call(n)==="[object Blob]"}function ts(n){return We.call(n)==="[object Function]"}function oo(n){return es(n)&&ts(n.pipe)}function ao(n){return We.call(n)==="[object URLSearchParams]"}function co(n){return n.trim?n.trim():n.replace(/^\s+|\s+$/g,"")}function lo(){return typeof navigator<"u"&&(navigator.product==="ReactNative"||navigator.product==="NativeScript"||navigator.product==="NS")?!1:typeof window<"u"&&typeof document<"u"}function ii(n,e){if(!(n===null||typeof n>"u"))if(typeof n!="object"&&(n=[n]),ri(n))for(var t=0,r=n.length;t<r;t++)e.call(null,n[t],t,n);else for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&e.call(null,n[i],i,n)}function ti(){var n={};function e(i,s){zt(n[s])&&zt(i)?n[s]=ti(n[s],i):zt(i)?n[s]=ti({},i):ri(i)?n[s]=i.slice():n[s]=i}for(var t=0,r=arguments.length;t<r;t++)ii(arguments[t],e);return n}function ho(n,e,t){return ii(e,function(i,s){t&&typeof i=="function"?n[s]=Zn(i,t):n[s]=i}),n}function uo(n){return n.charCodeAt(0)===65279&&(n=n.slice(1)),n}rs.exports={isArray:ri,isArrayBuffer:Qi,isBuffer:Xn,isFormData:Qn,isArrayBufferView:eo,isString:to,isNumber:ro,isObject:es,isPlainObject:zt,isUndefined:ei,isDate:io,isFile:so,isBlob:no,isFunction:ts,isStream:oo,isURLSearchParams:ao,isStandardBrowserEnv:lo,forEach:ii,merge:ti,extend:ho,trim:co,stripBOM:uo}});var Zt=L((nc,ss)=>{"use strict";var ut=de();function is(n){return encodeURIComponent(n).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}ss.exports=function(e,t,r){if(!t)return e;var i;if(r)i=r(t);else if(ut.isURLSearchParams(t))i=t.toString();else{var s=[];ut.forEach(t,function(d,h){d===null||typeof d>"u"||(ut.isArray(d)?h=h+"[]":d=[d],ut.forEach(d,function(u){ut.isDate(u)?u=u.toISOString():ut.isObject(u)&&(u=JSON.stringify(u)),s.push(is(h)+"="+is(u))}))}),i=s.join("&")}if(i){var o=e.indexOf("#");o!==-1&&(e=e.slice(0,o)),e+=(e.indexOf("?")===-1?"?":"&")+i}return e}});var os=L((oc,ns)=>{"use strict";var go=de();function Xt(){this.handlers=[]}Xt.prototype.use=function(e,t,r){return this.handlers.push({fulfilled:e,rejected:t,synchronous:r?r.synchronous:!1,runWhen:r?r.runWhen:null}),this.handlers.length-1};Xt.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)};Xt.prototype.forEach=function(e){go.forEach(this.handlers,function(r){r!==null&&e(r)})};ns.exports=Xt});var cs=L((ac,as)=>{"use strict";var fo=de();as.exports=function(e,t){fo.forEach(e,function(i,s){s!==t&&s.toUpperCase()===t.toUpperCase()&&(e[t]=i,delete e[s])})}});var Qt=L((cc,ls)=>{"use strict";ls.exports=function(e,t,r,i,s){return e.config=t,r&&(e.code=r),e.request=i,e.response=s,e.isAxiosError=!0,e.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code,status:this.response&&this.response.status?this.response.status:null}},e}});var er=L((lc,ds)=>{"use strict";ds.exports={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1}});var tr=L((dc,hs)=>{"use strict";var po=Qt();hs.exports=function(e,t,r,i,s){var o=new Error(e);return po(o,t,r,i,s)}});var si=L((hc,us)=>{"use strict";var mo=tr();us.exports=function(e,t,r){var i=r.config.validateStatus;!r.status||!i||i(r.status)?e(r):t(mo("Request failed with status code "+r.status,r.config,null,r.request,r))}});var fs=L((uc,gs)=>{"use strict";var rr=de();gs.exports=rr.isStandardBrowserEnv()?function(){return{write:function(t,r,i,s,o,a){var d=[];d.push(t+"="+encodeURIComponent(r)),rr.isNumber(i)&&d.push("expires="+new Date(i).toGMTString()),rr.isString(s)&&d.push("path="+s),rr.isString(o)&&d.push("domain="+o),a===!0&&d.push("secure"),document.cookie=d.join("; ")},read:function(t){var r=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return r?decodeURIComponent(r[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()});var ms=L((gc,ps)=>{"use strict";ps.exports=function(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}});var vs=L((fc,Cs)=>{"use strict";Cs.exports=function(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e}});var ni=L((pc,Es)=>{"use strict";var Co=ms(),vo=vs();Es.exports=function(e,t){return e&&!Co(t)?vo(e,t):t}});var Ts=L((mc,ws)=>{"use strict";var oi=de(),Eo=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];ws.exports=function(e){var t={},r,i,s;return e&&oi.forEach(e.split(`
2
+ `),function(a){if(s=a.indexOf(":"),r=oi.trim(a.substr(0,s)).toLowerCase(),i=oi.trim(a.substr(s+1)),r){if(t[r]&&Eo.indexOf(r)>=0)return;r==="set-cookie"?t[r]=(t[r]?t[r]:[]).concat([i]):t[r]=t[r]?t[r]+", "+i:i}}),t}});var ys=L((Cc,Ss)=>{"use strict";var Rs=de();Ss.exports=Rs.isStandardBrowserEnv()?function(){var e=/(msie|trident)/i.test(navigator.userAgent),t=document.createElement("a"),r;function i(s){var o=s;return e&&(t.setAttribute("href",o),o=t.href),t.setAttribute("href",o),{href:t.href,protocol:t.protocol?t.protocol.replace(/:$/,""):"",host:t.host,search:t.search?t.search.replace(/^\?/,""):"",hash:t.hash?t.hash.replace(/^#/,""):"",hostname:t.hostname,port:t.port,pathname:t.pathname.charAt(0)==="/"?t.pathname:"/"+t.pathname}}return r=i(window.location.href),function(o){var a=Rs.isString(o)?i(o):o;return a.protocol===r.protocol&&a.host===r.host}}():function(){return function(){return!0}}()});var gt=L((vc,Is)=>{"use strict";function ai(n){this.message=n}ai.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")};ai.prototype.__CANCEL__=!0;Is.exports=ai});var xs=L((Ec,bs)=>{"use strict";var ir=de(),wo=si(),To=fs(),Ro=Zt(),So=ni(),yo=Ts(),Io=ys(),ci=tr(),bo=er(),xo=gt();bs.exports=function(e){return new Promise(function(r,i){var s=e.data,o=e.headers,a=e.responseType,d;function h(){e.cancelToken&&e.cancelToken.unsubscribe(d),e.signal&&e.signal.removeEventListener("abort",d)}ir.isFormData(s)&&delete o["Content-Type"];var l=new XMLHttpRequest;if(e.auth){var u=e.auth.username||"",T=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";o.Authorization="Basic "+btoa(u+":"+T)}var A=So(e.baseURL,e.url);l.open(e.method.toUpperCase(),Ro(A,e.params,e.paramsSerializer),!0),l.timeout=e.timeout;function _(){if(l){var N="getAllResponseHeaders"in l?yo(l.getAllResponseHeaders()):null,P=!a||a==="text"||a==="json"?l.responseText:l.response,k={data:P,status:l.status,statusText:l.statusText,headers:N,config:e,request:l};wo(function(f){r(f),h()},function(f){i(f),h()},k),l=null}}if("onloadend"in l?l.onloadend=_:l.onreadystatechange=function(){!l||l.readyState!==4||l.status===0&&!(l.responseURL&&l.responseURL.indexOf("file:")===0)||setTimeout(_)},l.onabort=function(){l&&(i(ci("Request aborted",e,"ECONNABORTED",l)),l=null)},l.onerror=function(){i(ci("Network Error",e,null,l)),l=null},l.ontimeout=function(){var P=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded",k=e.transitional||bo;e.timeoutErrorMessage&&(P=e.timeoutErrorMessage),i(ci(P,e,k.clarifyTimeoutError?"ETIMEDOUT":"ECONNABORTED",l)),l=null},ir.isStandardBrowserEnv()){var $=(e.withCredentials||Io(A))&&e.xsrfCookieName?To.read(e.xsrfCookieName):void 0;$&&(o[e.xsrfHeaderName]=$)}"setRequestHeader"in l&&ir.forEach(o,function(P,k){typeof s>"u"&&k.toLowerCase()==="content-type"?delete o[k]:l.setRequestHeader(k,P)}),ir.isUndefined(e.withCredentials)||(l.withCredentials=!!e.withCredentials),a&&a!=="json"&&(l.responseType=e.responseType),typeof e.onDownloadProgress=="function"&&l.addEventListener("progress",e.onDownloadProgress),typeof e.onUploadProgress=="function"&&l.upload&&l.upload.addEventListener("progress",e.onUploadProgress),(e.cancelToken||e.signal)&&(d=function(N){l&&(i(!N||N&&N.type?new xo("canceled"):N),l.abort(),l=null)},e.cancelToken&&e.cancelToken.subscribe(d),e.signal&&(e.signal.aborted?d():e.signal.addEventListener("abort",d))),s||(s=null),l.send(s)})}});var _s=L((wc,As)=>{var ft=1e3,pt=ft*60,mt=pt*60,nt=mt*24,Ao=nt*7,_o=nt*365.25;As.exports=function(n,e){e=e||{};var t=typeof n;if(t==="string"&&n.length>0)return $o(n);if(t==="number"&&isFinite(n))return e.long?Po(n):Do(n);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(n))};function $o(n){if(n=String(n),!(n.length>100)){var e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(n);if(e){var t=parseFloat(e[1]),r=(e[2]||"ms").toLowerCase();switch(r){case"years":case"year":case"yrs":case"yr":case"y":return t*_o;case"weeks":case"week":case"w":return t*Ao;case"days":case"day":case"d":return t*nt;case"hours":case"hour":case"hrs":case"hr":case"h":return t*mt;case"minutes":case"minute":case"mins":case"min":case"m":return t*pt;case"seconds":case"second":case"secs":case"sec":case"s":return t*ft;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return t;default:return}}}}function Do(n){var e=Math.abs(n);return e>=nt?Math.round(n/nt)+"d":e>=mt?Math.round(n/mt)+"h":e>=pt?Math.round(n/pt)+"m":e>=ft?Math.round(n/ft)+"s":n+"ms"}function Po(n){var e=Math.abs(n);return e>=nt?sr(n,e,nt,"day"):e>=mt?sr(n,e,mt,"hour"):e>=pt?sr(n,e,pt,"minute"):e>=ft?sr(n,e,ft,"second"):n+" ms"}function sr(n,e,t,r){var i=e>=t*1.5;return Math.round(n/t)+" "+r+(i?"s":"")}});var li=L((Tc,$s)=>{function No(n){t.debug=t,t.default=t,t.coerce=d,t.disable=o,t.enable=i,t.enabled=a,t.humanize=_s(),t.destroy=h,Object.keys(n).forEach(l=>{t[l]=n[l]}),t.names=[],t.skips=[],t.formatters={};function e(l){let u=0;for(let T=0;T<l.length;T++)u=(u<<5)-u+l.charCodeAt(T),u|=0;return t.colors[Math.abs(u)%t.colors.length]}t.selectColor=e;function t(l){let u,T=null,A,_;function $(...N){if(!$.enabled)return;let P=$,k=Number(new Date),C=k-(u||k);P.diff=C,P.prev=u,P.curr=k,u=k,N[0]=t.coerce(N[0]),typeof N[0]!="string"&&N.unshift("%O");let f=0;N[0]=N[0].replace(/%([a-zA-Z%])/g,(w,U)=>{if(w==="%%")return"%";f++;let K=t.formatters[U];if(typeof K=="function"){let B=N[f];w=K.call(P,B),N.splice(f,1),f--}return w}),t.formatArgs.call(P,N),(P.log||t.log).apply(P,N)}return $.namespace=l,$.useColors=t.useColors(),$.color=t.selectColor(l),$.extend=r,$.destroy=t.destroy,Object.defineProperty($,"enabled",{enumerable:!0,configurable:!1,get:()=>T!==null?T:(A!==t.namespaces&&(A=t.namespaces,_=t.enabled(l)),_),set:N=>{T=N}}),typeof t.init=="function"&&t.init($),$}function r(l,u){let T=t(this.namespace+(typeof u>"u"?":":u)+l);return T.log=this.log,T}function i(l){t.save(l),t.namespaces=l,t.names=[],t.skips=[];let u=(typeof l=="string"?l:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(let T of u)T[0]==="-"?t.skips.push(T.slice(1)):t.names.push(T)}function s(l,u){let T=0,A=0,_=-1,$=0;for(;T<l.length;)if(A<u.length&&(u[A]===l[T]||u[A]==="*"))u[A]==="*"?(_=A,$=T,A++):(T++,A++);else if(_!==-1)A=_+1,$++,T=$;else return!1;for(;A<u.length&&u[A]==="*";)A++;return A===u.length}function o(){let l=[...t.names,...t.skips.map(u=>"-"+u)].join(",");return t.enable(""),l}function a(l){for(let u of t.skips)if(s(l,u))return!1;for(let u of t.names)if(s(l,u))return!0;return!1}function d(l){return l instanceof Error?l.stack||l.message:l}function h(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return t.enable(t.load()),t}$s.exports=No});var Ds=L((ve,nr)=>{ve.formatArgs=ko;ve.save=Ho;ve.load=qo;ve.useColors=Oo;ve.storage=Lo();ve.destroy=(()=>{let n=!1;return()=>{n||(n=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})();ve.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function Oo(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let n;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&(n=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(n[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function ko(n){if(n[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+n[0]+(this.useColors?"%c ":" ")+"+"+nr.exports.humanize(this.diff),!this.useColors)return;let e="color: "+this.color;n.splice(1,0,e,"color: inherit");let t=0,r=0;n[0].replace(/%[a-zA-Z%]/g,i=>{i!=="%%"&&(t++,i==="%c"&&(r=t))}),n.splice(r,0,e)}ve.log=console.debug||console.log||(()=>{});function Ho(n){try{n?ve.storage.setItem("debug",n):ve.storage.removeItem("debug")}catch{}}function qo(){let n;try{n=ve.storage.getItem("debug")||ve.storage.getItem("DEBUG")}catch{}return!n&&typeof process<"u"&&"env"in process&&(n=process.env.DEBUG),n}function Lo(){try{return localStorage}catch{}}nr.exports=li()(ve);var{formatters:Mo}=nr.exports;Mo.j=function(n){try{return JSON.stringify(n)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}});var Ns=L((Rc,Ps)=>{"use strict";Ps.exports=(n,e=process.argv)=>{let t=n.startsWith("-")?"":n.length===1?"-":"--",r=e.indexOf(t+n),i=e.indexOf("--");return r!==-1&&(i===-1||r<i)}});var Hs=L((Sc,ks)=>{"use strict";var Fo=ye("os"),Os=ye("tty"),$e=Ns(),{env:oe}=process,Ye;$e("no-color")||$e("no-colors")||$e("color=false")||$e("color=never")?Ye=0:($e("color")||$e("colors")||$e("color=true")||$e("color=always"))&&(Ye=1);"FORCE_COLOR"in oe&&(oe.FORCE_COLOR==="true"?Ye=1:oe.FORCE_COLOR==="false"?Ye=0:Ye=oe.FORCE_COLOR.length===0?1:Math.min(parseInt(oe.FORCE_COLOR,10),3));function di(n){return n===0?!1:{level:n,hasBasic:!0,has256:n>=2,has16m:n>=3}}function hi(n,e){if(Ye===0)return 0;if($e("color=16m")||$e("color=full")||$e("color=truecolor"))return 3;if($e("color=256"))return 2;if(n&&!e&&Ye===void 0)return 0;let t=Ye||0;if(oe.TERM==="dumb")return t;if(process.platform==="win32"){let r=Fo.release().split(".");return Number(r[0])>=10&&Number(r[2])>=10586?Number(r[2])>=14931?3:2:1}if("CI"in oe)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI","GITHUB_ACTIONS","BUILDKITE"].some(r=>r in oe)||oe.CI_NAME==="codeship"?1:t;if("TEAMCITY_VERSION"in oe)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(oe.TEAMCITY_VERSION)?1:0;if(oe.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in oe){let r=parseInt((oe.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(oe.TERM_PROGRAM){case"iTerm.app":return r>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(oe.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(oe.TERM)||"COLORTERM"in oe?1:t}function Uo(n){let e=hi(n,n&&n.isTTY);return di(e)}ks.exports={supportsColor:Uo,stdout:di(hi(!0,Os.isatty(1))),stderr:di(hi(!0,Os.isatty(2)))}});var Ls=L((ae,ar)=>{var Bo=ye("tty"),or=ye("util");ae.init=Jo;ae.log=Vo;ae.formatArgs=Ko;ae.save=Wo;ae.load=Yo;ae.useColors=jo;ae.destroy=or.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");ae.colors=[6,2,3,4,5,1];try{let n=Hs();n&&(n.stderr||n).level>=2&&(ae.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221])}catch{}ae.inspectOpts=Object.keys(process.env).filter(n=>/^debug_/i.test(n)).reduce((n,e)=>{let t=e.substring(6).toLowerCase().replace(/_([a-z])/g,(i,s)=>s.toUpperCase()),r=process.env[e];return/^(yes|on|true|enabled)$/i.test(r)?r=!0:/^(no|off|false|disabled)$/i.test(r)?r=!1:r==="null"?r=null:r=Number(r),n[t]=r,n},{});function jo(){return"colors"in ae.inspectOpts?!!ae.inspectOpts.colors:Bo.isatty(process.stderr.fd)}function Ko(n){let{namespace:e,useColors:t}=this;if(t){let r=this.color,i="\x1B[3"+(r<8?r:"8;5;"+r),s=` ${i};1m${e} \x1B[0m`;n[0]=s+n[0].split(`
3
3
  `).join(`
4
4
  `+s),n.push(i+"m+"+ar.exports.humanize(this.diff)+"\x1B[0m")}else n[0]=Go()+e+" "+n[0]}function Go(){return ae.inspectOpts.hideDate?"":new Date().toISOString()+" "}function Vo(...n){return process.stderr.write(or.formatWithOptions(ae.inspectOpts,...n)+`
5
- `)}function Wo(n){n?process.env.DEBUG=n:delete process.env.DEBUG}function Yo(){return process.env.DEBUG}function Jo(n){n.inspectOpts={};let e=Object.keys(ae.inspectOpts);for(let t=0;t<e.length;t++)n.inspectOpts[e[t]]=ae.inspectOpts[e[t]]}ar.exports=li()(ae);var{formatters:Hs}=ar.exports;Hs.o=function(n){return this.inspectOpts.colors=this.useColors,or.inspect(n,this.inspectOpts).split(`
6
- `).map(e=>e.trim()).join(" ")};Hs.O=function(n){return this.inspectOpts.colors=this.useColors,or.inspect(n,this.inspectOpts)}});var Ls=L((yc,ui)=>{typeof process>"u"||process.type==="renderer"||process.browser===!0||process.__nwjs?ui.exports=$s():ui.exports=qs()});var Fs=L((Ic,Ms)=>{var Nt;Ms.exports=function(){if(!Nt){try{Nt=Ls()("follow-redirects")}catch{}typeof Nt!="function"&&(Nt=function(){})}Nt.apply(null,arguments)}});var Ii=L((bc,yi)=>{var kt=ye("url"),Ot=kt.URL,zo=ye("http"),Zo=ye("https"),Ci=ye("stream").Writable,vi=ye("assert"),Us=Fs();(function(){var e=typeof process<"u",t=typeof window<"u"&&typeof document<"u",r=at(Error.captureStackTrace);!e&&(t||!r)&&console.warn("The follow-redirects package should be excluded from browser builds.")})();var Ei=!1;try{vi(new Ot(""))}catch(n){Ei=n.code==="ERR_INVALID_URL"}var Xo=["auth","host","hostname","href","path","pathname","port","protocol","query","search","hash"],wi=["abort","aborted","connect","error","socket","timeout"],Ti=Object.create(null);wi.forEach(function(n){Ti[n]=function(e,t,r){this._redirectable.emit(n,e,t,r)}});var fi=Ht("ERR_INVALID_URL","Invalid URL",TypeError),pi=Ht("ERR_FR_REDIRECTION_FAILURE","Redirected request failed"),Qo=Ht("ERR_FR_TOO_MANY_REDIRECTS","Maximum number of redirects exceeded",pi),ea=Ht("ERR_FR_MAX_BODY_LENGTH_EXCEEDED","Request body larger than maxBodyLength limit"),ta=Ht("ERR_STREAM_WRITE_AFTER_END","write after end"),ra=Ci.prototype.destroy||js;function Ee(n,e){Ci.call(this),this._sanitizeOptions(n),this._options=n,this._ended=!1,this._ending=!1,this._redirectCount=0,this._redirects=[],this._requestBodyLength=0,this._requestBodyBuffers=[],e&&this.on("response",e);var t=this;this._onNativeResponse=function(r){try{t._processResponse(r)}catch(i){t.emit("error",i instanceof pi?i:new pi({cause:i}))}},this._performRequest()}Ee.prototype=Object.create(Ci.prototype);Ee.prototype.abort=function(){Si(this._currentRequest),this._currentRequest.abort(),this.emit("abort")};Ee.prototype.destroy=function(n){return Si(this._currentRequest,n),ra.call(this,n),this};Ee.prototype.write=function(n,e,t){if(this._ending)throw new ta;if(!ot(n)&&!na(n))throw new TypeError("data should be a string, Buffer or Uint8Array");if(at(e)&&(t=e,e=null),n.length===0){t&&t();return}this._requestBodyLength+n.length<=this._options.maxBodyLength?(this._requestBodyLength+=n.length,this._requestBodyBuffers.push({data:n,encoding:e}),this._currentRequest.write(n,e,t)):(this.emit("error",new ea),this.abort())};Ee.prototype.end=function(n,e,t){if(at(n)?(t=n,n=e=null):at(e)&&(t=e,e=null),!n)this._ended=this._ending=!0,this._currentRequest.end(null,null,t);else{var r=this,i=this._currentRequest;this.write(n,e,function(){r._ended=!0,i.end(null,null,t)}),this._ending=!0}};Ee.prototype.setHeader=function(n,e){this._options.headers[n]=e,this._currentRequest.setHeader(n,e)};Ee.prototype.removeHeader=function(n){delete this._options.headers[n],this._currentRequest.removeHeader(n)};Ee.prototype.setTimeout=function(n,e){var t=this;function r(o){o.setTimeout(n),o.removeListener("timeout",o.destroy),o.addListener("timeout",o.destroy)}function i(o){t._timeout&&clearTimeout(t._timeout),t._timeout=setTimeout(function(){t.emit("timeout"),s()},n),r(o)}function s(){t._timeout&&(clearTimeout(t._timeout),t._timeout=null),t.removeListener("abort",s),t.removeListener("error",s),t.removeListener("response",s),t.removeListener("close",s),e&&t.removeListener("timeout",e),t.socket||t._currentRequest.removeListener("socket",i)}return e&&this.on("timeout",e),this.socket?i(this.socket):this._currentRequest.once("socket",i),this.on("socket",r),this.on("abort",s),this.on("error",s),this.on("response",s),this.on("close",s),this};["flushHeaders","getHeader","setNoDelay","setSocketKeepAlive"].forEach(function(n){Ee.prototype[n]=function(e,t){return this._currentRequest[n](e,t)}});["aborted","connection","socket"].forEach(function(n){Object.defineProperty(Ee.prototype,n,{get:function(){return this._currentRequest[n]}})});Ee.prototype._sanitizeOptions=function(n){if(n.headers||(n.headers={}),n.host&&(n.hostname||(n.hostname=n.host),delete n.host),!n.pathname&&n.path){var e=n.path.indexOf("?");e<0?n.pathname=n.path:(n.pathname=n.path.substring(0,e),n.search=n.path.substring(e))}};Ee.prototype._performRequest=function(){var n=this._options.protocol,e=this._options.nativeProtocols[n];if(!e)throw new TypeError("Unsupported protocol "+n);if(this._options.agents){var t=n.slice(0,-1);this._options.agent=this._options.agents[t]}var r=this._currentRequest=e.request(this._options,this._onNativeResponse);r._redirectable=this;for(var i of wi)r.on(i,Ti[i]);if(this._currentUrl=/^\//.test(this._options.path)?kt.format(this._options):this._options.path,this._isRedirect){var s=0,o=this,a=this._requestBodyBuffers;(function d(h){if(r===o._currentRequest)if(h)o.emit("error",h);else if(s<a.length){var l=a[s++];r.finished||r.write(l.data,l.encoding,d)}else o._ended&&r.end()})()}};Ee.prototype._processResponse=function(n){var e=n.statusCode;this._options.trackRedirects&&this._redirects.push({url:this._currentUrl,headers:n.headers,statusCode:e});var t=n.headers.location;if(!t||this._options.followRedirects===!1||e<300||e>=400){n.responseUrl=this._currentUrl,n.redirects=this._redirects,this.emit("response",n),this._requestBodyBuffers=[];return}if(Si(this._currentRequest),n.destroy(),++this._redirectCount>this._options.maxRedirects)throw new Qo;var r,i=this._options.beforeRedirect;i&&(r=Object.assign({Host:n.req.getHeader("host")},this._options.headers));var s=this._options.method;((e===301||e===302)&&this._options.method==="POST"||e===303&&!/^(?:GET|HEAD)$/.test(this._options.method))&&(this._options.method="GET",this._requestBodyBuffers=[],gi(/^content-/i,this._options.headers));var o=gi(/^host$/i,this._options.headers),a=Ri(this._currentUrl),d=o||a.host,h=/^\w+:/.test(t)?this._currentUrl:kt.format(Object.assign(a,{host:d})),l=ia(t,h);if(Us("redirecting to",l.href),this._isRedirect=!0,mi(l,this._options),(l.protocol!==a.protocol&&l.protocol!=="https:"||l.host!==d&&!sa(l.host,d))&&gi(/^(?:(?:proxy-)?authorization|cookie)$/i,this._options.headers),at(i)){var u={headers:n.headers,statusCode:e},T={url:h,method:s,headers:r};i(this._options,u,T),this._sanitizeOptions(this._options)}this._performRequest()};function Bs(n){var e={maxRedirects:21,maxBodyLength:10485760},t={};return Object.keys(n).forEach(function(r){var i=r+":",s=t[i]=n[r],o=e[r]=Object.create(s);function a(h,l,u){return oa(h)?h=mi(h):ot(h)?h=mi(Ri(h)):(u=l,l=Ks(h),h={protocol:i}),at(l)&&(u=l,l=null),l=Object.assign({maxRedirects:e.maxRedirects,maxBodyLength:e.maxBodyLength},h,l),l.nativeProtocols=t,!ot(l.host)&&!ot(l.hostname)&&(l.hostname="::1"),vi.equal(l.protocol,i,"protocol mismatch"),Us("options",l),new Ee(l,u)}function d(h,l,u){var T=o.request(h,l,u);return T.end(),T}Object.defineProperties(o,{request:{value:a,configurable:!0,enumerable:!0,writable:!0},get:{value:d,configurable:!0,enumerable:!0,writable:!0}})}),e}function js(){}function Ri(n){var e;if(Ei)e=new Ot(n);else if(e=Ks(kt.parse(n)),!ot(e.protocol))throw new fi({input:n});return e}function ia(n,e){return Ei?new Ot(n,e):Ri(kt.resolve(e,n))}function Ks(n){if(/^\[/.test(n.hostname)&&!/^\[[:0-9a-f]+\]$/i.test(n.hostname))throw new fi({input:n.href||n});if(/^\[/.test(n.host)&&!/^\[[:0-9a-f]+\](:\d+)?$/i.test(n.host))throw new fi({input:n.href||n});return n}function mi(n,e){var t=e||{};for(var r of Xo)t[r]=n[r];return t.hostname.startsWith("[")&&(t.hostname=t.hostname.slice(1,-1)),t.port!==""&&(t.port=Number(t.port)),t.path=t.search?t.pathname+t.search:t.pathname,t}function gi(n,e){var t;for(var r in e)n.test(r)&&(t=e[r],delete e[r]);return t===null||typeof t>"u"?void 0:String(t).trim()}function Ht(n,e,t){function r(i){at(Error.captureStackTrace)&&Error.captureStackTrace(this,this.constructor),Object.assign(this,i||{}),this.code=n,this.message=this.cause?e+": "+this.cause.message:e}return r.prototype=new(t||Error),Object.defineProperties(r.prototype,{constructor:{value:r,enumerable:!1},name:{value:"Error ["+n+"]",enumerable:!1}}),r}function Si(n,e){for(var t of wi)n.removeListener(t,Ti[t]);n.on("error",js),n.destroy(e)}function sa(n,e){vi(ot(n)&&ot(e));var t=n.length-e.length-1;return t>0&&n[t]==="."&&n.endsWith(e)}function ot(n){return typeof n=="string"||n instanceof String}function at(n){return typeof n=="function"}function na(n){return typeof n=="object"&&"length"in n}function oa(n){return Ot&&n instanceof Ot}yi.exports=Bs({http:zo,https:Zo});yi.exports.wrap=Bs});var cr=L((xc,Gs)=>{Gs.exports={version:"0.26.1"}});var Xs=L((Ac,Zs)=>{"use strict";var qt=de(),Vs=si(),aa=ni(),Ws=Zt(),ca=ye("http"),la=ye("https"),da=Ii().http,ha=Ii().https,Ys=ye("url"),ua=ye("zlib"),ga=cr().version,Ct=tr(),lr=Qt(),fa=er(),pa=gt(),Js=/https:?/;function zs(n,e,t){if(n.hostname=e.host,n.host=e.host,n.port=e.port,n.path=t,e.auth){var r=Buffer.from(e.auth.username+":"+e.auth.password,"utf8").toString("base64");n.headers["Proxy-Authorization"]="Basic "+r}n.beforeRedirect=function(s){s.headers.host=s.host,zs(s,e,s.href)}}Zs.exports=function(e){return new Promise(function(r,i){var s;function o(){e.cancelToken&&e.cancelToken.unsubscribe(s),e.signal&&e.signal.removeEventListener("abort",s)}var a=function(F){o(),r(F)},d=!1,h=function(F){o(),d=!0,i(F)},l=e.data,u=e.headers,T={};if(Object.keys(u).forEach(function(F){T[F.toLowerCase()]=F}),"user-agent"in T?u[T["user-agent"]]||delete u[T["user-agent"]]:u["User-Agent"]="axios/"+ga,l&&!qt.isStream(l)){if(!Buffer.isBuffer(l))if(qt.isArrayBuffer(l))l=Buffer.from(new Uint8Array(l));else if(qt.isString(l))l=Buffer.from(l,"utf-8");else return h(Ct("Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Stream",e));if(e.maxBodyLength>-1&&l.length>e.maxBodyLength)return h(Ct("Request body larger than maxBodyLength limit",e));T["content-length"]||(u["Content-Length"]=l.length)}var A=void 0;if(e.auth){var _=e.auth.username||"",$=e.auth.password||"";A=_+":"+$}var N=aa(e.baseURL,e.url),P=Ys.parse(N),k=P.protocol||"http:";if(!A&&P.auth){var C=P.auth.split(":"),f=C[0]||"",x=C[1]||"";A=f+":"+x}A&&T.authorization&&delete u[T.authorization];var w=Js.test(k),U=w?e.httpsAgent:e.httpAgent;try{Ws(P.path,e.params,e.paramsSerializer).replace(/^\?/,"")}catch(D){var K=new Error(D.message);K.config=e,K.url=e.url,K.exists=!0,h(K)}var B={path:Ws(P.path,e.params,e.paramsSerializer).replace(/^\?/,""),method:e.method.toUpperCase(),headers:u,agent:U,agents:{http:e.httpAgent,https:e.httpsAgent},auth:A};e.socketPath?B.socketPath=e.socketPath:(B.hostname=P.hostname,B.port=P.port);var z=e.proxy;if(!z&&z!==!1){var y=k.slice(0,-1)+"_proxy",R=process.env[y]||process.env[y.toUpperCase()];if(R){var c=Ys.parse(R),S=process.env.no_proxy||process.env.NO_PROXY,Vt=!0;if(S){var g=S.split(",").map(function(F){return F.trim()});Vt=!g.some(function(F){return F?F==="*"||F[0]==="."&&P.hostname.substr(P.hostname.length-F.length)===F?!0:P.hostname===F:!1})}if(Vt&&(z={host:c.hostname,port:c.port,protocol:c.protocol},c.auth)){var E=c.auth.split(":");z.auth={username:E[0],password:E[1]}}}}z&&(B.headers.host=P.hostname+(P.port?":"+P.port:""),zs(B,z,k+"//"+P.hostname+(P.port?":"+P.port:"")+B.path));var m,fe=w&&(z?Js.test(z.protocol):!0);e.transport?m=e.transport:e.maxRedirects===0?m=fe?la:ca:(e.maxRedirects&&(B.maxRedirects=e.maxRedirects),m=fe?ha:da),e.maxBodyLength>-1&&(B.maxBodyLength=e.maxBodyLength),e.insecureHTTPParser&&(B.insecureHTTPParser=e.insecureHTTPParser);var q=m.request(B,function(F){if(!q.aborted){var Se=F,Pt=F.req||q;if(F.statusCode!==204&&Pt.method!=="HEAD"&&e.decompress!==!1)switch(F.headers["content-encoding"]){case"gzip":case"compress":case"deflate":Se=Se.pipe(ua.createUnzip()),delete F.headers["content-encoding"];break}var ht={status:F.statusCode,statusText:F.statusMessage,headers:F.headers,config:e,request:Pt};if(e.responseType==="stream")ht.data=Se,Vs(a,h,ht);else{var Wt=[],Gi=0;Se.on("data",function(Le){Wt.push(Le),Gi+=Le.length,e.maxContentLength>-1&&Gi>e.maxContentLength&&(d=!0,Se.destroy(),h(Ct("maxContentLength size of "+e.maxContentLength+" exceeded",e,null,Pt)))}),Se.on("aborted",function(){d||(Se.destroy(),h(Ct("error request aborted",e,"ERR_REQUEST_ABORTED",Pt)))}),Se.on("error",function(Le){q.aborted||h(lr(Le,e,null,Pt))}),Se.on("end",function(){try{var Le=Wt.length===1?Wt[0]:Buffer.concat(Wt);e.responseType!=="arraybuffer"&&(Le=Le.toString(e.responseEncoding),(!e.responseEncoding||e.responseEncoding==="utf8")&&(Le=qt.stripBOM(Le))),ht.data=Le}catch(Vi){h(lr(Vi,e,Vi.code,ht.request,ht))}Vs(a,h,ht)})}}});if(q.on("error",function(F){q.aborted&&F.code!=="ERR_FR_TOO_MANY_REDIRECTS"||h(lr(F,e,null,q))}),q.on("socket",function(F){F.setKeepAlive(!0,1e3*60)}),e.timeout){var Re=parseInt(e.timeout,10);if(isNaN(Re)){h(Ct("error trying to parse `config.timeout` to int",e,"ERR_PARSE_TIMEOUT",q));return}q.setTimeout(Re,function(){q.abort();var F="";e.timeoutErrorMessage?F=e.timeoutErrorMessage:F="timeout of "+e.timeout+"ms exceeded";var Se=e.transitional||fa;h(Ct(F,e,Se.clarifyTimeoutError?"ETIMEDOUT":"ECONNABORTED",q))})}(e.cancelToken||e.signal)&&(s=function(D){q.aborted||(q.abort(),h(!D||D&&D.type?new pa("canceled"):D))},e.cancelToken&&e.cancelToken.subscribe(s),e.signal&&(e.signal.aborted?s():e.signal.addEventListener("abort",s))),qt.isStream(l)?l.on("error",function(F){h(lr(F,e,null,q))}).pipe(q):q.end(l)})}});var hr=L((_c,tn)=>{"use strict";var le=de(),Qs=as(),ma=Qt(),Ca=er(),va={"Content-Type":"application/x-www-form-urlencoded"};function en(n,e){!le.isUndefined(n)&&le.isUndefined(n["Content-Type"])&&(n["Content-Type"]=e)}function Ea(){var n;return typeof XMLHttpRequest<"u"?n=bs():typeof process<"u"&&Object.prototype.toString.call(process)==="[object process]"&&(n=Xs()),n}function wa(n,e,t){if(le.isString(n))try{return(e||JSON.parse)(n),le.trim(n)}catch(r){if(r.name!=="SyntaxError")throw r}return(t||JSON.stringify)(n)}var dr={transitional:Ca,adapter:Ea(),transformRequest:[function(e,t){return Qs(t,"Accept"),Qs(t,"Content-Type"),le.isFormData(e)||le.isArrayBuffer(e)||le.isBuffer(e)||le.isStream(e)||le.isFile(e)||le.isBlob(e)?e:le.isArrayBufferView(e)?e.buffer:le.isURLSearchParams(e)?(en(t,"application/x-www-form-urlencoded;charset=utf-8"),e.toString()):le.isObject(e)||t&&t["Content-Type"]==="application/json"?(en(t,"application/json"),wa(e)):e}],transformResponse:[function(e){var t=this.transitional||dr.transitional,r=t&&t.silentJSONParsing,i=t&&t.forcedJSONParsing,s=!r&&this.responseType==="json";if(s||i&&le.isString(e)&&e.length)try{return JSON.parse(e)}catch(o){if(s)throw o.name==="SyntaxError"?ma(o,this,"E_JSON_PARSE"):o}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};le.forEach(["delete","get","head"],function(e){dr.headers[e]={}});le.forEach(["post","put","patch"],function(e){dr.headers[e]=le.merge(va)});tn.exports=dr});var sn=L(($c,rn)=>{"use strict";var Ta=de(),Ra=hr();rn.exports=function(e,t,r){var i=this||Ra;return Ta.forEach(r,function(o){e=o.call(i,e,t)}),e}});var bi=L((Dc,nn)=>{"use strict";nn.exports=function(e){return!!(e&&e.__CANCEL__)}});var cn=L((Pc,an)=>{"use strict";var on=de(),xi=sn(),Sa=bi(),ya=hr(),Ia=gt();function Ai(n){if(n.cancelToken&&n.cancelToken.throwIfRequested(),n.signal&&n.signal.aborted)throw new Ia("canceled")}an.exports=function(e){Ai(e),e.headers=e.headers||{},e.data=xi.call(e,e.data,e.headers,e.transformRequest),e.headers=on.merge(e.headers.common||{},e.headers[e.method]||{},e.headers),on.forEach(["delete","get","head","post","put","patch","common"],function(i){delete e.headers[i]});var t=e.adapter||ya.adapter;return t(e).then(function(i){return Ai(e),i.data=xi.call(e,i.data,i.headers,e.transformResponse),i},function(i){return Sa(i)||(Ai(e),i&&i.response&&(i.response.data=xi.call(e,i.response.data,i.response.headers,e.transformResponse))),Promise.reject(i)})}});var _i=L((Nc,ln)=>{"use strict";var Ie=de();ln.exports=function(e,t){t=t||{};var r={};function i(l,u){return Ie.isPlainObject(l)&&Ie.isPlainObject(u)?Ie.merge(l,u):Ie.isPlainObject(u)?Ie.merge({},u):Ie.isArray(u)?u.slice():u}function s(l){if(Ie.isUndefined(t[l])){if(!Ie.isUndefined(e[l]))return i(void 0,e[l])}else return i(e[l],t[l])}function o(l){if(!Ie.isUndefined(t[l]))return i(void 0,t[l])}function a(l){if(Ie.isUndefined(t[l])){if(!Ie.isUndefined(e[l]))return i(void 0,e[l])}else return i(void 0,t[l])}function d(l){if(l in t)return i(e[l],t[l]);if(l in e)return i(void 0,e[l])}var h={url:o,method:o,data:o,baseURL:a,transformRequest:a,transformResponse:a,paramsSerializer:a,timeout:a,timeoutMessage:a,withCredentials:a,adapter:a,responseType:a,xsrfCookieName:a,xsrfHeaderName:a,onUploadProgress:a,onDownloadProgress:a,decompress:a,maxContentLength:a,maxBodyLength:a,transport:a,httpAgent:a,httpsAgent:a,cancelToken:a,socketPath:a,responseEncoding:a,validateStatus:d};return Ie.forEach(Object.keys(e).concat(Object.keys(t)),function(u){var T=h[u]||s,A=T(u);Ie.isUndefined(A)&&T!==d||(r[u]=A)}),r}});var un=L((Oc,hn)=>{"use strict";var ba=cr().version,$i={};["object","boolean","number","function","string","symbol"].forEach(function(n,e){$i[n]=function(r){return typeof r===n||"a"+(e<1?"n ":" ")+n}});var dn={};$i.transitional=function(e,t,r){function i(s,o){return"[Axios v"+ba+"] Transitional option '"+s+"'"+o+(r?". "+r:"")}return function(s,o,a){if(e===!1)throw new Error(i(o," has been removed"+(t?" in "+t:"")));return t&&!dn[o]&&(dn[o]=!0,console.warn(i(o," has been deprecated since v"+t+" and will be removed in the near future"))),e?e(s,o,a):!0}};function xa(n,e,t){if(typeof n!="object")throw new TypeError("options must be an object");for(var r=Object.keys(n),i=r.length;i-- >0;){var s=r[i],o=e[s];if(o){var a=n[s],d=a===void 0||o(a,s,n);if(d!==!0)throw new TypeError("option "+s+" must be "+d);continue}if(t!==!0)throw Error("Unknown option "+s)}}hn.exports={assertOptions:xa,validators:$i}});var vn=L((kc,Cn)=>{"use strict";var pn=de(),Aa=Zt(),gn=ns(),fn=cn(),ur=_i(),mn=un(),vt=mn.validators;function Lt(n){this.defaults=n,this.interceptors={request:new gn,response:new gn}}Lt.prototype.request=function(e,t){typeof e=="string"?(t=t||{},t.url=e):t=e||{},t=ur(this.defaults,t),t.method?t.method=t.method.toLowerCase():this.defaults.method?t.method=this.defaults.method.toLowerCase():t.method="get";var r=t.transitional;r!==void 0&&mn.assertOptions(r,{silentJSONParsing:vt.transitional(vt.boolean),forcedJSONParsing:vt.transitional(vt.boolean),clarifyTimeoutError:vt.transitional(vt.boolean)},!1);var i=[],s=!0;this.interceptors.request.forEach(function(A){typeof A.runWhen=="function"&&A.runWhen(t)===!1||(s=s&&A.synchronous,i.unshift(A.fulfilled,A.rejected))});var o=[];this.interceptors.response.forEach(function(A){o.push(A.fulfilled,A.rejected)});var a;if(!s){var d=[fn,void 0];for(Array.prototype.unshift.apply(d,i),d=d.concat(o),a=Promise.resolve(t);d.length;)a=a.then(d.shift(),d.shift());return a}for(var h=t;i.length;){var l=i.shift(),u=i.shift();try{h=l(h)}catch(T){u(T);break}}try{a=fn(h)}catch(T){return Promise.reject(T)}for(;o.length;)a=a.then(o.shift(),o.shift());return a};Lt.prototype.getUri=function(e){return e=ur(this.defaults,e),Aa(e.url,e.params,e.paramsSerializer).replace(/^\?/,"")};pn.forEach(["delete","get","head","options"],function(e){Lt.prototype[e]=function(t,r){return this.request(ur(r||{},{method:e,url:t,data:(r||{}).data}))}});pn.forEach(["post","put","patch"],function(e){Lt.prototype[e]=function(t,r,i){return this.request(ur(i||{},{method:e,url:t,data:r}))}});Cn.exports=Lt});var wn=L((Hc,En)=>{"use strict";var _a=gt();function Et(n){if(typeof n!="function")throw new TypeError("executor must be a function.");var e;this.promise=new Promise(function(i){e=i});var t=this;this.promise.then(function(r){if(t._listeners){var i,s=t._listeners.length;for(i=0;i<s;i++)t._listeners[i](r);t._listeners=null}}),this.promise.then=function(r){var i,s=new Promise(function(o){t.subscribe(o),i=o}).then(r);return s.cancel=function(){t.unsubscribe(i)},s},n(function(i){t.reason||(t.reason=new _a(i),e(t.reason))})}Et.prototype.throwIfRequested=function(){if(this.reason)throw this.reason};Et.prototype.subscribe=function(e){if(this.reason){e(this.reason);return}this._listeners?this._listeners.push(e):this._listeners=[e]};Et.prototype.unsubscribe=function(e){if(this._listeners){var t=this._listeners.indexOf(e);t!==-1&&this._listeners.splice(t,1)}};Et.source=function(){var e,t=new Et(function(i){e=i});return{token:t,cancel:e}};En.exports=Et});var Rn=L((qc,Tn)=>{"use strict";Tn.exports=function(e){return function(r){return e.apply(null,r)}}});var yn=L((Lc,Sn)=>{"use strict";var $a=de();Sn.exports=function(e){return $a.isObject(e)&&e.isAxiosError===!0}});var xn=L((Mc,Di)=>{"use strict";var In=de(),Da=Qr(),gr=vn(),Pa=_i(),Na=hr();function bn(n){var e=new gr(n),t=Da(gr.prototype.request,e);return In.extend(t,gr.prototype,e),In.extend(t,e),t.create=function(i){return bn(Pa(n,i))},t}var Me=bn(Na);Me.Axios=gr;Me.Cancel=gt();Me.CancelToken=wn();Me.isCancel=bi();Me.VERSION=cr().version;Me.all=function(e){return Promise.all(e)};Me.spread=Rn();Me.isAxiosError=yn();Di.exports=Me;Di.exports.default=Me});var _n=L((Fc,An)=>{An.exports=xn()});var Hn=L((Ni,kn)=>{Ni=kn.exports=Ha;Ni.getSerialize=On;function Ha(n,e,t,r){return JSON.stringify(n,On(e,r),t)}function On(n,e){var t=[],r=[];return e==null&&(e=function(i,s){return t[0]===s?"[Circular ~]":"[Circular ~."+r.slice(0,t.indexOf(s)).join(".")+"]"}),function(i,s){if(t.length>0){var o=t.indexOf(this);~o?t.splice(o+1):t.push(this),~o?r.splice(o,1/0,i):r.push(i),~t.indexOf(s)&&(s=e.call(this,i,s))}else t.push(s);return n==null?s:n.call(this,i,s)}}});var tc={};Wi(tc,{CallKit:()=>Ki});var Gt=Xr(zi());var $n=Xr(_n()),Pi=$n.default.create({headers:{"Content-Type":"application/x-www-form-urlencoded"},timeout:6e4});Pi.interceptors.request.use(n=>n);Pi.interceptors.response.use(n=>n.data,n=>Promise.reject(n));var Oa=n=>Pi.request(n),Dn=Oa;var fr=class{callKit;constructor(e){this.callKit=e}isLogining=!1;isLoginOuting=!1;async login(e){if(this.isLogining){this.callKit.logger.info("login is already in progress cancel",{caller:"Api.login",content:{userName:e.userName,timestamp:e.timestamp}});return}this.isLogining=!0;try{return await this.post({url:"/auth/agentUser/login",method:"post",data:e})}finally{this.isLogining=!1}}async loginOut(e){if(this.isLoginOuting){this.callKit.logger.info("loginOut is already in progress cancel",{caller:"Api.loginOut",content:{sessionId:e.sessionId,timestamp:e.timestamp}});return}this.isLoginOuting=!0;try{return await this.post({url:"/auth/agentUser/loginOut",method:"post",data:e})}finally{this.isLoginOuting=!1}}async trackLogs(e){return this.post({url:"/agent/user/sdkLog",method:"post",data:{content:[e]}},{useFormData:!0,skipLog:!0})}async updateUserStatus(e){return this.post({url:"/agent/user/changeStatus",method:"post",data:e})}async post(e,t={skipLog:!1}){let{userInfo:r,host:i}=this.callKit.config.getConfig(),{sessionId:s}=r;if(e.url=`${i}${e.url}`,e.headers={"Content-Type":"application/x-www-form-urlencoded",...e.headers},e.headers["Content-Type"]==="application/x-www-form-urlencoded"&&t.useFormData){let T=new FormData,A=e.data||{};for(let _ in A)Object.prototype.hasOwnProperty.call(A,_)&&T.append(_,A[_]);e.data=T}else e.data=new URLSearchParams(e.data).toString();s&&(e.headers.sessionId=s);let o=Date.now();t.skipLog||this.callKit.logger.info("API Request Start",{type:"API",caller:"API.Request",content:{url:e.url,headers:e.headers,data:e.data,extra:t,startTime:o}});let a=await Dn(e).catch(()=>{this.callKit.config.reset()}),d=Date.now();if(t.skipLog||this.callKit.logger.info("API Request Finish",{type:"API",caller:"API.Request",content:{url:e.url,duration:`${d-o}ms`,response:a}}),!a)throw this.callKit.reset(),new Error("Network error");let{code:h,data:l,message:u}=a;if(h==="000000")return l;throw h==="100013"&&this.callKit.config.reset(),new Error(u??"Request failed")}};var ne={init:0,connecting:2,ringing:4,calling:5},H={KIT_LOG:"log",KIT_USER_STATUS_CHANGE:"userStatusChange",KIT_LOGIN_CHANGE:"loginChange",KIT_REGISTER_CHANGE:"registerChange",KIT_CALL_STATUS_CHANGE:"callStatusChange",KIT_SET_HOLD:"holdChange",KIT_SET_MUTE:"muteChange",KIT_CALL_ID_CHANGE:"callIdChange",KIT_ERROR:"error",KIT_INVITE:"invite",KIT_OUTGOING_INVITE:"outgoingInvite",CALL_CONNECTING:"connecting",CALL_RINGING:"ringing",AGENT_PICK_UP:"agentPickUp",CALL_PICK_UP:"pickUp",CALL_NO_ANSWER:"noAnswer",CALL_HANG_UP:"hangUp",CALL_END:"callEnd",CALL_CDR:"callCdr",SERVER_SOCKET_EVENT:"socketEvent",USER_STATUS_CHANGE:"userStatusChange",INCALL_CONNECT_EVENT:"IncallConnectEvent",SIP_CONNECT_EVENT:"sipConnectEvent",SIP_REGISTERER_EVENT:"sipRegistererEvent",SIP_SESSION_EVENT:"sipSessionEvent"},V={UNKNOWN_ERROR:-1,API_USER_LOGIN_ERROR:1000001,API_USER_STATUS_UPDATE_ERROR:1000002,API_USER_LOGOUT_ERROR:1000003,CONNECT_CALL_STATUS_ERROR:2000001,USER_NOT_LOGIN:2000002,WEBRTC_USER_MEDIA_ERROR:2000003,WEBRTC_HOLE_STATUS_ERROR:2000004,WEBRTC_AUDIO_PLAYER_ERROR:2000005,WEBRTC_AUDIO_PLAY_ERROR:2000006,WEBRTC_USER_AGENT_ERROR:2000007,WEBRTC_CALL_INVITE_ERROR:2000008,WEBRTC_REGISTER_ERROR:2000009,WEBRTC_MUTE_STATUS_ERROR:2000010,WEBRTC_CANCEL_REGISTER_ERROR:2000011,WEBRTC_MUTE_ERROR:2000012,SOCKET_CONNECT_ERROR:3000001,SOCKET_PING_TIMEOUT:3000002,SOKET_SERVER_ERROR:3000003,SOCKET_CALL_ERROR:3000004,SOCKET_RECONNECT_FAILED:3000005},Pn={info:9,success:4,warn:3,error:2,silent:1},be={PING:"PING",START:"START",AGENT_HANGUP:"AGENT_HANG_UP",CALL_CANCEL:"AGENT_CANCEL",HOLD:"AGENT_HOLD",UNHOLD:"AGENT_UN_HOLD",MUTE:"AGENT_MUTE",UNMUTE:"AGENT_UN_MUTE",CALL:"CALL",END:"STOP",AGENT_TRANSFER:"AGENT_TRANSFER",HANG_UP_REASON:"HANG_UP_REASON",ACK:"ACK"},pe={PONG:"PONG",START_CONFIRM:"START_CONFIRM",CALL_SUCCESS:"CALL_SUCCESS",CALL_FAILED:"CALL_FAILED",CUSTOMER_RINGING:"CUSTOMER_RINGING",AGENT_PICK_UP:"AGENT_PICK_UP",CUSTOMER_PICK_UP:"CUSTOMER_PICK_UP",CUSTOMER_NO_ANSWER:"CUSTOMER_NO_ANSWER",CUSTOMER_HANG_UP:"CUSTOMER_HANG_UP",AGENT_NO_ANSWER:"AGENT_NO_ANSWER",AGENT_HANG_UP:"AGENT_HANG_UP",CALL_CDR:"CALL_CDR",STOP_CONFIRM:"STOP_CONFIRM",CLOSE:"CLOSE",ERROR:"ERROR",SESSION_ERROR:"SESSION_ERROR"},je={NONE:"NONE",INTERNAL:"INTERNAL"},pr={audio:{autoGainControl:!0,noiseSuppression:!0,echoCancellation:!0},video:!1},xe={phoneNum:1,workOrderId:2},Mt={enabled:!1,interval:5e3,maxSize:8192},Ft={enabled:!0,maxAttempts:3,delay:1e3,pingInterval:3e4,pingTimeout:5e3},Ut={enabled:!0,maxAttempts:3,delay:1e3};var mr=class{callKit;constructor(e){this.callKit=e}async callStart(e){if(this.callKit.config.check()){if(this.callKit.logger.info("callStart",{caller:"Call.callStart",content:{startConfirm:this.callKit.socket.startConfirm}}),!this.callKit.socket.startConfirm){this.callKit.logger.warn("server not confirm start",{caller:"Call.callStart",content:{startConfirm:this.callKit.socket.startConfirm}});return}this.callKit.connect.call(async t=>{let r={...e?.extra||{},agentId:t.agentId,sourceType:t.sourceType};t.sourceType===xe.phoneNum?r.phoneNum=t.extno:t.sourceType===xe.workOrderId&&(r.workOrderId=t.workOrderId),this.callKit.socket.send(be.CALL,r)})}}async callRefer(e,t){this.callKit.config.check()&&(this.callKit.logger.info("callRefer",{caller:"Call.callRefer",content:{referTo:e,options:t}}),this.callKit.connect.refer(e,t))}async callEnd(e=!1,t=!1){this.callKit.connect.connectStatus!==ne.init&&this.callKit.config.check()&&(this.callKit.logger.info("callEnd",{caller:"Call.callEnd",content:{isUnprompted:e,isError:t,connectStatus:this.callKit.connect.connectStatus}}),this.callKit.connect.hangup(e,t))}async callHold(){if(this.callKit.config.check()){if(!this.callKit.connect.isCalling()){this.callKit.logger.warn("Current state cannot be held",{caller:"Call.callHold",content:{isHold:this.callKit.connect.isHolding(),isCalling:this.callKit.connect.isCalling()}});return}this.callKit.connect.setHold(!0)}}async callUnhold(){if(this.callKit.config.check()){if(!this.callKit.connect.isCalling()){this.callKit.logger.warn("Current state cannot unhold",{caller:"Call.callUnhold",content:{isHold:this.callKit.connect.isHolding(),isCalling:this.callKit.connect.isCalling()}});return}this.callKit.connect.setHold(!1)}}async callMute(){if(this.callKit.config.check()){if(!this.callKit.connect.isCalling()){this.callKit.logger.warn("Current state cannot be muted",{caller:"Call.callMute",content:{isMuted:this.callKit.connect.isMuted(),isCalling:this.callKit.connect.isCalling()}});return}this.callKit.connect.setMute(!0)}}async callUnmute(){if(this.callKit.config.check()){if(!this.callKit.connect.isCalling()){this.callKit.logger.warn("Current state cannot be unmuted",{caller:"Call.callUnmute",content:{isMuted:this.callKit.connect.isMuted(),isCalling:this.callKit.connect.isCalling()}});return}this.callKit.connect.setMute(!1)}}};var Nn={name:"@koi-design/callkit",version:"2.0.5-beta.13",description:"callkit",author:"koi",license:"ISC",scripts:{build:"tsup",start:"vite",dev:"tsup --watch",lint:"eslint -c ../../.eslintrc.js --ext .jsx,.js,.tsx,.ts ./package --fix",release:"tsup && node scripts/pkg.js"},exports:{".":{types:"./dist/index.d.ts",require:"./dist/index.js",import:"./dist/index.mjs"}},main:"./dist/index.js",module:"./dist/index.mjs",types:"./dist/index.d.ts",files:["dist"],dependencies:{axios:"~0.26.1","blueimp-md5":"^2.12.0","eslint-plugin-jsonc":"^2.21.0","json-stringify-safe":"^5.0.1","sip.js":"^0.21.2"},devDependencies:{"@commitlint/cli":"^9.1.2","@commitlint/config-conventional":"^9.1.2","@koi-design/eslint-config-ts":"^0.0.14","@types/blueimp-md5":"^2.18.2",archiver:"^5.3.1",consola:"^3.4.2",eslint:"~8.29.0","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.5.0",husky:"^8.0.3","lint-staged":"^10.5.4",prettier:"^2.6.2",tsup:"6.6.3",typescript:"^4.6.3",vite:"^4"}};var Cr=class{callKit;constructor(e){this.callKit=e}config={version:`V${Nn.version}`,host:"",log:"info",trackLogs:Mt,audioRef:void 0,constrains:pr,socket:"",reconnect:{sip:Ut,incall:Ft},userInfo:{wsUrl:"",logGather:!1,sessionId:"",username:"",password:"",encryptionPassword:je.INTERNAL,sourceType:xe.phoneNum,extno:"",workOrderId:"",userPart:"",agentId:"",fsUserId:"",fsPassword:"",fsIp:"",fsPort:"",iceInfo:[],iceGatheringTimeout:0,encryptionMethod:je.INTERNAL}};getConfig=()=>this.config;setConfig=async(e,t)=>{this.config[e]=t};setUserInfo=async(e,t)=>{this.config.userInfo[e]=t,this.callKit.logger.info("setUserInfo",{caller:"Config.setUserInfo",content:{key:e,value:t}})};reset=async()=>{this.isLogin()&&(this.config.userInfo={wsUrl:"",sessionId:"",username:"",password:"",encryptionPassword:"",userPart:"",sourceType:xe.phoneNum,extno:"",workOrderId:"",agentId:"",fsUserId:"",fsPassword:"",fsIp:"",fsPort:"",iceInfo:[],iceGatheringTimeout:this.config.userInfo.iceGatheringTimeout,encryptionMethod:je.INTERNAL,logGather:!1},this.callKit.trigger(H.KIT_LOGIN_CHANGE,!1))};validate=()=>{let{userPart:e,fsIp:t,fsPassword:r,fsPort:i}=this.config.userInfo;return!(!e||!t||!i||!r)};isLogin=()=>this.validate();check(){return this.isLogin()?!0:(this.callKit.logger.warn("User not logged in",{caller:"Config.check",content:{errCode:V.USER_NOT_LOGIN}}),!1)}getTrackLogsConfig(){return{...Mt,...this.config?.trackLogs}}getReconnectConfig(e){return{...this.config?.reconnect?.[e]??(e==="sip"?Ut:Ft)}}enableTrackLogs(e){this.config.trackLogs.enabled=e}};var Ln=Xr(Hn());function Je(n){return Pn[n]}function qa(n){let{timestamp:e,level:t,type:r="OTHER",message:i,caller:s,content:o}=n,a=String(t).toUpperCase();return`${e} [${a}] [${r}] [${s??"unknown"}] [${i}] ${(0,Ln.default)(o)}`.trim()}function qn(n){return new Blob([n]).size}var vr=class{prefix="CallKit";level="info";pendingTrackLogs=[];trackLogsTimer=null;callKit;constructor(e,t){this.callKit=e,this.level=t||"info",this.startTrackLogsTimer()}startTrackLogsTimer(){let{interval:e}=this.callKit.config.getTrackLogsConfig();this.trackLogsTimer||(this.trackLogsTimer=setInterval(()=>{this.flushTrackLogs()},e))}flushTrackLogs(){if(this.pendingTrackLogs.length===0)return;let{enabled:e,maxSize:t}=this.callKit.config.getTrackLogsConfig();if(e)try{let r=[],i=[],s=0;for(let o of this.pendingTrackLogs){let a=qn(o),d=i.length>0?`
5
+ `)}function Wo(n){n?process.env.DEBUG=n:delete process.env.DEBUG}function Yo(){return process.env.DEBUG}function Jo(n){n.inspectOpts={};let e=Object.keys(ae.inspectOpts);for(let t=0;t<e.length;t++)n.inspectOpts[e[t]]=ae.inspectOpts[e[t]]}ar.exports=li()(ae);var{formatters:qs}=ar.exports;qs.o=function(n){return this.inspectOpts.colors=this.useColors,or.inspect(n,this.inspectOpts).split(`
6
+ `).map(e=>e.trim()).join(" ")};qs.O=function(n){return this.inspectOpts.colors=this.useColors,or.inspect(n,this.inspectOpts)}});var Ms=L((yc,ui)=>{typeof process>"u"||process.type==="renderer"||process.browser===!0||process.__nwjs?ui.exports=Ds():ui.exports=Ls()});var Us=L((Ic,Fs)=>{var Nt;Fs.exports=function(){if(!Nt){try{Nt=Ms()("follow-redirects")}catch{}typeof Nt!="function"&&(Nt=function(){})}Nt.apply(null,arguments)}});var Ii=L((bc,yi)=>{var kt=ye("url"),Ot=kt.URL,zo=ye("http"),Zo=ye("https"),Ci=ye("stream").Writable,vi=ye("assert"),Bs=Us();(function(){var e=typeof process<"u",t=typeof window<"u"&&typeof document<"u",r=at(Error.captureStackTrace);!e&&(t||!r)&&console.warn("The follow-redirects package should be excluded from browser builds.")})();var Ei=!1;try{vi(new Ot(""))}catch(n){Ei=n.code==="ERR_INVALID_URL"}var Xo=["auth","host","hostname","href","path","pathname","port","protocol","query","search","hash"],wi=["abort","aborted","connect","error","socket","timeout"],Ti=Object.create(null);wi.forEach(function(n){Ti[n]=function(e,t,r){this._redirectable.emit(n,e,t,r)}});var fi=Ht("ERR_INVALID_URL","Invalid URL",TypeError),pi=Ht("ERR_FR_REDIRECTION_FAILURE","Redirected request failed"),Qo=Ht("ERR_FR_TOO_MANY_REDIRECTS","Maximum number of redirects exceeded",pi),ea=Ht("ERR_FR_MAX_BODY_LENGTH_EXCEEDED","Request body larger than maxBodyLength limit"),ta=Ht("ERR_STREAM_WRITE_AFTER_END","write after end"),ra=Ci.prototype.destroy||Ks;function Ee(n,e){Ci.call(this),this._sanitizeOptions(n),this._options=n,this._ended=!1,this._ending=!1,this._redirectCount=0,this._redirects=[],this._requestBodyLength=0,this._requestBodyBuffers=[],e&&this.on("response",e);var t=this;this._onNativeResponse=function(r){try{t._processResponse(r)}catch(i){t.emit("error",i instanceof pi?i:new pi({cause:i}))}},this._performRequest()}Ee.prototype=Object.create(Ci.prototype);Ee.prototype.abort=function(){Si(this._currentRequest),this._currentRequest.abort(),this.emit("abort")};Ee.prototype.destroy=function(n){return Si(this._currentRequest,n),ra.call(this,n),this};Ee.prototype.write=function(n,e,t){if(this._ending)throw new ta;if(!ot(n)&&!na(n))throw new TypeError("data should be a string, Buffer or Uint8Array");if(at(e)&&(t=e,e=null),n.length===0){t&&t();return}this._requestBodyLength+n.length<=this._options.maxBodyLength?(this._requestBodyLength+=n.length,this._requestBodyBuffers.push({data:n,encoding:e}),this._currentRequest.write(n,e,t)):(this.emit("error",new ea),this.abort())};Ee.prototype.end=function(n,e,t){if(at(n)?(t=n,n=e=null):at(e)&&(t=e,e=null),!n)this._ended=this._ending=!0,this._currentRequest.end(null,null,t);else{var r=this,i=this._currentRequest;this.write(n,e,function(){r._ended=!0,i.end(null,null,t)}),this._ending=!0}};Ee.prototype.setHeader=function(n,e){this._options.headers[n]=e,this._currentRequest.setHeader(n,e)};Ee.prototype.removeHeader=function(n){delete this._options.headers[n],this._currentRequest.removeHeader(n)};Ee.prototype.setTimeout=function(n,e){var t=this;function r(o){o.setTimeout(n),o.removeListener("timeout",o.destroy),o.addListener("timeout",o.destroy)}function i(o){t._timeout&&clearTimeout(t._timeout),t._timeout=setTimeout(function(){t.emit("timeout"),s()},n),r(o)}function s(){t._timeout&&(clearTimeout(t._timeout),t._timeout=null),t.removeListener("abort",s),t.removeListener("error",s),t.removeListener("response",s),t.removeListener("close",s),e&&t.removeListener("timeout",e),t.socket||t._currentRequest.removeListener("socket",i)}return e&&this.on("timeout",e),this.socket?i(this.socket):this._currentRequest.once("socket",i),this.on("socket",r),this.on("abort",s),this.on("error",s),this.on("response",s),this.on("close",s),this};["flushHeaders","getHeader","setNoDelay","setSocketKeepAlive"].forEach(function(n){Ee.prototype[n]=function(e,t){return this._currentRequest[n](e,t)}});["aborted","connection","socket"].forEach(function(n){Object.defineProperty(Ee.prototype,n,{get:function(){return this._currentRequest[n]}})});Ee.prototype._sanitizeOptions=function(n){if(n.headers||(n.headers={}),n.host&&(n.hostname||(n.hostname=n.host),delete n.host),!n.pathname&&n.path){var e=n.path.indexOf("?");e<0?n.pathname=n.path:(n.pathname=n.path.substring(0,e),n.search=n.path.substring(e))}};Ee.prototype._performRequest=function(){var n=this._options.protocol,e=this._options.nativeProtocols[n];if(!e)throw new TypeError("Unsupported protocol "+n);if(this._options.agents){var t=n.slice(0,-1);this._options.agent=this._options.agents[t]}var r=this._currentRequest=e.request(this._options,this._onNativeResponse);r._redirectable=this;for(var i of wi)r.on(i,Ti[i]);if(this._currentUrl=/^\//.test(this._options.path)?kt.format(this._options):this._options.path,this._isRedirect){var s=0,o=this,a=this._requestBodyBuffers;(function d(h){if(r===o._currentRequest)if(h)o.emit("error",h);else if(s<a.length){var l=a[s++];r.finished||r.write(l.data,l.encoding,d)}else o._ended&&r.end()})()}};Ee.prototype._processResponse=function(n){var e=n.statusCode;this._options.trackRedirects&&this._redirects.push({url:this._currentUrl,headers:n.headers,statusCode:e});var t=n.headers.location;if(!t||this._options.followRedirects===!1||e<300||e>=400){n.responseUrl=this._currentUrl,n.redirects=this._redirects,this.emit("response",n),this._requestBodyBuffers=[];return}if(Si(this._currentRequest),n.destroy(),++this._redirectCount>this._options.maxRedirects)throw new Qo;var r,i=this._options.beforeRedirect;i&&(r=Object.assign({Host:n.req.getHeader("host")},this._options.headers));var s=this._options.method;((e===301||e===302)&&this._options.method==="POST"||e===303&&!/^(?:GET|HEAD)$/.test(this._options.method))&&(this._options.method="GET",this._requestBodyBuffers=[],gi(/^content-/i,this._options.headers));var o=gi(/^host$/i,this._options.headers),a=Ri(this._currentUrl),d=o||a.host,h=/^\w+:/.test(t)?this._currentUrl:kt.format(Object.assign(a,{host:d})),l=ia(t,h);if(Bs("redirecting to",l.href),this._isRedirect=!0,mi(l,this._options),(l.protocol!==a.protocol&&l.protocol!=="https:"||l.host!==d&&!sa(l.host,d))&&gi(/^(?:(?:proxy-)?authorization|cookie)$/i,this._options.headers),at(i)){var u={headers:n.headers,statusCode:e},T={url:h,method:s,headers:r};i(this._options,u,T),this._sanitizeOptions(this._options)}this._performRequest()};function js(n){var e={maxRedirects:21,maxBodyLength:10485760},t={};return Object.keys(n).forEach(function(r){var i=r+":",s=t[i]=n[r],o=e[r]=Object.create(s);function a(h,l,u){return oa(h)?h=mi(h):ot(h)?h=mi(Ri(h)):(u=l,l=Gs(h),h={protocol:i}),at(l)&&(u=l,l=null),l=Object.assign({maxRedirects:e.maxRedirects,maxBodyLength:e.maxBodyLength},h,l),l.nativeProtocols=t,!ot(l.host)&&!ot(l.hostname)&&(l.hostname="::1"),vi.equal(l.protocol,i,"protocol mismatch"),Bs("options",l),new Ee(l,u)}function d(h,l,u){var T=o.request(h,l,u);return T.end(),T}Object.defineProperties(o,{request:{value:a,configurable:!0,enumerable:!0,writable:!0},get:{value:d,configurable:!0,enumerable:!0,writable:!0}})}),e}function Ks(){}function Ri(n){var e;if(Ei)e=new Ot(n);else if(e=Gs(kt.parse(n)),!ot(e.protocol))throw new fi({input:n});return e}function ia(n,e){return Ei?new Ot(n,e):Ri(kt.resolve(e,n))}function Gs(n){if(/^\[/.test(n.hostname)&&!/^\[[:0-9a-f]+\]$/i.test(n.hostname))throw new fi({input:n.href||n});if(/^\[/.test(n.host)&&!/^\[[:0-9a-f]+\](:\d+)?$/i.test(n.host))throw new fi({input:n.href||n});return n}function mi(n,e){var t=e||{};for(var r of Xo)t[r]=n[r];return t.hostname.startsWith("[")&&(t.hostname=t.hostname.slice(1,-1)),t.port!==""&&(t.port=Number(t.port)),t.path=t.search?t.pathname+t.search:t.pathname,t}function gi(n,e){var t;for(var r in e)n.test(r)&&(t=e[r],delete e[r]);return t===null||typeof t>"u"?void 0:String(t).trim()}function Ht(n,e,t){function r(i){at(Error.captureStackTrace)&&Error.captureStackTrace(this,this.constructor),Object.assign(this,i||{}),this.code=n,this.message=this.cause?e+": "+this.cause.message:e}return r.prototype=new(t||Error),Object.defineProperties(r.prototype,{constructor:{value:r,enumerable:!1},name:{value:"Error ["+n+"]",enumerable:!1}}),r}function Si(n,e){for(var t of wi)n.removeListener(t,Ti[t]);n.on("error",Ks),n.destroy(e)}function sa(n,e){vi(ot(n)&&ot(e));var t=n.length-e.length-1;return t>0&&n[t]==="."&&n.endsWith(e)}function ot(n){return typeof n=="string"||n instanceof String}function at(n){return typeof n=="function"}function na(n){return typeof n=="object"&&"length"in n}function oa(n){return Ot&&n instanceof Ot}yi.exports=js({http:zo,https:Zo});yi.exports.wrap=js});var cr=L((xc,Vs)=>{Vs.exports={version:"0.26.1"}});var Qs=L((Ac,Xs)=>{"use strict";var qt=de(),Ws=si(),aa=ni(),Ys=Zt(),ca=ye("http"),la=ye("https"),da=Ii().http,ha=Ii().https,Js=ye("url"),ua=ye("zlib"),ga=cr().version,Ct=tr(),lr=Qt(),fa=er(),pa=gt(),zs=/https:?/;function Zs(n,e,t){if(n.hostname=e.host,n.host=e.host,n.port=e.port,n.path=t,e.auth){var r=Buffer.from(e.auth.username+":"+e.auth.password,"utf8").toString("base64");n.headers["Proxy-Authorization"]="Basic "+r}n.beforeRedirect=function(s){s.headers.host=s.host,Zs(s,e,s.href)}}Xs.exports=function(e){return new Promise(function(r,i){var s;function o(){e.cancelToken&&e.cancelToken.unsubscribe(s),e.signal&&e.signal.removeEventListener("abort",s)}var a=function(F){o(),r(F)},d=!1,h=function(F){o(),d=!0,i(F)},l=e.data,u=e.headers,T={};if(Object.keys(u).forEach(function(F){T[F.toLowerCase()]=F}),"user-agent"in T?u[T["user-agent"]]||delete u[T["user-agent"]]:u["User-Agent"]="axios/"+ga,l&&!qt.isStream(l)){if(!Buffer.isBuffer(l))if(qt.isArrayBuffer(l))l=Buffer.from(new Uint8Array(l));else if(qt.isString(l))l=Buffer.from(l,"utf-8");else return h(Ct("Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Stream",e));if(e.maxBodyLength>-1&&l.length>e.maxBodyLength)return h(Ct("Request body larger than maxBodyLength limit",e));T["content-length"]||(u["Content-Length"]=l.length)}var A=void 0;if(e.auth){var _=e.auth.username||"",$=e.auth.password||"";A=_+":"+$}var N=aa(e.baseURL,e.url),P=Js.parse(N),k=P.protocol||"http:";if(!A&&P.auth){var C=P.auth.split(":"),f=C[0]||"",x=C[1]||"";A=f+":"+x}A&&T.authorization&&delete u[T.authorization];var w=zs.test(k),U=w?e.httpsAgent:e.httpAgent;try{Ys(P.path,e.params,e.paramsSerializer).replace(/^\?/,"")}catch(D){var K=new Error(D.message);K.config=e,K.url=e.url,K.exists=!0,h(K)}var B={path:Ys(P.path,e.params,e.paramsSerializer).replace(/^\?/,""),method:e.method.toUpperCase(),headers:u,agent:U,agents:{http:e.httpAgent,https:e.httpsAgent},auth:A};e.socketPath?B.socketPath=e.socketPath:(B.hostname=P.hostname,B.port=P.port);var z=e.proxy;if(!z&&z!==!1){var y=k.slice(0,-1)+"_proxy",R=process.env[y]||process.env[y.toUpperCase()];if(R){var c=Js.parse(R),S=process.env.no_proxy||process.env.NO_PROXY,Vt=!0;if(S){var g=S.split(",").map(function(F){return F.trim()});Vt=!g.some(function(F){return F?F==="*"||F[0]==="."&&P.hostname.substr(P.hostname.length-F.length)===F?!0:P.hostname===F:!1})}if(Vt&&(z={host:c.hostname,port:c.port,protocol:c.protocol},c.auth)){var E=c.auth.split(":");z.auth={username:E[0],password:E[1]}}}}z&&(B.headers.host=P.hostname+(P.port?":"+P.port:""),Zs(B,z,k+"//"+P.hostname+(P.port?":"+P.port:"")+B.path));var m,fe=w&&(z?zs.test(z.protocol):!0);e.transport?m=e.transport:e.maxRedirects===0?m=fe?la:ca:(e.maxRedirects&&(B.maxRedirects=e.maxRedirects),m=fe?ha:da),e.maxBodyLength>-1&&(B.maxBodyLength=e.maxBodyLength),e.insecureHTTPParser&&(B.insecureHTTPParser=e.insecureHTTPParser);var q=m.request(B,function(F){if(!q.aborted){var Se=F,Pt=F.req||q;if(F.statusCode!==204&&Pt.method!=="HEAD"&&e.decompress!==!1)switch(F.headers["content-encoding"]){case"gzip":case"compress":case"deflate":Se=Se.pipe(ua.createUnzip()),delete F.headers["content-encoding"];break}var ht={status:F.statusCode,statusText:F.statusMessage,headers:F.headers,config:e,request:Pt};if(e.responseType==="stream")ht.data=Se,Ws(a,h,ht);else{var Wt=[],Vi=0;Se.on("data",function(Le){Wt.push(Le),Vi+=Le.length,e.maxContentLength>-1&&Vi>e.maxContentLength&&(d=!0,Se.destroy(),h(Ct("maxContentLength size of "+e.maxContentLength+" exceeded",e,null,Pt)))}),Se.on("aborted",function(){d||(Se.destroy(),h(Ct("error request aborted",e,"ERR_REQUEST_ABORTED",Pt)))}),Se.on("error",function(Le){q.aborted||h(lr(Le,e,null,Pt))}),Se.on("end",function(){try{var Le=Wt.length===1?Wt[0]:Buffer.concat(Wt);e.responseType!=="arraybuffer"&&(Le=Le.toString(e.responseEncoding),(!e.responseEncoding||e.responseEncoding==="utf8")&&(Le=qt.stripBOM(Le))),ht.data=Le}catch(Wi){h(lr(Wi,e,Wi.code,ht.request,ht))}Ws(a,h,ht)})}}});if(q.on("error",function(F){q.aborted&&F.code!=="ERR_FR_TOO_MANY_REDIRECTS"||h(lr(F,e,null,q))}),q.on("socket",function(F){F.setKeepAlive(!0,1e3*60)}),e.timeout){var Re=parseInt(e.timeout,10);if(isNaN(Re)){h(Ct("error trying to parse `config.timeout` to int",e,"ERR_PARSE_TIMEOUT",q));return}q.setTimeout(Re,function(){q.abort();var F="";e.timeoutErrorMessage?F=e.timeoutErrorMessage:F="timeout of "+e.timeout+"ms exceeded";var Se=e.transitional||fa;h(Ct(F,e,Se.clarifyTimeoutError?"ETIMEDOUT":"ECONNABORTED",q))})}(e.cancelToken||e.signal)&&(s=function(D){q.aborted||(q.abort(),h(!D||D&&D.type?new pa("canceled"):D))},e.cancelToken&&e.cancelToken.subscribe(s),e.signal&&(e.signal.aborted?s():e.signal.addEventListener("abort",s))),qt.isStream(l)?l.on("error",function(F){h(lr(F,e,null,q))}).pipe(q):q.end(l)})}});var hr=L((_c,rn)=>{"use strict";var le=de(),en=cs(),ma=Qt(),Ca=er(),va={"Content-Type":"application/x-www-form-urlencoded"};function tn(n,e){!le.isUndefined(n)&&le.isUndefined(n["Content-Type"])&&(n["Content-Type"]=e)}function Ea(){var n;return typeof XMLHttpRequest<"u"?n=xs():typeof process<"u"&&Object.prototype.toString.call(process)==="[object process]"&&(n=Qs()),n}function wa(n,e,t){if(le.isString(n))try{return(e||JSON.parse)(n),le.trim(n)}catch(r){if(r.name!=="SyntaxError")throw r}return(t||JSON.stringify)(n)}var dr={transitional:Ca,adapter:Ea(),transformRequest:[function(e,t){return en(t,"Accept"),en(t,"Content-Type"),le.isFormData(e)||le.isArrayBuffer(e)||le.isBuffer(e)||le.isStream(e)||le.isFile(e)||le.isBlob(e)?e:le.isArrayBufferView(e)?e.buffer:le.isURLSearchParams(e)?(tn(t,"application/x-www-form-urlencoded;charset=utf-8"),e.toString()):le.isObject(e)||t&&t["Content-Type"]==="application/json"?(tn(t,"application/json"),wa(e)):e}],transformResponse:[function(e){var t=this.transitional||dr.transitional,r=t&&t.silentJSONParsing,i=t&&t.forcedJSONParsing,s=!r&&this.responseType==="json";if(s||i&&le.isString(e)&&e.length)try{return JSON.parse(e)}catch(o){if(s)throw o.name==="SyntaxError"?ma(o,this,"E_JSON_PARSE"):o}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};le.forEach(["delete","get","head"],function(e){dr.headers[e]={}});le.forEach(["post","put","patch"],function(e){dr.headers[e]=le.merge(va)});rn.exports=dr});var nn=L(($c,sn)=>{"use strict";var Ta=de(),Ra=hr();sn.exports=function(e,t,r){var i=this||Ra;return Ta.forEach(r,function(o){e=o.call(i,e,t)}),e}});var bi=L((Dc,on)=>{"use strict";on.exports=function(e){return!!(e&&e.__CANCEL__)}});var ln=L((Pc,cn)=>{"use strict";var an=de(),xi=nn(),Sa=bi(),ya=hr(),Ia=gt();function Ai(n){if(n.cancelToken&&n.cancelToken.throwIfRequested(),n.signal&&n.signal.aborted)throw new Ia("canceled")}cn.exports=function(e){Ai(e),e.headers=e.headers||{},e.data=xi.call(e,e.data,e.headers,e.transformRequest),e.headers=an.merge(e.headers.common||{},e.headers[e.method]||{},e.headers),an.forEach(["delete","get","head","post","put","patch","common"],function(i){delete e.headers[i]});var t=e.adapter||ya.adapter;return t(e).then(function(i){return Ai(e),i.data=xi.call(e,i.data,i.headers,e.transformResponse),i},function(i){return Sa(i)||(Ai(e),i&&i.response&&(i.response.data=xi.call(e,i.response.data,i.response.headers,e.transformResponse))),Promise.reject(i)})}});var _i=L((Nc,dn)=>{"use strict";var Ie=de();dn.exports=function(e,t){t=t||{};var r={};function i(l,u){return Ie.isPlainObject(l)&&Ie.isPlainObject(u)?Ie.merge(l,u):Ie.isPlainObject(u)?Ie.merge({},u):Ie.isArray(u)?u.slice():u}function s(l){if(Ie.isUndefined(t[l])){if(!Ie.isUndefined(e[l]))return i(void 0,e[l])}else return i(e[l],t[l])}function o(l){if(!Ie.isUndefined(t[l]))return i(void 0,t[l])}function a(l){if(Ie.isUndefined(t[l])){if(!Ie.isUndefined(e[l]))return i(void 0,e[l])}else return i(void 0,t[l])}function d(l){if(l in t)return i(e[l],t[l]);if(l in e)return i(void 0,e[l])}var h={url:o,method:o,data:o,baseURL:a,transformRequest:a,transformResponse:a,paramsSerializer:a,timeout:a,timeoutMessage:a,withCredentials:a,adapter:a,responseType:a,xsrfCookieName:a,xsrfHeaderName:a,onUploadProgress:a,onDownloadProgress:a,decompress:a,maxContentLength:a,maxBodyLength:a,transport:a,httpAgent:a,httpsAgent:a,cancelToken:a,socketPath:a,responseEncoding:a,validateStatus:d};return Ie.forEach(Object.keys(e).concat(Object.keys(t)),function(u){var T=h[u]||s,A=T(u);Ie.isUndefined(A)&&T!==d||(r[u]=A)}),r}});var gn=L((Oc,un)=>{"use strict";var ba=cr().version,$i={};["object","boolean","number","function","string","symbol"].forEach(function(n,e){$i[n]=function(r){return typeof r===n||"a"+(e<1?"n ":" ")+n}});var hn={};$i.transitional=function(e,t,r){function i(s,o){return"[Axios v"+ba+"] Transitional option '"+s+"'"+o+(r?". "+r:"")}return function(s,o,a){if(e===!1)throw new Error(i(o," has been removed"+(t?" in "+t:"")));return t&&!hn[o]&&(hn[o]=!0,console.warn(i(o," has been deprecated since v"+t+" and will be removed in the near future"))),e?e(s,o,a):!0}};function xa(n,e,t){if(typeof n!="object")throw new TypeError("options must be an object");for(var r=Object.keys(n),i=r.length;i-- >0;){var s=r[i],o=e[s];if(o){var a=n[s],d=a===void 0||o(a,s,n);if(d!==!0)throw new TypeError("option "+s+" must be "+d);continue}if(t!==!0)throw Error("Unknown option "+s)}}un.exports={assertOptions:xa,validators:$i}});var En=L((kc,vn)=>{"use strict";var mn=de(),Aa=Zt(),fn=os(),pn=ln(),ur=_i(),Cn=gn(),vt=Cn.validators;function Lt(n){this.defaults=n,this.interceptors={request:new fn,response:new fn}}Lt.prototype.request=function(e,t){typeof e=="string"?(t=t||{},t.url=e):t=e||{},t=ur(this.defaults,t),t.method?t.method=t.method.toLowerCase():this.defaults.method?t.method=this.defaults.method.toLowerCase():t.method="get";var r=t.transitional;r!==void 0&&Cn.assertOptions(r,{silentJSONParsing:vt.transitional(vt.boolean),forcedJSONParsing:vt.transitional(vt.boolean),clarifyTimeoutError:vt.transitional(vt.boolean)},!1);var i=[],s=!0;this.interceptors.request.forEach(function(A){typeof A.runWhen=="function"&&A.runWhen(t)===!1||(s=s&&A.synchronous,i.unshift(A.fulfilled,A.rejected))});var o=[];this.interceptors.response.forEach(function(A){o.push(A.fulfilled,A.rejected)});var a;if(!s){var d=[pn,void 0];for(Array.prototype.unshift.apply(d,i),d=d.concat(o),a=Promise.resolve(t);d.length;)a=a.then(d.shift(),d.shift());return a}for(var h=t;i.length;){var l=i.shift(),u=i.shift();try{h=l(h)}catch(T){u(T);break}}try{a=pn(h)}catch(T){return Promise.reject(T)}for(;o.length;)a=a.then(o.shift(),o.shift());return a};Lt.prototype.getUri=function(e){return e=ur(this.defaults,e),Aa(e.url,e.params,e.paramsSerializer).replace(/^\?/,"")};mn.forEach(["delete","get","head","options"],function(e){Lt.prototype[e]=function(t,r){return this.request(ur(r||{},{method:e,url:t,data:(r||{}).data}))}});mn.forEach(["post","put","patch"],function(e){Lt.prototype[e]=function(t,r,i){return this.request(ur(i||{},{method:e,url:t,data:r}))}});vn.exports=Lt});var Tn=L((Hc,wn)=>{"use strict";var _a=gt();function Et(n){if(typeof n!="function")throw new TypeError("executor must be a function.");var e;this.promise=new Promise(function(i){e=i});var t=this;this.promise.then(function(r){if(t._listeners){var i,s=t._listeners.length;for(i=0;i<s;i++)t._listeners[i](r);t._listeners=null}}),this.promise.then=function(r){var i,s=new Promise(function(o){t.subscribe(o),i=o}).then(r);return s.cancel=function(){t.unsubscribe(i)},s},n(function(i){t.reason||(t.reason=new _a(i),e(t.reason))})}Et.prototype.throwIfRequested=function(){if(this.reason)throw this.reason};Et.prototype.subscribe=function(e){if(this.reason){e(this.reason);return}this._listeners?this._listeners.push(e):this._listeners=[e]};Et.prototype.unsubscribe=function(e){if(this._listeners){var t=this._listeners.indexOf(e);t!==-1&&this._listeners.splice(t,1)}};Et.source=function(){var e,t=new Et(function(i){e=i});return{token:t,cancel:e}};wn.exports=Et});var Sn=L((qc,Rn)=>{"use strict";Rn.exports=function(e){return function(r){return e.apply(null,r)}}});var In=L((Lc,yn)=>{"use strict";var $a=de();yn.exports=function(e){return $a.isObject(e)&&e.isAxiosError===!0}});var An=L((Mc,Di)=>{"use strict";var bn=de(),Da=Qr(),gr=En(),Pa=_i(),Na=hr();function xn(n){var e=new gr(n),t=Da(gr.prototype.request,e);return bn.extend(t,gr.prototype,e),bn.extend(t,e),t.create=function(i){return xn(Pa(n,i))},t}var Me=xn(Na);Me.Axios=gr;Me.Cancel=gt();Me.CancelToken=Tn();Me.isCancel=bi();Me.VERSION=cr().version;Me.all=function(e){return Promise.all(e)};Me.spread=Sn();Me.isAxiosError=In();Di.exports=Me;Di.exports.default=Me});var $n=L((Fc,_n)=>{_n.exports=An()});var Hn=L((Oi,kn)=>{Oi=kn.exports=Ha;Oi.getSerialize=On;function Ha(n,e,t,r){return JSON.stringify(n,On(e,r),t)}function On(n,e){var t=[],r=[];return e==null&&(e=function(i,s){return t[0]===s?"[Circular ~]":"[Circular ~."+r.slice(0,t.indexOf(s)).join(".")+"]"}),function(i,s){if(t.length>0){var o=t.indexOf(this);~o?t.splice(o+1):t.push(this),~o?r.splice(o,1/0,i):r.push(i),~t.indexOf(s)&&(s=e.call(this,i,s))}else t.push(s);return n==null?s:n.call(this,i,s)}}});var tc={};Yi(tc,{CallKit:()=>Gi});var Gt=Xr(Zi());var Dn=Xr($n()),Pi=Dn.default.create({headers:{"Content-Type":"application/x-www-form-urlencoded"},timeout:6e4});Pi.interceptors.request.use(n=>n);Pi.interceptors.response.use(n=>n.data,n=>Promise.reject(n));var Oa=n=>Pi.request(n),Ni=Oa;var fr=class{callKit;constructor(e){this.callKit=e}isLogining=!1;isLoginOuting=!1;async login(e){if(this.isLogining){this.callKit.logger.info("login is already in progress cancel",{caller:"Api.login",content:{userName:e.userName,timestamp:e.timestamp}});return}this.isLogining=!0;try{return await this.post({url:"/auth/agentUser/login",method:"post",data:e})}finally{this.isLogining=!1}}async loginOut(e){if(this.isLoginOuting){this.callKit.logger.info("loginOut is already in progress cancel",{caller:"Api.loginOut",content:{sessionId:e.sessionId,timestamp:e.timestamp}});return}this.isLoginOuting=!0;try{return await this.post({url:"/auth/agentUser/loginOut",method:"post",data:e})}finally{this.isLoginOuting=!1}}async trackLogs(e){try{let{userInfo:t,host:r}=this.callKit.config.getConfig(),{sessionId:i}=t,s=new FormData;s.append("content",JSON.stringify([e]));let o={url:`${r}/agent/user/sdkLog`,method:"post",data:s,headers:{...i?{sessionId:i}:{}}};await Ni(o).catch(()=>{})}catch{}}async updateUserStatus(e){return this.post({url:"/agent/user/changeStatus",method:"post",data:e})}async post(e,t={skipLog:!1}){let{userInfo:r,host:i}=this.callKit.config.getConfig(),{sessionId:s}=r;if(e.url=`${i}${e.url}`,e.headers={"Content-Type":"application/x-www-form-urlencoded",...e.headers},e.headers["Content-Type"]==="application/x-www-form-urlencoded"&&t.useFormData){let T=new FormData,A=e.data||{};for(let _ in A)Object.prototype.hasOwnProperty.call(A,_)&&T.append(_,A[_]);e.data=T}else e.data=new URLSearchParams(e.data).toString();s&&(e.headers.sessionId=s);let o=Date.now();t.skipLog||this.callKit.logger.info("API Request Start",{type:"API",caller:"API.Request",content:{url:e.url,headers:e.headers,data:e.data,extra:t,startTime:o}});let a=await Ni(e).catch(()=>{this.callKit.config.reset("api request error")}),d=Date.now();if(t.skipLog||this.callKit.logger.info("API Request Finish",{type:"API",caller:"API.Request",content:{url:e.url,duration:`${d-o}ms`,response:a}}),!a)throw this.callKit.reset(),new Error("Network error");let{code:h,data:l,message:u}=a;if(h==="000000")return l;throw h==="100013"&&this.callKit.config.reset("api request error"),new Error(u??"Request failed")}};var ne={init:0,connecting:2,ringing:4,calling:5},H={KIT_LOG:"log",KIT_USER_STATUS_CHANGE:"userStatusChange",KIT_LOGIN_CHANGE:"loginChange",KIT_REGISTER_CHANGE:"registerChange",KIT_CALL_STATUS_CHANGE:"callStatusChange",KIT_SET_HOLD:"holdChange",KIT_SET_MUTE:"muteChange",KIT_CALL_ID_CHANGE:"callIdChange",KIT_ERROR:"error",KIT_INVITE:"invite",KIT_OUTGOING_INVITE:"outgoingInvite",CALL_CONNECTING:"connecting",CALL_RINGING:"ringing",AGENT_PICK_UP:"agentPickUp",CALL_PICK_UP:"pickUp",CALL_NO_ANSWER:"noAnswer",CALL_HANG_UP:"hangUp",CALL_END:"callEnd",CALL_CDR:"callCdr",SERVER_SOCKET_EVENT:"socketEvent",USER_STATUS_CHANGE:"userStatusChange",INCALL_CONNECT_EVENT:"IncallConnectEvent",SIP_CONNECT_EVENT:"sipConnectEvent",SIP_REGISTERER_EVENT:"sipRegistererEvent",SIP_SESSION_EVENT:"sipSessionEvent"},V={UNKNOWN_ERROR:-1,API_USER_LOGIN_ERROR:1000001,API_USER_STATUS_UPDATE_ERROR:1000002,API_USER_LOGOUT_ERROR:1000003,CONNECT_CALL_STATUS_ERROR:2000001,USER_NOT_LOGIN:2000002,WEBRTC_USER_MEDIA_ERROR:2000003,WEBRTC_HOLE_STATUS_ERROR:2000004,WEBRTC_AUDIO_PLAYER_ERROR:2000005,WEBRTC_AUDIO_PLAY_ERROR:2000006,WEBRTC_USER_AGENT_ERROR:2000007,WEBRTC_CALL_INVITE_ERROR:2000008,WEBRTC_REGISTER_ERROR:2000009,WEBRTC_MUTE_STATUS_ERROR:2000010,WEBRTC_CANCEL_REGISTER_ERROR:2000011,WEBRTC_MUTE_ERROR:2000012,SOCKET_CONNECT_ERROR:3000001,SOCKET_PING_TIMEOUT:3000002,SOKET_SERVER_ERROR:3000003,SOCKET_CALL_ERROR:3000004,SOCKET_RECONNECT_FAILED:3000005},Pn={info:9,success:4,warn:3,error:2,silent:1},be={PING:"PING",START:"START",AGENT_HANGUP:"AGENT_HANG_UP",CALL_CANCEL:"AGENT_CANCEL",HOLD:"AGENT_HOLD",UNHOLD:"AGENT_UN_HOLD",MUTE:"AGENT_MUTE",UNMUTE:"AGENT_UN_MUTE",CALL:"CALL",END:"STOP",AGENT_TRANSFER:"AGENT_TRANSFER",HANG_UP_REASON:"HANG_UP_REASON",ACK:"ACK"},pe={PONG:"PONG",START_CONFIRM:"START_CONFIRM",CALL_SUCCESS:"CALL_SUCCESS",CALL_FAILED:"CALL_FAILED",CUSTOMER_RINGING:"CUSTOMER_RINGING",AGENT_PICK_UP:"AGENT_PICK_UP",CUSTOMER_PICK_UP:"CUSTOMER_PICK_UP",CUSTOMER_NO_ANSWER:"CUSTOMER_NO_ANSWER",CUSTOMER_HANG_UP:"CUSTOMER_HANG_UP",AGENT_NO_ANSWER:"AGENT_NO_ANSWER",AGENT_HANG_UP:"AGENT_HANG_UP",CALL_CDR:"CALL_CDR",STOP_CONFIRM:"STOP_CONFIRM",CLOSE:"CLOSE",ERROR:"ERROR",SESSION_ERROR:"SESSION_ERROR"},je={NONE:"NONE",INTERNAL:"INTERNAL"},pr={audio:{autoGainControl:!0,noiseSuppression:!0,echoCancellation:!0},video:!1},xe={phoneNum:1,workOrderId:2},Mt={enabled:!1,interval:5e3,maxSize:8192},Ft={enabled:!0,maxAttempts:3,delay:1e3,pingInterval:3e4,pingTimeout:5e3},Ut={enabled:!0,maxAttempts:3,delay:1e3};var mr=class{callKit;constructor(e){this.callKit=e}async callStart(e){if(this.callKit.config.check()){if(this.callKit.logger.info("callStart",{caller:"Call.callStart",content:{startConfirm:this.callKit.socket.startConfirm}}),!this.callKit.socket.startConfirm){this.callKit.logger.warn("server not confirm start",{caller:"Call.callStart",content:{startConfirm:this.callKit.socket.startConfirm}});return}this.callKit.connect.call(async t=>{let r={...e?.extra||{},agentId:t.agentId,sourceType:t.sourceType};t.sourceType===xe.phoneNum?r.phoneNum=t.extno:t.sourceType===xe.workOrderId&&(r.workOrderId=t.workOrderId),this.callKit.socket.send(be.CALL,r)})}}async callRefer(e,t){this.callKit.config.check()&&(this.callKit.logger.info("callRefer",{caller:"Call.callRefer",content:{referTo:e,options:t}}),this.callKit.connect.refer(e,t))}async callEnd(e=!1,t=!1){this.callKit.connect.connectStatus!==ne.init&&this.callKit.config.check()&&(this.callKit.logger.info("callEnd",{caller:"Call.callEnd",content:{isUnprompted:e,isError:t,connectStatus:this.callKit.connect.connectStatus}}),this.callKit.connect.hangup(e,t))}async callHold(){if(this.callKit.config.check()){if(!this.callKit.connect.isCalling()){this.callKit.logger.warn("Current state cannot be held",{caller:"Call.callHold",content:{isHold:this.callKit.connect.isHolding(),isCalling:this.callKit.connect.isCalling()}});return}this.callKit.connect.setHold(!0)}}async callUnhold(){if(this.callKit.config.check()){if(!this.callKit.connect.isCalling()){this.callKit.logger.warn("Current state cannot unhold",{caller:"Call.callUnhold",content:{isHold:this.callKit.connect.isHolding(),isCalling:this.callKit.connect.isCalling()}});return}this.callKit.connect.setHold(!1)}}async callMute(){if(this.callKit.config.check()){if(!this.callKit.connect.isCalling()){this.callKit.logger.warn("Current state cannot be muted",{caller:"Call.callMute",content:{isMuted:this.callKit.connect.isMuted(),isCalling:this.callKit.connect.isCalling()}});return}this.callKit.connect.setMute(!0)}}async callUnmute(){if(this.callKit.config.check()){if(!this.callKit.connect.isCalling()){this.callKit.logger.warn("Current state cannot be unmuted",{caller:"Call.callUnmute",content:{isMuted:this.callKit.connect.isMuted(),isCalling:this.callKit.connect.isCalling()}});return}this.callKit.connect.setMute(!1)}}};var Nn={name:"@koi-design/callkit",version:"2.0.5-beta.15",description:"callkit",author:"koi",license:"ISC",scripts:{build:"tsup",start:"vite",dev:"tsup --watch",lint:"eslint -c ../../.eslintrc.js --ext .jsx,.js,.tsx,.ts ./package --fix",release:"tsup && node scripts/pkg.js"},exports:{".":{types:"./dist/index.d.ts",require:"./dist/index.js",import:"./dist/index.mjs"}},main:"./dist/index.js",module:"./dist/index.mjs",types:"./dist/index.d.ts",files:["dist"],dependencies:{axios:"~0.26.1","blueimp-md5":"^2.12.0","eslint-plugin-jsonc":"^2.21.0","json-stringify-safe":"^5.0.1","sip.js":"^0.21.2"},devDependencies:{"@commitlint/cli":"^9.1.2","@commitlint/config-conventional":"^9.1.2","@koi-design/eslint-config-ts":"^0.0.14","@types/blueimp-md5":"^2.18.2",archiver:"^5.3.1",consola:"^3.4.2",eslint:"~8.29.0","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.5.0",husky:"^8.0.3","lint-staged":"^10.5.4",prettier:"^2.6.2",tsup:"6.6.3",typescript:"^4.6.3",vite:"^4"}};var Cr=class{callKit;constructor(e){this.callKit=e}config={version:`V${Nn.version}`,host:"",log:"info",trackLogs:Mt,audioRef:void 0,constrains:pr,socket:"",reconnect:{sip:Ut,incall:Ft},userInfo:{wsUrl:"",logGather:!1,sessionId:"",username:"",password:"",encryptionPassword:je.INTERNAL,sourceType:xe.phoneNum,extno:"",workOrderId:"",userPart:"",agentId:"",fsUserId:"",fsPassword:"",fsIp:"",fsPort:"",iceInfo:[],iceGatheringTimeout:0,encryptionMethod:je.INTERNAL}};getConfig=()=>this.config;setConfig=async(e,t)=>{this.config[e]=t};setUserInfo=async(e,t)=>{this.config.userInfo[e]=t,this.callKit.logger.info("setUserInfo",{caller:"Config.setUserInfo",content:{key:e,value:t}})};reset=async e=>{this.callKit.logger.info(`Reset User Info ${e}`,{caller:"Config.reset",type:"OTHER",content:{}}),this.isLogin()&&(this.config.userInfo={wsUrl:"",sessionId:"",username:"",password:"",encryptionPassword:"",userPart:"",sourceType:xe.phoneNum,extno:"",workOrderId:"",agentId:"",fsUserId:"",fsPassword:"",fsIp:"",fsPort:"",iceInfo:[],iceGatheringTimeout:this.config.userInfo.iceGatheringTimeout,encryptionMethod:je.INTERNAL,logGather:!1},this.callKit.trigger(H.KIT_LOGIN_CHANGE,!1))};validate=()=>{let{userPart:e,fsIp:t,fsPassword:r,fsPort:i}=this.config.userInfo;return!(!e||!t||!i||!r)};isLogin=()=>this.validate();check(){return this.isLogin()?!0:(this.callKit.logger.warn("User not logged in",{caller:"Config.check",content:{errCode:V.USER_NOT_LOGIN}}),!1)}getTrackLogsConfig(){return{...Mt,...this.config?.trackLogs}}getReconnectConfig(e){return{...this.config?.reconnect?.[e]??(e==="sip"?Ut:Ft)}}enableTrackLogs(e){this.config.trackLogs.enabled=e}};var Ln=Xr(Hn());function Je(n){return Pn[n]}function qa(n){let{timestamp:e,level:t,type:r="OTHER",message:i,caller:s,content:o}=n,a=String(t).toUpperCase();return`${e} [${a}] [${r}] [${s??"unknown"}] [${i}] ${(0,Ln.default)(o)}`.trim()}function qn(n){return new Blob([n]).size}var vr=class{prefix="CallKit";level="info";pendingTrackLogs=[];trackLogsTimer=null;callKit;constructor(e,t){this.callKit=e,this.level=t||"info",this.startTrackLogsTimer()}startTrackLogsTimer(){let{interval:e}=this.callKit.config.getTrackLogsConfig();this.trackLogsTimer||(this.trackLogsTimer=setInterval(()=>{this.flushTrackLogs()},e))}flushTrackLogs(){if(this.pendingTrackLogs.length===0)return;let{enabled:e,maxSize:t}=this.callKit.config.getTrackLogsConfig();if(e)try{let r=[],i=[],s=0;for(let o of this.pendingTrackLogs){let a=qn(o),d=i.length>0?`
7
7
  `:"",h=qn(d);s+a+h>t&&i.length>0?(r.push(i.join(`
8
8
  `)),i=[o],s=a):(i.push(o),s+=a+h)}i.length>0&&r.push(i.join(`
9
- `));for(let o of r)this.callKit.api.trackLogs(o);this.pendingTrackLogs=[]}catch(r){console.error(r)}}destroy(){this.trackLogsTimer&&(clearInterval(this.trackLogsTimer),this.trackLogsTimer=null),this.flushTrackLogs()}setLevel(e){this.level=e}info(e,t){let r=this.catchLog(e,t,"info");Je(this.level)>=Je("info")&&console.log(`%c${r}`,"color: gray;")}success(e,t){let r=this.catchLog(e,t,"success");Je(this.level)>=Je("success")&&console.log(`%c${r}`,"color: green;")}warn(e,t){let r=this.catchLog(e,t,"warn");Je(this.level)>=Je("warn")&&console.log(`%c${r}`,"color: orange;")}error(e,t,r=!1){let i=e instanceof Error?e.message:e,s=this.catchLog(i,t,"error");Je(this.level)>=Je("error")&&console.log(`%c${s}`,"color: red;");let{errCode:o,...a}=t?.content??{},d=o??V.UNKNOWN_ERROR;r||this.callKit.trigger(H.KIT_ERROR,{code:d,msg:i,data:a});let h=new Error(i);throw h.name="CallKitError",h.code=d,h.data=a,h}catchLog(e,t,r){let i=new Date,{enabled:s}=this.callKit.config.getTrackLogsConfig(),{userInfo:o}=this.callKit.config.getConfig(),a={agentId:o?.agentId,sessionId:o?.sessionId,...t?.content??{}},d={timestamp:i.toLocaleString().replace("T"," ").replace(".000Z",""),level:r,message:e,caller:t?.caller,type:t?.type,content:a},h=qa(d);return s&&this.pendingTrackLogs.push(h),this.callKit.trigger(H.KIT_LOG,h,!0),h}};var Mn="0.21.1";var he=class extends Error{constructor(e){super(e),Object.setPrototypeOf(this,new.target.prototype)}};var ct=class extends he{constructor(e){super(e||"Unsupported content type.")}};var Fe=class extends he{constructor(e){super(e||"Request pending.")}};var Er=class extends he{constructor(e){super(e||"Unspecified session description handler error.")}};var wt=class extends he{constructor(){super("The session has terminated.")}};var ze=class extends he{constructor(e){super(e||"An error occurred during state transition.")}};var wr=class{constructor(e){this.incomingAckRequest=e}get request(){return this.incomingAckRequest.message}};var Tr=class{constructor(e){this.incomingByeRequest=e}get request(){return this.incomingByeRequest.message}accept(e){return this.incomingByeRequest.accept(e),Promise.resolve()}reject(e){return this.incomingByeRequest.reject(e),Promise.resolve()}};var Rr=class{constructor(e){this.incomingCancelRequest=e}get request(){return this.incomingCancelRequest}};var He=class{constructor(){this.listeners=new Array}addListener(e,t){let r=i=>{this.removeListener(r),e(i)};t?.once===!0?this.listeners.push(r):this.listeners.push(e)}emit(e){this.listeners.slice().forEach(t=>t(e))}removeAllListeners(){this.listeners=[]}removeListener(e){this.listeners=this.listeners.filter(t=>t!==e)}on(e){return this.addListener(e)}off(e){return this.removeListener(e)}once(e){return this.addListener(e,{once:!0})}};var Sr=class{constructor(e){this.incomingInfoRequest=e}get request(){return this.incomingInfoRequest.message}accept(e){return this.incomingInfoRequest.accept(e),Promise.resolve()}reject(e){return this.incomingInfoRequest.reject(e),Promise.resolve()}};var Tt=class{constructor(e){this.parameters={};for(let t in e)e.hasOwnProperty(t)&&this.setParam(t,e[t])}setParam(e,t){e&&(this.parameters[e.toLowerCase()]=typeof t>"u"||t===null?null:t.toString())}getParam(e){if(e)return this.parameters[e.toLowerCase()]}hasParam(e){return!!(e&&this.parameters[e.toLowerCase()]!==void 0)}deleteParam(e){if(e=e.toLowerCase(),this.hasParam(e)){let t=this.parameters[e];return delete this.parameters[e],t}}clearParams(){this.parameters={}}};var ee=class extends Tt{constructor(e,t,r){super(r),this.uri=e,this._displayName=t}get friendlyName(){return this.displayName||this.uri.aor}get displayName(){return this._displayName}set displayName(e){this._displayName=e}clone(){return new ee(this.uri.clone(),this._displayName,JSON.parse(JSON.stringify(this.parameters)))}toString(){let e=this.displayName||this.displayName==="0"?'"'+this.displayName+'" ':"";e+="<"+this.uri.toString()+">";for(let t in this.parameters)this.parameters.hasOwnProperty(t)&&(e+=";"+t,this.parameters[t]!==null&&(e+="="+this.parameters[t]));return e}};var ue=class extends Tt{constructor(e="sip",t,r,i,s,o){if(super(s||{}),this.headers={},!r)throw new TypeError('missing or invalid "host" parameter');for(let a in o)o.hasOwnProperty(a)&&this.setHeader(a,o[a]);this.raw={scheme:e,user:t,host:r,port:i},this.normal={scheme:e.toLowerCase(),user:t,host:r.toLowerCase(),port:i}}get scheme(){return this.normal.scheme}set scheme(e){this.raw.scheme=e,this.normal.scheme=e.toLowerCase()}get user(){return this.normal.user}set user(e){this.normal.user=this.raw.user=e}get host(){return this.normal.host}set host(e){this.raw.host=e,this.normal.host=e.toLowerCase()}get aor(){return this.normal.user+"@"+this.normal.host}get port(){return this.normal.port}set port(e){this.normal.port=this.raw.port=e}setHeader(e,t){this.headers[this.headerize(e)]=t instanceof Array?t:[t]}getHeader(e){if(e)return this.headers[this.headerize(e)]}hasHeader(e){return!!e&&!!this.headers.hasOwnProperty(this.headerize(e))}deleteHeader(e){if(e=this.headerize(e),this.headers.hasOwnProperty(e)){let t=this.headers[e];return delete this.headers[e],t}}clearHeaders(){this.headers={}}clone(){return new ue(this._raw.scheme,this._raw.user||"",this._raw.host,this._raw.port,JSON.parse(JSON.stringify(this.parameters)),JSON.parse(JSON.stringify(this.headers)))}toRaw(){return this._toString(this._raw)}toString(){return this._toString(this._normal)}get _normal(){return this.normal}get _raw(){return this.raw}_toString(e){let t=e.scheme+":";e.scheme.toLowerCase().match("^sips?$")||(t+="//"),e.user&&(t+=this.escapeUser(e.user)+"@"),t+=e.host,(e.port||e.port===0)&&(t+=":"+e.port);for(let i in this.parameters)this.parameters.hasOwnProperty(i)&&(t+=";"+i,this.parameters[i]!==null&&(t+="="+this.parameters[i]));let r=[];for(let i in this.headers)if(this.headers.hasOwnProperty(i))for(let s in this.headers[i])this.headers[i].hasOwnProperty(s)&&r.push(i+"="+this.headers[i][s]);return r.length>0&&(t+="?"+r.join("&")),t}escapeUser(e){let t;try{t=decodeURIComponent(e)}catch(r){throw r}return encodeURIComponent(t).replace(/%3A/ig,":").replace(/%2B/ig,"+").replace(/%3F/ig,"?").replace(/%2F/ig,"/")}headerize(e){let t={"Call-Id":"Call-ID",Cseq:"CSeq","Min-Se":"Min-SE",Rack:"RAck",Rseq:"RSeq","Www-Authenticate":"WWW-Authenticate"},r=e.toLowerCase().replace(/_/g,"-").split("-"),i=r.length,s="";for(let o=0;o<i;o++)o!==0&&(s+="-"),s+=r[o].charAt(0).toUpperCase()+r[o].substring(1);return t[s]&&(s=t[s]),s}};function Oi(n,e){if(n.scheme!==e.scheme||n.user!==e.user||n.host!==e.host||n.port!==e.port)return!1;function t(s,o){let a=Object.keys(s.parameters),d=Object.keys(o.parameters);return!(!a.filter(l=>d.includes(l)).every(l=>s.parameters[l]===o.parameters[l])||!["user","ttl","method","transport"].every(l=>s.hasParam(l)&&o.hasParam(l)||!s.hasParam(l)&&!o.hasParam(l))||!["maddr"].every(l=>s.hasParam(l)&&o.hasParam(l)||!s.hasParam(l)&&!o.hasParam(l)))}if(!t(n,e))return!1;let r=Object.keys(n.headers),i=Object.keys(e.headers);if(r.length!==0||i.length!==0){if(r.length!==i.length)return!1;let s=r.filter(o=>i.includes(o));if(s.length!==i.length||!s.every(o=>n.headers[o].length&&e.headers[o].length&&n.headers[o][0]===e.headers[o][0]))return!1}return!0}function ki(n,e,t){return t=t||" ",n.length>e?n:(e-=n.length,t+=t.repeat(e),n+t.slice(0,e))}var Ke=class extends Error{constructor(e,t,r,i){super(),this.message=e,this.expected=t,this.found=r,this.location=i,this.name="SyntaxError",typeof Object.setPrototypeOf=="function"?Object.setPrototypeOf(this,Ke.prototype):this.__proto__=Ke.prototype,typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,Ke)}static buildMessage(e,t){function r(h){return h.charCodeAt(0).toString(16).toUpperCase()}function i(h){return h.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,l=>"\\x0"+r(l)).replace(/[\x10-\x1F\x7F-\x9F]/g,l=>"\\x"+r(l))}function s(h){return h.replace(/\\/g,"\\\\").replace(/\]/g,"\\]").replace(/\^/g,"\\^").replace(/-/g,"\\-").replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,l=>"\\x0"+r(l)).replace(/[\x10-\x1F\x7F-\x9F]/g,l=>"\\x"+r(l))}function o(h){switch(h.type){case"literal":return'"'+i(h.text)+'"';case"class":let l=h.parts.map(u=>Array.isArray(u)?s(u[0])+"-"+s(u[1]):s(u));return"["+(h.inverted?"^":"")+l+"]";case"any":return"any character";case"end":return"end of input";case"other":return h.description}}function a(h){let l=h.map(o),u,T;if(l.sort(),l.length>0){for(u=1,T=1;u<l.length;u++)l[u-1]!==l[u]&&(l[T]=l[u],T++);l.length=T}switch(l.length){case 1:return l[0];case 2:return l[0]+" or "+l[1];default:return l.slice(0,-1).join(", ")+", or "+l[l.length-1]}}function d(h){return h?'"'+i(h)+'"':"end of input"}return"Expected "+a(e)+" but "+d(t)+" found."}format(e){let t="Error: "+this.message;if(this.location){let r=null,i;for(i=0;i<e.length;i++)if(e[i].source===this.location.source){r=e[i].text.split(/\r\n|\n|\r/g);break}let s=this.location.start,o=this.location.source+":"+s.line+":"+s.column;if(r){let a=this.location.end,d=ki("",s.line.toString().length," "),h=r[s.line-1],l=s.line===a.line?a.column:h.length+1;t+=`
9
+ `));for(let o of r)this.callKit.api.trackLogs(o);this.pendingTrackLogs=[]}catch(r){console.error(r)}}destroy(){this.trackLogsTimer&&(clearInterval(this.trackLogsTimer),this.trackLogsTimer=null),this.flushTrackLogs()}setLevel(e){this.level=e}info(e,t){let r=this.catchLog(e,t,"info");Je(this.level)>=Je("info")&&console.log(`%c${r}`,"color: gray;")}success(e,t){let r=this.catchLog(e,t,"success");Je(this.level)>=Je("success")&&console.log(`%c${r}`,"color: green;")}warn(e,t){let r=this.catchLog(e,t,"warn");Je(this.level)>=Je("warn")&&console.log(`%c${r}`,"color: orange;")}error(e,t,r=!1){let i=e instanceof Error?e.message:e,s=this.catchLog(i,t,"error");Je(this.level)>=Je("error")&&console.log(`%c${s}`,"color: red;");let{errCode:o,...a}=t?.content??{},d=o??V.UNKNOWN_ERROR;r||this.callKit.trigger(H.KIT_ERROR,{code:d,msg:i,data:a});let h=new Error(i);throw h.name="CallKitError",h.code=d,h.data=a,h}catchLog(e,t,r){let i=new Date,{enabled:s}=this.callKit.config.getTrackLogsConfig(),{userInfo:o}=this.callKit.config.getConfig(),a={agentId:o?.agentId,sessionId:o?.sessionId,...t?.content??{}},d={timestamp:i.toLocaleString().replace("T"," ").replace(".000Z",""),level:r,message:e,caller:t?.caller,type:t?.type,content:a},h=qa(d);return s&&this.pendingTrackLogs.push(h),this.callKit.trigger(H.KIT_LOG,h,!0),h}};var Mn="0.21.1";var he=class extends Error{constructor(e){super(e),Object.setPrototypeOf(this,new.target.prototype)}};var ct=class extends he{constructor(e){super(e||"Unsupported content type.")}};var Fe=class extends he{constructor(e){super(e||"Request pending.")}};var Er=class extends he{constructor(e){super(e||"Unspecified session description handler error.")}};var wt=class extends he{constructor(){super("The session has terminated.")}};var ze=class extends he{constructor(e){super(e||"An error occurred during state transition.")}};var wr=class{constructor(e){this.incomingAckRequest=e}get request(){return this.incomingAckRequest.message}};var Tr=class{constructor(e){this.incomingByeRequest=e}get request(){return this.incomingByeRequest.message}accept(e){return this.incomingByeRequest.accept(e),Promise.resolve()}reject(e){return this.incomingByeRequest.reject(e),Promise.resolve()}};var Rr=class{constructor(e){this.incomingCancelRequest=e}get request(){return this.incomingCancelRequest}};var He=class{constructor(){this.listeners=new Array}addListener(e,t){let r=i=>{this.removeListener(r),e(i)};t?.once===!0?this.listeners.push(r):this.listeners.push(e)}emit(e){this.listeners.slice().forEach(t=>t(e))}removeAllListeners(){this.listeners=[]}removeListener(e){this.listeners=this.listeners.filter(t=>t!==e)}on(e){return this.addListener(e)}off(e){return this.removeListener(e)}once(e){return this.addListener(e,{once:!0})}};var Sr=class{constructor(e){this.incomingInfoRequest=e}get request(){return this.incomingInfoRequest.message}accept(e){return this.incomingInfoRequest.accept(e),Promise.resolve()}reject(e){return this.incomingInfoRequest.reject(e),Promise.resolve()}};var Tt=class{constructor(e){this.parameters={};for(let t in e)e.hasOwnProperty(t)&&this.setParam(t,e[t])}setParam(e,t){e&&(this.parameters[e.toLowerCase()]=typeof t>"u"||t===null?null:t.toString())}getParam(e){if(e)return this.parameters[e.toLowerCase()]}hasParam(e){return!!(e&&this.parameters[e.toLowerCase()]!==void 0)}deleteParam(e){if(e=e.toLowerCase(),this.hasParam(e)){let t=this.parameters[e];return delete this.parameters[e],t}}clearParams(){this.parameters={}}};var ee=class extends Tt{constructor(e,t,r){super(r),this.uri=e,this._displayName=t}get friendlyName(){return this.displayName||this.uri.aor}get displayName(){return this._displayName}set displayName(e){this._displayName=e}clone(){return new ee(this.uri.clone(),this._displayName,JSON.parse(JSON.stringify(this.parameters)))}toString(){let e=this.displayName||this.displayName==="0"?'"'+this.displayName+'" ':"";e+="<"+this.uri.toString()+">";for(let t in this.parameters)this.parameters.hasOwnProperty(t)&&(e+=";"+t,this.parameters[t]!==null&&(e+="="+this.parameters[t]));return e}};var ue=class extends Tt{constructor(e="sip",t,r,i,s,o){if(super(s||{}),this.headers={},!r)throw new TypeError('missing or invalid "host" parameter');for(let a in o)o.hasOwnProperty(a)&&this.setHeader(a,o[a]);this.raw={scheme:e,user:t,host:r,port:i},this.normal={scheme:e.toLowerCase(),user:t,host:r.toLowerCase(),port:i}}get scheme(){return this.normal.scheme}set scheme(e){this.raw.scheme=e,this.normal.scheme=e.toLowerCase()}get user(){return this.normal.user}set user(e){this.normal.user=this.raw.user=e}get host(){return this.normal.host}set host(e){this.raw.host=e,this.normal.host=e.toLowerCase()}get aor(){return this.normal.user+"@"+this.normal.host}get port(){return this.normal.port}set port(e){this.normal.port=this.raw.port=e}setHeader(e,t){this.headers[this.headerize(e)]=t instanceof Array?t:[t]}getHeader(e){if(e)return this.headers[this.headerize(e)]}hasHeader(e){return!!e&&!!this.headers.hasOwnProperty(this.headerize(e))}deleteHeader(e){if(e=this.headerize(e),this.headers.hasOwnProperty(e)){let t=this.headers[e];return delete this.headers[e],t}}clearHeaders(){this.headers={}}clone(){return new ue(this._raw.scheme,this._raw.user||"",this._raw.host,this._raw.port,JSON.parse(JSON.stringify(this.parameters)),JSON.parse(JSON.stringify(this.headers)))}toRaw(){return this._toString(this._raw)}toString(){return this._toString(this._normal)}get _normal(){return this.normal}get _raw(){return this.raw}_toString(e){let t=e.scheme+":";e.scheme.toLowerCase().match("^sips?$")||(t+="//"),e.user&&(t+=this.escapeUser(e.user)+"@"),t+=e.host,(e.port||e.port===0)&&(t+=":"+e.port);for(let i in this.parameters)this.parameters.hasOwnProperty(i)&&(t+=";"+i,this.parameters[i]!==null&&(t+="="+this.parameters[i]));let r=[];for(let i in this.headers)if(this.headers.hasOwnProperty(i))for(let s in this.headers[i])this.headers[i].hasOwnProperty(s)&&r.push(i+"="+this.headers[i][s]);return r.length>0&&(t+="?"+r.join("&")),t}escapeUser(e){let t;try{t=decodeURIComponent(e)}catch(r){throw r}return encodeURIComponent(t).replace(/%3A/ig,":").replace(/%2B/ig,"+").replace(/%3F/ig,"?").replace(/%2F/ig,"/")}headerize(e){let t={"Call-Id":"Call-ID",Cseq:"CSeq","Min-Se":"Min-SE",Rack:"RAck",Rseq:"RSeq","Www-Authenticate":"WWW-Authenticate"},r=e.toLowerCase().replace(/_/g,"-").split("-"),i=r.length,s="";for(let o=0;o<i;o++)o!==0&&(s+="-"),s+=r[o].charAt(0).toUpperCase()+r[o].substring(1);return t[s]&&(s=t[s]),s}};function ki(n,e){if(n.scheme!==e.scheme||n.user!==e.user||n.host!==e.host||n.port!==e.port)return!1;function t(s,o){let a=Object.keys(s.parameters),d=Object.keys(o.parameters);return!(!a.filter(l=>d.includes(l)).every(l=>s.parameters[l]===o.parameters[l])||!["user","ttl","method","transport"].every(l=>s.hasParam(l)&&o.hasParam(l)||!s.hasParam(l)&&!o.hasParam(l))||!["maddr"].every(l=>s.hasParam(l)&&o.hasParam(l)||!s.hasParam(l)&&!o.hasParam(l)))}if(!t(n,e))return!1;let r=Object.keys(n.headers),i=Object.keys(e.headers);if(r.length!==0||i.length!==0){if(r.length!==i.length)return!1;let s=r.filter(o=>i.includes(o));if(s.length!==i.length||!s.every(o=>n.headers[o].length&&e.headers[o].length&&n.headers[o][0]===e.headers[o][0]))return!1}return!0}function Hi(n,e,t){return t=t||" ",n.length>e?n:(e-=n.length,t+=t.repeat(e),n+t.slice(0,e))}var Ke=class extends Error{constructor(e,t,r,i){super(),this.message=e,this.expected=t,this.found=r,this.location=i,this.name="SyntaxError",typeof Object.setPrototypeOf=="function"?Object.setPrototypeOf(this,Ke.prototype):this.__proto__=Ke.prototype,typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,Ke)}static buildMessage(e,t){function r(h){return h.charCodeAt(0).toString(16).toUpperCase()}function i(h){return h.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,l=>"\\x0"+r(l)).replace(/[\x10-\x1F\x7F-\x9F]/g,l=>"\\x"+r(l))}function s(h){return h.replace(/\\/g,"\\\\").replace(/\]/g,"\\]").replace(/\^/g,"\\^").replace(/-/g,"\\-").replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,l=>"\\x0"+r(l)).replace(/[\x10-\x1F\x7F-\x9F]/g,l=>"\\x"+r(l))}function o(h){switch(h.type){case"literal":return'"'+i(h.text)+'"';case"class":let l=h.parts.map(u=>Array.isArray(u)?s(u[0])+"-"+s(u[1]):s(u));return"["+(h.inverted?"^":"")+l+"]";case"any":return"any character";case"end":return"end of input";case"other":return h.description}}function a(h){let l=h.map(o),u,T;if(l.sort(),l.length>0){for(u=1,T=1;u<l.length;u++)l[u-1]!==l[u]&&(l[T]=l[u],T++);l.length=T}switch(l.length){case 1:return l[0];case 2:return l[0]+" or "+l[1];default:return l.slice(0,-1).join(", ")+", or "+l[l.length-1]}}function d(h){return h?'"'+i(h)+'"':"end of input"}return"Expected "+a(e)+" but "+d(t)+" found."}format(e){let t="Error: "+this.message;if(this.location){let r=null,i;for(i=0;i<e.length;i++)if(e[i].source===this.location.source){r=e[i].text.split(/\r\n|\n|\r/g);break}let s=this.location.start,o=this.location.source+":"+s.line+":"+s.column;if(r){let a=this.location.end,d=Hi("",s.line.toString().length," "),h=r[s.line-1],l=s.line===a.line?a.column:h.length+1;t+=`
10
10
  --> `+o+`
11
11
  `+d+` |
12
12
  `+s.line+" | "+h+`
13
- `+d+" | "+ki("",s.column-1," ")+ki("",l-s.column,"^")}else t+=`
13
+ `+d+" | "+Hi("",s.column-1," ")+Hi("",l-s.column,"^")}else t+=`
14
14
  at `+o}return t}};function La(n,e){e=e!==void 0?e:{};let t={},r=e.grammarSource,i={Contact:119,Name_Addr_Header:156,Record_Route:176,Request_Response:81,SIP_URI:45,Subscription_State:186,Supported:191,Require:182,Via:194,absoluteURI:84,Call_ID:118,Content_Disposition:130,Content_Length:135,Content_Type:136,CSeq:146,displayName:122,Event:149,From:151,host:52,Max_Forwards:154,Min_SE:213,Proxy_Authenticate:157,quoted_string:40,Refer_To:178,Replaces:179,Session_Expires:210,stun_URI:217,To:192,turn_URI:223,uuid:226,WWW_Authenticate:209,challenge:158,sipfrag:230,Referred_By:231},s=119,o=[`\r
15
15
  `,C(`\r
16
16
  `,!1),/^[0-9]/,f([["0","9"]],!1,!1),/^[a-zA-Z]/,f([["a","z"],["A","Z"]],!1,!1),/^[0-9a-fA-F]/,f([["0","9"],["a","f"],["A","F"]],!1,!1),/^[\0-\xFF]/,f([["\0","\xFF"]],!1,!1),/^["]/,f(['"'],!1,!1)," ",C(" ",!1)," ",C(" ",!1),/^[a-zA-Z0-9]/,f([["a","z"],["A","Z"],["0","9"]],!1,!1),";",C(";",!1),"/",C("/",!1),"?",C("?",!1),":",C(":",!1),"@",C("@",!1),"&",C("&",!1),"=",C("=",!1),"+",C("+",!1),"$",C("$",!1),",",C(",",!1),"-",C("-",!1),"_",C("_",!1),".",C(".",!1),"!",C("!",!1),"~",C("~",!1),"*",C("*",!1),"'",C("'",!1),"(",C("(",!1),")",C(")",!1),"%",C("%",!1),function(){return" "},function(){return":"},/^[!-~]/,f([["!","~"]],!1,!1),/^[\x80-\uFFFF]/,f([["\x80","\uFFFF"]],!1,!1),/^[\x80-\xBF]/,f([["\x80","\xBF"]],!1,!1),/^[a-f]/,f([["a","f"]],!1,!1),"`",C("`",!1),"<",C("<",!1),">",C(">",!1),"\\",C("\\",!1),"[",C("[",!1),"]",C("]",!1),"{",C("{",!1),"}",C("}",!1),function(){return"*"},function(){return"/"},function(){return"="},function(){return"("},function(){return")"},function(){return">"},function(){return"<"},function(){return","},function(){return";"},function(){return":"},function(){return'"'},/^[!-']/,f([["!","'"]],!1,!1),/^[*-[]/,f([["*","["]],!1,!1),/^[\]-~]/,f([["]","~"]],!1,!1),function(g){return g},/^[#-[]/,f([["#","["]],!1,!1),/^[\0-\t]/,f([["\0"," "]],!1,!1),/^[\v-\f]/,f([["\v","\f"]],!1,!1),/^[\x0E-\x7F]/,f([["","\x7F"]],!1,!1),function(){e=e||{data:{}},e.data.uri=new ue(e.data.scheme,e.data.user,e.data.host,e.data.port),delete e.data.scheme,delete e.data.user,delete e.data.host,delete e.data.host_type,delete e.data.port},function(){e=e||{data:{}},e.data.uri=new ue(e.data.scheme,e.data.user,e.data.host,e.data.port,e.data.uri_params,e.data.uri_headers),delete e.data.scheme,delete e.data.user,delete e.data.host,delete e.data.host_type,delete e.data.port,delete e.data.uri_params,e.startRule==="SIP_URI"&&(e.data=e.data.uri)},"sips",C("sips",!0),"sip",C("sip",!0),function(g){e=e||{data:{}},e.data.scheme=g},function(){e=e||{data:{}},e.data.user=decodeURIComponent($().slice(0,-1))},function(){e=e||{data:{}},e.data.password=$()},function(){return e=e||{data:{}},e.data.host=$(),e.data.host},function(){return e=e||{data:{}},e.data.host_type="domain",$()},/^[a-zA-Z0-9_\-]/,f([["a","z"],["A","Z"],["0","9"],"_","-"],!1,!1),/^[a-zA-Z0-9\-]/,f([["a","z"],["A","Z"],["0","9"],"-"],!1,!1),function(){return e=e||{data:{}},e.data.host_type="IPv6",$()},"::",C("::",!1),function(){return e=e||{data:{}},e.data.host_type="IPv6",$()},function(){return e=e||{data:{}},e.data.host_type="IPv4",$()},"25",C("25",!1),/^[0-5]/,f([["0","5"]],!1,!1),"2",C("2",!1),/^[0-4]/,f([["0","4"]],!1,!1),"1",C("1",!1),/^[1-9]/,f([["1","9"]],!1,!1),function(g){return e=e||{data:{}},g=parseInt(g.join("")),e.data.port=g,g},"transport=",C("transport=",!0),"udp",C("udp",!0),"tcp",C("tcp",!0),"sctp",C("sctp",!0),"tls",C("tls",!0),function(g){e=e||{data:{}},e.data.uri_params||(e.data.uri_params={}),e.data.uri_params.transport=g.toLowerCase()},"user=",C("user=",!0),"phone",C("phone",!0),"ip",C("ip",!0),function(g){e=e||{data:{}},e.data.uri_params||(e.data.uri_params={}),e.data.uri_params.user=g.toLowerCase()},"method=",C("method=",!0),function(g){e=e||{data:{}},e.data.uri_params||(e.data.uri_params={}),e.data.uri_params.method=g},"ttl=",C("ttl=",!0),function(g){e=e||{data:{}},e.data.params||(e.data.params={}),e.data.params.ttl=g},"maddr=",C("maddr=",!0),function(g){e=e||{data:{}},e.data.uri_params||(e.data.uri_params={}),e.data.uri_params.maddr=g},"lr",C("lr",!0),function(){e=e||{data:{}},e.data.uri_params||(e.data.uri_params={}),e.data.uri_params.lr=void 0},function(g,E){e=e||{data:{}},e.data.uri_params||(e.data.uri_params={}),E===null?E=void 0:E=E[1],e.data.uri_params[g.toLowerCase()]=E},function(g,E){g=g.join("").toLowerCase(),E=E.join(""),e=e||{data:{}},e.data.uri_headers||(e.data.uri_headers={}),e.data.uri_headers[g]?e.data.uri_headers[g].push(E):e.data.uri_headers[g]=[E]},function(){e=e||{data:{}},e.startRule==="Refer_To"&&(e.data.uri=new ue(e.data.scheme,e.data.user,e.data.host,e.data.port,e.data.uri_params,e.data.uri_headers),delete e.data.scheme,delete e.data.user,delete e.data.host,delete e.data.host_type,delete e.data.port,delete e.data.uri_params)},"//",C("//",!1),function(){e=e||{data:{}},e.data.scheme=$()},C("SIP",!0),function(){e=e||{data:{}},e.data.sip_version=$()},"INVITE",C("INVITE",!1),"ACK",C("ACK",!1),"VXACH",C("VXACH",!1),"OPTIONS",C("OPTIONS",!1),"BYE",C("BYE",!1),"CANCEL",C("CANCEL",!1),"REGISTER",C("REGISTER",!1),"SUBSCRIBE",C("SUBSCRIBE",!1),"NOTIFY",C("NOTIFY",!1),"REFER",C("REFER",!1),"PUBLISH",C("PUBLISH",!1),function(){return e=e||{data:{}},e.data.method=$(),e.data.method},function(g){e=e||{data:{}},e.data.status_code=parseInt(g.join(""))},function(){e=e||{data:{}},e.data.reason_phrase=$()},function(){e=e||{data:{}},e.data=$()},function(){var g,E;for(e=e||{data:{}},E=e.data.multi_header.length,g=0;g<E;g++)if(e.data.multi_header[g].parsed===null){e.data=null;break}e.data!==null?e.data=e.data.multi_header:e.data=-1},function(){var g;e=e||{data:{}},e.data.multi_header||(e.data.multi_header=[]);try{g=new ee(e.data.uri,e.data.displayName,e.data.params),delete e.data.uri,delete e.data.displayName,delete e.data.params}catch{g=null}e.data.multi_header.push({position:d,offset:N().start.offset,parsed:g})},function(g){g=$().trim(),g[0]==='"'&&(g=g.substring(1,g.length-1)),e=e||{data:{}},e.data.displayName=g},"q",C("q",!0),function(g){e=e||{data:{}},e.data.params||(e.data.params={}),e.data.params.q=g},"expires",C("expires",!0),function(g){e=e||{data:{}},e.data.params||(e.data.params={}),e.data.params.expires=g},function(g){return parseInt(g.join(""))},"0",C("0",!1),function(){return parseFloat($())},function(g,E){e=e||{data:{}},e.data.params||(e.data.params={}),E===null?E=void 0:E=E[1],e.data.params[g.toLowerCase()]=E},"render",C("render",!0),"session",C("session",!0),"icon",C("icon",!0),"alert",C("alert",!0),function(){e=e||{data:{}},e.startRule==="Content_Disposition"&&(e.data.type=$().toLowerCase())},"handling",C("handling",!0),"optional",C("optional",!0),"required",C("required",!0),function(g){e=e||{data:{}},e.data=parseInt(g.join(""))},function(){e=e||{data:{}},e.data=$()},"text",C("text",!0),"image",C("image",!0),"audio",C("audio",!0),"video",C("video",!0),"application",C("application",!0),"message",C("message",!0),"multipart",C("multipart",!0),"x-",C("x-",!0),function(g){e=e||{data:{}},e.data.value=parseInt(g.join(""))},function(g){e=e||{data:{}},e.data=g},function(g){e=e||{data:{}},e.data.event=g.toLowerCase()},function(){e=e||{data:{}};var g=e.data.tag;e.data=new ee(e.data.uri,e.data.displayName,e.data.params),g&&e.data.setParam("tag",g)},"tag",C("tag",!0),function(g){e=e||{data:{}},e.data.tag=g},function(g){e=e||{data:{}},e.data=parseInt(g.join(""))},function(g){e=e||{data:{}},e.data=g},function(){e=e||{data:{}},e.data=new ee(e.data.uri,e.data.displayName,e.data.params)},"digest",C("Digest",!0),"realm",C("realm",!0),function(g){e=e||{data:{}},e.data.realm=g},"domain",C("domain",!0),"nonce",C("nonce",!0),function(g){e=e||{data:{}},e.data.nonce=g},"opaque",C("opaque",!0),function(g){e=e||{data:{}},e.data.opaque=g},"stale",C("stale",!0),"true",C("true",!0),function(){e=e||{data:{}},e.data.stale=!0},"false",C("false",!0),function(){e=e||{data:{}},e.data.stale=!1},"algorithm",C("algorithm",!0),"md5",C("MD5",!0),"md5-sess",C("MD5-sess",!0),function(g){e=e||{data:{}},e.data.algorithm=g.toUpperCase()},"qop",C("qop",!0),"auth-int",C("auth-int",!0),"auth",C("auth",!0),function(g){e=e||{data:{}},e.data.qop||(e.data.qop=[]),e.data.qop.push(g.toLowerCase())},function(g){e=e||{data:{}},e.data.value=parseInt(g.join(""))},function(){var g,E;for(e=e||{data:{}},E=e.data.multi_header.length,g=0;g<E;g++)if(e.data.multi_header[g].parsed===null){e.data=null;break}e.data!==null?e.data=e.data.multi_header:e.data=-1},function(){var g;e=e||{data:{}},e.data.multi_header||(e.data.multi_header=[]);try{g=new ee(e.data.uri,e.data.displayName,e.data.params),delete e.data.uri,delete e.data.displayName,delete e.data.params}catch{g=null}e.data.multi_header.push({position:d,offset:N().start.offset,parsed:g})},function(){e=e||{data:{}},e.data=new ee(e.data.uri,e.data.displayName,e.data.params)},function(){e=e||{data:{}},e.data.replaces_from_tag&&e.data.replaces_to_tag||(e.data=-1)},function(){e=e||{data:{}},e.data={call_id:e.data}},"from-tag",C("from-tag",!0),function(g){e=e||{data:{}},e.data.replaces_from_tag=g},"to-tag",C("to-tag",!0),function(g){e=e||{data:{}},e.data.replaces_to_tag=g},"early-only",C("early-only",!0),function(){e=e||{data:{}},e.data.early_only=!0},function(g,E){return E},function(g,E){return Vt(g,E)},function(g){e=e||{data:{}},e.startRule==="Require"&&(e.data=g||[])},function(g){e=e||{data:{}},e.data.value=parseInt(g.join(""))},"active",C("active",!0),"pending",C("pending",!0),"terminated",C("terminated",!0),function(){e=e||{data:{}},e.data.state=$()},"reason",C("reason",!0),function(g){e=e||{data:{}},typeof g<"u"&&(e.data.reason=g)},function(g){e=e||{data:{}},typeof g<"u"&&(e.data.expires=g)},"retry_after",C("retry_after",!0),function(g){e=e||{data:{}},typeof g<"u"&&(e.data.retry_after=g)},"deactivated",C("deactivated",!0),"probation",C("probation",!0),"rejected",C("rejected",!0),"timeout",C("timeout",!0),"giveup",C("giveup",!0),"noresource",C("noresource",!0),"invariant",C("invariant",!0),function(g){e=e||{data:{}},e.startRule==="Supported"&&(e.data=g||[])},function(){e=e||{data:{}};var g=e.data.tag;e.data=new ee(e.data.uri,e.data.displayName,e.data.params),g&&e.data.setParam("tag",g)},"ttl",C("ttl",!0),function(g){e=e||{data:{}},e.data.ttl=g},"maddr",C("maddr",!0),function(g){e=e||{data:{}},e.data.maddr=g},"received",C("received",!0),function(g){e=e||{data:{}},e.data.received=g},"branch",C("branch",!0),function(g){e=e||{data:{}},e.data.branch=g},"rport",C("rport",!0),function(g){e=e||{data:{}},typeof g<"u"&&(e.data.rport=g.join(""))},function(g){e=e||{data:{}},e.data.protocol=g},C("UDP",!0),C("TCP",!0),C("TLS",!0),C("SCTP",!0),function(g){e=e||{data:{}},e.data.transport=g},function(){e=e||{data:{}},e.data.host=$()},function(g){e=e||{data:{}},e.data.port=parseInt(g.join(""))},function(g){return parseInt(g.join(""))},function(g){e=e||{data:{}},e.startRule==="Session_Expires"&&(e.data.deltaSeconds=g)},"refresher",C("refresher",!1),"uas",C("uas",!1),"uac",C("uac",!1),function(g){e=e||{data:{}},e.startRule==="Session_Expires"&&(e.data.refresher=g)},function(g){e=e||{data:{}},e.startRule==="Min_SE"&&(e.data=g)},"stuns",C("stuns",!0),"stun",C("stun",!0),function(g){e=e||{data:{}},e.data.scheme=g},function(g){e=e||{data:{}},e.data.host=g},"?transport=",C("?transport=",!1),"turns",C("turns",!0),"turn",C("turn",!0),function(g){e=e||{data:{}},e.data.transport=g},function(){e=e||{data:{}},e.data=$()},"Referred-By",C("Referred-By",!1),"b",C("b",!1),"cid",C("cid",!1)],a=[c('2 ""6 7!'),c('4"""5!7#'),c('4$""5!7%'),c(`4&""5!7'`),c(";'.# &;("),c('4(""5!7)'),c('4*""5!7+'),c('2,""6,7-'),c('2.""6.7/'),c('40""5!71'),c('22""6273.\x89 &24""6475.} &26""6677.q &28""6879.e &2:""6:7;.Y &2<""6<7=.M &2>""6>7?.A &2@""6@7A.5 &2B""6B7C.) &2D""6D7E'),c(";).# &;,"),c('2F""6F7G.} &2H""6H7I.q &2J""6J7K.e &2L""6L7M.Y &2N""6N7O.M &2P""6P7Q.A &2R""6R7S.5 &2T""6T7U.) &2V""6V7W'),c(`%%2X""6X7Y/5#;#/,$;#/#$+#)(#'#("'#&'#/"!&,)`),c(`%%$;$0#*;$&/,#; /#$+")("'#&'#." &"/=#$;$/&#0#*;$&&&#/'$8":Z" )("'#&'#`),c(';.." &"'),c(`%$;'.# &;(0)*;'.# &;(&/?#28""6879/0$;//'$8#:[# )(#'#("'#&'#`),c(`%%$;2/&#0#*;2&&&#/g#$%$;.0#*;.&/,#;2/#$+")("'#&'#0=*%$;.0#*;.&/,#;2/#$+")("'#&'#&/#$+")("'#&'#/"!&,)`),c('4\\""5!7].# &;3'),c('4^""5!7_'),c('4`""5!7a'),c(';!.) &4b""5!7c'),c('%$;).\x95 &2F""6F7G.\x89 &2J""6J7K.} &2L""6L7M.q &2X""6X7Y.e &2P""6P7Q.Y &2H""6H7I.M &2@""6@7A.A &2d""6d7e.5 &2R""6R7S.) &2N""6N7O/\x9E#0\x9B*;).\x95 &2F""6F7G.\x89 &2J""6J7K.} &2L""6L7M.q &2X""6X7Y.e &2P""6P7Q.Y &2H""6H7I.M &2@""6@7A.A &2d""6d7e.5 &2R""6R7S.) &2N""6N7O&&&#/"!&,)'),c('%$;).\x89 &2F""6F7G.} &2L""6L7M.q &2X""6X7Y.e &2P""6P7Q.Y &2H""6H7I.M &2@""6@7A.A &2d""6d7e.5 &2R""6R7S.) &2N""6N7O/\x92#0\x8F*;).\x89 &2F""6F7G.} &2L""6L7M.q &2X""6X7Y.e &2P""6P7Q.Y &2H""6H7I.M &2@""6@7A.A &2d""6d7e.5 &2R""6R7S.) &2N""6N7O&&&#/"!&,)'),c(`2T""6T7U.\xE3 &2V""6V7W.\xD7 &2f""6f7g.\xCB &2h""6h7i.\xBF &2:""6:7;.\xB3 &2D""6D7E.\xA7 &22""6273.\x9B &28""6879.\x8F &2j""6j7k.\x83 &;&.} &24""6475.q &2l""6l7m.e &2n""6n7o.Y &26""6677.M &2>""6>7?.A &2p""6p7q.5 &2r""6r7s.) &;'.# &;(`),c('%$;).\u012B &2F""6F7G.\u011F &2J""6J7K.\u0113 &2L""6L7M.\u0107 &2X""6X7Y.\xFB &2P""6P7Q.\xEF &2H""6H7I.\xE3 &2@""6@7A.\xD7 &2d""6d7e.\xCB &2R""6R7S.\xBF &2N""6N7O.\xB3 &2T""6T7U.\xA7 &2V""6V7W.\x9B &2f""6f7g.\x8F &2h""6h7i.\x83 &28""6879.w &2j""6j7k.k &;&.e &24""6475.Y &2l""6l7m.M &2n""6n7o.A &26""6677.5 &2p""6p7q.) &2r""6r7s/\u0134#0\u0131*;).\u012B &2F""6F7G.\u011F &2J""6J7K.\u0113 &2L""6L7M.\u0107 &2X""6X7Y.\xFB &2P""6P7Q.\xEF &2H""6H7I.\xE3 &2@""6@7A.\xD7 &2d""6d7e.\xCB &2R""6R7S.\xBF &2N""6N7O.\xB3 &2T""6T7U.\xA7 &2V""6V7W.\x9B &2f""6f7g.\x8F &2h""6h7i.\x83 &28""6879.w &2j""6j7k.k &;&.e &24""6475.Y &2l""6l7m.M &2n""6n7o.A &26""6677.5 &2p""6p7q.) &2r""6r7s&&&#/"!&,)'),c(`%;//?#2P""6P7Q/0$;//'$8#:t# )(#'#("'#&'#`),c(`%;//?#24""6475/0$;//'$8#:u# )(#'#("'#&'#`),c(`%;//?#2>""6>7?/0$;//'$8#:v# )(#'#("'#&'#`),c(`%;//?#2T""6T7U/0$;//'$8#:w# )(#'#("'#&'#`),c(`%;//?#2V""6V7W/0$;//'$8#:x# )(#'#("'#&'#`),c(`%2h""6h7i/0#;//'$8":y" )("'#&'#`),c(`%;//6#2f""6f7g/'$8":z" )("'#&'#`),c(`%;//?#2D""6D7E/0$;//'$8#:{# )(#'#("'#&'#`),c(`%;//?#22""6273/0$;//'$8#:|# )(#'#("'#&'#`),c(`%;//?#28""6879/0$;//'$8#:}# )(#'#("'#&'#`),c(`%;//0#;&/'$8":~" )("'#&'#`),c(`%;&/0#;//'$8":~" )("'#&'#`),c(`%;=/T#$;G.) &;K.# &;F0/*;G.) &;K.# &;F&/,$;>/#$+#)(#'#("'#&'#`),c('4\x7F""5!7\x80.A &4\x81""5!7\x82.5 &4\x83""5!7\x84.) &;3.# &;.'),c(`%%;//Q#;&/H$$;J.# &;K0)*;J.# &;K&/,$;&/#$+$)($'#(#'#("'#&'#/"!&,)`),c(`%;//]#;&/T$%$;J.# &;K0)*;J.# &;K&/"!&,)/1$;&/($8$:\x85$!!)($'#(#'#("'#&'#`),c(';..G &2L""6L7M.; &4\x86""5!7\x87./ &4\x83""5!7\x84.# &;3'),c(`%2j""6j7k/J#4\x88""5!7\x89.5 &4\x8A""5!7\x8B.) &4\x8C""5!7\x8D/#$+")("'#&'#`),c(`%;N/M#28""6879/>$;O." &"/0$;S/'$8$:\x8E$ )($'#(#'#("'#&'#`),c(`%;N/d#28""6879/U$;O." &"/G$;S/>$;_/5$;l." &"/'$8&:\x8F& )(&'#(%'#($'#(#'#("'#&'#`),c(`%3\x90""5$7\x91.) &3\x92""5#7\x93/' 8!:\x94!! )`),c(`%;P/]#%28""6879/,#;R/#$+")("'#&'#." &"/6$2:""6:7;/'$8#:\x95# )(#'#("'#&'#`),c("$;+.) &;-.# &;Q/2#0/*;+.) &;-.# &;Q&&&#"),c('2<""6<7=.q &2>""6>7?.e &2@""6@7A.Y &2B""6B7C.M &2D""6D7E.A &22""6273.5 &26""6677.) &24""6475'),c('%$;+._ &;-.Y &2<""6<7=.M &2>""6>7?.A &2@""6@7A.5 &2B""6B7C.) &2D""6D7E0e*;+._ &;-.Y &2<""6<7=.M &2>""6>7?.A &2@""6@7A.5 &2B""6B7C.) &2D""6D7E&/& 8!:\x96! )'),c(`%;T/J#%28""6879/,#;^/#$+")("'#&'#." &"/#$+")("'#&'#`),c("%;U.) &;\\.# &;X/& 8!:\x97! )"),c(`%$%;V/2#2J""6J7K/#$+")("'#&'#0<*%;V/2#2J""6J7K/#$+")("'#&'#&/D#;W/;$2J""6J7K." &"/'$8#:\x98# )(#'#("'#&'#`),c('$4\x99""5!7\x9A/,#0)*4\x99""5!7\x9A&&&#'),c(`%4$""5!7%/?#$4\x9B""5!7\x9C0)*4\x9B""5!7\x9C&/#$+")("'#&'#`),c(`%2l""6l7m/?#;Y/6$2n""6n7o/'$8#:\x9D# )(#'#("'#&'#`),c(`%%;Z/\xB3#28""6879/\xA4$;Z/\x9B$28""6879/\x8C$;Z/\x83$28""6879/t$;Z/k$28""6879/\\$;Z/S$28""6879/D$;Z/;$28""6879/,$;[/#$+-)(-'#(,'#(+'#(*'#()'#(('#(''#(&'#(%'#($'#(#'#("'#&'#.\u0790 &%2\x9E""6\x9E7\x9F/\xA4#;Z/\x9B$28""6879/\x8C$;Z/\x83$28""6879/t$;Z/k$28""6879/\\$;Z/S$28""6879/D$;Z/;$28""6879/,$;[/#$+,)(,'#(+'#(*'#()'#(('#(''#(&'#(%'#($'#(#'#("'#&'#.\u06F9 &%2\x9E""6\x9E7\x9F/\x8C#;Z/\x83$28""6879/t$;Z/k$28""6879/\\$;Z/S$28""6879/D$;Z/;$28""6879/,$;[/#$+*)(*'#()'#(('#(''#(&'#(%'#($'#(#'#("'#&'#.\u067A &%2\x9E""6\x9E7\x9F/t#;Z/k$28""6879/\\$;Z/S$28""6879/D$;Z/;$28""6879/,$;[/#$+()(('#(''#(&'#(%'#($'#(#'#("'#&'#.\u0613 &%2\x9E""6\x9E7\x9F/\\#;Z/S$28""6879/D$;Z/;$28""6879/,$;[/#$+&)(&'#(%'#($'#(#'#("'#&'#.\u05C4 &%2\x9E""6\x9E7\x9F/D#;Z/;$28""6879/,$;[/#$+$)($'#(#'#("'#&'#.\u058D &%2\x9E""6\x9E7\x9F/,#;[/#$+")("'#&'#.\u056E &%2\x9E""6\x9E7\x9F/,#;Z/#$+")("'#&'#.\u054F &%;Z/\x9B#2\x9E""6\x9E7\x9F/\x8C$;Z/\x83$28""6879/t$;Z/k$28""6879/\\$;Z/S$28""6879/D$;Z/;$28""6879/,$;[/#$++)(+'#(*'#()'#(('#(''#(&'#(%'#($'#(#'#("'#&'#.\u04C7 &%;Z/\xAA#%28""6879/,#;Z/#$+")("'#&'#." &"/\x83$2\x9E""6\x9E7\x9F/t$;Z/k$28""6879/\\$;Z/S$28""6879/D$;Z/;$28""6879/,$;[/#$+*)(*'#()'#(('#(''#(&'#(%'#($'#(#'#("'#&'#.\u0430 &%;Z/\xB9#%28""6879/,#;Z/#$+")("'#&'#." &"/\x92$%28""6879/,#;Z/#$+")("'#&'#." &"/k$2\x9E""6\x9E7\x9F/\\$;Z/S$28""6879/D$;Z/;$28""6879/,$;[/#$+))()'#(('#(''#(&'#(%'#($'#(#'#("'#&'#.\u038A &%;Z/\xC8#%28""6879/,#;Z/#$+")("'#&'#." &"/\xA1$%28""6879/,#;Z/#$+")("'#&'#." &"/z$%28""6879/,#;Z/#$+")("'#&'#." &"/S$2\x9E""6\x9E7\x9F/D$;Z/;$28""6879/,$;[/#$+()(('#(''#(&'#(%'#($'#(#'#("'#&'#.\u02D5 &%;Z/\xD7#%28""6879/,#;Z/#$+")("'#&'#." &"/\xB0$%28""6879/,#;Z/#$+")("'#&'#." &"/\x89$%28""6879/,#;Z/#$+")("'#&'#." &"/b$%28""6879/,#;Z/#$+")("'#&'#." &"/;$2\x9E""6\x9E7\x9F/,$;[/#$+')(''#(&'#(%'#($'#(#'#("'#&'#.\u0211 &%;Z/\xFE#%28""6879/,#;Z/#$+")("'#&'#." &"/\xD7$%28""6879/,#;Z/#$+")("'#&'#." &"/\xB0$%28""6879/,#;Z/#$+")("'#&'#." &"/\x89$%28""6879/,#;Z/#$+")("'#&'#." &"/b$%28""6879/,#;Z/#$+")("'#&'#." &"/;$2\x9E""6\x9E7\x9F/,$;Z/#$+()(('#(''#(&'#(%'#($'#(#'#("'#&'#.\u0126 &%;Z/\u011C#%28""6879/,#;Z/#$+")("'#&'#." &"/\xF5$%28""6879/,#;Z/#$+")("'#&'#." &"/\xCE$%28""6879/,#;Z/#$+")("'#&'#." &"/\xA7$%28""6879/,#;Z/#$+")("'#&'#." &"/\x80$%28""6879/,#;Z/#$+")("'#&'#." &"/Y$%28""6879/,#;Z/#$+")("'#&'#." &"/2$2\x9E""6\x9E7\x9F/#$+()(('#(''#(&'#(%'#($'#(#'#("'#&'#/& 8!:\xA0! )`),c(`%;#/M#;#." &"/?$;#." &"/1$;#." &"/#$+$)($'#(#'#("'#&'#`),c(`%;Z/;#28""6879/,$;Z/#$+#)(#'#("'#&'#.# &;\\`),c(`%;]/o#2J""6J7K/\`$;]/W$2J""6J7K/H$;]/?$2J""6J7K/0$;]/'$8':\xA1' )(''#(&'#(%'#($'#(#'#("'#&'#`),c(`%2\xA2""6\xA27\xA3/2#4\xA4""5!7\xA5/#$+")("'#&'#.\x98 &%2\xA6""6\xA67\xA7/;#4\xA8""5!7\xA9/,$;!/#$+#)(#'#("'#&'#.j &%2\xAA""6\xAA7\xAB/5#;!/,$;!/#$+#)(#'#("'#&'#.B &%4\xAC""5!7\xAD/,#;!/#$+")("'#&'#.# &;!`),c(`%%;!." &"/[#;!." &"/M$;!." &"/?$;!." &"/1$;!." &"/#$+%)(%'#($'#(#'#("'#&'#/' 8!:\xAE!! )`),c(`$%22""6273/,#;\`/#$+")("'#&'#0<*%22""6273/,#;\`/#$+")("'#&'#&`),c(";a.A &;b.; &;c.5 &;d./ &;e.) &;f.# &;g"),c(`%3\xAF""5*7\xB0/a#3\xB1""5#7\xB2.G &3\xB3""5#7\xB4.; &3\xB5""5$7\xB6./ &3\xB7""5#7\xB8.# &;6/($8":\xB9"! )("'#&'#`),c(`%3\xBA""5%7\xBB/I#3\xBC""5%7\xBD./ &3\xBE""5"7\xBF.# &;6/($8":\xC0"! )("'#&'#`),c(`%3\xC1""5'7\xC2/1#;\x90/($8":\xC3"! )("'#&'#`),c(`%3\xC4""5$7\xC5/1#;\xF0/($8":\xC6"! )("'#&'#`),c(`%3\xC7""5&7\xC8/1#;T/($8":\xC9"! )("'#&'#`),c(`%3\xCA""5"7\xCB/N#%2>""6>7?/,#;6/#$+")("'#&'#." &"/'$8":\xCC" )("'#&'#`),c(`%;h/P#%2>""6>7?/,#;i/#$+")("'#&'#." &"/)$8":\xCD""! )("'#&'#`),c('%$;j/&#0#*;j&&&#/"!&,)'),c('%$;j/&#0#*;j&&&#/"!&,)'),c(";k.) &;+.# &;-"),c('2l""6l7m.e &2n""6n7o.Y &24""6475.M &28""6879.A &2<""6<7=.5 &2@""6@7A.) &2B""6B7C'),c(`%26""6677/n#;m/e$$%2<""6<7=/,#;m/#$+")("'#&'#0<*%2<""6<7=/,#;m/#$+")("'#&'#&/#$+#)(#'#("'#&'#`),c(`%;n/A#2>""6>7?/2$;o/)$8#:\xCE#"" )(#'#("'#&'#`),c("$;p.) &;+.# &;-/2#0/*;p.) &;+.# &;-&&&#"),c("$;p.) &;+.# &;-0/*;p.) &;+.# &;-&"),c('2l""6l7m.e &2n""6n7o.Y &24""6475.M &26""6677.A &28""6879.5 &2@""6@7A.) &2B""6B7C'),c(";\x91.# &;r"),c(`%;\x90/G#;'/>$;s/5$;'/,$;\x84/#$+%)(%'#($'#(#'#("'#&'#`),c(";M.# &;t"),c(`%;\x7F/E#28""6879/6$;u.# &;x/'$8#:\xCF# )(#'#("'#&'#`),c(`%;v.# &;w/J#%26""6677/,#;\x83/#$+")("'#&'#." &"/#$+")("'#&'#`),c(`%2\xD0""6\xD07\xD1/:#;\x80/1$;w." &"/#$+#)(#'#("'#&'#`),c(`%24""6475/,#;{/#$+")("'#&'#`),c(`%;z/3#$;y0#*;y&/#$+")("'#&'#`),c(";*.) &;+.# &;-"),c(';+.\x8F &;-.\x89 &22""6273.} &26""6677.q &28""6879.e &2:""6:7;.Y &2<""6<7=.M &2>""6>7?.A &2@""6@7A.5 &2B""6B7C.) &2D""6D7E'),c(`%;|/e#$%24""6475/,#;|/#$+")("'#&'#0<*%24""6475/,#;|/#$+")("'#&'#&/#$+")("'#&'#`),c(`%$;~0#*;~&/e#$%22""6273/,#;}/#$+")("'#&'#0<*%22""6273/,#;}/#$+")("'#&'#&/#$+")("'#&'#`),c("$;~0#*;~&"),c(';+.w &;-.q &28""6879.e &2:""6:7;.Y &2<""6<7=.M &2>""6>7?.A &2@""6@7A.5 &2B""6B7C.) &2D""6D7E'),c(`%%;"/\x87#$;".G &;!.A &2@""6@7A.5 &2F""6F7G.) &2J""6J7K0M*;".G &;!.A &2@""6@7A.5 &2F""6F7G.) &2J""6J7K&/#$+")("'#&'#/& 8!:\xD2! )`),c(";\x81.# &;\x82"),c(`%%;O/2#2:""6:7;/#$+")("'#&'#." &"/,#;S/#$+")("'#&'#." &"`),c('$;+.\x83 &;-.} &2B""6B7C.q &2D""6D7E.e &22""6273.Y &28""6879.M &2:""6:7;.A &2<""6<7=.5 &2>""6>7?.) &2@""6@7A/\x8C#0\x89*;+.\x83 &;-.} &2B""6B7C.q &2D""6D7E.e &22""6273.Y &28""6879.M &2:""6:7;.A &2<""6<7=.5 &2>""6>7?.) &2@""6@7A&&&#'),c("$;y0#*;y&"),c(`%3\x92""5#7\xD3/q#24""6475/b$$;!/&#0#*;!&&&#/L$2J""6J7K/=$$;!/&#0#*;!&&&#/'$8%:\xD4% )(%'#($'#(#'#("'#&'#`),c('2\xD5""6\xD57\xD6'),c('2\xD7""6\xD77\xD8'),c('2\xD9""6\xD97\xDA'),c('2\xDB""6\xDB7\xDC'),c('2\xDD""6\xDD7\xDE'),c('2\xDF""6\xDF7\xE0'),c('2\xE1""6\xE17\xE2'),c('2\xE3""6\xE37\xE4'),c('2\xE5""6\xE57\xE6'),c('2\xE7""6\xE77\xE8'),c('2\xE9""6\xE97\xEA'),c("%;\x85.Y &;\x86.S &;\x88.M &;\x89.G &;\x8A.A &;\x8B.; &;\x8C.5 &;\x8F./ &;\x8D.) &;\x8E.# &;6/& 8!:\xEB! )"),c(`%;\x84/G#;'/>$;\x92/5$;'/,$;\x94/#$+%)(%'#($'#(#'#("'#&'#`),c("%;\x93/' 8!:\xEC!! )"),c(`%;!/5#;!/,$;!/#$+#)(#'#("'#&'#`),c("%$;*.A &;+.; &;-.5 &;3./ &;4.) &;'.# &;(0G*;*.A &;+.; &;-.5 &;3./ &;4.) &;'.# &;(&/& 8!:\xED! )"),c(`%;\xB6/Y#$%;A/,#;\xB6/#$+")("'#&'#06*%;A/,#;\xB6/#$+")("'#&'#&/#$+")("'#&'#`),c(`%;9/N#%2:""6:7;/,#;9/#$+")("'#&'#." &"/'$8":\xEE" )("'#&'#`),c(`%;:.c &%;\x98/Y#$%;A/,#;\x98/#$+")("'#&'#06*%;A/,#;\x98/#$+")("'#&'#&/#$+")("'#&'#/& 8!:\xEF! )`),c(`%;L.# &;\x99/]#$%;B/,#;\x9B/#$+")("'#&'#06*%;B/,#;\x9B/#$+")("'#&'#&/'$8":\xF0" )("'#&'#`),c(`%;\x9A." &"/>#;@/5$;M/,$;?/#$+$)($'#(#'#("'#&'#`),c(`%%;6/Y#$%;./,#;6/#$+")("'#&'#06*%;./,#;6/#$+")("'#&'#&/#$+")("'#&'#.# &;H/' 8!:\xF1!! )`),c(";\x9C.) &;\x9D.# &;\xA0"),c(`%3\xF2""5!7\xF3/:#;</1$;\x9F/($8#:\xF4#! )(#'#("'#&'#`),c(`%3\xF5""5'7\xF6/:#;</1$;\x9E/($8#:\xF7#! )(#'#("'#&'#`),c("%$;!/&#0#*;!&&&#/' 8!:\xF8!! )"),c(`%2\xF9""6\xF97\xFA/o#%2J""6J7K/M#;!." &"/?$;!." &"/1$;!." &"/#$+$)($'#(#'#("'#&'#." &"/'$8":\xFB" )("'#&'#`),c(`%;6/J#%;</,#;\xA1/#$+")("'#&'#." &"/)$8":\xFC""! )("'#&'#`),c(";6.) &;T.# &;H"),c(`%;\xA3/Y#$%;B/,#;\xA4/#$+")("'#&'#06*%;B/,#;\xA4/#$+")("'#&'#&/#$+")("'#&'#`),c(`%3\xFD""5&7\xFE.G &3\xFF""5'7\u0100.; &3\u0101""5$7\u0102./ &3\u0103""5%7\u0104.# &;6/& 8!:\u0105! )`),c(";\xA5.# &;\xA0"),c(`%3\u0106""5(7\u0107/M#;</D$3\u0108""5(7\u0109./ &3\u010A""5(7\u010B.# &;6/#$+#)(#'#("'#&'#`),c(`%;6/Y#$%;A/,#;6/#$+")("'#&'#06*%;A/,#;6/#$+")("'#&'#&/#$+")("'#&'#`),c("%$;!/&#0#*;!&&&#/' 8!:\u010C!! )"),c("%;\xA9/& 8!:\u010D! )"),c(`%;\xAA/k#;;/b$;\xAF/Y$$%;B/,#;\xB0/#$+")("'#&'#06*%;B/,#;\xB0/#$+")("'#&'#&/#$+$)($'#(#'#("'#&'#`),c(";\xAB.# &;\xAC"),c('3\u010E""5$7\u010F.S &3\u0110""5%7\u0111.G &3\u0112""5%7\u0113.; &3\u0114""5%7\u0115./ &3\u0116""5+7\u0117.# &;\xAD'),c(`3\u0118""5'7\u0119./ &3\u011A""5)7\u011B.# &;\xAD`),c(";6.# &;\xAE"),c(`%3\u011C""5"7\u011D/,#;6/#$+")("'#&'#`),c(";\xAD.# &;6"),c(`%;6/5#;</,$;\xB1/#$+#)(#'#("'#&'#`),c(";6.# &;H"),c(`%;\xB3/5#;./,$;\x90/#$+#)(#'#("'#&'#`),c("%$;!/&#0#*;!&&&#/' 8!:\u011E!! )"),c("%;\x9E/' 8!:\u011F!! )"),c(`%;\xB6/^#$%;B/,#;\xA0/#$+")("'#&'#06*%;B/,#;\xA0/#$+")("'#&'#&/($8":\u0120"!!)("'#&'#`),c(`%%;7/e#$%2J""6J7K/,#;7/#$+")("'#&'#0<*%2J""6J7K/,#;7/#$+")("'#&'#&/#$+")("'#&'#/"!&,)`),c(`%;L.# &;\x99/]#$%;B/,#;\xB8/#$+")("'#&'#06*%;B/,#;\xB8/#$+")("'#&'#&/'$8":\u0121" )("'#&'#`),c(";\xB9.# &;\xA0"),c(`%3\u0122""5#7\u0123/:#;</1$;6/($8#:\u0124#! )(#'#("'#&'#`),c("%$;!/&#0#*;!&&&#/' 8!:\u0125!! )"),c("%;\x9E/' 8!:\u0126!! )"),c(`%$;\x9A0#*;\x9A&/x#;@/o$;M/f$;?/]$$%;B/,#;\xA0/#$+")("'#&'#06*%;B/,#;\xA0/#$+")("'#&'#&/'$8%:\u0127% )(%'#($'#(#'#("'#&'#`),c(";\xBE"),c(`%3\u0128""5&7\u0129/k#;./b$;\xC1/Y$$%;A/,#;\xC1/#$+")("'#&'#06*%;A/,#;\xC1/#$+")("'#&'#&/#$+$)($'#(#'#("'#&'#.# &;\xBF`),c(`%;6/k#;./b$;\xC0/Y$$%;A/,#;\xC0/#$+")("'#&'#06*%;A/,#;\xC0/#$+")("'#&'#&/#$+$)($'#(#'#("'#&'#`),c(`%;6/;#;</2$;6.# &;H/#$+#)(#'#("'#&'#`),c(";\xC2.G &;\xC4.A &;\xC6.; &;\xC8.5 &;\xC9./ &;\xCA.) &;\xCB.# &;\xC0"),c(`%3\u012A""5%7\u012B/5#;</,$;\xC3/#$+#)(#'#("'#&'#`),c("%;I/' 8!:\u012C!! )"),c(`%3\u012D""5&7\u012E/\x97#;</\x8E$;D/\x85$;\xC5/|$$%$;'/&#0#*;'&&&#/,#;\xC5/#$+")("'#&'#0C*%$;'/&#0#*;'&&&#/,#;\xC5/#$+")("'#&'#&/,$;E/#$+&)(&'#(%'#($'#(#'#("'#&'#`),c(";t.# &;w"),c(`%3\u012F""5%7\u0130/5#;</,$;\xC7/#$+#)(#'#("'#&'#`),c("%;I/' 8!:\u0131!! )"),c(`%3\u0132""5&7\u0133/:#;</1$;I/($8#:\u0134#! )(#'#("'#&'#`),c(`%3\u0135""5%7\u0136/]#;</T$%3\u0137""5$7\u0138/& 8!:\u0139! ).4 &%3\u013A""5%7\u013B/& 8!:\u013C! )/#$+#)(#'#("'#&'#`),c(`%3\u013D""5)7\u013E/R#;</I$3\u013F""5#7\u0140./ &3\u0141""5(7\u0142.# &;6/($8#:\u0143#! )(#'#("'#&'#`),c(`%3\u0144""5#7\u0145/\x93#;</\x8A$;D/\x81$%;\xCC/e#$%2D""6D7E/,#;\xCC/#$+")("'#&'#0<*%2D""6D7E/,#;\xCC/#$+")("'#&'#&/#$+")("'#&'#/,$;E/#$+%)(%'#($'#(#'#("'#&'#`),c(`%3\u0146""5(7\u0147./ &3\u0148""5$7\u0149.# &;6/' 8!:\u014A!! )`),c(`%;6/Y#$%;A/,#;6/#$+")("'#&'#06*%;A/,#;6/#$+")("'#&'#&/#$+")("'#&'#`),c(`%;\xCF/G#;./>$;\xCF/5$;./,$;\x90/#$+%)(%'#($'#(#'#("'#&'#`),c("%$;!/&#0#*;!&&&#/' 8!:\u014B!! )"),c(`%;\xD1/]#$%;A/,#;\xD1/#$+")("'#&'#06*%;A/,#;\xD1/#$+")("'#&'#&/'$8":\u014C" )("'#&'#`),c(`%;\x99/]#$%;B/,#;\xA0/#$+")("'#&'#06*%;B/,#;\xA0/#$+")("'#&'#&/'$8":\u014D" )("'#&'#`),c(`%;L.O &;\x99.I &%;@." &"/:#;t/1$;?." &"/#$+#)(#'#("'#&'#/]#$%;B/,#;\xA0/#$+")("'#&'#06*%;B/,#;\xA0/#$+")("'#&'#&/'$8":\u014E" )("'#&'#`),c(`%;\xD4/]#$%;B/,#;\xD5/#$+")("'#&'#06*%;B/,#;\xD5/#$+")("'#&'#&/'$8":\u014F" )("'#&'#`),c("%;\x96/& 8!:\u0150! )"),c(`%3\u0151""5(7\u0152/:#;</1$;6/($8#:\u0153#! )(#'#("'#&'#.g &%3\u0154""5&7\u0155/:#;</1$;6/($8#:\u0156#! )(#'#("'#&'#.: &%3\u0157""5*7\u0158/& 8!:\u0159! ).# &;\xA0`),c(`%%;6/k#$%;A/2#;6/)$8":\u015A""$ )("'#&'#0<*%;A/2#;6/)$8":\u015A""$ )("'#&'#&/)$8":\u015B""! )("'#&'#." &"/' 8!:\u015C!! )`),c(`%;\xD8/Y#$%;A/,#;\xD8/#$+")("'#&'#06*%;A/,#;\xD8/#$+")("'#&'#&/#$+")("'#&'#`),c(`%;\x99/Y#$%;B/,#;\xA0/#$+")("'#&'#06*%;B/,#;\xA0/#$+")("'#&'#&/#$+")("'#&'#`),c("%$;!/&#0#*;!&&&#/' 8!:\u015D!! )"),c(`%;\xDB/Y#$%;B/,#;\xDC/#$+")("'#&'#06*%;B/,#;\xDC/#$+")("'#&'#&/#$+")("'#&'#`),c(`%3\u015E""5&7\u015F.; &3\u0160""5'7\u0161./ &3\u0162""5*7\u0163.# &;6/& 8!:\u0164! )`),c(`%3\u0165""5&7\u0166/:#;</1$;\xDD/($8#:\u0167#! )(#'#("'#&'#.} &%3\xF5""5'7\xF6/:#;</1$;\x9E/($8#:\u0168#! )(#'#("'#&'#.P &%3\u0169""5+7\u016A/:#;</1$;\x9E/($8#:\u016B#! )(#'#("'#&'#.# &;\xA0`),c(`3\u016C""5+7\u016D.k &3\u016E""5)7\u016F._ &3\u0170""5(7\u0171.S &3\u0172""5'7\u0173.G &3\u0174""5&7\u0175.; &3\u0176""5*7\u0177./ &3\u0178""5)7\u0179.# &;6`),c(';1." &"'),c(`%%;6/k#$%;A/2#;6/)$8":\u015A""$ )("'#&'#0<*%;A/2#;6/)$8":\u015A""$ )("'#&'#&/)$8":\u015B""! )("'#&'#." &"/' 8!:\u017A!! )`),c(`%;L.# &;\x99/]#$%;B/,#;\xE1/#$+")("'#&'#06*%;B/,#;\xE1/#$+")("'#&'#&/'$8":\u017B" )("'#&'#`),c(";\xB9.# &;\xA0"),c(`%;\xE3/Y#$%;A/,#;\xE3/#$+")("'#&'#06*%;A/,#;\xE3/#$+")("'#&'#&/#$+")("'#&'#`),c(`%;\xEA/k#;./b$;\xED/Y$$%;B/,#;\xE4/#$+")("'#&'#06*%;B/,#;\xE4/#$+")("'#&'#&/#$+$)($'#(#'#("'#&'#`),c(";\xE5.; &;\xE6.5 &;\xE7./ &;\xE8.) &;\xE9.# &;\xA0"),c(`%3\u017C""5#7\u017D/:#;</1$;\xF0/($8#:\u017E#! )(#'#("'#&'#`),c(`%3\u017F""5%7\u0180/:#;</1$;T/($8#:\u0181#! )(#'#("'#&'#`),c(`%3\u0182""5(7\u0183/F#;</=$;\\.) &;Y.# &;X/($8#:\u0184#! )(#'#("'#&'#`),c(`%3\u0185""5&7\u0186/:#;</1$;6/($8#:\u0187#! )(#'#("'#&'#`),c(`%3\u0188""5%7\u0189/A#;</8$$;!0#*;!&/($8#:\u018A#! )(#'#("'#&'#`),c(`%;\xEB/G#;;/>$;6/5$;;/,$;\xEC/#$+%)(%'#($'#(#'#("'#&'#`),c(`%3\x92""5#7\xD3.# &;6/' 8!:\u018B!! )`),c(`%3\xB1""5#7\u018C.G &3\xB3""5#7\u018D.; &3\xB7""5#7\u018E./ &3\xB5""5$7\u018F.# &;6/' 8!:\u0190!! )`),c(`%;\xEE/D#%;C/,#;\xEF/#$+")("'#&'#." &"/#$+")("'#&'#`),c("%;U.) &;\\.# &;X/& 8!:\u0191! )"),c(`%%;!." &"/[#;!." &"/M$;!." &"/?$;!." &"/1$;!." &"/#$+%)(%'#($'#(#'#("'#&'#/' 8!:\u0192!! )`),c(`%%;!/?#;!." &"/1$;!." &"/#$+#)(#'#("'#&'#/' 8!:\u0193!! )`),c(";\xBE"),c(`%;\x9E/^#$%;B/,#;\xF3/#$+")("'#&'#06*%;B/,#;\xF3/#$+")("'#&'#&/($8":\u0194"!!)("'#&'#`),c(";\xF4.# &;\xA0"),c(`%2\u0195""6\u01957\u0196/L#;</C$2\u0197""6\u01977\u0198.) &2\u0199""6\u01997\u019A/($8#:\u019B#! )(#'#("'#&'#`),c(`%;\x9E/^#$%;B/,#;\xA0/#$+")("'#&'#06*%;B/,#;\xA0/#$+")("'#&'#&/($8":\u019C"!!)("'#&'#`),c(`%;6/5#;0/,$;\xF7/#$+#)(#'#("'#&'#`),c("$;2.) &;4.# &;.0/*;2.) &;4.# &;.&"),c("$;%0#*;%&"),c(`%;\xFA/;#28""6879/,$;\xFB/#$+#)(#'#("'#&'#`),c(`%3\u019D""5%7\u019E.) &3\u019F""5$7\u01A0/' 8!:\u01A1!! )`),c(`%;\xFC/J#%28""6879/,#;^/#$+")("'#&'#." &"/#$+")("'#&'#`),c("%;\\.) &;X.# &;\x82/' 8!:\u01A2!! )"),c(';".S &;!.M &2F""6F7G.A &2J""6J7K.5 &2H""6H7I.) &2N""6N7O'),c('2L""6L7M.\x95 &2B""6B7C.\x89 &2<""6<7=.} &2R""6R7S.q &2T""6T7U.e &2V""6V7W.Y &2P""6P7Q.M &2@""6@7A.A &2D""6D7E.5 &22""6273.) &2>""6>7?'),c(`%;\u0100/b#28""6879/S$;\xFB/J$%2\u01A3""6\u01A37\u01A4/,#;\xEC/#$+")("'#&'#." &"/#$+$)($'#(#'#("'#&'#`),c(`%3\u01A5""5%7\u01A6.) &3\u01A7""5$7\u01A8/' 8!:\u01A1!! )`),c(`%3\xB1""5#7\xB2.6 &3\xB3""5#7\xB4.* &$;+0#*;+&/' 8!:\u01A9!! )`),c(`%;\u0104/\x87#2F""6F7G/x$;\u0103/o$2F""6F7G/\`$;\u0103/W$2F""6F7G/H$;\u0103/?$2F""6F7G/0$;\u0105/'$8):\u01AA) )()'#(('#(''#(&'#(%'#($'#(#'#("'#&'#`),c(`%;#/>#;#/5$;#/,$;#/#$+$)($'#(#'#("'#&'#`),c(`%;\u0103/,#;\u0103/#$+")("'#&'#`),c(`%;\u0103/5#;\u0103/,$;\u0103/#$+#)(#'#("'#&'#`),c(`%;q/T#$;m0#*;m&/D$%; /,#;\xF8/#$+")("'#&'#." &"/#$+#)(#'#("'#&'#`),c(`%2\u01AB""6\u01AB7\u01AC.) &2\u01AD""6\u01AD7\u01AE/w#;0/n$;\u0108/e$$%;B/2#;\u0109.# &;\xA0/#$+")("'#&'#0<*%;B/2#;\u0109.# &;\xA0/#$+")("'#&'#&/#$+$)($'#(#'#("'#&'#`),c(";\x99.# &;L"),c(`%2\u01AF""6\u01AF7\u01B0/5#;</,$;\u010A/#$+#)(#'#("'#&'#`),c(`%;D/S#;,/J$2:""6:7;/;$;,.# &;T/,$;E/#$+%)(%'#($'#(#'#("'#&'#`)],d=0,h=0,l=[{line:1,column:1}],u=0,T=[],A=0,_;if(e.startRule!==void 0){if(!(e.startRule in i))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');s=i[e.startRule]}function $(){return n.substring(h,d)}function N(){return B(h,d)}function P(g,E){throw E=E!==void 0?E:B(h,d),R([U(g)],n.substring(h,d),E)}function k(g,E){throw E=E!==void 0?E:B(h,d),y(g,E)}function C(g,E){return{type:"literal",text:g,ignoreCase:E}}function f(g,E,m){return{type:"class",parts:g,inverted:E,ignoreCase:m}}function x(){return{type:"any"}}function w(){return{type:"end"}}function U(g){return{type:"other",description:g}}function K(g){let E=l[g],m;if(E)return E;for(m=g-1;!l[m];)m--;for(E=l[m],E={line:E.line,column:E.column};m<g;)n.charCodeAt(m)===10?(E.line++,E.column=1):E.column++,m++;return l[g]=E,E}function B(g,E){let m=K(g),fe=K(E);return{source:r,start:{offset:g,line:m.line,column:m.column},end:{offset:E,line:fe.line,column:fe.column}}}function z(g){d<u||(d>u&&(u=d,T=[]),T.push(g))}function y(g,E){return new Ke(g,[],"",E)}function R(g,E,m){return new Ke(Ke.buildMessage(g,E),g,E,m)}function c(g){return g.split("").map(E=>E.charCodeAt(0)-32)}function S(g){let E=a[g],m=0,fe=[],q=E.length,Re=[],D=[],F;for(;;){for(;m<q;)switch(E[m]){case 0:D.push(o[E[m+1]]),m+=2;break;case 1:D.push(void 0),m++;break;case 2:D.push(null),m++;break;case 3:D.push(t),m++;break;case 4:D.push([]),m++;break;case 5:D.push(d),m++;break;case 6:D.pop(),m++;break;case 7:d=D.pop(),m++;break;case 8:D.length-=E[m+1],m+=2;break;case 9:D.splice(-2,1),m++;break;case 10:D[D.length-2].push(D.pop()),m++;break;case 11:D.push(D.splice(D.length-E[m+1],E[m+1])),m+=2;break;case 12:D.push(n.substring(D.pop(),d)),m++;break;case 13:Re.push(q),fe.push(m+3+E[m+1]+E[m+2]),D[D.length-1]?(q=m+3+E[m+1],m+=3):(q=m+3+E[m+1]+E[m+2],m+=3+E[m+1]);break;case 14:Re.push(q),fe.push(m+3+E[m+1]+E[m+2]),D[D.length-1]===t?(q=m+3+E[m+1],m+=3):(q=m+3+E[m+1]+E[m+2],m+=3+E[m+1]);break;case 15:Re.push(q),fe.push(m+3+E[m+1]+E[m+2]),D[D.length-1]!==t?(q=m+3+E[m+1],m+=3):(q=m+3+E[m+1]+E[m+2],m+=3+E[m+1]);break;case 16:D[D.length-1]!==t?(Re.push(q),fe.push(m),q=m+2+E[m+1],m+=2):m+=2+E[m+1];break;case 17:Re.push(q),fe.push(m+3+E[m+1]+E[m+2]),n.length>d?(q=m+3+E[m+1],m+=3):(q=m+3+E[m+1]+E[m+2],m+=3+E[m+1]);break;case 18:Re.push(q),fe.push(m+4+E[m+2]+E[m+3]),n.substr(d,o[E[m+1]].length)===o[E[m+1]]?(q=m+4+E[m+2],m+=4):(q=m+4+E[m+2]+E[m+3],m+=4+E[m+2]);break;case 19:Re.push(q),fe.push(m+4+E[m+2]+E[m+3]),n.substr(d,o[E[m+1]].length).toLowerCase()===o[E[m+1]]?(q=m+4+E[m+2],m+=4):(q=m+4+E[m+2]+E[m+3],m+=4+E[m+2]);break;case 20:Re.push(q),fe.push(m+4+E[m+2]+E[m+3]),o[E[m+1]].test(n.charAt(d))?(q=m+4+E[m+2],m+=4):(q=m+4+E[m+2]+E[m+3],m+=4+E[m+2]);break;case 21:D.push(n.substr(d,E[m+1])),d+=E[m+1],m+=2;break;case 22:D.push(o[E[m+1]]),d+=o[E[m+1]].length,m+=2;break;case 23:D.push(t),A===0&&z(o[E[m+1]]),m+=2;break;case 24:h=D[D.length-1-E[m+1]],m+=2;break;case 25:h=d,m++;break;case 26:F=E.slice(m+4,m+4+E[m+3]).map(function(Se){return D[D.length-1-Se]}),D.splice(D.length-E[m+2],E[m+2],o[E[m+1]].apply(null,F)),m+=4+E[m+3];break;case 27:D.push(S(E[m+1])),m+=2;break;case 28:A++,m++;break;case 29:A--,m++;break;default:throw new Error("Invalid opcode: "+E[m]+".")}if(Re.length>0)q=Re.pop(),m=fe.pop();else break}return D[0]}e.data={};function Vt(g,E){return[g].concat(E)}if(_=S(s),_!==t&&d===n.length)return _;throw _!==t&&d<n.length&&z(w()),R(T,u<n.length?n.charAt(u):null,u<n.length?B(u,u+1):B(u,u))}var Fn=La;var W;(function(n){function e(i,s){let o={startRule:s};try{Fn(i,o)}catch{o.data=-1}return o.data}n.parse=e;function t(i){let s=n.parse(i,"Name_Addr_Header");return s!==-1?s:void 0}n.nameAddrHeaderParse=t;function r(i){let s=n.parse(i,"SIP_URI");return s!==-1?s:void 0}n.URIParse=r})(W=W||(W={}));var Fa={100:"Trying",180:"Ringing",181:"Call Is Being Forwarded",182:"Queued",183:"Session Progress",199:"Early Dialog Terminated",200:"OK",202:"Accepted",204:"No Notification",300:"Multiple Choices",301:"Moved Permanently",302:"Moved Temporarily",305:"Use Proxy",380:"Alternative Service",400:"Bad Request",401:"Unauthorized",402:"Payment Required",403:"Forbidden",404:"Not Found",405:"Method Not Allowed",406:"Not Acceptable",407:"Proxy Authentication Required",408:"Request Timeout",410:"Gone",412:"Conditional Request Failed",413:"Request Entity Too Large",414:"Request-URI Too Long",415:"Unsupported Media Type",416:"Unsupported URI Scheme",417:"Unknown Resource-Priority",420:"Bad Extension",421:"Extension Required",422:"Session Interval Too Small",423:"Interval Too Brief",428:"Use Identity Header",429:"Provide Referrer Identity",430:"Flow Failed",433:"Anonymity Disallowed",436:"Bad Identity-Info",437:"Unsupported Certificate",438:"Invalid Identity Header",439:"First Hop Lacks Outbound Support",440:"Max-Breadth Exceeded",469:"Bad Info Package",470:"Consent Needed",478:"Unresolvable Destination",480:"Temporarily Unavailable",481:"Call/Transaction Does Not Exist",482:"Loop Detected",483:"Too Many Hops",484:"Address Incomplete",485:"Ambiguous",486:"Busy Here",487:"Request Terminated",488:"Not Acceptable Here",489:"Bad Event",491:"Request Pending",493:"Undecipherable",494:"Security Agreement Required",500:"Internal Server Error",501:"Not Implemented",502:"Bad Gateway",503:"Service Unavailable",504:"Server Time-out",505:"Version Not Supported",513:"Message Too Large",580:"Precondition Failure",600:"Busy Everywhere",603:"Decline",604:"Does Not Exist Anywhere",606:"Not Acceptable"};function Ue(n,e=32){let t="";for(let r=0;r<n;r++){let i=Math.floor(Math.random()*e);t+=i.toString(e)}return t}function Ze(n){return Fa[n]||""}function Xe(){return Ue(10)}function De(n){let e={"Call-Id":"Call-ID",Cseq:"CSeq","Min-Se":"Min-SE",Rack:"RAck",Rseq:"RSeq","Www-Authenticate":"WWW-Authenticate"},t=n.toLowerCase().replace(/_/g,"-").split("-"),r=t.length,i="";for(let s=0;s<r;s++)s!==0&&(i+="-"),i+=t[s].charAt(0).toUpperCase()+t[s].substring(1);return e[i]&&(i=e[i]),i}function Qe(n){return encodeURIComponent(n).replace(/%[A-F\d]{2}/g,"U").length}var Rt=class{constructor(){this.headers={}}addHeader(e,t){let r={raw:t};e=De(e),this.headers[e]?this.headers[e].push(r):this.headers[e]=[r]}getHeader(e){let t=this.headers[De(e)];if(t){if(t[0])return t[0].raw}else return}getHeaders(e){let t=this.headers[De(e)],r=[];if(!t)return[];for(let i of t)r.push(i.raw);return r}hasHeader(e){return!!this.headers[De(e)]}parseHeader(e,t=0){if(e=De(e),this.headers[e]){if(t>=this.headers[e].length)return}else return;let r=this.headers[e][t],i=r.raw;if(r.parsed)return r.parsed;let s=W.parse(i,e.replace(/-/g,"_"));if(s===-1){this.headers[e].splice(t,1);return}else return r.parsed=s,s}s(e,t=0){return this.parseHeader(e,t)}setHeader(e,t){this.headers[De(e)]=[{raw:t}]}toString(){return this.data}};var Pe=class extends Rt{constructor(){super()}};var me=class extends Rt{constructor(){super()}};var Ne=class{constructor(e,t,r,i,s,o,a){this.headers={},this.extraHeaders=[],this.options=Ne.getDefaultOptions(),s&&(this.options=Object.assign(Object.assign({},this.options),s),this.options.optionTags&&this.options.optionTags.length&&(this.options.optionTags=this.options.optionTags.slice()),this.options.routeSet&&this.options.routeSet.length&&(this.options.routeSet=this.options.routeSet.slice())),o&&o.length&&(this.extraHeaders=o.slice()),a&&(this.body={body:a.content,contentType:a.contentType}),this.method=e,this.ruri=t.clone(),this.fromURI=r.clone(),this.fromTag=this.options.fromTag?this.options.fromTag:Xe(),this.from=Ne.makeNameAddrHeader(this.fromURI,this.options.fromDisplayName,this.fromTag),this.toURI=i.clone(),this.toTag=this.options.toTag,this.to=Ne.makeNameAddrHeader(this.toURI,this.options.toDisplayName,this.toTag),this.callId=this.options.callId?this.options.callId:this.options.callIdPrefix+Ue(15),this.cseq=this.options.cseq,this.setHeader("route",this.options.routeSet),this.setHeader("via",""),this.setHeader("to",this.to.toString()),this.setHeader("from",this.from.toString()),this.setHeader("cseq",this.cseq+" "+this.method),this.setHeader("call-id",this.callId),this.setHeader("max-forwards","70")}static getDefaultOptions(){return{callId:"",callIdPrefix:"",cseq:1,toDisplayName:"",toTag:"",fromDisplayName:"",fromTag:"",forceRport:!1,hackViaTcp:!1,optionTags:["outbound"],routeSet:[],userAgentString:"sip.js",viaHost:""}}static makeNameAddrHeader(e,t,r){let i={};return r&&(i.tag=r),new ee(e,t,i)}getHeader(e){let t=this.headers[De(e)];if(t){if(t[0])return t[0]}else{let r=new RegExp("^\\s*"+e+"\\s*:","i");for(let i of this.extraHeaders)if(r.test(i))return i.substring(i.indexOf(":")+1).trim()}}getHeaders(e){let t=[],r=this.headers[De(e)];if(r)for(let i of r)t.push(i);else{let i=new RegExp("^\\s*"+e+"\\s*:","i");for(let s of this.extraHeaders)i.test(s)&&t.push(s.substring(s.indexOf(":")+1).trim())}return t}hasHeader(e){if(this.headers[De(e)])return!0;{let t=new RegExp("^\\s*"+e+"\\s*:","i");for(let r of this.extraHeaders)if(t.test(r))return!0}return!1}setHeader(e,t){this.headers[De(e)]=t instanceof Array?t:[t]}setViaHeader(e,t){this.options.hackViaTcp&&(t="TCP");let r="SIP/2.0/"+t;r+=" "+this.options.viaHost+";branch="+e,this.options.forceRport&&(r+=";rport"),this.setHeader("via",r),this.branch=e}toString(){let e="";e+=this.method+" "+this.ruri.toRaw()+` SIP/2.0\r
@@ -27,7 +27,7 @@ var WebCall=(()=>{var Gn=Object.create;var Yt=Object.defineProperty;var Vn=Objec
27
27
  \r
28
28
  `:e+=`Content-Length: 0\r
29
29
  \r
30
- `,e}};function Un(n){return n==="application/sdp"?"session":"render"}function St(n){let e=typeof n=="string"?n:n.body,t=typeof n=="string"?"application/sdp":n.contentType;return{contentDisposition:Un(t),contentType:t,content:e}}function Hi(n){return n&&typeof n.content=="string"&&typeof n.contentType=="string"&&n.contentDisposition===void 0?!0:typeof n.contentDisposition=="string"}function et(n){let e,t,r;if(n instanceof Pe&&n.body){let i=n.parseHeader("Content-Disposition");e=i?i.type:void 0,t=n.parseHeader("Content-Type"),r=n.body}if(n instanceof me&&n.body){let i=n.parseHeader("Content-Disposition");e=i?i.type:void 0,t=n.parseHeader("Content-Type"),r=n.body}if(n instanceof Ne&&n.body)if(e=n.getHeader("Content-Disposition"),t=n.getHeader("Content-Type"),typeof n.body=="string"){if(!t)throw new Error("Header content type header does not equal body content type.");r=n.body}else{if(t&&t!==n.body.contentType)throw new Error("Header content type header does not equal body content type.");t=n.body.contentType,r=n.body.body}if(Hi(n)&&(e=n.contentDisposition,t=n.contentType,r=n.content),!!r){if(t&&!e&&(e=Un(t)),!e)throw new Error("Content disposition undefined.");if(!t)throw new Error("Content type undefined.");return{contentDisposition:e,contentType:t,content:r}}}var we;(function(n){n.Initial="Initial",n.Early="Early",n.AckWait="AckWait",n.Confirmed="Confirmed",n.Terminated="Terminated"})(we=we||(we={}));var b;(function(n){n.Initial="Initial",n.HaveLocalOffer="HaveLocalOffer",n.HaveRemoteOffer="HaveRemoteOffer",n.Stable="Stable",n.Closed="Closed"})(b=b||(b={}));var J={T1:500,T2:4e3,T4:5e3,TIMER_B:32e3,TIMER_D:0,TIMER_F:32e3,TIMER_H:32e3,TIMER_I:0,TIMER_J:0,TIMER_K:0,TIMER_L:32e3,TIMER_M:32e3,TIMER_N:32e3,PROVISIONAL_RESPONSE_INTERVAL:6e4};var Ae=class extends he{constructor(e){super(e||"Transaction state error.")}};var I;(function(n){n.ACK="ACK",n.BYE="BYE",n.CANCEL="CANCEL",n.INFO="INFO",n.INVITE="INVITE",n.MESSAGE="MESSAGE",n.NOTIFY="NOTIFY",n.OPTIONS="OPTIONS",n.REGISTER="REGISTER",n.UPDATE="UPDATE",n.SUBSCRIBE="SUBSCRIBE",n.PUBLISH="PUBLISH",n.REFER="REFER",n.PRACK="PRACK"})(I=I||(I={}));var Oe=[I.ACK,I.BYE,I.CANCEL,I.INFO,I.INVITE,I.MESSAGE,I.NOTIFY,I.OPTIONS,I.PRACK,I.REFER,I.REGISTER,I.SUBSCRIBE];var yt=class{constructor(e){this.incomingMessageRequest=e}get request(){return this.incomingMessageRequest.message}accept(e){return this.incomingMessageRequest.accept(e),Promise.resolve()}reject(e){return this.incomingMessageRequest.reject(e),Promise.resolve()}};var lt=class{constructor(e){this.incomingNotifyRequest=e}get request(){return this.incomingNotifyRequest.message}accept(e){return this.incomingNotifyRequest.accept(e),Promise.resolve()}reject(e){return this.incomingNotifyRequest.reject(e),Promise.resolve()}};var yr=class{constructor(e,t){this.incomingReferRequest=e,this.session=t}get referTo(){let e=this.incomingReferRequest.message.parseHeader("refer-to");if(!(e instanceof ee))throw new Error("Failed to parse Refer-To header.");return e}get referredBy(){return this.incomingReferRequest.message.getHeader("referred-by")}get replaces(){let e=this.referTo.uri.getHeader("replaces");return e instanceof Array?e[0]:e}get request(){return this.incomingReferRequest.message}accept(e={statusCode:202}){return this.incomingReferRequest.accept(e),Promise.resolve()}reject(e){return this.incomingReferRequest.reject(e),Promise.resolve()}makeInviter(e){if(this.inviter)return this.inviter;let t=this.referTo.uri.clone();t.clearHeaders(),e=e||{};let r=(e.extraHeaders||[]).slice(),i=this.replaces;i&&r.push("Replaces: "+decodeURIComponent(i));let s=this.referredBy;return s&&r.push("Referred-By: "+s),e.extraHeaders=r,this.inviter=this.session.userAgent._makeInviter(t,e),this.inviter._referred=this.session,this.session._referral=this.inviter,this.inviter}};var v;(function(n){n.Initial="Initial",n.Establishing="Establishing",n.Established="Established",n.Terminating="Terminating",n.Terminated="Terminated"})(v=v||(v={}));var qe=class{constructor(e,t={}){this.pendingReinvite=!1,this.pendingReinviteAck=!1,this._state=v.Initial,this.delegate=t.delegate,this._stateEventEmitter=new He,this._userAgent=e}dispose(){switch(this.logger.log(`Session ${this.id} in state ${this._state} is being disposed`),delete this.userAgent._sessions[this.id],this._sessionDescriptionHandler&&this._sessionDescriptionHandler.close(),this.state){case v.Initial:break;case v.Establishing:break;case v.Established:return new Promise(e=>{this._bye({onAccept:()=>e(),onRedirect:()=>e(),onReject:()=>e()})});case v.Terminating:break;case v.Terminated:break;default:throw new Error("Unknown state.")}return Promise.resolve()}get assertedIdentity(){return this._assertedIdentity}get dialog(){return this._dialog}get id(){return this._id}get replacee(){return this._replacee}get sessionDescriptionHandler(){return this._sessionDescriptionHandler}get sessionDescriptionHandlerFactory(){return this.userAgent.configuration.sessionDescriptionHandlerFactory}get sessionDescriptionHandlerModifiers(){return this._sessionDescriptionHandlerModifiers||[]}set sessionDescriptionHandlerModifiers(e){this._sessionDescriptionHandlerModifiers=e.slice()}get sessionDescriptionHandlerOptions(){return this._sessionDescriptionHandlerOptions||{}}set sessionDescriptionHandlerOptions(e){this._sessionDescriptionHandlerOptions=Object.assign({},e)}get sessionDescriptionHandlerModifiersReInvite(){return this._sessionDescriptionHandlerModifiersReInvite||[]}set sessionDescriptionHandlerModifiersReInvite(e){this._sessionDescriptionHandlerModifiersReInvite=e.slice()}get sessionDescriptionHandlerOptionsReInvite(){return this._sessionDescriptionHandlerOptionsReInvite||{}}set sessionDescriptionHandlerOptionsReInvite(e){this._sessionDescriptionHandlerOptionsReInvite=Object.assign({},e)}get state(){return this._state}get stateChange(){return this._stateEventEmitter}get userAgent(){return this._userAgent}bye(e={}){let t="Session.bye() may only be called if established session.";switch(this.state){case v.Initial:typeof this.cancel=="function"?(t+=" However Inviter.invite() has not yet been called.",t+=" Perhaps you should have called Inviter.cancel()?"):typeof this.reject=="function"&&(t+=" However Invitation.accept() has not yet been called.",t+=" Perhaps you should have called Invitation.reject()?");break;case v.Establishing:typeof this.cancel=="function"?(t+=" However a dialog does not yet exist.",t+=" Perhaps you should have called Inviter.cancel()?"):typeof this.reject=="function"&&(t+=" However Invitation.accept() has not yet been called (or not yet resolved).",t+=" Perhaps you should have called Invitation.reject()?");break;case v.Established:{let r=e.requestDelegate,i=this.copyRequestOptions(e.requestOptions);return this._bye(r,i)}case v.Terminating:t+=" However this session is already terminating.",typeof this.cancel=="function"?t+=" Perhaps you have already called Inviter.cancel()?":typeof this.reject=="function"&&(t+=" Perhaps you have already called Session.bye()?");break;case v.Terminated:t+=" However this session is already terminated.";break;default:throw new Error("Unknown state")}return this.logger.error(t),Promise.reject(new Error(`Invalid session state ${this.state}`))}info(e={}){if(this.state!==v.Established){let i="Session.info() may only be called if established session.";return this.logger.error(i),Promise.reject(new Error(`Invalid session state ${this.state}`))}let t=e.requestDelegate,r=this.copyRequestOptions(e.requestOptions);return this._info(t,r)}invite(e={}){if(this.logger.log("Session.invite"),this.state!==v.Established)return Promise.reject(new Error(`Invalid session state ${this.state}`));if(this.pendingReinvite)return Promise.reject(new Fe("Reinvite in progress. Please wait until complete, then try again."));this.pendingReinvite=!0,e.sessionDescriptionHandlerModifiers&&(this.sessionDescriptionHandlerModifiersReInvite=e.sessionDescriptionHandlerModifiers),e.sessionDescriptionHandlerOptions&&(this.sessionDescriptionHandlerOptionsReInvite=e.sessionDescriptionHandlerOptions);let t={onAccept:s=>{let o=et(s.message);if(!o){this.logger.error("Received 2xx response to re-INVITE without a session description"),this.ackAndBye(s,400,"Missing session description"),this.stateTransition(v.Terminated),this.pendingReinvite=!1;return}if(e.withoutSdp){let a={sessionDescriptionHandlerOptions:this.sessionDescriptionHandlerOptionsReInvite,sessionDescriptionHandlerModifiers:this.sessionDescriptionHandlerModifiersReInvite};this.setOfferAndGetAnswer(o,a).then(d=>{s.ack({body:d})}).catch(d=>{this.logger.error("Failed to handle offer in 2xx response to re-INVITE"),this.logger.error(d.message),this.state===v.Terminated?s.ack():(this.ackAndBye(s,488,"Bad Media Description"),this.stateTransition(v.Terminated))}).then(()=>{this.pendingReinvite=!1,e.requestDelegate&&e.requestDelegate.onAccept&&e.requestDelegate.onAccept(s)})}else{let a={sessionDescriptionHandlerOptions:this.sessionDescriptionHandlerOptionsReInvite,sessionDescriptionHandlerModifiers:this.sessionDescriptionHandlerModifiersReInvite};this.setAnswer(o,a).then(()=>{s.ack()}).catch(d=>{this.logger.error("Failed to handle answer in 2xx response to re-INVITE"),this.logger.error(d.message),this.state!==v.Terminated?(this.ackAndBye(s,488,"Bad Media Description"),this.stateTransition(v.Terminated)):s.ack()}).then(()=>{this.pendingReinvite=!1,e.requestDelegate&&e.requestDelegate.onAccept&&e.requestDelegate.onAccept(s)})}},onProgress:s=>{},onRedirect:s=>{},onReject:s=>{this.logger.warn("Received a non-2xx response to re-INVITE"),this.pendingReinvite=!1,e.withoutSdp?e.requestDelegate&&e.requestDelegate.onReject&&e.requestDelegate.onReject(s):this.rollbackOffer().catch(o=>{if(this.logger.error("Failed to rollback offer on non-2xx response to re-INVITE"),this.logger.error(o.message),this.state!==v.Terminated){if(!this.dialog)throw new Error("Dialog undefined.");let a=[];a.push("Reason: "+this.getReasonHeaderValue(500,"Internal Server Error")),this.dialog.bye(void 0,{extraHeaders:a}),this.stateTransition(v.Terminated)}}).then(()=>{e.requestDelegate&&e.requestDelegate.onReject&&e.requestDelegate.onReject(s)})},onTrying:s=>{}},r=e.requestOptions||{};if(r.extraHeaders=(r.extraHeaders||[]).slice(),r.extraHeaders.push("Allow: "+Oe.toString()),r.extraHeaders.push("Contact: "+this._contact),e.withoutSdp){if(!this.dialog)throw this.pendingReinvite=!1,new Error("Dialog undefined.");return Promise.resolve(this.dialog.invite(t,r))}let i={sessionDescriptionHandlerOptions:this.sessionDescriptionHandlerOptionsReInvite,sessionDescriptionHandlerModifiers:this.sessionDescriptionHandlerModifiersReInvite};return this.getOffer(i).then(s=>{if(!this.dialog)throw this.pendingReinvite=!1,new Error("Dialog undefined.");return r.body=s,this.dialog.invite(t,r)}).catch(s=>{throw this.logger.error(s.message),this.logger.error("Failed to send re-INVITE"),this.pendingReinvite=!1,s})}message(e={}){if(this.state!==v.Established){let i="Session.message() may only be called if established session.";return this.logger.error(i),Promise.reject(new Error(`Invalid session state ${this.state}`))}let t=e.requestDelegate,r=this.copyRequestOptions(e.requestOptions);return this._message(t,r)}refer(e,t={}){if(this.state!==v.Established){let s="Session.refer() may only be called if established session.";return this.logger.error(s),Promise.reject(new Error(`Invalid session state ${this.state}`))}if(e instanceof qe&&!e.dialog){let s="Session.refer() may only be called with session which is established. You are perhaps attempting to attended transfer to a target for which there is not dialog yet established. Perhaps you are attempting a 'semi-attended' tansfer? Regardless, this is not supported. The recommended approached is to check to see if the target Session is in the Established state before calling refer(); if the state is not Established you may proceed by falling back using a URI as the target (blind transfer).";return this.logger.error(s),Promise.reject(new Error(`Invalid session state ${this.state}`))}let r=t.requestDelegate,i=this.copyRequestOptions(t.requestOptions);return i.extraHeaders=i.extraHeaders?i.extraHeaders.concat(this.referExtraHeaders(this.referToString(e))):this.referExtraHeaders(this.referToString(e)),this._refer(t.onNotify,r,i)}_bye(e,t){if(!this.dialog)return Promise.reject(new Error("Session dialog undefined."));let r=this.dialog;switch(r.sessionState){case we.Initial:throw new Error(`Invalid dialog state ${r.sessionState}`);case we.Early:throw new Error(`Invalid dialog state ${r.sessionState}`);case we.AckWait:return this.stateTransition(v.Terminating),new Promise(i=>{r.delegate={onAck:()=>{let s=r.bye(e,t);return this.stateTransition(v.Terminated),i(s),Promise.resolve()},onAckTimeout:()=>{let s=r.bye(e,t);this.stateTransition(v.Terminated),i(s)}}});case we.Confirmed:{let i=r.bye(e,t);return this.stateTransition(v.Terminated),Promise.resolve(i)}case we.Terminated:throw new Error(`Invalid dialog state ${r.sessionState}`);default:throw new Error("Unrecognized state.")}}_info(e,t){return this.dialog?Promise.resolve(this.dialog.info(e,t)):Promise.reject(new Error("Session dialog undefined."))}_message(e,t){return this.dialog?Promise.resolve(this.dialog.message(e,t)):Promise.reject(new Error("Session dialog undefined."))}_refer(e,t,r){return this.dialog?(this.onNotify=e,Promise.resolve(this.dialog.refer(t,r))):Promise.reject(new Error("Session dialog undefined."))}ackAndBye(e,t,r){e.ack();let i=[];t&&i.push("Reason: "+this.getReasonHeaderValue(t,r)),e.session.bye(void 0,{extraHeaders:i})}onAckRequest(e){if(this.logger.log("Session.onAckRequest"),this.state!==v.Established&&this.state!==v.Terminating)return this.logger.error(`ACK received while in state ${this.state}, dropping request`),Promise.resolve();let t=this.dialog;if(!t)throw new Error("Dialog undefined.");let r={sessionDescriptionHandlerOptions:this.pendingReinviteAck?this.sessionDescriptionHandlerOptionsReInvite:this.sessionDescriptionHandlerOptions,sessionDescriptionHandlerModifiers:this.pendingReinviteAck?this._sessionDescriptionHandlerModifiersReInvite:this._sessionDescriptionHandlerModifiers};if(this.delegate&&this.delegate.onAck){let i=new wr(e);this.delegate.onAck(i)}switch(this.pendingReinviteAck=!1,t.signalingState){case b.Initial:{this.logger.error(`Invalid signaling state ${t.signalingState}.`);let i=["Reason: "+this.getReasonHeaderValue(488,"Bad Media Description")];return t.bye(void 0,{extraHeaders:i}),this.stateTransition(v.Terminated),Promise.resolve()}case b.Stable:{let i=et(e.message);return i?i.contentDisposition==="render"?(this._renderbody=i.content,this._rendertype=i.contentType,Promise.resolve()):i.contentDisposition!=="session"?Promise.resolve():this.setAnswer(i,r).catch(s=>{this.logger.error(s.message);let o=["Reason: "+this.getReasonHeaderValue(488,"Bad Media Description")];t.bye(void 0,{extraHeaders:o}),this.stateTransition(v.Terminated)}):Promise.resolve()}case b.HaveLocalOffer:{this.logger.error(`Invalid signaling state ${t.signalingState}.`);let i=["Reason: "+this.getReasonHeaderValue(488,"Bad Media Description")];return t.bye(void 0,{extraHeaders:i}),this.stateTransition(v.Terminated),Promise.resolve()}case b.HaveRemoteOffer:{this.logger.error(`Invalid signaling state ${t.signalingState}.`);let i=["Reason: "+this.getReasonHeaderValue(488,"Bad Media Description")];return t.bye(void 0,{extraHeaders:i}),this.stateTransition(v.Terminated),Promise.resolve()}case b.Closed:throw new Error(`Invalid signaling state ${t.signalingState}.`);default:throw new Error(`Invalid signaling state ${t.signalingState}.`)}}onByeRequest(e){if(this.logger.log("Session.onByeRequest"),this.state!==v.Established){this.logger.error(`BYE received while in state ${this.state}, dropping request`);return}if(this.delegate&&this.delegate.onBye){let t=new Tr(e);this.delegate.onBye(t)}else e.accept();this.stateTransition(v.Terminated)}onInfoRequest(e){if(this.logger.log("Session.onInfoRequest"),this.state!==v.Established){this.logger.error(`INFO received while in state ${this.state}, dropping request`);return}if(this.delegate&&this.delegate.onInfo){let t=new Sr(e);this.delegate.onInfo(t)}else e.accept()}onInviteRequest(e){if(this.logger.log("Session.onInviteRequest"),this.state!==v.Established){this.logger.error(`INVITE received while in state ${this.state}, dropping request`);return}this.pendingReinviteAck=!0;let t=["Contact: "+this._contact];if(e.message.hasHeader("P-Asserted-Identity")){let i=e.message.getHeader("P-Asserted-Identity");if(!i)throw new Error("Header undefined.");this._assertedIdentity=W.nameAddrHeaderParse(i)}let r={sessionDescriptionHandlerOptions:this.sessionDescriptionHandlerOptionsReInvite,sessionDescriptionHandlerModifiers:this.sessionDescriptionHandlerModifiersReInvite};this.generateResponseOfferAnswerInDialog(r).then(i=>{let s=e.accept({statusCode:200,extraHeaders:t,body:i});this.delegate&&this.delegate.onInvite&&this.delegate.onInvite(e.message,s.message,200)}).catch(i=>{if(this.logger.error(i.message),this.logger.error("Failed to handle to re-INVITE request"),!this.dialog)throw new Error("Dialog undefined.");if(this.logger.error(this.dialog.signalingState),this.dialog.signalingState===b.Stable){let s=e.reject({statusCode:488});this.delegate&&this.delegate.onInvite&&this.delegate.onInvite(e.message,s.message,488);return}this.rollbackOffer().then(()=>{let s=e.reject({statusCode:488});this.delegate&&this.delegate.onInvite&&this.delegate.onInvite(e.message,s.message,488)}).catch(s=>{this.logger.error(s.message),this.logger.error("Failed to rollback offer on re-INVITE request");let o=e.reject({statusCode:488});if(this.state!==v.Terminated){if(!this.dialog)throw new Error("Dialog undefined.");let a=[];a.push("Reason: "+this.getReasonHeaderValue(500,"Internal Server Error")),this.dialog.bye(void 0,{extraHeaders:a}),this.stateTransition(v.Terminated)}this.delegate&&this.delegate.onInvite&&this.delegate.onInvite(e.message,o.message,488)})})}onMessageRequest(e){if(this.logger.log("Session.onMessageRequest"),this.state!==v.Established){this.logger.error(`MESSAGE received while in state ${this.state}, dropping request`);return}if(this.delegate&&this.delegate.onMessage){let t=new yt(e);this.delegate.onMessage(t)}else e.accept()}onNotifyRequest(e){if(this.logger.log("Session.onNotifyRequest"),this.state!==v.Established){this.logger.error(`NOTIFY received while in state ${this.state}, dropping request`);return}if(this.onNotify){let t=new lt(e);this.onNotify(t);return}if(this.delegate&&this.delegate.onNotify){let t=new lt(e);this.delegate.onNotify(t)}else e.accept()}onPrackRequest(e){if(this.logger.log("Session.onPrackRequest"),this.state!==v.Established){this.logger.error(`PRACK received while in state ${this.state}, dropping request`);return}throw new Error("Unimplemented.")}onReferRequest(e){if(this.logger.log("Session.onReferRequest"),this.state!==v.Established){this.logger.error(`REFER received while in state ${this.state}, dropping request`);return}if(!e.message.hasHeader("refer-to")){this.logger.warn("Invalid REFER packet. A refer-to header is required. Rejecting."),e.reject();return}let t=new yr(e,this);this.delegate&&this.delegate.onRefer?this.delegate.onRefer(t):(this.logger.log("No delegate available to handle REFER, automatically accepting and following."),t.accept().then(()=>t.makeInviter(this._referralInviterOptions).invite()).catch(r=>{this.logger.error(r.message)}))}generateResponseOfferAnswer(e,t){if(this.dialog)return this.generateResponseOfferAnswerInDialog(t);let r=et(e.message);return!r||r.contentDisposition!=="session"?this.getOffer(t):this.setOfferAndGetAnswer(r,t)}generateResponseOfferAnswerInDialog(e){if(!this.dialog)throw new Error("Dialog undefined.");switch(this.dialog.signalingState){case b.Initial:return this.getOffer(e);case b.HaveLocalOffer:return Promise.resolve(void 0);case b.HaveRemoteOffer:if(!this.dialog.offer)throw new Error(`Session offer undefined in signaling state ${this.dialog.signalingState}.`);return this.setOfferAndGetAnswer(this.dialog.offer,e);case b.Stable:return this.state!==v.Established?Promise.resolve(void 0):this.getOffer(e);case b.Closed:throw new Error(`Invalid signaling state ${this.dialog.signalingState}.`);default:throw new Error(`Invalid signaling state ${this.dialog.signalingState}.`)}}getOffer(e){let t=this.setupSessionDescriptionHandler(),r=e.sessionDescriptionHandlerOptions,i=e.sessionDescriptionHandlerModifiers;try{return t.getDescription(r,i).then(s=>St(s)).catch(s=>{this.logger.error("Session.getOffer: SDH getDescription rejected...");let o=s instanceof Error?s:new Error("Session.getOffer unknown error.");throw this.logger.error(o.message),o})}catch(s){this.logger.error("Session.getOffer: SDH getDescription threw...");let o=s instanceof Error?s:new Error(s);return this.logger.error(o.message),Promise.reject(o)}}rollbackOffer(){let e=this.setupSessionDescriptionHandler();if(e.rollbackDescription===void 0)return Promise.resolve();try{return e.rollbackDescription().catch(t=>{this.logger.error("Session.rollbackOffer: SDH rollbackDescription rejected...");let r=t instanceof Error?t:new Error("Session.rollbackOffer unknown error.");throw this.logger.error(r.message),r})}catch(t){this.logger.error("Session.rollbackOffer: SDH rollbackDescription threw...");let r=t instanceof Error?t:new Error(t);return this.logger.error(r.message),Promise.reject(r)}}setAnswer(e,t){let r=this.setupSessionDescriptionHandler(),i=t.sessionDescriptionHandlerOptions,s=t.sessionDescriptionHandlerModifiers;try{if(!r.hasDescription(e.contentType))return Promise.reject(new ct)}catch(o){this.logger.error("Session.setAnswer: SDH hasDescription threw...");let a=o instanceof Error?o:new Error(o);return this.logger.error(a.message),Promise.reject(a)}try{return r.setDescription(e.content,i,s).catch(o=>{this.logger.error("Session.setAnswer: SDH setDescription rejected...");let a=o instanceof Error?o:new Error("Session.setAnswer unknown error.");throw this.logger.error(a.message),a})}catch(o){this.logger.error("Session.setAnswer: SDH setDescription threw...");let a=o instanceof Error?o:new Error(o);return this.logger.error(a.message),Promise.reject(a)}}setOfferAndGetAnswer(e,t){let r=this.setupSessionDescriptionHandler(),i=t.sessionDescriptionHandlerOptions,s=t.sessionDescriptionHandlerModifiers;try{if(!r.hasDescription(e.contentType))return Promise.reject(new ct)}catch(o){this.logger.error("Session.setOfferAndGetAnswer: SDH hasDescription threw...");let a=o instanceof Error?o:new Error(o);return this.logger.error(a.message),Promise.reject(a)}try{return r.setDescription(e.content,i,s).then(()=>r.getDescription(i,s)).then(o=>St(o)).catch(o=>{this.logger.error("Session.setOfferAndGetAnswer: SDH setDescription or getDescription rejected...");let a=o instanceof Error?o:new Error("Session.setOfferAndGetAnswer unknown error.");throw this.logger.error(a.message),a})}catch(o){this.logger.error("Session.setOfferAndGetAnswer: SDH setDescription or getDescription threw...");let a=o instanceof Error?o:new Error(o);return this.logger.error(a.message),Promise.reject(a)}}setSessionDescriptionHandler(e){if(this._sessionDescriptionHandler)throw new Error("Session description handler defined.");this._sessionDescriptionHandler=e}setupSessionDescriptionHandler(){var e;return this._sessionDescriptionHandler?this._sessionDescriptionHandler:(this._sessionDescriptionHandler=this.sessionDescriptionHandlerFactory(this,this.userAgent.configuration.sessionDescriptionHandlerFactoryOptions),!((e=this.delegate)===null||e===void 0)&&e.onSessionDescriptionHandler&&this.delegate.onSessionDescriptionHandler(this._sessionDescriptionHandler,!1),this._sessionDescriptionHandler)}stateTransition(e){let t=()=>{throw new Error(`Invalid state transition from ${this._state} to ${e}`)};switch(this._state){case v.Initial:e!==v.Establishing&&e!==v.Established&&e!==v.Terminating&&e!==v.Terminated&&t();break;case v.Establishing:e!==v.Established&&e!==v.Terminating&&e!==v.Terminated&&t();break;case v.Established:e!==v.Terminating&&e!==v.Terminated&&t();break;case v.Terminating:e!==v.Terminated&&t();break;case v.Terminated:t();break;default:throw new Error("Unrecognized state.")}this._state=e,this.logger.log(`Session ${this.id} transitioned to state ${this._state}`),this._stateEventEmitter.emit(this._state),e===v.Terminated&&this.dispose()}copyRequestOptions(e={}){let t=e.extraHeaders?e.extraHeaders.slice():void 0,r=e.body?{contentDisposition:e.body.contentDisposition||"render",contentType:e.body.contentType||"text/plain",content:e.body.content||""}:void 0;return{extraHeaders:t,body:r}}getReasonHeaderValue(e,t){let r=e,i=Ze(e);return!i&&t&&(i=t),"SIP;cause="+r+';text="'+i+'"'}referExtraHeaders(e){let t=[];return t.push("Referred-By: <"+this.userAgent.configuration.uri+">"),t.push("Contact: "+this._contact),t.push("Allow: "+["ACK","CANCEL","INVITE","MESSAGE","BYE","OPTIONS","INFO","NOTIFY","REFER"].toString()),t.push("Refer-To: "+e),t}referToString(e){let t;if(e instanceof ue)t=e.toString();else{if(!e.dialog)throw new Error("Dialog undefined.");let r=e.remoteIdentity.friendlyName,i=e.dialog.remoteTarget.toString(),s=e.dialog.callId,o=e.dialog.remoteTag,a=e.dialog.localTag,d=encodeURIComponent(`${s};to-tag=${o};from-tag=${a}`);t=`"${r}" <${i}?Replaces=${d}>`}return t}};var Te;(function(n){n.Required="Required",n.Supported="Supported",n.Unsupported="Unsupported"})(Te=Te||(Te={}));var Bn={"100rel":!0,199:!0,answermode:!0,"early-session":!0,eventlist:!0,explicitsub:!0,"from-change":!0,"geolocation-http":!0,"geolocation-sip":!0,gin:!0,gruu:!0,histinfo:!0,ice:!0,join:!0,"multiple-refer":!0,norefersub:!0,nosub:!0,outbound:!0,path:!0,policy:!0,precondition:!0,pref:!0,privacy:!0,"recipient-list-invite":!0,"recipient-list-message":!0,"recipient-list-subscribe":!0,replaces:!0,"resource-priority":!0,"sdp-anat":!0,"sec-agree":!0,tdialog:!0,timer:!0,uui:!0};var Ge=class extends qe{constructor(e,t){super(e),this.incomingInviteRequest=t,this.disposed=!1,this.expiresTimer=void 0,this.isCanceled=!1,this.rel100="none",this.rseq=Math.floor(Math.random()*1e4),this.userNoAnswerTimer=void 0,this.waitingForPrack=!1,this.logger=e.getLogger("sip.Invitation");let r=this.incomingInviteRequest.message,i=r.getHeader("require");i&&i.toLowerCase().includes("100rel")&&(this.rel100="required");let s=r.getHeader("supported");if(s&&s.toLowerCase().includes("100rel")&&(this.rel100="supported"),r.toTag=t.toTag,typeof r.toTag!="string")throw new TypeError("toTag should have been a string.");if(this.userNoAnswerTimer=setTimeout(()=>{t.reject({statusCode:480}),this.stateTransition(v.Terminated)},this.userAgent.configuration.noAnswerTimeout?this.userAgent.configuration.noAnswerTimeout*1e3:6e4),r.hasHeader("expires")){let d=Number(r.getHeader("expires")||0)*1e3;this.expiresTimer=setTimeout(()=>{this.state===v.Initial&&(t.reject({statusCode:487}),this.stateTransition(v.Terminated))},d)}let o=this.request.getHeader("P-Asserted-Identity");o&&(this._assertedIdentity=W.nameAddrHeaderParse(o)),this._contact=this.userAgent.contact.toString();let a=r.parseHeader("Content-Disposition");a&&a.type==="render"&&(this._renderbody=r.body,this._rendertype=r.getHeader("Content-Type")),this._id=r.callId+r.fromTag,this.userAgent._sessions[this._id]=this}dispose(){if(this.disposed)return Promise.resolve();switch(this.disposed=!0,this.expiresTimer&&(clearTimeout(this.expiresTimer),this.expiresTimer=void 0),this.userNoAnswerTimer&&(clearTimeout(this.userNoAnswerTimer),this.userNoAnswerTimer=void 0),this.prackNeverArrived(),this.state){case v.Initial:return this.reject().then(()=>super.dispose());case v.Establishing:return this.reject().then(()=>super.dispose());case v.Established:return super.dispose();case v.Terminating:return super.dispose();case v.Terminated:return super.dispose();default:throw new Error("Unknown state.")}}get autoSendAnInitialProvisionalResponse(){return this.rel100!=="required"&&this.userAgent.configuration.sendInitialProvisionalResponse}get body(){return this.incomingInviteRequest.message.body}get localIdentity(){return this.request.to}get remoteIdentity(){return this.request.from}get request(){return this.incomingInviteRequest.message}accept(e={}){if(this.logger.log("Invitation.accept"),this.state!==v.Initial){let t=new Error(`Invalid session state ${this.state}`);return this.logger.error(t.message),Promise.reject(t)}return e.sessionDescriptionHandlerModifiers&&(this.sessionDescriptionHandlerModifiers=e.sessionDescriptionHandlerModifiers),e.sessionDescriptionHandlerOptions&&(this.sessionDescriptionHandlerOptions=e.sessionDescriptionHandlerOptions),this.stateTransition(v.Establishing),this.sendAccept(e).then(({message:t,session:r})=>{r.delegate={onAck:i=>this.onAckRequest(i),onAckTimeout:()=>this.onAckTimeout(),onBye:i=>this.onByeRequest(i),onInfo:i=>this.onInfoRequest(i),onInvite:i=>this.onInviteRequest(i),onMessage:i=>this.onMessageRequest(i),onNotify:i=>this.onNotifyRequest(i),onPrack:i=>this.onPrackRequest(i),onRefer:i=>this.onReferRequest(i)},this._dialog=r,this.stateTransition(v.Established),this._replacee&&this._replacee._bye()}).catch(t=>this.handleResponseError(t))}progress(e={}){if(this.logger.log("Invitation.progress"),this.state!==v.Initial){let r=new Error(`Invalid session state ${this.state}`);return this.logger.error(r.message),Promise.reject(r)}let t=e.statusCode||180;if(t<100||t>199)throw new TypeError("Invalid statusCode: "+t);return e.sessionDescriptionHandlerModifiers&&(this.sessionDescriptionHandlerModifiers=e.sessionDescriptionHandlerModifiers),e.sessionDescriptionHandlerOptions&&(this.sessionDescriptionHandlerOptions=e.sessionDescriptionHandlerOptions),this.waitingForPrack?(this.logger.warn("Unexpected call for progress while waiting for prack, ignoring"),Promise.resolve()):e.statusCode===100?this.sendProgressTrying().then(()=>{}).catch(r=>this.handleResponseError(r)):this.rel100!=="required"&&!(this.rel100==="supported"&&e.rel100)&&!(this.rel100==="supported"&&this.userAgent.configuration.sipExtension100rel===Te.Required)?this.sendProgress(e).then(()=>{}).catch(r=>this.handleResponseError(r)):this.sendProgressReliableWaitForPrack(e).then(()=>{}).catch(r=>this.handleResponseError(r))}reject(e={}){if(this.logger.log("Invitation.reject"),this.state!==v.Initial&&this.state!==v.Establishing){let o=new Error(`Invalid session state ${this.state}`);return this.logger.error(o.message),Promise.reject(o)}let t=e.statusCode||480,r=e.reasonPhrase?e.reasonPhrase:Ze(t),i=e.extraHeaders||[];if(t<300||t>699)throw new TypeError("Invalid statusCode: "+t);let s=e.body?St(e.body):void 0;return t<400?this.incomingInviteRequest.redirect([],{statusCode:t,reasonPhrase:r,extraHeaders:i,body:s}):this.incomingInviteRequest.reject({statusCode:t,reasonPhrase:r,extraHeaders:i,body:s}),this.stateTransition(v.Terminated),Promise.resolve()}_onCancel(e){if(this.logger.log("Invitation._onCancel"),this.state!==v.Initial&&this.state!==v.Establishing){this.logger.error(`CANCEL received while in state ${this.state}, dropping request`);return}if(this.delegate&&this.delegate.onCancel){let t=new Rr(e);this.delegate.onCancel(t)}this.isCanceled=!0,this.incomingInviteRequest.reject({statusCode:487}),this.stateTransition(v.Terminated)}handlePrackOfferAnswer(e){if(!this.dialog)throw new Error("Dialog undefined.");let t=et(e.message);if(!t||t.contentDisposition!=="session")return Promise.resolve(void 0);let r={sessionDescriptionHandlerOptions:this.sessionDescriptionHandlerOptions,sessionDescriptionHandlerModifiers:this.sessionDescriptionHandlerModifiers};switch(this.dialog.signalingState){case b.Initial:throw new Error(`Invalid signaling state ${this.dialog.signalingState}.`);case b.Stable:return this.setAnswer(t,r).then(()=>{});case b.HaveLocalOffer:throw new Error(`Invalid signaling state ${this.dialog.signalingState}.`);case b.HaveRemoteOffer:return this.setOfferAndGetAnswer(t,r);case b.Closed:throw new Error(`Invalid signaling state ${this.dialog.signalingState}.`);default:throw new Error(`Invalid signaling state ${this.dialog.signalingState}.`)}}handleResponseError(e){let t=480;if(e instanceof Error?this.logger.error(e.message):this.logger.error(e),e instanceof ct?(this.logger.error("A session description handler occurred while sending response (content type unsupported"),t=415):e instanceof Er?this.logger.error("A session description handler occurred while sending response"):e instanceof wt?this.logger.error("Session ended before response could be formulated and sent (while waiting for PRACK)"):e instanceof Ae&&this.logger.error("Session changed state before response could be formulated and sent"),this.state===v.Initial||this.state===v.Establishing)try{this.incomingInviteRequest.reject({statusCode:t}),this.stateTransition(v.Terminated)}catch(r){throw this.logger.error("An error occurred attempting to reject the request while handling another error"),r}if(this.isCanceled){this.logger.warn("An error occurred while attempting to formulate and send a response to an incoming INVITE. However a CANCEL was received and processed while doing so which can (and often does) result in errors occurring as the session terminates in the meantime. Said error is being ignored.");return}throw e}onAckTimeout(){if(this.logger.log("Invitation.onAckTimeout"),!this.dialog)throw new Error("Dialog undefined.");this.logger.log("No ACK received for an extended period of time, terminating session"),this.dialog.bye(),this.stateTransition(v.Terminated)}sendAccept(e={}){let t={sessionDescriptionHandlerOptions:this.sessionDescriptionHandlerOptions,sessionDescriptionHandlerModifiers:this.sessionDescriptionHandlerModifiers},r=e.extraHeaders||[];return this.waitingForPrack?this.waitForArrivalOfPrack().then(()=>clearTimeout(this.userNoAnswerTimer)).then(()=>this.generateResponseOfferAnswer(this.incomingInviteRequest,t)).then(i=>this.incomingInviteRequest.accept({statusCode:200,body:i,extraHeaders:r})):(clearTimeout(this.userNoAnswerTimer),this.generateResponseOfferAnswer(this.incomingInviteRequest,t).then(i=>this.incomingInviteRequest.accept({statusCode:200,body:i,extraHeaders:r})))}sendProgress(e={}){let t=e.statusCode||180,r=e.reasonPhrase,i=(e.extraHeaders||[]).slice(),s=e.body?St(e.body):void 0;if(t===183&&!s)return this.sendProgressWithSDP(e);try{let o=this.incomingInviteRequest.progress({statusCode:t,reasonPhrase:r,extraHeaders:i,body:s});return this._dialog=o.session,Promise.resolve(o)}catch(o){return Promise.reject(o)}}sendProgressWithSDP(e={}){let t={sessionDescriptionHandlerOptions:this.sessionDescriptionHandlerOptions,sessionDescriptionHandlerModifiers:this.sessionDescriptionHandlerModifiers},r=e.statusCode||183,i=e.reasonPhrase,s=(e.extraHeaders||[]).slice();return this.generateResponseOfferAnswer(this.incomingInviteRequest,t).then(o=>this.incomingInviteRequest.progress({statusCode:r,reasonPhrase:i,extraHeaders:s,body:o})).then(o=>(this._dialog=o.session,o))}sendProgressReliable(e={}){return e.extraHeaders=(e.extraHeaders||[]).slice(),e.extraHeaders.push("Require: 100rel"),e.extraHeaders.push("RSeq: "+Math.floor(Math.random()*1e4)),this.sendProgressWithSDP(e)}sendProgressReliableWaitForPrack(e={}){let t={sessionDescriptionHandlerOptions:this.sessionDescriptionHandlerOptions,sessionDescriptionHandlerModifiers:this.sessionDescriptionHandlerModifiers},r=e.statusCode||183,i=e.reasonPhrase,s=(e.extraHeaders||[]).slice();s.push("Require: 100rel"),s.push("RSeq: "+this.rseq++);let o;return new Promise((a,d)=>{this.waitingForPrack=!0,this.generateResponseOfferAnswer(this.incomingInviteRequest,t).then(h=>(o=h,this.incomingInviteRequest.progress({statusCode:r,reasonPhrase:i,extraHeaders:s,body:o}))).then(h=>{this._dialog=h.session;let l,u;h.session.delegate={onPrack:P=>{l=P,clearTimeout(A),clearTimeout(N),this.waitingForPrack&&(this.waitingForPrack=!1,this.handlePrackOfferAnswer(l).then(k=>{try{u=l.accept({statusCode:200,body:k}),this.prackArrived(),a({prackRequest:l,prackResponse:u,progressResponse:h})}catch(C){d(C)}}).catch(k=>d(k)))}};let A=setTimeout(()=>{this.waitingForPrack&&(this.waitingForPrack=!1,this.logger.warn("No PRACK received, rejecting INVITE."),clearTimeout(N),this.reject({statusCode:504}).then(()=>d(new wt)).catch(P=>d(P)))},J.T1*64),_=()=>{try{this.incomingInviteRequest.progress({statusCode:r,reasonPhrase:i,extraHeaders:s,body:o})}catch(P){this.waitingForPrack=!1,d(P);return}N=setTimeout(_,$*=2)},$=J.T1,N=setTimeout(_,$)}).catch(h=>{this.waitingForPrack=!1,d(h)})})}sendProgressTrying(){try{let e=this.incomingInviteRequest.trying();return Promise.resolve(e)}catch(e){return Promise.reject(e)}}waitForArrivalOfPrack(){if(this.waitingForPrackPromise)throw new Error("Already waiting for PRACK");return this.waitingForPrackPromise=new Promise((e,t)=>{this.waitingForPrackResolve=e,this.waitingForPrackReject=t}),this.waitingForPrackPromise}prackArrived(){this.waitingForPrackResolve&&this.waitingForPrackResolve(),this.waitingForPrackPromise=void 0,this.waitingForPrackResolve=void 0,this.waitingForPrackReject=void 0}prackNeverArrived(){this.waitingForPrackReject&&this.waitingForPrackReject(new wt),this.waitingForPrackPromise=void 0,this.waitingForPrackResolve=void 0,this.waitingForPrackReject=void 0}};var tt=class extends qe{constructor(e,t,r={}){super(e,r),this.disposed=!1,this.earlyMedia=!1,this.earlyMediaSessionDescriptionHandlers=new Map,this.isCanceled=!1,this.inviteWithoutSdp=!1,this.logger=e.getLogger("sip.Inviter"),this.earlyMedia=r.earlyMedia!==void 0?r.earlyMedia:this.earlyMedia,this.fromTag=Xe(),this.inviteWithoutSdp=r.inviteWithoutSdp!==void 0?r.inviteWithoutSdp:this.inviteWithoutSdp;let i=Object.assign({},r);i.params=Object.assign({},r.params);let s=r.anonymous||!1,o=e.contact.toString({anonymous:s,outbound:s?!e.contact.tempGruu:!e.contact.pubGruu});s&&e.configuration.uri&&(i.params.fromDisplayName="Anonymous",i.params.fromUri="sip:anonymous@anonymous.invalid");let a=e.userAgentCore.configuration.aor;if(i.params.fromUri&&(a=typeof i.params.fromUri=="string"?W.URIParse(i.params.fromUri):i.params.fromUri),!a)throw new TypeError("Invalid from URI: "+i.params.fromUri);let d=t;if(i.params.toUri&&(d=typeof i.params.toUri=="string"?W.URIParse(i.params.toUri):i.params.toUri),!d)throw new TypeError("Invalid to URI: "+i.params.toUri);let h=Object.assign({},i.params);h.fromTag=this.fromTag;let l=(i.extraHeaders||[]).slice();s&&e.configuration.uri&&(l.push("P-Preferred-Identity: "+e.configuration.uri.toString()),l.push("Privacy: id")),l.push("Contact: "+o),l.push("Allow: "+["ACK","CANCEL","INVITE","MESSAGE","BYE","OPTIONS","INFO","NOTIFY","REFER"].toString()),e.configuration.sipExtension100rel===Te.Required&&l.push("Require: 100rel"),e.configuration.sipExtensionReplaces===Te.Required&&l.push("Require: replaces"),i.extraHeaders=l;let u=void 0;this.outgoingRequestMessage=e.userAgentCore.makeOutgoingRequestMessage(I.INVITE,t,a,d,h,l,u),this._contact=o,this._referralInviterOptions=i,this._renderbody=r.renderbody,this._rendertype=r.rendertype,r.sessionDescriptionHandlerModifiers&&(this.sessionDescriptionHandlerModifiers=r.sessionDescriptionHandlerModifiers),r.sessionDescriptionHandlerOptions&&(this.sessionDescriptionHandlerOptions=r.sessionDescriptionHandlerOptions),r.sessionDescriptionHandlerModifiersReInvite&&(this.sessionDescriptionHandlerModifiersReInvite=r.sessionDescriptionHandlerModifiersReInvite),r.sessionDescriptionHandlerOptionsReInvite&&(this.sessionDescriptionHandlerOptionsReInvite=r.sessionDescriptionHandlerOptionsReInvite),this._id=this.outgoingRequestMessage.callId+this.fromTag,this.userAgent._sessions[this._id]=this}dispose(){if(this.disposed)return Promise.resolve();switch(this.disposed=!0,this.disposeEarlyMedia(),this.state){case v.Initial:return this.cancel().then(()=>super.dispose());case v.Establishing:return this.cancel().then(()=>super.dispose());case v.Established:return super.dispose();case v.Terminating:return super.dispose();case v.Terminated:return super.dispose();default:throw new Error("Unknown state.")}}get body(){return this.outgoingRequestMessage.body}get localIdentity(){return this.outgoingRequestMessage.from}get remoteIdentity(){return this.outgoingRequestMessage.to}get request(){return this.outgoingRequestMessage}cancel(e={}){if(this.logger.log("Inviter.cancel"),this.state!==v.Initial&&this.state!==v.Establishing){let r=new Error(`Invalid session state ${this.state}`);return this.logger.error(r.message),Promise.reject(r)}this.isCanceled=!0,this.stateTransition(v.Terminating);function t(r,i){if(r&&r<200||r>699)throw new TypeError("Invalid statusCode: "+r);if(r){let s=r,o=Ze(r)||i;return"SIP;cause="+s+';text="'+o+'"'}}if(this.outgoingInviteRequest){let r;e.statusCode&&e.reasonPhrase&&(r=t(e.statusCode,e.reasonPhrase)),this.outgoingInviteRequest.cancel(r,e)}else this.logger.warn("Canceled session before INVITE was sent"),this.stateTransition(v.Terminated);return Promise.resolve()}invite(e={}){if(this.logger.log("Inviter.invite"),this.state!==v.Initial)return super.invite(e);if(e.sessionDescriptionHandlerModifiers&&(this.sessionDescriptionHandlerModifiers=e.sessionDescriptionHandlerModifiers),e.sessionDescriptionHandlerOptions&&(this.sessionDescriptionHandlerOptions=e.sessionDescriptionHandlerOptions),e.withoutSdp||this.inviteWithoutSdp)return this._renderbody&&this._rendertype&&(this.outgoingRequestMessage.body={contentType:this._rendertype,body:this._renderbody}),this.stateTransition(v.Establishing),Promise.resolve(this.sendInvite(e));let t={sessionDescriptionHandlerModifiers:this.sessionDescriptionHandlerModifiers,sessionDescriptionHandlerOptions:this.sessionDescriptionHandlerOptions};return this.getOffer(t).then(r=>(this.outgoingRequestMessage.body={body:r.content,contentType:r.contentType},this.stateTransition(v.Establishing),this.sendInvite(e))).catch(r=>{throw this.logger.log(r.message),this.state!==v.Terminated&&this.stateTransition(v.Terminated),r})}sendInvite(e={}){return this.outgoingInviteRequest=this.userAgent.userAgentCore.invite(this.outgoingRequestMessage,{onAccept:t=>{if(this.dialog){this.logger.log("Additional confirmed dialog, sending ACK and BYE"),this.ackAndBye(t);return}if(this.isCanceled){this.logger.log("Canceled session accepted, sending ACK and BYE"),this.ackAndBye(t),this.stateTransition(v.Terminated);return}this.notifyReferer(t),this.onAccept(t).then(()=>{this.disposeEarlyMedia()}).catch(()=>{this.disposeEarlyMedia()}).then(()=>{e.requestDelegate&&e.requestDelegate.onAccept&&e.requestDelegate.onAccept(t)})},onProgress:t=>{this.isCanceled||(this.notifyReferer(t),this.onProgress(t).catch(()=>{this.disposeEarlyMedia()}).then(()=>{e.requestDelegate&&e.requestDelegate.onProgress&&e.requestDelegate.onProgress(t)}))},onRedirect:t=>{this.notifyReferer(t),this.onRedirect(t),e.requestDelegate&&e.requestDelegate.onRedirect&&e.requestDelegate.onRedirect(t)},onReject:t=>{this.notifyReferer(t),this.onReject(t),e.requestDelegate&&e.requestDelegate.onReject&&e.requestDelegate.onReject(t)},onTrying:t=>{this.notifyReferer(t),this.onTrying(t),e.requestDelegate&&e.requestDelegate.onTrying&&e.requestDelegate.onTrying(t)}}),this.outgoingInviteRequest}disposeEarlyMedia(){this.earlyMediaSessionDescriptionHandlers.forEach(e=>{e.close()}),this.earlyMediaSessionDescriptionHandlers.clear()}notifyReferer(e){if(!this._referred)return;if(!(this._referred instanceof qe))throw new Error("Referred session not instance of session");if(!this._referred.dialog)return;if(!e.message.statusCode)throw new Error("Status code undefined.");if(!e.message.reasonPhrase)throw new Error("Reason phrase undefined.");let t=e.message.statusCode,r=e.message.reasonPhrase,i=`SIP/2.0 ${t} ${r}`.trim(),s=this._referred.dialog.notify(void 0,{extraHeaders:["Event: refer","Subscription-State: terminated"],body:{contentDisposition:"render",contentType:"message/sipfrag",content:i}});s.delegate={onReject:()=>{this._referred=void 0}}}onAccept(e){if(this.logger.log("Inviter.onAccept"),this.state!==v.Establishing)return this.logger.error(`Accept received while in state ${this.state}, dropping response`),Promise.reject(new Error(`Invalid session state ${this.state}`));let t=e.message,r=e.session;switch(t.hasHeader("P-Asserted-Identity")&&(this._assertedIdentity=W.nameAddrHeaderParse(t.getHeader("P-Asserted-Identity"))),r.delegate={onAck:i=>this.onAckRequest(i),onBye:i=>this.onByeRequest(i),onInfo:i=>this.onInfoRequest(i),onInvite:i=>this.onInviteRequest(i),onMessage:i=>this.onMessageRequest(i),onNotify:i=>this.onNotifyRequest(i),onPrack:i=>this.onPrackRequest(i),onRefer:i=>this.onReferRequest(i)},this._dialog=r,r.signalingState){case b.Initial:return this.logger.error("Received 2xx response to INVITE without a session description"),this.ackAndBye(e,400,"Missing session description"),this.stateTransition(v.Terminated),Promise.reject(new Error("Bad Media Description"));case b.HaveLocalOffer:return this.logger.error("Received 2xx response to INVITE without a session description"),this.ackAndBye(e,400,"Missing session description"),this.stateTransition(v.Terminated),Promise.reject(new Error("Bad Media Description"));case b.HaveRemoteOffer:{if(!this._dialog.offer)throw new Error(`Session offer undefined in signaling state ${this._dialog.signalingState}.`);let i={sessionDescriptionHandlerModifiers:this.sessionDescriptionHandlerModifiers,sessionDescriptionHandlerOptions:this.sessionDescriptionHandlerOptions};return this.setOfferAndGetAnswer(this._dialog.offer,i).then(s=>{e.ack({body:s}),this.stateTransition(v.Established)}).catch(s=>{throw this.ackAndBye(e,488,"Invalid session description"),this.stateTransition(v.Terminated),s})}case b.Stable:{if(this.earlyMediaSessionDescriptionHandlers.size>0){let o=this.earlyMediaSessionDescriptionHandlers.get(r.id);if(!o)throw new Error("Session description handler undefined.");return this.setSessionDescriptionHandler(o),this.earlyMediaSessionDescriptionHandlers.delete(r.id),e.ack(),this.stateTransition(v.Established),Promise.resolve()}if(this.earlyMediaDialog){if(this.earlyMediaDialog!==r){if(this.earlyMedia){let a="You have set the 'earlyMedia' option to 'true' which requires that your INVITE requests do not fork and yet this INVITE request did in fact fork. Consequentially and not surprisingly the end point which accepted the INVITE (confirmed dialog) does not match the end point with which early media has been setup (early dialog) and thus this session is unable to proceed. In accordance with the SIP specifications, the SIP servers your end point is connected to determine if an INVITE forks and the forking behavior of those servers cannot be controlled by this library. If you wish to use early media with this library you must configure those servers accordingly. Alternatively you may set the 'earlyMedia' to 'false' which will allow this library to function with any INVITE requests which do fork.";this.logger.error(a)}let o=new Error("Early media dialog does not equal confirmed dialog, terminating session");return this.logger.error(o.message),this.ackAndBye(e,488,"Not Acceptable Here"),this.stateTransition(v.Terminated),Promise.reject(o)}return e.ack(),this.stateTransition(v.Established),Promise.resolve()}let i=r.answer;if(!i)throw new Error("Answer is undefined.");let s={sessionDescriptionHandlerModifiers:this.sessionDescriptionHandlerModifiers,sessionDescriptionHandlerOptions:this.sessionDescriptionHandlerOptions};return this.setAnswer(i,s).then(()=>{let o;this._renderbody&&this._rendertype&&(o={body:{contentDisposition:"render",contentType:this._rendertype,content:this._renderbody}}),e.ack(o),this.stateTransition(v.Established)}).catch(o=>{throw this.logger.error(o.message),this.ackAndBye(e,488,"Not Acceptable Here"),this.stateTransition(v.Terminated),o})}case b.Closed:return Promise.reject(new Error("Terminated."));default:throw new Error("Unknown session signaling state.")}}onProgress(e){var t;if(this.logger.log("Inviter.onProgress"),this.state!==v.Establishing)return this.logger.error(`Progress received while in state ${this.state}, dropping response`),Promise.reject(new Error(`Invalid session state ${this.state}`));if(!this.outgoingInviteRequest)throw new Error("Outgoing INVITE request undefined.");let r=e.message,i=e.session;r.hasHeader("P-Asserted-Identity")&&(this._assertedIdentity=W.nameAddrHeaderParse(r.getHeader("P-Asserted-Identity")));let s=r.getHeader("require"),o=r.getHeader("rseq"),d=!!(s&&s.includes("100rel")&&o?Number(o):void 0),h=[];switch(d&&h.push("RAck: "+r.getHeader("rseq")+" "+r.getHeader("cseq")),i.signalingState){case b.Initial:return d&&(this.logger.warn("First reliable provisional response received MUST contain an offer when INVITE does not contain an offer."),e.prack({extraHeaders:h})),Promise.resolve();case b.HaveLocalOffer:return d&&e.prack({extraHeaders:h}),Promise.resolve();case b.HaveRemoteOffer:if(!d)return this.logger.warn("Non-reliable provisional response MUST NOT contain an initial offer, discarding response."),Promise.resolve();{let l=this.sessionDescriptionHandlerFactory(this,this.userAgent.configuration.sessionDescriptionHandlerFactoryOptions||{});return!((t=this.delegate)===null||t===void 0)&&t.onSessionDescriptionHandler&&this.delegate.onSessionDescriptionHandler(l,!0),this.earlyMediaSessionDescriptionHandlers.set(i.id,l),l.setDescription(r.body,this.sessionDescriptionHandlerOptions,this.sessionDescriptionHandlerModifiers).then(()=>l.getDescription(this.sessionDescriptionHandlerOptions,this.sessionDescriptionHandlerModifiers)).then(u=>{let T={contentDisposition:"session",contentType:u.contentType,content:u.body};e.prack({extraHeaders:h,body:T})}).catch(u=>{throw this.stateTransition(v.Terminated),u})}case b.Stable:if(d&&e.prack({extraHeaders:h}),this.earlyMedia&&!this.earlyMediaDialog){this.earlyMediaDialog=i;let l=i.answer;if(!l)throw new Error("Answer is undefined.");let u={sessionDescriptionHandlerModifiers:this.sessionDescriptionHandlerModifiers,sessionDescriptionHandlerOptions:this.sessionDescriptionHandlerOptions};return this.setAnswer(l,u).catch(T=>{throw this.stateTransition(v.Terminated),T})}return Promise.resolve();case b.Closed:return Promise.reject(new Error("Terminated."));default:throw new Error("Unknown session signaling state.")}}onRedirect(e){if(this.logger.log("Inviter.onRedirect"),this.state!==v.Establishing&&this.state!==v.Terminating){this.logger.error(`Redirect received while in state ${this.state}, dropping response`);return}this.stateTransition(v.Terminated)}onReject(e){if(this.logger.log("Inviter.onReject"),this.state!==v.Establishing&&this.state!==v.Terminating){this.logger.error(`Reject received while in state ${this.state}, dropping response`);return}this.stateTransition(v.Terminated)}onTrying(e){if(this.logger.log("Inviter.onTrying"),this.state!==v.Establishing){this.logger.error(`Trying received while in state ${this.state}, dropping response`);return}}};var Ir=class{constructor(e,t,r,i="text/plain",s={}){this.logger=e.getLogger("sip.Messager"),s.params=s.params||{};let o=e.userAgentCore.configuration.aor;if(s.params.fromUri&&(o=typeof s.params.fromUri=="string"?W.URIParse(s.params.fromUri):s.params.fromUri),!o)throw new TypeError("Invalid from URI: "+s.params.fromUri);let a=t;if(s.params.toUri&&(a=typeof s.params.toUri=="string"?W.URIParse(s.params.toUri):s.params.toUri),!a)throw new TypeError("Invalid to URI: "+s.params.toUri);let d=s.params?Object.assign({},s.params):{},h=(s.extraHeaders||[]).slice(),u={contentDisposition:"render",contentType:i,content:r};this.request=e.userAgentCore.makeOutgoingRequestMessage(I.MESSAGE,t,o,a,d,h,u),this.userAgent=e}message(e={}){return this.userAgent.userAgentCore.request(this.request,e.requestDelegate),Promise.resolve()}};var M;(function(n){n.Initial="Initial",n.Registered="Registered",n.Unregistered="Unregistered",n.Terminated="Terminated"})(M=M||(M={}));var Ce=class{constructor(e,t={}){this.disposed=!1,this._contacts=[],this._retryAfter=void 0,this._state=M.Initial,this._waiting=!1,this._stateEventEmitter=new He,this._waitingEventEmitter=new He,this.userAgent=e;let r=e.configuration.uri.clone();if(r.user=void 0,this.options=Object.assign(Object.assign(Object.assign({},Ce.defaultOptions()),{registrar:r}),Ce.stripUndefinedProperties(t)),this.options.extraContactHeaderParams=(this.options.extraContactHeaderParams||[]).slice(),this.options.extraHeaders=(this.options.extraHeaders||[]).slice(),!this.options.registrar)throw new Error("Registrar undefined.");if(this.options.registrar=this.options.registrar.clone(),this.options.regId&&!this.options.instanceId?this.options.instanceId=this.userAgent.instanceId:!this.options.regId&&this.options.instanceId&&(this.options.regId=1),this.options.instanceId&&W.parse(this.options.instanceId,"uuid")===-1)throw new Error("Invalid instanceId.");if(this.options.regId&&this.options.regId<0)throw new Error("Invalid regId.");let i=this.options.registrar,s=this.options.params&&this.options.params.fromUri||e.userAgentCore.configuration.aor,o=this.options.params&&this.options.params.toUri||e.configuration.uri,a=this.options.params||{},d=(t.extraHeaders||[]).slice();if(this.request=e.userAgentCore.makeOutgoingRequestMessage(I.REGISTER,i,s,o,a,d,void 0),this.expires=this.options.expires||Ce.defaultExpires,this.expires<0)throw new Error("Invalid expires.");if(this.refreshFrequency=this.options.refreshFrequency||Ce.defaultRefreshFrequency,this.refreshFrequency<50||this.refreshFrequency>99)throw new Error("Invalid refresh frequency. The value represents a percentage of the expiration time and should be between 50 and 99.");this.logger=e.getLogger("sip.Registerer"),this.options.logConfiguration&&(this.logger.log("Configuration:"),Object.keys(this.options).forEach(h=>{let l=this.options[h];switch(h){case"registrar":this.logger.log("\xB7 "+h+": "+l);break;default:this.logger.log("\xB7 "+h+": "+JSON.stringify(l))}})),this.id=this.request.callId+this.request.from.parameters.tag,this.userAgent._registerers[this.id]=this}static defaultOptions(){return{expires:Ce.defaultExpires,extraContactHeaderParams:[],extraHeaders:[],logConfiguration:!0,instanceId:"",params:{},regId:0,registrar:new ue("sip","anonymous","anonymous.invalid"),refreshFrequency:Ce.defaultRefreshFrequency}}static stripUndefinedProperties(e){return Object.keys(e).reduce((t,r)=>(e[r]!==void 0&&(t[r]=e[r]),t),{})}get contacts(){return this._contacts.slice()}get retryAfter(){return this._retryAfter}get state(){return this._state}get stateChange(){return this._stateEventEmitter}dispose(){return this.disposed?Promise.resolve():(this.disposed=!0,this.logger.log(`Registerer ${this.id} in state ${this.state} is being disposed`),delete this.userAgent._registerers[this.id],new Promise(e=>{let t=()=>{if(!this.waiting&&this._state===M.Registered){this.stateChange.addListener(()=>{this.terminated(),e()},{once:!0}),this.unregister();return}this.terminated(),e()};this.waiting?this.waitingChange.addListener(()=>{t()},{once:!0}):t()}))}register(e={}){if(this.state===M.Terminated)throw this.stateError(),new Error("Registerer terminated. Unable to register.");if(this.disposed)throw this.stateError(),new Error("Registerer disposed. Unable to register.");if(this.waiting){this.waitingWarning();let i=new Fe("REGISTER request already in progress, waiting for final response");return Promise.reject(i)}e.requestOptions&&(this.options=Object.assign(Object.assign({},this.options),e.requestOptions));let t=(this.options.extraHeaders||[]).slice();t.push("Contact: "+this.generateContactHeader(this.expires)),t.push("Allow: "+["ACK","CANCEL","INVITE","MESSAGE","BYE","OPTIONS","INFO","NOTIFY","REFER"].toString()),this.request.cseq++,this.request.setHeader("cseq",this.request.cseq+" REGISTER"),this.request.extraHeaders=t,this.waitingToggle(!0);let r=this.userAgent.userAgentCore.register(this.request,{onAccept:i=>{let s;i.message.hasHeader("expires")&&(s=Number(i.message.getHeader("expires"))),this._contacts=i.message.getHeaders("contact");let o=this._contacts.length;if(!o){this.logger.error("No Contact header in response to REGISTER, dropping response."),this.unregistered();return}let a;for(;o--;){if(a=i.message.parseHeader("contact",o),!a)throw new Error("Contact undefined");if(this.userAgent.contact.pubGruu&&Oi(a.uri,this.userAgent.contact.pubGruu)){s=Number(a.getParam("expires"));break}if(this.userAgent.configuration.contactName===""){if(a.uri.user===this.userAgent.contact.uri.user){s=Number(a.getParam("expires"));break}}else if(Oi(a.uri,this.userAgent.contact.uri)){s=Number(a.getParam("expires"));break}a=void 0}if(a===void 0){this.logger.error("No Contact header pointing to us, dropping response"),this.unregistered(),this.waitingToggle(!1);return}if(s===void 0){this.logger.error("Contact pointing to us is missing expires parameter, dropping response"),this.unregistered(),this.waitingToggle(!1);return}if(a.hasParam("temp-gruu")){let d=a.getParam("temp-gruu");d&&(this.userAgent.contact.tempGruu=W.URIParse(d.replace(/"/g,"")))}if(a.hasParam("pub-gruu")){let d=a.getParam("pub-gruu");d&&(this.userAgent.contact.pubGruu=W.URIParse(d.replace(/"/g,"")))}this.registered(s),e.requestDelegate&&e.requestDelegate.onAccept&&e.requestDelegate.onAccept(i),this.waitingToggle(!1)},onProgress:i=>{e.requestDelegate&&e.requestDelegate.onProgress&&e.requestDelegate.onProgress(i)},onRedirect:i=>{this.logger.error("Redirect received. Not supported."),this.unregistered(),e.requestDelegate&&e.requestDelegate.onRedirect&&e.requestDelegate.onRedirect(i),this.waitingToggle(!1)},onReject:i=>{if(i.message.statusCode===423){if(!i.message.hasHeader("min-expires")){this.logger.error("423 response received for REGISTER without Min-Expires, dropping response"),this.unregistered(),this.waitingToggle(!1);return}this.expires=Number(i.message.getHeader("min-expires")),this.waitingToggle(!1),this.register();return}this.logger.warn(`Failed to register, status code ${i.message.statusCode}`);let s=NaN;if(i.message.statusCode===500||i.message.statusCode===503){let o=i.message.getHeader("retry-after");o&&(s=Number.parseInt(o,void 0))}this._retryAfter=isNaN(s)?void 0:s,this.unregistered(),e.requestDelegate&&e.requestDelegate.onReject&&e.requestDelegate.onReject(i),this._retryAfter=void 0,this.waitingToggle(!1)},onTrying:i=>{e.requestDelegate&&e.requestDelegate.onTrying&&e.requestDelegate.onTrying(i)}});return Promise.resolve(r)}unregister(e={}){if(this.state===M.Terminated)throw this.stateError(),new Error("Registerer terminated. Unable to register.");if(this.disposed&&this.state!==M.Registered)throw this.stateError(),new Error("Registerer disposed. Unable to register.");if(this.waiting){this.waitingWarning();let i=new Fe("REGISTER request already in progress, waiting for final response");return Promise.reject(i)}this._state!==M.Registered&&!e.all&&this.logger.warn("Not currently registered, but sending an unregister anyway.");let t=(e.requestOptions&&e.requestOptions.extraHeaders||[]).slice();this.request.extraHeaders=t,e.all?(t.push("Contact: *"),t.push("Expires: 0")):t.push("Contact: "+this.generateContactHeader(0)),this.request.cseq++,this.request.setHeader("cseq",this.request.cseq+" REGISTER"),this.registrationTimer!==void 0&&(clearTimeout(this.registrationTimer),this.registrationTimer=void 0),this.waitingToggle(!0);let r=this.userAgent.userAgentCore.register(this.request,{onAccept:i=>{this._contacts=i.message.getHeaders("contact"),this.unregistered(),e.requestDelegate&&e.requestDelegate.onAccept&&e.requestDelegate.onAccept(i),this.waitingToggle(!1)},onProgress:i=>{e.requestDelegate&&e.requestDelegate.onProgress&&e.requestDelegate.onProgress(i)},onRedirect:i=>{this.logger.error("Unregister redirected. Not currently supported."),this.unregistered(),e.requestDelegate&&e.requestDelegate.onRedirect&&e.requestDelegate.onRedirect(i),this.waitingToggle(!1)},onReject:i=>{this.logger.error(`Unregister rejected with status code ${i.message.statusCode}`),this.unregistered(),e.requestDelegate&&e.requestDelegate.onReject&&e.requestDelegate.onReject(i),this.waitingToggle(!1)},onTrying:i=>{e.requestDelegate&&e.requestDelegate.onTrying&&e.requestDelegate.onTrying(i)}});return Promise.resolve(r)}clearTimers(){this.registrationTimer!==void 0&&(clearTimeout(this.registrationTimer),this.registrationTimer=void 0),this.registrationExpiredTimer!==void 0&&(clearTimeout(this.registrationExpiredTimer),this.registrationExpiredTimer=void 0)}generateContactHeader(e){let t=this.userAgent.contact.toString({register:!0});return this.options.regId&&this.options.instanceId&&(t+=";reg-id="+this.options.regId,t+=';+sip.instance="<urn:uuid:'+this.options.instanceId+'>"'),this.options.extraContactHeaderParams&&this.options.extraContactHeaderParams.forEach(r=>{t+=";"+r}),t+=";expires="+e,t}registered(e){this.clearTimers(),this.registrationTimer=setTimeout(()=>{this.registrationTimer=void 0,this.register()},this.refreshFrequency/100*e*1e3),this.registrationExpiredTimer=setTimeout(()=>{this.logger.warn("Registration expired"),this.unregistered()},e*1e3),this._state!==M.Registered&&this.stateTransition(M.Registered)}unregistered(){this.clearTimers(),this._state!==M.Unregistered&&this.stateTransition(M.Unregistered)}terminated(){this.clearTimers(),this._state!==M.Terminated&&this.stateTransition(M.Terminated)}stateTransition(e){let t=()=>{throw new Error(`Invalid state transition from ${this._state} to ${e}`)};switch(this._state){case M.Initial:e!==M.Registered&&e!==M.Unregistered&&e!==M.Terminated&&t();break;case M.Registered:e!==M.Unregistered&&e!==M.Terminated&&t();break;case M.Unregistered:e!==M.Registered&&e!==M.Terminated&&t();break;case M.Terminated:t();break;default:throw new Error("Unrecognized state.")}this._state=e,this.logger.log(`Registration transitioned to state ${this._state}`),this._stateEventEmitter.emit(this._state),e===M.Terminated&&this.dispose()}get waiting(){return this._waiting}get waitingChange(){return this._waitingEventEmitter}waitingToggle(e){if(this._waiting===e)throw new Error(`Invalid waiting transition from ${this._waiting} to ${e}`);this._waiting=e,this.logger.log(`Waiting toggled to ${this._waiting}`),this._waitingEventEmitter.emit(this._waiting)}waitingWarning(){let e="An attempt was made to send a REGISTER request while a prior one was still in progress.";e+=" RFC 3261 requires UAs MUST NOT send a new registration until they have received a final response",e+=" from the registrar for the previous one or the previous REGISTER request has timed out.",e+=" Note that if the transport disconnects, you still must wait for the prior request to time out before",e+=" sending a new REGISTER request or alternatively dispose of the current Registerer and create a new Registerer.",this.logger.warn(e)}stateError(){let t=`An attempt was made to send a REGISTER request when the Registerer ${this.state===M.Terminated?"is in 'Terminated' state":"has been disposed"}.`;t+=" The Registerer transitions to 'Terminated' when Registerer.dispose() is called.",t+=" Perhaps you called UserAgent.stop() which dipsoses of all Registerers?",this.logger.error(t)}};Ce.defaultExpires=600;Ce.defaultRefreshFrequency=99;var j;(function(n){n.Initial="Initial",n.NotifyWait="NotifyWait",n.Pending="Pending",n.Active="Active",n.Terminated="Terminated"})(j=j||(j={}));var O;(function(n){n.Connecting="Connecting",n.Connected="Connected",n.Disconnecting="Disconnecting",n.Disconnected="Disconnected"})(O=O||(O={}));var X;(function(n){n.Started="Started",n.Stopped="Stopped"})(X=X||(X={}));var Q=class{constructor(){this._dataLength=0,this._bufferLength=0,this._state=new Int32Array(4),this._buffer=new ArrayBuffer(68),this._buffer8=new Uint8Array(this._buffer,0,68),this._buffer32=new Uint32Array(this._buffer,0,17),this.start()}static hashStr(e,t=!1){return this.onePassHasher.start().appendStr(e).end(t)}static hashAsciiStr(e,t=!1){return this.onePassHasher.start().appendAsciiStr(e).end(t)}static _hex(e){let t=Q.hexChars,r=Q.hexOut,i,s,o,a;for(a=0;a<4;a+=1)for(s=a*8,i=e[a],o=0;o<8;o+=2)r[s+1+o]=t.charAt(i&15),i>>>=4,r[s+0+o]=t.charAt(i&15),i>>>=4;return r.join("")}static _md5cycle(e,t){let r=e[0],i=e[1],s=e[2],o=e[3];r+=(i&s|~i&o)+t[0]-680876936|0,r=(r<<7|r>>>25)+i|0,o+=(r&i|~r&s)+t[1]-389564586|0,o=(o<<12|o>>>20)+r|0,s+=(o&r|~o&i)+t[2]+606105819|0,s=(s<<17|s>>>15)+o|0,i+=(s&o|~s&r)+t[3]-1044525330|0,i=(i<<22|i>>>10)+s|0,r+=(i&s|~i&o)+t[4]-176418897|0,r=(r<<7|r>>>25)+i|0,o+=(r&i|~r&s)+t[5]+1200080426|0,o=(o<<12|o>>>20)+r|0,s+=(o&r|~o&i)+t[6]-1473231341|0,s=(s<<17|s>>>15)+o|0,i+=(s&o|~s&r)+t[7]-45705983|0,i=(i<<22|i>>>10)+s|0,r+=(i&s|~i&o)+t[8]+1770035416|0,r=(r<<7|r>>>25)+i|0,o+=(r&i|~r&s)+t[9]-1958414417|0,o=(o<<12|o>>>20)+r|0,s+=(o&r|~o&i)+t[10]-42063|0,s=(s<<17|s>>>15)+o|0,i+=(s&o|~s&r)+t[11]-1990404162|0,i=(i<<22|i>>>10)+s|0,r+=(i&s|~i&o)+t[12]+1804603682|0,r=(r<<7|r>>>25)+i|0,o+=(r&i|~r&s)+t[13]-40341101|0,o=(o<<12|o>>>20)+r|0,s+=(o&r|~o&i)+t[14]-1502002290|0,s=(s<<17|s>>>15)+o|0,i+=(s&o|~s&r)+t[15]+1236535329|0,i=(i<<22|i>>>10)+s|0,r+=(i&o|s&~o)+t[1]-165796510|0,r=(r<<5|r>>>27)+i|0,o+=(r&s|i&~s)+t[6]-1069501632|0,o=(o<<9|o>>>23)+r|0,s+=(o&i|r&~i)+t[11]+643717713|0,s=(s<<14|s>>>18)+o|0,i+=(s&r|o&~r)+t[0]-373897302|0,i=(i<<20|i>>>12)+s|0,r+=(i&o|s&~o)+t[5]-701558691|0,r=(r<<5|r>>>27)+i|0,o+=(r&s|i&~s)+t[10]+38016083|0,o=(o<<9|o>>>23)+r|0,s+=(o&i|r&~i)+t[15]-660478335|0,s=(s<<14|s>>>18)+o|0,i+=(s&r|o&~r)+t[4]-405537848|0,i=(i<<20|i>>>12)+s|0,r+=(i&o|s&~o)+t[9]+568446438|0,r=(r<<5|r>>>27)+i|0,o+=(r&s|i&~s)+t[14]-1019803690|0,o=(o<<9|o>>>23)+r|0,s+=(o&i|r&~i)+t[3]-187363961|0,s=(s<<14|s>>>18)+o|0,i+=(s&r|o&~r)+t[8]+1163531501|0,i=(i<<20|i>>>12)+s|0,r+=(i&o|s&~o)+t[13]-1444681467|0,r=(r<<5|r>>>27)+i|0,o+=(r&s|i&~s)+t[2]-51403784|0,o=(o<<9|o>>>23)+r|0,s+=(o&i|r&~i)+t[7]+1735328473|0,s=(s<<14|s>>>18)+o|0,i+=(s&r|o&~r)+t[12]-1926607734|0,i=(i<<20|i>>>12)+s|0,r+=(i^s^o)+t[5]-378558|0,r=(r<<4|r>>>28)+i|0,o+=(r^i^s)+t[8]-2022574463|0,o=(o<<11|o>>>21)+r|0,s+=(o^r^i)+t[11]+1839030562|0,s=(s<<16|s>>>16)+o|0,i+=(s^o^r)+t[14]-35309556|0,i=(i<<23|i>>>9)+s|0,r+=(i^s^o)+t[1]-1530992060|0,r=(r<<4|r>>>28)+i|0,o+=(r^i^s)+t[4]+1272893353|0,o=(o<<11|o>>>21)+r|0,s+=(o^r^i)+t[7]-155497632|0,s=(s<<16|s>>>16)+o|0,i+=(s^o^r)+t[10]-1094730640|0,i=(i<<23|i>>>9)+s|0,r+=(i^s^o)+t[13]+681279174|0,r=(r<<4|r>>>28)+i|0,o+=(r^i^s)+t[0]-358537222|0,o=(o<<11|o>>>21)+r|0,s+=(o^r^i)+t[3]-722521979|0,s=(s<<16|s>>>16)+o|0,i+=(s^o^r)+t[6]+76029189|0,i=(i<<23|i>>>9)+s|0,r+=(i^s^o)+t[9]-640364487|0,r=(r<<4|r>>>28)+i|0,o+=(r^i^s)+t[12]-421815835|0,o=(o<<11|o>>>21)+r|0,s+=(o^r^i)+t[15]+530742520|0,s=(s<<16|s>>>16)+o|0,i+=(s^o^r)+t[2]-995338651|0,i=(i<<23|i>>>9)+s|0,r+=(s^(i|~o))+t[0]-198630844|0,r=(r<<6|r>>>26)+i|0,o+=(i^(r|~s))+t[7]+1126891415|0,o=(o<<10|o>>>22)+r|0,s+=(r^(o|~i))+t[14]-1416354905|0,s=(s<<15|s>>>17)+o|0,i+=(o^(s|~r))+t[5]-57434055|0,i=(i<<21|i>>>11)+s|0,r+=(s^(i|~o))+t[12]+1700485571|0,r=(r<<6|r>>>26)+i|0,o+=(i^(r|~s))+t[3]-1894986606|0,o=(o<<10|o>>>22)+r|0,s+=(r^(o|~i))+t[10]-1051523|0,s=(s<<15|s>>>17)+o|0,i+=(o^(s|~r))+t[1]-2054922799|0,i=(i<<21|i>>>11)+s|0,r+=(s^(i|~o))+t[8]+1873313359|0,r=(r<<6|r>>>26)+i|0,o+=(i^(r|~s))+t[15]-30611744|0,o=(o<<10|o>>>22)+r|0,s+=(r^(o|~i))+t[6]-1560198380|0,s=(s<<15|s>>>17)+o|0,i+=(o^(s|~r))+t[13]+1309151649|0,i=(i<<21|i>>>11)+s|0,r+=(s^(i|~o))+t[4]-145523070|0,r=(r<<6|r>>>26)+i|0,o+=(i^(r|~s))+t[11]-1120210379|0,o=(o<<10|o>>>22)+r|0,s+=(r^(o|~i))+t[2]+718787259|0,s=(s<<15|s>>>17)+o|0,i+=(o^(s|~r))+t[9]-343485551|0,i=(i<<21|i>>>11)+s|0,e[0]=r+e[0]|0,e[1]=i+e[1]|0,e[2]=s+e[2]|0,e[3]=o+e[3]|0}start(){return this._dataLength=0,this._bufferLength=0,this._state.set(Q.stateIdentity),this}appendStr(e){let t=this._buffer8,r=this._buffer32,i=this._bufferLength,s,o;for(o=0;o<e.length;o+=1){if(s=e.charCodeAt(o),s<128)t[i++]=s;else if(s<2048)t[i++]=(s>>>6)+192,t[i++]=s&63|128;else if(s<55296||s>56319)t[i++]=(s>>>12)+224,t[i++]=s>>>6&63|128,t[i++]=s&63|128;else{if(s=(s-55296)*1024+(e.charCodeAt(++o)-56320)+65536,s>1114111)throw new Error("Unicode standard supports code points up to U+10FFFF");t[i++]=(s>>>18)+240,t[i++]=s>>>12&63|128,t[i++]=s>>>6&63|128,t[i++]=s&63|128}i>=64&&(this._dataLength+=64,Q._md5cycle(this._state,r),i-=64,r[0]=r[16])}return this._bufferLength=i,this}appendAsciiStr(e){let t=this._buffer8,r=this._buffer32,i=this._bufferLength,s,o=0;for(;;){for(s=Math.min(e.length-o,64-i);s--;)t[i++]=e.charCodeAt(o++);if(i<64)break;this._dataLength+=64,Q._md5cycle(this._state,r),i=0}return this._bufferLength=i,this}appendByteArray(e){let t=this._buffer8,r=this._buffer32,i=this._bufferLength,s,o=0;for(;;){for(s=Math.min(e.length-o,64-i);s--;)t[i++]=e[o++];if(i<64)break;this._dataLength+=64,Q._md5cycle(this._state,r),i=0}return this._bufferLength=i,this}getState(){let e=this,t=e._state;return{buffer:String.fromCharCode.apply(null,e._buffer8),buflen:e._bufferLength,length:e._dataLength,state:[t[0],t[1],t[2],t[3]]}}setState(e){let t=e.buffer,r=e.state,i=this._state,s;for(this._dataLength=e.length,this._bufferLength=e.buflen,i[0]=r[0],i[1]=r[1],i[2]=r[2],i[3]=r[3],s=0;s<t.length;s+=1)this._buffer8[s]=t.charCodeAt(s)}end(e=!1){let t=this._bufferLength,r=this._buffer8,i=this._buffer32,s=(t>>2)+1,o;if(this._dataLength+=t,r[t]=128,r[t+1]=r[t+2]=r[t+3]=0,i.set(Q.buffer32Identity.subarray(s),s),t>55&&(Q._md5cycle(this._state,i),i.set(Q.buffer32Identity)),o=this._dataLength*8,o<=4294967295)i[14]=o;else{let a=o.toString(16).match(/(.*?)(.{0,8})$/);if(a===null)return;let d=parseInt(a[2],16),h=parseInt(a[1],16)||0;i[14]=d,i[15]=h}return Q._md5cycle(this._state,i),e?this._state:Q._hex(this._state)}};Q.stateIdentity=new Int32Array([1732584193,-271733879,-1732584194,271733878]);Q.buffer32Identity=new Int32Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]);Q.hexChars="0123456789abcdef";Q.hexOut=[];Q.onePassHasher=new Q;Q.hashStr("hello")!=="5d41402abc4b2a76b9719d911017c592"&&console.error("Md5 self test failed.");function rt(n){return Q.hashStr(n)}var br=class{constructor(e,t,r,i){this.logger=e.getLogger("sipjs.digestauthentication"),this.username=r,this.password=i,this.ha1=t,this.nc=0,this.ncHex="00000000"}authenticate(e,t,r){if(this.algorithm=t.algorithm,this.realm=t.realm,this.nonce=t.nonce,this.opaque=t.opaque,this.stale=t.stale,this.algorithm){if(this.algorithm!=="MD5")return this.logger.warn("challenge with Digest algorithm different than 'MD5', authentication aborted"),!1}else this.algorithm="MD5";if(!this.realm)return this.logger.warn("challenge without Digest realm, authentication aborted"),!1;if(!this.nonce)return this.logger.warn("challenge without Digest nonce, authentication aborted"),!1;if(t.qop)if(t.qop.indexOf("auth")>-1)this.qop="auth";else if(t.qop.indexOf("auth-int")>-1)this.qop="auth-int";else return this.logger.warn("challenge without Digest qop different than 'auth' or 'auth-int', authentication aborted"),!1;else this.qop=void 0;return this.method=e.method,this.uri=e.ruri,this.cnonce=Ue(12),this.nc+=1,this.updateNcHex(),this.nc===4294967296&&(this.nc=1,this.ncHex="00000001"),this.calculateResponse(r),!0}toString(){let e=[];if(!this.response)throw new Error("response field does not exist, cannot generate Authorization header");return e.push("algorithm="+this.algorithm),e.push('username="'+this.username+'"'),e.push('realm="'+this.realm+'"'),e.push('nonce="'+this.nonce+'"'),e.push('uri="'+this.uri+'"'),e.push('response="'+this.response+'"'),this.opaque&&e.push('opaque="'+this.opaque+'"'),this.qop&&(e.push("qop="+this.qop),e.push('cnonce="'+this.cnonce+'"'),e.push("nc="+this.ncHex)),"Digest "+e.join(", ")}updateNcHex(){let e=Number(this.nc).toString(16);this.ncHex="00000000".substr(0,8-e.length)+e}calculateResponse(e){let t,r;t=this.ha1,(t===""||t===void 0)&&(t=rt(this.username+":"+this.realm+":"+this.password)),this.qop==="auth"?(r=rt(this.method+":"+this.uri),this.response=rt(t+":"+this.nonce+":"+this.ncHex+":"+this.cnonce+":auth:"+r)):this.qop==="auth-int"?(r=rt(this.method+":"+this.uri+":"+rt(e||"")),this.response=rt(t+":"+this.nonce+":"+this.ncHex+":"+this.cnonce+":auth-int:"+r)):this.qop===void 0&&(r=rt(this.method+":"+this.uri),this.response=rt(t+":"+this.nonce+":"+r))}};var ie;(function(n){n[n.error=0]="error",n[n.warn=1]="warn",n[n.log=2]="log",n[n.debug=3]="debug"})(ie=ie||(ie={}));var Bt=class{constructor(e,t,r){this.logger=e,this.category=t,this.label=r}error(e){this.genericLog(ie.error,e)}warn(e){this.genericLog(ie.warn,e)}log(e){this.genericLog(ie.log,e)}debug(e){this.genericLog(ie.debug,e)}genericLog(e,t){this.logger.genericLog(e,this.category,this.label,t)}get level(){return this.logger.level}set level(e){this.logger.level=e}};var xr=class{constructor(){this.builtinEnabled=!0,this._level=ie.log,this.loggers={},this.logger=this.getLogger("sip:loggerfactory")}get level(){return this._level}set level(e){e>=0&&e<=3?this._level=e:e>3?this._level=3:ie.hasOwnProperty(e)?this._level=e:this.logger.error("invalid 'level' parameter value: "+JSON.stringify(e))}get connector(){return this._connector}set connector(e){e?typeof e=="function"?this._connector=e:this.logger.error("invalid 'connector' parameter value: "+JSON.stringify(e)):this._connector=void 0}getLogger(e,t){if(t&&this.level===3)return new Bt(this,e,t);if(this.loggers[e])return this.loggers[e];{let r=new Bt(this,e);return this.loggers[e]=r,r}}genericLog(e,t,r,i){this.level>=e&&this.builtinEnabled&&this.print(e,t,r,i),this.connector&&this.connector(ie[e],t,r,i)}print(e,t,r,i){if(typeof i=="string"){let s=[new Date,t];r&&s.push(r),i=s.concat(i).join(" | ")}switch(e){case ie.error:console.error(i);break;case ie.warn:console.warn(i);break;case ie.log:console.log(i);break;case ie.debug:console.debug(i);break;default:break}}};var jt;(function(n){function e(i,s){let o=s,a=0,d=0;if(i.substring(o,o+2).match(/(^\r\n)/))return-2;for(;a===0;){if(d=i.indexOf(`\r
30
+ `,e}};function Un(n){return n==="application/sdp"?"session":"render"}function St(n){let e=typeof n=="string"?n:n.body,t=typeof n=="string"?"application/sdp":n.contentType;return{contentDisposition:Un(t),contentType:t,content:e}}function qi(n){return n&&typeof n.content=="string"&&typeof n.contentType=="string"&&n.contentDisposition===void 0?!0:typeof n.contentDisposition=="string"}function et(n){let e,t,r;if(n instanceof Pe&&n.body){let i=n.parseHeader("Content-Disposition");e=i?i.type:void 0,t=n.parseHeader("Content-Type"),r=n.body}if(n instanceof me&&n.body){let i=n.parseHeader("Content-Disposition");e=i?i.type:void 0,t=n.parseHeader("Content-Type"),r=n.body}if(n instanceof Ne&&n.body)if(e=n.getHeader("Content-Disposition"),t=n.getHeader("Content-Type"),typeof n.body=="string"){if(!t)throw new Error("Header content type header does not equal body content type.");r=n.body}else{if(t&&t!==n.body.contentType)throw new Error("Header content type header does not equal body content type.");t=n.body.contentType,r=n.body.body}if(qi(n)&&(e=n.contentDisposition,t=n.contentType,r=n.content),!!r){if(t&&!e&&(e=Un(t)),!e)throw new Error("Content disposition undefined.");if(!t)throw new Error("Content type undefined.");return{contentDisposition:e,contentType:t,content:r}}}var we;(function(n){n.Initial="Initial",n.Early="Early",n.AckWait="AckWait",n.Confirmed="Confirmed",n.Terminated="Terminated"})(we=we||(we={}));var b;(function(n){n.Initial="Initial",n.HaveLocalOffer="HaveLocalOffer",n.HaveRemoteOffer="HaveRemoteOffer",n.Stable="Stable",n.Closed="Closed"})(b=b||(b={}));var J={T1:500,T2:4e3,T4:5e3,TIMER_B:32e3,TIMER_D:0,TIMER_F:32e3,TIMER_H:32e3,TIMER_I:0,TIMER_J:0,TIMER_K:0,TIMER_L:32e3,TIMER_M:32e3,TIMER_N:32e3,PROVISIONAL_RESPONSE_INTERVAL:6e4};var Ae=class extends he{constructor(e){super(e||"Transaction state error.")}};var I;(function(n){n.ACK="ACK",n.BYE="BYE",n.CANCEL="CANCEL",n.INFO="INFO",n.INVITE="INVITE",n.MESSAGE="MESSAGE",n.NOTIFY="NOTIFY",n.OPTIONS="OPTIONS",n.REGISTER="REGISTER",n.UPDATE="UPDATE",n.SUBSCRIBE="SUBSCRIBE",n.PUBLISH="PUBLISH",n.REFER="REFER",n.PRACK="PRACK"})(I=I||(I={}));var Oe=[I.ACK,I.BYE,I.CANCEL,I.INFO,I.INVITE,I.MESSAGE,I.NOTIFY,I.OPTIONS,I.PRACK,I.REFER,I.REGISTER,I.SUBSCRIBE];var yt=class{constructor(e){this.incomingMessageRequest=e}get request(){return this.incomingMessageRequest.message}accept(e){return this.incomingMessageRequest.accept(e),Promise.resolve()}reject(e){return this.incomingMessageRequest.reject(e),Promise.resolve()}};var lt=class{constructor(e){this.incomingNotifyRequest=e}get request(){return this.incomingNotifyRequest.message}accept(e){return this.incomingNotifyRequest.accept(e),Promise.resolve()}reject(e){return this.incomingNotifyRequest.reject(e),Promise.resolve()}};var yr=class{constructor(e,t){this.incomingReferRequest=e,this.session=t}get referTo(){let e=this.incomingReferRequest.message.parseHeader("refer-to");if(!(e instanceof ee))throw new Error("Failed to parse Refer-To header.");return e}get referredBy(){return this.incomingReferRequest.message.getHeader("referred-by")}get replaces(){let e=this.referTo.uri.getHeader("replaces");return e instanceof Array?e[0]:e}get request(){return this.incomingReferRequest.message}accept(e={statusCode:202}){return this.incomingReferRequest.accept(e),Promise.resolve()}reject(e){return this.incomingReferRequest.reject(e),Promise.resolve()}makeInviter(e){if(this.inviter)return this.inviter;let t=this.referTo.uri.clone();t.clearHeaders(),e=e||{};let r=(e.extraHeaders||[]).slice(),i=this.replaces;i&&r.push("Replaces: "+decodeURIComponent(i));let s=this.referredBy;return s&&r.push("Referred-By: "+s),e.extraHeaders=r,this.inviter=this.session.userAgent._makeInviter(t,e),this.inviter._referred=this.session,this.session._referral=this.inviter,this.inviter}};var v;(function(n){n.Initial="Initial",n.Establishing="Establishing",n.Established="Established",n.Terminating="Terminating",n.Terminated="Terminated"})(v=v||(v={}));var qe=class{constructor(e,t={}){this.pendingReinvite=!1,this.pendingReinviteAck=!1,this._state=v.Initial,this.delegate=t.delegate,this._stateEventEmitter=new He,this._userAgent=e}dispose(){switch(this.logger.log(`Session ${this.id} in state ${this._state} is being disposed`),delete this.userAgent._sessions[this.id],this._sessionDescriptionHandler&&this._sessionDescriptionHandler.close(),this.state){case v.Initial:break;case v.Establishing:break;case v.Established:return new Promise(e=>{this._bye({onAccept:()=>e(),onRedirect:()=>e(),onReject:()=>e()})});case v.Terminating:break;case v.Terminated:break;default:throw new Error("Unknown state.")}return Promise.resolve()}get assertedIdentity(){return this._assertedIdentity}get dialog(){return this._dialog}get id(){return this._id}get replacee(){return this._replacee}get sessionDescriptionHandler(){return this._sessionDescriptionHandler}get sessionDescriptionHandlerFactory(){return this.userAgent.configuration.sessionDescriptionHandlerFactory}get sessionDescriptionHandlerModifiers(){return this._sessionDescriptionHandlerModifiers||[]}set sessionDescriptionHandlerModifiers(e){this._sessionDescriptionHandlerModifiers=e.slice()}get sessionDescriptionHandlerOptions(){return this._sessionDescriptionHandlerOptions||{}}set sessionDescriptionHandlerOptions(e){this._sessionDescriptionHandlerOptions=Object.assign({},e)}get sessionDescriptionHandlerModifiersReInvite(){return this._sessionDescriptionHandlerModifiersReInvite||[]}set sessionDescriptionHandlerModifiersReInvite(e){this._sessionDescriptionHandlerModifiersReInvite=e.slice()}get sessionDescriptionHandlerOptionsReInvite(){return this._sessionDescriptionHandlerOptionsReInvite||{}}set sessionDescriptionHandlerOptionsReInvite(e){this._sessionDescriptionHandlerOptionsReInvite=Object.assign({},e)}get state(){return this._state}get stateChange(){return this._stateEventEmitter}get userAgent(){return this._userAgent}bye(e={}){let t="Session.bye() may only be called if established session.";switch(this.state){case v.Initial:typeof this.cancel=="function"?(t+=" However Inviter.invite() has not yet been called.",t+=" Perhaps you should have called Inviter.cancel()?"):typeof this.reject=="function"&&(t+=" However Invitation.accept() has not yet been called.",t+=" Perhaps you should have called Invitation.reject()?");break;case v.Establishing:typeof this.cancel=="function"?(t+=" However a dialog does not yet exist.",t+=" Perhaps you should have called Inviter.cancel()?"):typeof this.reject=="function"&&(t+=" However Invitation.accept() has not yet been called (or not yet resolved).",t+=" Perhaps you should have called Invitation.reject()?");break;case v.Established:{let r=e.requestDelegate,i=this.copyRequestOptions(e.requestOptions);return this._bye(r,i)}case v.Terminating:t+=" However this session is already terminating.",typeof this.cancel=="function"?t+=" Perhaps you have already called Inviter.cancel()?":typeof this.reject=="function"&&(t+=" Perhaps you have already called Session.bye()?");break;case v.Terminated:t+=" However this session is already terminated.";break;default:throw new Error("Unknown state")}return this.logger.error(t),Promise.reject(new Error(`Invalid session state ${this.state}`))}info(e={}){if(this.state!==v.Established){let i="Session.info() may only be called if established session.";return this.logger.error(i),Promise.reject(new Error(`Invalid session state ${this.state}`))}let t=e.requestDelegate,r=this.copyRequestOptions(e.requestOptions);return this._info(t,r)}invite(e={}){if(this.logger.log("Session.invite"),this.state!==v.Established)return Promise.reject(new Error(`Invalid session state ${this.state}`));if(this.pendingReinvite)return Promise.reject(new Fe("Reinvite in progress. Please wait until complete, then try again."));this.pendingReinvite=!0,e.sessionDescriptionHandlerModifiers&&(this.sessionDescriptionHandlerModifiersReInvite=e.sessionDescriptionHandlerModifiers),e.sessionDescriptionHandlerOptions&&(this.sessionDescriptionHandlerOptionsReInvite=e.sessionDescriptionHandlerOptions);let t={onAccept:s=>{let o=et(s.message);if(!o){this.logger.error("Received 2xx response to re-INVITE without a session description"),this.ackAndBye(s,400,"Missing session description"),this.stateTransition(v.Terminated),this.pendingReinvite=!1;return}if(e.withoutSdp){let a={sessionDescriptionHandlerOptions:this.sessionDescriptionHandlerOptionsReInvite,sessionDescriptionHandlerModifiers:this.sessionDescriptionHandlerModifiersReInvite};this.setOfferAndGetAnswer(o,a).then(d=>{s.ack({body:d})}).catch(d=>{this.logger.error("Failed to handle offer in 2xx response to re-INVITE"),this.logger.error(d.message),this.state===v.Terminated?s.ack():(this.ackAndBye(s,488,"Bad Media Description"),this.stateTransition(v.Terminated))}).then(()=>{this.pendingReinvite=!1,e.requestDelegate&&e.requestDelegate.onAccept&&e.requestDelegate.onAccept(s)})}else{let a={sessionDescriptionHandlerOptions:this.sessionDescriptionHandlerOptionsReInvite,sessionDescriptionHandlerModifiers:this.sessionDescriptionHandlerModifiersReInvite};this.setAnswer(o,a).then(()=>{s.ack()}).catch(d=>{this.logger.error("Failed to handle answer in 2xx response to re-INVITE"),this.logger.error(d.message),this.state!==v.Terminated?(this.ackAndBye(s,488,"Bad Media Description"),this.stateTransition(v.Terminated)):s.ack()}).then(()=>{this.pendingReinvite=!1,e.requestDelegate&&e.requestDelegate.onAccept&&e.requestDelegate.onAccept(s)})}},onProgress:s=>{},onRedirect:s=>{},onReject:s=>{this.logger.warn("Received a non-2xx response to re-INVITE"),this.pendingReinvite=!1,e.withoutSdp?e.requestDelegate&&e.requestDelegate.onReject&&e.requestDelegate.onReject(s):this.rollbackOffer().catch(o=>{if(this.logger.error("Failed to rollback offer on non-2xx response to re-INVITE"),this.logger.error(o.message),this.state!==v.Terminated){if(!this.dialog)throw new Error("Dialog undefined.");let a=[];a.push("Reason: "+this.getReasonHeaderValue(500,"Internal Server Error")),this.dialog.bye(void 0,{extraHeaders:a}),this.stateTransition(v.Terminated)}}).then(()=>{e.requestDelegate&&e.requestDelegate.onReject&&e.requestDelegate.onReject(s)})},onTrying:s=>{}},r=e.requestOptions||{};if(r.extraHeaders=(r.extraHeaders||[]).slice(),r.extraHeaders.push("Allow: "+Oe.toString()),r.extraHeaders.push("Contact: "+this._contact),e.withoutSdp){if(!this.dialog)throw this.pendingReinvite=!1,new Error("Dialog undefined.");return Promise.resolve(this.dialog.invite(t,r))}let i={sessionDescriptionHandlerOptions:this.sessionDescriptionHandlerOptionsReInvite,sessionDescriptionHandlerModifiers:this.sessionDescriptionHandlerModifiersReInvite};return this.getOffer(i).then(s=>{if(!this.dialog)throw this.pendingReinvite=!1,new Error("Dialog undefined.");return r.body=s,this.dialog.invite(t,r)}).catch(s=>{throw this.logger.error(s.message),this.logger.error("Failed to send re-INVITE"),this.pendingReinvite=!1,s})}message(e={}){if(this.state!==v.Established){let i="Session.message() may only be called if established session.";return this.logger.error(i),Promise.reject(new Error(`Invalid session state ${this.state}`))}let t=e.requestDelegate,r=this.copyRequestOptions(e.requestOptions);return this._message(t,r)}refer(e,t={}){if(this.state!==v.Established){let s="Session.refer() may only be called if established session.";return this.logger.error(s),Promise.reject(new Error(`Invalid session state ${this.state}`))}if(e instanceof qe&&!e.dialog){let s="Session.refer() may only be called with session which is established. You are perhaps attempting to attended transfer to a target for which there is not dialog yet established. Perhaps you are attempting a 'semi-attended' tansfer? Regardless, this is not supported. The recommended approached is to check to see if the target Session is in the Established state before calling refer(); if the state is not Established you may proceed by falling back using a URI as the target (blind transfer).";return this.logger.error(s),Promise.reject(new Error(`Invalid session state ${this.state}`))}let r=t.requestDelegate,i=this.copyRequestOptions(t.requestOptions);return i.extraHeaders=i.extraHeaders?i.extraHeaders.concat(this.referExtraHeaders(this.referToString(e))):this.referExtraHeaders(this.referToString(e)),this._refer(t.onNotify,r,i)}_bye(e,t){if(!this.dialog)return Promise.reject(new Error("Session dialog undefined."));let r=this.dialog;switch(r.sessionState){case we.Initial:throw new Error(`Invalid dialog state ${r.sessionState}`);case we.Early:throw new Error(`Invalid dialog state ${r.sessionState}`);case we.AckWait:return this.stateTransition(v.Terminating),new Promise(i=>{r.delegate={onAck:()=>{let s=r.bye(e,t);return this.stateTransition(v.Terminated),i(s),Promise.resolve()},onAckTimeout:()=>{let s=r.bye(e,t);this.stateTransition(v.Terminated),i(s)}}});case we.Confirmed:{let i=r.bye(e,t);return this.stateTransition(v.Terminated),Promise.resolve(i)}case we.Terminated:throw new Error(`Invalid dialog state ${r.sessionState}`);default:throw new Error("Unrecognized state.")}}_info(e,t){return this.dialog?Promise.resolve(this.dialog.info(e,t)):Promise.reject(new Error("Session dialog undefined."))}_message(e,t){return this.dialog?Promise.resolve(this.dialog.message(e,t)):Promise.reject(new Error("Session dialog undefined."))}_refer(e,t,r){return this.dialog?(this.onNotify=e,Promise.resolve(this.dialog.refer(t,r))):Promise.reject(new Error("Session dialog undefined."))}ackAndBye(e,t,r){e.ack();let i=[];t&&i.push("Reason: "+this.getReasonHeaderValue(t,r)),e.session.bye(void 0,{extraHeaders:i})}onAckRequest(e){if(this.logger.log("Session.onAckRequest"),this.state!==v.Established&&this.state!==v.Terminating)return this.logger.error(`ACK received while in state ${this.state}, dropping request`),Promise.resolve();let t=this.dialog;if(!t)throw new Error("Dialog undefined.");let r={sessionDescriptionHandlerOptions:this.pendingReinviteAck?this.sessionDescriptionHandlerOptionsReInvite:this.sessionDescriptionHandlerOptions,sessionDescriptionHandlerModifiers:this.pendingReinviteAck?this._sessionDescriptionHandlerModifiersReInvite:this._sessionDescriptionHandlerModifiers};if(this.delegate&&this.delegate.onAck){let i=new wr(e);this.delegate.onAck(i)}switch(this.pendingReinviteAck=!1,t.signalingState){case b.Initial:{this.logger.error(`Invalid signaling state ${t.signalingState}.`);let i=["Reason: "+this.getReasonHeaderValue(488,"Bad Media Description")];return t.bye(void 0,{extraHeaders:i}),this.stateTransition(v.Terminated),Promise.resolve()}case b.Stable:{let i=et(e.message);return i?i.contentDisposition==="render"?(this._renderbody=i.content,this._rendertype=i.contentType,Promise.resolve()):i.contentDisposition!=="session"?Promise.resolve():this.setAnswer(i,r).catch(s=>{this.logger.error(s.message);let o=["Reason: "+this.getReasonHeaderValue(488,"Bad Media Description")];t.bye(void 0,{extraHeaders:o}),this.stateTransition(v.Terminated)}):Promise.resolve()}case b.HaveLocalOffer:{this.logger.error(`Invalid signaling state ${t.signalingState}.`);let i=["Reason: "+this.getReasonHeaderValue(488,"Bad Media Description")];return t.bye(void 0,{extraHeaders:i}),this.stateTransition(v.Terminated),Promise.resolve()}case b.HaveRemoteOffer:{this.logger.error(`Invalid signaling state ${t.signalingState}.`);let i=["Reason: "+this.getReasonHeaderValue(488,"Bad Media Description")];return t.bye(void 0,{extraHeaders:i}),this.stateTransition(v.Terminated),Promise.resolve()}case b.Closed:throw new Error(`Invalid signaling state ${t.signalingState}.`);default:throw new Error(`Invalid signaling state ${t.signalingState}.`)}}onByeRequest(e){if(this.logger.log("Session.onByeRequest"),this.state!==v.Established){this.logger.error(`BYE received while in state ${this.state}, dropping request`);return}if(this.delegate&&this.delegate.onBye){let t=new Tr(e);this.delegate.onBye(t)}else e.accept();this.stateTransition(v.Terminated)}onInfoRequest(e){if(this.logger.log("Session.onInfoRequest"),this.state!==v.Established){this.logger.error(`INFO received while in state ${this.state}, dropping request`);return}if(this.delegate&&this.delegate.onInfo){let t=new Sr(e);this.delegate.onInfo(t)}else e.accept()}onInviteRequest(e){if(this.logger.log("Session.onInviteRequest"),this.state!==v.Established){this.logger.error(`INVITE received while in state ${this.state}, dropping request`);return}this.pendingReinviteAck=!0;let t=["Contact: "+this._contact];if(e.message.hasHeader("P-Asserted-Identity")){let i=e.message.getHeader("P-Asserted-Identity");if(!i)throw new Error("Header undefined.");this._assertedIdentity=W.nameAddrHeaderParse(i)}let r={sessionDescriptionHandlerOptions:this.sessionDescriptionHandlerOptionsReInvite,sessionDescriptionHandlerModifiers:this.sessionDescriptionHandlerModifiersReInvite};this.generateResponseOfferAnswerInDialog(r).then(i=>{let s=e.accept({statusCode:200,extraHeaders:t,body:i});this.delegate&&this.delegate.onInvite&&this.delegate.onInvite(e.message,s.message,200)}).catch(i=>{if(this.logger.error(i.message),this.logger.error("Failed to handle to re-INVITE request"),!this.dialog)throw new Error("Dialog undefined.");if(this.logger.error(this.dialog.signalingState),this.dialog.signalingState===b.Stable){let s=e.reject({statusCode:488});this.delegate&&this.delegate.onInvite&&this.delegate.onInvite(e.message,s.message,488);return}this.rollbackOffer().then(()=>{let s=e.reject({statusCode:488});this.delegate&&this.delegate.onInvite&&this.delegate.onInvite(e.message,s.message,488)}).catch(s=>{this.logger.error(s.message),this.logger.error("Failed to rollback offer on re-INVITE request");let o=e.reject({statusCode:488});if(this.state!==v.Terminated){if(!this.dialog)throw new Error("Dialog undefined.");let a=[];a.push("Reason: "+this.getReasonHeaderValue(500,"Internal Server Error")),this.dialog.bye(void 0,{extraHeaders:a}),this.stateTransition(v.Terminated)}this.delegate&&this.delegate.onInvite&&this.delegate.onInvite(e.message,o.message,488)})})}onMessageRequest(e){if(this.logger.log("Session.onMessageRequest"),this.state!==v.Established){this.logger.error(`MESSAGE received while in state ${this.state}, dropping request`);return}if(this.delegate&&this.delegate.onMessage){let t=new yt(e);this.delegate.onMessage(t)}else e.accept()}onNotifyRequest(e){if(this.logger.log("Session.onNotifyRequest"),this.state!==v.Established){this.logger.error(`NOTIFY received while in state ${this.state}, dropping request`);return}if(this.onNotify){let t=new lt(e);this.onNotify(t);return}if(this.delegate&&this.delegate.onNotify){let t=new lt(e);this.delegate.onNotify(t)}else e.accept()}onPrackRequest(e){if(this.logger.log("Session.onPrackRequest"),this.state!==v.Established){this.logger.error(`PRACK received while in state ${this.state}, dropping request`);return}throw new Error("Unimplemented.")}onReferRequest(e){if(this.logger.log("Session.onReferRequest"),this.state!==v.Established){this.logger.error(`REFER received while in state ${this.state}, dropping request`);return}if(!e.message.hasHeader("refer-to")){this.logger.warn("Invalid REFER packet. A refer-to header is required. Rejecting."),e.reject();return}let t=new yr(e,this);this.delegate&&this.delegate.onRefer?this.delegate.onRefer(t):(this.logger.log("No delegate available to handle REFER, automatically accepting and following."),t.accept().then(()=>t.makeInviter(this._referralInviterOptions).invite()).catch(r=>{this.logger.error(r.message)}))}generateResponseOfferAnswer(e,t){if(this.dialog)return this.generateResponseOfferAnswerInDialog(t);let r=et(e.message);return!r||r.contentDisposition!=="session"?this.getOffer(t):this.setOfferAndGetAnswer(r,t)}generateResponseOfferAnswerInDialog(e){if(!this.dialog)throw new Error("Dialog undefined.");switch(this.dialog.signalingState){case b.Initial:return this.getOffer(e);case b.HaveLocalOffer:return Promise.resolve(void 0);case b.HaveRemoteOffer:if(!this.dialog.offer)throw new Error(`Session offer undefined in signaling state ${this.dialog.signalingState}.`);return this.setOfferAndGetAnswer(this.dialog.offer,e);case b.Stable:return this.state!==v.Established?Promise.resolve(void 0):this.getOffer(e);case b.Closed:throw new Error(`Invalid signaling state ${this.dialog.signalingState}.`);default:throw new Error(`Invalid signaling state ${this.dialog.signalingState}.`)}}getOffer(e){let t=this.setupSessionDescriptionHandler(),r=e.sessionDescriptionHandlerOptions,i=e.sessionDescriptionHandlerModifiers;try{return t.getDescription(r,i).then(s=>St(s)).catch(s=>{this.logger.error("Session.getOffer: SDH getDescription rejected...");let o=s instanceof Error?s:new Error("Session.getOffer unknown error.");throw this.logger.error(o.message),o})}catch(s){this.logger.error("Session.getOffer: SDH getDescription threw...");let o=s instanceof Error?s:new Error(s);return this.logger.error(o.message),Promise.reject(o)}}rollbackOffer(){let e=this.setupSessionDescriptionHandler();if(e.rollbackDescription===void 0)return Promise.resolve();try{return e.rollbackDescription().catch(t=>{this.logger.error("Session.rollbackOffer: SDH rollbackDescription rejected...");let r=t instanceof Error?t:new Error("Session.rollbackOffer unknown error.");throw this.logger.error(r.message),r})}catch(t){this.logger.error("Session.rollbackOffer: SDH rollbackDescription threw...");let r=t instanceof Error?t:new Error(t);return this.logger.error(r.message),Promise.reject(r)}}setAnswer(e,t){let r=this.setupSessionDescriptionHandler(),i=t.sessionDescriptionHandlerOptions,s=t.sessionDescriptionHandlerModifiers;try{if(!r.hasDescription(e.contentType))return Promise.reject(new ct)}catch(o){this.logger.error("Session.setAnswer: SDH hasDescription threw...");let a=o instanceof Error?o:new Error(o);return this.logger.error(a.message),Promise.reject(a)}try{return r.setDescription(e.content,i,s).catch(o=>{this.logger.error("Session.setAnswer: SDH setDescription rejected...");let a=o instanceof Error?o:new Error("Session.setAnswer unknown error.");throw this.logger.error(a.message),a})}catch(o){this.logger.error("Session.setAnswer: SDH setDescription threw...");let a=o instanceof Error?o:new Error(o);return this.logger.error(a.message),Promise.reject(a)}}setOfferAndGetAnswer(e,t){let r=this.setupSessionDescriptionHandler(),i=t.sessionDescriptionHandlerOptions,s=t.sessionDescriptionHandlerModifiers;try{if(!r.hasDescription(e.contentType))return Promise.reject(new ct)}catch(o){this.logger.error("Session.setOfferAndGetAnswer: SDH hasDescription threw...");let a=o instanceof Error?o:new Error(o);return this.logger.error(a.message),Promise.reject(a)}try{return r.setDescription(e.content,i,s).then(()=>r.getDescription(i,s)).then(o=>St(o)).catch(o=>{this.logger.error("Session.setOfferAndGetAnswer: SDH setDescription or getDescription rejected...");let a=o instanceof Error?o:new Error("Session.setOfferAndGetAnswer unknown error.");throw this.logger.error(a.message),a})}catch(o){this.logger.error("Session.setOfferAndGetAnswer: SDH setDescription or getDescription threw...");let a=o instanceof Error?o:new Error(o);return this.logger.error(a.message),Promise.reject(a)}}setSessionDescriptionHandler(e){if(this._sessionDescriptionHandler)throw new Error("Session description handler defined.");this._sessionDescriptionHandler=e}setupSessionDescriptionHandler(){var e;return this._sessionDescriptionHandler?this._sessionDescriptionHandler:(this._sessionDescriptionHandler=this.sessionDescriptionHandlerFactory(this,this.userAgent.configuration.sessionDescriptionHandlerFactoryOptions),!((e=this.delegate)===null||e===void 0)&&e.onSessionDescriptionHandler&&this.delegate.onSessionDescriptionHandler(this._sessionDescriptionHandler,!1),this._sessionDescriptionHandler)}stateTransition(e){let t=()=>{throw new Error(`Invalid state transition from ${this._state} to ${e}`)};switch(this._state){case v.Initial:e!==v.Establishing&&e!==v.Established&&e!==v.Terminating&&e!==v.Terminated&&t();break;case v.Establishing:e!==v.Established&&e!==v.Terminating&&e!==v.Terminated&&t();break;case v.Established:e!==v.Terminating&&e!==v.Terminated&&t();break;case v.Terminating:e!==v.Terminated&&t();break;case v.Terminated:t();break;default:throw new Error("Unrecognized state.")}this._state=e,this.logger.log(`Session ${this.id} transitioned to state ${this._state}`),this._stateEventEmitter.emit(this._state),e===v.Terminated&&this.dispose()}copyRequestOptions(e={}){let t=e.extraHeaders?e.extraHeaders.slice():void 0,r=e.body?{contentDisposition:e.body.contentDisposition||"render",contentType:e.body.contentType||"text/plain",content:e.body.content||""}:void 0;return{extraHeaders:t,body:r}}getReasonHeaderValue(e,t){let r=e,i=Ze(e);return!i&&t&&(i=t),"SIP;cause="+r+';text="'+i+'"'}referExtraHeaders(e){let t=[];return t.push("Referred-By: <"+this.userAgent.configuration.uri+">"),t.push("Contact: "+this._contact),t.push("Allow: "+["ACK","CANCEL","INVITE","MESSAGE","BYE","OPTIONS","INFO","NOTIFY","REFER"].toString()),t.push("Refer-To: "+e),t}referToString(e){let t;if(e instanceof ue)t=e.toString();else{if(!e.dialog)throw new Error("Dialog undefined.");let r=e.remoteIdentity.friendlyName,i=e.dialog.remoteTarget.toString(),s=e.dialog.callId,o=e.dialog.remoteTag,a=e.dialog.localTag,d=encodeURIComponent(`${s};to-tag=${o};from-tag=${a}`);t=`"${r}" <${i}?Replaces=${d}>`}return t}};var Te;(function(n){n.Required="Required",n.Supported="Supported",n.Unsupported="Unsupported"})(Te=Te||(Te={}));var Bn={"100rel":!0,199:!0,answermode:!0,"early-session":!0,eventlist:!0,explicitsub:!0,"from-change":!0,"geolocation-http":!0,"geolocation-sip":!0,gin:!0,gruu:!0,histinfo:!0,ice:!0,join:!0,"multiple-refer":!0,norefersub:!0,nosub:!0,outbound:!0,path:!0,policy:!0,precondition:!0,pref:!0,privacy:!0,"recipient-list-invite":!0,"recipient-list-message":!0,"recipient-list-subscribe":!0,replaces:!0,"resource-priority":!0,"sdp-anat":!0,"sec-agree":!0,tdialog:!0,timer:!0,uui:!0};var Ge=class extends qe{constructor(e,t){super(e),this.incomingInviteRequest=t,this.disposed=!1,this.expiresTimer=void 0,this.isCanceled=!1,this.rel100="none",this.rseq=Math.floor(Math.random()*1e4),this.userNoAnswerTimer=void 0,this.waitingForPrack=!1,this.logger=e.getLogger("sip.Invitation");let r=this.incomingInviteRequest.message,i=r.getHeader("require");i&&i.toLowerCase().includes("100rel")&&(this.rel100="required");let s=r.getHeader("supported");if(s&&s.toLowerCase().includes("100rel")&&(this.rel100="supported"),r.toTag=t.toTag,typeof r.toTag!="string")throw new TypeError("toTag should have been a string.");if(this.userNoAnswerTimer=setTimeout(()=>{t.reject({statusCode:480}),this.stateTransition(v.Terminated)},this.userAgent.configuration.noAnswerTimeout?this.userAgent.configuration.noAnswerTimeout*1e3:6e4),r.hasHeader("expires")){let d=Number(r.getHeader("expires")||0)*1e3;this.expiresTimer=setTimeout(()=>{this.state===v.Initial&&(t.reject({statusCode:487}),this.stateTransition(v.Terminated))},d)}let o=this.request.getHeader("P-Asserted-Identity");o&&(this._assertedIdentity=W.nameAddrHeaderParse(o)),this._contact=this.userAgent.contact.toString();let a=r.parseHeader("Content-Disposition");a&&a.type==="render"&&(this._renderbody=r.body,this._rendertype=r.getHeader("Content-Type")),this._id=r.callId+r.fromTag,this.userAgent._sessions[this._id]=this}dispose(){if(this.disposed)return Promise.resolve();switch(this.disposed=!0,this.expiresTimer&&(clearTimeout(this.expiresTimer),this.expiresTimer=void 0),this.userNoAnswerTimer&&(clearTimeout(this.userNoAnswerTimer),this.userNoAnswerTimer=void 0),this.prackNeverArrived(),this.state){case v.Initial:return this.reject().then(()=>super.dispose());case v.Establishing:return this.reject().then(()=>super.dispose());case v.Established:return super.dispose();case v.Terminating:return super.dispose();case v.Terminated:return super.dispose();default:throw new Error("Unknown state.")}}get autoSendAnInitialProvisionalResponse(){return this.rel100!=="required"&&this.userAgent.configuration.sendInitialProvisionalResponse}get body(){return this.incomingInviteRequest.message.body}get localIdentity(){return this.request.to}get remoteIdentity(){return this.request.from}get request(){return this.incomingInviteRequest.message}accept(e={}){if(this.logger.log("Invitation.accept"),this.state!==v.Initial){let t=new Error(`Invalid session state ${this.state}`);return this.logger.error(t.message),Promise.reject(t)}return e.sessionDescriptionHandlerModifiers&&(this.sessionDescriptionHandlerModifiers=e.sessionDescriptionHandlerModifiers),e.sessionDescriptionHandlerOptions&&(this.sessionDescriptionHandlerOptions=e.sessionDescriptionHandlerOptions),this.stateTransition(v.Establishing),this.sendAccept(e).then(({message:t,session:r})=>{r.delegate={onAck:i=>this.onAckRequest(i),onAckTimeout:()=>this.onAckTimeout(),onBye:i=>this.onByeRequest(i),onInfo:i=>this.onInfoRequest(i),onInvite:i=>this.onInviteRequest(i),onMessage:i=>this.onMessageRequest(i),onNotify:i=>this.onNotifyRequest(i),onPrack:i=>this.onPrackRequest(i),onRefer:i=>this.onReferRequest(i)},this._dialog=r,this.stateTransition(v.Established),this._replacee&&this._replacee._bye()}).catch(t=>this.handleResponseError(t))}progress(e={}){if(this.logger.log("Invitation.progress"),this.state!==v.Initial){let r=new Error(`Invalid session state ${this.state}`);return this.logger.error(r.message),Promise.reject(r)}let t=e.statusCode||180;if(t<100||t>199)throw new TypeError("Invalid statusCode: "+t);return e.sessionDescriptionHandlerModifiers&&(this.sessionDescriptionHandlerModifiers=e.sessionDescriptionHandlerModifiers),e.sessionDescriptionHandlerOptions&&(this.sessionDescriptionHandlerOptions=e.sessionDescriptionHandlerOptions),this.waitingForPrack?(this.logger.warn("Unexpected call for progress while waiting for prack, ignoring"),Promise.resolve()):e.statusCode===100?this.sendProgressTrying().then(()=>{}).catch(r=>this.handleResponseError(r)):this.rel100!=="required"&&!(this.rel100==="supported"&&e.rel100)&&!(this.rel100==="supported"&&this.userAgent.configuration.sipExtension100rel===Te.Required)?this.sendProgress(e).then(()=>{}).catch(r=>this.handleResponseError(r)):this.sendProgressReliableWaitForPrack(e).then(()=>{}).catch(r=>this.handleResponseError(r))}reject(e={}){if(this.logger.log("Invitation.reject"),this.state!==v.Initial&&this.state!==v.Establishing){let o=new Error(`Invalid session state ${this.state}`);return this.logger.error(o.message),Promise.reject(o)}let t=e.statusCode||480,r=e.reasonPhrase?e.reasonPhrase:Ze(t),i=e.extraHeaders||[];if(t<300||t>699)throw new TypeError("Invalid statusCode: "+t);let s=e.body?St(e.body):void 0;return t<400?this.incomingInviteRequest.redirect([],{statusCode:t,reasonPhrase:r,extraHeaders:i,body:s}):this.incomingInviteRequest.reject({statusCode:t,reasonPhrase:r,extraHeaders:i,body:s}),this.stateTransition(v.Terminated),Promise.resolve()}_onCancel(e){if(this.logger.log("Invitation._onCancel"),this.state!==v.Initial&&this.state!==v.Establishing){this.logger.error(`CANCEL received while in state ${this.state}, dropping request`);return}if(this.delegate&&this.delegate.onCancel){let t=new Rr(e);this.delegate.onCancel(t)}this.isCanceled=!0,this.incomingInviteRequest.reject({statusCode:487}),this.stateTransition(v.Terminated)}handlePrackOfferAnswer(e){if(!this.dialog)throw new Error("Dialog undefined.");let t=et(e.message);if(!t||t.contentDisposition!=="session")return Promise.resolve(void 0);let r={sessionDescriptionHandlerOptions:this.sessionDescriptionHandlerOptions,sessionDescriptionHandlerModifiers:this.sessionDescriptionHandlerModifiers};switch(this.dialog.signalingState){case b.Initial:throw new Error(`Invalid signaling state ${this.dialog.signalingState}.`);case b.Stable:return this.setAnswer(t,r).then(()=>{});case b.HaveLocalOffer:throw new Error(`Invalid signaling state ${this.dialog.signalingState}.`);case b.HaveRemoteOffer:return this.setOfferAndGetAnswer(t,r);case b.Closed:throw new Error(`Invalid signaling state ${this.dialog.signalingState}.`);default:throw new Error(`Invalid signaling state ${this.dialog.signalingState}.`)}}handleResponseError(e){let t=480;if(e instanceof Error?this.logger.error(e.message):this.logger.error(e),e instanceof ct?(this.logger.error("A session description handler occurred while sending response (content type unsupported"),t=415):e instanceof Er?this.logger.error("A session description handler occurred while sending response"):e instanceof wt?this.logger.error("Session ended before response could be formulated and sent (while waiting for PRACK)"):e instanceof Ae&&this.logger.error("Session changed state before response could be formulated and sent"),this.state===v.Initial||this.state===v.Establishing)try{this.incomingInviteRequest.reject({statusCode:t}),this.stateTransition(v.Terminated)}catch(r){throw this.logger.error("An error occurred attempting to reject the request while handling another error"),r}if(this.isCanceled){this.logger.warn("An error occurred while attempting to formulate and send a response to an incoming INVITE. However a CANCEL was received and processed while doing so which can (and often does) result in errors occurring as the session terminates in the meantime. Said error is being ignored.");return}throw e}onAckTimeout(){if(this.logger.log("Invitation.onAckTimeout"),!this.dialog)throw new Error("Dialog undefined.");this.logger.log("No ACK received for an extended period of time, terminating session"),this.dialog.bye(),this.stateTransition(v.Terminated)}sendAccept(e={}){let t={sessionDescriptionHandlerOptions:this.sessionDescriptionHandlerOptions,sessionDescriptionHandlerModifiers:this.sessionDescriptionHandlerModifiers},r=e.extraHeaders||[];return this.waitingForPrack?this.waitForArrivalOfPrack().then(()=>clearTimeout(this.userNoAnswerTimer)).then(()=>this.generateResponseOfferAnswer(this.incomingInviteRequest,t)).then(i=>this.incomingInviteRequest.accept({statusCode:200,body:i,extraHeaders:r})):(clearTimeout(this.userNoAnswerTimer),this.generateResponseOfferAnswer(this.incomingInviteRequest,t).then(i=>this.incomingInviteRequest.accept({statusCode:200,body:i,extraHeaders:r})))}sendProgress(e={}){let t=e.statusCode||180,r=e.reasonPhrase,i=(e.extraHeaders||[]).slice(),s=e.body?St(e.body):void 0;if(t===183&&!s)return this.sendProgressWithSDP(e);try{let o=this.incomingInviteRequest.progress({statusCode:t,reasonPhrase:r,extraHeaders:i,body:s});return this._dialog=o.session,Promise.resolve(o)}catch(o){return Promise.reject(o)}}sendProgressWithSDP(e={}){let t={sessionDescriptionHandlerOptions:this.sessionDescriptionHandlerOptions,sessionDescriptionHandlerModifiers:this.sessionDescriptionHandlerModifiers},r=e.statusCode||183,i=e.reasonPhrase,s=(e.extraHeaders||[]).slice();return this.generateResponseOfferAnswer(this.incomingInviteRequest,t).then(o=>this.incomingInviteRequest.progress({statusCode:r,reasonPhrase:i,extraHeaders:s,body:o})).then(o=>(this._dialog=o.session,o))}sendProgressReliable(e={}){return e.extraHeaders=(e.extraHeaders||[]).slice(),e.extraHeaders.push("Require: 100rel"),e.extraHeaders.push("RSeq: "+Math.floor(Math.random()*1e4)),this.sendProgressWithSDP(e)}sendProgressReliableWaitForPrack(e={}){let t={sessionDescriptionHandlerOptions:this.sessionDescriptionHandlerOptions,sessionDescriptionHandlerModifiers:this.sessionDescriptionHandlerModifiers},r=e.statusCode||183,i=e.reasonPhrase,s=(e.extraHeaders||[]).slice();s.push("Require: 100rel"),s.push("RSeq: "+this.rseq++);let o;return new Promise((a,d)=>{this.waitingForPrack=!0,this.generateResponseOfferAnswer(this.incomingInviteRequest,t).then(h=>(o=h,this.incomingInviteRequest.progress({statusCode:r,reasonPhrase:i,extraHeaders:s,body:o}))).then(h=>{this._dialog=h.session;let l,u;h.session.delegate={onPrack:P=>{l=P,clearTimeout(A),clearTimeout(N),this.waitingForPrack&&(this.waitingForPrack=!1,this.handlePrackOfferAnswer(l).then(k=>{try{u=l.accept({statusCode:200,body:k}),this.prackArrived(),a({prackRequest:l,prackResponse:u,progressResponse:h})}catch(C){d(C)}}).catch(k=>d(k)))}};let A=setTimeout(()=>{this.waitingForPrack&&(this.waitingForPrack=!1,this.logger.warn("No PRACK received, rejecting INVITE."),clearTimeout(N),this.reject({statusCode:504}).then(()=>d(new wt)).catch(P=>d(P)))},J.T1*64),_=()=>{try{this.incomingInviteRequest.progress({statusCode:r,reasonPhrase:i,extraHeaders:s,body:o})}catch(P){this.waitingForPrack=!1,d(P);return}N=setTimeout(_,$*=2)},$=J.T1,N=setTimeout(_,$)}).catch(h=>{this.waitingForPrack=!1,d(h)})})}sendProgressTrying(){try{let e=this.incomingInviteRequest.trying();return Promise.resolve(e)}catch(e){return Promise.reject(e)}}waitForArrivalOfPrack(){if(this.waitingForPrackPromise)throw new Error("Already waiting for PRACK");return this.waitingForPrackPromise=new Promise((e,t)=>{this.waitingForPrackResolve=e,this.waitingForPrackReject=t}),this.waitingForPrackPromise}prackArrived(){this.waitingForPrackResolve&&this.waitingForPrackResolve(),this.waitingForPrackPromise=void 0,this.waitingForPrackResolve=void 0,this.waitingForPrackReject=void 0}prackNeverArrived(){this.waitingForPrackReject&&this.waitingForPrackReject(new wt),this.waitingForPrackPromise=void 0,this.waitingForPrackResolve=void 0,this.waitingForPrackReject=void 0}};var tt=class extends qe{constructor(e,t,r={}){super(e,r),this.disposed=!1,this.earlyMedia=!1,this.earlyMediaSessionDescriptionHandlers=new Map,this.isCanceled=!1,this.inviteWithoutSdp=!1,this.logger=e.getLogger("sip.Inviter"),this.earlyMedia=r.earlyMedia!==void 0?r.earlyMedia:this.earlyMedia,this.fromTag=Xe(),this.inviteWithoutSdp=r.inviteWithoutSdp!==void 0?r.inviteWithoutSdp:this.inviteWithoutSdp;let i=Object.assign({},r);i.params=Object.assign({},r.params);let s=r.anonymous||!1,o=e.contact.toString({anonymous:s,outbound:s?!e.contact.tempGruu:!e.contact.pubGruu});s&&e.configuration.uri&&(i.params.fromDisplayName="Anonymous",i.params.fromUri="sip:anonymous@anonymous.invalid");let a=e.userAgentCore.configuration.aor;if(i.params.fromUri&&(a=typeof i.params.fromUri=="string"?W.URIParse(i.params.fromUri):i.params.fromUri),!a)throw new TypeError("Invalid from URI: "+i.params.fromUri);let d=t;if(i.params.toUri&&(d=typeof i.params.toUri=="string"?W.URIParse(i.params.toUri):i.params.toUri),!d)throw new TypeError("Invalid to URI: "+i.params.toUri);let h=Object.assign({},i.params);h.fromTag=this.fromTag;let l=(i.extraHeaders||[]).slice();s&&e.configuration.uri&&(l.push("P-Preferred-Identity: "+e.configuration.uri.toString()),l.push("Privacy: id")),l.push("Contact: "+o),l.push("Allow: "+["ACK","CANCEL","INVITE","MESSAGE","BYE","OPTIONS","INFO","NOTIFY","REFER"].toString()),e.configuration.sipExtension100rel===Te.Required&&l.push("Require: 100rel"),e.configuration.sipExtensionReplaces===Te.Required&&l.push("Require: replaces"),i.extraHeaders=l;let u=void 0;this.outgoingRequestMessage=e.userAgentCore.makeOutgoingRequestMessage(I.INVITE,t,a,d,h,l,u),this._contact=o,this._referralInviterOptions=i,this._renderbody=r.renderbody,this._rendertype=r.rendertype,r.sessionDescriptionHandlerModifiers&&(this.sessionDescriptionHandlerModifiers=r.sessionDescriptionHandlerModifiers),r.sessionDescriptionHandlerOptions&&(this.sessionDescriptionHandlerOptions=r.sessionDescriptionHandlerOptions),r.sessionDescriptionHandlerModifiersReInvite&&(this.sessionDescriptionHandlerModifiersReInvite=r.sessionDescriptionHandlerModifiersReInvite),r.sessionDescriptionHandlerOptionsReInvite&&(this.sessionDescriptionHandlerOptionsReInvite=r.sessionDescriptionHandlerOptionsReInvite),this._id=this.outgoingRequestMessage.callId+this.fromTag,this.userAgent._sessions[this._id]=this}dispose(){if(this.disposed)return Promise.resolve();switch(this.disposed=!0,this.disposeEarlyMedia(),this.state){case v.Initial:return this.cancel().then(()=>super.dispose());case v.Establishing:return this.cancel().then(()=>super.dispose());case v.Established:return super.dispose();case v.Terminating:return super.dispose();case v.Terminated:return super.dispose();default:throw new Error("Unknown state.")}}get body(){return this.outgoingRequestMessage.body}get localIdentity(){return this.outgoingRequestMessage.from}get remoteIdentity(){return this.outgoingRequestMessage.to}get request(){return this.outgoingRequestMessage}cancel(e={}){if(this.logger.log("Inviter.cancel"),this.state!==v.Initial&&this.state!==v.Establishing){let r=new Error(`Invalid session state ${this.state}`);return this.logger.error(r.message),Promise.reject(r)}this.isCanceled=!0,this.stateTransition(v.Terminating);function t(r,i){if(r&&r<200||r>699)throw new TypeError("Invalid statusCode: "+r);if(r){let s=r,o=Ze(r)||i;return"SIP;cause="+s+';text="'+o+'"'}}if(this.outgoingInviteRequest){let r;e.statusCode&&e.reasonPhrase&&(r=t(e.statusCode,e.reasonPhrase)),this.outgoingInviteRequest.cancel(r,e)}else this.logger.warn("Canceled session before INVITE was sent"),this.stateTransition(v.Terminated);return Promise.resolve()}invite(e={}){if(this.logger.log("Inviter.invite"),this.state!==v.Initial)return super.invite(e);if(e.sessionDescriptionHandlerModifiers&&(this.sessionDescriptionHandlerModifiers=e.sessionDescriptionHandlerModifiers),e.sessionDescriptionHandlerOptions&&(this.sessionDescriptionHandlerOptions=e.sessionDescriptionHandlerOptions),e.withoutSdp||this.inviteWithoutSdp)return this._renderbody&&this._rendertype&&(this.outgoingRequestMessage.body={contentType:this._rendertype,body:this._renderbody}),this.stateTransition(v.Establishing),Promise.resolve(this.sendInvite(e));let t={sessionDescriptionHandlerModifiers:this.sessionDescriptionHandlerModifiers,sessionDescriptionHandlerOptions:this.sessionDescriptionHandlerOptions};return this.getOffer(t).then(r=>(this.outgoingRequestMessage.body={body:r.content,contentType:r.contentType},this.stateTransition(v.Establishing),this.sendInvite(e))).catch(r=>{throw this.logger.log(r.message),this.state!==v.Terminated&&this.stateTransition(v.Terminated),r})}sendInvite(e={}){return this.outgoingInviteRequest=this.userAgent.userAgentCore.invite(this.outgoingRequestMessage,{onAccept:t=>{if(this.dialog){this.logger.log("Additional confirmed dialog, sending ACK and BYE"),this.ackAndBye(t);return}if(this.isCanceled){this.logger.log("Canceled session accepted, sending ACK and BYE"),this.ackAndBye(t),this.stateTransition(v.Terminated);return}this.notifyReferer(t),this.onAccept(t).then(()=>{this.disposeEarlyMedia()}).catch(()=>{this.disposeEarlyMedia()}).then(()=>{e.requestDelegate&&e.requestDelegate.onAccept&&e.requestDelegate.onAccept(t)})},onProgress:t=>{this.isCanceled||(this.notifyReferer(t),this.onProgress(t).catch(()=>{this.disposeEarlyMedia()}).then(()=>{e.requestDelegate&&e.requestDelegate.onProgress&&e.requestDelegate.onProgress(t)}))},onRedirect:t=>{this.notifyReferer(t),this.onRedirect(t),e.requestDelegate&&e.requestDelegate.onRedirect&&e.requestDelegate.onRedirect(t)},onReject:t=>{this.notifyReferer(t),this.onReject(t),e.requestDelegate&&e.requestDelegate.onReject&&e.requestDelegate.onReject(t)},onTrying:t=>{this.notifyReferer(t),this.onTrying(t),e.requestDelegate&&e.requestDelegate.onTrying&&e.requestDelegate.onTrying(t)}}),this.outgoingInviteRequest}disposeEarlyMedia(){this.earlyMediaSessionDescriptionHandlers.forEach(e=>{e.close()}),this.earlyMediaSessionDescriptionHandlers.clear()}notifyReferer(e){if(!this._referred)return;if(!(this._referred instanceof qe))throw new Error("Referred session not instance of session");if(!this._referred.dialog)return;if(!e.message.statusCode)throw new Error("Status code undefined.");if(!e.message.reasonPhrase)throw new Error("Reason phrase undefined.");let t=e.message.statusCode,r=e.message.reasonPhrase,i=`SIP/2.0 ${t} ${r}`.trim(),s=this._referred.dialog.notify(void 0,{extraHeaders:["Event: refer","Subscription-State: terminated"],body:{contentDisposition:"render",contentType:"message/sipfrag",content:i}});s.delegate={onReject:()=>{this._referred=void 0}}}onAccept(e){if(this.logger.log("Inviter.onAccept"),this.state!==v.Establishing)return this.logger.error(`Accept received while in state ${this.state}, dropping response`),Promise.reject(new Error(`Invalid session state ${this.state}`));let t=e.message,r=e.session;switch(t.hasHeader("P-Asserted-Identity")&&(this._assertedIdentity=W.nameAddrHeaderParse(t.getHeader("P-Asserted-Identity"))),r.delegate={onAck:i=>this.onAckRequest(i),onBye:i=>this.onByeRequest(i),onInfo:i=>this.onInfoRequest(i),onInvite:i=>this.onInviteRequest(i),onMessage:i=>this.onMessageRequest(i),onNotify:i=>this.onNotifyRequest(i),onPrack:i=>this.onPrackRequest(i),onRefer:i=>this.onReferRequest(i)},this._dialog=r,r.signalingState){case b.Initial:return this.logger.error("Received 2xx response to INVITE without a session description"),this.ackAndBye(e,400,"Missing session description"),this.stateTransition(v.Terminated),Promise.reject(new Error("Bad Media Description"));case b.HaveLocalOffer:return this.logger.error("Received 2xx response to INVITE without a session description"),this.ackAndBye(e,400,"Missing session description"),this.stateTransition(v.Terminated),Promise.reject(new Error("Bad Media Description"));case b.HaveRemoteOffer:{if(!this._dialog.offer)throw new Error(`Session offer undefined in signaling state ${this._dialog.signalingState}.`);let i={sessionDescriptionHandlerModifiers:this.sessionDescriptionHandlerModifiers,sessionDescriptionHandlerOptions:this.sessionDescriptionHandlerOptions};return this.setOfferAndGetAnswer(this._dialog.offer,i).then(s=>{e.ack({body:s}),this.stateTransition(v.Established)}).catch(s=>{throw this.ackAndBye(e,488,"Invalid session description"),this.stateTransition(v.Terminated),s})}case b.Stable:{if(this.earlyMediaSessionDescriptionHandlers.size>0){let o=this.earlyMediaSessionDescriptionHandlers.get(r.id);if(!o)throw new Error("Session description handler undefined.");return this.setSessionDescriptionHandler(o),this.earlyMediaSessionDescriptionHandlers.delete(r.id),e.ack(),this.stateTransition(v.Established),Promise.resolve()}if(this.earlyMediaDialog){if(this.earlyMediaDialog!==r){if(this.earlyMedia){let a="You have set the 'earlyMedia' option to 'true' which requires that your INVITE requests do not fork and yet this INVITE request did in fact fork. Consequentially and not surprisingly the end point which accepted the INVITE (confirmed dialog) does not match the end point with which early media has been setup (early dialog) and thus this session is unable to proceed. In accordance with the SIP specifications, the SIP servers your end point is connected to determine if an INVITE forks and the forking behavior of those servers cannot be controlled by this library. If you wish to use early media with this library you must configure those servers accordingly. Alternatively you may set the 'earlyMedia' to 'false' which will allow this library to function with any INVITE requests which do fork.";this.logger.error(a)}let o=new Error("Early media dialog does not equal confirmed dialog, terminating session");return this.logger.error(o.message),this.ackAndBye(e,488,"Not Acceptable Here"),this.stateTransition(v.Terminated),Promise.reject(o)}return e.ack(),this.stateTransition(v.Established),Promise.resolve()}let i=r.answer;if(!i)throw new Error("Answer is undefined.");let s={sessionDescriptionHandlerModifiers:this.sessionDescriptionHandlerModifiers,sessionDescriptionHandlerOptions:this.sessionDescriptionHandlerOptions};return this.setAnswer(i,s).then(()=>{let o;this._renderbody&&this._rendertype&&(o={body:{contentDisposition:"render",contentType:this._rendertype,content:this._renderbody}}),e.ack(o),this.stateTransition(v.Established)}).catch(o=>{throw this.logger.error(o.message),this.ackAndBye(e,488,"Not Acceptable Here"),this.stateTransition(v.Terminated),o})}case b.Closed:return Promise.reject(new Error("Terminated."));default:throw new Error("Unknown session signaling state.")}}onProgress(e){var t;if(this.logger.log("Inviter.onProgress"),this.state!==v.Establishing)return this.logger.error(`Progress received while in state ${this.state}, dropping response`),Promise.reject(new Error(`Invalid session state ${this.state}`));if(!this.outgoingInviteRequest)throw new Error("Outgoing INVITE request undefined.");let r=e.message,i=e.session;r.hasHeader("P-Asserted-Identity")&&(this._assertedIdentity=W.nameAddrHeaderParse(r.getHeader("P-Asserted-Identity")));let s=r.getHeader("require"),o=r.getHeader("rseq"),d=!!(s&&s.includes("100rel")&&o?Number(o):void 0),h=[];switch(d&&h.push("RAck: "+r.getHeader("rseq")+" "+r.getHeader("cseq")),i.signalingState){case b.Initial:return d&&(this.logger.warn("First reliable provisional response received MUST contain an offer when INVITE does not contain an offer."),e.prack({extraHeaders:h})),Promise.resolve();case b.HaveLocalOffer:return d&&e.prack({extraHeaders:h}),Promise.resolve();case b.HaveRemoteOffer:if(!d)return this.logger.warn("Non-reliable provisional response MUST NOT contain an initial offer, discarding response."),Promise.resolve();{let l=this.sessionDescriptionHandlerFactory(this,this.userAgent.configuration.sessionDescriptionHandlerFactoryOptions||{});return!((t=this.delegate)===null||t===void 0)&&t.onSessionDescriptionHandler&&this.delegate.onSessionDescriptionHandler(l,!0),this.earlyMediaSessionDescriptionHandlers.set(i.id,l),l.setDescription(r.body,this.sessionDescriptionHandlerOptions,this.sessionDescriptionHandlerModifiers).then(()=>l.getDescription(this.sessionDescriptionHandlerOptions,this.sessionDescriptionHandlerModifiers)).then(u=>{let T={contentDisposition:"session",contentType:u.contentType,content:u.body};e.prack({extraHeaders:h,body:T})}).catch(u=>{throw this.stateTransition(v.Terminated),u})}case b.Stable:if(d&&e.prack({extraHeaders:h}),this.earlyMedia&&!this.earlyMediaDialog){this.earlyMediaDialog=i;let l=i.answer;if(!l)throw new Error("Answer is undefined.");let u={sessionDescriptionHandlerModifiers:this.sessionDescriptionHandlerModifiers,sessionDescriptionHandlerOptions:this.sessionDescriptionHandlerOptions};return this.setAnswer(l,u).catch(T=>{throw this.stateTransition(v.Terminated),T})}return Promise.resolve();case b.Closed:return Promise.reject(new Error("Terminated."));default:throw new Error("Unknown session signaling state.")}}onRedirect(e){if(this.logger.log("Inviter.onRedirect"),this.state!==v.Establishing&&this.state!==v.Terminating){this.logger.error(`Redirect received while in state ${this.state}, dropping response`);return}this.stateTransition(v.Terminated)}onReject(e){if(this.logger.log("Inviter.onReject"),this.state!==v.Establishing&&this.state!==v.Terminating){this.logger.error(`Reject received while in state ${this.state}, dropping response`);return}this.stateTransition(v.Terminated)}onTrying(e){if(this.logger.log("Inviter.onTrying"),this.state!==v.Establishing){this.logger.error(`Trying received while in state ${this.state}, dropping response`);return}}};var Ir=class{constructor(e,t,r,i="text/plain",s={}){this.logger=e.getLogger("sip.Messager"),s.params=s.params||{};let o=e.userAgentCore.configuration.aor;if(s.params.fromUri&&(o=typeof s.params.fromUri=="string"?W.URIParse(s.params.fromUri):s.params.fromUri),!o)throw new TypeError("Invalid from URI: "+s.params.fromUri);let a=t;if(s.params.toUri&&(a=typeof s.params.toUri=="string"?W.URIParse(s.params.toUri):s.params.toUri),!a)throw new TypeError("Invalid to URI: "+s.params.toUri);let d=s.params?Object.assign({},s.params):{},h=(s.extraHeaders||[]).slice(),u={contentDisposition:"render",contentType:i,content:r};this.request=e.userAgentCore.makeOutgoingRequestMessage(I.MESSAGE,t,o,a,d,h,u),this.userAgent=e}message(e={}){return this.userAgent.userAgentCore.request(this.request,e.requestDelegate),Promise.resolve()}};var M;(function(n){n.Initial="Initial",n.Registered="Registered",n.Unregistered="Unregistered",n.Terminated="Terminated"})(M=M||(M={}));var Ce=class{constructor(e,t={}){this.disposed=!1,this._contacts=[],this._retryAfter=void 0,this._state=M.Initial,this._waiting=!1,this._stateEventEmitter=new He,this._waitingEventEmitter=new He,this.userAgent=e;let r=e.configuration.uri.clone();if(r.user=void 0,this.options=Object.assign(Object.assign(Object.assign({},Ce.defaultOptions()),{registrar:r}),Ce.stripUndefinedProperties(t)),this.options.extraContactHeaderParams=(this.options.extraContactHeaderParams||[]).slice(),this.options.extraHeaders=(this.options.extraHeaders||[]).slice(),!this.options.registrar)throw new Error("Registrar undefined.");if(this.options.registrar=this.options.registrar.clone(),this.options.regId&&!this.options.instanceId?this.options.instanceId=this.userAgent.instanceId:!this.options.regId&&this.options.instanceId&&(this.options.regId=1),this.options.instanceId&&W.parse(this.options.instanceId,"uuid")===-1)throw new Error("Invalid instanceId.");if(this.options.regId&&this.options.regId<0)throw new Error("Invalid regId.");let i=this.options.registrar,s=this.options.params&&this.options.params.fromUri||e.userAgentCore.configuration.aor,o=this.options.params&&this.options.params.toUri||e.configuration.uri,a=this.options.params||{},d=(t.extraHeaders||[]).slice();if(this.request=e.userAgentCore.makeOutgoingRequestMessage(I.REGISTER,i,s,o,a,d,void 0),this.expires=this.options.expires||Ce.defaultExpires,this.expires<0)throw new Error("Invalid expires.");if(this.refreshFrequency=this.options.refreshFrequency||Ce.defaultRefreshFrequency,this.refreshFrequency<50||this.refreshFrequency>99)throw new Error("Invalid refresh frequency. The value represents a percentage of the expiration time and should be between 50 and 99.");this.logger=e.getLogger("sip.Registerer"),this.options.logConfiguration&&(this.logger.log("Configuration:"),Object.keys(this.options).forEach(h=>{let l=this.options[h];switch(h){case"registrar":this.logger.log("\xB7 "+h+": "+l);break;default:this.logger.log("\xB7 "+h+": "+JSON.stringify(l))}})),this.id=this.request.callId+this.request.from.parameters.tag,this.userAgent._registerers[this.id]=this}static defaultOptions(){return{expires:Ce.defaultExpires,extraContactHeaderParams:[],extraHeaders:[],logConfiguration:!0,instanceId:"",params:{},regId:0,registrar:new ue("sip","anonymous","anonymous.invalid"),refreshFrequency:Ce.defaultRefreshFrequency}}static stripUndefinedProperties(e){return Object.keys(e).reduce((t,r)=>(e[r]!==void 0&&(t[r]=e[r]),t),{})}get contacts(){return this._contacts.slice()}get retryAfter(){return this._retryAfter}get state(){return this._state}get stateChange(){return this._stateEventEmitter}dispose(){return this.disposed?Promise.resolve():(this.disposed=!0,this.logger.log(`Registerer ${this.id} in state ${this.state} is being disposed`),delete this.userAgent._registerers[this.id],new Promise(e=>{let t=()=>{if(!this.waiting&&this._state===M.Registered){this.stateChange.addListener(()=>{this.terminated(),e()},{once:!0}),this.unregister();return}this.terminated(),e()};this.waiting?this.waitingChange.addListener(()=>{t()},{once:!0}):t()}))}register(e={}){if(this.state===M.Terminated)throw this.stateError(),new Error("Registerer terminated. Unable to register.");if(this.disposed)throw this.stateError(),new Error("Registerer disposed. Unable to register.");if(this.waiting){this.waitingWarning();let i=new Fe("REGISTER request already in progress, waiting for final response");return Promise.reject(i)}e.requestOptions&&(this.options=Object.assign(Object.assign({},this.options),e.requestOptions));let t=(this.options.extraHeaders||[]).slice();t.push("Contact: "+this.generateContactHeader(this.expires)),t.push("Allow: "+["ACK","CANCEL","INVITE","MESSAGE","BYE","OPTIONS","INFO","NOTIFY","REFER"].toString()),this.request.cseq++,this.request.setHeader("cseq",this.request.cseq+" REGISTER"),this.request.extraHeaders=t,this.waitingToggle(!0);let r=this.userAgent.userAgentCore.register(this.request,{onAccept:i=>{let s;i.message.hasHeader("expires")&&(s=Number(i.message.getHeader("expires"))),this._contacts=i.message.getHeaders("contact");let o=this._contacts.length;if(!o){this.logger.error("No Contact header in response to REGISTER, dropping response."),this.unregistered();return}let a;for(;o--;){if(a=i.message.parseHeader("contact",o),!a)throw new Error("Contact undefined");if(this.userAgent.contact.pubGruu&&ki(a.uri,this.userAgent.contact.pubGruu)){s=Number(a.getParam("expires"));break}if(this.userAgent.configuration.contactName===""){if(a.uri.user===this.userAgent.contact.uri.user){s=Number(a.getParam("expires"));break}}else if(ki(a.uri,this.userAgent.contact.uri)){s=Number(a.getParam("expires"));break}a=void 0}if(a===void 0){this.logger.error("No Contact header pointing to us, dropping response"),this.unregistered(),this.waitingToggle(!1);return}if(s===void 0){this.logger.error("Contact pointing to us is missing expires parameter, dropping response"),this.unregistered(),this.waitingToggle(!1);return}if(a.hasParam("temp-gruu")){let d=a.getParam("temp-gruu");d&&(this.userAgent.contact.tempGruu=W.URIParse(d.replace(/"/g,"")))}if(a.hasParam("pub-gruu")){let d=a.getParam("pub-gruu");d&&(this.userAgent.contact.pubGruu=W.URIParse(d.replace(/"/g,"")))}this.registered(s),e.requestDelegate&&e.requestDelegate.onAccept&&e.requestDelegate.onAccept(i),this.waitingToggle(!1)},onProgress:i=>{e.requestDelegate&&e.requestDelegate.onProgress&&e.requestDelegate.onProgress(i)},onRedirect:i=>{this.logger.error("Redirect received. Not supported."),this.unregistered(),e.requestDelegate&&e.requestDelegate.onRedirect&&e.requestDelegate.onRedirect(i),this.waitingToggle(!1)},onReject:i=>{if(i.message.statusCode===423){if(!i.message.hasHeader("min-expires")){this.logger.error("423 response received for REGISTER without Min-Expires, dropping response"),this.unregistered(),this.waitingToggle(!1);return}this.expires=Number(i.message.getHeader("min-expires")),this.waitingToggle(!1),this.register();return}this.logger.warn(`Failed to register, status code ${i.message.statusCode}`);let s=NaN;if(i.message.statusCode===500||i.message.statusCode===503){let o=i.message.getHeader("retry-after");o&&(s=Number.parseInt(o,void 0))}this._retryAfter=isNaN(s)?void 0:s,this.unregistered(),e.requestDelegate&&e.requestDelegate.onReject&&e.requestDelegate.onReject(i),this._retryAfter=void 0,this.waitingToggle(!1)},onTrying:i=>{e.requestDelegate&&e.requestDelegate.onTrying&&e.requestDelegate.onTrying(i)}});return Promise.resolve(r)}unregister(e={}){if(this.state===M.Terminated)throw this.stateError(),new Error("Registerer terminated. Unable to register.");if(this.disposed&&this.state!==M.Registered)throw this.stateError(),new Error("Registerer disposed. Unable to register.");if(this.waiting){this.waitingWarning();let i=new Fe("REGISTER request already in progress, waiting for final response");return Promise.reject(i)}this._state!==M.Registered&&!e.all&&this.logger.warn("Not currently registered, but sending an unregister anyway.");let t=(e.requestOptions&&e.requestOptions.extraHeaders||[]).slice();this.request.extraHeaders=t,e.all?(t.push("Contact: *"),t.push("Expires: 0")):t.push("Contact: "+this.generateContactHeader(0)),this.request.cseq++,this.request.setHeader("cseq",this.request.cseq+" REGISTER"),this.registrationTimer!==void 0&&(clearTimeout(this.registrationTimer),this.registrationTimer=void 0),this.waitingToggle(!0);let r=this.userAgent.userAgentCore.register(this.request,{onAccept:i=>{this._contacts=i.message.getHeaders("contact"),this.unregistered(),e.requestDelegate&&e.requestDelegate.onAccept&&e.requestDelegate.onAccept(i),this.waitingToggle(!1)},onProgress:i=>{e.requestDelegate&&e.requestDelegate.onProgress&&e.requestDelegate.onProgress(i)},onRedirect:i=>{this.logger.error("Unregister redirected. Not currently supported."),this.unregistered(),e.requestDelegate&&e.requestDelegate.onRedirect&&e.requestDelegate.onRedirect(i),this.waitingToggle(!1)},onReject:i=>{this.logger.error(`Unregister rejected with status code ${i.message.statusCode}`),this.unregistered(),e.requestDelegate&&e.requestDelegate.onReject&&e.requestDelegate.onReject(i),this.waitingToggle(!1)},onTrying:i=>{e.requestDelegate&&e.requestDelegate.onTrying&&e.requestDelegate.onTrying(i)}});return Promise.resolve(r)}clearTimers(){this.registrationTimer!==void 0&&(clearTimeout(this.registrationTimer),this.registrationTimer=void 0),this.registrationExpiredTimer!==void 0&&(clearTimeout(this.registrationExpiredTimer),this.registrationExpiredTimer=void 0)}generateContactHeader(e){let t=this.userAgent.contact.toString({register:!0});return this.options.regId&&this.options.instanceId&&(t+=";reg-id="+this.options.regId,t+=';+sip.instance="<urn:uuid:'+this.options.instanceId+'>"'),this.options.extraContactHeaderParams&&this.options.extraContactHeaderParams.forEach(r=>{t+=";"+r}),t+=";expires="+e,t}registered(e){this.clearTimers(),this.registrationTimer=setTimeout(()=>{this.registrationTimer=void 0,this.register()},this.refreshFrequency/100*e*1e3),this.registrationExpiredTimer=setTimeout(()=>{this.logger.warn("Registration expired"),this.unregistered()},e*1e3),this._state!==M.Registered&&this.stateTransition(M.Registered)}unregistered(){this.clearTimers(),this._state!==M.Unregistered&&this.stateTransition(M.Unregistered)}terminated(){this.clearTimers(),this._state!==M.Terminated&&this.stateTransition(M.Terminated)}stateTransition(e){let t=()=>{throw new Error(`Invalid state transition from ${this._state} to ${e}`)};switch(this._state){case M.Initial:e!==M.Registered&&e!==M.Unregistered&&e!==M.Terminated&&t();break;case M.Registered:e!==M.Unregistered&&e!==M.Terminated&&t();break;case M.Unregistered:e!==M.Registered&&e!==M.Terminated&&t();break;case M.Terminated:t();break;default:throw new Error("Unrecognized state.")}this._state=e,this.logger.log(`Registration transitioned to state ${this._state}`),this._stateEventEmitter.emit(this._state),e===M.Terminated&&this.dispose()}get waiting(){return this._waiting}get waitingChange(){return this._waitingEventEmitter}waitingToggle(e){if(this._waiting===e)throw new Error(`Invalid waiting transition from ${this._waiting} to ${e}`);this._waiting=e,this.logger.log(`Waiting toggled to ${this._waiting}`),this._waitingEventEmitter.emit(this._waiting)}waitingWarning(){let e="An attempt was made to send a REGISTER request while a prior one was still in progress.";e+=" RFC 3261 requires UAs MUST NOT send a new registration until they have received a final response",e+=" from the registrar for the previous one or the previous REGISTER request has timed out.",e+=" Note that if the transport disconnects, you still must wait for the prior request to time out before",e+=" sending a new REGISTER request or alternatively dispose of the current Registerer and create a new Registerer.",this.logger.warn(e)}stateError(){let t=`An attempt was made to send a REGISTER request when the Registerer ${this.state===M.Terminated?"is in 'Terminated' state":"has been disposed"}.`;t+=" The Registerer transitions to 'Terminated' when Registerer.dispose() is called.",t+=" Perhaps you called UserAgent.stop() which dipsoses of all Registerers?",this.logger.error(t)}};Ce.defaultExpires=600;Ce.defaultRefreshFrequency=99;var j;(function(n){n.Initial="Initial",n.NotifyWait="NotifyWait",n.Pending="Pending",n.Active="Active",n.Terminated="Terminated"})(j=j||(j={}));var O;(function(n){n.Connecting="Connecting",n.Connected="Connected",n.Disconnecting="Disconnecting",n.Disconnected="Disconnected"})(O=O||(O={}));var X;(function(n){n.Started="Started",n.Stopped="Stopped"})(X=X||(X={}));var Q=class{constructor(){this._dataLength=0,this._bufferLength=0,this._state=new Int32Array(4),this._buffer=new ArrayBuffer(68),this._buffer8=new Uint8Array(this._buffer,0,68),this._buffer32=new Uint32Array(this._buffer,0,17),this.start()}static hashStr(e,t=!1){return this.onePassHasher.start().appendStr(e).end(t)}static hashAsciiStr(e,t=!1){return this.onePassHasher.start().appendAsciiStr(e).end(t)}static _hex(e){let t=Q.hexChars,r=Q.hexOut,i,s,o,a;for(a=0;a<4;a+=1)for(s=a*8,i=e[a],o=0;o<8;o+=2)r[s+1+o]=t.charAt(i&15),i>>>=4,r[s+0+o]=t.charAt(i&15),i>>>=4;return r.join("")}static _md5cycle(e,t){let r=e[0],i=e[1],s=e[2],o=e[3];r+=(i&s|~i&o)+t[0]-680876936|0,r=(r<<7|r>>>25)+i|0,o+=(r&i|~r&s)+t[1]-389564586|0,o=(o<<12|o>>>20)+r|0,s+=(o&r|~o&i)+t[2]+606105819|0,s=(s<<17|s>>>15)+o|0,i+=(s&o|~s&r)+t[3]-1044525330|0,i=(i<<22|i>>>10)+s|0,r+=(i&s|~i&o)+t[4]-176418897|0,r=(r<<7|r>>>25)+i|0,o+=(r&i|~r&s)+t[5]+1200080426|0,o=(o<<12|o>>>20)+r|0,s+=(o&r|~o&i)+t[6]-1473231341|0,s=(s<<17|s>>>15)+o|0,i+=(s&o|~s&r)+t[7]-45705983|0,i=(i<<22|i>>>10)+s|0,r+=(i&s|~i&o)+t[8]+1770035416|0,r=(r<<7|r>>>25)+i|0,o+=(r&i|~r&s)+t[9]-1958414417|0,o=(o<<12|o>>>20)+r|0,s+=(o&r|~o&i)+t[10]-42063|0,s=(s<<17|s>>>15)+o|0,i+=(s&o|~s&r)+t[11]-1990404162|0,i=(i<<22|i>>>10)+s|0,r+=(i&s|~i&o)+t[12]+1804603682|0,r=(r<<7|r>>>25)+i|0,o+=(r&i|~r&s)+t[13]-40341101|0,o=(o<<12|o>>>20)+r|0,s+=(o&r|~o&i)+t[14]-1502002290|0,s=(s<<17|s>>>15)+o|0,i+=(s&o|~s&r)+t[15]+1236535329|0,i=(i<<22|i>>>10)+s|0,r+=(i&o|s&~o)+t[1]-165796510|0,r=(r<<5|r>>>27)+i|0,o+=(r&s|i&~s)+t[6]-1069501632|0,o=(o<<9|o>>>23)+r|0,s+=(o&i|r&~i)+t[11]+643717713|0,s=(s<<14|s>>>18)+o|0,i+=(s&r|o&~r)+t[0]-373897302|0,i=(i<<20|i>>>12)+s|0,r+=(i&o|s&~o)+t[5]-701558691|0,r=(r<<5|r>>>27)+i|0,o+=(r&s|i&~s)+t[10]+38016083|0,o=(o<<9|o>>>23)+r|0,s+=(o&i|r&~i)+t[15]-660478335|0,s=(s<<14|s>>>18)+o|0,i+=(s&r|o&~r)+t[4]-405537848|0,i=(i<<20|i>>>12)+s|0,r+=(i&o|s&~o)+t[9]+568446438|0,r=(r<<5|r>>>27)+i|0,o+=(r&s|i&~s)+t[14]-1019803690|0,o=(o<<9|o>>>23)+r|0,s+=(o&i|r&~i)+t[3]-187363961|0,s=(s<<14|s>>>18)+o|0,i+=(s&r|o&~r)+t[8]+1163531501|0,i=(i<<20|i>>>12)+s|0,r+=(i&o|s&~o)+t[13]-1444681467|0,r=(r<<5|r>>>27)+i|0,o+=(r&s|i&~s)+t[2]-51403784|0,o=(o<<9|o>>>23)+r|0,s+=(o&i|r&~i)+t[7]+1735328473|0,s=(s<<14|s>>>18)+o|0,i+=(s&r|o&~r)+t[12]-1926607734|0,i=(i<<20|i>>>12)+s|0,r+=(i^s^o)+t[5]-378558|0,r=(r<<4|r>>>28)+i|0,o+=(r^i^s)+t[8]-2022574463|0,o=(o<<11|o>>>21)+r|0,s+=(o^r^i)+t[11]+1839030562|0,s=(s<<16|s>>>16)+o|0,i+=(s^o^r)+t[14]-35309556|0,i=(i<<23|i>>>9)+s|0,r+=(i^s^o)+t[1]-1530992060|0,r=(r<<4|r>>>28)+i|0,o+=(r^i^s)+t[4]+1272893353|0,o=(o<<11|o>>>21)+r|0,s+=(o^r^i)+t[7]-155497632|0,s=(s<<16|s>>>16)+o|0,i+=(s^o^r)+t[10]-1094730640|0,i=(i<<23|i>>>9)+s|0,r+=(i^s^o)+t[13]+681279174|0,r=(r<<4|r>>>28)+i|0,o+=(r^i^s)+t[0]-358537222|0,o=(o<<11|o>>>21)+r|0,s+=(o^r^i)+t[3]-722521979|0,s=(s<<16|s>>>16)+o|0,i+=(s^o^r)+t[6]+76029189|0,i=(i<<23|i>>>9)+s|0,r+=(i^s^o)+t[9]-640364487|0,r=(r<<4|r>>>28)+i|0,o+=(r^i^s)+t[12]-421815835|0,o=(o<<11|o>>>21)+r|0,s+=(o^r^i)+t[15]+530742520|0,s=(s<<16|s>>>16)+o|0,i+=(s^o^r)+t[2]-995338651|0,i=(i<<23|i>>>9)+s|0,r+=(s^(i|~o))+t[0]-198630844|0,r=(r<<6|r>>>26)+i|0,o+=(i^(r|~s))+t[7]+1126891415|0,o=(o<<10|o>>>22)+r|0,s+=(r^(o|~i))+t[14]-1416354905|0,s=(s<<15|s>>>17)+o|0,i+=(o^(s|~r))+t[5]-57434055|0,i=(i<<21|i>>>11)+s|0,r+=(s^(i|~o))+t[12]+1700485571|0,r=(r<<6|r>>>26)+i|0,o+=(i^(r|~s))+t[3]-1894986606|0,o=(o<<10|o>>>22)+r|0,s+=(r^(o|~i))+t[10]-1051523|0,s=(s<<15|s>>>17)+o|0,i+=(o^(s|~r))+t[1]-2054922799|0,i=(i<<21|i>>>11)+s|0,r+=(s^(i|~o))+t[8]+1873313359|0,r=(r<<6|r>>>26)+i|0,o+=(i^(r|~s))+t[15]-30611744|0,o=(o<<10|o>>>22)+r|0,s+=(r^(o|~i))+t[6]-1560198380|0,s=(s<<15|s>>>17)+o|0,i+=(o^(s|~r))+t[13]+1309151649|0,i=(i<<21|i>>>11)+s|0,r+=(s^(i|~o))+t[4]-145523070|0,r=(r<<6|r>>>26)+i|0,o+=(i^(r|~s))+t[11]-1120210379|0,o=(o<<10|o>>>22)+r|0,s+=(r^(o|~i))+t[2]+718787259|0,s=(s<<15|s>>>17)+o|0,i+=(o^(s|~r))+t[9]-343485551|0,i=(i<<21|i>>>11)+s|0,e[0]=r+e[0]|0,e[1]=i+e[1]|0,e[2]=s+e[2]|0,e[3]=o+e[3]|0}start(){return this._dataLength=0,this._bufferLength=0,this._state.set(Q.stateIdentity),this}appendStr(e){let t=this._buffer8,r=this._buffer32,i=this._bufferLength,s,o;for(o=0;o<e.length;o+=1){if(s=e.charCodeAt(o),s<128)t[i++]=s;else if(s<2048)t[i++]=(s>>>6)+192,t[i++]=s&63|128;else if(s<55296||s>56319)t[i++]=(s>>>12)+224,t[i++]=s>>>6&63|128,t[i++]=s&63|128;else{if(s=(s-55296)*1024+(e.charCodeAt(++o)-56320)+65536,s>1114111)throw new Error("Unicode standard supports code points up to U+10FFFF");t[i++]=(s>>>18)+240,t[i++]=s>>>12&63|128,t[i++]=s>>>6&63|128,t[i++]=s&63|128}i>=64&&(this._dataLength+=64,Q._md5cycle(this._state,r),i-=64,r[0]=r[16])}return this._bufferLength=i,this}appendAsciiStr(e){let t=this._buffer8,r=this._buffer32,i=this._bufferLength,s,o=0;for(;;){for(s=Math.min(e.length-o,64-i);s--;)t[i++]=e.charCodeAt(o++);if(i<64)break;this._dataLength+=64,Q._md5cycle(this._state,r),i=0}return this._bufferLength=i,this}appendByteArray(e){let t=this._buffer8,r=this._buffer32,i=this._bufferLength,s,o=0;for(;;){for(s=Math.min(e.length-o,64-i);s--;)t[i++]=e[o++];if(i<64)break;this._dataLength+=64,Q._md5cycle(this._state,r),i=0}return this._bufferLength=i,this}getState(){let e=this,t=e._state;return{buffer:String.fromCharCode.apply(null,e._buffer8),buflen:e._bufferLength,length:e._dataLength,state:[t[0],t[1],t[2],t[3]]}}setState(e){let t=e.buffer,r=e.state,i=this._state,s;for(this._dataLength=e.length,this._bufferLength=e.buflen,i[0]=r[0],i[1]=r[1],i[2]=r[2],i[3]=r[3],s=0;s<t.length;s+=1)this._buffer8[s]=t.charCodeAt(s)}end(e=!1){let t=this._bufferLength,r=this._buffer8,i=this._buffer32,s=(t>>2)+1,o;if(this._dataLength+=t,r[t]=128,r[t+1]=r[t+2]=r[t+3]=0,i.set(Q.buffer32Identity.subarray(s),s),t>55&&(Q._md5cycle(this._state,i),i.set(Q.buffer32Identity)),o=this._dataLength*8,o<=4294967295)i[14]=o;else{let a=o.toString(16).match(/(.*?)(.{0,8})$/);if(a===null)return;let d=parseInt(a[2],16),h=parseInt(a[1],16)||0;i[14]=d,i[15]=h}return Q._md5cycle(this._state,i),e?this._state:Q._hex(this._state)}};Q.stateIdentity=new Int32Array([1732584193,-271733879,-1732584194,271733878]);Q.buffer32Identity=new Int32Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]);Q.hexChars="0123456789abcdef";Q.hexOut=[];Q.onePassHasher=new Q;Q.hashStr("hello")!=="5d41402abc4b2a76b9719d911017c592"&&console.error("Md5 self test failed.");function rt(n){return Q.hashStr(n)}var br=class{constructor(e,t,r,i){this.logger=e.getLogger("sipjs.digestauthentication"),this.username=r,this.password=i,this.ha1=t,this.nc=0,this.ncHex="00000000"}authenticate(e,t,r){if(this.algorithm=t.algorithm,this.realm=t.realm,this.nonce=t.nonce,this.opaque=t.opaque,this.stale=t.stale,this.algorithm){if(this.algorithm!=="MD5")return this.logger.warn("challenge with Digest algorithm different than 'MD5', authentication aborted"),!1}else this.algorithm="MD5";if(!this.realm)return this.logger.warn("challenge without Digest realm, authentication aborted"),!1;if(!this.nonce)return this.logger.warn("challenge without Digest nonce, authentication aborted"),!1;if(t.qop)if(t.qop.indexOf("auth")>-1)this.qop="auth";else if(t.qop.indexOf("auth-int")>-1)this.qop="auth-int";else return this.logger.warn("challenge without Digest qop different than 'auth' or 'auth-int', authentication aborted"),!1;else this.qop=void 0;return this.method=e.method,this.uri=e.ruri,this.cnonce=Ue(12),this.nc+=1,this.updateNcHex(),this.nc===4294967296&&(this.nc=1,this.ncHex="00000001"),this.calculateResponse(r),!0}toString(){let e=[];if(!this.response)throw new Error("response field does not exist, cannot generate Authorization header");return e.push("algorithm="+this.algorithm),e.push('username="'+this.username+'"'),e.push('realm="'+this.realm+'"'),e.push('nonce="'+this.nonce+'"'),e.push('uri="'+this.uri+'"'),e.push('response="'+this.response+'"'),this.opaque&&e.push('opaque="'+this.opaque+'"'),this.qop&&(e.push("qop="+this.qop),e.push('cnonce="'+this.cnonce+'"'),e.push("nc="+this.ncHex)),"Digest "+e.join(", ")}updateNcHex(){let e=Number(this.nc).toString(16);this.ncHex="00000000".substr(0,8-e.length)+e}calculateResponse(e){let t,r;t=this.ha1,(t===""||t===void 0)&&(t=rt(this.username+":"+this.realm+":"+this.password)),this.qop==="auth"?(r=rt(this.method+":"+this.uri),this.response=rt(t+":"+this.nonce+":"+this.ncHex+":"+this.cnonce+":auth:"+r)):this.qop==="auth-int"?(r=rt(this.method+":"+this.uri+":"+rt(e||"")),this.response=rt(t+":"+this.nonce+":"+this.ncHex+":"+this.cnonce+":auth-int:"+r)):this.qop===void 0&&(r=rt(this.method+":"+this.uri),this.response=rt(t+":"+this.nonce+":"+r))}};var ie;(function(n){n[n.error=0]="error",n[n.warn=1]="warn",n[n.log=2]="log",n[n.debug=3]="debug"})(ie=ie||(ie={}));var Bt=class{constructor(e,t,r){this.logger=e,this.category=t,this.label=r}error(e){this.genericLog(ie.error,e)}warn(e){this.genericLog(ie.warn,e)}log(e){this.genericLog(ie.log,e)}debug(e){this.genericLog(ie.debug,e)}genericLog(e,t){this.logger.genericLog(e,this.category,this.label,t)}get level(){return this.logger.level}set level(e){this.logger.level=e}};var xr=class{constructor(){this.builtinEnabled=!0,this._level=ie.log,this.loggers={},this.logger=this.getLogger("sip:loggerfactory")}get level(){return this._level}set level(e){e>=0&&e<=3?this._level=e:e>3?this._level=3:ie.hasOwnProperty(e)?this._level=e:this.logger.error("invalid 'level' parameter value: "+JSON.stringify(e))}get connector(){return this._connector}set connector(e){e?typeof e=="function"?this._connector=e:this.logger.error("invalid 'connector' parameter value: "+JSON.stringify(e)):this._connector=void 0}getLogger(e,t){if(t&&this.level===3)return new Bt(this,e,t);if(this.loggers[e])return this.loggers[e];{let r=new Bt(this,e);return this.loggers[e]=r,r}}genericLog(e,t,r,i){this.level>=e&&this.builtinEnabled&&this.print(e,t,r,i),this.connector&&this.connector(ie[e],t,r,i)}print(e,t,r,i){if(typeof i=="string"){let s=[new Date,t];r&&s.push(r),i=s.concat(i).join(" | ")}switch(e){case ie.error:console.error(i);break;case ie.warn:console.warn(i);break;case ie.log:console.log(i);break;case ie.debug:console.debug(i);break;default:break}}};var jt;(function(n){function e(i,s){let o=s,a=0,d=0;if(i.substring(o,o+2).match(/(^\r\n)/))return-2;for(;a===0;){if(d=i.indexOf(`\r
31
31
  `,o),d===-1)return d;!i.substring(d+2,d+4).match(/(^\r\n)/)&&i.charAt(d+2).match(/(^\s+)/)?o=d+2:a=d}return a}n.getHeader=e;function t(i,s,o,a){let d=s.indexOf(":",o),h=s.substring(o,d).trim(),l=s.substring(d+1,a).trim(),u;switch(h.toLowerCase()){case"via":case"v":i.addHeader("via",l),i.getHeaders("via").length===1?(u=i.parseHeader("Via"),u&&(i.via=u,i.viaBranch=u.branch)):u=0;break;case"from":case"f":i.setHeader("from",l),u=i.parseHeader("from"),u&&(i.from=u,i.fromTag=u.getParam("tag"));break;case"to":case"t":i.setHeader("to",l),u=i.parseHeader("to"),u&&(i.to=u,i.toTag=u.getParam("tag"));break;case"record-route":if(u=W.parse(l,"Record_Route"),u===-1){u=void 0;break}if(!(u instanceof Array)){u=void 0;break}u.forEach(T=>{i.addHeader("record-route",l.substring(T.position,T.offset)),i.headers["Record-Route"][i.getHeaders("record-route").length-1].parsed=T.parsed});break;case"call-id":case"i":i.setHeader("call-id",l),u=i.parseHeader("call-id"),u&&(i.callId=l);break;case"contact":case"m":if(u=W.parse(l,"Contact"),u===-1){u=void 0;break}if(!(u instanceof Array)){u=void 0;break}u.forEach(T=>{i.addHeader("contact",l.substring(T.position,T.offset)),i.headers.Contact[i.getHeaders("contact").length-1].parsed=T.parsed});break;case"content-length":case"l":i.setHeader("content-length",l),u=i.parseHeader("content-length");break;case"content-type":case"c":i.setHeader("content-type",l),u=i.parseHeader("content-type");break;case"cseq":i.setHeader("cseq",l),u=i.parseHeader("cseq"),u&&(i.cseq=u.value),i instanceof me&&(i.method=u.method);break;case"max-forwards":i.setHeader("max-forwards",l),u=i.parseHeader("max-forwards");break;case"www-authenticate":i.setHeader("www-authenticate",l),u=i.parseHeader("www-authenticate");break;case"proxy-authenticate":i.setHeader("proxy-authenticate",l),u=i.parseHeader("proxy-authenticate");break;case"refer-to":case"r":i.setHeader("refer-to",l),u=i.parseHeader("refer-to"),u&&(i.referTo=u);break;default:i.addHeader(h.toLowerCase(),l),u=0}return u===void 0?{error:"error parsing header '"+h+"'"}:!0}n.parseHeader=t;function r(i,s){let o=0,a=i.indexOf(`\r
32
32
  `);if(a===-1){s.warn("no CRLF found, not a SIP message, discarded");return}let d=i.substring(0,a),h=W.parse(d,"Request_Response"),l;if(h===-1){s.warn('error parsing first line of SIP message: "'+d+'"');return}else h.status_code?(l=new me,l.statusCode=h.status_code,l.reasonPhrase=h.reason_phrase):(l=new Pe,l.method=h.method,l.ruri=h.uri);l.data=i,o=a+2;let u;for(;;){if(a=e(i,o),a===-2){u=o+2;break}else if(a===-1){s.error("malformed message");return}let T=t(l,i,o,a);if(T&&T!==!0){s.error(T.error);return}o=a+2}return l.hasHeader("content-length")?l.body=i.substr(u,Number(l.getHeader("content-length"))):l.body=i.substring(u),l}n.parseMessage=r})(jt=jt||(jt={}));function Ar(n,e){let t=`\r
33
33
  `;if(e.statusCode<100||e.statusCode>699)throw new TypeError("Invalid statusCode: "+e.statusCode);let r=e.reasonPhrase?e.reasonPhrase:Ze(e.statusCode),i="SIP/2.0 "+e.statusCode+" "+r+t;e.statusCode>=100&&e.statusCode<200,e.statusCode;let s="From: "+n.getHeader("From")+t,o="Call-ID: "+n.callId+t,a="CSeq: "+n.cseq+" "+n.method+t,d=n.getHeaders("via").reduce((A,_)=>A+"Via: "+_+t,""),h="To: "+n.getHeader("to");if(e.statusCode>100&&!n.parseHeader("to").hasParam("tag")){let A=e.toTag;A||(A=Xe()),h+=";tag="+A}h+=t;let l="";e.supported&&(l="Supported: "+e.supported.join(", ")+t);let u="";e.userAgent&&(u="User-Agent: "+e.userAgent+t);let T="";return e.extraHeaders&&(T=e.extraHeaders.reduce((A,_)=>A+_.trim()+t,"")),i+=d,i+=s,i+=h,i+=a,i+=o,i+=l,i+=u,i+=T,e.body?(i+="Content-Type: "+e.body.contentType+t,i+="Content-Length: "+Qe(e.body.content)+t+t,i+=e.body.content):i+="Content-Length: 0"+t+t,{message:i}}var It=class extends he{constructor(e){super(e||"Unspecified transport error.")}};var bt=class{constructor(e,t,r,i,s){this._transport=e,this._user=t,this._id=r,this._state=i,this.listeners=new Array,this.logger=t.loggerFactory.getLogger(s,r),this.logger.debug(`Constructing ${this.typeToString()} with id ${this.id}.`)}dispose(){this.logger.debug(`Destroyed ${this.typeToString()} with id ${this.id}.`)}get id(){return this._id}get kind(){throw new Error("Invalid kind.")}get state(){return this._state}get transport(){return this._transport}addStateChangeListener(e,t){let r=()=>{this.removeStateChangeListener(r),e()};t?.once===!0?this.listeners.push(r):this.listeners.push(e)}notifyStateChangeListeners(){this.listeners.slice().forEach(e=>e())}removeStateChangeListener(e){this.listeners=this.listeners.filter(t=>t!==e)}logTransportError(e,t){this.logger.error(e.message),this.logger.error(`Transport error occurred in ${this.typeToString()} with id ${this.id}.`),this.logger.error(t)}send(e){return this.transport.send(e).catch(t=>{if(t instanceof It)throw this.onTransportError(t),t;let r;throw t&&typeof t.message=="string"?r=new It(t.message):r=new It,this.onTransportError(r),r})}setState(e){this.logger.debug(`State change to "${e}" on ${this.typeToString()} with id ${this.id}.`),this._state=e,this._user.onStateChange&&this._user.onStateChange(e),this.notifyStateChangeListeners()}typeToString(){return"UnknownType"}};var xt=class extends bt{constructor(e,t,r,i,s){super(t,r,e.viaBranch,i,s),this._request=e,this.user=r}get request(){return this._request}};var p;(function(n){n.Accepted="Accepted",n.Calling="Calling",n.Completed="Completed",n.Confirmed="Confirmed",n.Proceeding="Proceeding",n.Terminated="Terminated",n.Trying="Trying"})(p=p||(p={}));var se=class extends xt{constructor(e,t,r){super(e,t,r,p.Proceeding,"sip.transaction.ist")}dispose(){this.stopProgressExtensionTimer(),this.H&&(clearTimeout(this.H),this.H=void 0),this.I&&(clearTimeout(this.I),this.I=void 0),this.L&&(clearTimeout(this.L),this.L=void 0),super.dispose()}get kind(){return"ist"}receiveRequest(e){switch(this.state){case p.Proceeding:if(e.method===I.INVITE){this.lastProvisionalResponse&&this.send(this.lastProvisionalResponse).catch(r=>{this.logTransportError(r,"Failed to send retransmission of provisional response.")});return}break;case p.Accepted:if(e.method===I.INVITE)return;break;case p.Completed:if(e.method===I.INVITE){if(!this.lastFinalResponse)throw new Error("Last final response undefined.");this.send(this.lastFinalResponse).catch(r=>{this.logTransportError(r,"Failed to send retransmission of final response.")});return}if(e.method===I.ACK){this.stateTransition(p.Confirmed);return}break;case p.Confirmed:if(e.method===I.INVITE||e.method===I.ACK)return;break;case p.Terminated:if(e.method===I.INVITE||e.method===I.ACK)return;break;default:throw new Error(`Invalid state ${this.state}`)}let t=`INVITE server transaction received unexpected ${e.method} request while in state ${this.state}.`;this.logger.warn(t)}receiveResponse(e,t){if(e<100||e>699)throw new Error(`Invalid status code ${e}`);switch(this.state){case p.Proceeding:if(e>=100&&e<=199){this.lastProvisionalResponse=t,e>100&&this.startProgressExtensionTimer(),this.send(t).catch(i=>{this.logTransportError(i,"Failed to send 1xx response.")});return}if(e>=200&&e<=299){this.lastFinalResponse=t,this.stateTransition(p.Accepted),this.send(t).catch(i=>{this.logTransportError(i,"Failed to send 2xx response.")});return}if(e>=300&&e<=699){this.lastFinalResponse=t,this.stateTransition(p.Completed),this.send(t).catch(i=>{this.logTransportError(i,"Failed to send non-2xx final response.")});return}break;case p.Accepted:if(e>=200&&e<=299){this.send(t).catch(i=>{this.logTransportError(i,"Failed to send 2xx response.")});return}break;case p.Completed:break;case p.Confirmed:break;case p.Terminated:break;default:throw new Error(`Invalid state ${this.state}`)}let r=`INVITE server transaction received unexpected ${e} response from TU while in state ${this.state}.`;throw this.logger.error(r),new Error(r)}retransmitAcceptedResponse(){this.state===p.Accepted&&this.lastFinalResponse&&this.send(this.lastFinalResponse).catch(e=>{this.logTransportError(e,"Failed to send 2xx response.")})}onTransportError(e){this.user.onTransportError&&this.user.onTransportError(e)}typeToString(){return"INVITE server transaction"}stateTransition(e){let t=()=>{throw new Error(`Invalid state transition from ${this.state} to ${e}`)};switch(e){case p.Proceeding:t();break;case p.Accepted:case p.Completed:this.state!==p.Proceeding&&t();break;case p.Confirmed:this.state!==p.Completed&&t();break;case p.Terminated:this.state!==p.Accepted&&this.state!==p.Completed&&this.state!==p.Confirmed&&t();break;default:t()}this.stopProgressExtensionTimer(),e===p.Accepted&&(this.L=setTimeout(()=>this.timerL(),J.TIMER_L)),e===p.Completed&&(this.H=setTimeout(()=>this.timerH(),J.TIMER_H)),e===p.Confirmed&&(this.I=setTimeout(()=>this.timerI(),J.TIMER_I)),e===p.Terminated&&this.dispose(),this.setState(e)}startProgressExtensionTimer(){this.progressExtensionTimer===void 0&&(this.progressExtensionTimer=setInterval(()=>{if(this.logger.debug(`Progress extension timer expired for INVITE server transaction ${this.id}.`),!this.lastProvisionalResponse)throw new Error("Last provisional response undefined.");this.send(this.lastProvisionalResponse).catch(e=>{this.logTransportError(e,"Failed to send retransmission of provisional response.")})},J.PROVISIONAL_RESPONSE_INTERVAL))}stopProgressExtensionTimer(){this.progressExtensionTimer!==void 0&&(clearInterval(this.progressExtensionTimer),this.progressExtensionTimer=void 0)}timerG(){}timerH(){this.logger.debug(`Timer H expired for INVITE server transaction ${this.id}.`),this.state===p.Completed&&(this.logger.warn("ACK to negative final response was never received, terminating transaction."),this.stateTransition(p.Terminated))}timerI(){this.logger.debug(`Timer I expired for INVITE server transaction ${this.id}.`),this.stateTransition(p.Terminated)}timerL(){this.logger.debug(`Timer L expired for INVITE server transaction ${this.id}.`),this.state===p.Accepted&&this.stateTransition(p.Terminated)}};var it=class extends bt{constructor(e,t,r,i,s){super(t,r,it.makeId(e),i,s),this._request=e,this.user=r,e.setViaHeader(this.id,t.protocol)}static makeId(e){if(e.method==="CANCEL"){if(!e.branch)throw new Error("Outgoing CANCEL request without a branch.");return e.branch}else return"z9hG4bK"+Math.floor(Math.random()*1e7)}get request(){return this._request}onRequestTimeout(){this.user.onRequestTimeout&&this.user.onRequestTimeout()}};var Y=class extends it{constructor(e,t,r){super(e,t,r,p.Trying,"sip.transaction.nict"),this.F=setTimeout(()=>this.timerF(),J.TIMER_F),this.send(e.toString()).catch(i=>{this.logTransportError(i,"Failed to send initial outgoing request.")})}dispose(){this.F&&(clearTimeout(this.F),this.F=void 0),this.K&&(clearTimeout(this.K),this.K=void 0),super.dispose()}get kind(){return"nict"}receiveResponse(e){let t=e.statusCode;if(!t||t<100||t>699)throw new Error(`Invalid status code ${t}`);switch(this.state){case p.Trying:if(t>=100&&t<=199){this.stateTransition(p.Proceeding),this.user.receiveResponse&&this.user.receiveResponse(e);return}if(t>=200&&t<=699){if(this.stateTransition(p.Completed),t===408){this.onRequestTimeout();return}this.user.receiveResponse&&this.user.receiveResponse(e);return}break;case p.Proceeding:if(t>=100&&t<=199&&this.user.receiveResponse)return this.user.receiveResponse(e);if(t>=200&&t<=699){if(this.stateTransition(p.Completed),t===408){this.onRequestTimeout();return}this.user.receiveResponse&&this.user.receiveResponse(e);return}break;case p.Completed:return;case p.Terminated:return;default:throw new Error(`Invalid state ${this.state}`)}let r=`Non-INVITE client transaction received unexpected ${t} response while in state ${this.state}.`;this.logger.warn(r)}onTransportError(e){this.user.onTransportError&&this.user.onTransportError(e),this.stateTransition(p.Terminated,!0)}typeToString(){return"non-INVITE client transaction"}stateTransition(e,t=!1){let r=()=>{throw new Error(`Invalid state transition from ${this.state} to ${e}`)};switch(e){case p.Trying:r();break;case p.Proceeding:this.state!==p.Trying&&r();break;case p.Completed:this.state!==p.Trying&&this.state!==p.Proceeding&&r();break;case p.Terminated:this.state!==p.Trying&&this.state!==p.Proceeding&&this.state!==p.Completed&&(t||r());break;default:r()}e===p.Completed&&(this.F&&(clearTimeout(this.F),this.F=void 0),this.K=setTimeout(()=>this.timerK(),J.TIMER_K)),e===p.Terminated&&this.dispose(),this.setState(e)}timerF(){this.logger.debug(`Timer F expired for non-INVITE client transaction ${this.id}.`),(this.state===p.Trying||this.state===p.Proceeding)&&(this.onRequestTimeout(),this.stateTransition(p.Terminated))}timerK(){this.state===p.Completed&&this.stateTransition(p.Terminated)}};var ke=class{constructor(e,t){this.core=e,this.dialogState=t,this.core.dialogs.set(this.id,this)}static initialDialogStateForUserAgentClient(e,t){let i=t.getHeaders("record-route").reverse(),s=t.parseHeader("contact");if(!s)throw new Error("Contact undefined.");if(!(s instanceof ee))throw new Error("Contact not instance of NameAddrHeader.");let o=s.uri,a=e.cseq,d=void 0,h=e.callId,l=e.fromTag,u=t.toTag;if(!h)throw new Error("Call id undefined.");if(!l)throw new Error("From tag undefined.");if(!u)throw new Error("To tag undefined.");if(!e.from)throw new Error("From undefined.");if(!e.to)throw new Error("To undefined.");let T=e.from.uri,A=e.to.uri;if(!t.statusCode)throw new Error("Incoming response status code undefined.");let _=t.statusCode<200;return{id:h+l+u,early:_,callId:h,localTag:l,remoteTag:u,localSequenceNumber:a,remoteSequenceNumber:d,localURI:T,remoteURI:A,remoteTarget:o,routeSet:i,secure:!1}}static initialDialogStateForUserAgentServer(e,t,r=!1){let s=e.getHeaders("record-route"),o=e.parseHeader("contact");if(!o)throw new Error("Contact undefined.");if(!(o instanceof ee))throw new Error("Contact not instance of NameAddrHeader.");let a=o.uri,d=e.cseq,h=void 0,l=e.callId,u=t,T=e.fromTag,A=e.from.uri,_=e.to.uri;return{id:l+u+T,early:r,callId:l,localTag:u,remoteTag:T,localSequenceNumber:h,remoteSequenceNumber:d,localURI:_,remoteURI:A,remoteTarget:a,routeSet:s,secure:!1}}dispose(){this.core.dialogs.delete(this.id)}get id(){return this.dialogState.id}get early(){return this.dialogState.early}get callId(){return this.dialogState.callId}get localTag(){return this.dialogState.localTag}get remoteTag(){return this.dialogState.remoteTag}get localSequenceNumber(){return this.dialogState.localSequenceNumber}get remoteSequenceNumber(){return this.dialogState.remoteSequenceNumber}get localURI(){return this.dialogState.localURI}get remoteURI(){return this.dialogState.remoteURI}get remoteTarget(){return this.dialogState.remoteTarget}get routeSet(){return this.dialogState.routeSet}get secure(){return this.dialogState.secure}get userAgentCore(){return this.core}confirm(){this.dialogState.early=!1}receiveRequest(e){if(e.method!==I.ACK){if(this.remoteSequenceNumber){if(e.cseq<=this.remoteSequenceNumber)throw new Error("Out of sequence in dialog request. Did you forget to call sequenceGuard()?");this.dialogState.remoteSequenceNumber=e.cseq}this.remoteSequenceNumber||(this.dialogState.remoteSequenceNumber=e.cseq)}}recomputeRouteSet(e){this.dialogState.routeSet=e.getHeaders("record-route").reverse()}createOutgoingRequestMessage(e,t){let r=this.remoteURI,i=this.remoteTag,s=this.localURI,o=this.localTag,a=this.callId,d;t&&t.cseq?d=t.cseq:this.dialogState.localSequenceNumber?d=this.dialogState.localSequenceNumber+=1:d=this.dialogState.localSequenceNumber=1;let h=this.remoteTarget,l=this.routeSet,u=t&&t.extraHeaders,T=t&&t.body;return this.userAgentCore.makeOutgoingRequestMessage(e,h,s,r,{callId:a,cseq:d,fromTag:o,toTag:i,routeSet:l},u,T)}incrementLocalSequenceNumber(){if(!this.dialogState.localSequenceNumber)throw new Error("Local sequence number undefined.");this.dialogState.localSequenceNumber+=1}sequenceGuard(e){return e.method===I.ACK?!0:this.remoteSequenceNumber&&e.cseq<=this.remoteSequenceNumber?(this.core.replyStateless(e,{statusCode:500}),!1):!0}};var _e=class extends it{constructor(e,t,r){super(e,t,r,p.Calling,"sip.transaction.ict"),this.ackRetransmissionCache=new Map,this.B=setTimeout(()=>this.timerB(),J.TIMER_B),this.send(e.toString()).catch(i=>{this.logTransportError(i,"Failed to send initial outgoing request.")})}dispose(){this.B&&(clearTimeout(this.B),this.B=void 0),this.D&&(clearTimeout(this.D),this.D=void 0),this.M&&(clearTimeout(this.M),this.M=void 0),super.dispose()}get kind(){return"ict"}ackResponse(e){let t=e.toTag;if(!t)throw new Error("To tag undefined.");let r="z9hG4bK"+Math.floor(Math.random()*1e7);e.setViaHeader(r,this.transport.protocol),this.ackRetransmissionCache.set(t,e),this.send(e.toString()).catch(i=>{this.logTransportError(i,"Failed to send ACK to 2xx response.")})}receiveResponse(e){let t=e.statusCode;if(!t||t<100||t>699)throw new Error(`Invalid status code ${t}`);switch(this.state){case p.Calling:if(t>=100&&t<=199){this.stateTransition(p.Proceeding),this.user.receiveResponse&&this.user.receiveResponse(e);return}if(t>=200&&t<=299){this.ackRetransmissionCache.set(e.toTag,void 0),this.stateTransition(p.Accepted),this.user.receiveResponse&&this.user.receiveResponse(e);return}if(t>=300&&t<=699){this.stateTransition(p.Completed),this.ack(e),this.user.receiveResponse&&this.user.receiveResponse(e);return}break;case p.Proceeding:if(t>=100&&t<=199){this.user.receiveResponse&&this.user.receiveResponse(e);return}if(t>=200&&t<=299){this.ackRetransmissionCache.set(e.toTag,void 0),this.stateTransition(p.Accepted),this.user.receiveResponse&&this.user.receiveResponse(e);return}if(t>=300&&t<=699){this.stateTransition(p.Completed),this.ack(e),this.user.receiveResponse&&this.user.receiveResponse(e);return}break;case p.Accepted:if(t>=200&&t<=299){if(!this.ackRetransmissionCache.has(e.toTag)){this.ackRetransmissionCache.set(e.toTag,void 0),this.user.receiveResponse&&this.user.receiveResponse(e);return}let i=this.ackRetransmissionCache.get(e.toTag);if(i){this.send(i.toString()).catch(s=>{this.logTransportError(s,"Failed to send retransmission of ACK to 2xx response.")});return}return}break;case p.Completed:if(t>=300&&t<=699){this.ack(e);return}break;case p.Terminated:break;default:throw new Error(`Invalid state ${this.state}`)}let r=`Received unexpected ${t} response while in state ${this.state}.`;this.logger.warn(r)}onTransportError(e){this.user.onTransportError&&this.user.onTransportError(e),this.stateTransition(p.Terminated,!0)}typeToString(){return"INVITE client transaction"}ack(e){let t=this.request.ruri,r=this.request.callId,i=this.request.cseq,s=this.request.getHeader("from"),o=e.getHeader("to"),a=this.request.getHeader("via"),d=this.request.getHeader("route");if(!s)throw new Error("From undefined.");if(!o)throw new Error("To undefined.");if(!a)throw new Error("Via undefined.");let h=`ACK ${t} SIP/2.0\r
@@ -40,11 +40,11 @@ var WebCall=(()=>{var Gn=Object.create;var Yt=Object.defineProperty;var Vn=Objec
40
40
  `,h+=`Max-Forwards: 70\r
41
41
  `,h+=`Content-Length: 0\r
42
42
  \r
43
- `,this.send(h).catch(l=>{this.logTransportError(l,"Failed to send ACK to non-2xx response.")})}stateTransition(e,t=!1){let r=()=>{throw new Error(`Invalid state transition from ${this.state} to ${e}`)};switch(e){case p.Calling:r();break;case p.Proceeding:this.state!==p.Calling&&r();break;case p.Accepted:case p.Completed:this.state!==p.Calling&&this.state!==p.Proceeding&&r();break;case p.Terminated:this.state!==p.Calling&&this.state!==p.Accepted&&this.state!==p.Completed&&(t||r());break;default:r()}this.B&&(clearTimeout(this.B),this.B=void 0),p.Proceeding,e===p.Completed&&(this.D=setTimeout(()=>this.timerD(),J.TIMER_D)),e===p.Accepted&&(this.M=setTimeout(()=>this.timerM(),J.TIMER_M)),e===p.Terminated&&this.dispose(),this.setState(e)}timerA(){}timerB(){this.logger.debug(`Timer B expired for INVITE client transaction ${this.id}.`),this.state===p.Calling&&(this.onRequestTimeout(),this.stateTransition(p.Terminated))}timerD(){this.logger.debug(`Timer D expired for INVITE client transaction ${this.id}.`),this.state===p.Completed&&this.stateTransition(p.Terminated)}timerM(){this.logger.debug(`Timer M expired for INVITE client transaction ${this.id}.`),this.state===p.Accepted&&this.stateTransition(p.Terminated)}};var G=class{constructor(e,t,r,i){this.transactionConstructor=e,this.core=t,this.message=r,this.delegate=i,this.challenged=!1,this.stale=!1,this.logger=this.loggerFactory.getLogger("sip.user-agent-client"),this.init()}dispose(){this.transaction.dispose()}get loggerFactory(){return this.core.loggerFactory}get transaction(){if(!this._transaction)throw new Error("Transaction undefined.");return this._transaction}cancel(e,t={}){if(!this.transaction)throw new Error("Transaction undefined.");if(!this.message.to)throw new Error("To undefined.");if(!this.message.from)throw new Error("From undefined.");let r=this.core.makeOutgoingRequestMessage(I.CANCEL,this.message.ruri,this.message.from.uri,this.message.to.uri,{toTag:this.message.toTag,fromTag:this.message.fromTag,callId:this.message.callId,cseq:this.message.cseq},t.extraHeaders);return r.branch=this.message.branch,this.message.headers.Route&&(r.headers.Route=this.message.headers.Route),e&&r.setHeader("Reason",e),this.transaction.state===p.Proceeding?new G(Y,this.core,r):this.transaction.addStateChangeListener(()=>{this.transaction&&this.transaction.state===p.Proceeding&&new G(Y,this.core,r)},{once:!0}),r}authenticationGuard(e,t){let r=e.statusCode;if(!r)throw new Error("Response status code undefined.");if(r!==401&&r!==407)return!0;let i,s;if(r===401?(i=e.parseHeader("www-authenticate"),s="authorization"):(i=e.parseHeader("proxy-authenticate"),s="proxy-authorization"),!i)return this.logger.warn(r+" with wrong or missing challenge, cannot authenticate"),!0;if(this.challenged&&(this.stale||i.stale!==!0))return this.logger.warn(r+" apparently in authentication loop, cannot authenticate"),!0;if(!this.credentials&&(this.credentials=this.core.configuration.authenticationFactory(),!this.credentials))return this.logger.warn("Unable to obtain credentials, cannot authenticate"),!0;if(!this.credentials.authenticate(this.message,i))return!0;this.challenged=!0,i.stale&&(this.stale=!0);let o=this.message.cseq+=1;return t&&t.localSequenceNumber&&(t.incrementLocalSequenceNumber(),o=this.message.cseq=t.localSequenceNumber),this.message.setHeader("cseq",o+" "+this.message.method),this.message.setHeader(s,this.credentials.toString()),this.init(),!1}onRequestTimeout(){this.logger.warn("User agent client request timed out. Generating internal 408 Request Timeout.");let e=new me;e.statusCode=408,e.reasonPhrase="Request Timeout",this.receiveResponse(e)}onTransportError(e){this.logger.error(e.message),this.logger.error("User agent client request transport error. Generating internal 503 Service Unavailable.");let t=new me;t.statusCode=503,t.reasonPhrase="Service Unavailable",this.receiveResponse(t)}receiveResponse(e){if(!this.authenticationGuard(e))return;let t=e.statusCode?e.statusCode.toString():"";if(!t)throw new Error("Response status code undefined.");switch(!0){case/^100$/.test(t):this.delegate&&this.delegate.onTrying&&this.delegate.onTrying({message:e});break;case/^1[0-9]{2}$/.test(t):this.delegate&&this.delegate.onProgress&&this.delegate.onProgress({message:e});break;case/^2[0-9]{2}$/.test(t):this.delegate&&this.delegate.onAccept&&this.delegate.onAccept({message:e});break;case/^3[0-9]{2}$/.test(t):this.delegate&&this.delegate.onRedirect&&this.delegate.onRedirect({message:e});break;case/^[4-6][0-9]{2}$/.test(t):this.delegate&&this.delegate.onReject&&this.delegate.onReject({message:e});break;default:throw new Error(`Invalid status code ${t}`)}}init(){let e={loggerFactory:this.loggerFactory,onRequestTimeout:()=>this.onRequestTimeout(),onStateChange:i=>{i===p.Terminated&&(this.core.userAgentClients.delete(r),t===this._transaction&&this.dispose())},onTransportError:i=>this.onTransportError(i),receiveResponse:i=>this.receiveResponse(i)},t=new this.transactionConstructor(this.message,this.core.transport,e);this._transaction=t;let r=t.id+t.request.method;this.core.userAgentClients.set(r,this)}};var _r=class extends G{constructor(e,t,r){let i=e.createOutgoingRequestMessage(I.BYE,r);super(Y,e.userAgentCore,i,t),e.dispose()}};var Z=class extends xt{constructor(e,t,r){super(e,t,r,p.Trying,"sip.transaction.nist")}dispose(){this.J&&(clearTimeout(this.J),this.J=void 0),super.dispose()}get kind(){return"nist"}receiveRequest(e){switch(this.state){case p.Trying:break;case p.Proceeding:if(!this.lastResponse)throw new Error("Last response undefined.");this.send(this.lastResponse).catch(t=>{this.logTransportError(t,"Failed to send retransmission of provisional response.")});break;case p.Completed:if(!this.lastResponse)throw new Error("Last response undefined.");this.send(this.lastResponse).catch(t=>{this.logTransportError(t,"Failed to send retransmission of final response.")});break;case p.Terminated:break;default:throw new Error(`Invalid state ${this.state}`)}}receiveResponse(e,t){if(e<100||e>699)throw new Error(`Invalid status code ${e}`);if(e>100&&e<=199)throw new Error("Provisional response other than 100 not allowed.");switch(this.state){case p.Trying:if(this.lastResponse=t,e>=100&&e<200){this.stateTransition(p.Proceeding),this.send(t).catch(i=>{this.logTransportError(i,"Failed to send provisional response.")});return}if(e>=200&&e<=699){this.stateTransition(p.Completed),this.send(t).catch(i=>{this.logTransportError(i,"Failed to send final response.")});return}break;case p.Proceeding:if(this.lastResponse=t,e>=200&&e<=699){this.stateTransition(p.Completed),this.send(t).catch(i=>{this.logTransportError(i,"Failed to send final response.")});return}break;case p.Completed:return;case p.Terminated:break;default:throw new Error(`Invalid state ${this.state}`)}let r=`Non-INVITE server transaction received unexpected ${e} response from TU while in state ${this.state}.`;throw this.logger.error(r),new Error(r)}onTransportError(e){this.user.onTransportError&&this.user.onTransportError(e),this.stateTransition(p.Terminated,!0)}typeToString(){return"non-INVITE server transaction"}stateTransition(e,t=!1){let r=()=>{throw new Error(`Invalid state transition from ${this.state} to ${e}`)};switch(e){case p.Trying:r();break;case p.Proceeding:this.state!==p.Trying&&r();break;case p.Completed:this.state!==p.Trying&&this.state!==p.Proceeding&&r();break;case p.Terminated:this.state!==p.Proceeding&&this.state!==p.Completed&&(t||r());break;default:r()}e===p.Completed&&(this.J=setTimeout(()=>this.timerJ(),J.TIMER_J)),e===p.Terminated&&this.dispose(),this.setState(e)}timerJ(){this.logger.debug(`Timer J expired for NON-INVITE server transaction ${this.id}.`),this.state===p.Completed&&this.stateTransition(p.Terminated)}};var te=class{constructor(e,t,r,i){this.transactionConstructor=e,this.core=t,this.message=r,this.delegate=i,this.logger=this.loggerFactory.getLogger("sip.user-agent-server"),this.toTag=r.toTag?r.toTag:Xe(),this.init()}dispose(){this.transaction.dispose()}get loggerFactory(){return this.core.loggerFactory}get transaction(){if(!this._transaction)throw new Error("Transaction undefined.");return this._transaction}accept(e={statusCode:200}){if(!this.acceptable)throw new Ae(`${this.message.method} not acceptable in state ${this.transaction.state}.`);let t=e.statusCode;if(t<200||t>299)throw new TypeError(`Invalid statusCode: ${t}`);return this.reply(e)}progress(e={statusCode:180}){if(!this.progressable)throw new Ae(`${this.message.method} not progressable in state ${this.transaction.state}.`);let t=e.statusCode;if(t<101||t>199)throw new TypeError(`Invalid statusCode: ${t}`);return this.reply(e)}redirect(e,t={statusCode:302}){if(!this.redirectable)throw new Ae(`${this.message.method} not redirectable in state ${this.transaction.state}.`);let r=t.statusCode;if(r<300||r>399)throw new TypeError(`Invalid statusCode: ${r}`);let i=new Array;return e.forEach(o=>i.push(`Contact: ${o.toString()}`)),t.extraHeaders=(t.extraHeaders||[]).concat(i),this.reply(t)}reject(e={statusCode:480}){if(!this.rejectable)throw new Ae(`${this.message.method} not rejectable in state ${this.transaction.state}.`);let t=e.statusCode;if(t<400||t>699)throw new TypeError(`Invalid statusCode: ${t}`);return this.reply(e)}trying(e){if(!this.tryingable)throw new Ae(`${this.message.method} not tryingable in state ${this.transaction.state}.`);return this.reply({statusCode:100})}receiveCancel(e){this.delegate&&this.delegate.onCancel&&this.delegate.onCancel(e)}get acceptable(){if(this.transaction instanceof se)return this.transaction.state===p.Proceeding||this.transaction.state===p.Accepted;if(this.transaction instanceof Z)return this.transaction.state===p.Trying||this.transaction.state===p.Proceeding;throw new Error("Unknown transaction type.")}get progressable(){if(this.transaction instanceof se)return this.transaction.state===p.Proceeding;if(this.transaction instanceof Z)return!1;throw new Error("Unknown transaction type.")}get redirectable(){if(this.transaction instanceof se)return this.transaction.state===p.Proceeding;if(this.transaction instanceof Z)return this.transaction.state===p.Trying||this.transaction.state===p.Proceeding;throw new Error("Unknown transaction type.")}get rejectable(){if(this.transaction instanceof se)return this.transaction.state===p.Proceeding;if(this.transaction instanceof Z)return this.transaction.state===p.Trying||this.transaction.state===p.Proceeding;throw new Error("Unknown transaction type.")}get tryingable(){if(this.transaction instanceof se)return this.transaction.state===p.Proceeding;if(this.transaction instanceof Z)return this.transaction.state===p.Trying;throw new Error("Unknown transaction type.")}reply(e){!e.toTag&&e.statusCode!==100&&(e.toTag=this.toTag),e.userAgent=e.userAgent||this.core.configuration.userAgentHeaderFieldValue,e.supported=e.supported||this.core.configuration.supportedOptionTagsResponse;let t=Ar(this.message,e);return this.transaction.receiveResponse(e.statusCode,t.message),t}init(){let e={loggerFactory:this.loggerFactory,onStateChange:i=>{i===p.Terminated&&(this.core.userAgentServers.delete(r),this.dispose())},onTransportError:i=>{this.logger.error(i.message),this.delegate&&this.delegate.onTransportError?this.delegate.onTransportError(i):this.logger.error("User agent server response transport error.")}},t=new this.transactionConstructor(this.message,this.core.transport,e);this._transaction=t;let r=t.id;this.core.userAgentServers.set(t.id,this)}};var $r=class extends te{constructor(e,t,r){super(Z,e.userAgentCore,t,r)}};var Dr=class extends G{constructor(e,t,r){let i=e.createOutgoingRequestMessage(I.INFO,r);super(Y,e.userAgentCore,i,t)}};var Pr=class extends te{constructor(e,t,r){super(Z,e.userAgentCore,t,r)}};var At=class extends G{constructor(e,t,r){super(Y,e,t,r)}};var _t=class extends te{constructor(e,t,r){super(Z,e,t,r)}};var Nr=class extends G{constructor(e,t,r){let i=e.createOutgoingRequestMessage(I.NOTIFY,r);super(Y,e.userAgentCore,i,t)}};function Ua(n){return n.userAgentCore!==void 0}var Ve=class extends te{constructor(e,t,r){let i=Ua(e)?e.userAgentCore:e;super(Z,i,t,r)}};var Or=class extends G{constructor(e,t,r){let i=e.createOutgoingRequestMessage(I.PRACK,r);super(Y,e.userAgentCore,i,t),e.signalingStateTransition(i)}};var kr=class extends te{constructor(e,t,r){super(Z,e.userAgentCore,t,r),e.signalingStateTransition(t),this.dialog=e}accept(e={statusCode:200}){return e.body&&this.dialog.signalingStateTransition(e.body),super.accept(e)}};var Hr=class extends G{constructor(e,t,r){let i=e.createOutgoingRequestMessage(I.INVITE,r);super(_e,e.userAgentCore,i,t),this.delegate=t,e.signalingStateTransition(i),e.reinviteUserAgentClient=this,this.dialog=e}receiveResponse(e){if(!this.authenticationGuard(e,this.dialog))return;let t=e.statusCode?e.statusCode.toString():"";if(!t)throw new Error("Response status code undefined.");switch(!0){case/^100$/.test(t):this.delegate&&this.delegate.onTrying&&this.delegate.onTrying({message:e});break;case/^1[0-9]{2}$/.test(t):this.delegate&&this.delegate.onProgress&&this.delegate.onProgress({message:e,session:this.dialog,prack:r=>{throw new Error("Unimplemented.")}});break;case/^2[0-9]{2}$/.test(t):this.dialog.signalingStateTransition(e),this.delegate&&this.delegate.onAccept&&this.delegate.onAccept({message:e,session:this.dialog,ack:r=>this.dialog.ack(r)});break;case/^3[0-9]{2}$/.test(t):this.dialog.signalingStateRollback(),this.dialog.reinviteUserAgentClient=void 0,this.delegate&&this.delegate.onRedirect&&this.delegate.onRedirect({message:e});break;case/^[4-6][0-9]{2}$/.test(t):this.dialog.signalingStateRollback(),this.dialog.reinviteUserAgentClient=void 0,this.delegate&&this.delegate.onReject&&this.delegate.onReject({message:e});break;default:throw new Error(`Invalid status code ${t}`)}}};var qr=class extends te{constructor(e,t,r){super(se,e.userAgentCore,t,r),e.reinviteUserAgentServer=this,this.dialog=e}accept(e={statusCode:200}){e.extraHeaders=e.extraHeaders||[],e.extraHeaders=e.extraHeaders.concat(this.dialog.routeSet.map(s=>`Record-Route: ${s}`));let t=super.accept(e),r=this.dialog,i=Object.assign(Object.assign({},t),{session:r});return e.body&&this.dialog.signalingStateTransition(e.body),this.dialog.reConfirm(),i}progress(e={statusCode:180}){let t=super.progress(e),r=this.dialog,i=Object.assign(Object.assign({},t),{session:r});return e.body&&this.dialog.signalingStateTransition(e.body),i}redirect(e,t={statusCode:302}){throw this.dialog.signalingStateRollback(),this.dialog.reinviteUserAgentServer=void 0,new Error("Unimplemented.")}reject(e={statusCode:488}){return this.dialog.signalingStateRollback(),this.dialog.reinviteUserAgentServer=void 0,super.reject(e)}};var Lr=class extends G{constructor(e,t,r){let i=e.createOutgoingRequestMessage(I.REFER,r);super(Y,e.userAgentCore,i,t)}};function Ba(n){return n.userAgentCore!==void 0}var $t=class extends te{constructor(e,t,r){let i=Ba(e)?e.userAgentCore:e;super(Z,i,t,r)}};var st=class extends ke{constructor(e,t,r,i){super(t,r),this.initialTransaction=e,this._signalingState=b.Initial,this.ackWait=!1,this.ackProcessing=!1,this.delegate=i,e instanceof se&&(this.ackWait=!0),this.early||this.start2xxRetransmissionTimer(),this.signalingStateTransition(e.request),this.logger=t.loggerFactory.getLogger("sip.invite-dialog"),this.logger.log(`INVITE dialog ${this.id} constructed`)}dispose(){super.dispose(),this._signalingState=b.Closed,this._offer=void 0,this._answer=void 0,this.invite2xxTimer&&(clearTimeout(this.invite2xxTimer),this.invite2xxTimer=void 0),this.logger.log(`INVITE dialog ${this.id} destroyed`)}get sessionState(){return this.early?we.Early:this.ackWait?we.AckWait:this._signalingState===b.Closed?we.Terminated:we.Confirmed}get signalingState(){return this._signalingState}get offer(){return this._offer}get answer(){return this._answer}confirm(){this.early&&this.start2xxRetransmissionTimer(),super.confirm()}reConfirm(){this.reinviteUserAgentServer&&this.startReInvite2xxRetransmissionTimer()}ack(e={}){this.logger.log(`INVITE dialog ${this.id} sending ACK request`);let t;if(this.reinviteUserAgentClient){if(!(this.reinviteUserAgentClient.transaction instanceof _e))throw new Error("Transaction not instance of InviteClientTransaction.");t=this.reinviteUserAgentClient.transaction,this.reinviteUserAgentClient=void 0}else{if(!(this.initialTransaction instanceof _e))throw new Error("Initial transaction not instance of InviteClientTransaction.");t=this.initialTransaction}let r=this.createOutgoingRequestMessage(I.ACK,{cseq:t.request.cseq,extraHeaders:e.extraHeaders,body:e.body});return t.ackResponse(r),this.signalingStateTransition(r),{message:r}}bye(e,t){if(this.logger.log(`INVITE dialog ${this.id} sending BYE request`),this.initialTransaction instanceof se){if(this.early)throw new Error("UAS MUST NOT send a BYE on early dialogs.");if(this.ackWait&&this.initialTransaction.state!==p.Terminated)throw new Error("UAS MUST NOT send a BYE on a confirmed dialog until it has received an ACK for its 2xx response or until the server transaction times out.")}return new _r(this,e,t)}info(e,t){if(this.logger.log(`INVITE dialog ${this.id} sending INFO request`),this.early)throw new Error("Dialog not confirmed.");return new Dr(this,e,t)}invite(e,t){if(this.logger.log(`INVITE dialog ${this.id} sending INVITE request`),this.early)throw new Error("Dialog not confirmed.");if(this.reinviteUserAgentClient)throw new Error("There is an ongoing re-INVITE client transaction.");if(this.reinviteUserAgentServer)throw new Error("There is an ongoing re-INVITE server transaction.");return new Hr(this,e,t)}message(e,t){if(this.logger.log(`INVITE dialog ${this.id} sending MESSAGE request`),this.early)throw new Error("Dialog not confirmed.");let r=this.createOutgoingRequestMessage(I.MESSAGE,t);return new At(this.core,r,e)}notify(e,t){if(this.logger.log(`INVITE dialog ${this.id} sending NOTIFY request`),this.early)throw new Error("Dialog not confirmed.");return new Nr(this,e,t)}prack(e,t){return this.logger.log(`INVITE dialog ${this.id} sending PRACK request`),new Or(this,e,t)}refer(e,t){if(this.logger.log(`INVITE dialog ${this.id} sending REFER request`),this.early)throw new Error("Dialog not confirmed.");return new Lr(this,e,t)}receiveRequest(e){if(this.logger.log(`INVITE dialog ${this.id} received ${e.method} request`),e.method===I.ACK){if(this.ackWait){if(this.initialTransaction instanceof _e){this.logger.warn(`INVITE dialog ${this.id} received unexpected ${e.method} request, dropping.`);return}if(this.initialTransaction.request.cseq!==e.cseq){this.logger.warn(`INVITE dialog ${this.id} received unexpected ${e.method} request, dropping.`);return}this.ackWait=!1}else{if(!this.reinviteUserAgentServer){this.logger.warn(`INVITE dialog ${this.id} received unexpected ${e.method} request, dropping.`);return}if(this.reinviteUserAgentServer.transaction.request.cseq!==e.cseq){this.logger.warn(`INVITE dialog ${this.id} received unexpected ${e.method} request, dropping.`);return}this.reinviteUserAgentServer=void 0}if(this.signalingStateTransition(e),this.delegate&&this.delegate.onAck){let t=this.delegate.onAck({message:e});t instanceof Promise&&(this.ackProcessing=!0,t.then(()=>this.ackProcessing=!1).catch(()=>this.ackProcessing=!1))}return}if(!this.sequenceGuard(e)){this.logger.log(`INVITE dialog ${this.id} rejected out of order ${e.method} request.`);return}if(super.receiveRequest(e),e.method===I.INVITE){let t=()=>{let s=this.ackWait?"waiting for initial ACK":"processing initial ACK";this.logger.warn(`INVITE dialog ${this.id} received re-INVITE while ${s}`);let o="RFC 5407 suggests the following to avoid this race condition... ";o+=" Note: Implementation issues are outside the scope of this document,",o+=" but the following tip is provided for avoiding race conditions of",o+=" this type. The caller can delay sending re-INVITE F6 for some period",o+=" of time (2 seconds, perhaps), after which the caller can reasonably",o+=" assume that its ACK has been received. Implementors can decouple the",o+=" actions of the user (e.g., pressing the hold button) from the actions",o+=" of the protocol (the sending of re-INVITE F6), so that the UA can",o+=" behave like this. In this case, it is the implementor's choice as to",o+=" how long to wait. In most cases, such an implementation may be",o+=" useful to prevent the type of race condition shown in this section.",o+=" This document expresses no preference about whether or not they",o+=" should wait for an ACK to be delivered. After considering the impact",o+=" on user experience, implementors should decide whether or not to wait",o+=" for a while, because the user experience depends on the",o+=" implementation and has no direct bearing on protocol behavior.",this.logger.warn(o)},i=[`Retry-After: ${Math.floor(Math.random()*10)+1}`];if(this.ackProcessing){this.core.replyStateless(e,{statusCode:500,extraHeaders:i}),t();return}if(this.ackWait&&this.signalingState!==b.Stable){this.core.replyStateless(e,{statusCode:500,extraHeaders:i}),t();return}if(this.reinviteUserAgentServer){this.core.replyStateless(e,{statusCode:500,extraHeaders:i});return}if(this.reinviteUserAgentClient){this.core.replyStateless(e,{statusCode:491});return}}if(e.method===I.INVITE){let t=e.parseHeader("contact");if(!t)throw new Error("Contact undefined.");if(!(t instanceof ee))throw new Error("Contact not instance of NameAddrHeader.");this.dialogState.remoteTarget=t.uri}switch(e.method){case I.BYE:{let t=new $r(this,e);this.delegate&&this.delegate.onBye?this.delegate.onBye(t):t.accept(),this.dispose()}break;case I.INFO:{let t=new Pr(this,e);this.delegate&&this.delegate.onInfo?this.delegate.onInfo(t):t.reject({statusCode:469,extraHeaders:["Recv-Info:"]})}break;case I.INVITE:{let t=new qr(this,e);this.signalingStateTransition(e),this.delegate&&this.delegate.onInvite?this.delegate.onInvite(t):t.reject({statusCode:488})}break;case I.MESSAGE:{let t=new _t(this.core,e);this.delegate&&this.delegate.onMessage?this.delegate.onMessage(t):t.accept()}break;case I.NOTIFY:{let t=new Ve(this,e);this.delegate&&this.delegate.onNotify?this.delegate.onNotify(t):t.accept()}break;case I.PRACK:{let t=new kr(this,e);this.delegate&&this.delegate.onPrack?this.delegate.onPrack(t):t.accept()}break;case I.REFER:{let t=new $t(this,e);this.delegate&&this.delegate.onRefer?this.delegate.onRefer(t):t.reject()}break;default:this.logger.log(`INVITE dialog ${this.id} received unimplemented ${e.method} request`),this.core.replyStateless(e,{statusCode:501});break}}reliableSequenceGuard(e){let t=e.statusCode;if(!t)throw new Error("Status code undefined");if(t>100&&t<200){let r=e.getHeader("require"),i=e.getHeader("rseq"),s=r&&r.includes("100rel")&&i?Number(i):void 0;if(s){if(this.rseq&&this.rseq+1!==s)return!1;this.rseq=this.rseq?this.rseq+1:s}}return!0}signalingStateRollback(){(this._signalingState===b.HaveLocalOffer||this.signalingState===b.HaveRemoteOffer)&&this._rollbackOffer&&this._rollbackAnswer&&(this._signalingState=b.Stable,this._offer=this._rollbackOffer,this._answer=this._rollbackAnswer)}signalingStateTransition(e){let t=et(e);if(!(!t||t.contentDisposition!=="session")){if(this._signalingState===b.Stable&&(this._rollbackOffer=this._offer,this._rollbackAnswer=this._answer),e instanceof Pe)switch(this._signalingState){case b.Initial:case b.Stable:this._signalingState=b.HaveRemoteOffer,this._offer=t,this._answer=void 0;break;case b.HaveLocalOffer:this._signalingState=b.Stable,this._answer=t;break;case b.HaveRemoteOffer:break;case b.Closed:break;default:throw new Error("Unexpected signaling state.")}if(e instanceof me)switch(this._signalingState){case b.Initial:case b.Stable:this._signalingState=b.HaveRemoteOffer,this._offer=t,this._answer=void 0;break;case b.HaveLocalOffer:this._signalingState=b.Stable,this._answer=t;break;case b.HaveRemoteOffer:break;case b.Closed:break;default:throw new Error("Unexpected signaling state.")}if(e instanceof Ne)switch(this._signalingState){case b.Initial:case b.Stable:this._signalingState=b.HaveLocalOffer,this._offer=t,this._answer=void 0;break;case b.HaveLocalOffer:break;case b.HaveRemoteOffer:this._signalingState=b.Stable,this._answer=t;break;case b.Closed:break;default:throw new Error("Unexpected signaling state.")}if(Hi(e))switch(this._signalingState){case b.Initial:case b.Stable:this._signalingState=b.HaveLocalOffer,this._offer=t,this._answer=void 0;break;case b.HaveLocalOffer:break;case b.HaveRemoteOffer:this._signalingState=b.Stable,this._answer=t;break;case b.Closed:break;default:throw new Error("Unexpected signaling state.")}}}start2xxRetransmissionTimer(){if(this.initialTransaction instanceof se){let e=this.initialTransaction,t=J.T1,r=()=>{if(!this.ackWait){this.invite2xxTimer=void 0;return}this.logger.log("No ACK for 2xx response received, attempting retransmission"),e.retransmitAcceptedResponse(),t=Math.min(t*2,J.T2),this.invite2xxTimer=setTimeout(r,t)};this.invite2xxTimer=setTimeout(r,t);let i=()=>{e.state===p.Terminated&&(e.removeStateChangeListener(i),this.invite2xxTimer&&(clearTimeout(this.invite2xxTimer),this.invite2xxTimer=void 0),this.ackWait&&(this.delegate&&this.delegate.onAckTimeout?this.delegate.onAckTimeout():this.bye()))};e.addStateChangeListener(i)}}startReInvite2xxRetransmissionTimer(){if(this.reinviteUserAgentServer&&this.reinviteUserAgentServer.transaction instanceof se){let e=this.reinviteUserAgentServer.transaction,t=J.T1,r=()=>{if(!this.reinviteUserAgentServer){this.invite2xxTimer=void 0;return}this.logger.log("No ACK for 2xx response received, attempting retransmission"),e.retransmitAcceptedResponse(),t=Math.min(t*2,J.T2),this.invite2xxTimer=setTimeout(r,t)};this.invite2xxTimer=setTimeout(r,t);let i=()=>{e.state===p.Terminated&&(e.removeStateChangeListener(i),this.invite2xxTimer&&(clearTimeout(this.invite2xxTimer),this.invite2xxTimer=void 0),this.reinviteUserAgentServer)};e.addStateChangeListener(i)}}};var Mr=class extends G{constructor(e,t,r){super(_e,e,t,r),this.confirmedDialogAcks=new Map,this.confirmedDialogs=new Map,this.earlyDialogs=new Map,this.delegate=r}dispose(){this.earlyDialogs.forEach(e=>e.dispose()),this.earlyDialogs.clear(),super.dispose()}onTransportError(e){if(this.transaction.state===p.Calling)return super.onTransportError(e);this.logger.error(e.message),this.logger.error("User agent client request transport error while sending ACK.")}receiveResponse(e){if(!this.authenticationGuard(e))return;let t=e.statusCode?e.statusCode.toString():"";if(!t)throw new Error("Response status code undefined.");switch(!0){case/^100$/.test(t):this.delegate&&this.delegate.onTrying&&this.delegate.onTrying({message:e});return;case/^1[0-9]{2}$/.test(t):{if(!e.toTag){this.logger.warn("Non-100 1xx INVITE response received without a to tag, dropping.");return}if(!e.parseHeader("contact")){this.logger.error("Non-100 1xx INVITE response received without a Contact header field, dropping.");return}let i=ke.initialDialogStateForUserAgentClient(this.message,e),s=this.earlyDialogs.get(i.id);if(!s){let a=this.transaction;if(!(a instanceof _e))throw new Error("Transaction not instance of InviteClientTransaction.");s=new st(a,this.core,i),this.earlyDialogs.set(s.id,s)}if(!s.reliableSequenceGuard(e)){this.logger.warn("1xx INVITE reliable response received out of order or is a retransmission, dropping.");return}(s.signalingState===b.Initial||s.signalingState===b.HaveLocalOffer)&&s.signalingStateTransition(e);let o=s;this.delegate&&this.delegate.onProgress&&this.delegate.onProgress({message:e,session:o,prack:a=>o.prack(void 0,a)})}return;case/^2[0-9]{2}$/.test(t):{if(!e.toTag){this.logger.error("2xx INVITE response received without a to tag, dropping.");return}if(!e.parseHeader("contact")){this.logger.error("2xx INVITE response received without a Contact header field, dropping.");return}let i=ke.initialDialogStateForUserAgentClient(this.message,e),s=this.confirmedDialogs.get(i.id);if(s){let a=this.confirmedDialogAcks.get(i.id);if(a){let d=this.transaction;if(!(d instanceof _e))throw new Error("Client transaction not instance of InviteClientTransaction.");d.ackResponse(a.message)}return}if(s=this.earlyDialogs.get(i.id),s)s.confirm(),s.recomputeRouteSet(e),this.earlyDialogs.delete(s.id),this.confirmedDialogs.set(s.id,s);else{let a=this.transaction;if(!(a instanceof _e))throw new Error("Transaction not instance of InviteClientTransaction.");s=new st(a,this.core,i),this.confirmedDialogs.set(s.id,s)}(s.signalingState===b.Initial||s.signalingState===b.HaveLocalOffer)&&s.signalingStateTransition(e);let o=s;if(this.delegate&&this.delegate.onAccept)this.delegate.onAccept({message:e,session:o,ack:a=>{let d=o.ack(a);return this.confirmedDialogAcks.set(o.id,d),d}});else{let a=o.ack();this.confirmedDialogAcks.set(o.id,a)}}return;case/^3[0-9]{2}$/.test(t):this.earlyDialogs.forEach(r=>r.dispose()),this.earlyDialogs.clear(),this.delegate&&this.delegate.onRedirect&&this.delegate.onRedirect({message:e});return;case/^[4-6][0-9]{2}$/.test(t):this.earlyDialogs.forEach(r=>r.dispose()),this.earlyDialogs.clear(),this.delegate&&this.delegate.onReject&&this.delegate.onReject({message:e});return;default:throw new Error(`Invalid status code ${t}`)}throw new Error(`Executing what should be an unreachable code path receiving ${t} response.`)}};var Dt=class extends te{constructor(e,t,r){super(se,e,t,r),this.core=e}dispose(){this.earlyDialog&&this.earlyDialog.dispose(),super.dispose()}accept(e={statusCode:200}){if(!this.acceptable)throw new Ae(`${this.message.method} not acceptable in state ${this.transaction.state}.`);if(!this.confirmedDialog)if(this.earlyDialog)this.earlyDialog.confirm(),this.confirmedDialog=this.earlyDialog,this.earlyDialog=void 0;else{let d=this.transaction;if(!(d instanceof se))throw new Error("Transaction not instance of InviteClientTransaction.");let h=ke.initialDialogStateForUserAgentServer(this.message,this.toTag);this.confirmedDialog=new st(d,this.core,h)}let t=this.message.getHeaders("record-route").map(d=>`Record-Route: ${d}`),r=`Contact: ${this.core.configuration.contact.toString()}`,i="Allow: "+Oe.toString();if(!e.body){if(this.confirmedDialog.signalingState===b.Stable)e.body=this.confirmedDialog.answer;else if(this.confirmedDialog.signalingState===b.Initial||this.confirmedDialog.signalingState===b.HaveRemoteOffer)throw new Error("Response must have a body.")}e.statusCode=e.statusCode||200,e.extraHeaders=e.extraHeaders||[],e.extraHeaders=e.extraHeaders.concat(t),e.extraHeaders.push(i),e.extraHeaders.push(r);let s=super.accept(e),o=this.confirmedDialog,a=Object.assign(Object.assign({},s),{session:o});return e.body&&this.confirmedDialog.signalingState!==b.Stable&&this.confirmedDialog.signalingStateTransition(e.body),a}progress(e={statusCode:180}){if(!this.progressable)throw new Ae(`${this.message.method} not progressable in state ${this.transaction.state}.`);if(!this.earlyDialog){let a=this.transaction;if(!(a instanceof se))throw new Error("Transaction not instance of InviteClientTransaction.");let d=ke.initialDialogStateForUserAgentServer(this.message,this.toTag,!0);this.earlyDialog=new st(a,this.core,d)}let t=this.message.getHeaders("record-route").map(a=>`Record-Route: ${a}`),r=`Contact: ${this.core.configuration.contact}`;e.extraHeaders=e.extraHeaders||[],e.extraHeaders=e.extraHeaders.concat(t),e.extraHeaders.push(r);let i=super.progress(e),s=this.earlyDialog,o=Object.assign(Object.assign({},i),{session:s});return e.body&&this.earlyDialog.signalingState!==b.Stable&&this.earlyDialog.signalingStateTransition(e.body),o}redirect(e,t={statusCode:302}){return super.redirect(e,t)}reject(e={statusCode:486}){return super.reject(e)}};var Fr=class extends G{constructor(e,t,r){super(Y,e,t,r)}};var Ur=class extends G{constructor(e,t,r){super(Y,e,t,r)}};var Br=class extends te{constructor(e,t,r){super(Z,e,t,r),this.core=e}};var jr=class extends G{constructor(e,t,r){let i=e.createOutgoingRequestMessage(I.SUBSCRIBE,r);super(Y,e.userAgentCore,i,t),this.dialog=e}waitNotifyStop(){}receiveResponse(e){if(e.statusCode&&e.statusCode>=200&&e.statusCode<300){let t=e.getHeader("Expires");if(!t)this.logger.warn("Expires header missing in a 200-class response to SUBSCRIBE");else{let r=Number(t);this.dialog.subscriptionExpires>r&&(this.dialog.subscriptionExpires=r)}}e.statusCode&&e.statusCode>=400&&e.statusCode<700&&[404,405,410,416,480,481,482,483,484,485,489,501,604].includes(e.statusCode)&&this.dialog.terminate(),super.receiveResponse(e)}};var Kt=class extends ke{constructor(e,t,r,i,s,o){super(i,s),this.delegate=o,this._autoRefresh=!1,this._subscriptionEvent=e,this._subscriptionExpires=t,this._subscriptionExpiresInitial=t,this._subscriptionExpiresLastSet=Math.floor(Date.now()/1e3),this._subscriptionRefresh=void 0,this._subscriptionRefreshLastSet=void 0,this._subscriptionState=r,this.logger=i.loggerFactory.getLogger("sip.subscribe-dialog"),this.logger.log(`SUBSCRIBE dialog ${this.id} constructed`)}static initialDialogStateForSubscription(e,t){let i=t.getHeaders("record-route"),s=t.parseHeader("contact");if(!s)throw new Error("Contact undefined.");if(!(s instanceof ee))throw new Error("Contact not instance of NameAddrHeader.");let o=s.uri,a=e.cseq,d=void 0,h=e.callId,l=e.fromTag,u=t.fromTag;if(!h)throw new Error("Call id undefined.");if(!l)throw new Error("From tag undefined.");if(!u)throw new Error("To tag undefined.");if(!e.from)throw new Error("From undefined.");if(!e.to)throw new Error("To undefined.");let T=e.from.uri,A=e.to.uri,_=!1;return{id:h+l+u,early:_,callId:h,localTag:l,remoteTag:u,localSequenceNumber:a,remoteSequenceNumber:d,localURI:T,remoteURI:A,remoteTarget:o,routeSet:i,secure:!1}}dispose(){super.dispose(),this.N&&(clearTimeout(this.N),this.N=void 0),this.refreshTimerClear(),this.logger.log(`SUBSCRIBE dialog ${this.id} destroyed`)}get autoRefresh(){return this._autoRefresh}set autoRefresh(e){this._autoRefresh=!0,this.refreshTimerSet()}get subscriptionEvent(){return this._subscriptionEvent}get subscriptionExpires(){let e=Math.floor(Date.now()/1e3)-this._subscriptionExpiresLastSet,t=this._subscriptionExpires-e;return Math.max(t,0)}set subscriptionExpires(e){if(e<0)throw new Error("Expires must be greater than or equal to zero.");if(this._subscriptionExpires=e,this._subscriptionExpiresLastSet=Math.floor(Date.now()/1e3),this.autoRefresh){let t=this.subscriptionRefresh;(t===void 0||t>=e)&&this.refreshTimerSet()}}get subscriptionExpiresInitial(){return this._subscriptionExpiresInitial}get subscriptionRefresh(){if(this._subscriptionRefresh===void 0||this._subscriptionRefreshLastSet===void 0)return;let e=Math.floor(Date.now()/1e3)-this._subscriptionRefreshLastSet,t=this._subscriptionRefresh-e;return Math.max(t,0)}get subscriptionState(){return this._subscriptionState}receiveRequest(e){if(this.logger.log(`SUBSCRIBE dialog ${this.id} received ${e.method} request`),!this.sequenceGuard(e)){this.logger.log(`SUBSCRIBE dialog ${this.id} rejected out of order ${e.method} request.`);return}switch(super.receiveRequest(e),e.method){case I.NOTIFY:this.onNotify(e);break;default:this.logger.log(`SUBSCRIBE dialog ${this.id} received unimplemented ${e.method} request`),this.core.replyStateless(e,{statusCode:501});break}}refresh(){let e="Allow: "+Oe.toString(),t={};return t.extraHeaders=(t.extraHeaders||[]).slice(),t.extraHeaders.push(e),t.extraHeaders.push("Event: "+this.subscriptionEvent),t.extraHeaders.push("Expires: "+this.subscriptionExpiresInitial),t.extraHeaders.push("Contact: "+this.core.configuration.contact.toString()),this.subscribe(void 0,t)}subscribe(e,t={}){var r;if(this.subscriptionState!==j.Pending&&this.subscriptionState!==j.Active)throw new Error(`Invalid state ${this.subscriptionState}. May only re-subscribe while in state "pending" or "active".`);this.logger.log(`SUBSCRIBE dialog ${this.id} sending SUBSCRIBE request`);let i=new jr(this,e,t);return this.N&&(clearTimeout(this.N),this.N=void 0),!((r=t.extraHeaders)===null||r===void 0)&&r.includes("Expires: 0")||(this.N=setTimeout(()=>this.timerN(),J.TIMER_N)),i}terminate(){this.stateTransition(j.Terminated),this.onTerminated()}unsubscribe(){let e="Allow: "+Oe.toString(),t={};return t.extraHeaders=(t.extraHeaders||[]).slice(),t.extraHeaders.push(e),t.extraHeaders.push("Event: "+this.subscriptionEvent),t.extraHeaders.push("Expires: 0"),t.extraHeaders.push("Contact: "+this.core.configuration.contact.toString()),this.subscribe(void 0,t)}onNotify(e){let t=e.parseHeader("Event").event;if(!t||t!==this.subscriptionEvent){this.core.replyStateless(e,{statusCode:489});return}this.N&&(clearTimeout(this.N),this.N=void 0);let r=e.parseHeader("Subscription-State");if(!r||!r.state){this.core.replyStateless(e,{statusCode:489});return}let i=r.state,s=r.expires?Math.max(r.expires,0):void 0;switch(i){case"pending":this.stateTransition(j.Pending,s);break;case"active":this.stateTransition(j.Active,s);break;case"terminated":this.stateTransition(j.Terminated,s);break;default:this.logger.warn("Unrecognized subscription state.");break}let o=new Ve(this,e);this.delegate&&this.delegate.onNotify?this.delegate.onNotify(o):o.accept()}onRefresh(e){this.delegate&&this.delegate.onRefresh&&this.delegate.onRefresh(e)}onTerminated(){this.delegate&&this.delegate.onTerminated&&this.delegate.onTerminated()}refreshTimerClear(){this.refreshTimer&&(clearTimeout(this.refreshTimer),this.refreshTimer=void 0)}refreshTimerSet(){if(this.refreshTimerClear(),this.autoRefresh&&this.subscriptionExpires>0){let e=this.subscriptionExpires*900;this._subscriptionRefresh=Math.floor(e/1e3),this._subscriptionRefreshLastSet=Math.floor(Date.now()/1e3),this.refreshTimer=setTimeout(()=>{this.refreshTimer=void 0,this._subscriptionRefresh=void 0,this._subscriptionRefreshLastSet=void 0,this.onRefresh(this.refresh())},e)}}stateTransition(e,t){let r=()=>{this.logger.warn(`Invalid subscription state transition from ${this.subscriptionState} to ${e}`)};switch(e){case j.Initial:r();return;case j.NotifyWait:r();return;case j.Pending:if(this.subscriptionState!==j.NotifyWait&&this.subscriptionState!==j.Pending){r();return}break;case j.Active:if(this.subscriptionState!==j.NotifyWait&&this.subscriptionState!==j.Pending&&this.subscriptionState!==j.Active){r();return}break;case j.Terminated:if(this.subscriptionState!==j.NotifyWait&&this.subscriptionState!==j.Pending&&this.subscriptionState!==j.Active){r();return}break;default:r();return}e===j.Pending&&t&&(this.subscriptionExpires=t),e===j.Active&&t&&(this.subscriptionExpires=t),e===j.Terminated&&this.dispose(),this._subscriptionState=e}timerN(){this.logger.warn("Timer N expired for SUBSCRIBE dialog. Timed out waiting for NOTIFY."),this.subscriptionState!==j.Terminated&&(this.stateTransition(j.Terminated),this.onTerminated())}};var Kr=class extends G{constructor(e,t,r){let i=t.getHeader("Event");if(!i)throw new Error("Event undefined");let s=t.getHeader("Expires");if(!s)throw new Error("Expires undefined");super(Y,e,t,r),this.delegate=r,this.subscriberId=t.callId+t.fromTag+i,this.subscriptionExpiresRequested=this.subscriptionExpires=Number(s),this.subscriptionEvent=i,this.subscriptionState=j.NotifyWait,this.waitNotifyStart()}dispose(){super.dispose()}onNotify(e){let t=e.message.parseHeader("Event").event;if(!t||t!==this.subscriptionEvent){this.logger.warn("Failed to parse event."),e.reject({statusCode:489});return}let r=e.message.parseHeader("Subscription-State");if(!r||!r.state){this.logger.warn("Failed to parse subscription state."),e.reject({statusCode:489});return}let i=r.state;switch(i){case"pending":break;case"active":break;case"terminated":break;default:this.logger.warn(`Invalid subscription state ${i}`),e.reject({statusCode:489});return}if(i!=="terminated"&&!e.message.parseHeader("contact")){this.logger.warn("Failed to parse contact."),e.reject({statusCode:489});return}if(this.dialog)throw new Error("Dialog already created. This implementation only supports install of single subscriptions.");switch(this.waitNotifyStop(),this.subscriptionExpires=r.expires?Math.min(this.subscriptionExpires,Math.max(r.expires,0)):this.subscriptionExpires,i){case"pending":this.subscriptionState=j.Pending;break;case"active":this.subscriptionState=j.Active;break;case"terminated":this.subscriptionState=j.Terminated;break;default:throw new Error(`Unrecognized state ${i}.`)}if(this.subscriptionState!==j.Terminated){let s=Kt.initialDialogStateForSubscription(this.message,e.message);this.dialog=new Kt(this.subscriptionEvent,this.subscriptionExpires,this.subscriptionState,this.core,s)}if(this.delegate&&this.delegate.onNotify){let s=e,o=this.dialog;this.delegate.onNotify({request:s,subscription:o})}else e.accept()}waitNotifyStart(){this.N||(this.core.subscribers.set(this.subscriberId,this),this.N=setTimeout(()=>this.timerN(),J.TIMER_N))}waitNotifyStop(){this.N&&(this.core.subscribers.delete(this.subscriberId),clearTimeout(this.N),this.N=void 0)}receiveResponse(e){if(this.authenticationGuard(e)){if(e.statusCode&&e.statusCode>=200&&e.statusCode<300){let t=e.getHeader("Expires");if(!t)this.logger.warn("Expires header missing in a 200-class response to SUBSCRIBE");else{let r=Number(t);r>this.subscriptionExpiresRequested&&this.logger.warn("Expires header in a 200-class response to SUBSCRIBE with a higher value than the one in the request"),r<this.subscriptionExpires&&(this.subscriptionExpires=r)}this.dialog&&this.dialog.subscriptionExpires>this.subscriptionExpires&&(this.dialog.subscriptionExpires=this.subscriptionExpires)}e.statusCode&&e.statusCode>=300&&e.statusCode<700&&this.waitNotifyStop(),super.receiveResponse(e)}}timerN(){this.logger.warn("Timer N expired for SUBSCRIBE user agent client. Timed out waiting for NOTIFY."),this.waitNotifyStop(),this.delegate&&this.delegate.onNotifyTimeout&&this.delegate.onNotifyTimeout()}};var Gr=class extends te{constructor(e,t,r){super(Z,e,t,r),this.core=e}};var jn=["application/sdp","application/dtmf-relay"],Vr=class{constructor(e,t={}){this.userAgentClients=new Map,this.userAgentServers=new Map,this.configuration=e,this.delegate=t,this.dialogs=new Map,this.subscribers=new Map,this.logger=e.loggerFactory.getLogger("sip.user-agent-core")}dispose(){this.reset()}reset(){this.dialogs.forEach(e=>e.dispose()),this.dialogs.clear(),this.subscribers.forEach(e=>e.dispose()),this.subscribers.clear(),this.userAgentClients.forEach(e=>e.dispose()),this.userAgentClients.clear(),this.userAgentServers.forEach(e=>e.dispose()),this.userAgentServers.clear()}get loggerFactory(){return this.configuration.loggerFactory}get transport(){let e=this.configuration.transportAccessor();if(!e)throw new Error("Transport undefined.");return e}invite(e,t){return new Mr(this,e,t)}message(e,t){return new At(this,e,t)}publish(e,t){return new Fr(this,e,t)}register(e,t){return new Ur(this,e,t)}subscribe(e,t){return new Kr(this,e,t)}request(e,t){return new G(Y,this,e,t)}makeOutgoingRequestMessage(e,t,r,i,s,o,a){let d=this.configuration.sipjsId,h=this.configuration.displayName,l=this.configuration.viaForceRport,u=this.configuration.hackViaTcp,T=this.configuration.supportedOptionTags.slice();e===I.REGISTER&&T.push("path","gruu"),e===I.INVITE&&(this.configuration.contact.pubGruu||this.configuration.contact.tempGruu)&&T.push("gruu");let A=this.configuration.routeSet,_=this.configuration.userAgentHeaderFieldValue,$=this.configuration.viaHost,P=Object.assign(Object.assign({},{callIdPrefix:d,forceRport:l,fromDisplayName:h,hackViaTcp:u,optionTags:T,routeSet:A,userAgentString:_,viaHost:$}),s);return new Ne(e,t,r,i,P,o,a)}receiveIncomingRequestFromTransport(e){this.receiveRequestFromTransport(e)}receiveIncomingResponseFromTransport(e){this.receiveResponseFromTransport(e)}replyStateless(e,t){let r=this.configuration.userAgentHeaderFieldValue,i=this.configuration.supportedOptionTagsResponse;t=Object.assign(Object.assign({},t),{userAgent:r,supported:i});let s=Ar(e,t);return this.transport.send(s.message).catch(o=>{o instanceof Error&&this.logger.error(o.message),this.logger.error(`Transport error occurred sending stateless reply to ${e.method} request.`)}),s}receiveRequestFromTransport(e){let t=e.viaBranch,r=this.userAgentServers.get(t);if(e.method===I.ACK&&r&&r.transaction.state===p.Accepted&&r instanceof Dt){this.logger.warn(`Discarding out of dialog ACK after 2xx response sent on transaction ${t}.`);return}if(e.method===I.CANCEL){r?(this.replyStateless(e,{statusCode:200}),r.transaction instanceof se&&r.transaction.state===p.Proceeding&&r instanceof Dt&&r.receiveCancel(e)):this.replyStateless(e,{statusCode:481});return}if(r){r.transaction.receiveRequest(e);return}this.receiveRequest(e)}receiveRequest(e){if(!Oe.includes(e.method)){let i="Allow: "+Oe.toString();this.replyStateless(e,{statusCode:405,extraHeaders:[i]});return}if(!e.ruri)throw new Error("Request-URI undefined.");if(e.ruri.scheme!=="sip"){this.replyStateless(e,{statusCode:416});return}let t=e.ruri,r=i=>!!i&&i.user===t.user;if(!r(this.configuration.aor)&&!(r(this.configuration.contact.uri)||r(this.configuration.contact.pubGruu)||r(this.configuration.contact.tempGruu))){this.logger.warn("Request-URI does not point to us."),e.method!==I.ACK&&this.replyStateless(e,{statusCode:404});return}if(e.method===I.INVITE&&!e.hasHeader("Contact")){this.replyStateless(e,{statusCode:400,reasonPhrase:"Missing Contact Header"});return}if(!e.toTag){let i=e.viaBranch;if(!this.userAgentServers.has(i)&&Array.from(this.userAgentServers.values()).some(o=>o.transaction.request.fromTag===e.fromTag&&o.transaction.request.callId===e.callId&&o.transaction.request.cseq===e.cseq)){this.replyStateless(e,{statusCode:482});return}}e.toTag?this.receiveInsideDialogRequest(e):this.receiveOutsideDialogRequest(e)}receiveInsideDialogRequest(e){if(e.method===I.NOTIFY){let i=e.parseHeader("Event");if(!i||!i.event){this.replyStateless(e,{statusCode:489});return}let s=e.callId+e.toTag+i.event,o=this.subscribers.get(s);if(o){let a=new Ve(this,e);o.onNotify(a);return}}let t=e.callId+e.toTag+e.fromTag,r=this.dialogs.get(t);if(r){if(e.method===I.OPTIONS){let i="Allow: "+Oe.toString(),s="Accept: "+jn.toString();this.replyStateless(e,{statusCode:200,extraHeaders:[i,s]});return}r.receiveRequest(e);return}e.method!==I.ACK&&this.replyStateless(e,{statusCode:481})}receiveOutsideDialogRequest(e){switch(e.method){case I.ACK:break;case I.BYE:this.replyStateless(e,{statusCode:481});break;case I.CANCEL:throw new Error(`Unexpected out of dialog request method ${e.method}.`);case I.INFO:this.replyStateless(e,{statusCode:405});break;case I.INVITE:{let t=new Dt(this,e);this.delegate.onInvite?this.delegate.onInvite(t):t.reject()}break;case I.MESSAGE:{let t=new _t(this,e);this.delegate.onMessage?this.delegate.onMessage(t):t.accept()}break;case I.NOTIFY:{let t=new Ve(this,e);this.delegate.onNotify?this.delegate.onNotify(t):t.reject({statusCode:405})}break;case I.OPTIONS:{let t="Allow: "+Oe.toString(),r="Accept: "+jn.toString();this.replyStateless(e,{statusCode:200,extraHeaders:[t,r]})}break;case I.REFER:{let t=new $t(this,e);this.delegate.onRefer?this.delegate.onRefer(t):t.reject({statusCode:405})}break;case I.REGISTER:{let t=new Br(this,e);this.delegate.onRegister?this.delegate.onRegister(t):t.reject({statusCode:405})}break;case I.SUBSCRIBE:{let t=new Gr(this,e);this.delegate.onSubscribe?this.delegate.onSubscribe(t):t.reject({statusCode:480})}break;default:throw new Error(`Unexpected out of dialog request method ${e.method}.`)}}receiveResponseFromTransport(e){if(e.getHeaders("via").length>1){this.logger.warn("More than one Via header field present in the response, dropping");return}let t=e.viaBranch+e.method,r=this.userAgentClients.get(t);r?r.transaction.receiveResponse(e):this.logger.warn(`Discarding unmatched ${e.statusCode} response to ${e.method} ${t}.`)}};function qi(){return n=>!n.audio&&!n.video?Promise.resolve(new MediaStream):navigator.mediaDevices===void 0?Promise.reject(new Error("Media devices not available in insecure contexts.")):navigator.mediaDevices.getUserMedia.call(navigator.mediaDevices,n)}function Li(){return{bundlePolicy:"balanced",certificates:void 0,iceCandidatePoolSize:0,iceServers:[{urls:"stun:stun.l.google.com:19302"}],iceTransportPolicy:"all",rtcpMuxPolicy:"require"}}var re=class{constructor(e,t,r){e.debug("SessionDescriptionHandler.constructor"),this.logger=e,this.mediaStreamFactory=t,this.sessionDescriptionHandlerConfiguration=r,this._localMediaStream=new MediaStream,this._remoteMediaStream=new MediaStream,this._peerConnection=new RTCPeerConnection(r?.peerConnectionConfiguration),this.initPeerConnectionEventHandlers()}get localMediaStream(){return this._localMediaStream}get remoteMediaStream(){return this._remoteMediaStream}get dataChannel(){return this._dataChannel}get peerConnection(){return this._peerConnection}get peerConnectionDelegate(){return this._peerConnectionDelegate}set peerConnectionDelegate(e){this._peerConnectionDelegate=e}static dispatchAddTrackEvent(e,t){e.dispatchEvent(new MediaStreamTrackEvent("addtrack",{track:t}))}static dispatchRemoveTrackEvent(e,t){e.dispatchEvent(new MediaStreamTrackEvent("removetrack",{track:t}))}close(){this.logger.debug("SessionDescriptionHandler.close"),this._peerConnection!==void 0&&(this._peerConnection.getReceivers().forEach(e=>{e.track&&e.track.stop()}),this._peerConnection.getSenders().forEach(e=>{e.track&&e.track.stop()}),this._dataChannel&&this._dataChannel.close(),this._peerConnection.close(),this._peerConnection=void 0)}enableReceiverTracks(e){let t=this.peerConnection;if(!t)throw new Error("Peer connection closed.");t.getReceivers().forEach(r=>{r.track&&(r.track.enabled=e)})}enableSenderTracks(e){let t=this.peerConnection;if(!t)throw new Error("Peer connection closed.");t.getSenders().forEach(r=>{r.track&&(r.track.enabled=e)})}getDescription(e,t){var r,i;if(this.logger.debug("SessionDescriptionHandler.getDescription"),this._peerConnection===void 0)return Promise.reject(new Error("Peer connection closed."));this.onDataChannel=e?.onDataChannel;let s=(r=e?.offerOptions)===null||r===void 0?void 0:r.iceRestart,o=e?.iceGatheringTimeout===void 0?(i=this.sessionDescriptionHandlerConfiguration)===null||i===void 0?void 0:i.iceGatheringTimeout:e?.iceGatheringTimeout;return this.getLocalMediaStream(e).then(()=>this.updateDirection(e)).then(()=>this.createDataChannel(e)).then(()=>this.createLocalOfferOrAnswer(e)).then(a=>this.applyModifiers(a,t)).then(a=>this.setLocalSessionDescription(a)).then(()=>this.waitForIceGatheringComplete(s,o)).then(()=>this.getLocalSessionDescription()).then(a=>({body:a.sdp,contentType:"application/sdp"})).catch(a=>{throw this.logger.error("SessionDescriptionHandler.getDescription failed - "+a),a})}hasDescription(e){return this.logger.debug("SessionDescriptionHandler.hasDescription"),e==="application/sdp"}iceGatheringComplete(){this.logger.debug("SessionDescriptionHandler.iceGatheringComplete"),this.iceGatheringCompleteTimeoutId!==void 0&&(this.logger.debug("SessionDescriptionHandler.iceGatheringComplete - clearing timeout"),clearTimeout(this.iceGatheringCompleteTimeoutId),this.iceGatheringCompleteTimeoutId=void 0),this.iceGatheringCompletePromise!==void 0&&(this.logger.debug("SessionDescriptionHandler.iceGatheringComplete - resolving promise"),this.iceGatheringCompleteResolve&&this.iceGatheringCompleteResolve(),this.iceGatheringCompletePromise=void 0,this.iceGatheringCompleteResolve=void 0,this.iceGatheringCompleteReject=void 0)}sendDtmf(e,t){if(this.logger.debug("SessionDescriptionHandler.sendDtmf"),this._peerConnection===void 0)return this.logger.error("SessionDescriptionHandler.sendDtmf failed - peer connection closed"),!1;let r=this._peerConnection.getSenders();if(r.length===0)return this.logger.error("SessionDescriptionHandler.sendDtmf failed - no senders"),!1;let i=r[0].dtmf;if(!i)return this.logger.error("SessionDescriptionHandler.sendDtmf failed - no DTMF sender"),!1;let s=t?.duration,o=t?.interToneGap;try{i.insertDTMF(e,s,o)}catch(a){return this.logger.error(a.toString()),!1}return this.logger.log("SessionDescriptionHandler.sendDtmf sent via RTP: "+e.toString()),!0}setDescription(e,t,r){if(this.logger.debug("SessionDescriptionHandler.setDescription"),this._peerConnection===void 0)return Promise.reject(new Error("Peer connection closed."));this.onDataChannel=t?.onDataChannel;let i=this._peerConnection.signalingState==="have-local-offer"?"answer":"offer";return this.getLocalMediaStream(t).then(()=>this.applyModifiers({sdp:e,type:i},r)).then(s=>this.setRemoteSessionDescription(s)).catch(s=>{throw this.logger.error("SessionDescriptionHandler.setDescription failed - "+s),s})}applyModifiers(e,t){return this.logger.debug("SessionDescriptionHandler.applyModifiers"),!t||t.length===0?Promise.resolve(e):t.reduce((r,i)=>r.then(i),Promise.resolve(e)).then(r=>{if(this.logger.debug("SessionDescriptionHandler.applyModifiers - modified sdp"),!r.sdp||!r.type)throw new Error("Invalid SDP.");return{sdp:r.sdp,type:r.type}})}createDataChannel(e){if(this._peerConnection===void 0)return Promise.reject(new Error("Peer connection closed."));if(e?.dataChannel!==!0||this._dataChannel)return Promise.resolve();switch(this._peerConnection.signalingState){case"stable":this.logger.debug("SessionDescriptionHandler.createDataChannel - creating data channel");try{return this._dataChannel=this._peerConnection.createDataChannel(e?.dataChannelLabel||"",e?.dataChannelOptions),this.onDataChannel&&this.onDataChannel(this._dataChannel),Promise.resolve()}catch(t){return Promise.reject(t)}case"have-remote-offer":return Promise.resolve();case"have-local-offer":case"have-local-pranswer":case"have-remote-pranswer":case"closed":default:return Promise.reject(new Error("Invalid signaling state "+this._peerConnection.signalingState))}}createLocalOfferOrAnswer(e){if(this._peerConnection===void 0)return Promise.reject(new Error("Peer connection closed."));switch(this._peerConnection.signalingState){case"stable":return this.logger.debug("SessionDescriptionHandler.createLocalOfferOrAnswer - creating SDP offer"),this._peerConnection.createOffer(e?.offerOptions);case"have-remote-offer":return this.logger.debug("SessionDescriptionHandler.createLocalOfferOrAnswer - creating SDP answer"),this._peerConnection.createAnswer(e?.answerOptions);case"have-local-offer":case"have-local-pranswer":case"have-remote-pranswer":case"closed":default:return Promise.reject(new Error("Invalid signaling state "+this._peerConnection.signalingState))}}getLocalMediaStream(e){if(this.logger.debug("SessionDescriptionHandler.getLocalMediaStream"),this._peerConnection===void 0)return Promise.reject(new Error("Peer connection closed."));let t=Object.assign({},e?.constraints);if(this.localMediaStreamConstraints){if(t.audio=t.audio||this.localMediaStreamConstraints.audio,t.video=t.video||this.localMediaStreamConstraints.video,JSON.stringify(this.localMediaStreamConstraints.audio)===JSON.stringify(t.audio)&&JSON.stringify(this.localMediaStreamConstraints.video)===JSON.stringify(t.video))return Promise.resolve()}else t.audio===void 0&&t.video===void 0&&(t={audio:!0});return this.localMediaStreamConstraints=t,this.mediaStreamFactory(t,this,e).then(r=>this.setLocalMediaStream(r))}setLocalMediaStream(e){if(this.logger.debug("SessionDescriptionHandler.setLocalMediaStream"),!this._peerConnection)throw new Error("Peer connection undefined.");let t=this._peerConnection,r=this._localMediaStream,i=[],s=d=>{let h=d.kind;if(h!=="audio"&&h!=="video")throw new Error(`Unknown new track kind ${h}.`);let l=t.getSenders().find(u=>u.track&&u.track.kind===h);l?i.push(new Promise(u=>{this.logger.debug(`SessionDescriptionHandler.setLocalMediaStream - replacing sender ${h} track`),u()}).then(()=>l.replaceTrack(d).then(()=>{let u=r.getTracks().find(T=>T.kind===h);u&&(u.stop(),r.removeTrack(u),re.dispatchRemoveTrackEvent(r,u)),r.addTrack(d),re.dispatchAddTrackEvent(r,d)}).catch(u=>{throw this.logger.error(`SessionDescriptionHandler.setLocalMediaStream - failed to replace sender ${h} track`),u}))):i.push(new Promise(u=>{this.logger.debug(`SessionDescriptionHandler.setLocalMediaStream - adding sender ${h} track`),u()}).then(()=>{try{t.addTrack(d,r)}catch(u){throw this.logger.error(`SessionDescriptionHandler.setLocalMediaStream - failed to add sender ${h} track`),u}r.addTrack(d),re.dispatchAddTrackEvent(r,d)}))},o=e.getAudioTracks();o.length&&s(o[0]);let a=e.getVideoTracks();return a.length&&s(a[0]),i.reduce((d,h)=>d.then(()=>h),Promise.resolve())}getLocalSessionDescription(){if(this.logger.debug("SessionDescriptionHandler.getLocalSessionDescription"),this._peerConnection===void 0)return Promise.reject(new Error("Peer connection closed."));let e=this._peerConnection.localDescription;return e?Promise.resolve(e):Promise.reject(new Error("Failed to get local session description"))}setLocalSessionDescription(e){return this.logger.debug("SessionDescriptionHandler.setLocalSessionDescription"),this._peerConnection===void 0?Promise.reject(new Error("Peer connection closed.")):this._peerConnection.setLocalDescription(e)}setRemoteSessionDescription(e){if(this.logger.debug("SessionDescriptionHandler.setRemoteSessionDescription"),this._peerConnection===void 0)return Promise.reject(new Error("Peer connection closed."));let t=e.sdp,r;switch(this._peerConnection.signalingState){case"stable":r="offer";break;case"have-local-offer":r="answer";break;case"have-local-pranswer":case"have-remote-offer":case"have-remote-pranswer":case"closed":default:return Promise.reject(new Error("Invalid signaling state "+this._peerConnection.signalingState))}return t?this._peerConnection.setRemoteDescription({sdp:t,type:r}):(this.logger.error("SessionDescriptionHandler.setRemoteSessionDescription failed - cannot set null sdp"),Promise.reject(new Error("SDP is undefined")))}setRemoteTrack(e){this.logger.debug("SessionDescriptionHandler.setRemoteTrack");let t=this._remoteMediaStream;t.getTrackById(e.id)?this.logger.debug(`SessionDescriptionHandler.setRemoteTrack - have remote ${e.kind} track`):e.kind==="audio"?(this.logger.debug(`SessionDescriptionHandler.setRemoteTrack - adding remote ${e.kind} track`),t.getAudioTracks().forEach(r=>{r.stop(),t.removeTrack(r),re.dispatchRemoveTrackEvent(t,r)}),t.addTrack(e),re.dispatchAddTrackEvent(t,e)):e.kind==="video"&&(this.logger.debug(`SessionDescriptionHandler.setRemoteTrack - adding remote ${e.kind} track`),t.getVideoTracks().forEach(r=>{r.stop(),t.removeTrack(r),re.dispatchRemoveTrackEvent(t,r)}),t.addTrack(e),re.dispatchAddTrackEvent(t,e))}updateDirection(e){if(this._peerConnection===void 0)return Promise.reject(new Error("Peer connection closed."));switch(this._peerConnection.signalingState){case"stable":this.logger.debug("SessionDescriptionHandler.updateDirection - setting offer direction");{let t=r=>{switch(r){case"inactive":return e?.hold?"inactive":"recvonly";case"recvonly":return e?.hold?"inactive":"recvonly";case"sendonly":return e?.hold?"sendonly":"sendrecv";case"sendrecv":return e?.hold?"sendonly":"sendrecv";case"stopped":return"stopped";default:throw new Error("Should never happen")}};this._peerConnection.getTransceivers().forEach(r=>{if(r.direction){let i=t(r.direction);r.direction!==i&&(r.direction=i)}})}break;case"have-remote-offer":this.logger.debug("SessionDescriptionHandler.updateDirection - setting answer direction");{let t=(()=>{let i=this._peerConnection.remoteDescription;if(!i)throw new Error("Failed to read remote offer");let s=/a=sendrecv\r\n|a=sendonly\r\n|a=recvonly\r\n|a=inactive\r\n/.exec(i.sdp);if(s)switch(s[0]){case`a=inactive\r
43
+ `,this.send(h).catch(l=>{this.logTransportError(l,"Failed to send ACK to non-2xx response.")})}stateTransition(e,t=!1){let r=()=>{throw new Error(`Invalid state transition from ${this.state} to ${e}`)};switch(e){case p.Calling:r();break;case p.Proceeding:this.state!==p.Calling&&r();break;case p.Accepted:case p.Completed:this.state!==p.Calling&&this.state!==p.Proceeding&&r();break;case p.Terminated:this.state!==p.Calling&&this.state!==p.Accepted&&this.state!==p.Completed&&(t||r());break;default:r()}this.B&&(clearTimeout(this.B),this.B=void 0),p.Proceeding,e===p.Completed&&(this.D=setTimeout(()=>this.timerD(),J.TIMER_D)),e===p.Accepted&&(this.M=setTimeout(()=>this.timerM(),J.TIMER_M)),e===p.Terminated&&this.dispose(),this.setState(e)}timerA(){}timerB(){this.logger.debug(`Timer B expired for INVITE client transaction ${this.id}.`),this.state===p.Calling&&(this.onRequestTimeout(),this.stateTransition(p.Terminated))}timerD(){this.logger.debug(`Timer D expired for INVITE client transaction ${this.id}.`),this.state===p.Completed&&this.stateTransition(p.Terminated)}timerM(){this.logger.debug(`Timer M expired for INVITE client transaction ${this.id}.`),this.state===p.Accepted&&this.stateTransition(p.Terminated)}};var G=class{constructor(e,t,r,i){this.transactionConstructor=e,this.core=t,this.message=r,this.delegate=i,this.challenged=!1,this.stale=!1,this.logger=this.loggerFactory.getLogger("sip.user-agent-client"),this.init()}dispose(){this.transaction.dispose()}get loggerFactory(){return this.core.loggerFactory}get transaction(){if(!this._transaction)throw new Error("Transaction undefined.");return this._transaction}cancel(e,t={}){if(!this.transaction)throw new Error("Transaction undefined.");if(!this.message.to)throw new Error("To undefined.");if(!this.message.from)throw new Error("From undefined.");let r=this.core.makeOutgoingRequestMessage(I.CANCEL,this.message.ruri,this.message.from.uri,this.message.to.uri,{toTag:this.message.toTag,fromTag:this.message.fromTag,callId:this.message.callId,cseq:this.message.cseq},t.extraHeaders);return r.branch=this.message.branch,this.message.headers.Route&&(r.headers.Route=this.message.headers.Route),e&&r.setHeader("Reason",e),this.transaction.state===p.Proceeding?new G(Y,this.core,r):this.transaction.addStateChangeListener(()=>{this.transaction&&this.transaction.state===p.Proceeding&&new G(Y,this.core,r)},{once:!0}),r}authenticationGuard(e,t){let r=e.statusCode;if(!r)throw new Error("Response status code undefined.");if(r!==401&&r!==407)return!0;let i,s;if(r===401?(i=e.parseHeader("www-authenticate"),s="authorization"):(i=e.parseHeader("proxy-authenticate"),s="proxy-authorization"),!i)return this.logger.warn(r+" with wrong or missing challenge, cannot authenticate"),!0;if(this.challenged&&(this.stale||i.stale!==!0))return this.logger.warn(r+" apparently in authentication loop, cannot authenticate"),!0;if(!this.credentials&&(this.credentials=this.core.configuration.authenticationFactory(),!this.credentials))return this.logger.warn("Unable to obtain credentials, cannot authenticate"),!0;if(!this.credentials.authenticate(this.message,i))return!0;this.challenged=!0,i.stale&&(this.stale=!0);let o=this.message.cseq+=1;return t&&t.localSequenceNumber&&(t.incrementLocalSequenceNumber(),o=this.message.cseq=t.localSequenceNumber),this.message.setHeader("cseq",o+" "+this.message.method),this.message.setHeader(s,this.credentials.toString()),this.init(),!1}onRequestTimeout(){this.logger.warn("User agent client request timed out. Generating internal 408 Request Timeout.");let e=new me;e.statusCode=408,e.reasonPhrase="Request Timeout",this.receiveResponse(e)}onTransportError(e){this.logger.error(e.message),this.logger.error("User agent client request transport error. Generating internal 503 Service Unavailable.");let t=new me;t.statusCode=503,t.reasonPhrase="Service Unavailable",this.receiveResponse(t)}receiveResponse(e){if(!this.authenticationGuard(e))return;let t=e.statusCode?e.statusCode.toString():"";if(!t)throw new Error("Response status code undefined.");switch(!0){case/^100$/.test(t):this.delegate&&this.delegate.onTrying&&this.delegate.onTrying({message:e});break;case/^1[0-9]{2}$/.test(t):this.delegate&&this.delegate.onProgress&&this.delegate.onProgress({message:e});break;case/^2[0-9]{2}$/.test(t):this.delegate&&this.delegate.onAccept&&this.delegate.onAccept({message:e});break;case/^3[0-9]{2}$/.test(t):this.delegate&&this.delegate.onRedirect&&this.delegate.onRedirect({message:e});break;case/^[4-6][0-9]{2}$/.test(t):this.delegate&&this.delegate.onReject&&this.delegate.onReject({message:e});break;default:throw new Error(`Invalid status code ${t}`)}}init(){let e={loggerFactory:this.loggerFactory,onRequestTimeout:()=>this.onRequestTimeout(),onStateChange:i=>{i===p.Terminated&&(this.core.userAgentClients.delete(r),t===this._transaction&&this.dispose())},onTransportError:i=>this.onTransportError(i),receiveResponse:i=>this.receiveResponse(i)},t=new this.transactionConstructor(this.message,this.core.transport,e);this._transaction=t;let r=t.id+t.request.method;this.core.userAgentClients.set(r,this)}};var _r=class extends G{constructor(e,t,r){let i=e.createOutgoingRequestMessage(I.BYE,r);super(Y,e.userAgentCore,i,t),e.dispose()}};var Z=class extends xt{constructor(e,t,r){super(e,t,r,p.Trying,"sip.transaction.nist")}dispose(){this.J&&(clearTimeout(this.J),this.J=void 0),super.dispose()}get kind(){return"nist"}receiveRequest(e){switch(this.state){case p.Trying:break;case p.Proceeding:if(!this.lastResponse)throw new Error("Last response undefined.");this.send(this.lastResponse).catch(t=>{this.logTransportError(t,"Failed to send retransmission of provisional response.")});break;case p.Completed:if(!this.lastResponse)throw new Error("Last response undefined.");this.send(this.lastResponse).catch(t=>{this.logTransportError(t,"Failed to send retransmission of final response.")});break;case p.Terminated:break;default:throw new Error(`Invalid state ${this.state}`)}}receiveResponse(e,t){if(e<100||e>699)throw new Error(`Invalid status code ${e}`);if(e>100&&e<=199)throw new Error("Provisional response other than 100 not allowed.");switch(this.state){case p.Trying:if(this.lastResponse=t,e>=100&&e<200){this.stateTransition(p.Proceeding),this.send(t).catch(i=>{this.logTransportError(i,"Failed to send provisional response.")});return}if(e>=200&&e<=699){this.stateTransition(p.Completed),this.send(t).catch(i=>{this.logTransportError(i,"Failed to send final response.")});return}break;case p.Proceeding:if(this.lastResponse=t,e>=200&&e<=699){this.stateTransition(p.Completed),this.send(t).catch(i=>{this.logTransportError(i,"Failed to send final response.")});return}break;case p.Completed:return;case p.Terminated:break;default:throw new Error(`Invalid state ${this.state}`)}let r=`Non-INVITE server transaction received unexpected ${e} response from TU while in state ${this.state}.`;throw this.logger.error(r),new Error(r)}onTransportError(e){this.user.onTransportError&&this.user.onTransportError(e),this.stateTransition(p.Terminated,!0)}typeToString(){return"non-INVITE server transaction"}stateTransition(e,t=!1){let r=()=>{throw new Error(`Invalid state transition from ${this.state} to ${e}`)};switch(e){case p.Trying:r();break;case p.Proceeding:this.state!==p.Trying&&r();break;case p.Completed:this.state!==p.Trying&&this.state!==p.Proceeding&&r();break;case p.Terminated:this.state!==p.Proceeding&&this.state!==p.Completed&&(t||r());break;default:r()}e===p.Completed&&(this.J=setTimeout(()=>this.timerJ(),J.TIMER_J)),e===p.Terminated&&this.dispose(),this.setState(e)}timerJ(){this.logger.debug(`Timer J expired for NON-INVITE server transaction ${this.id}.`),this.state===p.Completed&&this.stateTransition(p.Terminated)}};var te=class{constructor(e,t,r,i){this.transactionConstructor=e,this.core=t,this.message=r,this.delegate=i,this.logger=this.loggerFactory.getLogger("sip.user-agent-server"),this.toTag=r.toTag?r.toTag:Xe(),this.init()}dispose(){this.transaction.dispose()}get loggerFactory(){return this.core.loggerFactory}get transaction(){if(!this._transaction)throw new Error("Transaction undefined.");return this._transaction}accept(e={statusCode:200}){if(!this.acceptable)throw new Ae(`${this.message.method} not acceptable in state ${this.transaction.state}.`);let t=e.statusCode;if(t<200||t>299)throw new TypeError(`Invalid statusCode: ${t}`);return this.reply(e)}progress(e={statusCode:180}){if(!this.progressable)throw new Ae(`${this.message.method} not progressable in state ${this.transaction.state}.`);let t=e.statusCode;if(t<101||t>199)throw new TypeError(`Invalid statusCode: ${t}`);return this.reply(e)}redirect(e,t={statusCode:302}){if(!this.redirectable)throw new Ae(`${this.message.method} not redirectable in state ${this.transaction.state}.`);let r=t.statusCode;if(r<300||r>399)throw new TypeError(`Invalid statusCode: ${r}`);let i=new Array;return e.forEach(o=>i.push(`Contact: ${o.toString()}`)),t.extraHeaders=(t.extraHeaders||[]).concat(i),this.reply(t)}reject(e={statusCode:480}){if(!this.rejectable)throw new Ae(`${this.message.method} not rejectable in state ${this.transaction.state}.`);let t=e.statusCode;if(t<400||t>699)throw new TypeError(`Invalid statusCode: ${t}`);return this.reply(e)}trying(e){if(!this.tryingable)throw new Ae(`${this.message.method} not tryingable in state ${this.transaction.state}.`);return this.reply({statusCode:100})}receiveCancel(e){this.delegate&&this.delegate.onCancel&&this.delegate.onCancel(e)}get acceptable(){if(this.transaction instanceof se)return this.transaction.state===p.Proceeding||this.transaction.state===p.Accepted;if(this.transaction instanceof Z)return this.transaction.state===p.Trying||this.transaction.state===p.Proceeding;throw new Error("Unknown transaction type.")}get progressable(){if(this.transaction instanceof se)return this.transaction.state===p.Proceeding;if(this.transaction instanceof Z)return!1;throw new Error("Unknown transaction type.")}get redirectable(){if(this.transaction instanceof se)return this.transaction.state===p.Proceeding;if(this.transaction instanceof Z)return this.transaction.state===p.Trying||this.transaction.state===p.Proceeding;throw new Error("Unknown transaction type.")}get rejectable(){if(this.transaction instanceof se)return this.transaction.state===p.Proceeding;if(this.transaction instanceof Z)return this.transaction.state===p.Trying||this.transaction.state===p.Proceeding;throw new Error("Unknown transaction type.")}get tryingable(){if(this.transaction instanceof se)return this.transaction.state===p.Proceeding;if(this.transaction instanceof Z)return this.transaction.state===p.Trying;throw new Error("Unknown transaction type.")}reply(e){!e.toTag&&e.statusCode!==100&&(e.toTag=this.toTag),e.userAgent=e.userAgent||this.core.configuration.userAgentHeaderFieldValue,e.supported=e.supported||this.core.configuration.supportedOptionTagsResponse;let t=Ar(this.message,e);return this.transaction.receiveResponse(e.statusCode,t.message),t}init(){let e={loggerFactory:this.loggerFactory,onStateChange:i=>{i===p.Terminated&&(this.core.userAgentServers.delete(r),this.dispose())},onTransportError:i=>{this.logger.error(i.message),this.delegate&&this.delegate.onTransportError?this.delegate.onTransportError(i):this.logger.error("User agent server response transport error.")}},t=new this.transactionConstructor(this.message,this.core.transport,e);this._transaction=t;let r=t.id;this.core.userAgentServers.set(t.id,this)}};var $r=class extends te{constructor(e,t,r){super(Z,e.userAgentCore,t,r)}};var Dr=class extends G{constructor(e,t,r){let i=e.createOutgoingRequestMessage(I.INFO,r);super(Y,e.userAgentCore,i,t)}};var Pr=class extends te{constructor(e,t,r){super(Z,e.userAgentCore,t,r)}};var At=class extends G{constructor(e,t,r){super(Y,e,t,r)}};var _t=class extends te{constructor(e,t,r){super(Z,e,t,r)}};var Nr=class extends G{constructor(e,t,r){let i=e.createOutgoingRequestMessage(I.NOTIFY,r);super(Y,e.userAgentCore,i,t)}};function Ua(n){return n.userAgentCore!==void 0}var Ve=class extends te{constructor(e,t,r){let i=Ua(e)?e.userAgentCore:e;super(Z,i,t,r)}};var Or=class extends G{constructor(e,t,r){let i=e.createOutgoingRequestMessage(I.PRACK,r);super(Y,e.userAgentCore,i,t),e.signalingStateTransition(i)}};var kr=class extends te{constructor(e,t,r){super(Z,e.userAgentCore,t,r),e.signalingStateTransition(t),this.dialog=e}accept(e={statusCode:200}){return e.body&&this.dialog.signalingStateTransition(e.body),super.accept(e)}};var Hr=class extends G{constructor(e,t,r){let i=e.createOutgoingRequestMessage(I.INVITE,r);super(_e,e.userAgentCore,i,t),this.delegate=t,e.signalingStateTransition(i),e.reinviteUserAgentClient=this,this.dialog=e}receiveResponse(e){if(!this.authenticationGuard(e,this.dialog))return;let t=e.statusCode?e.statusCode.toString():"";if(!t)throw new Error("Response status code undefined.");switch(!0){case/^100$/.test(t):this.delegate&&this.delegate.onTrying&&this.delegate.onTrying({message:e});break;case/^1[0-9]{2}$/.test(t):this.delegate&&this.delegate.onProgress&&this.delegate.onProgress({message:e,session:this.dialog,prack:r=>{throw new Error("Unimplemented.")}});break;case/^2[0-9]{2}$/.test(t):this.dialog.signalingStateTransition(e),this.delegate&&this.delegate.onAccept&&this.delegate.onAccept({message:e,session:this.dialog,ack:r=>this.dialog.ack(r)});break;case/^3[0-9]{2}$/.test(t):this.dialog.signalingStateRollback(),this.dialog.reinviteUserAgentClient=void 0,this.delegate&&this.delegate.onRedirect&&this.delegate.onRedirect({message:e});break;case/^[4-6][0-9]{2}$/.test(t):this.dialog.signalingStateRollback(),this.dialog.reinviteUserAgentClient=void 0,this.delegate&&this.delegate.onReject&&this.delegate.onReject({message:e});break;default:throw new Error(`Invalid status code ${t}`)}}};var qr=class extends te{constructor(e,t,r){super(se,e.userAgentCore,t,r),e.reinviteUserAgentServer=this,this.dialog=e}accept(e={statusCode:200}){e.extraHeaders=e.extraHeaders||[],e.extraHeaders=e.extraHeaders.concat(this.dialog.routeSet.map(s=>`Record-Route: ${s}`));let t=super.accept(e),r=this.dialog,i=Object.assign(Object.assign({},t),{session:r});return e.body&&this.dialog.signalingStateTransition(e.body),this.dialog.reConfirm(),i}progress(e={statusCode:180}){let t=super.progress(e),r=this.dialog,i=Object.assign(Object.assign({},t),{session:r});return e.body&&this.dialog.signalingStateTransition(e.body),i}redirect(e,t={statusCode:302}){throw this.dialog.signalingStateRollback(),this.dialog.reinviteUserAgentServer=void 0,new Error("Unimplemented.")}reject(e={statusCode:488}){return this.dialog.signalingStateRollback(),this.dialog.reinviteUserAgentServer=void 0,super.reject(e)}};var Lr=class extends G{constructor(e,t,r){let i=e.createOutgoingRequestMessage(I.REFER,r);super(Y,e.userAgentCore,i,t)}};function Ba(n){return n.userAgentCore!==void 0}var $t=class extends te{constructor(e,t,r){let i=Ba(e)?e.userAgentCore:e;super(Z,i,t,r)}};var st=class extends ke{constructor(e,t,r,i){super(t,r),this.initialTransaction=e,this._signalingState=b.Initial,this.ackWait=!1,this.ackProcessing=!1,this.delegate=i,e instanceof se&&(this.ackWait=!0),this.early||this.start2xxRetransmissionTimer(),this.signalingStateTransition(e.request),this.logger=t.loggerFactory.getLogger("sip.invite-dialog"),this.logger.log(`INVITE dialog ${this.id} constructed`)}dispose(){super.dispose(),this._signalingState=b.Closed,this._offer=void 0,this._answer=void 0,this.invite2xxTimer&&(clearTimeout(this.invite2xxTimer),this.invite2xxTimer=void 0),this.logger.log(`INVITE dialog ${this.id} destroyed`)}get sessionState(){return this.early?we.Early:this.ackWait?we.AckWait:this._signalingState===b.Closed?we.Terminated:we.Confirmed}get signalingState(){return this._signalingState}get offer(){return this._offer}get answer(){return this._answer}confirm(){this.early&&this.start2xxRetransmissionTimer(),super.confirm()}reConfirm(){this.reinviteUserAgentServer&&this.startReInvite2xxRetransmissionTimer()}ack(e={}){this.logger.log(`INVITE dialog ${this.id} sending ACK request`);let t;if(this.reinviteUserAgentClient){if(!(this.reinviteUserAgentClient.transaction instanceof _e))throw new Error("Transaction not instance of InviteClientTransaction.");t=this.reinviteUserAgentClient.transaction,this.reinviteUserAgentClient=void 0}else{if(!(this.initialTransaction instanceof _e))throw new Error("Initial transaction not instance of InviteClientTransaction.");t=this.initialTransaction}let r=this.createOutgoingRequestMessage(I.ACK,{cseq:t.request.cseq,extraHeaders:e.extraHeaders,body:e.body});return t.ackResponse(r),this.signalingStateTransition(r),{message:r}}bye(e,t){if(this.logger.log(`INVITE dialog ${this.id} sending BYE request`),this.initialTransaction instanceof se){if(this.early)throw new Error("UAS MUST NOT send a BYE on early dialogs.");if(this.ackWait&&this.initialTransaction.state!==p.Terminated)throw new Error("UAS MUST NOT send a BYE on a confirmed dialog until it has received an ACK for its 2xx response or until the server transaction times out.")}return new _r(this,e,t)}info(e,t){if(this.logger.log(`INVITE dialog ${this.id} sending INFO request`),this.early)throw new Error("Dialog not confirmed.");return new Dr(this,e,t)}invite(e,t){if(this.logger.log(`INVITE dialog ${this.id} sending INVITE request`),this.early)throw new Error("Dialog not confirmed.");if(this.reinviteUserAgentClient)throw new Error("There is an ongoing re-INVITE client transaction.");if(this.reinviteUserAgentServer)throw new Error("There is an ongoing re-INVITE server transaction.");return new Hr(this,e,t)}message(e,t){if(this.logger.log(`INVITE dialog ${this.id} sending MESSAGE request`),this.early)throw new Error("Dialog not confirmed.");let r=this.createOutgoingRequestMessage(I.MESSAGE,t);return new At(this.core,r,e)}notify(e,t){if(this.logger.log(`INVITE dialog ${this.id} sending NOTIFY request`),this.early)throw new Error("Dialog not confirmed.");return new Nr(this,e,t)}prack(e,t){return this.logger.log(`INVITE dialog ${this.id} sending PRACK request`),new Or(this,e,t)}refer(e,t){if(this.logger.log(`INVITE dialog ${this.id} sending REFER request`),this.early)throw new Error("Dialog not confirmed.");return new Lr(this,e,t)}receiveRequest(e){if(this.logger.log(`INVITE dialog ${this.id} received ${e.method} request`),e.method===I.ACK){if(this.ackWait){if(this.initialTransaction instanceof _e){this.logger.warn(`INVITE dialog ${this.id} received unexpected ${e.method} request, dropping.`);return}if(this.initialTransaction.request.cseq!==e.cseq){this.logger.warn(`INVITE dialog ${this.id} received unexpected ${e.method} request, dropping.`);return}this.ackWait=!1}else{if(!this.reinviteUserAgentServer){this.logger.warn(`INVITE dialog ${this.id} received unexpected ${e.method} request, dropping.`);return}if(this.reinviteUserAgentServer.transaction.request.cseq!==e.cseq){this.logger.warn(`INVITE dialog ${this.id} received unexpected ${e.method} request, dropping.`);return}this.reinviteUserAgentServer=void 0}if(this.signalingStateTransition(e),this.delegate&&this.delegate.onAck){let t=this.delegate.onAck({message:e});t instanceof Promise&&(this.ackProcessing=!0,t.then(()=>this.ackProcessing=!1).catch(()=>this.ackProcessing=!1))}return}if(!this.sequenceGuard(e)){this.logger.log(`INVITE dialog ${this.id} rejected out of order ${e.method} request.`);return}if(super.receiveRequest(e),e.method===I.INVITE){let t=()=>{let s=this.ackWait?"waiting for initial ACK":"processing initial ACK";this.logger.warn(`INVITE dialog ${this.id} received re-INVITE while ${s}`);let o="RFC 5407 suggests the following to avoid this race condition... ";o+=" Note: Implementation issues are outside the scope of this document,",o+=" but the following tip is provided for avoiding race conditions of",o+=" this type. The caller can delay sending re-INVITE F6 for some period",o+=" of time (2 seconds, perhaps), after which the caller can reasonably",o+=" assume that its ACK has been received. Implementors can decouple the",o+=" actions of the user (e.g., pressing the hold button) from the actions",o+=" of the protocol (the sending of re-INVITE F6), so that the UA can",o+=" behave like this. In this case, it is the implementor's choice as to",o+=" how long to wait. In most cases, such an implementation may be",o+=" useful to prevent the type of race condition shown in this section.",o+=" This document expresses no preference about whether or not they",o+=" should wait for an ACK to be delivered. After considering the impact",o+=" on user experience, implementors should decide whether or not to wait",o+=" for a while, because the user experience depends on the",o+=" implementation and has no direct bearing on protocol behavior.",this.logger.warn(o)},i=[`Retry-After: ${Math.floor(Math.random()*10)+1}`];if(this.ackProcessing){this.core.replyStateless(e,{statusCode:500,extraHeaders:i}),t();return}if(this.ackWait&&this.signalingState!==b.Stable){this.core.replyStateless(e,{statusCode:500,extraHeaders:i}),t();return}if(this.reinviteUserAgentServer){this.core.replyStateless(e,{statusCode:500,extraHeaders:i});return}if(this.reinviteUserAgentClient){this.core.replyStateless(e,{statusCode:491});return}}if(e.method===I.INVITE){let t=e.parseHeader("contact");if(!t)throw new Error("Contact undefined.");if(!(t instanceof ee))throw new Error("Contact not instance of NameAddrHeader.");this.dialogState.remoteTarget=t.uri}switch(e.method){case I.BYE:{let t=new $r(this,e);this.delegate&&this.delegate.onBye?this.delegate.onBye(t):t.accept(),this.dispose()}break;case I.INFO:{let t=new Pr(this,e);this.delegate&&this.delegate.onInfo?this.delegate.onInfo(t):t.reject({statusCode:469,extraHeaders:["Recv-Info:"]})}break;case I.INVITE:{let t=new qr(this,e);this.signalingStateTransition(e),this.delegate&&this.delegate.onInvite?this.delegate.onInvite(t):t.reject({statusCode:488})}break;case I.MESSAGE:{let t=new _t(this.core,e);this.delegate&&this.delegate.onMessage?this.delegate.onMessage(t):t.accept()}break;case I.NOTIFY:{let t=new Ve(this,e);this.delegate&&this.delegate.onNotify?this.delegate.onNotify(t):t.accept()}break;case I.PRACK:{let t=new kr(this,e);this.delegate&&this.delegate.onPrack?this.delegate.onPrack(t):t.accept()}break;case I.REFER:{let t=new $t(this,e);this.delegate&&this.delegate.onRefer?this.delegate.onRefer(t):t.reject()}break;default:this.logger.log(`INVITE dialog ${this.id} received unimplemented ${e.method} request`),this.core.replyStateless(e,{statusCode:501});break}}reliableSequenceGuard(e){let t=e.statusCode;if(!t)throw new Error("Status code undefined");if(t>100&&t<200){let r=e.getHeader("require"),i=e.getHeader("rseq"),s=r&&r.includes("100rel")&&i?Number(i):void 0;if(s){if(this.rseq&&this.rseq+1!==s)return!1;this.rseq=this.rseq?this.rseq+1:s}}return!0}signalingStateRollback(){(this._signalingState===b.HaveLocalOffer||this.signalingState===b.HaveRemoteOffer)&&this._rollbackOffer&&this._rollbackAnswer&&(this._signalingState=b.Stable,this._offer=this._rollbackOffer,this._answer=this._rollbackAnswer)}signalingStateTransition(e){let t=et(e);if(!(!t||t.contentDisposition!=="session")){if(this._signalingState===b.Stable&&(this._rollbackOffer=this._offer,this._rollbackAnswer=this._answer),e instanceof Pe)switch(this._signalingState){case b.Initial:case b.Stable:this._signalingState=b.HaveRemoteOffer,this._offer=t,this._answer=void 0;break;case b.HaveLocalOffer:this._signalingState=b.Stable,this._answer=t;break;case b.HaveRemoteOffer:break;case b.Closed:break;default:throw new Error("Unexpected signaling state.")}if(e instanceof me)switch(this._signalingState){case b.Initial:case b.Stable:this._signalingState=b.HaveRemoteOffer,this._offer=t,this._answer=void 0;break;case b.HaveLocalOffer:this._signalingState=b.Stable,this._answer=t;break;case b.HaveRemoteOffer:break;case b.Closed:break;default:throw new Error("Unexpected signaling state.")}if(e instanceof Ne)switch(this._signalingState){case b.Initial:case b.Stable:this._signalingState=b.HaveLocalOffer,this._offer=t,this._answer=void 0;break;case b.HaveLocalOffer:break;case b.HaveRemoteOffer:this._signalingState=b.Stable,this._answer=t;break;case b.Closed:break;default:throw new Error("Unexpected signaling state.")}if(qi(e))switch(this._signalingState){case b.Initial:case b.Stable:this._signalingState=b.HaveLocalOffer,this._offer=t,this._answer=void 0;break;case b.HaveLocalOffer:break;case b.HaveRemoteOffer:this._signalingState=b.Stable,this._answer=t;break;case b.Closed:break;default:throw new Error("Unexpected signaling state.")}}}start2xxRetransmissionTimer(){if(this.initialTransaction instanceof se){let e=this.initialTransaction,t=J.T1,r=()=>{if(!this.ackWait){this.invite2xxTimer=void 0;return}this.logger.log("No ACK for 2xx response received, attempting retransmission"),e.retransmitAcceptedResponse(),t=Math.min(t*2,J.T2),this.invite2xxTimer=setTimeout(r,t)};this.invite2xxTimer=setTimeout(r,t);let i=()=>{e.state===p.Terminated&&(e.removeStateChangeListener(i),this.invite2xxTimer&&(clearTimeout(this.invite2xxTimer),this.invite2xxTimer=void 0),this.ackWait&&(this.delegate&&this.delegate.onAckTimeout?this.delegate.onAckTimeout():this.bye()))};e.addStateChangeListener(i)}}startReInvite2xxRetransmissionTimer(){if(this.reinviteUserAgentServer&&this.reinviteUserAgentServer.transaction instanceof se){let e=this.reinviteUserAgentServer.transaction,t=J.T1,r=()=>{if(!this.reinviteUserAgentServer){this.invite2xxTimer=void 0;return}this.logger.log("No ACK for 2xx response received, attempting retransmission"),e.retransmitAcceptedResponse(),t=Math.min(t*2,J.T2),this.invite2xxTimer=setTimeout(r,t)};this.invite2xxTimer=setTimeout(r,t);let i=()=>{e.state===p.Terminated&&(e.removeStateChangeListener(i),this.invite2xxTimer&&(clearTimeout(this.invite2xxTimer),this.invite2xxTimer=void 0),this.reinviteUserAgentServer)};e.addStateChangeListener(i)}}};var Mr=class extends G{constructor(e,t,r){super(_e,e,t,r),this.confirmedDialogAcks=new Map,this.confirmedDialogs=new Map,this.earlyDialogs=new Map,this.delegate=r}dispose(){this.earlyDialogs.forEach(e=>e.dispose()),this.earlyDialogs.clear(),super.dispose()}onTransportError(e){if(this.transaction.state===p.Calling)return super.onTransportError(e);this.logger.error(e.message),this.logger.error("User agent client request transport error while sending ACK.")}receiveResponse(e){if(!this.authenticationGuard(e))return;let t=e.statusCode?e.statusCode.toString():"";if(!t)throw new Error("Response status code undefined.");switch(!0){case/^100$/.test(t):this.delegate&&this.delegate.onTrying&&this.delegate.onTrying({message:e});return;case/^1[0-9]{2}$/.test(t):{if(!e.toTag){this.logger.warn("Non-100 1xx INVITE response received without a to tag, dropping.");return}if(!e.parseHeader("contact")){this.logger.error("Non-100 1xx INVITE response received without a Contact header field, dropping.");return}let i=ke.initialDialogStateForUserAgentClient(this.message,e),s=this.earlyDialogs.get(i.id);if(!s){let a=this.transaction;if(!(a instanceof _e))throw new Error("Transaction not instance of InviteClientTransaction.");s=new st(a,this.core,i),this.earlyDialogs.set(s.id,s)}if(!s.reliableSequenceGuard(e)){this.logger.warn("1xx INVITE reliable response received out of order or is a retransmission, dropping.");return}(s.signalingState===b.Initial||s.signalingState===b.HaveLocalOffer)&&s.signalingStateTransition(e);let o=s;this.delegate&&this.delegate.onProgress&&this.delegate.onProgress({message:e,session:o,prack:a=>o.prack(void 0,a)})}return;case/^2[0-9]{2}$/.test(t):{if(!e.toTag){this.logger.error("2xx INVITE response received without a to tag, dropping.");return}if(!e.parseHeader("contact")){this.logger.error("2xx INVITE response received without a Contact header field, dropping.");return}let i=ke.initialDialogStateForUserAgentClient(this.message,e),s=this.confirmedDialogs.get(i.id);if(s){let a=this.confirmedDialogAcks.get(i.id);if(a){let d=this.transaction;if(!(d instanceof _e))throw new Error("Client transaction not instance of InviteClientTransaction.");d.ackResponse(a.message)}return}if(s=this.earlyDialogs.get(i.id),s)s.confirm(),s.recomputeRouteSet(e),this.earlyDialogs.delete(s.id),this.confirmedDialogs.set(s.id,s);else{let a=this.transaction;if(!(a instanceof _e))throw new Error("Transaction not instance of InviteClientTransaction.");s=new st(a,this.core,i),this.confirmedDialogs.set(s.id,s)}(s.signalingState===b.Initial||s.signalingState===b.HaveLocalOffer)&&s.signalingStateTransition(e);let o=s;if(this.delegate&&this.delegate.onAccept)this.delegate.onAccept({message:e,session:o,ack:a=>{let d=o.ack(a);return this.confirmedDialogAcks.set(o.id,d),d}});else{let a=o.ack();this.confirmedDialogAcks.set(o.id,a)}}return;case/^3[0-9]{2}$/.test(t):this.earlyDialogs.forEach(r=>r.dispose()),this.earlyDialogs.clear(),this.delegate&&this.delegate.onRedirect&&this.delegate.onRedirect({message:e});return;case/^[4-6][0-9]{2}$/.test(t):this.earlyDialogs.forEach(r=>r.dispose()),this.earlyDialogs.clear(),this.delegate&&this.delegate.onReject&&this.delegate.onReject({message:e});return;default:throw new Error(`Invalid status code ${t}`)}throw new Error(`Executing what should be an unreachable code path receiving ${t} response.`)}};var Dt=class extends te{constructor(e,t,r){super(se,e,t,r),this.core=e}dispose(){this.earlyDialog&&this.earlyDialog.dispose(),super.dispose()}accept(e={statusCode:200}){if(!this.acceptable)throw new Ae(`${this.message.method} not acceptable in state ${this.transaction.state}.`);if(!this.confirmedDialog)if(this.earlyDialog)this.earlyDialog.confirm(),this.confirmedDialog=this.earlyDialog,this.earlyDialog=void 0;else{let d=this.transaction;if(!(d instanceof se))throw new Error("Transaction not instance of InviteClientTransaction.");let h=ke.initialDialogStateForUserAgentServer(this.message,this.toTag);this.confirmedDialog=new st(d,this.core,h)}let t=this.message.getHeaders("record-route").map(d=>`Record-Route: ${d}`),r=`Contact: ${this.core.configuration.contact.toString()}`,i="Allow: "+Oe.toString();if(!e.body){if(this.confirmedDialog.signalingState===b.Stable)e.body=this.confirmedDialog.answer;else if(this.confirmedDialog.signalingState===b.Initial||this.confirmedDialog.signalingState===b.HaveRemoteOffer)throw new Error("Response must have a body.")}e.statusCode=e.statusCode||200,e.extraHeaders=e.extraHeaders||[],e.extraHeaders=e.extraHeaders.concat(t),e.extraHeaders.push(i),e.extraHeaders.push(r);let s=super.accept(e),o=this.confirmedDialog,a=Object.assign(Object.assign({},s),{session:o});return e.body&&this.confirmedDialog.signalingState!==b.Stable&&this.confirmedDialog.signalingStateTransition(e.body),a}progress(e={statusCode:180}){if(!this.progressable)throw new Ae(`${this.message.method} not progressable in state ${this.transaction.state}.`);if(!this.earlyDialog){let a=this.transaction;if(!(a instanceof se))throw new Error("Transaction not instance of InviteClientTransaction.");let d=ke.initialDialogStateForUserAgentServer(this.message,this.toTag,!0);this.earlyDialog=new st(a,this.core,d)}let t=this.message.getHeaders("record-route").map(a=>`Record-Route: ${a}`),r=`Contact: ${this.core.configuration.contact}`;e.extraHeaders=e.extraHeaders||[],e.extraHeaders=e.extraHeaders.concat(t),e.extraHeaders.push(r);let i=super.progress(e),s=this.earlyDialog,o=Object.assign(Object.assign({},i),{session:s});return e.body&&this.earlyDialog.signalingState!==b.Stable&&this.earlyDialog.signalingStateTransition(e.body),o}redirect(e,t={statusCode:302}){return super.redirect(e,t)}reject(e={statusCode:486}){return super.reject(e)}};var Fr=class extends G{constructor(e,t,r){super(Y,e,t,r)}};var Ur=class extends G{constructor(e,t,r){super(Y,e,t,r)}};var Br=class extends te{constructor(e,t,r){super(Z,e,t,r),this.core=e}};var jr=class extends G{constructor(e,t,r){let i=e.createOutgoingRequestMessage(I.SUBSCRIBE,r);super(Y,e.userAgentCore,i,t),this.dialog=e}waitNotifyStop(){}receiveResponse(e){if(e.statusCode&&e.statusCode>=200&&e.statusCode<300){let t=e.getHeader("Expires");if(!t)this.logger.warn("Expires header missing in a 200-class response to SUBSCRIBE");else{let r=Number(t);this.dialog.subscriptionExpires>r&&(this.dialog.subscriptionExpires=r)}}e.statusCode&&e.statusCode>=400&&e.statusCode<700&&[404,405,410,416,480,481,482,483,484,485,489,501,604].includes(e.statusCode)&&this.dialog.terminate(),super.receiveResponse(e)}};var Kt=class extends ke{constructor(e,t,r,i,s,o){super(i,s),this.delegate=o,this._autoRefresh=!1,this._subscriptionEvent=e,this._subscriptionExpires=t,this._subscriptionExpiresInitial=t,this._subscriptionExpiresLastSet=Math.floor(Date.now()/1e3),this._subscriptionRefresh=void 0,this._subscriptionRefreshLastSet=void 0,this._subscriptionState=r,this.logger=i.loggerFactory.getLogger("sip.subscribe-dialog"),this.logger.log(`SUBSCRIBE dialog ${this.id} constructed`)}static initialDialogStateForSubscription(e,t){let i=t.getHeaders("record-route"),s=t.parseHeader("contact");if(!s)throw new Error("Contact undefined.");if(!(s instanceof ee))throw new Error("Contact not instance of NameAddrHeader.");let o=s.uri,a=e.cseq,d=void 0,h=e.callId,l=e.fromTag,u=t.fromTag;if(!h)throw new Error("Call id undefined.");if(!l)throw new Error("From tag undefined.");if(!u)throw new Error("To tag undefined.");if(!e.from)throw new Error("From undefined.");if(!e.to)throw new Error("To undefined.");let T=e.from.uri,A=e.to.uri,_=!1;return{id:h+l+u,early:_,callId:h,localTag:l,remoteTag:u,localSequenceNumber:a,remoteSequenceNumber:d,localURI:T,remoteURI:A,remoteTarget:o,routeSet:i,secure:!1}}dispose(){super.dispose(),this.N&&(clearTimeout(this.N),this.N=void 0),this.refreshTimerClear(),this.logger.log(`SUBSCRIBE dialog ${this.id} destroyed`)}get autoRefresh(){return this._autoRefresh}set autoRefresh(e){this._autoRefresh=!0,this.refreshTimerSet()}get subscriptionEvent(){return this._subscriptionEvent}get subscriptionExpires(){let e=Math.floor(Date.now()/1e3)-this._subscriptionExpiresLastSet,t=this._subscriptionExpires-e;return Math.max(t,0)}set subscriptionExpires(e){if(e<0)throw new Error("Expires must be greater than or equal to zero.");if(this._subscriptionExpires=e,this._subscriptionExpiresLastSet=Math.floor(Date.now()/1e3),this.autoRefresh){let t=this.subscriptionRefresh;(t===void 0||t>=e)&&this.refreshTimerSet()}}get subscriptionExpiresInitial(){return this._subscriptionExpiresInitial}get subscriptionRefresh(){if(this._subscriptionRefresh===void 0||this._subscriptionRefreshLastSet===void 0)return;let e=Math.floor(Date.now()/1e3)-this._subscriptionRefreshLastSet,t=this._subscriptionRefresh-e;return Math.max(t,0)}get subscriptionState(){return this._subscriptionState}receiveRequest(e){if(this.logger.log(`SUBSCRIBE dialog ${this.id} received ${e.method} request`),!this.sequenceGuard(e)){this.logger.log(`SUBSCRIBE dialog ${this.id} rejected out of order ${e.method} request.`);return}switch(super.receiveRequest(e),e.method){case I.NOTIFY:this.onNotify(e);break;default:this.logger.log(`SUBSCRIBE dialog ${this.id} received unimplemented ${e.method} request`),this.core.replyStateless(e,{statusCode:501});break}}refresh(){let e="Allow: "+Oe.toString(),t={};return t.extraHeaders=(t.extraHeaders||[]).slice(),t.extraHeaders.push(e),t.extraHeaders.push("Event: "+this.subscriptionEvent),t.extraHeaders.push("Expires: "+this.subscriptionExpiresInitial),t.extraHeaders.push("Contact: "+this.core.configuration.contact.toString()),this.subscribe(void 0,t)}subscribe(e,t={}){var r;if(this.subscriptionState!==j.Pending&&this.subscriptionState!==j.Active)throw new Error(`Invalid state ${this.subscriptionState}. May only re-subscribe while in state "pending" or "active".`);this.logger.log(`SUBSCRIBE dialog ${this.id} sending SUBSCRIBE request`);let i=new jr(this,e,t);return this.N&&(clearTimeout(this.N),this.N=void 0),!((r=t.extraHeaders)===null||r===void 0)&&r.includes("Expires: 0")||(this.N=setTimeout(()=>this.timerN(),J.TIMER_N)),i}terminate(){this.stateTransition(j.Terminated),this.onTerminated()}unsubscribe(){let e="Allow: "+Oe.toString(),t={};return t.extraHeaders=(t.extraHeaders||[]).slice(),t.extraHeaders.push(e),t.extraHeaders.push("Event: "+this.subscriptionEvent),t.extraHeaders.push("Expires: 0"),t.extraHeaders.push("Contact: "+this.core.configuration.contact.toString()),this.subscribe(void 0,t)}onNotify(e){let t=e.parseHeader("Event").event;if(!t||t!==this.subscriptionEvent){this.core.replyStateless(e,{statusCode:489});return}this.N&&(clearTimeout(this.N),this.N=void 0);let r=e.parseHeader("Subscription-State");if(!r||!r.state){this.core.replyStateless(e,{statusCode:489});return}let i=r.state,s=r.expires?Math.max(r.expires,0):void 0;switch(i){case"pending":this.stateTransition(j.Pending,s);break;case"active":this.stateTransition(j.Active,s);break;case"terminated":this.stateTransition(j.Terminated,s);break;default:this.logger.warn("Unrecognized subscription state.");break}let o=new Ve(this,e);this.delegate&&this.delegate.onNotify?this.delegate.onNotify(o):o.accept()}onRefresh(e){this.delegate&&this.delegate.onRefresh&&this.delegate.onRefresh(e)}onTerminated(){this.delegate&&this.delegate.onTerminated&&this.delegate.onTerminated()}refreshTimerClear(){this.refreshTimer&&(clearTimeout(this.refreshTimer),this.refreshTimer=void 0)}refreshTimerSet(){if(this.refreshTimerClear(),this.autoRefresh&&this.subscriptionExpires>0){let e=this.subscriptionExpires*900;this._subscriptionRefresh=Math.floor(e/1e3),this._subscriptionRefreshLastSet=Math.floor(Date.now()/1e3),this.refreshTimer=setTimeout(()=>{this.refreshTimer=void 0,this._subscriptionRefresh=void 0,this._subscriptionRefreshLastSet=void 0,this.onRefresh(this.refresh())},e)}}stateTransition(e,t){let r=()=>{this.logger.warn(`Invalid subscription state transition from ${this.subscriptionState} to ${e}`)};switch(e){case j.Initial:r();return;case j.NotifyWait:r();return;case j.Pending:if(this.subscriptionState!==j.NotifyWait&&this.subscriptionState!==j.Pending){r();return}break;case j.Active:if(this.subscriptionState!==j.NotifyWait&&this.subscriptionState!==j.Pending&&this.subscriptionState!==j.Active){r();return}break;case j.Terminated:if(this.subscriptionState!==j.NotifyWait&&this.subscriptionState!==j.Pending&&this.subscriptionState!==j.Active){r();return}break;default:r();return}e===j.Pending&&t&&(this.subscriptionExpires=t),e===j.Active&&t&&(this.subscriptionExpires=t),e===j.Terminated&&this.dispose(),this._subscriptionState=e}timerN(){this.logger.warn("Timer N expired for SUBSCRIBE dialog. Timed out waiting for NOTIFY."),this.subscriptionState!==j.Terminated&&(this.stateTransition(j.Terminated),this.onTerminated())}};var Kr=class extends G{constructor(e,t,r){let i=t.getHeader("Event");if(!i)throw new Error("Event undefined");let s=t.getHeader("Expires");if(!s)throw new Error("Expires undefined");super(Y,e,t,r),this.delegate=r,this.subscriberId=t.callId+t.fromTag+i,this.subscriptionExpiresRequested=this.subscriptionExpires=Number(s),this.subscriptionEvent=i,this.subscriptionState=j.NotifyWait,this.waitNotifyStart()}dispose(){super.dispose()}onNotify(e){let t=e.message.parseHeader("Event").event;if(!t||t!==this.subscriptionEvent){this.logger.warn("Failed to parse event."),e.reject({statusCode:489});return}let r=e.message.parseHeader("Subscription-State");if(!r||!r.state){this.logger.warn("Failed to parse subscription state."),e.reject({statusCode:489});return}let i=r.state;switch(i){case"pending":break;case"active":break;case"terminated":break;default:this.logger.warn(`Invalid subscription state ${i}`),e.reject({statusCode:489});return}if(i!=="terminated"&&!e.message.parseHeader("contact")){this.logger.warn("Failed to parse contact."),e.reject({statusCode:489});return}if(this.dialog)throw new Error("Dialog already created. This implementation only supports install of single subscriptions.");switch(this.waitNotifyStop(),this.subscriptionExpires=r.expires?Math.min(this.subscriptionExpires,Math.max(r.expires,0)):this.subscriptionExpires,i){case"pending":this.subscriptionState=j.Pending;break;case"active":this.subscriptionState=j.Active;break;case"terminated":this.subscriptionState=j.Terminated;break;default:throw new Error(`Unrecognized state ${i}.`)}if(this.subscriptionState!==j.Terminated){let s=Kt.initialDialogStateForSubscription(this.message,e.message);this.dialog=new Kt(this.subscriptionEvent,this.subscriptionExpires,this.subscriptionState,this.core,s)}if(this.delegate&&this.delegate.onNotify){let s=e,o=this.dialog;this.delegate.onNotify({request:s,subscription:o})}else e.accept()}waitNotifyStart(){this.N||(this.core.subscribers.set(this.subscriberId,this),this.N=setTimeout(()=>this.timerN(),J.TIMER_N))}waitNotifyStop(){this.N&&(this.core.subscribers.delete(this.subscriberId),clearTimeout(this.N),this.N=void 0)}receiveResponse(e){if(this.authenticationGuard(e)){if(e.statusCode&&e.statusCode>=200&&e.statusCode<300){let t=e.getHeader("Expires");if(!t)this.logger.warn("Expires header missing in a 200-class response to SUBSCRIBE");else{let r=Number(t);r>this.subscriptionExpiresRequested&&this.logger.warn("Expires header in a 200-class response to SUBSCRIBE with a higher value than the one in the request"),r<this.subscriptionExpires&&(this.subscriptionExpires=r)}this.dialog&&this.dialog.subscriptionExpires>this.subscriptionExpires&&(this.dialog.subscriptionExpires=this.subscriptionExpires)}e.statusCode&&e.statusCode>=300&&e.statusCode<700&&this.waitNotifyStop(),super.receiveResponse(e)}}timerN(){this.logger.warn("Timer N expired for SUBSCRIBE user agent client. Timed out waiting for NOTIFY."),this.waitNotifyStop(),this.delegate&&this.delegate.onNotifyTimeout&&this.delegate.onNotifyTimeout()}};var Gr=class extends te{constructor(e,t,r){super(Z,e,t,r),this.core=e}};var jn=["application/sdp","application/dtmf-relay"],Vr=class{constructor(e,t={}){this.userAgentClients=new Map,this.userAgentServers=new Map,this.configuration=e,this.delegate=t,this.dialogs=new Map,this.subscribers=new Map,this.logger=e.loggerFactory.getLogger("sip.user-agent-core")}dispose(){this.reset()}reset(){this.dialogs.forEach(e=>e.dispose()),this.dialogs.clear(),this.subscribers.forEach(e=>e.dispose()),this.subscribers.clear(),this.userAgentClients.forEach(e=>e.dispose()),this.userAgentClients.clear(),this.userAgentServers.forEach(e=>e.dispose()),this.userAgentServers.clear()}get loggerFactory(){return this.configuration.loggerFactory}get transport(){let e=this.configuration.transportAccessor();if(!e)throw new Error("Transport undefined.");return e}invite(e,t){return new Mr(this,e,t)}message(e,t){return new At(this,e,t)}publish(e,t){return new Fr(this,e,t)}register(e,t){return new Ur(this,e,t)}subscribe(e,t){return new Kr(this,e,t)}request(e,t){return new G(Y,this,e,t)}makeOutgoingRequestMessage(e,t,r,i,s,o,a){let d=this.configuration.sipjsId,h=this.configuration.displayName,l=this.configuration.viaForceRport,u=this.configuration.hackViaTcp,T=this.configuration.supportedOptionTags.slice();e===I.REGISTER&&T.push("path","gruu"),e===I.INVITE&&(this.configuration.contact.pubGruu||this.configuration.contact.tempGruu)&&T.push("gruu");let A=this.configuration.routeSet,_=this.configuration.userAgentHeaderFieldValue,$=this.configuration.viaHost,P=Object.assign(Object.assign({},{callIdPrefix:d,forceRport:l,fromDisplayName:h,hackViaTcp:u,optionTags:T,routeSet:A,userAgentString:_,viaHost:$}),s);return new Ne(e,t,r,i,P,o,a)}receiveIncomingRequestFromTransport(e){this.receiveRequestFromTransport(e)}receiveIncomingResponseFromTransport(e){this.receiveResponseFromTransport(e)}replyStateless(e,t){let r=this.configuration.userAgentHeaderFieldValue,i=this.configuration.supportedOptionTagsResponse;t=Object.assign(Object.assign({},t),{userAgent:r,supported:i});let s=Ar(e,t);return this.transport.send(s.message).catch(o=>{o instanceof Error&&this.logger.error(o.message),this.logger.error(`Transport error occurred sending stateless reply to ${e.method} request.`)}),s}receiveRequestFromTransport(e){let t=e.viaBranch,r=this.userAgentServers.get(t);if(e.method===I.ACK&&r&&r.transaction.state===p.Accepted&&r instanceof Dt){this.logger.warn(`Discarding out of dialog ACK after 2xx response sent on transaction ${t}.`);return}if(e.method===I.CANCEL){r?(this.replyStateless(e,{statusCode:200}),r.transaction instanceof se&&r.transaction.state===p.Proceeding&&r instanceof Dt&&r.receiveCancel(e)):this.replyStateless(e,{statusCode:481});return}if(r){r.transaction.receiveRequest(e);return}this.receiveRequest(e)}receiveRequest(e){if(!Oe.includes(e.method)){let i="Allow: "+Oe.toString();this.replyStateless(e,{statusCode:405,extraHeaders:[i]});return}if(!e.ruri)throw new Error("Request-URI undefined.");if(e.ruri.scheme!=="sip"){this.replyStateless(e,{statusCode:416});return}let t=e.ruri,r=i=>!!i&&i.user===t.user;if(!r(this.configuration.aor)&&!(r(this.configuration.contact.uri)||r(this.configuration.contact.pubGruu)||r(this.configuration.contact.tempGruu))){this.logger.warn("Request-URI does not point to us."),e.method!==I.ACK&&this.replyStateless(e,{statusCode:404});return}if(e.method===I.INVITE&&!e.hasHeader("Contact")){this.replyStateless(e,{statusCode:400,reasonPhrase:"Missing Contact Header"});return}if(!e.toTag){let i=e.viaBranch;if(!this.userAgentServers.has(i)&&Array.from(this.userAgentServers.values()).some(o=>o.transaction.request.fromTag===e.fromTag&&o.transaction.request.callId===e.callId&&o.transaction.request.cseq===e.cseq)){this.replyStateless(e,{statusCode:482});return}}e.toTag?this.receiveInsideDialogRequest(e):this.receiveOutsideDialogRequest(e)}receiveInsideDialogRequest(e){if(e.method===I.NOTIFY){let i=e.parseHeader("Event");if(!i||!i.event){this.replyStateless(e,{statusCode:489});return}let s=e.callId+e.toTag+i.event,o=this.subscribers.get(s);if(o){let a=new Ve(this,e);o.onNotify(a);return}}let t=e.callId+e.toTag+e.fromTag,r=this.dialogs.get(t);if(r){if(e.method===I.OPTIONS){let i="Allow: "+Oe.toString(),s="Accept: "+jn.toString();this.replyStateless(e,{statusCode:200,extraHeaders:[i,s]});return}r.receiveRequest(e);return}e.method!==I.ACK&&this.replyStateless(e,{statusCode:481})}receiveOutsideDialogRequest(e){switch(e.method){case I.ACK:break;case I.BYE:this.replyStateless(e,{statusCode:481});break;case I.CANCEL:throw new Error(`Unexpected out of dialog request method ${e.method}.`);case I.INFO:this.replyStateless(e,{statusCode:405});break;case I.INVITE:{let t=new Dt(this,e);this.delegate.onInvite?this.delegate.onInvite(t):t.reject()}break;case I.MESSAGE:{let t=new _t(this,e);this.delegate.onMessage?this.delegate.onMessage(t):t.accept()}break;case I.NOTIFY:{let t=new Ve(this,e);this.delegate.onNotify?this.delegate.onNotify(t):t.reject({statusCode:405})}break;case I.OPTIONS:{let t="Allow: "+Oe.toString(),r="Accept: "+jn.toString();this.replyStateless(e,{statusCode:200,extraHeaders:[t,r]})}break;case I.REFER:{let t=new $t(this,e);this.delegate.onRefer?this.delegate.onRefer(t):t.reject({statusCode:405})}break;case I.REGISTER:{let t=new Br(this,e);this.delegate.onRegister?this.delegate.onRegister(t):t.reject({statusCode:405})}break;case I.SUBSCRIBE:{let t=new Gr(this,e);this.delegate.onSubscribe?this.delegate.onSubscribe(t):t.reject({statusCode:480})}break;default:throw new Error(`Unexpected out of dialog request method ${e.method}.`)}}receiveResponseFromTransport(e){if(e.getHeaders("via").length>1){this.logger.warn("More than one Via header field present in the response, dropping");return}let t=e.viaBranch+e.method,r=this.userAgentClients.get(t);r?r.transaction.receiveResponse(e):this.logger.warn(`Discarding unmatched ${e.statusCode} response to ${e.method} ${t}.`)}};function Li(){return n=>!n.audio&&!n.video?Promise.resolve(new MediaStream):navigator.mediaDevices===void 0?Promise.reject(new Error("Media devices not available in insecure contexts.")):navigator.mediaDevices.getUserMedia.call(navigator.mediaDevices,n)}function Mi(){return{bundlePolicy:"balanced",certificates:void 0,iceCandidatePoolSize:0,iceServers:[{urls:"stun:stun.l.google.com:19302"}],iceTransportPolicy:"all",rtcpMuxPolicy:"require"}}var re=class{constructor(e,t,r){e.debug("SessionDescriptionHandler.constructor"),this.logger=e,this.mediaStreamFactory=t,this.sessionDescriptionHandlerConfiguration=r,this._localMediaStream=new MediaStream,this._remoteMediaStream=new MediaStream,this._peerConnection=new RTCPeerConnection(r?.peerConnectionConfiguration),this.initPeerConnectionEventHandlers()}get localMediaStream(){return this._localMediaStream}get remoteMediaStream(){return this._remoteMediaStream}get dataChannel(){return this._dataChannel}get peerConnection(){return this._peerConnection}get peerConnectionDelegate(){return this._peerConnectionDelegate}set peerConnectionDelegate(e){this._peerConnectionDelegate=e}static dispatchAddTrackEvent(e,t){e.dispatchEvent(new MediaStreamTrackEvent("addtrack",{track:t}))}static dispatchRemoveTrackEvent(e,t){e.dispatchEvent(new MediaStreamTrackEvent("removetrack",{track:t}))}close(){this.logger.debug("SessionDescriptionHandler.close"),this._peerConnection!==void 0&&(this._peerConnection.getReceivers().forEach(e=>{e.track&&e.track.stop()}),this._peerConnection.getSenders().forEach(e=>{e.track&&e.track.stop()}),this._dataChannel&&this._dataChannel.close(),this._peerConnection.close(),this._peerConnection=void 0)}enableReceiverTracks(e){let t=this.peerConnection;if(!t)throw new Error("Peer connection closed.");t.getReceivers().forEach(r=>{r.track&&(r.track.enabled=e)})}enableSenderTracks(e){let t=this.peerConnection;if(!t)throw new Error("Peer connection closed.");t.getSenders().forEach(r=>{r.track&&(r.track.enabled=e)})}getDescription(e,t){var r,i;if(this.logger.debug("SessionDescriptionHandler.getDescription"),this._peerConnection===void 0)return Promise.reject(new Error("Peer connection closed."));this.onDataChannel=e?.onDataChannel;let s=(r=e?.offerOptions)===null||r===void 0?void 0:r.iceRestart,o=e?.iceGatheringTimeout===void 0?(i=this.sessionDescriptionHandlerConfiguration)===null||i===void 0?void 0:i.iceGatheringTimeout:e?.iceGatheringTimeout;return this.getLocalMediaStream(e).then(()=>this.updateDirection(e)).then(()=>this.createDataChannel(e)).then(()=>this.createLocalOfferOrAnswer(e)).then(a=>this.applyModifiers(a,t)).then(a=>this.setLocalSessionDescription(a)).then(()=>this.waitForIceGatheringComplete(s,o)).then(()=>this.getLocalSessionDescription()).then(a=>({body:a.sdp,contentType:"application/sdp"})).catch(a=>{throw this.logger.error("SessionDescriptionHandler.getDescription failed - "+a),a})}hasDescription(e){return this.logger.debug("SessionDescriptionHandler.hasDescription"),e==="application/sdp"}iceGatheringComplete(){this.logger.debug("SessionDescriptionHandler.iceGatheringComplete"),this.iceGatheringCompleteTimeoutId!==void 0&&(this.logger.debug("SessionDescriptionHandler.iceGatheringComplete - clearing timeout"),clearTimeout(this.iceGatheringCompleteTimeoutId),this.iceGatheringCompleteTimeoutId=void 0),this.iceGatheringCompletePromise!==void 0&&(this.logger.debug("SessionDescriptionHandler.iceGatheringComplete - resolving promise"),this.iceGatheringCompleteResolve&&this.iceGatheringCompleteResolve(),this.iceGatheringCompletePromise=void 0,this.iceGatheringCompleteResolve=void 0,this.iceGatheringCompleteReject=void 0)}sendDtmf(e,t){if(this.logger.debug("SessionDescriptionHandler.sendDtmf"),this._peerConnection===void 0)return this.logger.error("SessionDescriptionHandler.sendDtmf failed - peer connection closed"),!1;let r=this._peerConnection.getSenders();if(r.length===0)return this.logger.error("SessionDescriptionHandler.sendDtmf failed - no senders"),!1;let i=r[0].dtmf;if(!i)return this.logger.error("SessionDescriptionHandler.sendDtmf failed - no DTMF sender"),!1;let s=t?.duration,o=t?.interToneGap;try{i.insertDTMF(e,s,o)}catch(a){return this.logger.error(a.toString()),!1}return this.logger.log("SessionDescriptionHandler.sendDtmf sent via RTP: "+e.toString()),!0}setDescription(e,t,r){if(this.logger.debug("SessionDescriptionHandler.setDescription"),this._peerConnection===void 0)return Promise.reject(new Error("Peer connection closed."));this.onDataChannel=t?.onDataChannel;let i=this._peerConnection.signalingState==="have-local-offer"?"answer":"offer";return this.getLocalMediaStream(t).then(()=>this.applyModifiers({sdp:e,type:i},r)).then(s=>this.setRemoteSessionDescription(s)).catch(s=>{throw this.logger.error("SessionDescriptionHandler.setDescription failed - "+s),s})}applyModifiers(e,t){return this.logger.debug("SessionDescriptionHandler.applyModifiers"),!t||t.length===0?Promise.resolve(e):t.reduce((r,i)=>r.then(i),Promise.resolve(e)).then(r=>{if(this.logger.debug("SessionDescriptionHandler.applyModifiers - modified sdp"),!r.sdp||!r.type)throw new Error("Invalid SDP.");return{sdp:r.sdp,type:r.type}})}createDataChannel(e){if(this._peerConnection===void 0)return Promise.reject(new Error("Peer connection closed."));if(e?.dataChannel!==!0||this._dataChannel)return Promise.resolve();switch(this._peerConnection.signalingState){case"stable":this.logger.debug("SessionDescriptionHandler.createDataChannel - creating data channel");try{return this._dataChannel=this._peerConnection.createDataChannel(e?.dataChannelLabel||"",e?.dataChannelOptions),this.onDataChannel&&this.onDataChannel(this._dataChannel),Promise.resolve()}catch(t){return Promise.reject(t)}case"have-remote-offer":return Promise.resolve();case"have-local-offer":case"have-local-pranswer":case"have-remote-pranswer":case"closed":default:return Promise.reject(new Error("Invalid signaling state "+this._peerConnection.signalingState))}}createLocalOfferOrAnswer(e){if(this._peerConnection===void 0)return Promise.reject(new Error("Peer connection closed."));switch(this._peerConnection.signalingState){case"stable":return this.logger.debug("SessionDescriptionHandler.createLocalOfferOrAnswer - creating SDP offer"),this._peerConnection.createOffer(e?.offerOptions);case"have-remote-offer":return this.logger.debug("SessionDescriptionHandler.createLocalOfferOrAnswer - creating SDP answer"),this._peerConnection.createAnswer(e?.answerOptions);case"have-local-offer":case"have-local-pranswer":case"have-remote-pranswer":case"closed":default:return Promise.reject(new Error("Invalid signaling state "+this._peerConnection.signalingState))}}getLocalMediaStream(e){if(this.logger.debug("SessionDescriptionHandler.getLocalMediaStream"),this._peerConnection===void 0)return Promise.reject(new Error("Peer connection closed."));let t=Object.assign({},e?.constraints);if(this.localMediaStreamConstraints){if(t.audio=t.audio||this.localMediaStreamConstraints.audio,t.video=t.video||this.localMediaStreamConstraints.video,JSON.stringify(this.localMediaStreamConstraints.audio)===JSON.stringify(t.audio)&&JSON.stringify(this.localMediaStreamConstraints.video)===JSON.stringify(t.video))return Promise.resolve()}else t.audio===void 0&&t.video===void 0&&(t={audio:!0});return this.localMediaStreamConstraints=t,this.mediaStreamFactory(t,this,e).then(r=>this.setLocalMediaStream(r))}setLocalMediaStream(e){if(this.logger.debug("SessionDescriptionHandler.setLocalMediaStream"),!this._peerConnection)throw new Error("Peer connection undefined.");let t=this._peerConnection,r=this._localMediaStream,i=[],s=d=>{let h=d.kind;if(h!=="audio"&&h!=="video")throw new Error(`Unknown new track kind ${h}.`);let l=t.getSenders().find(u=>u.track&&u.track.kind===h);l?i.push(new Promise(u=>{this.logger.debug(`SessionDescriptionHandler.setLocalMediaStream - replacing sender ${h} track`),u()}).then(()=>l.replaceTrack(d).then(()=>{let u=r.getTracks().find(T=>T.kind===h);u&&(u.stop(),r.removeTrack(u),re.dispatchRemoveTrackEvent(r,u)),r.addTrack(d),re.dispatchAddTrackEvent(r,d)}).catch(u=>{throw this.logger.error(`SessionDescriptionHandler.setLocalMediaStream - failed to replace sender ${h} track`),u}))):i.push(new Promise(u=>{this.logger.debug(`SessionDescriptionHandler.setLocalMediaStream - adding sender ${h} track`),u()}).then(()=>{try{t.addTrack(d,r)}catch(u){throw this.logger.error(`SessionDescriptionHandler.setLocalMediaStream - failed to add sender ${h} track`),u}r.addTrack(d),re.dispatchAddTrackEvent(r,d)}))},o=e.getAudioTracks();o.length&&s(o[0]);let a=e.getVideoTracks();return a.length&&s(a[0]),i.reduce((d,h)=>d.then(()=>h),Promise.resolve())}getLocalSessionDescription(){if(this.logger.debug("SessionDescriptionHandler.getLocalSessionDescription"),this._peerConnection===void 0)return Promise.reject(new Error("Peer connection closed."));let e=this._peerConnection.localDescription;return e?Promise.resolve(e):Promise.reject(new Error("Failed to get local session description"))}setLocalSessionDescription(e){return this.logger.debug("SessionDescriptionHandler.setLocalSessionDescription"),this._peerConnection===void 0?Promise.reject(new Error("Peer connection closed.")):this._peerConnection.setLocalDescription(e)}setRemoteSessionDescription(e){if(this.logger.debug("SessionDescriptionHandler.setRemoteSessionDescription"),this._peerConnection===void 0)return Promise.reject(new Error("Peer connection closed."));let t=e.sdp,r;switch(this._peerConnection.signalingState){case"stable":r="offer";break;case"have-local-offer":r="answer";break;case"have-local-pranswer":case"have-remote-offer":case"have-remote-pranswer":case"closed":default:return Promise.reject(new Error("Invalid signaling state "+this._peerConnection.signalingState))}return t?this._peerConnection.setRemoteDescription({sdp:t,type:r}):(this.logger.error("SessionDescriptionHandler.setRemoteSessionDescription failed - cannot set null sdp"),Promise.reject(new Error("SDP is undefined")))}setRemoteTrack(e){this.logger.debug("SessionDescriptionHandler.setRemoteTrack");let t=this._remoteMediaStream;t.getTrackById(e.id)?this.logger.debug(`SessionDescriptionHandler.setRemoteTrack - have remote ${e.kind} track`):e.kind==="audio"?(this.logger.debug(`SessionDescriptionHandler.setRemoteTrack - adding remote ${e.kind} track`),t.getAudioTracks().forEach(r=>{r.stop(),t.removeTrack(r),re.dispatchRemoveTrackEvent(t,r)}),t.addTrack(e),re.dispatchAddTrackEvent(t,e)):e.kind==="video"&&(this.logger.debug(`SessionDescriptionHandler.setRemoteTrack - adding remote ${e.kind} track`),t.getVideoTracks().forEach(r=>{r.stop(),t.removeTrack(r),re.dispatchRemoveTrackEvent(t,r)}),t.addTrack(e),re.dispatchAddTrackEvent(t,e))}updateDirection(e){if(this._peerConnection===void 0)return Promise.reject(new Error("Peer connection closed."));switch(this._peerConnection.signalingState){case"stable":this.logger.debug("SessionDescriptionHandler.updateDirection - setting offer direction");{let t=r=>{switch(r){case"inactive":return e?.hold?"inactive":"recvonly";case"recvonly":return e?.hold?"inactive":"recvonly";case"sendonly":return e?.hold?"sendonly":"sendrecv";case"sendrecv":return e?.hold?"sendonly":"sendrecv";case"stopped":return"stopped";default:throw new Error("Should never happen")}};this._peerConnection.getTransceivers().forEach(r=>{if(r.direction){let i=t(r.direction);r.direction!==i&&(r.direction=i)}})}break;case"have-remote-offer":this.logger.debug("SessionDescriptionHandler.updateDirection - setting answer direction");{let t=(()=>{let i=this._peerConnection.remoteDescription;if(!i)throw new Error("Failed to read remote offer");let s=/a=sendrecv\r\n|a=sendonly\r\n|a=recvonly\r\n|a=inactive\r\n/.exec(i.sdp);if(s)switch(s[0]){case`a=inactive\r
44
44
  `:return"inactive";case`a=recvonly\r
45
45
  `:return"recvonly";case`a=sendonly\r
46
46
  `:return"sendonly";case`a=sendrecv\r
47
- `:return"sendrecv";default:throw new Error("Should never happen")}return"sendrecv"})(),r=(()=>{switch(t){case"inactive":return"inactive";case"recvonly":return"sendonly";case"sendonly":return e?.hold?"inactive":"recvonly";case"sendrecv":return e?.hold?"sendonly":"sendrecv";default:throw new Error("Should never happen")}})();this._peerConnection.getTransceivers().forEach(i=>{i.direction&&i.direction!=="stopped"&&i.direction!==r&&(i.direction=r)})}break;case"have-local-offer":case"have-local-pranswer":case"have-remote-pranswer":case"closed":default:return Promise.reject(new Error("Invalid signaling state "+this._peerConnection.signalingState))}return Promise.resolve()}waitForIceGatheringComplete(e=!1,t=0){return this.logger.debug("SessionDescriptionHandler.waitForIceGatheringToComplete"),this._peerConnection===void 0?Promise.reject("Peer connection closed."):!e&&this._peerConnection.iceGatheringState==="complete"?(this.logger.debug("SessionDescriptionHandler.waitForIceGatheringToComplete - already complete"),Promise.resolve()):(this.iceGatheringCompletePromise!==void 0&&(this.logger.debug("SessionDescriptionHandler.waitForIceGatheringToComplete - rejecting prior waiting promise"),this.iceGatheringCompleteReject&&this.iceGatheringCompleteReject(new Error("Promise superseded.")),this.iceGatheringCompletePromise=void 0,this.iceGatheringCompleteResolve=void 0,this.iceGatheringCompleteReject=void 0),this.iceGatheringCompletePromise=new Promise((r,i)=>{this.iceGatheringCompleteResolve=r,this.iceGatheringCompleteReject=i,t>0&&(this.logger.debug("SessionDescriptionHandler.waitForIceGatheringToComplete - timeout in "+t),this.iceGatheringCompleteTimeoutId=setTimeout(()=>{this.logger.debug("SessionDescriptionHandler.waitForIceGatheringToComplete - timeout"),this.iceGatheringComplete()},t))}),this.iceGatheringCompletePromise)}initPeerConnectionEventHandlers(){if(this.logger.debug("SessionDescriptionHandler.initPeerConnectionEventHandlers"),!this._peerConnection)throw new Error("Peer connection undefined.");let e=this._peerConnection;e.onconnectionstatechange=t=>{var r;let i=e.connectionState;this.logger.debug(`SessionDescriptionHandler.onconnectionstatechange ${i}`),!((r=this._peerConnectionDelegate)===null||r===void 0)&&r.onconnectionstatechange&&this._peerConnectionDelegate.onconnectionstatechange(t)},e.ondatachannel=t=>{var r;this.logger.debug("SessionDescriptionHandler.ondatachannel"),this._dataChannel=t.channel,this.onDataChannel&&this.onDataChannel(this._dataChannel),!((r=this._peerConnectionDelegate)===null||r===void 0)&&r.ondatachannel&&this._peerConnectionDelegate.ondatachannel(t)},e.onicecandidate=t=>{var r;this.logger.debug("SessionDescriptionHandler.onicecandidate"),!((r=this._peerConnectionDelegate)===null||r===void 0)&&r.onicecandidate&&this._peerConnectionDelegate.onicecandidate(t)},e.onicecandidateerror=t=>{var r;this.logger.debug("SessionDescriptionHandler.onicecandidateerror"),!((r=this._peerConnectionDelegate)===null||r===void 0)&&r.onicecandidateerror&&this._peerConnectionDelegate.onicecandidateerror(t)},e.oniceconnectionstatechange=t=>{var r;let i=e.iceConnectionState;this.logger.debug(`SessionDescriptionHandler.oniceconnectionstatechange ${i}`),!((r=this._peerConnectionDelegate)===null||r===void 0)&&r.oniceconnectionstatechange&&this._peerConnectionDelegate.oniceconnectionstatechange(t)},e.onicegatheringstatechange=t=>{var r;let i=e.iceGatheringState;this.logger.debug(`SessionDescriptionHandler.onicegatheringstatechange ${i}`),i==="complete"&&this.iceGatheringComplete(),!((r=this._peerConnectionDelegate)===null||r===void 0)&&r.onicegatheringstatechange&&this._peerConnectionDelegate.onicegatheringstatechange(t)},e.onnegotiationneeded=t=>{var r;this.logger.debug("SessionDescriptionHandler.onnegotiationneeded"),!((r=this._peerConnectionDelegate)===null||r===void 0)&&r.onnegotiationneeded&&this._peerConnectionDelegate.onnegotiationneeded(t)},e.onsignalingstatechange=t=>{var r;let i=e.signalingState;this.logger.debug(`SessionDescriptionHandler.onsignalingstatechange ${i}`),!((r=this._peerConnectionDelegate)===null||r===void 0)&&r.onsignalingstatechange&&this._peerConnectionDelegate.onsignalingstatechange(t)},e.ontrack=t=>{var r;let i=t.track.kind,s=t.track.enabled?"enabled":"disabled";this.logger.debug(`SessionDescriptionHandler.ontrack ${i} ${s}`),this.setRemoteTrack(t.track),!((r=this._peerConnectionDelegate)===null||r===void 0)&&r.ontrack&&this._peerConnectionDelegate.ontrack(t)}}};function Mi(n){return(e,t)=>{n===void 0&&(n=qi());let i={iceGatheringTimeout:t?.iceGatheringTimeout!==void 0?t?.iceGatheringTimeout:5e3,peerConnectionConfiguration:Object.assign(Object.assign({},Li()),t?.peerConnectionConfiguration)},s=e.userAgent.getLogger("sip.SessionDescriptionHandler");return new re(s,n,i)}}var Be=class{constructor(e,t){if(this._state=O.Disconnected,this.transitioningState=!1,this._stateEventEmitter=new He,this.logger=e,t){let s=t,o=s?.wsServers,a=s?.maxReconnectionAttempts;if(o!==void 0){let d='The transport option "wsServers" as has apparently been specified and has been deprecated. It will no longer be available starting with SIP.js release 0.16.0. Please update accordingly.';this.logger.warn(d)}if(a!==void 0){let d='The transport option "maxReconnectionAttempts" as has apparently been specified and has been deprecated. It will no longer be available starting with SIP.js release 0.16.0. Please update accordingly.';this.logger.warn(d)}o&&!t.server&&(typeof o=="string"&&(t.server=o),o instanceof Array&&(t.server=o[0]))}this.configuration=Object.assign(Object.assign({},Be.defaultOptions),t);let r=this.configuration.server,i=W.parse(r,"absoluteURI");if(i===-1)throw this.logger.error(`Invalid WebSocket Server URL "${r}"`),new Error("Invalid WebSocket Server URL");if(!["wss","ws","udp"].includes(i.scheme))throw this.logger.error(`Invalid scheme in WebSocket Server URL "${r}"`),new Error("Invalid scheme in WebSocket Server URL");this._protocol=i.scheme.toUpperCase()}dispose(){return this.disconnect()}get protocol(){return this._protocol}get server(){return this.configuration.server}get state(){return this._state}get stateChange(){return this._stateEventEmitter}get ws(){return this._ws}connect(){return this._connect()}disconnect(){return this._disconnect()}isConnected(){return this.state===O.Connected}send(e){return this._send(e)}_connect(){switch(this.logger.log(`Connecting ${this.server}`),this.state){case O.Connecting:if(this.transitioningState)return Promise.reject(this.transitionLoopDetectedError(O.Connecting));if(!this.connectPromise)throw new Error("Connect promise must be defined.");return this.connectPromise;case O.Connected:if(this.transitioningState)return Promise.reject(this.transitionLoopDetectedError(O.Connecting));if(this.connectPromise)throw new Error("Connect promise must not be defined.");return Promise.resolve();case O.Disconnecting:if(this.connectPromise)throw new Error("Connect promise must not be defined.");try{this.transitionState(O.Connecting)}catch(t){if(t instanceof ze)return Promise.reject(t);throw t}break;case O.Disconnected:if(this.connectPromise)throw new Error("Connect promise must not be defined.");try{this.transitionState(O.Connecting)}catch(t){if(t instanceof ze)return Promise.reject(t);throw t}break;default:throw new Error("Unknown state")}let e;try{e=new WebSocket(this.server,"sip"),e.binaryType="arraybuffer",e.addEventListener("close",t=>this.onWebSocketClose(t,e)),e.addEventListener("error",t=>this.onWebSocketError(t,e)),e.addEventListener("open",t=>this.onWebSocketOpen(t,e)),e.addEventListener("message",t=>this.onWebSocketMessage(t,e)),this._ws=e}catch(t){return this._ws=void 0,this.logger.error("WebSocket construction failed."),this.logger.error(t.toString()),new Promise((r,i)=>{this.connectResolve=r,this.connectReject=i,this.transitionState(O.Disconnected,t)})}return this.connectPromise=new Promise((t,r)=>{this.connectResolve=t,this.connectReject=r,this.connectTimeout=setTimeout(()=>{this.logger.warn("Connect timed out. Exceeded time set in configuration.connectionTimeout: "+this.configuration.connectionTimeout+"s."),e.close(1e3)},this.configuration.connectionTimeout*1e3)}),this.connectPromise}_disconnect(){switch(this.logger.log(`Disconnecting ${this.server}`),this.state){case O.Connecting:if(this.disconnectPromise)throw new Error("Disconnect promise must not be defined.");try{this.transitionState(O.Disconnecting)}catch(t){if(t instanceof ze)return Promise.reject(t);throw t}break;case O.Connected:if(this.disconnectPromise)throw new Error("Disconnect promise must not be defined.");try{this.transitionState(O.Disconnecting)}catch(t){if(t instanceof ze)return Promise.reject(t);throw t}break;case O.Disconnecting:if(this.transitioningState)return Promise.reject(this.transitionLoopDetectedError(O.Disconnecting));if(!this.disconnectPromise)throw new Error("Disconnect promise must be defined.");return this.disconnectPromise;case O.Disconnected:if(this.transitioningState)return Promise.reject(this.transitionLoopDetectedError(O.Disconnecting));if(this.disconnectPromise)throw new Error("Disconnect promise must not be defined.");return Promise.resolve();default:throw new Error("Unknown state")}if(!this._ws)throw new Error("WebSocket must be defined.");let e=this._ws;return this.disconnectPromise=new Promise((t,r)=>{this.disconnectResolve=t,this.disconnectReject=r;try{e.close(1e3)}catch(i){throw this.logger.error("WebSocket close failed."),this.logger.error(i.toString()),i}}),this.disconnectPromise}_send(e){if(this.configuration.traceSip===!0&&this.logger.log(`Sending WebSocket message:
47
+ `:return"sendrecv";default:throw new Error("Should never happen")}return"sendrecv"})(),r=(()=>{switch(t){case"inactive":return"inactive";case"recvonly":return"sendonly";case"sendonly":return e?.hold?"inactive":"recvonly";case"sendrecv":return e?.hold?"sendonly":"sendrecv";default:throw new Error("Should never happen")}})();this._peerConnection.getTransceivers().forEach(i=>{i.direction&&i.direction!=="stopped"&&i.direction!==r&&(i.direction=r)})}break;case"have-local-offer":case"have-local-pranswer":case"have-remote-pranswer":case"closed":default:return Promise.reject(new Error("Invalid signaling state "+this._peerConnection.signalingState))}return Promise.resolve()}waitForIceGatheringComplete(e=!1,t=0){return this.logger.debug("SessionDescriptionHandler.waitForIceGatheringToComplete"),this._peerConnection===void 0?Promise.reject("Peer connection closed."):!e&&this._peerConnection.iceGatheringState==="complete"?(this.logger.debug("SessionDescriptionHandler.waitForIceGatheringToComplete - already complete"),Promise.resolve()):(this.iceGatheringCompletePromise!==void 0&&(this.logger.debug("SessionDescriptionHandler.waitForIceGatheringToComplete - rejecting prior waiting promise"),this.iceGatheringCompleteReject&&this.iceGatheringCompleteReject(new Error("Promise superseded.")),this.iceGatheringCompletePromise=void 0,this.iceGatheringCompleteResolve=void 0,this.iceGatheringCompleteReject=void 0),this.iceGatheringCompletePromise=new Promise((r,i)=>{this.iceGatheringCompleteResolve=r,this.iceGatheringCompleteReject=i,t>0&&(this.logger.debug("SessionDescriptionHandler.waitForIceGatheringToComplete - timeout in "+t),this.iceGatheringCompleteTimeoutId=setTimeout(()=>{this.logger.debug("SessionDescriptionHandler.waitForIceGatheringToComplete - timeout"),this.iceGatheringComplete()},t))}),this.iceGatheringCompletePromise)}initPeerConnectionEventHandlers(){if(this.logger.debug("SessionDescriptionHandler.initPeerConnectionEventHandlers"),!this._peerConnection)throw new Error("Peer connection undefined.");let e=this._peerConnection;e.onconnectionstatechange=t=>{var r;let i=e.connectionState;this.logger.debug(`SessionDescriptionHandler.onconnectionstatechange ${i}`),!((r=this._peerConnectionDelegate)===null||r===void 0)&&r.onconnectionstatechange&&this._peerConnectionDelegate.onconnectionstatechange(t)},e.ondatachannel=t=>{var r;this.logger.debug("SessionDescriptionHandler.ondatachannel"),this._dataChannel=t.channel,this.onDataChannel&&this.onDataChannel(this._dataChannel),!((r=this._peerConnectionDelegate)===null||r===void 0)&&r.ondatachannel&&this._peerConnectionDelegate.ondatachannel(t)},e.onicecandidate=t=>{var r;this.logger.debug("SessionDescriptionHandler.onicecandidate"),!((r=this._peerConnectionDelegate)===null||r===void 0)&&r.onicecandidate&&this._peerConnectionDelegate.onicecandidate(t)},e.onicecandidateerror=t=>{var r;this.logger.debug("SessionDescriptionHandler.onicecandidateerror"),!((r=this._peerConnectionDelegate)===null||r===void 0)&&r.onicecandidateerror&&this._peerConnectionDelegate.onicecandidateerror(t)},e.oniceconnectionstatechange=t=>{var r;let i=e.iceConnectionState;this.logger.debug(`SessionDescriptionHandler.oniceconnectionstatechange ${i}`),!((r=this._peerConnectionDelegate)===null||r===void 0)&&r.oniceconnectionstatechange&&this._peerConnectionDelegate.oniceconnectionstatechange(t)},e.onicegatheringstatechange=t=>{var r;let i=e.iceGatheringState;this.logger.debug(`SessionDescriptionHandler.onicegatheringstatechange ${i}`),i==="complete"&&this.iceGatheringComplete(),!((r=this._peerConnectionDelegate)===null||r===void 0)&&r.onicegatheringstatechange&&this._peerConnectionDelegate.onicegatheringstatechange(t)},e.onnegotiationneeded=t=>{var r;this.logger.debug("SessionDescriptionHandler.onnegotiationneeded"),!((r=this._peerConnectionDelegate)===null||r===void 0)&&r.onnegotiationneeded&&this._peerConnectionDelegate.onnegotiationneeded(t)},e.onsignalingstatechange=t=>{var r;let i=e.signalingState;this.logger.debug(`SessionDescriptionHandler.onsignalingstatechange ${i}`),!((r=this._peerConnectionDelegate)===null||r===void 0)&&r.onsignalingstatechange&&this._peerConnectionDelegate.onsignalingstatechange(t)},e.ontrack=t=>{var r;let i=t.track.kind,s=t.track.enabled?"enabled":"disabled";this.logger.debug(`SessionDescriptionHandler.ontrack ${i} ${s}`),this.setRemoteTrack(t.track),!((r=this._peerConnectionDelegate)===null||r===void 0)&&r.ontrack&&this._peerConnectionDelegate.ontrack(t)}}};function Fi(n){return(e,t)=>{n===void 0&&(n=Li());let i={iceGatheringTimeout:t?.iceGatheringTimeout!==void 0?t?.iceGatheringTimeout:5e3,peerConnectionConfiguration:Object.assign(Object.assign({},Mi()),t?.peerConnectionConfiguration)},s=e.userAgent.getLogger("sip.SessionDescriptionHandler");return new re(s,n,i)}}var Be=class{constructor(e,t){if(this._state=O.Disconnected,this.transitioningState=!1,this._stateEventEmitter=new He,this.logger=e,t){let s=t,o=s?.wsServers,a=s?.maxReconnectionAttempts;if(o!==void 0){let d='The transport option "wsServers" as has apparently been specified and has been deprecated. It will no longer be available starting with SIP.js release 0.16.0. Please update accordingly.';this.logger.warn(d)}if(a!==void 0){let d='The transport option "maxReconnectionAttempts" as has apparently been specified and has been deprecated. It will no longer be available starting with SIP.js release 0.16.0. Please update accordingly.';this.logger.warn(d)}o&&!t.server&&(typeof o=="string"&&(t.server=o),o instanceof Array&&(t.server=o[0]))}this.configuration=Object.assign(Object.assign({},Be.defaultOptions),t);let r=this.configuration.server,i=W.parse(r,"absoluteURI");if(i===-1)throw this.logger.error(`Invalid WebSocket Server URL "${r}"`),new Error("Invalid WebSocket Server URL");if(!["wss","ws","udp"].includes(i.scheme))throw this.logger.error(`Invalid scheme in WebSocket Server URL "${r}"`),new Error("Invalid scheme in WebSocket Server URL");this._protocol=i.scheme.toUpperCase()}dispose(){return this.disconnect()}get protocol(){return this._protocol}get server(){return this.configuration.server}get state(){return this._state}get stateChange(){return this._stateEventEmitter}get ws(){return this._ws}connect(){return this._connect()}disconnect(){return this._disconnect()}isConnected(){return this.state===O.Connected}send(e){return this._send(e)}_connect(){switch(this.logger.log(`Connecting ${this.server}`),this.state){case O.Connecting:if(this.transitioningState)return Promise.reject(this.transitionLoopDetectedError(O.Connecting));if(!this.connectPromise)throw new Error("Connect promise must be defined.");return this.connectPromise;case O.Connected:if(this.transitioningState)return Promise.reject(this.transitionLoopDetectedError(O.Connecting));if(this.connectPromise)throw new Error("Connect promise must not be defined.");return Promise.resolve();case O.Disconnecting:if(this.connectPromise)throw new Error("Connect promise must not be defined.");try{this.transitionState(O.Connecting)}catch(t){if(t instanceof ze)return Promise.reject(t);throw t}break;case O.Disconnected:if(this.connectPromise)throw new Error("Connect promise must not be defined.");try{this.transitionState(O.Connecting)}catch(t){if(t instanceof ze)return Promise.reject(t);throw t}break;default:throw new Error("Unknown state")}let e;try{e=new WebSocket(this.server,"sip"),e.binaryType="arraybuffer",e.addEventListener("close",t=>this.onWebSocketClose(t,e)),e.addEventListener("error",t=>this.onWebSocketError(t,e)),e.addEventListener("open",t=>this.onWebSocketOpen(t,e)),e.addEventListener("message",t=>this.onWebSocketMessage(t,e)),this._ws=e}catch(t){return this._ws=void 0,this.logger.error("WebSocket construction failed."),this.logger.error(t.toString()),new Promise((r,i)=>{this.connectResolve=r,this.connectReject=i,this.transitionState(O.Disconnected,t)})}return this.connectPromise=new Promise((t,r)=>{this.connectResolve=t,this.connectReject=r,this.connectTimeout=setTimeout(()=>{this.logger.warn("Connect timed out. Exceeded time set in configuration.connectionTimeout: "+this.configuration.connectionTimeout+"s."),e.close(1e3)},this.configuration.connectionTimeout*1e3)}),this.connectPromise}_disconnect(){switch(this.logger.log(`Disconnecting ${this.server}`),this.state){case O.Connecting:if(this.disconnectPromise)throw new Error("Disconnect promise must not be defined.");try{this.transitionState(O.Disconnecting)}catch(t){if(t instanceof ze)return Promise.reject(t);throw t}break;case O.Connected:if(this.disconnectPromise)throw new Error("Disconnect promise must not be defined.");try{this.transitionState(O.Disconnecting)}catch(t){if(t instanceof ze)return Promise.reject(t);throw t}break;case O.Disconnecting:if(this.transitioningState)return Promise.reject(this.transitionLoopDetectedError(O.Disconnecting));if(!this.disconnectPromise)throw new Error("Disconnect promise must be defined.");return this.disconnectPromise;case O.Disconnected:if(this.transitioningState)return Promise.reject(this.transitionLoopDetectedError(O.Disconnecting));if(this.disconnectPromise)throw new Error("Disconnect promise must not be defined.");return Promise.resolve();default:throw new Error("Unknown state")}if(!this._ws)throw new Error("WebSocket must be defined.");let e=this._ws;return this.disconnectPromise=new Promise((t,r)=>{this.disconnectResolve=t,this.disconnectReject=r;try{e.close(1e3)}catch(i){throw this.logger.error("WebSocket close failed."),this.logger.error(i.toString()),i}}),this.disconnectPromise}_send(e){if(this.configuration.traceSip===!0&&this.logger.log(`Sending WebSocket message:
48
48
 
49
49
  `+e+`
50
50
  `),this._state!==O.Connected)return Promise.reject(new Error("Not connected."));if(!this._ws)throw new Error("WebSocket undefined.");try{this._ws.send(e)}catch(t){return t instanceof Error?Promise.reject(t):Promise.reject(new Error("WebSocket send failed."))}return Promise.resolve()}onWebSocketClose(e,t){if(t!==this._ws)return;let r=`WebSocket closed ${this.server} (code: ${e.code})`,i=this.disconnectPromise?void 0:new Error(r);i&&this.logger.warn("WebSocket closed unexpectedly"),this.logger.log(r),this._ws=void 0,this.transitionState(O.Disconnected,i)}onWebSocketError(e,t){t===this._ws&&this.logger.error("WebSocket error occurred.")}onWebSocketMessage(e,t){if(t!==this._ws)return;let r=e.data,i;if(/^(\r\n)+$/.test(r)){this.clearKeepAliveTimeout(),this.configuration.traceSip===!0&&this.logger.log("Received WebSocket message with CRLF Keep Alive response");return}if(!r){this.logger.warn("Received empty message, discarding...");return}if(typeof r!="string"){try{i=new TextDecoder().decode(new Uint8Array(r))}catch(s){this.logger.error(s.toString()),this.logger.error("Received WebSocket binary message failed to be converted into string, message discarded");return}this.configuration.traceSip===!0&&this.logger.log(`Received WebSocket binary message:
@@ -55,11 +55,11 @@ var WebCall=(()=>{var Gn=Object.create;var Yt=Object.defineProperty;var Vn=Objec
55
55
  `+i+`
56
56
  `);if(this.state!==O.Connected){this.logger.warn("Received message while not connected, discarding...");return}if(this.onMessage)try{this.onMessage(i)}catch(s){throw this.logger.error(s.toString()),this.logger.error("Exception thrown by onMessage callback"),s}}onWebSocketOpen(e,t){t===this._ws&&this._state===O.Connecting&&(this.logger.log(`WebSocket opened ${this.server}`),this.transitionState(O.Connected))}transitionLoopDetectedError(e){let t="A state transition loop has been detected.";return t+=` An attempt to transition from ${this._state} to ${e} before the prior transition completed.`,t+=" Perhaps you are synchronously calling connect() or disconnect() from a callback or state change handler?",this.logger.error(t),new ze("Loop detected.")}transitionState(e,t){let r=()=>{throw new Error(`Invalid state transition from ${this._state} to ${e}`)};if(this.transitioningState)throw this.transitionLoopDetectedError(e);switch(this.transitioningState=!0,this._state){case O.Connecting:e!==O.Connected&&e!==O.Disconnecting&&e!==O.Disconnected&&r();break;case O.Connected:e!==O.Disconnecting&&e!==O.Disconnected&&r();break;case O.Disconnecting:e!==O.Connecting&&e!==O.Disconnected&&r();break;case O.Disconnected:e!==O.Connecting&&r();break;default:throw new Error("Unknown state.")}let i=this._state;this._state=e;let s=this.connectResolve,o=this.connectReject;i===O.Connecting&&(this.connectPromise=void 0,this.connectResolve=void 0,this.connectReject=void 0);let a=this.disconnectResolve,d=this.disconnectReject;if(i===O.Disconnecting&&(this.disconnectPromise=void 0,this.disconnectResolve=void 0,this.disconnectReject=void 0),this.connectTimeout&&(clearTimeout(this.connectTimeout),this.connectTimeout=void 0),this.logger.log(`Transitioned from ${i} to ${this._state}`),this._stateEventEmitter.emit(this._state),e===O.Connected&&(this.startSendingKeepAlives(),this.onConnect))try{this.onConnect()}catch(h){throw this.logger.error(h.toString()),this.logger.error("Exception thrown by onConnect callback"),h}if(i===O.Connected&&(this.stopSendingKeepAlives(),this.onDisconnect))try{t?this.onDisconnect(t):this.onDisconnect()}catch(h){throw this.logger.error(h.toString()),this.logger.error("Exception thrown by onDisconnect callback"),h}if(i===O.Connecting){if(!s)throw new Error("Connect resolve undefined.");if(!o)throw new Error("Connect reject undefined.");e===O.Connected?s():o(t||new Error("Connect aborted."))}if(i===O.Disconnecting){if(!a)throw new Error("Disconnect resolve undefined.");if(!d)throw new Error("Disconnect reject undefined.");e===O.Disconnected?a():d(t||new Error("Disconnect aborted."))}this.transitioningState=!1}clearKeepAliveTimeout(){this.keepAliveDebounceTimeout&&clearTimeout(this.keepAliveDebounceTimeout),this.keepAliveDebounceTimeout=void 0}sendKeepAlive(){return this.keepAliveDebounceTimeout?Promise.resolve():(this.keepAliveDebounceTimeout=setTimeout(()=>{this.clearKeepAliveTimeout()},this.configuration.keepAliveDebounce*1e3),this.send(`\r
57
57
  \r
58
- `))}startSendingKeepAlives(){let e=t=>{let r=t*.8;return 1e3*(Math.random()*(t-r)+r)};this.configuration.keepAliveInterval&&!this.keepAliveInterval&&(this.keepAliveInterval=setInterval(()=>{this.sendKeepAlive(),this.startSendingKeepAlives()},e(this.configuration.keepAliveInterval)))}stopSendingKeepAlives(){this.keepAliveInterval&&clearInterval(this.keepAliveInterval),this.keepAliveDebounceTimeout&&clearTimeout(this.keepAliveDebounceTimeout),this.keepAliveInterval=void 0,this.keepAliveDebounceTimeout=void 0}};Be.defaultOptions={server:"",connectionTimeout:5,keepAliveInterval:0,keepAliveDebounce:10,traceSip:!0};var ce=class{constructor(e={}){if(this._publishers={},this._registerers={},this._sessions={},this._subscriptions={},this._state=X.Stopped,this._stateEventEmitter=new He,this.delegate=e.delegate,this.options=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},ce.defaultOptions()),{sipjsId:Ue(5)}),{uri:new ue("sip","anonymous."+Ue(6),"anonymous.invalid")}),{viaHost:Ue(12)+".invalid"}),ce.stripUndefinedProperties(e)),this.options.hackIpInContact)if(typeof this.options.hackIpInContact=="boolean"&&this.options.hackIpInContact){let i=Math.floor(Math.random()*254+1);this.options.viaHost="192.0.2."+i}else this.options.hackIpInContact&&(this.options.viaHost=this.options.hackIpInContact);switch(this.loggerFactory=new xr,this.logger=this.loggerFactory.getLogger("sip.UserAgent"),this.loggerFactory.builtinEnabled=this.options.logBuiltinEnabled,this.loggerFactory.connector=this.options.logConnector,this.options.logLevel){case"error":this.loggerFactory.level=ie.error;break;case"warn":this.loggerFactory.level=ie.warn;break;case"log":this.loggerFactory.level=ie.log;break;case"debug":this.loggerFactory.level=ie.debug;break;default:break}if(this.options.logConfiguration&&(this.logger.log("Configuration:"),Object.keys(this.options).forEach(t=>{let r=this.options[t];switch(t){case"uri":case"sessionDescriptionHandlerFactory":this.logger.log("\xB7 "+t+": "+r);break;case"authorizationPassword":this.logger.log("\xB7 "+t+": NOT SHOWN");break;case"transportConstructor":this.logger.log("\xB7 "+t+": "+r.name);break;default:this.logger.log("\xB7 "+t+": "+JSON.stringify(r))}})),this.options.transportOptions){let t=this.options.transportOptions,r=t.maxReconnectionAttempts,i=t.reconnectionTimeout;if(r!==void 0){let s='The transport option "maxReconnectionAttempts" as has apparently been specified and has been deprecated. It will no longer be available starting with SIP.js release 0.16.0. Please update accordingly.';this.logger.warn(s)}if(i!==void 0){let s='The transport option "reconnectionTimeout" as has apparently been specified and has been deprecated. It will no longer be available starting with SIP.js release 0.16.0. Please update accordingly.';this.logger.warn(s)}e.reconnectionDelay===void 0&&i!==void 0&&(this.options.reconnectionDelay=i),e.reconnectionAttempts===void 0&&r!==void 0&&(this.options.reconnectionAttempts=r)}if(e.reconnectionDelay!==void 0){let t='The user agent option "reconnectionDelay" as has apparently been specified and has been deprecated. It will no longer be available starting with SIP.js release 0.16.0. Please update accordingly.';this.logger.warn(t)}if(e.reconnectionAttempts!==void 0){let t='The user agent option "reconnectionAttempts" as has apparently been specified and has been deprecated. It will no longer be available starting with SIP.js release 0.16.0. Please update accordingly.';this.logger.warn(t)}if(this._transport=new this.options.transportConstructor(this.getLogger("sip.Transport"),this.options.transportOptions),this.initTransportCallbacks(),this._contact=this.initContact(),this._instanceId=this.options.instanceId?this.options.instanceId:ce.newUUID(),W.parse(this._instanceId,"uuid")===-1)throw new Error("Invalid instanceId.");this._userAgentCore=this.initCore()}static makeURI(e){return W.URIParse(e)}static defaultOptions(){return{allowLegacyNotifications:!1,authorizationHa1:"",authorizationPassword:"",authorizationUsername:"",delegate:{},contactName:"",contactParams:{transport:"ws"},displayName:"",forceRport:!1,gracefulShutdown:!0,hackAllowUnregisteredOptionTags:!1,hackIpInContact:!1,hackViaTcp:!1,instanceId:"",instanceIdAlwaysAdded:!1,logBuiltinEnabled:!0,logConfiguration:!0,logConnector:()=>{},logLevel:"log",noAnswerTimeout:60,preloadedRouteSet:[],reconnectionAttempts:0,reconnectionDelay:4,sendInitialProvisionalResponse:!0,sessionDescriptionHandlerFactory:Mi(),sessionDescriptionHandlerFactoryOptions:{},sipExtension100rel:Te.Unsupported,sipExtensionReplaces:Te.Unsupported,sipExtensionExtraSupported:[],sipjsId:"",transportConstructor:Be,transportOptions:{},uri:new ue("sip","anonymous","anonymous.invalid"),userAgentString:"SIP.js/"+Mn,viaHost:""}}static newUUID(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,t=>{let r=Math.floor(Math.random()*16);return(t==="x"?r:r%4+8).toString(16)})}static stripUndefinedProperties(e){return Object.keys(e).reduce((t,r)=>(e[r]!==void 0&&(t[r]=e[r]),t),{})}get configuration(){return this.options}get contact(){return this._contact}get instanceId(){return this._instanceId}get state(){return this._state}get stateChange(){return this._stateEventEmitter}get transport(){return this._transport}get userAgentCore(){return this._userAgentCore}getLogger(e,t){return this.loggerFactory.getLogger(e,t)}getLoggerFactory(){return this.loggerFactory}isConnected(){return this.transport.isConnected()}reconnect(){return this.state===X.Stopped?Promise.reject(new Error("User agent stopped.")):Promise.resolve().then(()=>this.transport.connect())}start(){return this.state===X.Started?(this.logger.warn("User agent already started"),Promise.resolve()):(this.logger.log(`Starting ${this.configuration.uri}`),this.transitionState(X.Started),this.transport.connect())}async stop(){if(this.state===X.Stopped)return this.logger.warn("User agent already stopped"),Promise.resolve();if(this.logger.log(`Stopping ${this.configuration.uri}`),!this.options.gracefulShutdown)return this.logger.log("Dispose of transport"),this.transport.dispose().catch(a=>{throw this.logger.error(a.message),a}),this.logger.log("Dispose of core"),this.userAgentCore.dispose(),this._publishers={},this._registerers={},this._sessions={},this._subscriptions={},this.transitionState(X.Stopped),Promise.resolve();let e=Object.assign({},this._publishers),t=Object.assign({},this._registerers),r=Object.assign({},this._sessions),i=Object.assign({},this._subscriptions),s=this.transport,o=this.userAgentCore;this.logger.log("Dispose of registerers");for(let a in t)t[a]&&await t[a].dispose().catch(d=>{throw this.logger.error(d.message),delete this._registerers[a],d});this.logger.log("Dispose of sessions");for(let a in r)r[a]&&await r[a].dispose().catch(d=>{throw this.logger.error(d.message),delete this._sessions[a],d});this.logger.log("Dispose of subscriptions");for(let a in i)i[a]&&await i[a].dispose().catch(d=>{throw this.logger.error(d.message),delete this._subscriptions[a],d});this.logger.log("Dispose of publishers");for(let a in e)e[a]&&await e[a].dispose().catch(d=>{throw this.logger.error(d.message),delete this._publishers[a],d});this.logger.log("Dispose of transport"),await s.dispose().catch(a=>{throw this.logger.error(a.message),a}),this.logger.log("Dispose of core"),o.dispose(),this.transitionState(X.Stopped)}_makeInviter(e,t){return new tt(this,e,t)}attemptReconnection(e=1){let t=this.options.reconnectionAttempts,r=this.options.reconnectionDelay;if(e>t){this.logger.log("Maximum reconnection attempts reached");return}this.logger.log(`Reconnection attempt ${e} of ${t} - trying`),setTimeout(()=>{this.reconnect().then(()=>{this.logger.log(`Reconnection attempt ${e} of ${t} - succeeded`)}).catch(i=>{this.logger.error(i.message),this.logger.log(`Reconnection attempt ${e} of ${t} - failed`),this.attemptReconnection(++e)})},e===1?0:r*1e3)}initContact(){let e=this.options.contactName!==""?this.options.contactName:Ue(8),t=this.options.contactParams;return{pubGruu:void 0,tempGruu:void 0,uri:new ue("sip",e,this.options.viaHost,void 0,t),toString:(i={})=>{let s=i.anonymous||!1,o=i.outbound||!1,a=i.register||!1,d="<";return s?d+=this.contact.tempGruu||`sip:anonymous@anonymous.invalid;transport=${t.transport?t.transport:"ws"}`:a?d+=this.contact.uri:d+=this.contact.pubGruu||this.contact.uri,o&&(d+=";ob"),d+=">",this.options.instanceIdAlwaysAdded&&(d+=';+sip.instance="<urn:uuid:'+this._instanceId+'>"'),d}}}initCore(){let e=[];e.push("outbound"),this.options.sipExtension100rel===Te.Supported&&e.push("100rel"),this.options.sipExtensionReplaces===Te.Supported&&e.push("replaces"),this.options.sipExtensionExtraSupported&&e.push(...this.options.sipExtensionExtraSupported),this.options.hackAllowUnregisteredOptionTags||(e=e.filter(s=>Bn[s])),e=Array.from(new Set(e));let t=e.slice();(this.contact.pubGruu||this.contact.tempGruu)&&t.push("gruu");let r={aor:this.options.uri,contact:this.contact,displayName:this.options.displayName,loggerFactory:this.loggerFactory,hackViaTcp:this.options.hackViaTcp,routeSet:this.options.preloadedRouteSet,supportedOptionTags:e,supportedOptionTagsResponse:t,sipjsId:this.options.sipjsId,userAgentHeaderFieldValue:this.options.userAgentString,viaForceRport:this.options.forceRport,viaHost:this.options.viaHost,authenticationFactory:()=>{let s=this.options.authorizationUsername?this.options.authorizationUsername:this.options.uri.user,o=this.options.authorizationPassword?this.options.authorizationPassword:void 0,a=this.options.authorizationHa1?this.options.authorizationHa1:void 0;return new br(this.getLoggerFactory(),a,s,o)},transportAccessor:()=>this.transport},i={onInvite:s=>{var o;let a=new Ge(this,s);if(s.delegate={onCancel:d=>{a._onCancel(d)},onTransportError:d=>{this.logger.error("A transport error has occurred while handling an incoming INVITE request.")}},s.trying(),this.options.sipExtensionReplaces!==Te.Unsupported){let h=s.message.parseHeader("replaces");if(h){let l=h.call_id;if(typeof l!="string")throw new Error("Type of call id is not string");let u=h.replaces_to_tag;if(typeof u!="string")throw new Error("Type of to tag is not string");let T=h.replaces_from_tag;if(typeof T!="string")throw new Error("type of from tag is not string");let A=l+u+T,_=this.userAgentCore.dialogs.get(A);if(!_){a.reject({statusCode:481});return}if(!_.early&&h.early_only===!0){a.reject({statusCode:486});return}let $=this._sessions[l+T]||this._sessions[l+u]||void 0;if(!$)throw new Error("Session does not exist.");a._replacee=$}}if(!((o=this.delegate)===null||o===void 0)&&o.onInvite){if(a.autoSendAnInitialProvisionalResponse){a.progress().then(()=>{var d;if(((d=this.delegate)===null||d===void 0?void 0:d.onInvite)===void 0)throw new Error("onInvite undefined.");this.delegate.onInvite(a)});return}this.delegate.onInvite(a);return}a.reject({statusCode:486})},onMessage:s=>{if(this.delegate&&this.delegate.onMessage){let o=new yt(s);this.delegate.onMessage(o)}else s.accept()},onNotify:s=>{if(this.delegate&&this.delegate.onNotify){let o=new lt(s);this.delegate.onNotify(o)}else this.options.allowLegacyNotifications?s.accept():s.reject({statusCode:481})},onRefer:s=>{this.logger.warn("Received an out of dialog REFER request"),this.delegate&&this.delegate.onReferRequest?this.delegate.onReferRequest(s):s.reject({statusCode:405})},onRegister:s=>{this.logger.warn("Received an out of dialog REGISTER request"),this.delegate&&this.delegate.onRegisterRequest?this.delegate.onRegisterRequest(s):s.reject({statusCode:405})},onSubscribe:s=>{this.logger.warn("Received an out of dialog SUBSCRIBE request"),this.delegate&&this.delegate.onSubscribeRequest?this.delegate.onSubscribeRequest(s):s.reject({statusCode:405})}};return new Vr(r,i)}initTransportCallbacks(){this.transport.onConnect=()=>this.onTransportConnect(),this.transport.onDisconnect=e=>this.onTransportDisconnect(e),this.transport.onMessage=e=>this.onTransportMessage(e)}onTransportConnect(){this.state!==X.Stopped&&this.delegate&&this.delegate.onConnect&&this.delegate.onConnect()}onTransportDisconnect(e){this.state!==X.Stopped&&(this.delegate&&this.delegate.onDisconnect&&this.delegate.onDisconnect(e),e&&this.options.reconnectionAttempts>0&&this.attemptReconnection())}onTransportMessage(e){let t=jt.parseMessage(e,this.getLogger("sip.Parser"));if(!t){this.logger.warn("Failed to parse incoming message. Dropping.");return}if(this.state===X.Stopped&&t instanceof Pe){this.logger.warn(`Received ${t.method} request while stopped. Dropping.`);return}let r=()=>{let i=["from","to","call_id","cseq","via"];for(let s of i)if(!t.hasHeader(s))return this.logger.warn(`Missing mandatory header field : ${s}.`),!1;return!0};if(t instanceof Pe){if(!r()){this.logger.warn("Request missing mandatory header field. Dropping.");return}if(!t.toTag&&t.callId.substr(0,5)===this.options.sipjsId){this.userAgentCore.replyStateless(t,{statusCode:482});return}let i=Qe(t.body),s=t.getHeader("content-length");if(s&&i<Number(s)){this.userAgentCore.replyStateless(t,{statusCode:400});return}}if(t instanceof me){if(!r()){this.logger.warn("Response missing mandatory header field. Dropping.");return}if(t.getHeaders("via").length>1){this.logger.warn("More than one Via header field present in the response. Dropping.");return}if(t.via.host!==this.options.viaHost||t.via.port!==void 0){this.logger.warn("Via sent-by in the response does not match UA Via host value. Dropping.");return}let i=Qe(t.body),s=t.getHeader("content-length");if(s&&i<Number(s)){this.logger.warn("Message body length is lower than the value in Content-Length header field. Dropping.");return}}if(t instanceof Pe){this.userAgentCore.receiveIncomingRequestFromTransport(t);return}if(t instanceof me){this.userAgentCore.receiveIncomingResponseFromTransport(t);return}throw new Error("Invalid message type.")}transitionState(e,t){let r=()=>{throw new Error(`Invalid state transition from ${this._state} to ${e}`)};switch(this._state){case X.Started:e!==X.Stopped&&r();break;case X.Stopped:e!==X.Started&&r();break;default:throw new Error("Unknown state.")}this.logger.log(`Transitioned from ${this._state} to ${e}`),this._state=e,this._stateEventEmitter.emit(this._state)}};var Wr={};Wi(Wr,{SessionDescriptionHandler:()=>re,SessionManager:()=>dt,SimpleUser:()=>Bi,Transport:()=>Be,WebAudioSessionDescriptionHandler:()=>ge,addMidLines:()=>za,cleanJitsiSdpImageattr:()=>Va,defaultManagedSessionFactory:()=>Ui,defaultMediaStreamFactory:()=>qi,defaultPeerConnectionConfiguration:()=>Li,defaultSessionDescriptionHandlerFactory:()=>Mi,holdModifier:()=>Za,startLocalConference:()=>Xa,stripG722:()=>Wa,stripRtpPayload:()=>Ya,stripTcpCandidates:()=>Ka,stripTelephoneEvent:()=>Ga,stripVideo:()=>Ja});var Fi=(n,e)=>{let t=[],r=n.split(/\r\n/),i;for(let s=0;s<r.length;){let o=r[s];if(/^m=(?:audio|video)/.test(o))i={index:s,stripped:[]},t.push(i);else if(i){let a=/^a=rtpmap:(\d+) ([^/]+)\//.exec(o);if(a&&e===a[2]){r.splice(s,1),i.stripped.push(a[1]);continue}}s++}for(let s of t){let o=r[s.index].split(" ");for(let a=3;a<o.length;){if(s.stripped.indexOf(o[a])!==-1){o.splice(a,1);continue}a++}r[s.index]=o.join(" ")}return r.join(`\r
59
- `)},ja=(n,e)=>{let t=new RegExp("m="+e+".*$","gm"),r=new RegExp("^a=group:.*$","gm");if(t.test(n)){let i;n=n.split(/^m=/gm).filter(o=>{if(o.substr(0,e.length)===e){if(i=o.match(/^a=mid:.*$/gm),i){let a=i[0].match(/:.+$/g);a&&(i=a[0].substr(1))}return!1}return!0}).join("m=");let s=n.match(r);if(s&&s.length===1){let o=s[0],a=new RegExp(" *"+i+"[^ ]*","g");o=o.replace(a,""),n=n.split(r).join(o)}}return n};function Ka(n){return n.sdp=(n.sdp||"").replace(/^a=candidate:\d+ \d+ tcp .*?\r\n/img,""),Promise.resolve(n)}function Ga(n){return n.sdp=Fi(n.sdp||"","telephone-event"),Promise.resolve(n)}function Va(n){return n.sdp=(n.sdp||"").replace(/^(a=imageattr:.*?)(x|y)=\[0-/gm,"$1$2=[1:"),Promise.resolve(n)}function Wa(n){return n.sdp=Fi(n.sdp||"","G722"),Promise.resolve(n)}function Ya(n){return e=>(e.sdp=Fi(e.sdp||"",n),Promise.resolve(e))}function Ja(n){return n.sdp=ja(n.sdp||"","video"),Promise.resolve(n)}function za(n){let e=n.sdp||"";if(e.search(/^a=mid.*$/gm)===-1){let t=e.match(/^m=.*$/gm),r=e.split(/^m=.*$/gm);t&&t.forEach((i,s)=>{t[s]=i+`
58
+ `))}startSendingKeepAlives(){let e=t=>{let r=t*.8;return 1e3*(Math.random()*(t-r)+r)};this.configuration.keepAliveInterval&&!this.keepAliveInterval&&(this.keepAliveInterval=setInterval(()=>{this.sendKeepAlive(),this.startSendingKeepAlives()},e(this.configuration.keepAliveInterval)))}stopSendingKeepAlives(){this.keepAliveInterval&&clearInterval(this.keepAliveInterval),this.keepAliveDebounceTimeout&&clearTimeout(this.keepAliveDebounceTimeout),this.keepAliveInterval=void 0,this.keepAliveDebounceTimeout=void 0}};Be.defaultOptions={server:"",connectionTimeout:5,keepAliveInterval:0,keepAliveDebounce:10,traceSip:!0};var ce=class{constructor(e={}){if(this._publishers={},this._registerers={},this._sessions={},this._subscriptions={},this._state=X.Stopped,this._stateEventEmitter=new He,this.delegate=e.delegate,this.options=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},ce.defaultOptions()),{sipjsId:Ue(5)}),{uri:new ue("sip","anonymous."+Ue(6),"anonymous.invalid")}),{viaHost:Ue(12)+".invalid"}),ce.stripUndefinedProperties(e)),this.options.hackIpInContact)if(typeof this.options.hackIpInContact=="boolean"&&this.options.hackIpInContact){let i=Math.floor(Math.random()*254+1);this.options.viaHost="192.0.2."+i}else this.options.hackIpInContact&&(this.options.viaHost=this.options.hackIpInContact);switch(this.loggerFactory=new xr,this.logger=this.loggerFactory.getLogger("sip.UserAgent"),this.loggerFactory.builtinEnabled=this.options.logBuiltinEnabled,this.loggerFactory.connector=this.options.logConnector,this.options.logLevel){case"error":this.loggerFactory.level=ie.error;break;case"warn":this.loggerFactory.level=ie.warn;break;case"log":this.loggerFactory.level=ie.log;break;case"debug":this.loggerFactory.level=ie.debug;break;default:break}if(this.options.logConfiguration&&(this.logger.log("Configuration:"),Object.keys(this.options).forEach(t=>{let r=this.options[t];switch(t){case"uri":case"sessionDescriptionHandlerFactory":this.logger.log("\xB7 "+t+": "+r);break;case"authorizationPassword":this.logger.log("\xB7 "+t+": NOT SHOWN");break;case"transportConstructor":this.logger.log("\xB7 "+t+": "+r.name);break;default:this.logger.log("\xB7 "+t+": "+JSON.stringify(r))}})),this.options.transportOptions){let t=this.options.transportOptions,r=t.maxReconnectionAttempts,i=t.reconnectionTimeout;if(r!==void 0){let s='The transport option "maxReconnectionAttempts" as has apparently been specified and has been deprecated. It will no longer be available starting with SIP.js release 0.16.0. Please update accordingly.';this.logger.warn(s)}if(i!==void 0){let s='The transport option "reconnectionTimeout" as has apparently been specified and has been deprecated. It will no longer be available starting with SIP.js release 0.16.0. Please update accordingly.';this.logger.warn(s)}e.reconnectionDelay===void 0&&i!==void 0&&(this.options.reconnectionDelay=i),e.reconnectionAttempts===void 0&&r!==void 0&&(this.options.reconnectionAttempts=r)}if(e.reconnectionDelay!==void 0){let t='The user agent option "reconnectionDelay" as has apparently been specified and has been deprecated. It will no longer be available starting with SIP.js release 0.16.0. Please update accordingly.';this.logger.warn(t)}if(e.reconnectionAttempts!==void 0){let t='The user agent option "reconnectionAttempts" as has apparently been specified and has been deprecated. It will no longer be available starting with SIP.js release 0.16.0. Please update accordingly.';this.logger.warn(t)}if(this._transport=new this.options.transportConstructor(this.getLogger("sip.Transport"),this.options.transportOptions),this.initTransportCallbacks(),this._contact=this.initContact(),this._instanceId=this.options.instanceId?this.options.instanceId:ce.newUUID(),W.parse(this._instanceId,"uuid")===-1)throw new Error("Invalid instanceId.");this._userAgentCore=this.initCore()}static makeURI(e){return W.URIParse(e)}static defaultOptions(){return{allowLegacyNotifications:!1,authorizationHa1:"",authorizationPassword:"",authorizationUsername:"",delegate:{},contactName:"",contactParams:{transport:"ws"},displayName:"",forceRport:!1,gracefulShutdown:!0,hackAllowUnregisteredOptionTags:!1,hackIpInContact:!1,hackViaTcp:!1,instanceId:"",instanceIdAlwaysAdded:!1,logBuiltinEnabled:!0,logConfiguration:!0,logConnector:()=>{},logLevel:"log",noAnswerTimeout:60,preloadedRouteSet:[],reconnectionAttempts:0,reconnectionDelay:4,sendInitialProvisionalResponse:!0,sessionDescriptionHandlerFactory:Fi(),sessionDescriptionHandlerFactoryOptions:{},sipExtension100rel:Te.Unsupported,sipExtensionReplaces:Te.Unsupported,sipExtensionExtraSupported:[],sipjsId:"",transportConstructor:Be,transportOptions:{},uri:new ue("sip","anonymous","anonymous.invalid"),userAgentString:"SIP.js/"+Mn,viaHost:""}}static newUUID(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,t=>{let r=Math.floor(Math.random()*16);return(t==="x"?r:r%4+8).toString(16)})}static stripUndefinedProperties(e){return Object.keys(e).reduce((t,r)=>(e[r]!==void 0&&(t[r]=e[r]),t),{})}get configuration(){return this.options}get contact(){return this._contact}get instanceId(){return this._instanceId}get state(){return this._state}get stateChange(){return this._stateEventEmitter}get transport(){return this._transport}get userAgentCore(){return this._userAgentCore}getLogger(e,t){return this.loggerFactory.getLogger(e,t)}getLoggerFactory(){return this.loggerFactory}isConnected(){return this.transport.isConnected()}reconnect(){return this.state===X.Stopped?Promise.reject(new Error("User agent stopped.")):Promise.resolve().then(()=>this.transport.connect())}start(){return this.state===X.Started?(this.logger.warn("User agent already started"),Promise.resolve()):(this.logger.log(`Starting ${this.configuration.uri}`),this.transitionState(X.Started),this.transport.connect())}async stop(){if(this.state===X.Stopped)return this.logger.warn("User agent already stopped"),Promise.resolve();if(this.logger.log(`Stopping ${this.configuration.uri}`),!this.options.gracefulShutdown)return this.logger.log("Dispose of transport"),this.transport.dispose().catch(a=>{throw this.logger.error(a.message),a}),this.logger.log("Dispose of core"),this.userAgentCore.dispose(),this._publishers={},this._registerers={},this._sessions={},this._subscriptions={},this.transitionState(X.Stopped),Promise.resolve();let e=Object.assign({},this._publishers),t=Object.assign({},this._registerers),r=Object.assign({},this._sessions),i=Object.assign({},this._subscriptions),s=this.transport,o=this.userAgentCore;this.logger.log("Dispose of registerers");for(let a in t)t[a]&&await t[a].dispose().catch(d=>{throw this.logger.error(d.message),delete this._registerers[a],d});this.logger.log("Dispose of sessions");for(let a in r)r[a]&&await r[a].dispose().catch(d=>{throw this.logger.error(d.message),delete this._sessions[a],d});this.logger.log("Dispose of subscriptions");for(let a in i)i[a]&&await i[a].dispose().catch(d=>{throw this.logger.error(d.message),delete this._subscriptions[a],d});this.logger.log("Dispose of publishers");for(let a in e)e[a]&&await e[a].dispose().catch(d=>{throw this.logger.error(d.message),delete this._publishers[a],d});this.logger.log("Dispose of transport"),await s.dispose().catch(a=>{throw this.logger.error(a.message),a}),this.logger.log("Dispose of core"),o.dispose(),this.transitionState(X.Stopped)}_makeInviter(e,t){return new tt(this,e,t)}attemptReconnection(e=1){let t=this.options.reconnectionAttempts,r=this.options.reconnectionDelay;if(e>t){this.logger.log("Maximum reconnection attempts reached");return}this.logger.log(`Reconnection attempt ${e} of ${t} - trying`),setTimeout(()=>{this.reconnect().then(()=>{this.logger.log(`Reconnection attempt ${e} of ${t} - succeeded`)}).catch(i=>{this.logger.error(i.message),this.logger.log(`Reconnection attempt ${e} of ${t} - failed`),this.attemptReconnection(++e)})},e===1?0:r*1e3)}initContact(){let e=this.options.contactName!==""?this.options.contactName:Ue(8),t=this.options.contactParams;return{pubGruu:void 0,tempGruu:void 0,uri:new ue("sip",e,this.options.viaHost,void 0,t),toString:(i={})=>{let s=i.anonymous||!1,o=i.outbound||!1,a=i.register||!1,d="<";return s?d+=this.contact.tempGruu||`sip:anonymous@anonymous.invalid;transport=${t.transport?t.transport:"ws"}`:a?d+=this.contact.uri:d+=this.contact.pubGruu||this.contact.uri,o&&(d+=";ob"),d+=">",this.options.instanceIdAlwaysAdded&&(d+=';+sip.instance="<urn:uuid:'+this._instanceId+'>"'),d}}}initCore(){let e=[];e.push("outbound"),this.options.sipExtension100rel===Te.Supported&&e.push("100rel"),this.options.sipExtensionReplaces===Te.Supported&&e.push("replaces"),this.options.sipExtensionExtraSupported&&e.push(...this.options.sipExtensionExtraSupported),this.options.hackAllowUnregisteredOptionTags||(e=e.filter(s=>Bn[s])),e=Array.from(new Set(e));let t=e.slice();(this.contact.pubGruu||this.contact.tempGruu)&&t.push("gruu");let r={aor:this.options.uri,contact:this.contact,displayName:this.options.displayName,loggerFactory:this.loggerFactory,hackViaTcp:this.options.hackViaTcp,routeSet:this.options.preloadedRouteSet,supportedOptionTags:e,supportedOptionTagsResponse:t,sipjsId:this.options.sipjsId,userAgentHeaderFieldValue:this.options.userAgentString,viaForceRport:this.options.forceRport,viaHost:this.options.viaHost,authenticationFactory:()=>{let s=this.options.authorizationUsername?this.options.authorizationUsername:this.options.uri.user,o=this.options.authorizationPassword?this.options.authorizationPassword:void 0,a=this.options.authorizationHa1?this.options.authorizationHa1:void 0;return new br(this.getLoggerFactory(),a,s,o)},transportAccessor:()=>this.transport},i={onInvite:s=>{var o;let a=new Ge(this,s);if(s.delegate={onCancel:d=>{a._onCancel(d)},onTransportError:d=>{this.logger.error("A transport error has occurred while handling an incoming INVITE request.")}},s.trying(),this.options.sipExtensionReplaces!==Te.Unsupported){let h=s.message.parseHeader("replaces");if(h){let l=h.call_id;if(typeof l!="string")throw new Error("Type of call id is not string");let u=h.replaces_to_tag;if(typeof u!="string")throw new Error("Type of to tag is not string");let T=h.replaces_from_tag;if(typeof T!="string")throw new Error("type of from tag is not string");let A=l+u+T,_=this.userAgentCore.dialogs.get(A);if(!_){a.reject({statusCode:481});return}if(!_.early&&h.early_only===!0){a.reject({statusCode:486});return}let $=this._sessions[l+T]||this._sessions[l+u]||void 0;if(!$)throw new Error("Session does not exist.");a._replacee=$}}if(!((o=this.delegate)===null||o===void 0)&&o.onInvite){if(a.autoSendAnInitialProvisionalResponse){a.progress().then(()=>{var d;if(((d=this.delegate)===null||d===void 0?void 0:d.onInvite)===void 0)throw new Error("onInvite undefined.");this.delegate.onInvite(a)});return}this.delegate.onInvite(a);return}a.reject({statusCode:486})},onMessage:s=>{if(this.delegate&&this.delegate.onMessage){let o=new yt(s);this.delegate.onMessage(o)}else s.accept()},onNotify:s=>{if(this.delegate&&this.delegate.onNotify){let o=new lt(s);this.delegate.onNotify(o)}else this.options.allowLegacyNotifications?s.accept():s.reject({statusCode:481})},onRefer:s=>{this.logger.warn("Received an out of dialog REFER request"),this.delegate&&this.delegate.onReferRequest?this.delegate.onReferRequest(s):s.reject({statusCode:405})},onRegister:s=>{this.logger.warn("Received an out of dialog REGISTER request"),this.delegate&&this.delegate.onRegisterRequest?this.delegate.onRegisterRequest(s):s.reject({statusCode:405})},onSubscribe:s=>{this.logger.warn("Received an out of dialog SUBSCRIBE request"),this.delegate&&this.delegate.onSubscribeRequest?this.delegate.onSubscribeRequest(s):s.reject({statusCode:405})}};return new Vr(r,i)}initTransportCallbacks(){this.transport.onConnect=()=>this.onTransportConnect(),this.transport.onDisconnect=e=>this.onTransportDisconnect(e),this.transport.onMessage=e=>this.onTransportMessage(e)}onTransportConnect(){this.state!==X.Stopped&&this.delegate&&this.delegate.onConnect&&this.delegate.onConnect()}onTransportDisconnect(e){this.state!==X.Stopped&&(this.delegate&&this.delegate.onDisconnect&&this.delegate.onDisconnect(e),e&&this.options.reconnectionAttempts>0&&this.attemptReconnection())}onTransportMessage(e){let t=jt.parseMessage(e,this.getLogger("sip.Parser"));if(!t){this.logger.warn("Failed to parse incoming message. Dropping.");return}if(this.state===X.Stopped&&t instanceof Pe){this.logger.warn(`Received ${t.method} request while stopped. Dropping.`);return}let r=()=>{let i=["from","to","call_id","cseq","via"];for(let s of i)if(!t.hasHeader(s))return this.logger.warn(`Missing mandatory header field : ${s}.`),!1;return!0};if(t instanceof Pe){if(!r()){this.logger.warn("Request missing mandatory header field. Dropping.");return}if(!t.toTag&&t.callId.substr(0,5)===this.options.sipjsId){this.userAgentCore.replyStateless(t,{statusCode:482});return}let i=Qe(t.body),s=t.getHeader("content-length");if(s&&i<Number(s)){this.userAgentCore.replyStateless(t,{statusCode:400});return}}if(t instanceof me){if(!r()){this.logger.warn("Response missing mandatory header field. Dropping.");return}if(t.getHeaders("via").length>1){this.logger.warn("More than one Via header field present in the response. Dropping.");return}if(t.via.host!==this.options.viaHost||t.via.port!==void 0){this.logger.warn("Via sent-by in the response does not match UA Via host value. Dropping.");return}let i=Qe(t.body),s=t.getHeader("content-length");if(s&&i<Number(s)){this.logger.warn("Message body length is lower than the value in Content-Length header field. Dropping.");return}}if(t instanceof Pe){this.userAgentCore.receiveIncomingRequestFromTransport(t);return}if(t instanceof me){this.userAgentCore.receiveIncomingResponseFromTransport(t);return}throw new Error("Invalid message type.")}transitionState(e,t){let r=()=>{throw new Error(`Invalid state transition from ${this._state} to ${e}`)};switch(this._state){case X.Started:e!==X.Stopped&&r();break;case X.Stopped:e!==X.Started&&r();break;default:throw new Error("Unknown state.")}this.logger.log(`Transitioned from ${this._state} to ${e}`),this._state=e,this._stateEventEmitter.emit(this._state)}};var Wr={};Yi(Wr,{SessionDescriptionHandler:()=>re,SessionManager:()=>dt,SimpleUser:()=>ji,Transport:()=>Be,WebAudioSessionDescriptionHandler:()=>ge,addMidLines:()=>za,cleanJitsiSdpImageattr:()=>Va,defaultManagedSessionFactory:()=>Bi,defaultMediaStreamFactory:()=>Li,defaultPeerConnectionConfiguration:()=>Mi,defaultSessionDescriptionHandlerFactory:()=>Fi,holdModifier:()=>Za,startLocalConference:()=>Xa,stripG722:()=>Wa,stripRtpPayload:()=>Ya,stripTcpCandidates:()=>Ka,stripTelephoneEvent:()=>Ga,stripVideo:()=>Ja});var Ui=(n,e)=>{let t=[],r=n.split(/\r\n/),i;for(let s=0;s<r.length;){let o=r[s];if(/^m=(?:audio|video)/.test(o))i={index:s,stripped:[]},t.push(i);else if(i){let a=/^a=rtpmap:(\d+) ([^/]+)\//.exec(o);if(a&&e===a[2]){r.splice(s,1),i.stripped.push(a[1]);continue}}s++}for(let s of t){let o=r[s.index].split(" ");for(let a=3;a<o.length;){if(s.stripped.indexOf(o[a])!==-1){o.splice(a,1);continue}a++}r[s.index]=o.join(" ")}return r.join(`\r
59
+ `)},ja=(n,e)=>{let t=new RegExp("m="+e+".*$","gm"),r=new RegExp("^a=group:.*$","gm");if(t.test(n)){let i;n=n.split(/^m=/gm).filter(o=>{if(o.substr(0,e.length)===e){if(i=o.match(/^a=mid:.*$/gm),i){let a=i[0].match(/:.+$/g);a&&(i=a[0].substr(1))}return!1}return!0}).join("m=");let s=n.match(r);if(s&&s.length===1){let o=s[0],a=new RegExp(" *"+i+"[^ ]*","g");o=o.replace(a,""),n=n.split(r).join(o)}}return n};function Ka(n){return n.sdp=(n.sdp||"").replace(/^a=candidate:\d+ \d+ tcp .*?\r\n/img,""),Promise.resolve(n)}function Ga(n){return n.sdp=Ui(n.sdp||"","telephone-event"),Promise.resolve(n)}function Va(n){return n.sdp=(n.sdp||"").replace(/^(a=imageattr:.*?)(x|y)=\[0-/gm,"$1$2=[1:"),Promise.resolve(n)}function Wa(n){return n.sdp=Ui(n.sdp||"","G722"),Promise.resolve(n)}function Ya(n){return e=>(e.sdp=Ui(e.sdp||"",n),Promise.resolve(e))}function Ja(n){return n.sdp=ja(n.sdp||"","video"),Promise.resolve(n)}function za(n){let e=n.sdp||"";if(e.search(/^a=mid.*$/gm)===-1){let t=e.match(/^m=.*$/gm),r=e.split(/^m=.*$/gm);t&&t.forEach((i,s)=>{t[s]=i+`
60
60
  a=mid:`+s}),r.forEach((i,s)=>{t&&t[s]&&(r[s]=i+t[s])}),e=r.join(""),n.sdp=e}return Promise.resolve(n)}function Za(n){if(!n.sdp||!n.type)throw new Error("Invalid SDP");let e=n.sdp,t=n.type;return e&&(/a=(sendrecv|sendonly|recvonly|inactive)/.test(e)?(e=e.replace(/a=sendrecv\r\n/g,`a=sendonly\r
61
61
  `),e=e.replace(/a=recvonly\r\n/g,`a=inactive\r
62
62
  `)):e=e.replace(/(m=[^\r]*\r\n)/g,`$1a=sendonly\r
63
- `)),Promise.resolve({sdp:e,type:t})}function Xa(n){if(n.length<2)throw new Error("Start local conference requires at leaast 2 sessions.");(t=>t.map((r,i)=>t.slice(i+1).map(s=>[r,s])).reduce((r,i)=>r.concat(i),[]))(n.map(t=>t.sessionDescriptionHandler)).forEach(([t,r])=>{if(!(t instanceof ge&&r instanceof ge))throw new Error("Session description handler not instance of SessionManagerSessionDescriptionHandler");t.joinWith(r)})}var ge=class extends re{constructor(e,t,r){super(e,t,r),ge.audioContext||(ge.audioContext=new AudioContext)}enableSenderTracks(e){let t=this.localMediaStreamReal;if(t===void 0)throw new Error("Stream undefined.");t.getAudioTracks().forEach(r=>{r.enabled=e})}initLocalMediaStream(e){if(!ge.audioContext)throw new Error("SessionManagerSessionDescriptionHandler.audioContext undefined.");return this.localMediaStreamReal=e,this.localMediaStreamSourceNode=ge.audioContext.createMediaStreamSource(e),this.localMediaStreamDestinationNode=ge.audioContext.createMediaStreamDestination(),this.localMediaStreamSourceNode.connect(this.localMediaStreamDestinationNode),this.localMediaStreamDestinationNode.stream}joinWith(e){if(!ge.audioContext)throw new Error("SessionManagerSessionDescriptionHandler.audioContext undefined.");let t=ge.audioContext.createMediaStreamSource(this.remoteMediaStream),r=e.localMediaStreamDestinationNode;if(r===void 0)throw new Error("Peer outbound (local) stream local media stream destination is undefined.");t.connect(r);let i=ge.audioContext.createMediaStreamSource(e.remoteMediaStream),s=this.localMediaStreamDestinationNode;if(s===void 0)throw new Error("Our outbound (local) stream local media stream destination is undefined.");i.connect(s)}setRealLocalMediaStream(e){if(!ge.audioContext)throw new Error("SessionManagerSessionDescriptionHandler.audioContext undefined.");if(!this.localMediaStreamReal){this.initLocalMediaStream(e);return}if(!this.localMediaStreamDestinationNode||!this.localMediaStreamSourceNode||!this.localMediaStreamReal)throw new Error("Local media stream undefined.");this.localMediaStreamReal=e,this.localMediaStreamSourceNode.disconnect(this.localMediaStreamDestinationNode),this.localMediaStreamSourceNode=ge.audioContext.createMediaStreamSource(e),this.localMediaStreamSourceNode.connect(this.localMediaStreamDestinationNode)}};function Ui(){return(n,e)=>({session:e,held:!1,muted:!1})}var dt=class{constructor(e,t={}){this.managedSessions=[],this.attemptingReconnection=!1,this.optionsPingFailure=!1,this.optionsPingRunning=!1,this.shouldBeConnected=!1,this.shouldBeRegistered=!1,this.delegate=t.delegate,this.options=Object.assign({aor:"",autoStop:!0,delegate:{},iceStopWaitingOnServerReflexive:!1,managedSessionFactory:Ui(),maxSimultaneousSessions:2,media:{},optionsPingInterval:-1,optionsPingRequestURI:"",reconnectionAttempts:3,reconnectionDelay:4,registrationRetry:!1,registrationRetryInterval:3,registerGuard:null,registererOptions:{},registererRegisterOptions:{},sendDTMFUsingSessionDescriptionHandler:!1,userAgentOptions:{}},dt.stripUndefinedProperties(t));let r=Object.assign({},t.userAgentOptions);if(r.transportConstructor||(r.transportConstructor=Be),r.transportOptions||(r.transportOptions={server:e}),!r.uri&&t.aor){let i=ce.makeURI(t.aor);if(!i)throw new Error(`Failed to create valid URI from ${t.aor}`);r.uri=i}if(this.userAgent=new ce(r),this.userAgent.delegate={onConnect:()=>{this.logger.log("Connected"),this.delegate&&this.delegate.onServerConnect&&this.delegate.onServerConnect(),this.shouldBeRegistered&&this.register(),this.options.optionsPingInterval>0&&this.optionsPingStart()},onDisconnect:async i=>{this.logger.log("Disconnected");let s=!1;this.options.optionsPingInterval>0&&(s=this.optionsPingFailure,this.optionsPingFailure=!1,this.optionsPingStop()),this.delegate&&this.delegate.onServerDisconnect&&this.delegate.onServerDisconnect(i),(i||s)&&(this.registerer&&(this.logger.log("Disposing of registerer..."),this.registerer.dispose().catch(o=>{this.logger.debug("Error occurred disposing of registerer after connection with server was lost."),this.logger.debug(o.toString())}),this.registerer=void 0),this.managedSessions.slice().map(o=>o.session).forEach(async o=>{this.logger.log("Disposing of session..."),o.dispose().catch(a=>{this.logger.debug("Error occurred disposing of a session after connection with server was lost."),this.logger.debug(a.toString())})}),this.shouldBeConnected&&this.attemptReconnection())},onInvite:i=>{this.logger.log(`[${i.id}] Received INVITE`);let s=this.options.maxSimultaneousSessions;if(s!==0&&this.managedSessions.length>s){this.logger.warn(`[${i.id}] Session already in progress, rejecting INVITE...`),i.reject().then(()=>{this.logger.log(`[${i.id}] Rejected INVITE`)}).catch(a=>{this.logger.error(`[${i.id}] Failed to reject INVITE`),this.logger.error(a.toString())});return}let o={sessionDescriptionHandlerOptions:{constraints:this.constraints}};this.initSession(i,o),this.delegate&&this.delegate.onCallReceived?this.delegate.onCallReceived(i):(this.logger.warn(`[${i.id}] No handler available, rejecting INVITE...`),i.reject().then(()=>{this.logger.log(`[${i.id}] Rejected INVITE`)}).catch(a=>{this.logger.error(`[${i.id}] Failed to reject INVITE`),this.logger.error(a.toString())}))},onMessage:i=>{i.accept().then(()=>{this.delegate&&this.delegate.onMessageReceived&&this.delegate.onMessageReceived(i)})},onNotify:i=>{i.accept().then(()=>{this.delegate&&this.delegate.onNotificationReceived&&this.delegate.onNotificationReceived(i)})}},this.registererOptions=Object.assign({},t.registererOptions),this.registererRegisterOptions=Object.assign({},t.registererRegisterOptions),this.options.registrationRetry){this.registererRegisterOptions.requestDelegate=this.registererRegisterOptions.requestDelegate||{};let i=this.registererRegisterOptions.requestDelegate.onReject;this.registererRegisterOptions.requestDelegate.onReject=s=>{i&&i(s),this.attemptRegistration()}}this.logger=this.userAgent.getLogger("sip.SessionManager"),window.addEventListener("online",()=>{this.logger.log("Online"),this.shouldBeConnected&&this.connect()}),this.options.autoStop&&window.addEventListener("beforeunload",async()=>{this.shouldBeConnected=!1,this.shouldBeRegistered=!1,this.userAgent.state!==X.Stopped&&await this.userAgent.stop()})}static stripUndefinedProperties(e){return Object.keys(e).reduce((t,r)=>(e[r]!==void 0&&(t[r]=e[r]),t),{})}getLocalMediaStream(e){let t=e.sessionDescriptionHandler;if(t){if(!(t instanceof re))throw new Error("Session description handler not instance of web SessionDescriptionHandler");return t.localMediaStream}}getRemoteMediaStream(e){let t=e.sessionDescriptionHandler;if(t){if(!(t instanceof re))throw new Error("Session description handler not instance of web SessionDescriptionHandler");return t.remoteMediaStream}}getLocalAudioTrack(e){var t;return(t=this.getLocalMediaStream(e))===null||t===void 0?void 0:t.getTracks().find(r=>r.kind==="audio")}getLocalVideoTrack(e){var t;return(t=this.getLocalMediaStream(e))===null||t===void 0?void 0:t.getTracks().find(r=>r.kind==="video")}getRemoteAudioTrack(e){var t;return(t=this.getRemoteMediaStream(e))===null||t===void 0?void 0:t.getTracks().find(r=>r.kind==="audio")}getRemoteVideoTrack(e){var t;return(t=this.getRemoteMediaStream(e))===null||t===void 0?void 0:t.getTracks().find(r=>r.kind==="video")}async connect(){return this.logger.log("Connecting UserAgent..."),this.shouldBeConnected=!0,this.userAgent.state!==X.Started?this.userAgent.start():this.userAgent.reconnect()}async disconnect(){return this.logger.log("Disconnecting UserAgent..."),this.userAgent.state===X.Stopped?Promise.resolve():(this.shouldBeConnected=!1,this.shouldBeRegistered=!1,this.registerer=void 0,this.userAgent.stop())}isConnected(){return this.userAgent.isConnected()}async register(e){return this.logger.log("Registering UserAgent..."),this.shouldBeRegistered=!0,e!==void 0&&(this.registererRegisterOptions=Object.assign({},e)),this.registerer||(this.registerer=new Ce(this.userAgent,this.registererOptions),this.registerer.stateChange.addListener(t=>{switch(t){case M.Initial:break;case M.Registered:this.delegate&&this.delegate.onRegistered&&this.delegate.onRegistered();break;case M.Unregistered:this.delegate&&this.delegate.onUnregistered&&this.delegate.onUnregistered(),this.shouldBeRegistered&&this.attemptRegistration();break;case M.Terminated:break;default:throw new Error("Unknown registerer state.")}})),this.attemptRegistration(!0)}async unregister(e){return this.logger.log("Unregistering UserAgent..."),this.shouldBeRegistered=!1,this.registerer?this.registerer.unregister(e).then(()=>{}):(this.logger.warn("No registerer to unregister."),Promise.resolve())}async call(e,t,r){this.logger.log("Beginning Session...");let i=this.options.maxSimultaneousSessions;if(i!==0&&this.managedSessions.length>i)return Promise.reject(new Error("Maximum number of sessions already exists."));let s=ce.makeURI(e);if(!s)return Promise.reject(new Error(`Failed to create a valid URI from "${e}"`));if(t||(t={}),t.sessionDescriptionHandlerOptions||(t.sessionDescriptionHandlerOptions={}),t.sessionDescriptionHandlerOptions.constraints||(t.sessionDescriptionHandlerOptions.constraints=this.constraints),t.earlyMedia){r=r||{},r.requestDelegate=r.requestDelegate||{};let a=r.requestDelegate.onProgress;r.requestDelegate.onProgress=d=>{d.message.statusCode===183&&this.setupRemoteMedia(o),a&&a(d)}}this.options.iceStopWaitingOnServerReflexive&&(t.delegate=t.delegate||{},t.delegate.onSessionDescriptionHandler=a=>{if(!(a instanceof re))throw new Error("Session description handler not instance of SessionDescriptionHandler");a.peerConnectionDelegate={onicecandidate:d=>{var h;((h=d.candidate)===null||h===void 0?void 0:h.type)==="srflx"&&(this.logger.log(`[${o.id}] Found srflx ICE candidate, stop waiting...`),a.iceGatheringComplete())}}});let o=new tt(this.userAgent,s,t);return this.sendInvite(o,t,r).then(()=>o)}async hangup(e){return this.logger.log(`[${e.id}] Hangup...`),this.sessionExists(e)?this.terminate(e):Promise.reject(new Error("Session does not exist."))}async answer(e,t){return this.logger.log(`[${e.id}] Accepting Invitation...`),this.sessionExists(e)?e instanceof Ge?(t||(t={}),t.sessionDescriptionHandlerOptions||(t.sessionDescriptionHandlerOptions={}),t.sessionDescriptionHandlerOptions.constraints||(t.sessionDescriptionHandlerOptions.constraints=this.constraints),e.accept(t)):Promise.reject(new Error("Session not instance of Invitation.")):Promise.reject(new Error("Session does not exist."))}async decline(e){return this.logger.log(`[${e.id}] Rejecting Invitation...`),this.sessionExists(e)?e instanceof Ge?e.reject():Promise.reject(new Error("Session not instance of Invitation.")):Promise.reject(new Error("Session does not exist."))}async hold(e){return this.logger.log(`[${e.id}] Holding session...`),this.setHold(e,!0)}async unhold(e){return this.logger.log(`[${e.id}] Unholding session...`),this.setHold(e,!1)}isHeld(e){let t=this.sessionManaged(e);return t?t.held:!1}mute(e){this.logger.log(`[${e.id}] Disabling media tracks...`),this.setMute(e,!0)}unmute(e){this.logger.log(`[${e.id}] Enabling media tracks...`),this.setMute(e,!1)}isMuted(e){let t=this.sessionManaged(e);return t?t.muted:!1}async sendDTMF(e,t){if(this.logger.log(`[${e.id}] Sending DTMF...`),!/^[0-9A-D#*,]$/.exec(t))return Promise.reject(new Error("Invalid DTMF tone."));if(!this.sessionExists(e))return Promise.reject(new Error("Session does not exist."));if(this.logger.log(`[${e.id}] Sending DTMF tone: ${t}`),this.options.sendDTMFUsingSessionDescriptionHandler)return e.sessionDescriptionHandler?e.sessionDescriptionHandler.sendDtmf(t)?Promise.resolve():Promise.reject(new Error("Failed to send DTMF")):Promise.reject(new Error("Session desciption handler undefined."));{let r=t,i=2e3,o={body:{contentDisposition:"render",contentType:"application/dtmf-relay",content:"Signal="+r+`\r
63
+ `)),Promise.resolve({sdp:e,type:t})}function Xa(n){if(n.length<2)throw new Error("Start local conference requires at leaast 2 sessions.");(t=>t.map((r,i)=>t.slice(i+1).map(s=>[r,s])).reduce((r,i)=>r.concat(i),[]))(n.map(t=>t.sessionDescriptionHandler)).forEach(([t,r])=>{if(!(t instanceof ge&&r instanceof ge))throw new Error("Session description handler not instance of SessionManagerSessionDescriptionHandler");t.joinWith(r)})}var ge=class extends re{constructor(e,t,r){super(e,t,r),ge.audioContext||(ge.audioContext=new AudioContext)}enableSenderTracks(e){let t=this.localMediaStreamReal;if(t===void 0)throw new Error("Stream undefined.");t.getAudioTracks().forEach(r=>{r.enabled=e})}initLocalMediaStream(e){if(!ge.audioContext)throw new Error("SessionManagerSessionDescriptionHandler.audioContext undefined.");return this.localMediaStreamReal=e,this.localMediaStreamSourceNode=ge.audioContext.createMediaStreamSource(e),this.localMediaStreamDestinationNode=ge.audioContext.createMediaStreamDestination(),this.localMediaStreamSourceNode.connect(this.localMediaStreamDestinationNode),this.localMediaStreamDestinationNode.stream}joinWith(e){if(!ge.audioContext)throw new Error("SessionManagerSessionDescriptionHandler.audioContext undefined.");let t=ge.audioContext.createMediaStreamSource(this.remoteMediaStream),r=e.localMediaStreamDestinationNode;if(r===void 0)throw new Error("Peer outbound (local) stream local media stream destination is undefined.");t.connect(r);let i=ge.audioContext.createMediaStreamSource(e.remoteMediaStream),s=this.localMediaStreamDestinationNode;if(s===void 0)throw new Error("Our outbound (local) stream local media stream destination is undefined.");i.connect(s)}setRealLocalMediaStream(e){if(!ge.audioContext)throw new Error("SessionManagerSessionDescriptionHandler.audioContext undefined.");if(!this.localMediaStreamReal){this.initLocalMediaStream(e);return}if(!this.localMediaStreamDestinationNode||!this.localMediaStreamSourceNode||!this.localMediaStreamReal)throw new Error("Local media stream undefined.");this.localMediaStreamReal=e,this.localMediaStreamSourceNode.disconnect(this.localMediaStreamDestinationNode),this.localMediaStreamSourceNode=ge.audioContext.createMediaStreamSource(e),this.localMediaStreamSourceNode.connect(this.localMediaStreamDestinationNode)}};function Bi(){return(n,e)=>({session:e,held:!1,muted:!1})}var dt=class{constructor(e,t={}){this.managedSessions=[],this.attemptingReconnection=!1,this.optionsPingFailure=!1,this.optionsPingRunning=!1,this.shouldBeConnected=!1,this.shouldBeRegistered=!1,this.delegate=t.delegate,this.options=Object.assign({aor:"",autoStop:!0,delegate:{},iceStopWaitingOnServerReflexive:!1,managedSessionFactory:Bi(),maxSimultaneousSessions:2,media:{},optionsPingInterval:-1,optionsPingRequestURI:"",reconnectionAttempts:3,reconnectionDelay:4,registrationRetry:!1,registrationRetryInterval:3,registerGuard:null,registererOptions:{},registererRegisterOptions:{},sendDTMFUsingSessionDescriptionHandler:!1,userAgentOptions:{}},dt.stripUndefinedProperties(t));let r=Object.assign({},t.userAgentOptions);if(r.transportConstructor||(r.transportConstructor=Be),r.transportOptions||(r.transportOptions={server:e}),!r.uri&&t.aor){let i=ce.makeURI(t.aor);if(!i)throw new Error(`Failed to create valid URI from ${t.aor}`);r.uri=i}if(this.userAgent=new ce(r),this.userAgent.delegate={onConnect:()=>{this.logger.log("Connected"),this.delegate&&this.delegate.onServerConnect&&this.delegate.onServerConnect(),this.shouldBeRegistered&&this.register(),this.options.optionsPingInterval>0&&this.optionsPingStart()},onDisconnect:async i=>{this.logger.log("Disconnected");let s=!1;this.options.optionsPingInterval>0&&(s=this.optionsPingFailure,this.optionsPingFailure=!1,this.optionsPingStop()),this.delegate&&this.delegate.onServerDisconnect&&this.delegate.onServerDisconnect(i),(i||s)&&(this.registerer&&(this.logger.log("Disposing of registerer..."),this.registerer.dispose().catch(o=>{this.logger.debug("Error occurred disposing of registerer after connection with server was lost."),this.logger.debug(o.toString())}),this.registerer=void 0),this.managedSessions.slice().map(o=>o.session).forEach(async o=>{this.logger.log("Disposing of session..."),o.dispose().catch(a=>{this.logger.debug("Error occurred disposing of a session after connection with server was lost."),this.logger.debug(a.toString())})}),this.shouldBeConnected&&this.attemptReconnection())},onInvite:i=>{this.logger.log(`[${i.id}] Received INVITE`);let s=this.options.maxSimultaneousSessions;if(s!==0&&this.managedSessions.length>s){this.logger.warn(`[${i.id}] Session already in progress, rejecting INVITE...`),i.reject().then(()=>{this.logger.log(`[${i.id}] Rejected INVITE`)}).catch(a=>{this.logger.error(`[${i.id}] Failed to reject INVITE`),this.logger.error(a.toString())});return}let o={sessionDescriptionHandlerOptions:{constraints:this.constraints}};this.initSession(i,o),this.delegate&&this.delegate.onCallReceived?this.delegate.onCallReceived(i):(this.logger.warn(`[${i.id}] No handler available, rejecting INVITE...`),i.reject().then(()=>{this.logger.log(`[${i.id}] Rejected INVITE`)}).catch(a=>{this.logger.error(`[${i.id}] Failed to reject INVITE`),this.logger.error(a.toString())}))},onMessage:i=>{i.accept().then(()=>{this.delegate&&this.delegate.onMessageReceived&&this.delegate.onMessageReceived(i)})},onNotify:i=>{i.accept().then(()=>{this.delegate&&this.delegate.onNotificationReceived&&this.delegate.onNotificationReceived(i)})}},this.registererOptions=Object.assign({},t.registererOptions),this.registererRegisterOptions=Object.assign({},t.registererRegisterOptions),this.options.registrationRetry){this.registererRegisterOptions.requestDelegate=this.registererRegisterOptions.requestDelegate||{};let i=this.registererRegisterOptions.requestDelegate.onReject;this.registererRegisterOptions.requestDelegate.onReject=s=>{i&&i(s),this.attemptRegistration()}}this.logger=this.userAgent.getLogger("sip.SessionManager"),window.addEventListener("online",()=>{this.logger.log("Online"),this.shouldBeConnected&&this.connect()}),this.options.autoStop&&window.addEventListener("beforeunload",async()=>{this.shouldBeConnected=!1,this.shouldBeRegistered=!1,this.userAgent.state!==X.Stopped&&await this.userAgent.stop()})}static stripUndefinedProperties(e){return Object.keys(e).reduce((t,r)=>(e[r]!==void 0&&(t[r]=e[r]),t),{})}getLocalMediaStream(e){let t=e.sessionDescriptionHandler;if(t){if(!(t instanceof re))throw new Error("Session description handler not instance of web SessionDescriptionHandler");return t.localMediaStream}}getRemoteMediaStream(e){let t=e.sessionDescriptionHandler;if(t){if(!(t instanceof re))throw new Error("Session description handler not instance of web SessionDescriptionHandler");return t.remoteMediaStream}}getLocalAudioTrack(e){var t;return(t=this.getLocalMediaStream(e))===null||t===void 0?void 0:t.getTracks().find(r=>r.kind==="audio")}getLocalVideoTrack(e){var t;return(t=this.getLocalMediaStream(e))===null||t===void 0?void 0:t.getTracks().find(r=>r.kind==="video")}getRemoteAudioTrack(e){var t;return(t=this.getRemoteMediaStream(e))===null||t===void 0?void 0:t.getTracks().find(r=>r.kind==="audio")}getRemoteVideoTrack(e){var t;return(t=this.getRemoteMediaStream(e))===null||t===void 0?void 0:t.getTracks().find(r=>r.kind==="video")}async connect(){return this.logger.log("Connecting UserAgent..."),this.shouldBeConnected=!0,this.userAgent.state!==X.Started?this.userAgent.start():this.userAgent.reconnect()}async disconnect(){return this.logger.log("Disconnecting UserAgent..."),this.userAgent.state===X.Stopped?Promise.resolve():(this.shouldBeConnected=!1,this.shouldBeRegistered=!1,this.registerer=void 0,this.userAgent.stop())}isConnected(){return this.userAgent.isConnected()}async register(e){return this.logger.log("Registering UserAgent..."),this.shouldBeRegistered=!0,e!==void 0&&(this.registererRegisterOptions=Object.assign({},e)),this.registerer||(this.registerer=new Ce(this.userAgent,this.registererOptions),this.registerer.stateChange.addListener(t=>{switch(t){case M.Initial:break;case M.Registered:this.delegate&&this.delegate.onRegistered&&this.delegate.onRegistered();break;case M.Unregistered:this.delegate&&this.delegate.onUnregistered&&this.delegate.onUnregistered(),this.shouldBeRegistered&&this.attemptRegistration();break;case M.Terminated:break;default:throw new Error("Unknown registerer state.")}})),this.attemptRegistration(!0)}async unregister(e){return this.logger.log("Unregistering UserAgent..."),this.shouldBeRegistered=!1,this.registerer?this.registerer.unregister(e).then(()=>{}):(this.logger.warn("No registerer to unregister."),Promise.resolve())}async call(e,t,r){this.logger.log("Beginning Session...");let i=this.options.maxSimultaneousSessions;if(i!==0&&this.managedSessions.length>i)return Promise.reject(new Error("Maximum number of sessions already exists."));let s=ce.makeURI(e);if(!s)return Promise.reject(new Error(`Failed to create a valid URI from "${e}"`));if(t||(t={}),t.sessionDescriptionHandlerOptions||(t.sessionDescriptionHandlerOptions={}),t.sessionDescriptionHandlerOptions.constraints||(t.sessionDescriptionHandlerOptions.constraints=this.constraints),t.earlyMedia){r=r||{},r.requestDelegate=r.requestDelegate||{};let a=r.requestDelegate.onProgress;r.requestDelegate.onProgress=d=>{d.message.statusCode===183&&this.setupRemoteMedia(o),a&&a(d)}}this.options.iceStopWaitingOnServerReflexive&&(t.delegate=t.delegate||{},t.delegate.onSessionDescriptionHandler=a=>{if(!(a instanceof re))throw new Error("Session description handler not instance of SessionDescriptionHandler");a.peerConnectionDelegate={onicecandidate:d=>{var h;((h=d.candidate)===null||h===void 0?void 0:h.type)==="srflx"&&(this.logger.log(`[${o.id}] Found srflx ICE candidate, stop waiting...`),a.iceGatheringComplete())}}});let o=new tt(this.userAgent,s,t);return this.sendInvite(o,t,r).then(()=>o)}async hangup(e){return this.logger.log(`[${e.id}] Hangup...`),this.sessionExists(e)?this.terminate(e):Promise.reject(new Error("Session does not exist."))}async answer(e,t){return this.logger.log(`[${e.id}] Accepting Invitation...`),this.sessionExists(e)?e instanceof Ge?(t||(t={}),t.sessionDescriptionHandlerOptions||(t.sessionDescriptionHandlerOptions={}),t.sessionDescriptionHandlerOptions.constraints||(t.sessionDescriptionHandlerOptions.constraints=this.constraints),e.accept(t)):Promise.reject(new Error("Session not instance of Invitation.")):Promise.reject(new Error("Session does not exist."))}async decline(e){return this.logger.log(`[${e.id}] Rejecting Invitation...`),this.sessionExists(e)?e instanceof Ge?e.reject():Promise.reject(new Error("Session not instance of Invitation.")):Promise.reject(new Error("Session does not exist."))}async hold(e){return this.logger.log(`[${e.id}] Holding session...`),this.setHold(e,!0)}async unhold(e){return this.logger.log(`[${e.id}] Unholding session...`),this.setHold(e,!1)}isHeld(e){let t=this.sessionManaged(e);return t?t.held:!1}mute(e){this.logger.log(`[${e.id}] Disabling media tracks...`),this.setMute(e,!0)}unmute(e){this.logger.log(`[${e.id}] Enabling media tracks...`),this.setMute(e,!1)}isMuted(e){let t=this.sessionManaged(e);return t?t.muted:!1}async sendDTMF(e,t){if(this.logger.log(`[${e.id}] Sending DTMF...`),!/^[0-9A-D#*,]$/.exec(t))return Promise.reject(new Error("Invalid DTMF tone."));if(!this.sessionExists(e))return Promise.reject(new Error("Session does not exist."));if(this.logger.log(`[${e.id}] Sending DTMF tone: ${t}`),this.options.sendDTMFUsingSessionDescriptionHandler)return e.sessionDescriptionHandler?e.sessionDescriptionHandler.sendDtmf(t)?Promise.resolve():Promise.reject(new Error("Failed to send DTMF")):Promise.reject(new Error("Session desciption handler undefined."));{let r=t,i=2e3,o={body:{contentDisposition:"render",contentType:"application/dtmf-relay",content:"Signal="+r+`\r
64
64
  Duration=`+i}};return e.info({requestOptions:o}).then(()=>{})}}async transfer(e,t,r){if(this.logger.log(`[${e.id}] Referring session...`),t instanceof qe)return e.refer(t,r).then(()=>{});let i=ce.makeURI(t);return i?e.refer(i,r).then(()=>{}):Promise.reject(new Error(`Failed to create a valid URI from "${t}"`))}async message(e,t){this.logger.log("Sending message...");let r=ce.makeURI(e);return r?new Ir(this.userAgent,r,t).message():Promise.reject(new Error(`Failed to create a valid URI from "${e}"`))}get constraints(){let e={audio:!0,video:!1};return this.options.media.constraints&&(e=Object.assign({},this.options.media.constraints)),e}attemptReconnection(e=1){let t=this.options.reconnectionAttempts,r=this.options.reconnectionDelay;if(!this.shouldBeConnected){this.logger.log("Should not be connected currently");return}if(this.attemptingReconnection&&this.logger.log("Reconnection attempt already in progress"),e>t){this.logger.log("Reconnection maximum attempts reached");return}e===1?this.logger.log(`Reconnection attempt ${e} of ${t} - trying`):this.logger.log(`Reconnection attempt ${e} of ${t} - trying in ${r} seconds`),this.attemptingReconnection=!0,setTimeout(()=>{if(!this.shouldBeConnected){this.logger.log(`Reconnection attempt ${e} of ${t} - aborted`),this.attemptingReconnection=!1;return}this.userAgent.reconnect().then(()=>{this.logger.log(`Reconnection attempt ${e} of ${t} - succeeded`),this.attemptingReconnection=!1}).catch(i=>{this.logger.log(`Reconnection attempt ${e} of ${t} - failed`),this.logger.error(i.message),this.attemptingReconnection=!1,this.attemptReconnection(++e)})},e===1?0:r*1e3)}attemptRegistration(e=!1){if(this.logger.log(`Registration attempt ${e?"without delay":""}`),!this.shouldBeRegistered)return this.logger.log("Should not be registered currently"),Promise.resolve();if(this.registrationAttemptTimeout!==void 0)return this.logger.log("Registration attempt already in progress"),Promise.resolve();let t=()=>this.registerer?this.isConnected()?this.userAgent.state===X.Stopped?(this.logger.log("User agent stopped"),Promise.resolve()):this.options.registerGuard?this.options.registerGuard().catch(i=>{throw this.logger.log("Register guard rejected will making registration attempt"),i}).then(i=>i||!this.registerer?Promise.resolve():this.registerer.register(this.registererRegisterOptions).then(()=>{})):this.registerer.register(this.registererRegisterOptions).then(()=>{}):(this.logger.log("User agent not connected"),Promise.resolve()):(this.logger.log("Registerer undefined"),Promise.resolve()),r=i=>{let s=i*2;return 1e3*(Math.random()*(s-i)+i)};return new Promise((i,s)=>{this.registrationAttemptTimeout=setTimeout(()=>{t().then(()=>{this.registrationAttemptTimeout=void 0,i()}).catch(o=>{this.registrationAttemptTimeout=void 0,o instanceof Fe?i():s(o)})},e?0:r(this.options.registrationRetryInterval))})}cleanupMedia(e){let t=this.sessionManaged(e);if(!t)throw new Error("Managed session does not exist.");t.mediaLocal&&t.mediaLocal.video&&(t.mediaLocal.video.srcObject=null,t.mediaLocal.video.pause()),t.mediaRemote&&(t.mediaRemote.audio&&(t.mediaRemote.audio.srcObject=null,t.mediaRemote.audio.pause()),t.mediaRemote.video&&(t.mediaRemote.video.srcObject=null,t.mediaRemote.video.pause()))}enableReceiverTracks(e,t){if(!this.sessionExists(e))throw new Error("Session does not exist.");let r=e.sessionDescriptionHandler;if(!(r instanceof re))throw new Error("Session's session description handler not instance of SessionDescriptionHandler.");r.enableReceiverTracks(t)}enableSenderTracks(e,t){if(!this.sessionExists(e))throw new Error("Session does not exist.");let r=e.sessionDescriptionHandler;if(!(r instanceof re))throw new Error("Session's session description handler not instance of SessionDescriptionHandler.");r.enableSenderTracks(t)}initSession(e,t){this.sessionAdd(e),this.delegate&&this.delegate.onCallCreated&&this.delegate.onCallCreated(e),e.stateChange.addListener(r=>{switch(this.logger.log(`[${e.id}] Session state changed to ${r}`),r){case v.Initial:break;case v.Establishing:break;case v.Established:this.setupLocalMedia(e),this.setupRemoteMedia(e),this.delegate&&this.delegate.onCallAnswered&&this.delegate.onCallAnswered(e);break;case v.Terminating:case v.Terminated:this.sessionExists(e)&&(this.cleanupMedia(e),this.sessionRemove(e),this.delegate&&this.delegate.onCallHangup&&this.delegate.onCallHangup(e));break;default:throw new Error("Unknown session state.")}}),e.delegate=e.delegate||{},e.delegate.onInfo=r=>{var i;if(((i=this.delegate)===null||i===void 0?void 0:i.onCallDTMFReceived)===void 0){r.reject();return}let s=r.request.getHeader("content-type");if(!s||!/^application\/dtmf-relay/i.exec(s)){r.reject();return}let o=r.request.body.split(`\r
65
- `,2);if(o.length!==2){r.reject();return}let a,d=/^(Signal\s*?=\s*?)([0-9A-D#*]{1})(\s)?.*/;if(o[0]!==void 0&&d.test(o[0])&&(a=o[0].replace(d,"$2")),!a){r.reject();return}let h,l=/^(Duration\s?=\s?)([0-9]{1,4})(\s)?.*/;if(o[1]!==void 0&&l.test(o[1])&&(h=parseInt(o[1].replace(l,"$2"),10)),!h){r.reject();return}r.accept().then(()=>{if(this.delegate&&this.delegate.onCallDTMFReceived){if(!a||!h)throw new Error("Tone or duration undefined.");this.delegate.onCallDTMFReceived(e,a,h)}}).catch(u=>{this.logger.error(u.message)})},e.delegate.onRefer=r=>{r.accept().then(()=>this.sendInvite(r.makeInviter(t),t)).catch(i=>{this.logger.error(i.message)})}}optionsPingRun(e,t,r){if(this.options.optionsPingInterval<1)throw new Error("Invalid options ping interval.");this.optionsPingRunning||(this.optionsPingRunning=!0,this.optionsPingTimeout=setTimeout(()=>{this.optionsPingTimeout=void 0;let i=()=>{this.optionsPingFailure=!1,this.optionsPingRunning&&(this.optionsPingRunning=!1,this.optionsPingRun(e,t,r))},s=()=>{this.logger.error("OPTIONS ping failed"),this.optionsPingFailure=!0,this.optionsPingRunning=!1,this.userAgent.transport.disconnect().catch(d=>this.logger.error(d))},o=this.userAgent.userAgentCore,a=o.makeOutgoingRequestMessage("OPTIONS",e,t,r,{});this.optionsPingRequest=o.request(a,{onAccept:()=>{this.optionsPingRequest=void 0,i()},onReject:d=>{this.optionsPingRequest=void 0,d.message.statusCode===408||d.message.statusCode===503?s():i()}})},this.options.optionsPingInterval*1e3))}optionsPingStart(){this.logger.log("OPTIONS pings started");let e,t,r;if(this.options.optionsPingRequestURI){if(e=ce.makeURI(this.options.optionsPingRequestURI),!e)throw new Error("Failed to create Request URI.");t=this.userAgent.contact.uri.clone(),r=this.userAgent.contact.uri.clone()}else if(this.options.aor){let i=ce.makeURI(this.options.aor);if(!i)throw new Error("Failed to create URI.");e=i.clone(),e.user=void 0,t=i.clone(),r=i.clone()}else{this.logger.error("You have enabled sending OPTIONS pings and as such you must provide either a) an AOR to register, or b) an RURI to use for the target of the OPTIONS ping requests. ");return}this.optionsPingRun(e,t,r)}optionsPingStop(){this.logger.log("OPTIONS pings stopped"),this.optionsPingRunning=!1,this.optionsPingFailure=!1,this.optionsPingRequest&&(this.optionsPingRequest.dispose(),this.optionsPingRequest=void 0),this.optionsPingTimeout&&(clearTimeout(this.optionsPingTimeout),this.optionsPingTimeout=void 0)}async sendInvite(e,t,r){return this.initSession(e,t),e.invite(r).then(()=>{this.logger.log(`[${e.id}] Sent INVITE`)})}sessionAdd(e){let t=this.options.managedSessionFactory(this,e);this.managedSessions.push(t)}sessionExists(e){return this.sessionManaged(e)!==void 0}sessionManaged(e){return this.managedSessions.find(t=>t.session.id===e.id)}sessionRemove(e){this.managedSessions=this.managedSessions.filter(t=>t.session.id!==e.id)}async setHold(e,t){if(!this.sessionExists(e))return Promise.reject(new Error("Session does not exist."));if(this.isHeld(e)===t)return Promise.resolve();if(!(e.sessionDescriptionHandler instanceof re))throw new Error("Session's session description handler not instance of SessionDescriptionHandler.");let i={requestDelegate:{onAccept:()=>{let a=this.sessionManaged(e);a!==void 0&&(a.held=t,this.enableReceiverTracks(e,!a.held),this.enableSenderTracks(e,!a.held&&!a.muted),this.delegate&&this.delegate.onCallHold&&this.delegate.onCallHold(e,a.held))},onReject:()=>{this.logger.warn(`[${e.id}] Re-invite request was rejected`);let a=this.sessionManaged(e);a!==void 0&&(a.held=!t,this.enableReceiverTracks(e,!a.held),this.enableSenderTracks(e,!a.held&&!a.muted),this.delegate&&this.delegate.onCallHold&&this.delegate.onCallHold(e,a.held))}}},s=e.sessionDescriptionHandlerOptionsReInvite;s.hold=t,e.sessionDescriptionHandlerOptionsReInvite=s;let o=this.sessionManaged(e);if(!o)throw new Error("Managed session is undefiend.");return o.held=t,e.invite(i).then(()=>{let a=this.sessionManaged(e);a!==void 0&&(this.enableReceiverTracks(e,!a.held),this.enableSenderTracks(e,!a.held&&!a.muted))}).catch(a=>{throw o.held=!t,a instanceof Fe&&this.logger.error(`[${e.id}] A hold request is already in progress.`),a})}setMute(e,t){if(!this.sessionExists(e)){this.logger.warn(`[${e.id}] A session is required to enabled/disable media tracks`);return}if(e.state!==v.Established){this.logger.warn(`[${e.id}] An established session is required to enable/disable media tracks`);return}let r=this.sessionManaged(e);r!==void 0&&(r.muted=t,this.enableSenderTracks(e,!r.held&&!r.muted))}setupLocalMedia(e){let t=this.sessionManaged(e);if(!t)throw new Error("Managed session does not exist.");let r=typeof this.options.media.local=="function"?this.options.media.local(e):this.options.media.local;t.mediaLocal=r;let i=r?.video;if(i){let s=this.getLocalMediaStream(e);if(!s)throw new Error("Local media stream undefiend.");i.srcObject=s,i.volume=0,i.play().catch(o=>{this.logger.error(`[${e.id}] Failed to play local media`),this.logger.error(o.message)})}}setupRemoteMedia(e){let t=this.sessionManaged(e);if(!t)throw new Error("Managed session does not exist.");let r=typeof this.options.media.remote=="function"?this.options.media.remote(e):this.options.media.remote;t.mediaRemote=r;let i=r?.video||r?.audio;if(i){let s=this.getRemoteMediaStream(e);if(!s)throw new Error("Remote media stream undefiend.");i.autoplay=!0,i.srcObject=s,i.play().catch(o=>{this.logger.error(`[${e.id}] Failed to play remote media`),this.logger.error(o.message)}),s.onaddtrack=()=>{this.logger.log("Remote media onaddtrack"),i.load(),i.play().catch(o=>{this.logger.error(`[${e.id}] Failed to play remote media`),this.logger.error(o.message)})}}}async terminate(e){switch(this.logger.log(`[${e.id}] Terminating...`),e.state){case v.Initial:if(e instanceof tt)return e.cancel().then(()=>{this.logger.log(`[${e.id}] Inviter never sent INVITE (canceled)`)});if(e instanceof Ge)return e.reject().then(()=>{this.logger.log(`[${e.id}] Invitation rejected (sent 480)`)});throw new Error("Unknown session type.");case v.Establishing:if(e instanceof tt)return e.cancel().then(()=>{this.logger.log(`[${e.id}] Inviter canceled (sent CANCEL)`)});if(e instanceof Ge)return e.reject().then(()=>{this.logger.log(`[${e.id}] Invitation rejected (sent 480)`)});throw new Error("Unknown session type.");case v.Established:return e.bye().then(()=>{this.logger.log(`[${e.id}] Session ended (sent BYE)`)});case v.Terminating:break;case v.Terminated:break;default:throw new Error("Unknown state")}return this.logger.log(`[${e.id}] Terminating in state ${e.state}, no action taken`),Promise.resolve()}};var Bi=class{constructor(e,t={}){this.session=void 0,this.delegate=t.delegate,this.options=Object.assign({},t);let r={aor:this.options.aor,delegate:{onCallAnswered:()=>{var i,s;return(s=(i=this.delegate)===null||i===void 0?void 0:i.onCallAnswered)===null||s===void 0?void 0:s.call(i)},onCallCreated:i=>{var s,o;this.session=i,(o=(s=this.delegate)===null||s===void 0?void 0:s.onCallCreated)===null||o===void 0||o.call(s)},onCallReceived:()=>{var i,s;return(s=(i=this.delegate)===null||i===void 0?void 0:i.onCallReceived)===null||s===void 0?void 0:s.call(i)},onCallHangup:()=>{var i,s;this.session=void 0,!((i=this.delegate)===null||i===void 0)&&i.onCallHangup&&((s=this.delegate)===null||s===void 0||s.onCallHangup())},onCallHold:(i,s)=>{var o,a;return(a=(o=this.delegate)===null||o===void 0?void 0:o.onCallHold)===null||a===void 0?void 0:a.call(o,s)},onCallDTMFReceived:(i,s,o)=>{var a,d;return(d=(a=this.delegate)===null||a===void 0?void 0:a.onCallDTMFReceived)===null||d===void 0?void 0:d.call(a,s,o)},onMessageReceived:i=>{var s,o;return(o=(s=this.delegate)===null||s===void 0?void 0:s.onMessageReceived)===null||o===void 0?void 0:o.call(s,i.request.body)},onRegistered:()=>{var i,s;return(s=(i=this.delegate)===null||i===void 0?void 0:i.onRegistered)===null||s===void 0?void 0:s.call(i)},onUnregistered:()=>{var i,s;return(s=(i=this.delegate)===null||i===void 0?void 0:i.onUnregistered)===null||s===void 0?void 0:s.call(i)},onServerConnect:()=>{var i,s;return(s=(i=this.delegate)===null||i===void 0?void 0:i.onServerConnect)===null||s===void 0?void 0:s.call(i)},onServerDisconnect:()=>{var i,s;return(s=(i=this.delegate)===null||i===void 0?void 0:i.onServerDisconnect)===null||s===void 0?void 0:s.call(i)}},maxSimultaneousSessions:1,media:this.options.media,reconnectionAttempts:this.options.reconnectionAttempts,reconnectionDelay:this.options.reconnectionDelay,registererOptions:this.options.registererOptions,sendDTMFUsingSessionDescriptionHandler:this.options.sendDTMFUsingSessionDescriptionHandler,userAgentOptions:this.options.userAgentOptions};this.sessionManager=new dt(e,r),this.logger=this.sessionManager.userAgent.getLogger("sip.SimpleUser")}get id(){return this.options.userAgentOptions&&this.options.userAgentOptions.displayName||"Anonymous"}get localMediaStream(){return this.session&&this.sessionManager.getLocalMediaStream(this.session)}get remoteMediaStream(){return this.session&&this.sessionManager.getRemoteMediaStream(this.session)}get localAudioTrack(){return this.session&&this.sessionManager.getLocalAudioTrack(this.session)}get localVideoTrack(){return this.session&&this.sessionManager.getLocalVideoTrack(this.session)}get remoteAudioTrack(){return this.session&&this.sessionManager.getRemoteAudioTrack(this.session)}get remoteVideoTrack(){return this.session&&this.sessionManager.getRemoteVideoTrack(this.session)}connect(){return this.logger.log(`[${this.id}] Connecting UserAgent...`),this.sessionManager.connect()}disconnect(){return this.logger.log(`[${this.id}] Disconnecting UserAgent...`),this.sessionManager.disconnect()}isConnected(){return this.sessionManager.isConnected()}register(e){return this.logger.log(`[${this.id}] Registering UserAgent...`),this.sessionManager.register(e)}unregister(e){return this.logger.log(`[${this.id}] Unregistering UserAgent...`),this.sessionManager.unregister(e)}call(e,t,r){return this.logger.log(`[${this.id}] Beginning Session...`),this.session?Promise.reject(new Error("Session already exists.")):this.sessionManager.call(e,t,r).then(()=>{})}hangup(){return this.logger.log(`[${this.id}] Hangup...`),this.session?this.sessionManager.hangup(this.session).then(()=>{this.session=void 0}):Promise.reject(new Error("Session does not exist."))}answer(e){return this.logger.log(`[${this.id}] Accepting Invitation...`),this.session?this.sessionManager.answer(this.session,e):Promise.reject(new Error("Session does not exist."))}decline(){return this.logger.log(`[${this.id}] rejecting Invitation...`),this.session?this.sessionManager.decline(this.session):Promise.reject(new Error("Session does not exist."))}hold(){return this.logger.log(`[${this.id}] holding session...`),this.session?this.sessionManager.hold(this.session):Promise.reject(new Error("Session does not exist."))}unhold(){return this.logger.log(`[${this.id}] unholding session...`),this.session?this.sessionManager.unhold(this.session):Promise.reject(new Error("Session does not exist."))}isHeld(){return this.session?this.sessionManager.isHeld(this.session):!1}mute(){return this.logger.log(`[${this.id}] disabling media tracks...`),this.session&&this.sessionManager.mute(this.session)}unmute(){return this.logger.log(`[${this.id}] enabling media tracks...`),this.session&&this.sessionManager.unmute(this.session)}isMuted(){return this.session?this.sessionManager.isMuted(this.session):!1}sendDTMF(e){return this.logger.log(`[${this.id}] sending DTMF...`),this.session?this.sessionManager.sendDTMF(this.session,e):Promise.reject(new Error("Session does not exist."))}message(e,t){return this.logger.log(`[${this.id}] sending message...`),this.sessionManager.message(e,t)}};var Kn=n=>{let e=n["x-antaios-manual-extend_info"]||n["x-antaios-manual-extend-info"],t=null;try{if(e&&typeof e=="string"){let r=e.replace(/\\/g,"");return t=JSON.parse(r),t}}catch{return{}}};var Yr=6;function Qa(n){return n.replace(/(\w+):\s*'(.*?)'/g,'"$1": "$2"').replace(/'/g,'"')}var ji=n=>{n&&n.getTracks().forEach(e=>e.stop())},ec=()=>{typeof navigator.mediaDevices>"u"&&(navigator.mediaDevices={}),typeof navigator.mediaDevices.getUserMedia>"u"&&(navigator.mediaDevices.getUserMedia=n=>{let e=navigator.getUserMedia||navigator.webkitGetUserMedia||navigator.mozGetUserMedia;return e?new Promise((t,r)=>{e.call(navigator,n,t,r)}):Promise.reject(new Error("Unable to obtain device permissions. Please check your browser settings or device permissions."))})},Jr=class{callKit;isMute=!1;isRegister=!1;isHold=!1;connectStatus=ne.init;currentSession;mediaStream;userAgent;registerer;isReConnected=!1;isOutgoing=!1;isUnprompted=!1;hasInvite=!1;constructor(e){this.callKit=e}get reconnectConfig(){return this.callKit.config.getReconnectConfig("sip")}currentCallId=null;getCurrentCallId(){return this.currentCallId}setOutgoing(e){this.isOutgoing!==e&&(this.callKit.logger.info("setOutgoing",{caller:"Connect.setOutgoing",content:{outgoing:e}}),this.isOutgoing=e)}setCallId(e){this.callKit.logger.info("setCallId",{caller:"Connect.setCallId",content:{callId:e}}),this.currentCallId=e,this.callKit.trigger(H.KIT_CALL_ID_CHANGE,e)}async reset(){if(this.setOutgoing(!1),this.isUnprompted=!1,this.hasInvite=!1,this.isHolding()&&await this.setHold(!1),this.isMuted()&&await this.setMute(!1),this.connectStatus!==ne.init&&this.setConnectStatus(ne.init),this.isRegistered()&&await this.unregister(),this.currentCallId&&this.setCallId(null),this.currentSession=void 0,this.mediaStream=void 0,this.userAgent=void 0,this.registerer=void 0,this.mediaStream)try{ji(this.mediaStream);let e=this.getAduioReference();e&&(e.pause(),e.srcObject=null)}catch(e){this.callKit.logger.error(e,{caller:"Connect.reset",content:{}})}this.setConnectStatus(ne.init),this.clearHeartbeat()}getAduioReference(){let{audioRef:e}=this.callKit.config.getConfig();return typeof e=="function"?e():e}async permission(){this.callKit.logger.info("permission",{caller:"Connect.permission",content:{permission:!0}}),ec();let e=await navigator.mediaDevices.getUserMedia({audio:!0});ji(e)}isConnecting(){return this.connectStatus===ne.connecting}isCalling(){return this.connectStatus===ne.calling}isRinging(){return this.connectStatus===ne.ringing}isHolding(){return this.isHold}isRegistered(){return this.isRegister}isMuted(){return this.isMute}isInit(){return this.connectStatus===ne.init}heartbeatInterval;heartbeatFlag=Yr;clearHeartbeat(){this.heartbeatInterval&&(clearInterval(this.heartbeatInterval),this.heartbeatInterval=null),this.heartbeatFlag=Yr}startHeartbeat(){this.heartbeatFlag=Yr,this.clearHeartbeat(),this.heartbeatInterval=setInterval(()=>{this.heartbeatFlag-=1,this.heartbeatFlag<=0&&(this.heartbeatFlag=Yr,this.callKit.trigger(H.SIP_CONNECT_EVENT,{event:"OPTIONS_HEARTBEAT_EXPIRED"}))},1e3)}socketTriggerHangup(e){!this.isCalling()||e!==this.currentCallId||(this.callKit.logger.info("socketHangup trigger hangup",{caller:"Connect.socketHangup",content:{callId:e,currentCallId:this.currentCallId}}),this.callKit.hangup())}async register(){if(this.connectStatus!==ne.init){if(this.isRegistered()){this.callKit.logger.warn("connectStatus is registered",{caller:"Connect.register",content:{errCode:V.CONNECT_CALL_STATUS_ERROR}});return}this.callKit.reset(),this.callKit.logger.error("connectStatus is not init",{caller:"Connect.register",content:{errCode:V.CONNECT_CALL_STATUS_ERROR}});return}this.callKit.logger.info("connect register",{caller:"Connect.register",content:{connectStatus:this.connectStatus}}),await this.permission().catch(_=>{this.callKit.reset(),this.callKit.logger.error(_,{caller:"Connect.register",content:{errCode:V.WEBRTC_USER_MEDIA_ERROR}})});let{userInfo:e,constrains:t}=this.callKit.config.getConfig(),r=async()=>(this.mediaStream=await navigator.mediaDevices.getUserMedia(t),this.mediaStream),{userPart:i,fsIp:s,fsPort:o,iceInfo:a,wsUrl:d}=e,h={uri:ce.makeURI(`sip:${i}@${s}:${o}`),displayName:i,transportOptions:{wsServers:[d],traceSip:!0},logLevel:"error",allowLegacyNotifications:!0,contactName:i,sessionDescriptionHandlerFactory:Wr.defaultSessionDescriptionHandlerFactory(r),sessionDescriptionHandlerFactoryOptions:{constraints:t,iceGatheringTimeout:e.iceGatheringTimeout,peerConnectionConfiguration:{iceServers:JSON.parse(Qa(a))}}};this.callKit.logger.info("connect connectConfig",{caller:"Connect.register",content:h}),this.userAgent=new ce(h);let l=new MediaStream,u=_=>{let $=this.getAduioReference();this.callKit.logger.info("connect setupRemoteMedia",{caller:"Connect.register.setupRemoteMedia",content:$}),_.sessionDescriptionHandler.peerConnection.getReceivers().forEach(N=>{N.track&&l.addTrack(N.track)}),$?($.srcObject=l,$.play().catch(N=>{this.callKit.logger.error(N.message,{caller:"Connect.register.setupRemoteMedia",content:{errCode:V.WEBRTC_AUDIO_PLAY_ERROR}})})):this.callKit.logger.error("video is not exist",{caller:"Connect.register",content:{errCode:V.WEBRTC_AUDIO_PLAYER_ERROR}})},T=(_,$)=>{let{that:N=this}=$,P=_.userAgentCore,k=P.receiveIncomingRequestFromTransport.bind(P);P.receiveIncomingRequestFromTransport=x=>(x.method==="OPTIONS"&&N.startHeartbeat(),N.callKit.logger.info(`SIP Receive: ${x?.method}`,{caller:"Connect.register.observeSocketStatus.receiveRequest",type:"SIP",content:{request:x}}),k(x));let C=P.receiveIncomingResponseFromTransport.bind(P);P.receiveIncomingResponseFromTransport=x=>(N.callKit.logger.info(`SIP Receive Response: ${x?.statusCode} ${x?.reasonPhrase}`,{caller:"Connect.register.observeSocketStatus.receiveResponse",type:"SIP",content:{response:x}}),C(x));let{transport:f}=_;if(f){let x=f.send.bind(f);f.send=w=>(N.callKit.logger.info("SIP send message",{caller:"Connect.register.observeSocketStatus",type:"SIP",content:{message:w.toString()}}),x(w))}},A={};this.registerer=new Ce(this.userAgent,A),this.registerer.stateChange.addListener(_=>{switch(_){case M.Initial:this.callKit.logger.info("registerer stateChange Initial",{caller:"Connect.register.registererStateChange",type:"SIP",content:{registererState:_,isRegistered:this.isRegistered()}}),this.setRegister(!1),this.setConnectStatus(ne.init),this.callKit.trigger(H.SIP_REGISTERER_EVENT,{registererState:_,isRegistered:this.isRegistered()});break;case M.Registered:this.callKit.logger.info("registerer stateChange Registered",{caller:"Connect.register.registererStateChange",type:"SIP",content:{registererState:_,isRegistered:this.isRegistered()}}),this.setRegister(!0),this.callKit.trigger(H.SIP_REGISTERER_EVENT,{registererState:_,isRegistered:this.isRegistered()});break;case M.Terminated:this.callKit.logger.info("registerer stateChange Terminated",{caller:"Connect.register.registererStateChange",type:"SIP",content:{registererState:_,isRegistered:this.isRegistered()}}),this.setRegister(!1),this.setConnectStatus(ne.init),this.callKit.trigger(H.SIP_REGISTERER_EVENT,{registererState:_,isRegistered:this.isRegistered()});break;case M.Unregistered:this.callKit.logger.info("registerer stateChange Unregistered",{caller:"Connect.register.registererStateChange",type:"SIP",content:{isRegistered:this.isRegistered(),registererState:_}}),this.setRegister(!1),this.setConnectStatus(ne.init),this.callKit.trigger(H.SIP_REGISTERER_EVENT,{registererState:_,isRegistered:this.isRegistered()});break;default:break}}),this.userAgent.delegate={onInvite:_=>{this.callKit.logger.info("connect onInvite",{type:"SIP",caller:"Connect.register.onInvite",content:{invite:_,isRegistered:this.isRegistered(),isOutgoing:this.isOutgoing}}),this.currentSession=_,this.currentSession.stateChange.addListener(k=>{switch(k){case v.Establishing:this.callKit.logger.info("connect Establishing",{caller:"Connect.register.onInvite",type:"SIP",content:{sessionState:k}}),this.setConnectStatus(ne.ringing),this.callKit.trigger(H.SIP_SESSION_EVENT,{sessionState:k,isRegistered:this.isRegistered()});break;case v.Established:this.callKit.logger.info("connect Established",{caller:"Connect.register.onInvite",type:"SIP",content:{sessionState:k}}),this.callKit.connect.setConnectStatus(ne.calling),this.callKit.trigger(H.SIP_SESSION_EVENT,{sessionState:k,isRegistered:this.isRegistered()}),u(this.currentSession);break;case v.Terminating:this.callKit.trigger(H.SIP_SESSION_EVENT,{sessionState:k,isRegistered:this.isRegistered()});break;case v.Terminated:this.callKit.logger.info("connect Terminated",{caller:"Connect.register.onInvite",type:"SIP",content:{sessionState:k}}),this.hasInvite=!1,this.isUnprompted||this.callKit.callCenter.callEnd(),this.isUnprompted=!1,this.callKit.trigger(H.SIP_SESSION_EVENT,{sessionState:k,isRegistered:this.isRegistered()});break;default:break}});let $={sessionDescriptionHandlerOptions:{constraints:t,alwaysAcquireMediaFirst:!0}},N=()=>{let{request:k}=this.currentSession,C=Object.keys(k.headers),f={};return C.filter(x=>x.toLocaleLowerCase().startsWith("x-antaios")).forEach(x=>{f[x.toLocaleLowerCase()]=k.getHeader(x)}),this.callKit.logger.info("get invite data",{caller:"Connect.register.onInvite",content:f}),f},P=N();try{let k=Kn(P);k?.callUuid?this.setCallId(k.callUuid):(this.setCallId(null),this.callKit.logger.warn("call id is not exist",{caller:"Connect.register.onInvite",content:{inviteData:k}}))}catch(k){this.callKit.logger.info(k,{caller:"Connect.register.onInvite",content:P})}if(this.isOutgoing)this.currentSession.accept($),this.callKit.trigger(H.KIT_OUTGOING_INVITE,{getInviteData:N});else{this.hasInvite=!0;let k=()=>{this.currentSession?.state!==v.Terminated&&this.currentSession?.state!==v.Terminating&&this.currentSession.reject(),this.hasInvite=!1,this.callKit.callCenter.callEnd(!0,!1)};this.callKit.trigger(H.KIT_INVITE,{accept:()=>{this.callKit.trigger(H.CALL_CONNECTING,new Date),this.hasInvite=!1,this.currentSession.accept($)},reject:k,getInviteData:N})}},onConnect:async()=>{this.reconnectAttempts=0,this.reconnectTimer=null,this.callKit.logger.info("connect onConnect",{caller:"Connect.register",type:"SIP",content:{version:`${this.callKit.config.getConfig().version}`}}),await this.registerer.register().catch(async _=>{this.callKit.reset(),this.callKit.logger.error(_?.message,{caller:"Connect.register",type:"SIP",content:{errCode:V.WEBRTC_REGISTER_ERROR}})})},onDisconnect:_=>{_?(this.callKit.logger.warn("SIP User Agent Disconnected with error",{caller:"Connect.register",type:"SIP",content:{err:_.message,errCode:V.WEBRTC_USER_AGENT_ERROR}}),this.startReconnectTimer()):this.callKit.logger.warn("SIP User Agent Disconnected",{caller:"Connect.register",type:"SIP",content:{}})},onRegister:()=>{this.callKit.logger.info("connect onRegister",{caller:"Connect.register",type:"SIP",content:{version:`V${this.callKit.config.getConfig().version}`}})}},T(this.userAgent,{that:this}),await this.userAgent.start().catch(_=>{this.callKit.reset(),this.callKit.logger.error(_,{caller:"Connect.register",type:"SIP",content:{errCode:V.WEBRTC_USER_AGENT_ERROR}})})}reconnectTimer;reconnectAttempts=0;startReconnectTimer(){if(this.reconnectAttempts>=this.reconnectConfig.maxAttempts&&this.callKit.config.isLogin()){this.callKit.reset(),this.callKit.logger.error("Reconnect failed max attempts",{caller:"Connect.startReconnectTimer",type:"SIP",content:{errCode:V.SOCKET_RECONNECT_FAILED,maxAttempts:this.reconnectConfig.maxAttempts,delay:this.reconnectConfig.delay}});return}this.callKit.logger.info("Reconnect timer started",{caller:"Connect.startReconnectTimer",type:"SIP",content:{reconnectAttempts:this.reconnectAttempts,maxAttempts:this.reconnectConfig.maxAttempts,delay:this.reconnectConfig.delay}}),this.reconnectAttempts+=1,this.reconnectTimer=setTimeout(()=>{this.reconnectTimer&&this.callKit.config.isLogin()?(this.userAgent?.reconnect(),this.callKit.logger.info("Reconnect attempt",{caller:"Connect.startReconnectTimer",type:"SIP",content:{reconnectAttempts:this.reconnectAttempts,maxAttempts:this.reconnectConfig.maxAttempts,delay:this.reconnectConfig.delay}})):this.callKit.logger.info("Reconnect timer already expired",{caller:"Connect.startReconnectTimer",type:"SIP",content:{reconnectAttempts:this.reconnectAttempts,maxAttempts:this.reconnectConfig.maxAttempts,delay:this.reconnectConfig.delay}})},this.reconnectConfig.delay)}async stop(){await this.userAgent.stop()}async unregister(){if(this.callKit.logger.info("connect unregister",{caller:"Connect.unregister",type:"SIP",content:{isRegistered:this.isRegistered()}}),!this.isRegistered()||!this.registerer){this.callKit.logger.warn("No registerer to unregister.",{caller:"Connect.unregister",type:"SIP",content:{errCode:V.WEBRTC_CANCEL_REGISTER_ERROR}});return}await this.registerer.unregister({all:!0}).catch(e=>{this.callKit.logger.warn(e,{caller:"Connect.unregister",type:"SIP",content:{errCode:V.WEBRTC_CANCEL_REGISTER_ERROR}})}).finally(()=>{this.setRegister(!1)}),await this.userAgent?.stop().catch(e=>{this.callKit.logger.warn(e,{caller:"Connect.unregister",type:"SIP",content:{errCode:V.WEBRTC_CANCEL_REGISTER_ERROR}})})}async call(e){this.callKit.logger.info("connect call",{caller:"Connect.call",type:"SIP",content:{callback:e}}),this.setOutgoing(!0),this.isRegistered()||await this.register(),this.setConnectStatus(ne.connecting),this.callKit.trigger(H.CALL_CONNECTING,new Date);let{userInfo:t}=this.callKit.config.getConfig();e(t)}setRegister(e){this.isRegister!==e&&(this.callKit.logger.info("connect setRegister",{caller:"Connect.setRegister",type:"SIP",content:{register:e}}),this.isRegister=e,this.callKit.trigger(H.KIT_REGISTER_CHANGE,e))}setConnectStatus(e){this.callKit.logger.info("connect setConnectStatus",{caller:"Connect.setConnectStatus",type:"SIP",content:{status:e}}),this.connectStatus=e,this.callKit.trigger(H.KIT_CALL_STATUS_CHANGE,e)}async hangup(e=!1,t=!1){if(this.callKit.logger.info("connect hangup",{caller:"Connect.hangup",type:"SIP",content:{isUnprompted:e,isError:t,connectStatus:this.connectStatus}}),this.setOutgoing(!1),this.isUnprompted=e,this.setHold(!1),this.setMute(!1),this.connectStatus!==ne.init)try{e&&(this.isRinging()||this.isCalling())&&(this.hasInvite?(this.currentSession?.state!==v.Terminated&&this.currentSession?.state!==v.Terminating&&this.currentSession.reject(),this.hasInvite=!1):await this.currentSession?.bye()),ji(this.mediaStream);let r=this.getAduioReference();r&&(r.pause(),r.srcObject=null),this.setConnectStatus(ne.init),this.callKit.trigger(H.CALL_END,new Date),this.setCallId(null)}catch(r){this.callKit.trigger(H.CALL_END,new Date),this.callKit.reset(),this.callKit.logger.error(r,{caller:"Connect.hangup",type:"SIP",content:{connectStatus:this.connectStatus,isError:t,isUnprompted:e}})}}getRemoteMediaStream(e){this.callKit.logger.info("connect getRemoteMediaStream",{caller:"Connect.getRemoteMediaStream",type:"SIP",content:{session:e}});let t=e.sessionDescriptionHandler;if(t)return t.remoteMediaStream}setupRemoteMedia(e){this.callKit.logger.info("connect setupRemoteMedia",{caller:"Connect.setupRemoteMedia",type:"SIP",content:{session:e}});let t=this.getRemoteMediaStream(e),r=this.getAduioReference();r?(r.autoplay=!0,r.srcObject=t,r.play().catch(i=>{this.callKit.logger.error(i.message,{caller:"Connect.setupRemoteMedia",type:"SIP",content:{errCode:V.WEBRTC_AUDIO_PLAY_ERROR}})}),t.onaddtrack=()=>{this.callKit.logger.info("Remote media onaddtrack",{caller:"Connect.setupRemoteMedia",type:"SIP",content:{session:e}}),r.load(),r.play().catch(i=>{this.callKit.logger.error(i.message,{caller:"Connect.setupRemoteMedia",type:"SIP",content:{errCode:V.WEBRTC_AUDIO_PLAY_ERROR}})})}):this.callKit.logger.error("video is not exist",{caller:"Connect.setupRemoteMedia",type:"SIP",content:{errCode:V.WEBRTC_AUDIO_PLAYER_ERROR}})}async setHold(e){if(this.isHold===e){this.callKit.logger.warn("Already holding",{caller:"Connect.setHold",type:"SIP",content:{isHold:this.isHold}});return}this.callKit.socket.send(e?be.HOLD:be.UNHOLD),this.isHold=e,this.callKit.logger.info("connect setHold",{caller:"Connect.setHold",type:"SIP",content:{hold:e}}),this.callKit.trigger(H.KIT_SET_HOLD,e)}async setMute(e){if(this.isMute===e){this.callKit.logger.warn("Already muted",{caller:"Connect.setMute",type:"SIP",content:{isCalling:this.isCalling(),isMuted:this.isMuted()}});return}this.callKit.socket.send(e?be.MUTE:be.UNMUTE),this.isMute=e,this.callKit.trigger(H.KIT_SET_MUTE,e)}async refer(e,t){this.callKit.logger.info("connect refer",{caller:"Connect.refer",type:"SIP",content:{referTo:e,extra:t}});let r;e&&(r=ce.makeURI(e)),this.currentSession.refer(r,t?.sessionReferOptions)}};var zr=class{callKit;ws;lastPingTime=void 0;pingTimer;reconnectTimer;reconnectAttempts=0;connectAuthState={startConfirm:!1,isConnected:!1,isReconnecting:!1,isError:!1};get startConfirm(){return this.connectAuthState.startConfirm}get isError(){return this.connectAuthState.isError}constructor(e){this.callKit=e}get reconnectConfig(){return this.callKit.config.getReconnectConfig("incall")}init(){let{socket:e}=this.callKit.config.getConfig();this.callKit.logger.info(`socket init: ${e}`,{caller:"Socket.init",type:"INCALL",content:{socket:e}}),this.connect(e)}setConnectAuthState(e,t){this.connectAuthState[e]!==t&&(this.connectAuthState[e]=t)}handleDisconnect(){this.setConnectAuthState("isConnected",!1);let{enabled:e}=this.reconnectConfig;if(!this.callKit.config.isLogin()||!e){this.callKit.reset(),this.callKit.trigger(H.INCALL_CONNECT_EVENT,{event:"INCALL_NOT_CONNECTED"});return}this.connectAuthState.isReconnecting||this.connectAuthState.isError||this.attemptReconnect()}clearWebSocket(){this.ws&&(this.ws.onopen=null,this.ws.onclose=null,this.ws.onerror=null,this.ws.onmessage=null),(this.ws?.readyState===WebSocket.CONNECTING||this.ws?.readyState===WebSocket.OPEN)&&(this.ws?.close(1e3,"socket close"),this.callKit.logger.info("socket clear",{caller:"Socket.clearWebSocket",type:"INCALL",content:{}})),this.ws=void 0,this.setConnectAuthState("isConnected",!1)}connect(e){this.ws&&this.clearWebSocket(),this.ws=new WebSocket(e),this.ws.onopen=t=>this.onOpen(t),this.ws.onclose=t=>this.onClose(t),this.ws.onerror=t=>this.onError(t),this.ws.onmessage=t=>this.onMessage(t)}onOpen(e){this.callKit.logger.info("socket onOpen",{caller:"Socket.onOpen",type:"INCALL",content:{ev:e}}),this.setConnectAuthState("isConnected",!0),this.lastPingTime=Date.now(),this.checkPing(),this.send(be.START),this.connectAuthState.isReconnecting&&(this.setConnectAuthState("isReconnecting",!1),this.callKit.logger.info("reconnect success",{caller:"Socket.onOpen",type:"INCALL",content:{event:"INCALL_RECONNECT_SUCCESS",reconnectAttempts:this.reconnectAttempts}}),this.callKit.trigger(H.INCALL_CONNECT_EVENT,{event:"INCALL_RECONNECT_SUCCESS"}))}cleanReconnectState(){this.reconnectAttempts=0,this.reconnectTimer&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=void 0),this.setConnectAuthState("isReconnecting",!1),this.setConnectAuthState("isError",!1)}resetConnectState(){this.connectAuthState={startConfirm:!1,isConnected:!1,isReconnecting:!1,isError:!1},this.cleanReconnectState(),this.callKit.logger.info("reset connect state",{caller:"Socket.resetConnectState",type:"INCALL",content:{reconnectAttempts:this.reconnectAttempts,connectAuthState:this.connectAuthState}})}onClose(e){this.callKit.logger.info("socket onClose",{caller:"Socket.onClose",type:"INCALL",content:{ev:e}}),this.handleDisconnect()}onError(e){this.callKit.trigger(H.INCALL_CONNECT_EVENT,{event:"INCALL_CONNECT_ERROR",err:e}),this.callKit.logger.error("socket onError",{caller:"Socket.onError",type:"INCALL",content:{errCode:V.SOCKET_CONNECT_ERROR,data:e}})}confirmAck(e){let{ack:t,messageId:r}=e;t&&this.send(be.ACK,{messageId:r})}onMessage(e){let t=JSON.parse(e.data),r=t.data;try{typeof t.data=="string"&&t.data&&(r=JSON.parse(t.data))}catch{this.callKit.logger.info("socket onMessage parse error",{caller:"Socket.onMessage",type:"INCALL",content:{data:t.data}})}this.callKit.logger.info(`socket onMessage: ${t.event}`,{caller:"Socket.onMessage",type:"INCALL",content:{data:r,event:t.event}}),this.confirmAck(t);let i=r?.callUuid||"";if(t.event===pe.PONG){this.lastPingTime=Date.now();return}if(t.event===pe.START_CONFIRM&&(this.setConnectAuthState("startConfirm",!0),this.cleanReconnectState()),t.event===pe.CUSTOMER_RINGING&&this.callKit.trigger(H.CALL_RINGING,{time:new Date,callUuid:i}),t.event===pe.CUSTOMER_PICK_UP&&this.callKit.trigger(H.CALL_PICK_UP,{time:new Date,callUuid:i}),t.event===pe.AGENT_PICK_UP&&this.callKit.trigger(H.AGENT_PICK_UP,{time:new Date,callUuid:i}),t.event===pe.CUSTOMER_HANG_UP&&(this.callKit.trigger(H.CALL_HANG_UP,{time:new Date,callUuid:i}),i&&this.callKit.connect.socketTriggerHangup(i)),t.event===pe.CUSTOMER_NO_ANSWER&&(this.callKit.trigger(H.CALL_NO_ANSWER,{time:new Date,callUuid:i}),i&&this.callKit.connect.socketTriggerHangup(i)),t.event===pe.CALL_CDR&&this.callKit.trigger(H.CALL_CDR,{time:new Date,callUuid:i,...r}),t.event===pe.CLOSE){let{userInfo:s}=this.callKit.config.getConfig();this.send(be.END,{agentId:s.agentId,callUuid:i})}t.event===pe.ERROR&&(this.setConnectAuthState("isError",!0),this.callKit.reset(),this.callKit.logger.error(t.msg,{caller:`Socket.onMessage:${t.event}`,type:"INCALL",content:{errCode:V.SOKET_SERVER_ERROR,data:r,callUuid:i}})),t.event===pe.SESSION_ERROR&&(this.setConnectAuthState("isError",!0),this.callKit.reset(),this.callKit.logger.error(t.msg,{caller:`Socket.onMessage:${t.event}`,type:"INCALL",content:{data:r,event:pe.SESSION_ERROR,callUuid:i}})),t.event===pe.AGENT_NO_ANSWER&&i&&this.callKit.connect.socketTriggerHangup(i),t.event===pe.AGENT_HANG_UP&&i&&this.callKit.connect.socketTriggerHangup(i),this.callKit.trigger(H.SERVER_SOCKET_EVENT,{...t,callUuid:i})}send(e,t){if(!this.connectAuthState.isConnected){this.callKit.trigger(H.INCALL_CONNECT_EVENT,{event:"INCALL_NOT_CONNECTED"}),this.callKit.reset(),this.callKit.logger.error("socket not connected",{caller:"Socket.send",type:"INCALL",content:{errCode:V.SOCKET_CONNECT_ERROR}});return}let{userInfo:r,version:i}=this.callKit.config.getConfig(),{sessionId:s,extno:o,agentId:a}=r;if(this.callKit.logger.info("Socket send",{caller:"Socket.send",type:"INCALL",content:{agentId:a,sessionId:s,userInfo:r}}),!s){this.callKit.logger.error("sessionId is empty",{caller:"Socket.send",type:"INCALL",content:{errCode:V.SOCKET_CONNECT_ERROR}});return}let d={event:e,sessionId:s,version:i,...t};be.CALL===e&&(d.phoneNum=o,d.agentId=a,t?.sourceType===xe.phoneNum?delete d.workOrderId:t?.sourceType===xe.workOrderId&&delete d.phoneNum),this.callKit.logger.info("socket send",{caller:"Socket.send",type:"INCALL",content:{...d}}),this.ws?.send(JSON.stringify({event:e,...d}))}ping(){if(!this.connectAuthState.isConnected)return;this.send(be.PING);let e=Date.now(),{pingInterval:t,pingTimeout:r}=this.reconnectConfig;e-this.lastPingTime>t+r&&(this.ws&&this.connectAuthState.isConnected?this.ws.close(4001,"ping timeout"):this.callKit.reset(),this.callKit.logger.error("socket ping timeout",{caller:"Socket.ping",type:"INCALL",content:{errCode:V.SOCKET_PING_TIMEOUT}}),this.callKit.trigger(H.INCALL_CONNECT_EVENT,{event:"INCALL_PING_TIMEOUT"}))}checkPing(){this.pingTimer&&clearInterval(this.pingTimer);let{pingInterval:e}=this.reconnectConfig;this.pingTimer=setInterval(()=>{this.ping()},e)}async reset(e){let{force:t=!1}=e||{};this.pingTimer&&(clearInterval(this.pingTimer),this.pingTimer=void 0),t&&(this.callKit.trigger(H.INCALL_CONNECT_EVENT,{event:"INCALL_RESET"}),this.resetConnectState()),this.lastPingTime=void 0,this.setConnectAuthState("startConfirm",!1),this.clearWebSocket()}attemptReconnect(){this.reconnectTimer&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=void 0);let{maxAttempts:e}=this.reconnectConfig;if(this.reconnectAttempts>=e){this.callKit.trigger(H.INCALL_CONNECT_EVENT,{event:"INCALL_RECONNECT_ERROR"}),this.callKit.reset(),this.callKit.logger.error("Maximum reconnection attempts reached",{caller:"Socket.attemptReconnect",type:"INCALL",content:{errCode:V.SOCKET_RECONNECT_FAILED,reconnectAttempts:this.reconnectAttempts}});return}this.reconnectAttempts===0&&this.callKit.trigger(H.INCALL_CONNECT_EVENT,{event:"INCALL_RECONNECT_START"}),this.setConnectAuthState("isReconnecting",!0),this.reconnectAttempts+=1;let{delay:t}=this.reconnectConfig;this.callKit.logger.info(`Preparing reconnection attempt ${this.reconnectAttempts}/${e}, delay: ${t}ms`,{caller:"Socket.attemptReconnect",type:"INCALL",content:{reconnectAttempts:this.reconnectAttempts,maxAttempts:e,delay:t}}),this.reconnectTimer=setTimeout(()=>{let{socket:r}=this.callKit.config.getConfig();this.connect(r)},t)}};var Ki=class{api;config;logger;callCenter;connect;socket;listener=[];constructor(e){this.config=new Cr(this),this.api=new fr(this),this.connect=new Jr(this),this.callCenter=new mr(this),this.socket=new zr(this),this.logger=new vr(this,e.log),e.log&&this.config.setConfig("log",e.log),e.trackLogs&&this.config.setConfig("trackLogs",{...Mt,...e.trackLogs}),e.audioRef&&this.config.setConfig("audioRef",e.audioRef),e.host&&this.config.setConfig("host",e.host),this.config.setConfig("constrains",e.constrains||pr),this.config.setConfig("socket",e.socket),this.config.setConfig("reconnect",{sip:{...Ut,...e.reconnect?.sip||{}},incall:{...Ft,...e.reconnect?.incall||{}}}),this.logger.info("callKit init",{caller:"CallKit.init",content:e})}async login(e,t,r={encryptionMethod:je.INTERNAL}){if(this.config.isLogin()){this.logger.warn("already login",{caller:"CallKit.login",content:{username:e,password:t,extra:r}});return}let i="",{encryptionMethod:s=je.INTERNAL}=r;switch(s){case je.NONE:i=t;break;case je.INTERNAL:i=(0,Gt.default)(e+(0,Gt.default)(t));break;default:i=(0,Gt.default)(e+(0,Gt.default)(t));break}if(this.logger.info("login info:",{caller:"CallKit.login",content:{username:e,password:t,encryptionMethod:s,encryptionPassword:i}}),this.socket.isError){this.logger.warn("socket is error",{caller:"CallKit.login",content:{username:e,password:t,extra:r,socketError:this.socket.isError}});return}try{let o=await this.api.login({userName:e,password:i,timestamp:Date.now()});o&&(this.config.setConfig("userInfo",{wsUrl:`wss://${o.wsUrl}`,sessionId:o.sessionId,username:e,password:i,encryptionPassword:i,agentId:o.agentId,fsUserId:o.fsUserId,userPart:o.userPart,fsPassword:o.fsPassword,fsIp:o.fsIp,fsPort:o.fsPort,iceInfo:o.iceInfo,iceGatheringTimeout:o.iceGatheringTimeout,logGather:o.logGather,...r}),this.socket.init(),this.trigger(H.KIT_LOGIN_CHANGE,!0))}catch(o){this.logger.error(o,{caller:"CallKit.login",content:{errCode:V.API_USER_LOGIN_ERROR}})}}async logout({isReset:e=!0}={isReset:!0}){if(!this.config.check())return;let{userInfo:t}=this.config.getConfig();if(this.logger.info("logout",{caller:"CallKit.logout",content:{sessionId:t.sessionId}}),this.config.isLogin()){let{sessionId:r}=t;try{await this.api.loginOut({sessionId:r,timestamp:Date.now()})}catch(i){this.logger.warn(i,{caller:"CallKit.logout",content:{errCode:V.API_USER_LOGOUT_ERROR}})}}e?await this.reset():this.config.reset()}async call(e="",t={sourceType:xe.phoneNum,workOrderId:""}){if(!this.config.check())return;if(!this.connect.isRegistered){this.logger.warn("Currently not registered",{caller:"CallKit.call",content:{extno:e,options:t}});return}let{sourceType:r,workOrderId:i}=t;this.config.setUserInfo("sourceType",r),r===xe.phoneNum?e&&this.config.setUserInfo("extno",e):r===xe.workOrderId&&i&&this.config.setUserInfo("workOrderId",i),this.logger.info("call",{caller:"CallKit.call",content:{extno:e,options:t}}),this.callCenter.callStart(t)}async refer(e,t){this.config.check()&&(this.logger.info("refer",{caller:"CallKit.refer",content:{uri:e,options:t}}),this.callCenter.callRefer(e,t))}async register(){this.config.check()&&(this.logger.info("register",{caller:"CallKit.register",content:{}}),this.connect.register())}async unregister(){this.config.check()&&(this.logger.info("unregister",{caller:"CallKit.unregister",content:{}}),this.connect.unregister())}async hangup(){if(this.config.check()){if(this.logger.info("hangup",{caller:"CallKit.hangup",content:{connectStatus:this.connect.connectStatus}}),!this.connect.isConnecting()&&!this.connect.isRinging()&&!this.connect.isCalling()&&!this.connect.isHolding()){this.logger.warn("Currently not in a call",{caller:"CallKit.hangup",content:{connectStatus:this.connect.connectStatus}});return}await this.callCenter.callEnd(!0)}}hold(){this.config.check()&&(this.logger.info("hold",{caller:"CallKit.hold",content:{connectStatus:this.connect.connectStatus}}),this.callCenter.callHold())}unhold(){this.config.check()&&(this.logger.info("unhold",{caller:"CallKit.unhold",content:{connectStatus:this.connect.connectStatus}}),this.callCenter.callUnhold())}mute(){this.config.check()&&(this.logger.info("mute",{caller:"CallKit.mute",content:{connectStatus:this.connect.connectStatus}}),this.callCenter.callMute())}unmute(){this.config.check()&&(this.logger.info("unmute",{caller:"CallKit.unmute",content:{connectStatus:this.connect.connectStatus}}),this.callCenter.callUnmute())}async setUserStatus(e,t={}){let{agentId:r}=this.config.getConfig().userInfo;this.logger.info("setUserStatus",{caller:"CallKit.setUserStatus",content:{status:e,agentId:r}}),await this.api.updateUserStatus({agentId:r,userStatus:e,timestamp:Date.now(),...t})}async reset(e){let{force:t=!1}=e||{};this.logger.info("reset",{caller:"CallKit.reset",content:{connectStatus:this.connect.connectStatus,force:t}}),this.connect.isCalling()&&await this.hangup(),await this.connect.reset(),this.config.isLogin()?await this.logout({isReset:!1}):await this.config.reset(),await this.socket.reset({force:t})}on(e,t){this.listener.push({event:e,callback:t})}off(e,t){this.logger.info(`off ${e}`,{caller:"CallKit.off",content:{event:e}}),t?this.listener=this.listener.filter(r=>!(r.event===e&&r.callback===t)):this.listener=this.listener.filter(r=>r.event!==e)}removeAllListeners(){this.listener=this.listener.splice(0,this.listener.length),this.logger.info("removeAllListeners",{caller:"CallKit.removeAllListeners",content:{listener:this.listener}})}trigger(e,t,r=!1){r||this.logger.info(`Trigger Event: ${e}`,{caller:"CallKit.trigger",content:t}),this.listener.forEach(i=>{if(i.event===e)try{i.callback(t)}catch(s){this.logger.error(`Event callback error: ${e}`,s,!0)}})}};return zn(tc);})();
65
+ `,2);if(o.length!==2){r.reject();return}let a,d=/^(Signal\s*?=\s*?)([0-9A-D#*]{1})(\s)?.*/;if(o[0]!==void 0&&d.test(o[0])&&(a=o[0].replace(d,"$2")),!a){r.reject();return}let h,l=/^(Duration\s?=\s?)([0-9]{1,4})(\s)?.*/;if(o[1]!==void 0&&l.test(o[1])&&(h=parseInt(o[1].replace(l,"$2"),10)),!h){r.reject();return}r.accept().then(()=>{if(this.delegate&&this.delegate.onCallDTMFReceived){if(!a||!h)throw new Error("Tone or duration undefined.");this.delegate.onCallDTMFReceived(e,a,h)}}).catch(u=>{this.logger.error(u.message)})},e.delegate.onRefer=r=>{r.accept().then(()=>this.sendInvite(r.makeInviter(t),t)).catch(i=>{this.logger.error(i.message)})}}optionsPingRun(e,t,r){if(this.options.optionsPingInterval<1)throw new Error("Invalid options ping interval.");this.optionsPingRunning||(this.optionsPingRunning=!0,this.optionsPingTimeout=setTimeout(()=>{this.optionsPingTimeout=void 0;let i=()=>{this.optionsPingFailure=!1,this.optionsPingRunning&&(this.optionsPingRunning=!1,this.optionsPingRun(e,t,r))},s=()=>{this.logger.error("OPTIONS ping failed"),this.optionsPingFailure=!0,this.optionsPingRunning=!1,this.userAgent.transport.disconnect().catch(d=>this.logger.error(d))},o=this.userAgent.userAgentCore,a=o.makeOutgoingRequestMessage("OPTIONS",e,t,r,{});this.optionsPingRequest=o.request(a,{onAccept:()=>{this.optionsPingRequest=void 0,i()},onReject:d=>{this.optionsPingRequest=void 0,d.message.statusCode===408||d.message.statusCode===503?s():i()}})},this.options.optionsPingInterval*1e3))}optionsPingStart(){this.logger.log("OPTIONS pings started");let e,t,r;if(this.options.optionsPingRequestURI){if(e=ce.makeURI(this.options.optionsPingRequestURI),!e)throw new Error("Failed to create Request URI.");t=this.userAgent.contact.uri.clone(),r=this.userAgent.contact.uri.clone()}else if(this.options.aor){let i=ce.makeURI(this.options.aor);if(!i)throw new Error("Failed to create URI.");e=i.clone(),e.user=void 0,t=i.clone(),r=i.clone()}else{this.logger.error("You have enabled sending OPTIONS pings and as such you must provide either a) an AOR to register, or b) an RURI to use for the target of the OPTIONS ping requests. ");return}this.optionsPingRun(e,t,r)}optionsPingStop(){this.logger.log("OPTIONS pings stopped"),this.optionsPingRunning=!1,this.optionsPingFailure=!1,this.optionsPingRequest&&(this.optionsPingRequest.dispose(),this.optionsPingRequest=void 0),this.optionsPingTimeout&&(clearTimeout(this.optionsPingTimeout),this.optionsPingTimeout=void 0)}async sendInvite(e,t,r){return this.initSession(e,t),e.invite(r).then(()=>{this.logger.log(`[${e.id}] Sent INVITE`)})}sessionAdd(e){let t=this.options.managedSessionFactory(this,e);this.managedSessions.push(t)}sessionExists(e){return this.sessionManaged(e)!==void 0}sessionManaged(e){return this.managedSessions.find(t=>t.session.id===e.id)}sessionRemove(e){this.managedSessions=this.managedSessions.filter(t=>t.session.id!==e.id)}async setHold(e,t){if(!this.sessionExists(e))return Promise.reject(new Error("Session does not exist."));if(this.isHeld(e)===t)return Promise.resolve();if(!(e.sessionDescriptionHandler instanceof re))throw new Error("Session's session description handler not instance of SessionDescriptionHandler.");let i={requestDelegate:{onAccept:()=>{let a=this.sessionManaged(e);a!==void 0&&(a.held=t,this.enableReceiverTracks(e,!a.held),this.enableSenderTracks(e,!a.held&&!a.muted),this.delegate&&this.delegate.onCallHold&&this.delegate.onCallHold(e,a.held))},onReject:()=>{this.logger.warn(`[${e.id}] Re-invite request was rejected`);let a=this.sessionManaged(e);a!==void 0&&(a.held=!t,this.enableReceiverTracks(e,!a.held),this.enableSenderTracks(e,!a.held&&!a.muted),this.delegate&&this.delegate.onCallHold&&this.delegate.onCallHold(e,a.held))}}},s=e.sessionDescriptionHandlerOptionsReInvite;s.hold=t,e.sessionDescriptionHandlerOptionsReInvite=s;let o=this.sessionManaged(e);if(!o)throw new Error("Managed session is undefiend.");return o.held=t,e.invite(i).then(()=>{let a=this.sessionManaged(e);a!==void 0&&(this.enableReceiverTracks(e,!a.held),this.enableSenderTracks(e,!a.held&&!a.muted))}).catch(a=>{throw o.held=!t,a instanceof Fe&&this.logger.error(`[${e.id}] A hold request is already in progress.`),a})}setMute(e,t){if(!this.sessionExists(e)){this.logger.warn(`[${e.id}] A session is required to enabled/disable media tracks`);return}if(e.state!==v.Established){this.logger.warn(`[${e.id}] An established session is required to enable/disable media tracks`);return}let r=this.sessionManaged(e);r!==void 0&&(r.muted=t,this.enableSenderTracks(e,!r.held&&!r.muted))}setupLocalMedia(e){let t=this.sessionManaged(e);if(!t)throw new Error("Managed session does not exist.");let r=typeof this.options.media.local=="function"?this.options.media.local(e):this.options.media.local;t.mediaLocal=r;let i=r?.video;if(i){let s=this.getLocalMediaStream(e);if(!s)throw new Error("Local media stream undefiend.");i.srcObject=s,i.volume=0,i.play().catch(o=>{this.logger.error(`[${e.id}] Failed to play local media`),this.logger.error(o.message)})}}setupRemoteMedia(e){let t=this.sessionManaged(e);if(!t)throw new Error("Managed session does not exist.");let r=typeof this.options.media.remote=="function"?this.options.media.remote(e):this.options.media.remote;t.mediaRemote=r;let i=r?.video||r?.audio;if(i){let s=this.getRemoteMediaStream(e);if(!s)throw new Error("Remote media stream undefiend.");i.autoplay=!0,i.srcObject=s,i.play().catch(o=>{this.logger.error(`[${e.id}] Failed to play remote media`),this.logger.error(o.message)}),s.onaddtrack=()=>{this.logger.log("Remote media onaddtrack"),i.load(),i.play().catch(o=>{this.logger.error(`[${e.id}] Failed to play remote media`),this.logger.error(o.message)})}}}async terminate(e){switch(this.logger.log(`[${e.id}] Terminating...`),e.state){case v.Initial:if(e instanceof tt)return e.cancel().then(()=>{this.logger.log(`[${e.id}] Inviter never sent INVITE (canceled)`)});if(e instanceof Ge)return e.reject().then(()=>{this.logger.log(`[${e.id}] Invitation rejected (sent 480)`)});throw new Error("Unknown session type.");case v.Establishing:if(e instanceof tt)return e.cancel().then(()=>{this.logger.log(`[${e.id}] Inviter canceled (sent CANCEL)`)});if(e instanceof Ge)return e.reject().then(()=>{this.logger.log(`[${e.id}] Invitation rejected (sent 480)`)});throw new Error("Unknown session type.");case v.Established:return e.bye().then(()=>{this.logger.log(`[${e.id}] Session ended (sent BYE)`)});case v.Terminating:break;case v.Terminated:break;default:throw new Error("Unknown state")}return this.logger.log(`[${e.id}] Terminating in state ${e.state}, no action taken`),Promise.resolve()}};var ji=class{constructor(e,t={}){this.session=void 0,this.delegate=t.delegate,this.options=Object.assign({},t);let r={aor:this.options.aor,delegate:{onCallAnswered:()=>{var i,s;return(s=(i=this.delegate)===null||i===void 0?void 0:i.onCallAnswered)===null||s===void 0?void 0:s.call(i)},onCallCreated:i=>{var s,o;this.session=i,(o=(s=this.delegate)===null||s===void 0?void 0:s.onCallCreated)===null||o===void 0||o.call(s)},onCallReceived:()=>{var i,s;return(s=(i=this.delegate)===null||i===void 0?void 0:i.onCallReceived)===null||s===void 0?void 0:s.call(i)},onCallHangup:()=>{var i,s;this.session=void 0,!((i=this.delegate)===null||i===void 0)&&i.onCallHangup&&((s=this.delegate)===null||s===void 0||s.onCallHangup())},onCallHold:(i,s)=>{var o,a;return(a=(o=this.delegate)===null||o===void 0?void 0:o.onCallHold)===null||a===void 0?void 0:a.call(o,s)},onCallDTMFReceived:(i,s,o)=>{var a,d;return(d=(a=this.delegate)===null||a===void 0?void 0:a.onCallDTMFReceived)===null||d===void 0?void 0:d.call(a,s,o)},onMessageReceived:i=>{var s,o;return(o=(s=this.delegate)===null||s===void 0?void 0:s.onMessageReceived)===null||o===void 0?void 0:o.call(s,i.request.body)},onRegistered:()=>{var i,s;return(s=(i=this.delegate)===null||i===void 0?void 0:i.onRegistered)===null||s===void 0?void 0:s.call(i)},onUnregistered:()=>{var i,s;return(s=(i=this.delegate)===null||i===void 0?void 0:i.onUnregistered)===null||s===void 0?void 0:s.call(i)},onServerConnect:()=>{var i,s;return(s=(i=this.delegate)===null||i===void 0?void 0:i.onServerConnect)===null||s===void 0?void 0:s.call(i)},onServerDisconnect:()=>{var i,s;return(s=(i=this.delegate)===null||i===void 0?void 0:i.onServerDisconnect)===null||s===void 0?void 0:s.call(i)}},maxSimultaneousSessions:1,media:this.options.media,reconnectionAttempts:this.options.reconnectionAttempts,reconnectionDelay:this.options.reconnectionDelay,registererOptions:this.options.registererOptions,sendDTMFUsingSessionDescriptionHandler:this.options.sendDTMFUsingSessionDescriptionHandler,userAgentOptions:this.options.userAgentOptions};this.sessionManager=new dt(e,r),this.logger=this.sessionManager.userAgent.getLogger("sip.SimpleUser")}get id(){return this.options.userAgentOptions&&this.options.userAgentOptions.displayName||"Anonymous"}get localMediaStream(){return this.session&&this.sessionManager.getLocalMediaStream(this.session)}get remoteMediaStream(){return this.session&&this.sessionManager.getRemoteMediaStream(this.session)}get localAudioTrack(){return this.session&&this.sessionManager.getLocalAudioTrack(this.session)}get localVideoTrack(){return this.session&&this.sessionManager.getLocalVideoTrack(this.session)}get remoteAudioTrack(){return this.session&&this.sessionManager.getRemoteAudioTrack(this.session)}get remoteVideoTrack(){return this.session&&this.sessionManager.getRemoteVideoTrack(this.session)}connect(){return this.logger.log(`[${this.id}] Connecting UserAgent...`),this.sessionManager.connect()}disconnect(){return this.logger.log(`[${this.id}] Disconnecting UserAgent...`),this.sessionManager.disconnect()}isConnected(){return this.sessionManager.isConnected()}register(e){return this.logger.log(`[${this.id}] Registering UserAgent...`),this.sessionManager.register(e)}unregister(e){return this.logger.log(`[${this.id}] Unregistering UserAgent...`),this.sessionManager.unregister(e)}call(e,t,r){return this.logger.log(`[${this.id}] Beginning Session...`),this.session?Promise.reject(new Error("Session already exists.")):this.sessionManager.call(e,t,r).then(()=>{})}hangup(){return this.logger.log(`[${this.id}] Hangup...`),this.session?this.sessionManager.hangup(this.session).then(()=>{this.session=void 0}):Promise.reject(new Error("Session does not exist."))}answer(e){return this.logger.log(`[${this.id}] Accepting Invitation...`),this.session?this.sessionManager.answer(this.session,e):Promise.reject(new Error("Session does not exist."))}decline(){return this.logger.log(`[${this.id}] rejecting Invitation...`),this.session?this.sessionManager.decline(this.session):Promise.reject(new Error("Session does not exist."))}hold(){return this.logger.log(`[${this.id}] holding session...`),this.session?this.sessionManager.hold(this.session):Promise.reject(new Error("Session does not exist."))}unhold(){return this.logger.log(`[${this.id}] unholding session...`),this.session?this.sessionManager.unhold(this.session):Promise.reject(new Error("Session does not exist."))}isHeld(){return this.session?this.sessionManager.isHeld(this.session):!1}mute(){return this.logger.log(`[${this.id}] disabling media tracks...`),this.session&&this.sessionManager.mute(this.session)}unmute(){return this.logger.log(`[${this.id}] enabling media tracks...`),this.session&&this.sessionManager.unmute(this.session)}isMuted(){return this.session?this.sessionManager.isMuted(this.session):!1}sendDTMF(e){return this.logger.log(`[${this.id}] sending DTMF...`),this.session?this.sessionManager.sendDTMF(this.session,e):Promise.reject(new Error("Session does not exist."))}message(e,t){return this.logger.log(`[${this.id}] sending message...`),this.sessionManager.message(e,t)}};var Kn=n=>{let e=n["x-antaios-manual-extend_info"]||n["x-antaios-manual-extend-info"],t=null;try{if(e&&typeof e=="string"){let r=e.replace(/\\/g,"");return t=JSON.parse(r),t}}catch{return{}}};var Yr=6;function Qa(n){return n.replace(/(\w+):\s*'(.*?)'/g,'"$1": "$2"').replace(/'/g,'"')}var Ki=n=>{n&&n.getTracks().forEach(e=>e.stop())},ec=()=>{typeof navigator.mediaDevices>"u"&&(navigator.mediaDevices={}),typeof navigator.mediaDevices.getUserMedia>"u"&&(navigator.mediaDevices.getUserMedia=n=>{let e=navigator.getUserMedia||navigator.webkitGetUserMedia||navigator.mozGetUserMedia;return e?new Promise((t,r)=>{e.call(navigator,n,t,r)}):Promise.reject(new Error("Unable to obtain device permissions. Please check your browser settings or device permissions."))})},Jr=class{callKit;isMute=!1;isRegister=!1;isHold=!1;connectStatus=ne.init;currentSession;mediaStream;userAgent;registerer;isReConnected=!1;isOutgoing=!1;isUnprompted=!1;hasInvite=!1;constructor(e){this.callKit=e}get reconnectConfig(){return this.callKit.config.getReconnectConfig("sip")}currentCallId=null;getCurrentCallId(){return this.currentCallId}setOutgoing(e){this.isOutgoing!==e&&(this.callKit.logger.info("setOutgoing",{caller:"Connect.setOutgoing",content:{outgoing:e}}),this.isOutgoing=e)}setCallId(e){this.callKit.logger.info("setCallId",{caller:"Connect.setCallId",content:{callId:e}}),this.currentCallId=e,this.callKit.trigger(H.KIT_CALL_ID_CHANGE,e)}async reset(){if(this.setOutgoing(!1),this.isUnprompted=!1,this.hasInvite=!1,this.isHolding()&&await this.setHold(!1),this.isMuted()&&await this.setMute(!1),this.connectStatus!==ne.init&&this.setConnectStatus(ne.init),this.isRegistered()&&await this.unregister(),this.currentCallId&&this.setCallId(null),this.currentSession=void 0,this.mediaStream=void 0,this.userAgent=void 0,this.registerer=void 0,this.mediaStream)try{Ki(this.mediaStream);let e=this.getAduioReference();e&&(e.pause(),e.srcObject=null)}catch(e){this.callKit.logger.error(e,{caller:"Connect.reset",content:{}})}this.setConnectStatus(ne.init),this.clearHeartbeat()}getAduioReference(){let{audioRef:e}=this.callKit.config.getConfig();return typeof e=="function"?e():e}async permission(){this.callKit.logger.info("permission",{caller:"Connect.permission",content:{permission:!0}}),ec();let e=await navigator.mediaDevices.getUserMedia({audio:!0});Ki(e)}isConnecting(){return this.connectStatus===ne.connecting}isCalling(){return this.connectStatus===ne.calling}isRinging(){return this.connectStatus===ne.ringing}isHolding(){return this.isHold}isRegistered(){return this.isRegister}isMuted(){return this.isMute}isInit(){return this.connectStatus===ne.init}heartbeatInterval;heartbeatFlag=Yr;clearHeartbeat(){this.heartbeatInterval&&(clearInterval(this.heartbeatInterval),this.heartbeatInterval=null),this.heartbeatFlag=Yr}startHeartbeat(){this.heartbeatFlag=Yr,this.clearHeartbeat(),this.heartbeatInterval=setInterval(()=>{this.heartbeatFlag-=1,this.heartbeatFlag<=0&&(this.heartbeatFlag=Yr,this.callKit.trigger(H.SIP_CONNECT_EVENT,{event:"OPTIONS_HEARTBEAT_EXPIRED"}))},1e3)}socketTriggerHangup(e){!this.isCalling()||e!==this.currentCallId||(this.callKit.logger.info("socketHangup trigger hangup",{caller:"Connect.socketHangup",content:{callId:e,currentCallId:this.currentCallId}}),this.callKit.hangup())}async register(){if(this.connectStatus!==ne.init){if(this.isRegistered()){this.callKit.logger.warn("connectStatus is registered",{caller:"Connect.register",content:{errCode:V.CONNECT_CALL_STATUS_ERROR}});return}this.callKit.reset(),this.callKit.logger.error("connectStatus is not init",{caller:"Connect.register",content:{errCode:V.CONNECT_CALL_STATUS_ERROR}});return}this.callKit.logger.info("connect register",{caller:"Connect.register",content:{connectStatus:this.connectStatus}}),await this.permission().catch(_=>{this.callKit.reset(),this.callKit.logger.error(_,{caller:"Connect.register",content:{errCode:V.WEBRTC_USER_MEDIA_ERROR}})});let{userInfo:e,constrains:t}=this.callKit.config.getConfig(),r=async()=>(this.mediaStream=await navigator.mediaDevices.getUserMedia(t),this.mediaStream),{userPart:i,fsIp:s,fsPort:o,iceInfo:a,wsUrl:d}=e,h={uri:ce.makeURI(`sip:${i}@${s}:${o}`),displayName:i,transportOptions:{wsServers:[d],traceSip:!0},logLevel:"error",allowLegacyNotifications:!0,contactName:i,sessionDescriptionHandlerFactory:Wr.defaultSessionDescriptionHandlerFactory(r),sessionDescriptionHandlerFactoryOptions:{constraints:t,iceGatheringTimeout:e.iceGatheringTimeout,peerConnectionConfiguration:{iceServers:JSON.parse(Qa(a))}}};this.callKit.logger.info("connect connectConfig",{caller:"Connect.register",content:h}),this.userAgent=new ce(h);let l=new MediaStream,u=_=>{let $=this.getAduioReference();this.callKit.logger.info("connect setupRemoteMedia",{caller:"Connect.register.setupRemoteMedia",content:$}),_.sessionDescriptionHandler.peerConnection.getReceivers().forEach(N=>{N.track&&l.addTrack(N.track)}),$?($.srcObject=l,$.play().catch(N=>{this.callKit.logger.error(N.message,{caller:"Connect.register.setupRemoteMedia",content:{errCode:V.WEBRTC_AUDIO_PLAY_ERROR}})})):this.callKit.logger.error("video is not exist",{caller:"Connect.register",content:{errCode:V.WEBRTC_AUDIO_PLAYER_ERROR}})},T=(_,$)=>{let{that:N=this}=$,P=_.userAgentCore,k=P.receiveIncomingRequestFromTransport.bind(P);P.receiveIncomingRequestFromTransport=x=>(x.method==="OPTIONS"&&N.startHeartbeat(),N.callKit.logger.info(`SIP Receive: ${x?.method}`,{caller:"Connect.register.observeSocketStatus.receiveRequest",type:"SIP",content:{request:x}}),k(x));let C=P.receiveIncomingResponseFromTransport.bind(P);P.receiveIncomingResponseFromTransport=x=>(N.callKit.logger.info(`SIP Receive Response: ${x?.statusCode} ${x?.reasonPhrase}`,{caller:"Connect.register.observeSocketStatus.receiveResponse",type:"SIP",content:{response:x}}),C(x));let{transport:f}=_;if(f){let x=f.send.bind(f);f.send=w=>(N.callKit.logger.info("SIP send message",{caller:"Connect.register.observeSocketStatus",type:"SIP",content:{message:w.toString()}}),x(w))}},A={};this.registerer=new Ce(this.userAgent,A),this.registerer.stateChange.addListener(_=>{switch(_){case M.Initial:this.callKit.logger.info("registerer stateChange Initial",{caller:"Connect.register.registererStateChange",type:"SIP",content:{registererState:_,isRegistered:this.isRegistered()}}),this.setRegister(!1),this.setConnectStatus(ne.init),this.callKit.trigger(H.SIP_REGISTERER_EVENT,{registererState:_,isRegistered:this.isRegistered()});break;case M.Registered:this.callKit.logger.info("registerer stateChange Registered",{caller:"Connect.register.registererStateChange",type:"SIP",content:{registererState:_,isRegistered:this.isRegistered()}}),this.setRegister(!0),this.callKit.trigger(H.SIP_REGISTERER_EVENT,{registererState:_,isRegistered:this.isRegistered()});break;case M.Terminated:this.callKit.logger.info("registerer stateChange Terminated",{caller:"Connect.register.registererStateChange",type:"SIP",content:{registererState:_,isRegistered:this.isRegistered()}}),this.setRegister(!1),this.setConnectStatus(ne.init),this.callKit.trigger(H.SIP_REGISTERER_EVENT,{registererState:_,isRegistered:this.isRegistered()});break;case M.Unregistered:this.callKit.logger.info("registerer stateChange Unregistered",{caller:"Connect.register.registererStateChange",type:"SIP",content:{isRegistered:this.isRegistered(),registererState:_}}),this.setRegister(!1),this.setConnectStatus(ne.init),this.callKit.trigger(H.SIP_REGISTERER_EVENT,{registererState:_,isRegistered:this.isRegistered()});break;default:break}}),this.userAgent.delegate={onInvite:_=>{this.callKit.logger.info("connect onInvite",{type:"SIP",caller:"Connect.register.onInvite",content:{invite:_,isRegistered:this.isRegistered(),isOutgoing:this.isOutgoing}}),this.currentSession=_,this.currentSession.stateChange.addListener(k=>{switch(k){case v.Establishing:this.callKit.logger.info("connect Establishing",{caller:"Connect.register.onInvite",type:"SIP",content:{sessionState:k}}),this.setConnectStatus(ne.ringing),this.callKit.trigger(H.SIP_SESSION_EVENT,{sessionState:k,isRegistered:this.isRegistered()});break;case v.Established:this.callKit.logger.info("connect Established",{caller:"Connect.register.onInvite",type:"SIP",content:{sessionState:k}}),this.callKit.connect.setConnectStatus(ne.calling),this.callKit.trigger(H.SIP_SESSION_EVENT,{sessionState:k,isRegistered:this.isRegistered()}),u(this.currentSession);break;case v.Terminating:this.callKit.trigger(H.SIP_SESSION_EVENT,{sessionState:k,isRegistered:this.isRegistered()});break;case v.Terminated:this.callKit.logger.info("connect Terminated",{caller:"Connect.register.onInvite",type:"SIP",content:{sessionState:k}}),this.hasInvite=!1,this.isUnprompted||this.callKit.callCenter.callEnd(),this.isUnprompted=!1,this.callKit.trigger(H.SIP_SESSION_EVENT,{sessionState:k,isRegistered:this.isRegistered()});break;default:break}});let $={sessionDescriptionHandlerOptions:{constraints:t,alwaysAcquireMediaFirst:!0}},N=()=>{let{request:k}=this.currentSession,C=Object.keys(k.headers),f={};return C.filter(x=>x.toLocaleLowerCase().startsWith("x-antaios")).forEach(x=>{f[x.toLocaleLowerCase()]=k.getHeader(x)}),this.callKit.logger.info("get invite data",{caller:"Connect.register.onInvite",content:f}),f},P=N();try{let k=Kn(P);k?.callUuid?this.setCallId(k.callUuid):(this.setCallId(null),this.callKit.logger.warn("call id is not exist",{caller:"Connect.register.onInvite",content:{inviteData:k}}))}catch(k){this.callKit.logger.info(k,{caller:"Connect.register.onInvite",content:P})}if(this.isOutgoing)this.currentSession.accept($),this.callKit.trigger(H.KIT_OUTGOING_INVITE,{getInviteData:N});else{this.hasInvite=!0;let k=()=>{this.currentSession?.state!==v.Terminated&&this.currentSession?.state!==v.Terminating&&this.currentSession.reject(),this.hasInvite=!1,this.callKit.callCenter.callEnd(!0,!1)};this.callKit.trigger(H.KIT_INVITE,{accept:()=>{this.callKit.trigger(H.CALL_CONNECTING,new Date),this.hasInvite=!1,this.currentSession.accept($)},reject:k,getInviteData:N})}},onConnect:async()=>{this.reconnectAttempts=0,this.reconnectTimer=null,this.callKit.logger.info("connect onConnect",{caller:"Connect.register",type:"SIP",content:{version:`${this.callKit.config.getConfig().version}`}}),await this.registerer.register().catch(async _=>{this.callKit.reset(),this.callKit.logger.error(_?.message,{caller:"Connect.register",type:"SIP",content:{errCode:V.WEBRTC_REGISTER_ERROR}})})},onDisconnect:_=>{_?(this.callKit.logger.warn("SIP User Agent Disconnected with error",{caller:"Connect.register",type:"SIP",content:{err:_.message,errCode:V.WEBRTC_USER_AGENT_ERROR}}),this.startReconnectTimer()):this.callKit.logger.warn("SIP User Agent Disconnected",{caller:"Connect.register",type:"SIP",content:{}})},onRegister:()=>{this.callKit.logger.info("connect onRegister",{caller:"Connect.register",type:"SIP",content:{version:`V${this.callKit.config.getConfig().version}`}})}},T(this.userAgent,{that:this}),await this.userAgent.start().catch(_=>{this.callKit.reset(),this.callKit.logger.error(_,{caller:"Connect.register",type:"SIP",content:{errCode:V.WEBRTC_USER_AGENT_ERROR}})})}reconnectTimer;reconnectAttempts=0;startReconnectTimer(){if(this.reconnectAttempts>=this.reconnectConfig.maxAttempts&&this.callKit.config.isLogin()){this.callKit.reset(),this.callKit.logger.error("Reconnect failed max attempts",{caller:"Connect.startReconnectTimer",type:"SIP",content:{errCode:V.SOCKET_RECONNECT_FAILED,maxAttempts:this.reconnectConfig.maxAttempts,delay:this.reconnectConfig.delay}});return}this.callKit.logger.info("Reconnect timer started",{caller:"Connect.startReconnectTimer",type:"SIP",content:{reconnectAttempts:this.reconnectAttempts,maxAttempts:this.reconnectConfig.maxAttempts,delay:this.reconnectConfig.delay}}),this.reconnectAttempts+=1,this.reconnectTimer=setTimeout(()=>{this.reconnectTimer&&this.callKit.config.isLogin()?(this.userAgent?.reconnect(),this.callKit.logger.info("Reconnect attempt",{caller:"Connect.startReconnectTimer",type:"SIP",content:{reconnectAttempts:this.reconnectAttempts,maxAttempts:this.reconnectConfig.maxAttempts,delay:this.reconnectConfig.delay}})):this.callKit.logger.info("Reconnect timer already expired",{caller:"Connect.startReconnectTimer",type:"SIP",content:{reconnectAttempts:this.reconnectAttempts,maxAttempts:this.reconnectConfig.maxAttempts,delay:this.reconnectConfig.delay}})},this.reconnectConfig.delay)}async stop(){await this.userAgent.stop()}async unregister(){if(this.callKit.logger.info("connect unregister",{caller:"Connect.unregister",type:"SIP",content:{isRegistered:this.isRegistered()}}),!this.isRegistered()||!this.registerer){this.callKit.logger.warn("No registerer to unregister.",{caller:"Connect.unregister",type:"SIP",content:{errCode:V.WEBRTC_CANCEL_REGISTER_ERROR}});return}await this.registerer.unregister({all:!0}).catch(e=>{this.callKit.logger.warn(e,{caller:"Connect.unregister",type:"SIP",content:{errCode:V.WEBRTC_CANCEL_REGISTER_ERROR}})}).finally(()=>{this.setRegister(!1)}),await this.userAgent?.stop().catch(e=>{this.callKit.logger.warn(e,{caller:"Connect.unregister",type:"SIP",content:{errCode:V.WEBRTC_CANCEL_REGISTER_ERROR}})})}async call(e){this.callKit.logger.info("connect call",{caller:"Connect.call",type:"SIP",content:{callback:e}}),this.setOutgoing(!0),this.isRegistered()||await this.register(),this.setConnectStatus(ne.connecting),this.callKit.trigger(H.CALL_CONNECTING,new Date);let{userInfo:t}=this.callKit.config.getConfig();e(t)}setRegister(e){this.isRegister!==e&&(this.callKit.logger.info("connect setRegister",{caller:"Connect.setRegister",type:"SIP",content:{register:e}}),this.isRegister=e,this.callKit.trigger(H.KIT_REGISTER_CHANGE,e))}setConnectStatus(e){this.callKit.logger.info("connect setConnectStatus",{caller:"Connect.setConnectStatus",type:"SIP",content:{status:e}}),this.connectStatus=e,this.callKit.trigger(H.KIT_CALL_STATUS_CHANGE,e)}async hangup(e=!1,t=!1){if(this.callKit.logger.info("connect hangup",{caller:"Connect.hangup",type:"SIP",content:{isUnprompted:e,isError:t,connectStatus:this.connectStatus}}),this.setOutgoing(!1),this.isUnprompted=e,this.setHold(!1),this.setMute(!1),this.connectStatus!==ne.init)try{e&&(this.isRinging()||this.isCalling())&&(this.hasInvite?(this.currentSession?.state!==v.Terminated&&this.currentSession?.state!==v.Terminating&&this.currentSession.reject(),this.hasInvite=!1):await this.currentSession?.bye()),Ki(this.mediaStream);let r=this.getAduioReference();r&&(r.pause(),r.srcObject=null),this.setConnectStatus(ne.init),this.callKit.trigger(H.CALL_END,new Date),this.setCallId(null)}catch(r){this.callKit.trigger(H.CALL_END,new Date),this.callKit.reset(),this.callKit.logger.error(r,{caller:"Connect.hangup",type:"SIP",content:{connectStatus:this.connectStatus,isError:t,isUnprompted:e}})}}getRemoteMediaStream(e){this.callKit.logger.info("connect getRemoteMediaStream",{caller:"Connect.getRemoteMediaStream",type:"SIP",content:{session:e}});let t=e.sessionDescriptionHandler;if(t)return t.remoteMediaStream}setupRemoteMedia(e){this.callKit.logger.info("connect setupRemoteMedia",{caller:"Connect.setupRemoteMedia",type:"SIP",content:{session:e}});let t=this.getRemoteMediaStream(e),r=this.getAduioReference();r?(r.autoplay=!0,r.srcObject=t,r.play().catch(i=>{this.callKit.logger.error(i.message,{caller:"Connect.setupRemoteMedia",type:"SIP",content:{errCode:V.WEBRTC_AUDIO_PLAY_ERROR}})}),t.onaddtrack=()=>{this.callKit.logger.info("Remote media onaddtrack",{caller:"Connect.setupRemoteMedia",type:"SIP",content:{session:e}}),r.load(),r.play().catch(i=>{this.callKit.logger.error(i.message,{caller:"Connect.setupRemoteMedia",type:"SIP",content:{errCode:V.WEBRTC_AUDIO_PLAY_ERROR}})})}):this.callKit.logger.error("video is not exist",{caller:"Connect.setupRemoteMedia",type:"SIP",content:{errCode:V.WEBRTC_AUDIO_PLAYER_ERROR}})}async setHold(e){if(this.isHold===e){this.callKit.logger.warn("Already holding",{caller:"Connect.setHold",type:"SIP",content:{isHold:this.isHold}});return}this.callKit.socket.send(e?be.HOLD:be.UNHOLD),this.isHold=e,this.callKit.logger.info("connect setHold",{caller:"Connect.setHold",type:"SIP",content:{hold:e}}),this.callKit.trigger(H.KIT_SET_HOLD,e)}async setMute(e){if(this.isMute===e){this.callKit.logger.warn("Already muted",{caller:"Connect.setMute",type:"SIP",content:{isCalling:this.isCalling(),isMuted:this.isMuted()}});return}this.callKit.socket.send(e?be.MUTE:be.UNMUTE),this.isMute=e,this.callKit.trigger(H.KIT_SET_MUTE,e)}async refer(e,t){this.callKit.logger.info("connect refer",{caller:"Connect.refer",type:"SIP",content:{referTo:e,extra:t}});let r;e&&(r=ce.makeURI(e)),this.currentSession.refer(r,t?.sessionReferOptions)}};var zr=class{callKit;ws;lastPingTime=void 0;pingTimer;reconnectTimer;reconnectAttempts=0;connectAuthState={startConfirm:!1,isConnected:!1,isReconnecting:!1,isError:!1};get startConfirm(){return this.connectAuthState.startConfirm}get isError(){return this.connectAuthState.isError}constructor(e){this.callKit=e}get reconnectConfig(){return this.callKit.config.getReconnectConfig("incall")}init(){let{socket:e}=this.callKit.config.getConfig();this.callKit.logger.info(`socket init: ${e}`,{caller:"Socket.init",type:"INCALL",content:{socket:e}}),this.connect(e)}setConnectAuthState(e,t){this.connectAuthState[e]!==t&&(this.connectAuthState[e]=t)}handleDisconnect(){this.setConnectAuthState("isConnected",!1);let{enabled:e}=this.reconnectConfig;if(!this.callKit.config.isLogin()||!e){this.callKit.reset(),this.callKit.trigger(H.INCALL_CONNECT_EVENT,{event:"INCALL_NOT_CONNECTED"});return}this.connectAuthState.isReconnecting||this.connectAuthState.isError||this.attemptReconnect()}clearWebSocket(){this.ws&&(this.ws.onopen=null,this.ws.onclose=null,this.ws.onerror=null,this.ws.onmessage=null),(this.ws?.readyState===WebSocket.CONNECTING||this.ws?.readyState===WebSocket.OPEN)&&(this.ws?.close(1e3,"socket close"),this.callKit.logger.info("socket clear",{caller:"Socket.clearWebSocket",type:"INCALL",content:{}})),this.ws=void 0,this.setConnectAuthState("isConnected",!1)}connect(e){this.ws&&this.clearWebSocket(),this.ws=new WebSocket(e),this.ws.onopen=t=>this.onOpen(t),this.ws.onclose=t=>this.onClose(t),this.ws.onerror=t=>this.onError(t),this.ws.onmessage=t=>this.onMessage(t)}onOpen(e){this.callKit.logger.info("socket onOpen",{caller:"Socket.onOpen",type:"INCALL",content:{ev:e}}),this.setConnectAuthState("isConnected",!0),this.lastPingTime=Date.now(),this.checkPing(),this.send(be.START),this.connectAuthState.isReconnecting&&(this.setConnectAuthState("isReconnecting",!1),this.callKit.logger.info("reconnect success",{caller:"Socket.onOpen",type:"INCALL",content:{event:"INCALL_RECONNECT_SUCCESS",reconnectAttempts:this.reconnectAttempts}}),this.callKit.trigger(H.INCALL_CONNECT_EVENT,{event:"INCALL_RECONNECT_SUCCESS"}))}cleanReconnectState(){this.reconnectAttempts=0,this.reconnectTimer&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=void 0),this.setConnectAuthState("isReconnecting",!1),this.setConnectAuthState("isError",!1)}resetConnectState(){this.connectAuthState={startConfirm:!1,isConnected:!1,isReconnecting:!1,isError:!1},this.cleanReconnectState(),this.callKit.logger.info("reset connect state",{caller:"Socket.resetConnectState",type:"INCALL",content:{reconnectAttempts:this.reconnectAttempts,connectAuthState:this.connectAuthState}})}onClose(e){this.callKit.logger.info("socket onClose",{caller:"Socket.onClose",type:"INCALL",content:{ev:e}}),this.handleDisconnect()}onError(e){this.callKit.trigger(H.INCALL_CONNECT_EVENT,{event:"INCALL_CONNECT_ERROR",err:e}),this.callKit.logger.error("socket onError",{caller:"Socket.onError",type:"INCALL",content:{errCode:V.SOCKET_CONNECT_ERROR,data:e}})}confirmAck(e){let{ack:t,messageId:r}=e;t&&this.send(be.ACK,{messageId:r})}onMessage(e){let t=JSON.parse(e.data),r=t.data;try{typeof t.data=="string"&&t.data&&(r=JSON.parse(t.data))}catch{this.callKit.logger.info("socket onMessage parse error",{caller:"Socket.onMessage",type:"INCALL",content:{data:t.data}})}this.callKit.logger.info(`socket onMessage: ${t.event}`,{caller:"Socket.onMessage",type:"INCALL",content:{data:r,event:t.event}}),this.confirmAck(t);let i=r?.callUuid||"";if(t.event===pe.PONG){this.lastPingTime=Date.now();return}if(t.event===pe.START_CONFIRM&&(this.setConnectAuthState("startConfirm",!0),this.cleanReconnectState()),t.event===pe.CUSTOMER_RINGING&&this.callKit.trigger(H.CALL_RINGING,{time:new Date,callUuid:i}),t.event===pe.CUSTOMER_PICK_UP&&this.callKit.trigger(H.CALL_PICK_UP,{time:new Date,callUuid:i}),t.event===pe.AGENT_PICK_UP&&this.callKit.trigger(H.AGENT_PICK_UP,{time:new Date,callUuid:i}),t.event===pe.CUSTOMER_HANG_UP&&(this.callKit.trigger(H.CALL_HANG_UP,{time:new Date,callUuid:i}),i&&this.callKit.connect.socketTriggerHangup(i)),t.event===pe.CUSTOMER_NO_ANSWER&&(this.callKit.trigger(H.CALL_NO_ANSWER,{time:new Date,callUuid:i}),i&&this.callKit.connect.socketTriggerHangup(i)),t.event===pe.CALL_CDR&&this.callKit.trigger(H.CALL_CDR,{time:new Date,callUuid:i,...r}),t.event===pe.CLOSE){let{userInfo:s}=this.callKit.config.getConfig();this.send(be.END,{agentId:s.agentId,callUuid:i})}t.event===pe.ERROR&&(this.setConnectAuthState("isError",!0),this.callKit.reset(),this.callKit.logger.error(t.msg,{caller:`Socket.onMessage:${t.event}`,type:"INCALL",content:{errCode:V.SOKET_SERVER_ERROR,data:r,callUuid:i}})),t.event===pe.SESSION_ERROR&&(this.setConnectAuthState("isError",!0),this.callKit.reset(),this.callKit.logger.error(t.msg,{caller:`Socket.onMessage:${t.event}`,type:"INCALL",content:{data:r,event:pe.SESSION_ERROR,callUuid:i}})),t.event===pe.AGENT_NO_ANSWER&&i&&this.callKit.connect.socketTriggerHangup(i),t.event===pe.AGENT_HANG_UP&&i&&this.callKit.connect.socketTriggerHangup(i),this.callKit.trigger(H.SERVER_SOCKET_EVENT,{...t,callUuid:i})}send(e,t){if(!this.connectAuthState.isConnected){this.callKit.trigger(H.INCALL_CONNECT_EVENT,{event:"INCALL_NOT_CONNECTED"}),this.callKit.reset(),this.callKit.logger.error("socket not connected",{caller:"Socket.send",type:"INCALL",content:{errCode:V.SOCKET_CONNECT_ERROR}});return}let{userInfo:r,version:i}=this.callKit.config.getConfig(),{sessionId:s,extno:o,agentId:a}=r;if(this.callKit.logger.info("Socket send",{caller:"Socket.send",type:"INCALL",content:{agentId:a,sessionId:s,userInfo:r}}),!s){this.callKit.logger.error("sessionId is empty",{caller:"Socket.send",type:"INCALL",content:{errCode:V.SOCKET_CONNECT_ERROR}});return}let d={event:e,sessionId:s,version:i,...t};be.CALL===e&&(d.phoneNum=o,d.agentId=a,t?.sourceType===xe.phoneNum?delete d.workOrderId:t?.sourceType===xe.workOrderId&&delete d.phoneNum),this.callKit.logger.info("socket send",{caller:"Socket.send",type:"INCALL",content:{...d}}),this.ws?.send(JSON.stringify({event:e,...d}))}ping(){if(!this.connectAuthState.isConnected)return;this.send(be.PING);let e=Date.now(),{pingInterval:t,pingTimeout:r}=this.reconnectConfig;e-this.lastPingTime>t+r&&(this.ws&&this.connectAuthState.isConnected?this.ws.close(4001,"ping timeout"):this.callKit.reset(),this.callKit.logger.error("socket ping timeout",{caller:"Socket.ping",type:"INCALL",content:{errCode:V.SOCKET_PING_TIMEOUT}}),this.callKit.trigger(H.INCALL_CONNECT_EVENT,{event:"INCALL_PING_TIMEOUT"}))}checkPing(){this.pingTimer&&clearInterval(this.pingTimer);let{pingInterval:e}=this.reconnectConfig;this.pingTimer=setInterval(()=>{this.ping()},e)}async reset(e){let{force:t=!1}=e||{};this.pingTimer&&(clearInterval(this.pingTimer),this.pingTimer=void 0),t&&(this.callKit.trigger(H.INCALL_CONNECT_EVENT,{event:"INCALL_RESET"}),this.resetConnectState()),this.lastPingTime=void 0,this.setConnectAuthState("startConfirm",!1),this.clearWebSocket()}attemptReconnect(){this.reconnectTimer&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=void 0);let{maxAttempts:e}=this.reconnectConfig;if(this.reconnectAttempts>=e){this.callKit.trigger(H.INCALL_CONNECT_EVENT,{event:"INCALL_RECONNECT_ERROR"}),this.setConnectAuthState("isError",!0),this.callKit.reset(),this.callKit.logger.error("Maximum reconnection attempts reached",{caller:"Socket.attemptReconnect",type:"INCALL",content:{errCode:V.SOCKET_RECONNECT_FAILED,reconnectAttempts:this.reconnectAttempts}});return}this.reconnectAttempts===0&&this.callKit.trigger(H.INCALL_CONNECT_EVENT,{event:"INCALL_RECONNECT_START"}),this.setConnectAuthState("isReconnecting",!0),this.reconnectAttempts+=1;let{delay:t}=this.reconnectConfig;this.callKit.logger.info(`Preparing reconnection attempt ${this.reconnectAttempts}/${e}, delay: ${t}ms`,{caller:"Socket.attemptReconnect",type:"INCALL",content:{reconnectAttempts:this.reconnectAttempts,maxAttempts:e,delay:t}}),this.reconnectTimer=setTimeout(()=>{let{socket:r}=this.callKit.config.getConfig();this.connect(r)},t)}};var Gi=class{api;config;logger;callCenter;connect;socket;listener=[];constructor(e){this.config=new Cr(this),this.api=new fr(this),this.connect=new Jr(this),this.callCenter=new mr(this),this.socket=new zr(this),this.logger=new vr(this,e.log),e.log&&this.config.setConfig("log",e.log),e.trackLogs&&this.config.setConfig("trackLogs",{...Mt,...e.trackLogs}),e.audioRef&&this.config.setConfig("audioRef",e.audioRef),e.host&&this.config.setConfig("host",e.host),this.config.setConfig("constrains",e.constrains||pr),this.config.setConfig("socket",e.socket),this.config.setConfig("reconnect",{sip:{...Ut,...e.reconnect?.sip||{}},incall:{...Ft,...e.reconnect?.incall||{}}}),this.logger.info("callKit init",{caller:"CallKit.init",content:e})}async login(e,t,r={encryptionMethod:je.INTERNAL}){if(this.config.isLogin()){this.logger.warn("already login",{caller:"CallKit.login",content:{username:e,password:t,extra:r}});return}let i="",{encryptionMethod:s=je.INTERNAL}=r;switch(s){case je.NONE:i=t;break;case je.INTERNAL:i=(0,Gt.default)(e+(0,Gt.default)(t));break;default:i=(0,Gt.default)(e+(0,Gt.default)(t));break}if(this.logger.info("login info:",{caller:"CallKit.login",content:{username:e,password:t,encryptionMethod:s,encryptionPassword:i}}),this.socket.isError){this.logger.warn("socket is error",{caller:"CallKit.login",content:{username:e,password:t,extra:r,socketError:this.socket.isError}});return}try{let o=await this.api.login({userName:e,password:i,timestamp:Date.now()});o&&(this.config.setConfig("userInfo",{wsUrl:`wss://${o.wsUrl}`,sessionId:o.sessionId,username:e,password:i,encryptionPassword:i,agentId:o.agentId,fsUserId:o.fsUserId,userPart:o.userPart,fsPassword:o.fsPassword,fsIp:o.fsIp,fsPort:o.fsPort,iceInfo:o.iceInfo,iceGatheringTimeout:o.iceGatheringTimeout,logGather:o.logGather,...r}),this.socket.init(),this.trigger(H.KIT_LOGIN_CHANGE,!0))}catch(o){this.logger.error(o,{caller:"CallKit.login",content:{errCode:V.API_USER_LOGIN_ERROR}})}}async logout({isReset:e=!0}={isReset:!0}){if(!this.config.check())return;let{userInfo:t}=this.config.getConfig();if(this.logger.info("logout",{caller:"CallKit.logout",content:{sessionId:t.sessionId}}),this.config.isLogin()){let{sessionId:r}=t;try{await this.api.loginOut({sessionId:r,timestamp:Date.now()})}catch(i){this.logger.warn(i,{caller:"CallKit.logout",content:{errCode:V.API_USER_LOGOUT_ERROR}})}}e?await this.reset():this.config.reset("logout")}async call(e="",t={sourceType:xe.phoneNum,workOrderId:""}){if(!this.config.check())return;if(!this.connect.isRegistered){this.logger.warn("Currently not registered",{caller:"CallKit.call",content:{extno:e,options:t}});return}let{sourceType:r,workOrderId:i}=t;this.config.setUserInfo("sourceType",r),r===xe.phoneNum?e&&this.config.setUserInfo("extno",e):r===xe.workOrderId&&i&&this.config.setUserInfo("workOrderId",i),this.logger.info("call",{caller:"CallKit.call",content:{extno:e,options:t}}),this.callCenter.callStart(t)}async refer(e,t){this.config.check()&&(this.logger.info("refer",{caller:"CallKit.refer",content:{uri:e,options:t}}),this.callCenter.callRefer(e,t))}async register(){this.config.check()&&(this.logger.info("register",{caller:"CallKit.register",content:{}}),this.connect.register())}async unregister(){this.config.check()&&(this.logger.info("unregister",{caller:"CallKit.unregister",content:{}}),this.connect.unregister())}async hangup(){if(this.config.check()){if(this.logger.info("hangup",{caller:"CallKit.hangup",content:{connectStatus:this.connect.connectStatus}}),!this.connect.isConnecting()&&!this.connect.isRinging()&&!this.connect.isCalling()&&!this.connect.isHolding()){this.logger.warn("Currently not in a call",{caller:"CallKit.hangup",content:{connectStatus:this.connect.connectStatus}});return}await this.callCenter.callEnd(!0)}}hold(){this.config.check()&&(this.logger.info("hold",{caller:"CallKit.hold",content:{connectStatus:this.connect.connectStatus}}),this.callCenter.callHold())}unhold(){this.config.check()&&(this.logger.info("unhold",{caller:"CallKit.unhold",content:{connectStatus:this.connect.connectStatus}}),this.callCenter.callUnhold())}mute(){this.config.check()&&(this.logger.info("mute",{caller:"CallKit.mute",content:{connectStatus:this.connect.connectStatus}}),this.callCenter.callMute())}unmute(){this.config.check()&&(this.logger.info("unmute",{caller:"CallKit.unmute",content:{connectStatus:this.connect.connectStatus}}),this.callCenter.callUnmute())}async setUserStatus(e,t={}){let{agentId:r}=this.config.getConfig().userInfo;this.logger.info("setUserStatus",{caller:"CallKit.setUserStatus",content:{status:e,agentId:r}}),await this.api.updateUserStatus({agentId:r,userStatus:e,timestamp:Date.now(),...t})}async reset(e){let{force:t=!1}=e||{};this.logger.info("reset",{caller:"CallKit.reset",content:{connectStatus:this.connect.connectStatus,force:t}}),this.connect.isCalling()&&await this.hangup(),await this.connect.reset(),this.config.isLogin()?await this.logout({isReset:!1}):await this.config.reset("reset"),await this.socket.reset({force:t})}on(e,t){this.listener.push({event:e,callback:t})}off(e,t){this.logger.info(`off ${e}`,{caller:"CallKit.off",content:{event:e}}),t?this.listener=this.listener.filter(r=>!(r.event===e&&r.callback===t)):this.listener=this.listener.filter(r=>r.event!==e)}removeAllListeners(){this.listener=this.listener.splice(0,this.listener.length),this.logger.info("removeAllListeners",{caller:"CallKit.removeAllListeners",content:{listener:this.listener}})}trigger(e,t,r=!1){r||this.logger.info(`Trigger Event: ${e}`,{caller:"CallKit.trigger",content:t}),this.listener.forEach(i=>{if(i.event===e)try{i.callback(t)}catch(s){this.logger.error(`Event callback error: ${e}`,s,!0)}})}};return zn(tc);})();