strophe.js
Version:
Strophe.js is an XMPP library for JavaScript
1 lines • 56.1 kB
JavaScript
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).strophe={})}(this,(function(t){"use strict";var e="undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{};const s=function(){let t=e.WebSocket;if(void 0===t)try{t=require("ws")}catch(t){throw new Error('You must install the "ws" package to use Strophe in nodejs.')}return t}();const n=function(){let t=e.DOMParser;if(void 0===t)try{t=require("@xmldom/xmldom").DOMParser}catch(t){throw new Error('You must install the "@xmldom/xmldom" package to use Strophe in nodejs.')}return t}();function i(){if("undefined"==typeof document)try{return(new(0,require("@xmldom/xmldom").DOMImplementation)).createDocument("jabber:client","strophe",null)}catch(t){throw new Error('You must install the "@xmldom/xmldom" package to use Strophe in nodejs.')}if(void 0===document.implementation.createDocument||document.implementation.createDocument&&document.documentMode&&document.documentMode<10){const t=function(){const t=["Msxml2.DOMDocument.6.0","Msxml2.DOMDocument.5.0","Msxml2.DOMDocument.4.0","MSXML2.DOMDocument.3.0","MSXML2.DOMDocument","MSXML.DOMDocument","Microsoft.XMLDOM"];for(let e=0;e<t.length;e++)try{return new ActiveXObject(t[e])}catch(t){}}();return t.appendChild(t.createElement("strophe")),t}return document.implementation.createDocument("jabber:client","strophe",null)}const r=function(t,e){const s=(65535&t)+(65535&e);return(t>>16)+(e>>16)+(s>>16)<<16|65535&s},o=function(t){if("string"!=typeof t)throw new Error("str2binl was passed a non-string");const e=[];for(let s=0;s<8*t.length;s+=8)e[s>>5]|=(255&t.charCodeAt(s/8))<<s%32;return e},a=function(t,e,s,n,i,o){return r((a=r(r(e,t),r(n,o)))<<(h=i)|a>>>32-h,s);var a,h},h=function(t,e,s,n,i,r,o){return a(e&s|~e&n,t,e,i,r,o)},c=function(t,e,s,n,i,r,o){return a(e&n|s&~n,t,e,i,r,o)},l=function(t,e,s,n,i,r,o){return a(e^s^n,t,e,i,r,o)},d=function(t,e,s,n,i,r,o){return a(s^(e|~n),t,e,i,r,o)},u=function(t,e){t[e>>5]|=128<<e%32,t[14+(e+64>>>9<<4)]=e;let s,n,i,o,a=1732584193,u=-271733879,_=-1732584194,m=271733878;for(let e=0;e<t.length;e+=16)s=a,n=u,i=_,o=m,a=h(a,u,_,m,t[e+0],7,-680876936),m=h(m,a,u,_,t[e+1],12,-389564586),_=h(_,m,a,u,t[e+2],17,606105819),u=h(u,_,m,a,t[e+3],22,-1044525330),a=h(a,u,_,m,t[e+4],7,-176418897),m=h(m,a,u,_,t[e+5],12,1200080426),_=h(_,m,a,u,t[e+6],17,-1473231341),u=h(u,_,m,a,t[e+7],22,-45705983),a=h(a,u,_,m,t[e+8],7,1770035416),m=h(m,a,u,_,t[e+9],12,-1958414417),_=h(_,m,a,u,t[e+10],17,-42063),u=h(u,_,m,a,t[e+11],22,-1990404162),a=h(a,u,_,m,t[e+12],7,1804603682),m=h(m,a,u,_,t[e+13],12,-40341101),_=h(_,m,a,u,t[e+14],17,-1502002290),u=h(u,_,m,a,t[e+15],22,1236535329),a=c(a,u,_,m,t[e+1],5,-165796510),m=c(m,a,u,_,t[e+6],9,-1069501632),_=c(_,m,a,u,t[e+11],14,643717713),u=c(u,_,m,a,t[e+0],20,-373897302),a=c(a,u,_,m,t[e+5],5,-701558691),m=c(m,a,u,_,t[e+10],9,38016083),_=c(_,m,a,u,t[e+15],14,-660478335),u=c(u,_,m,a,t[e+4],20,-405537848),a=c(a,u,_,m,t[e+9],5,568446438),m=c(m,a,u,_,t[e+14],9,-1019803690),_=c(_,m,a,u,t[e+3],14,-187363961),u=c(u,_,m,a,t[e+8],20,1163531501),a=c(a,u,_,m,t[e+13],5,-1444681467),m=c(m,a,u,_,t[e+2],9,-51403784),_=c(_,m,a,u,t[e+7],14,1735328473),u=c(u,_,m,a,t[e+12],20,-1926607734),a=l(a,u,_,m,t[e+5],4,-378558),m=l(m,a,u,_,t[e+8],11,-2022574463),_=l(_,m,a,u,t[e+11],16,1839030562),u=l(u,_,m,a,t[e+14],23,-35309556),a=l(a,u,_,m,t[e+1],4,-1530992060),m=l(m,a,u,_,t[e+4],11,1272893353),_=l(_,m,a,u,t[e+7],16,-155497632),u=l(u,_,m,a,t[e+10],23,-1094730640),a=l(a,u,_,m,t[e+13],4,681279174),m=l(m,a,u,_,t[e+0],11,-358537222),_=l(_,m,a,u,t[e+3],16,-722521979),u=l(u,_,m,a,t[e+6],23,76029189),a=l(a,u,_,m,t[e+9],4,-640364487),m=l(m,a,u,_,t[e+12],11,-421815835),_=l(_,m,a,u,t[e+15],16,530742520),u=l(u,_,m,a,t[e+2],23,-995338651),a=d(a,u,_,m,t[e+0],6,-198630844),m=d(m,a,u,_,t[e+7],10,1126891415),_=d(_,m,a,u,t[e+14],15,-1416354905),u=d(u,_,m,a,t[e+5],21,-57434055),a=d(a,u,_,m,t[e+12],6,1700485571),m=d(m,a,u,_,t[e+3],10,-1894986606),_=d(_,m,a,u,t[e+10],15,-1051523),u=d(u,_,m,a,t[e+1],21,-2054922799),a=d(a,u,_,m,t[e+8],6,1873313359),m=d(m,a,u,_,t[e+15],10,-30611744),_=d(_,m,a,u,t[e+6],15,-1560198380),u=d(u,_,m,a,t[e+13],21,1309151649),a=d(a,u,_,m,t[e+4],6,-145523070),m=d(m,a,u,_,t[e+11],10,-1120210379),_=d(_,m,a,u,t[e+2],15,718787259),u=d(u,_,m,a,t[e+9],21,-343485551),a=r(a,s),u=r(u,n),_=r(_,i),m=r(m,o);return[a,u,_,m]},_={hexdigest:function(t){return function(t){const e="0123456789abcdef";let s="";for(let n=0;n<4*t.length;n++)s+=e.charAt(t[n>>2]>>n%4*8+4&15)+e.charAt(t[n>>2]>>n%4*8&15);return s}(u(o(t),8*t.length))},hash:function(t){return function(t){let e="";for(let s=0;s<32*t.length;s+=8)e+=String.fromCharCode(t[s>>5]>>>s%32&255);return e}(u(o(t),8*t.length))}};class m{constructor(t,e,s){this.mechname=t,this.isClientFirst=e,this.priority=s}test(){return!0}onStart(t){this._connection=t}onChallenge(t,e){throw new Error("You should implement challenge handling!")}clientChallenge(t){if(!this.isClientFirst)throw new Error("clientChallenge should not be called if isClientFirst is false!");return this.onChallenge(t)}onFailure(){this._connection=null}onSuccess(){this._connection=null}}const p=function(t){var e,s,n="",i=t.length;for(e=0;e<i;e++)(s=t.charCodeAt(e))>=0&&s<=127?n+=t.charAt(e):s>2047?(n+=String.fromCharCode(224|s>>12&15),n+=String.fromCharCode(128|s>>6&63),n+=String.fromCharCode(128|s>>0&63)):(n+=String.fromCharCode(192|s>>6&31),n+=String.fromCharCode(128|s>>0&63));return n},g=function(t){t=t||{};for(const e in t)if(Object.prototype.hasOwnProperty.call(t,e)){let s="",n="",i="";const r=t[e],o="object"==typeof r,a=escape(unescape(o?r.value:r));o&&(s=r.expires?";expires="+r.expires:"",n=r.domain?";domain="+r.domain:"",i=r.path?";path="+r.path:""),document.cookie=e+"="+a+s+n+i}};function f(t,e){t[e>>5]|=128<<24-e%32,t[15+(e+64>>9<<4)]=e;var s,n,i,r,o,a,h,c,l=new Array(80),d=1732584193,u=-271733879,_=-1732584194,m=271733878,p=-1009589776;for(s=0;s<t.length;s+=16){for(r=d,o=u,a=_,h=m,c=p,n=0;n<80;n++)l[n]=n<16?t[s+n]:N(l[n-3]^l[n-8]^l[n-14]^l[n-16],1),i=x(x(N(d,5),S(n,u,_,m)),x(x(p,l[n]),b(n))),p=m,m=_,_=N(u,30),u=d,d=i;d=x(d,r),u=x(u,o),_=x(_,a),m=x(m,h),p=x(p,c)}return[d,u,_,m,p]}function S(t,e,s,n){return t<20?e&s|~e&n:t<40?e^s^n:t<60?e&s|e&n|s&n:e^s^n}function b(t){return t<20?1518500249:t<40?1859775393:t<60?-1894007588:-899497514}function T(t,e){var s=C(t);s.length>16&&(s=f(s,8*t.length));for(var n=new Array(16),i=new Array(16),r=0;r<16;r++)n[r]=909522486^s[r],i[r]=1549556828^s[r];var o=f(n.concat(C(e)),512+8*e.length);return f(i.concat(o),672)}function x(t,e){var s=(65535&t)+(65535&e);return(t>>16)+(e>>16)+(s>>16)<<16|65535&s}function N(t,e){return t<<e|t>>>32-e}function C(t){for(var e=[],s=0;s<8*t.length;s+=8)e[s>>5]|=(255&t.charCodeAt(s/8))<<24-s%32;return e}function A(t){for(var e,s,n="",i=0;i<4*t.length;i+=3)for(e=(t[i>>2]>>8*(3-i%4)&255)<<16|(t[i+1>>2]>>8*(3-(i+1)%4)&255)<<8|t[i+2>>2]>>8*(3-(i+2)%4)&255,s=0;s<4;s++)8*i+6*s>32*t.length?n+="=":n+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(e>>6*(3-s)&63);return n}function y(t){for(var e="",s=0;s<32*t.length;s+=8)e+=String.fromCharCode(t[s>>5]>>>24-s%32&255);return e}const w={b64_hmac_sha1:function(t,e){return A(T(t,e))},b64_sha1:function(t){return A(f(C(t),8*t.length))},binb2str:y,core_hmac_sha1:T,str_hmac_sha1:function(t,e){return y(T(t,e))},str_sha1:function(t){return y(f(C(t),8*t.length))}};function E(t){return/[A-Z]/.test(t)?t.charCodeAt(0)-"A".charCodeAt(0):/[a-z]/.test(t)?t.charCodeAt(0)-"a".charCodeAt(0)+26:/[0-9]/.test(t)?t.charCodeAt(0)-"0".charCodeAt(0)+52:"+"===t?62:"/"===t?63:void 0}function O(t){return t<26?String.fromCharCode(t+"A".charCodeAt(0)):t<52?String.fromCharCode(t-26+"a".charCodeAt(0)):t<62?String.fromCharCode(t-52+"0".charCodeAt(0)):62===t?"+":63===t?"/":void 0}var I={atob:function(t){if((t=(t=`${t}`).replace(/[ \t\n\f\r]/g,"")).length%4==0&&(t=t.replace(/==?$/,"")),t.length%4==1||/[^+/0-9A-Za-z]/.test(t))return null;let e="",s=0,n=0;for(let i=0;i<t.length;i++)s<<=6,s|=E(t[i]),n+=6,24===n&&(e+=String.fromCharCode((16711680&s)>>16),e+=String.fromCharCode((65280&s)>>8),e+=String.fromCharCode(255&s),s=n=0);return 12===n?(s>>=4,e+=String.fromCharCode(s)):18===n&&(s>>=2,e+=String.fromCharCode((65280&s)>>8),e+=String.fromCharCode(255&s)),e},btoa:function(t){let e;for(t=`${t}`,e=0;e<t.length;e++)if(t.charCodeAt(e)>255)return null;let s="";for(e=0;e<t.length;e+=3){const n=[void 0,void 0,void 0,void 0];n[0]=t.charCodeAt(e)>>2,n[1]=(3&t.charCodeAt(e))<<4,t.length>e+1&&(n[1]|=t.charCodeAt(e+1)>>4,n[2]=(15&t.charCodeAt(e+1))<<2),t.length>e+2&&(n[2]|=t.charCodeAt(e+2)>>6,n[3]=63&t.charCodeAt(e+2));for(let t=0;t<n.length;t++)void 0===n[t]?s+="=":s+=O(n[t])}return s}};function H(t,e){return new L.Builder(t,e)}function R(t){return new L.Builder("message",t)}function v(t){return new L.Builder("iq",t)}function M(t){return new L.Builder("presence",t)}const L={VERSION:"1.4.4",NS:{HTTPBIND:"http://jabber.org/protocol/httpbind",BOSH:"urn:xmpp:xbosh",CLIENT:"jabber:client",AUTH:"jabber:iq:auth",ROSTER:"jabber:iq:roster",PROFILE:"jabber:iq:profile",DISCO_INFO:"http://jabber.org/protocol/disco#info",DISCO_ITEMS:"http://jabber.org/protocol/disco#items",MUC:"http://jabber.org/protocol/muc",SASL:"urn:ietf:params:xml:ns:xmpp-sasl",STREAM:"http://etherx.jabber.org/streams",FRAMING:"urn:ietf:params:xml:ns:xmpp-framing",BIND:"urn:ietf:params:xml:ns:xmpp-bind",SESSION:"urn:ietf:params:xml:ns:xmpp-session",VERSION:"jabber:iq:version",STANZAS:"urn:ietf:params:xml:ns:xmpp-stanzas",XHTML_IM:"http://jabber.org/protocol/xhtml-im",XHTML:"http://www.w3.org/1999/xhtml"},XHTML:{tags:["a","blockquote","br","cite","em","img","li","ol","p","span","strong","ul","body"],attributes:{a:["href"],blockquote:["style"],br:[],cite:["style"],em:[],img:["src","alt","style","height","width"],li:["style"],ol:["style"],p:["style"],span:["style"],strong:[],ul:["style"],body:[]},css:["background-color","color","font-family","font-size","font-style","font-weight","margin-left","margin-right","text-align","text-decoration"],validTag(t){for(let e=0;e<L.XHTML.tags.length;e++)if(t===L.XHTML.tags[e])return!0;return!1},validAttribute(t,e){if(void 0!==L.XHTML.attributes[t]&&L.XHTML.attributes[t].length>0)for(let s=0;s<L.XHTML.attributes[t].length;s++)if(e===L.XHTML.attributes[t][s])return!0;return!1},validCSS(t){for(let e=0;e<L.XHTML.css.length;e++)if(t===L.XHTML.css[e])return!0;return!1}},Status:{ERROR:0,CONNECTING:1,CONNFAIL:2,AUTHENTICATING:3,AUTHFAIL:4,CONNECTED:5,DISCONNECTED:6,DISCONNECTING:7,ATTACHED:8,REDIRECT:9,CONNTIMEOUT:10,BINDREQUIRED:11,ATTACHFAIL:12},ErrorCondition:{BAD_FORMAT:"bad-format",CONFLICT:"conflict",MISSING_JID_NODE:"x-strophe-bad-non-anon-jid",NO_AUTH_MECH:"no-auth-mech",UNKNOWN_REASON:"unknown"},LogLevel:{DEBUG:0,INFO:1,WARN:2,ERROR:3,FATAL:4},ElementType:{NORMAL:1,TEXT:3,CDATA:4,FRAGMENT:11},TIMEOUT:1.1,SECONDARY_TIMEOUT:.1,addNamespace(t,e){L.NS[t]=e},forEachChild(t,e,s){for(let n=0;n<t.childNodes.length;n++){const i=t.childNodes[n];i.nodeType!==L.ElementType.NORMAL||e&&!this.isTagEqual(i,e)||s(i)}},isTagEqual:(t,e)=>t.tagName===e,_xmlGenerator:null,xmlGenerator:()=>(L._xmlGenerator||(L._xmlGenerator=i()),L._xmlGenerator),xmlElement(t){if(!t)return null;const e=L.xmlGenerator().createElement(t);for(let t=1;t<arguments.length;t++){const s=arguments[t];if(s)if("string"==typeof s||"number"==typeof s)e.appendChild(L.xmlTextNode(s));else if("object"==typeof s&&"function"==typeof s.sort)for(let t=0;t<s.length;t++){const n=s[t];"object"==typeof n&&"function"==typeof n.sort&&void 0!==n[1]&&null!==n[1]&&e.setAttribute(n[0],n[1])}else if("object"==typeof s)for(const t in s)Object.prototype.hasOwnProperty.call(s,t)&&void 0!==s[t]&&null!==s[t]&&e.setAttribute(t,s[t])}return e},xmlescape:t=>t=(t=(t=(t=(t=t.replace(/\&/g,"&")).replace(/</g,"<")).replace(/>/g,">")).replace(/'/g,"'")).replace(/"/g,"""),xmlunescape:t=>t=(t=(t=(t=(t=t.replace(/\&/g,"&")).replace(/</g,"<")).replace(/>/g,">")).replace(/'/g,"'")).replace(/"/g,'"'),xmlTextNode:t=>L.xmlGenerator().createTextNode(t),xmlHtmlNode(t){let e;if(n){e=(new n).parseFromString(t,"text/xml")}else e=new ActiveXObject("Microsoft.XMLDOM"),e.async="false",e.loadXML(t);return e},getText(t){if(!t)return null;let e="";0===t.childNodes.length&&t.nodeType===L.ElementType.TEXT&&(e+=t.nodeValue);for(let s=0;s<t.childNodes.length;s++)t.childNodes[s].nodeType===L.ElementType.TEXT&&(e+=t.childNodes[s].nodeValue);return L.xmlescape(e)},copyElement(t){let e;if(t.nodeType===L.ElementType.NORMAL){e=L.xmlElement(t.tagName);for(let s=0;s<t.attributes.length;s++)e.setAttribute(t.attributes[s].nodeName,t.attributes[s].value);for(let s=0;s<t.childNodes.length;s++)e.appendChild(L.copyElement(t.childNodes[s]))}else t.nodeType===L.ElementType.TEXT&&(e=L.xmlGenerator().createTextNode(t.nodeValue));return e},createHtml(t){let e;if(t.nodeType===L.ElementType.NORMAL){const s=t.nodeName.toLowerCase();if(L.XHTML.validTag(s))try{e=L.xmlElement(s);for(let n=0;n<L.XHTML.attributes[s].length;n++){const i=L.XHTML.attributes[s][n];let r=t.getAttribute(i);if(null!=r&&""!==r&&!1!==r&&0!==r)if("style"===i&&"object"==typeof r&&void 0!==r.cssText&&(r=r.cssText),"style"===i){const t=[],s=r.split(";");for(let e=0;e<s.length;e++){const n=s[e].split(":"),i=n[0].replace(/^\s*/,"").replace(/\s*$/,"").toLowerCase();if(L.XHTML.validCSS(i)){const e=n[1].replace(/^\s*/,"").replace(/\s*$/,"");t.push(i+": "+e)}}t.length>0&&(r=t.join("; "),e.setAttribute(i,r))}else e.setAttribute(i,r)}for(let s=0;s<t.childNodes.length;s++)e.appendChild(L.createHtml(t.childNodes[s]))}catch(t){e=L.xmlTextNode("")}else{e=L.xmlGenerator().createDocumentFragment();for(let s=0;s<t.childNodes.length;s++)e.appendChild(L.createHtml(t.childNodes[s]))}}else if(t.nodeType===L.ElementType.FRAGMENT){e=L.xmlGenerator().createDocumentFragment();for(let s=0;s<t.childNodes.length;s++)e.appendChild(L.createHtml(t.childNodes[s]))}else t.nodeType===L.ElementType.TEXT&&(e=L.xmlTextNode(t.nodeValue));return e},escapeNode:t=>"string"!=typeof t?t:t.replace(/^\s+|\s+$/g,"").replace(/\\/g,"\\5c").replace(/ /g,"\\20").replace(/\"/g,"\\22").replace(/\&/g,"\\26").replace(/\'/g,"\\27").replace(/\//g,"\\2f").replace(/:/g,"\\3a").replace(/</g,"\\3c").replace(/>/g,"\\3e").replace(/@/g,"\\40"),unescapeNode:t=>"string"!=typeof t?t:t.replace(/\\20/g," ").replace(/\\22/g,'"').replace(/\\26/g,"&").replace(/\\27/g,"'").replace(/\\2f/g,"/").replace(/\\3a/g,":").replace(/\\3c/g,"<").replace(/\\3e/g,">").replace(/\\40/g,"@").replace(/\\5c/g,"\\"),getNodeFromJid:t=>t.indexOf("@")<0?null:t.split("@")[0],getDomainFromJid(t){const e=L.getBareJidFromJid(t);if(e.indexOf("@")<0)return e;{const t=e.split("@");return t.splice(0,1),t.join("@")}},getResourceFromJid(t){if(!t)return null;const e=t.split("/");return e.length<2?null:(e.splice(0,1),e.join("/"))},getBareJidFromJid:t=>t?t.split("/")[0]:null,_handleError(t){void 0!==t.stack&&L.fatal(t.stack),t.sourceURL?L.fatal("error: "+this.handler+" "+t.sourceURL+":"+t.line+" - "+t.name+": "+t.message):t.fileName?L.fatal("error: "+this.handler+" "+t.fileName+":"+t.lineNumber+" - "+t.name+": "+t.message):L.fatal("error: "+t.message)},log(t,e){var s;t===this.LogLevel.FATAL&&(null===(s=console)||void 0===s||s.error(e))},debug(t){this.log(this.LogLevel.DEBUG,t)},info(t){this.log(this.LogLevel.INFO,t)},warn(t){this.log(this.LogLevel.WARN,t)},error(t){this.log(this.LogLevel.ERROR,t)},fatal(t){this.log(this.LogLevel.FATAL,t)},serialize(t){if(!t)return null;"function"==typeof t.tree&&(t=t.tree());const e=[...Array(t.attributes.length).keys()].map((e=>t.attributes[e].nodeName));e.sort();let s=e.reduce(((e,s)=>`${e} ${s}="${L.xmlescape(t.attributes.getNamedItem(s).value)}"`),`<${t.nodeName}`);if(t.childNodes.length>0){s+=">";for(let e=0;e<t.childNodes.length;e++){const n=t.childNodes[e];switch(n.nodeType){case L.ElementType.NORMAL:s+=L.serialize(n);break;case L.ElementType.TEXT:s+=L.xmlescape(n.nodeValue);break;case L.ElementType.CDATA:s+="<![CDATA["+n.nodeValue+"]]>"}}s+="</"+t.nodeName+">"}else s+="/>";return s},_requestId:0,_connectionPlugins:{},addConnectionPlugin(t,e){L._connectionPlugins[t]=e},Builder:class{constructor(t,e){"presence"!==t&&"message"!==t&&"iq"!==t||(e&&!e.xmlns?e.xmlns=L.NS.CLIENT:e||(e={xmlns:L.NS.CLIENT})),this.nodeTree=L.xmlElement(t,e),this.node=this.nodeTree}tree(){return this.nodeTree}toString(){return L.serialize(this.nodeTree)}up(){return this.node=this.node.parentNode,this}root(){return this.node=this.nodeTree,this}attrs(t){for(const e in t)Object.prototype.hasOwnProperty.call(t,e)&&(void 0===t[e]?this.node.removeAttribute(e):this.node.setAttribute(e,t[e]));return this}c(t,e,s){const n=L.xmlElement(t,e,s);return this.node.appendChild(n),"string"!=typeof s&&"number"!=typeof s&&(this.node=n),this}cnode(t){let e;const s=L.xmlGenerator();try{e=void 0!==s.importNode}catch(t){e=!1}const n=e?s.importNode(t,!0):L.copyElement(t);return this.node.appendChild(n),this.node=n,this}t(t){const e=L.xmlTextNode(t);return this.node.appendChild(e),this}h(t){const e=L.xmlGenerator().createElement("body");e.innerHTML=t;const s=L.createHtml(e);for(;s.childNodes.length>0;)this.node.appendChild(s.childNodes[0]);return this}},Handler:function(t,e,s,n,i,r,o){this.handler=t,this.ns=e,this.name=s,this.type=n,this.id=i,this.options=o||{matchBareFromJid:!1,ignoreNamespaceFragment:!1},this.options.matchBare&&(L.warn('The "matchBare" option is deprecated, use "matchBareFromJid" instead.'),this.options.matchBareFromJid=this.options.matchBare,delete this.options.matchBare),this.options.matchBareFromJid?this.from=r?L.getBareJidFromJid(r):null:this.from=r,this.user=!0}};L.Handler.prototype={getNamespace(t){let e=t.getAttribute("xmlns");return e&&this.options.ignoreNamespaceFragment&&(e=e.split("#")[0]),e},namespaceMatch(t){let e=!1;return!this.ns||(L.forEachChild(t,null,(t=>{this.getNamespace(t)===this.ns&&(e=!0)})),e||this.getNamespace(t)===this.ns)},isMatch(t){let e=t.getAttribute("from");this.options.matchBareFromJid&&(e=L.getBareJidFromJid(e));const s=t.getAttribute("type");return!(!this.namespaceMatch(t)||this.name&&!L.isTagEqual(t,this.name)||this.type&&(Array.isArray(this.type)?-1===this.type.indexOf(s):s!==this.type)||this.id&&t.getAttribute("id")!==this.id||this.from&&e!==this.from)},run(t){let e=null;try{e=this.handler(t)}catch(t){throw L._handleError(t),t}return e},toString(){return"{Handler: "+this.handler+"("+this.name+","+this.id+","+this.ns+")}"}},L.TimedHandler=class{constructor(t,e){this.period=t,this.handler=e,this.lastCalled=(new Date).getTime(),this.user=!0}run(){return this.lastCalled=(new Date).getTime(),this.handler()}reset(){this.lastCalled=(new Date).getTime()}toString(){return"{TimedHandler: "+this.handler+"("+this.period+")}"}},L.Connection=class{constructor(t,e){this.service=t,this.options=e||{},this.setProtocol(),this.jid="",this.domain=null,this.features=null,this._sasl_data={},this.do_bind=!1,this.do_session=!1,this.mechanisms={},this.timedHandlers=[],this.handlers=[],this.removeTimeds=[],this.removeHandlers=[],this.addTimeds=[],this.addHandlers=[],this.protocolErrorHandlers={HTTP:{},websocket:{}},this._idleTimeout=null,this._disconnectTimeout=null,this.authenticated=!1,this.connected=!1,this.disconnecting=!1,this.do_authentication=!0,this.paused=!1,this.restored=!1,this._data=[],this._uniqueId=0,this._sasl_success_handler=null,this._sasl_failure_handler=null,this._sasl_challenge_handler=null,this.maxRetries=5,this._idleTimeout=setTimeout((()=>this._onIdle()),100),g(this.options.cookies),this.registerSASLMechanisms(this.options.mechanisms);for(const t in L._connectionPlugins)if(Object.prototype.hasOwnProperty.call(L._connectionPlugins,t)){const e=function(){};e.prototype=L._connectionPlugins[t],this[t]=new e,this[t].init(this)}}setProtocol(){const t=this.options.protocol||"";this.options.worker?this._proto=new L.WorkerWebsocket(this):0===this.service.indexOf("ws:")||0===this.service.indexOf("wss:")||0===t.indexOf("ws")?this._proto=new L.Websocket(this):this._proto=new L.Bosh(this)}reset(){this._proto._reset(),this.do_session=!1,this.do_bind=!1,this.timedHandlers=[],this.handlers=[],this.removeTimeds=[],this.removeHandlers=[],this.addTimeds=[],this.addHandlers=[],this.authenticated=!1,this.connected=!1,this.disconnecting=!1,this.restored=!1,this._data=[],this._requests=[],this._uniqueId=0}pause(){this.paused=!0}resume(){this.paused=!1}getUniqueId(t){const e="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(t){const e=16*Math.random()|0;return("x"===t?e:3&e|8).toString(16)}));return"string"==typeof t||"number"==typeof t?e+":"+t:e+""}addProtocolErrorHandler(t,e,s){this.protocolErrorHandlers[t][e]=s}connect(t,e,s,n,i,r,o,a=3e3){this.jid=t,this.authzid=L.getBareJidFromJid(this.jid),this.authcid=o||L.getNodeFromJid(this.jid),this.pass=e,this.connect_callback=s,this.disconnecting=!1,this.connected=!1,this.authenticated=!1,this.restored=!1,this.disconnection_timeout=a,this.domain=L.getDomainFromJid(this.jid),this._changeConnectStatus(L.Status.CONNECTING,null),this._proto._connect(n,i,r)}attach(t,e,s,n,i,r,o){if(this._proto._attach)return this._proto._attach(t,e,s,n,i,r,o);{const t=new Error('The "attach" method is not available for your connection protocol');throw t.name="StropheSessionError",t}}restore(t,e,s,n,i){if(!this._sessionCachingSupported()){const t=new Error('The "restore" method can only be used with a BOSH connection.');throw t.name="StropheSessionError",t}this._proto._restore(t,e,s,n,i)}_sessionCachingSupported(){if(this._proto instanceof L.Bosh){if(!JSON)return!1;try{sessionStorage.setItem("_strophe_","_strophe_"),sessionStorage.removeItem("_strophe_")}catch(t){return!1}return!0}return!1}xmlInput(t){}xmlOutput(t){}rawInput(t){}rawOutput(t){}nextValidRid(t){}send(t){if(null!==t){if("function"==typeof t.sort)for(let e=0;e<t.length;e++)this._queueData(t[e]);else"function"==typeof t.tree?this._queueData(t.tree()):this._queueData(t);this._proto._send()}}flush(){clearTimeout(this._idleTimeout),this._onIdle()}sendPresence(t,e,s,n){let i=null;"function"==typeof t.tree&&(t=t.tree());let r=t.getAttribute("id");if(r||(r=this.getUniqueId("sendPresence"),t.setAttribute("id",r)),"function"==typeof e||"function"==typeof s){const t=this.addHandler((t=>{i&&this.deleteTimedHandler(i),"error"===t.getAttribute("type")?s&&s(t):e&&e(t)}),null,"presence",null,r);n&&(i=this.addTimedHandler(n,(()=>(this.deleteHandler(t),s&&s(null),!1))))}return this.send(t),r}sendIQ(t,e,s,n){let i=null;"function"==typeof t.tree&&(t=t.tree());let r=t.getAttribute("id");if(r||(r=this.getUniqueId("sendIQ"),t.setAttribute("id",r)),"function"==typeof e||"function"==typeof s){const t=this.addHandler((t=>{i&&this.deleteTimedHandler(i);const n=t.getAttribute("type");if("result"===n)e&&e(t);else{if("error"!==n){const t=new Error(`Got bad IQ type of ${n}`);throw t.name="StropheError",t}s&&s(t)}}),null,"iq",["error","result"],r);n&&(i=this.addTimedHandler(n,(()=>(this.deleteHandler(t),s&&s(null),!1))))}return this.send(t),r}_queueData(t){if(null===t||!t.tagName||!t.childNodes){const t=new Error("Cannot queue non-DOMElement.");throw t.name="StropheError",t}this._data.push(t)}_sendRestart(){this._data.push("restart"),this._proto._sendRestart(),this._idleTimeout=setTimeout((()=>this._onIdle()),100)}addTimedHandler(t,e){const s=new L.TimedHandler(t,e);return this.addTimeds.push(s),s}deleteTimedHandler(t){this.removeTimeds.push(t)}addHandler(t,e,s,n,i,r,o){const a=new L.Handler(t,e,s,n,i,r,o);return this.addHandlers.push(a),a}deleteHandler(t){this.removeHandlers.push(t);const e=this.addHandlers.indexOf(t);e>=0&&this.addHandlers.splice(e,1)}registerSASLMechanisms(t){this.mechanisms={},(t=t||[L.SASLAnonymous,L.SASLExternal,L.SASLOAuthBearer,L.SASLXOAuth2,L.SASLPlain,L.SASLSHA1]).forEach((t=>this.registerSASLMechanism(t)))}registerSASLMechanism(t){const e=new t;this.mechanisms[e.mechname]=e}disconnect(t){if(this._changeConnectStatus(L.Status.DISCONNECTING,t),t?L.warn("Disconnect was called because: "+t):L.info("Disconnect was called"),this.connected){let t=!1;this.disconnecting=!0,this.authenticated&&(t=M({xmlns:L.NS.CLIENT,type:"unavailable"})),this._disconnectTimeout=this._addSysTimedHandler(this.disconnection_timeout,this._onDisconnectTimeout.bind(this)),this._proto._disconnect(t)}else L.warn("Disconnect was called before Strophe connected to the server"),this._proto._abortAllRequests(),this._doDisconnect()}_changeConnectStatus(t,e,s){for(const s in L._connectionPlugins)if(Object.prototype.hasOwnProperty.call(L._connectionPlugins,s)){const n=this[s];if(n.statusChanged)try{n.statusChanged(t,e)}catch(t){L.error(`${s} plugin caused an exception changing status: ${t}`)}}if(this.connect_callback)try{this.connect_callback(t,e,s)}catch(t){L._handleError(t),L.error(`User connection callback caused an exception: ${t}`)}}_doDisconnect(t){"number"==typeof this._idleTimeout&&clearTimeout(this._idleTimeout),null!==this._disconnectTimeout&&(this.deleteTimedHandler(this._disconnectTimeout),this._disconnectTimeout=null),L.debug("_doDisconnect was called"),this._proto._doDisconnect(),this.authenticated=!1,this.disconnecting=!1,this.restored=!1,this.handlers=[],this.timedHandlers=[],this.removeTimeds=[],this.removeHandlers=[],this.addTimeds=[],this.addHandlers=[],this._changeConnectStatus(L.Status.DISCONNECTED,t),this.connected=!1}_dataRecv(t,e){const s=this._proto._reqToData(t);if(null===s)return;for(this.xmlInput!==L.Connection.prototype.xmlInput&&(s.nodeName===this._proto.strip&&s.childNodes.length?this.xmlInput(s.childNodes[0]):this.xmlInput(s)),this.rawInput!==L.Connection.prototype.rawInput&&(e?this.rawInput(e):this.rawInput(L.serialize(s)));this.removeHandlers.length>0;){const t=this.removeHandlers.pop(),e=this.handlers.indexOf(t);e>=0&&this.handlers.splice(e,1)}for(;this.addHandlers.length>0;)this.handlers.push(this.addHandlers.pop());if(this.disconnecting&&this._proto._emptyQueue())return void this._doDisconnect();const n=s.getAttribute("type");if(null!==n&&"terminate"===n){if(this.disconnecting)return;let t=s.getAttribute("condition");const e=s.getElementsByTagName("conflict");return null!==t?("remote-stream-error"===t&&e.length>0&&(t="conflict"),this._changeConnectStatus(L.Status.CONNFAIL,t)):this._changeConnectStatus(L.Status.CONNFAIL,L.ErrorCondition.UNKOWN_REASON),void this._doDisconnect(t)}L.forEachChild(s,null,(t=>{const e=this.handlers;this.handlers=[];for(let s=0;s<e.length;s++){const n=e[s];try{(!n.isMatch(t)||!this.authenticated&&n.user||n.run(t))&&this.handlers.push(n)}catch(t){L.warn("Removing Strophe handlers due to uncaught exception: "+t.message)}}}))}_connect_cb(t,e,s){let n;L.debug("_connect_cb was called"),this.connected=!0;try{n=this._proto._reqToData(t)}catch(t){if(t.name!==L.ErrorCondition.BAD_FORMAT)throw t;this._changeConnectStatus(L.Status.CONNFAIL,L.ErrorCondition.BAD_FORMAT),this._doDisconnect(L.ErrorCondition.BAD_FORMAT)}if(!n)return;this.xmlInput!==L.Connection.prototype.xmlInput&&(n.nodeName===this._proto.strip&&n.childNodes.length?this.xmlInput(n.childNodes[0]):this.xmlInput(n)),this.rawInput!==L.Connection.prototype.rawInput&&(s?this.rawInput(s):this.rawInput(L.serialize(n)));if(this._proto._connect_cb(n)===L.Status.CONNFAIL)return;let i;if(i=n.getElementsByTagNameNS?n.getElementsByTagNameNS(L.NS.STREAM,"features").length>0:n.getElementsByTagName("stream:features").length>0||n.getElementsByTagName("features").length>0,!i)return void this._proto._no_auth_received(e);const r=Array.from(n.getElementsByTagName("mechanism")).map((t=>this.mechanisms[t.textContent])).filter((t=>t));0!==r.length||0!==n.getElementsByTagName("auth").length?!1!==this.do_authentication&&this.authenticate(r):this._proto._no_auth_received(e)}sortMechanismsByPriority(t){for(let e=0;e<t.length-1;++e){let s=e;for(let n=e+1;n<t.length;++n)t[n].priority>t[s].priority&&(s=n);if(s!==e){const n=t[e];t[e]=t[s],t[s]=n}}return t}authenticate(t){this._attemptSASLAuth(t)||this._attemptLegacyAuth()}_attemptSASLAuth(t){t=this.sortMechanismsByPriority(t||[]);let e=!1;for(let s=0;s<t.length;++s){if(!t[s].test(this))continue;this._sasl_success_handler=this._addSysHandler(this._sasl_success_cb.bind(this),null,"success",null,null),this._sasl_failure_handler=this._addSysHandler(this._sasl_failure_cb.bind(this),null,"failure",null,null),this._sasl_challenge_handler=this._addSysHandler(this._sasl_challenge_cb.bind(this),null,"challenge",null,null),this._sasl_mechanism=t[s],this._sasl_mechanism.onStart(this);const n=H("auth",{xmlns:L.NS.SASL,mechanism:this._sasl_mechanism.mechname});if(this._sasl_mechanism.isClientFirst){const t=this._sasl_mechanism.clientChallenge(this);n.t(I.btoa(t))}this.send(n.tree()),e=!0;break}return e}_sasl_challenge_cb(t){const e=I.atob(L.getText(t)),s=this._sasl_mechanism.onChallenge(this,e),n=H("response",{xmlns:L.NS.SASL});return""!==s&&n.t(I.btoa(s)),this.send(n.tree()),!0}_attemptLegacyAuth(){null===L.getNodeFromJid(this.jid)?(this._changeConnectStatus(L.Status.CONNFAIL,L.ErrorCondition.MISSING_JID_NODE),this.disconnect(L.ErrorCondition.MISSING_JID_NODE)):(this._changeConnectStatus(L.Status.AUTHENTICATING,null),this._addSysHandler(this._onLegacyAuthIQResult.bind(this),null,null,null,"_auth_1"),this.send(v({type:"get",to:this.domain,id:"_auth_1"}).c("query",{xmlns:L.NS.AUTH}).c("username",{}).t(L.getNodeFromJid(this.jid)).tree()))}_onLegacyAuthIQResult(t){const e=v({type:"set",id:"_auth_2"}).c("query",{xmlns:L.NS.AUTH}).c("username",{}).t(L.getNodeFromJid(this.jid)).up().c("password").t(this.pass);return L.getResourceFromJid(this.jid)||(this.jid=L.getBareJidFromJid(this.jid)+"/strophe"),e.up().c("resource",{}).t(L.getResourceFromJid(this.jid)),this._addSysHandler(this._auth2_cb.bind(this),null,null,null,"_auth_2"),this.send(e.tree()),!1}_sasl_success_cb(t){if(this._sasl_data["server-signature"]){let e;const s=/([a-z]+)=([^,]+)(,|$)/,n=I.atob(L.getText(t)).match(s);if("v"===n[1]&&(e=n[2]),e!==this._sasl_data["server-signature"])return this.deleteHandler(this._sasl_failure_handler),this._sasl_failure_handler=null,this._sasl_challenge_handler&&(this.deleteHandler(this._sasl_challenge_handler),this._sasl_challenge_handler=null),this._sasl_data={},this._sasl_failure_cb(null)}L.info("SASL authentication succeeded."),this._sasl_mechanism&&this._sasl_mechanism.onSuccess(),this.deleteHandler(this._sasl_failure_handler),this._sasl_failure_handler=null,this._sasl_challenge_handler&&(this.deleteHandler(this._sasl_challenge_handler),this._sasl_challenge_handler=null);const e=[],s=(t,e)=>{for(;t.length;)this.deleteHandler(t.pop());return this._onStreamFeaturesAfterSASL(e),!1};return e.push(this._addSysHandler((t=>s(e,t)),null,"stream:features",null,null)),e.push(this._addSysHandler((t=>s(e,t)),L.NS.STREAM,"features",null,null)),this._sendRestart(),!1}_onStreamFeaturesAfterSASL(t){this.features=t;for(let e=0;e<t.childNodes.length;e++){const s=t.childNodes[e];"bind"===s.nodeName&&(this.do_bind=!0),"session"===s.nodeName&&(this.do_session=!0)}return this.do_bind?(this.options.explicitResourceBinding?this._changeConnectStatus(L.Status.BINDREQUIRED,null):this.bind(),!1):(this._changeConnectStatus(L.Status.AUTHFAIL,null),!1)}bind(){if(!this.do_bind)return void L.log(L.LogLevel.INFO,'Strophe.Connection.prototype.bind called but "do_bind" is false');this._addSysHandler(this._onResourceBindResultIQ.bind(this),null,null,null,"_bind_auth_2");const t=L.getResourceFromJid(this.jid);t?this.send(v({type:"set",id:"_bind_auth_2"}).c("bind",{xmlns:L.NS.BIND}).c("resource",{}).t(t).tree()):this.send(v({type:"set",id:"_bind_auth_2"}).c("bind",{xmlns:L.NS.BIND}).tree())}_onResourceBindResultIQ(t){if("error"===t.getAttribute("type")){L.warn("Resource binding failed.");let e;return t.getElementsByTagName("conflict").length>0&&(e=L.ErrorCondition.CONFLICT),this._changeConnectStatus(L.Status.AUTHFAIL,e,t),!1}const e=t.getElementsByTagName("bind");if(!(e.length>0))return L.warn("Resource binding failed."),this._changeConnectStatus(L.Status.AUTHFAIL,null,t),!1;{const t=e[0].getElementsByTagName("jid");t.length>0&&(this.authenticated=!0,this.jid=L.getText(t[0]),this.do_session?this._establishSession():this._changeConnectStatus(L.Status.CONNECTED,null))}}_establishSession(){if(!this.do_session)throw new Error(`Strophe.Connection.prototype._establishSession called but apparently ${L.NS.SESSION} wasn't advertised by the server`);this._addSysHandler(this._onSessionResultIQ.bind(this),null,null,null,"_session_auth_2"),this.send(v({type:"set",id:"_session_auth_2"}).c("session",{xmlns:L.NS.SESSION}).tree())}_onSessionResultIQ(t){if("result"===t.getAttribute("type"))this.authenticated=!0,this._changeConnectStatus(L.Status.CONNECTED,null);else if("error"===t.getAttribute("type"))return this.authenticated=!1,L.warn("Session creation failed."),this._changeConnectStatus(L.Status.AUTHFAIL,null,t),!1;return!1}_sasl_failure_cb(t){return this._sasl_success_handler&&(this.deleteHandler(this._sasl_success_handler),this._sasl_success_handler=null),this._sasl_challenge_handler&&(this.deleteHandler(this._sasl_challenge_handler),this._sasl_challenge_handler=null),this._sasl_mechanism&&this._sasl_mechanism.onFailure(),this._changeConnectStatus(L.Status.AUTHFAIL,null,t),!1}_auth2_cb(t){return"result"===t.getAttribute("type")?(this.authenticated=!0,this._changeConnectStatus(L.Status.CONNECTED,null)):"error"===t.getAttribute("type")&&(this._changeConnectStatus(L.Status.AUTHFAIL,null,t),this.disconnect("authentication failed")),!1}_addSysTimedHandler(t,e){const s=new L.TimedHandler(t,e);return s.user=!1,this.addTimeds.push(s),s}_addSysHandler(t,e,s,n,i){const r=new L.Handler(t,e,s,n,i);return r.user=!1,this.addHandlers.push(r),r}_onDisconnectTimeout(){return L.debug("_onDisconnectTimeout was called"),this._changeConnectStatus(L.Status.CONNTIMEOUT,null),this._proto._onDisconnectTimeout(),this._doDisconnect(),!1}_onIdle(){for(;this.addTimeds.length>0;)this.timedHandlers.push(this.addTimeds.pop());for(;this.removeTimeds.length>0;){const t=this.removeTimeds.pop(),e=this.timedHandlers.indexOf(t);e>=0&&this.timedHandlers.splice(e,1)}const t=(new Date).getTime(),e=[];for(let s=0;s<this.timedHandlers.length;s++){const n=this.timedHandlers[s];if(this.authenticated||!n.user){n.lastCalled+n.period-t<=0?n.run()&&e.push(n):e.push(n)}}this.timedHandlers=e,clearTimeout(this._idleTimeout),this._proto._onIdle(),this.connected&&(this._idleTimeout=setTimeout((()=>this._onIdle()),100))}},L.SASLMechanism=m,L.SASLAnonymous=class extends m{constructor(t="ANONYMOUS",e=!1,s=20){super(t,e,s)}test(t){return null===t.authcid}},L.SASLPlain=class extends m{constructor(t="PLAIN",e=!0,s=50){super(t,e,s)}test(t){return null!==t.authcid}onChallenge(t){const{authcid:e,authzid:s,domain:n,pass:i}=t;if(!n)throw new Error("SASLPlain onChallenge: domain is not defined!");let r=s!==`${e}@${n}`?s:"";return r+="\0",r+=e,r+="\0",r+=i,p(r)}},L.SASLSHA1=class extends m{constructor(t="SCRAM-SHA-1",e=!0,s=60){super(t,e,s)}test(t){return null!==t.authcid}onChallenge(t,e){let s,n,i,r,o,a,h,c,l="c=biws,",d=`${t._sasl_data["client-first-message-bare"]},${e},`;const u=t._sasl_data.cnonce,_=/([a-z]+)=([^,]+)(,|$)/;for(;e.match(_);){const t=e.match(_);switch(e=e.replace(t[0],""),t[1]){case"r":s=t[2];break;case"s":n=t[2];break;case"i":i=t[2]}}if(s.substr(0,u.length)!==u)return t._sasl_data={},t._sasl_failure_cb();l+="r="+s,d+=l,n=atob(n),n+="\0\0\0";const m=p(t.pass);for(r=a=w.core_hmac_sha1(m,n),h=1;h<i;h++){for(o=w.core_hmac_sha1(m,w.binb2str(a)),c=0;c<5;c++)r[c]^=o[c];a=o}r=w.binb2str(r);const g=w.core_hmac_sha1(r,"Client Key"),f=w.str_hmac_sha1(r,"Server Key"),S=w.core_hmac_sha1(w.str_sha1(w.binb2str(g)),d);for(t._sasl_data["server-signature"]=w.b64_hmac_sha1(f,d),c=0;c<5;c++)g[c]^=S[c];return l+=",p="+btoa(w.binb2str(g)),l}clientChallenge(t,e){const s=e||_.hexdigest(""+1234567890*Math.random());let n="n="+p(t.authcid);return n+=",r=",n+=s,t._sasl_data.cnonce=s,t._sasl_data["client-first-message-bare"]=n,n="n,,"+n,n}},L.SASLOAuthBearer=class extends m{constructor(t="OAUTHBEARER",e=!0,s=40){super(t,e,s)}test(t){return null!==t.pass}onChallenge(t){let e="n,";return null!==t.authcid&&(e=e+"a="+t.authzid),e+=",",e+="",e+="auth=Bearer ",e+=t.pass,e+="",e+="",p(e)}},L.SASLExternal=class extends m{constructor(t="EXTERNAL",e=!0,s=10){super(t,e,s)}onChallenge(t){return t.authcid===t.authzid?"":t.authzid}},L.SASLXOAuth2=class extends m{constructor(t="X-OAUTH2",e=!0,s=30){super(t,e,s)}test(t){return null!==t.pass}onChallenge(t){let e="\0";return null!==t.authcid&&(e+=t.authzid),e+="\0",e+=t.pass,p(e)}};var q={Strophe:L,$build:H,$iq:v,$msg:R,$pres:M,SHA1:w,MD5:_,b64_hmac_sha1:w.b64_hmac_sha1,b64_sha1:w.b64_sha1,str_hmac_sha1:w.str_hmac_sha1,str_sha1:w.str_sha1};L.Request=class{constructor(t,e,s,n){this.id=++L._requestId,this.xmlData=t,this.data=L.serialize(t),this.origFunc=e,this.func=e,this.rid=s,this.date=NaN,this.sends=n||0,this.abort=!1,this.dead=null,this.age=function(){if(!this.date)return 0;return(new Date-this.date)/1e3},this.timeDead=function(){if(!this.dead)return 0;return(new Date-this.dead)/1e3},this.xhr=this._newXHR()}getResponse(){let t=null;if(this.xhr.responseXML&&this.xhr.responseXML.documentElement){if(t=this.xhr.responseXML.documentElement,"parsererror"===t.tagName)throw L.error("invalid response received"),L.error("responseText: "+this.xhr.responseText),L.error("responseXML: "+L.serialize(this.xhr.responseXML)),new Error("parsererror")}else if(this.xhr.responseText){if(L.debug("Got responseText but no responseXML; attempting to parse it with DOMParser..."),t=(new n).parseFromString(this.xhr.responseText,"application/xml").documentElement,!t)throw new Error("Parsing produced null node");if(t.querySelector("parsererror")){L.error("invalid response received: "+t.querySelector("parsererror").textContent),L.error("responseText: "+this.xhr.responseText);const e=new Error;throw e.name=L.ErrorCondition.BAD_FORMAT,e}}return t}_newXHR(){let t=null;return window.XMLHttpRequest?(t=new XMLHttpRequest,t.overrideMimeType&&t.overrideMimeType("text/xml; charset=utf-8")):window.ActiveXObject&&(t=new ActiveXObject("Microsoft.XMLHTTP")),t.onreadystatechange=this.func.bind(null,this),t}},L.Bosh=class t{constructor(t){this._conn=t,this.rid=Math.floor(4294967295*Math.random()),this.sid=null,this.hold=1,this.wait=60,this.window=5,this.errors=0,this.inactivity=null,this.lastResponseHeaders=null,this._requests=[]}_buildBody(){const t=H("body",{rid:this.rid++,xmlns:L.NS.HTTPBIND});return null!==this.sid&&t.attrs({sid:this.sid}),this._conn.options.keepalive&&this._conn._sessionCachingSupported()&&this._cacheSession(),t}_reset(){this.rid=Math.floor(4294967295*Math.random()),this.sid=null,this.errors=0,this._conn._sessionCachingSupported()&&window.sessionStorage.removeItem("strophe-bosh-session"),this._conn.nextValidRid(this.rid)}_connect(t,e,s){this.wait=t||this.wait,this.hold=e||this.hold,this.errors=0;const n=this._buildBody().attrs({to:this._conn.domain,"xml:lang":"en",wait:this.wait,hold:this.hold,content:"text/xml; charset=utf-8",ver:"1.6","xmpp:version":"1.0","xmlns:xmpp":L.NS.BOSH});s&&n.attrs({route:s});const i=this._conn._connect_cb;this._requests.push(new L.Request(n.tree(),this._onRequestStateChange.bind(this,i.bind(this._conn)),n.tree().getAttribute("rid"))),this._throttledRequestHandler()}_attach(t,e,s,n,i,r,o){this._conn.jid=t,this.sid=e,this.rid=s,this._conn.connect_callback=n,this._conn.domain=L.getDomainFromJid(this._conn.jid),this._conn.authenticated=!0,this._conn.connected=!0,this.wait=i||this.wait,this.hold=r||this.hold,this.window=o||this.window,this._conn._changeConnectStatus(L.Status.ATTACHED,null)}_restore(t,e,s,n,i){const r=JSON.parse(window.sessionStorage.getItem("strophe-bosh-session"));if(!(null!=r&&r.rid&&r.sid&&r.jid&&(null==t||L.getBareJidFromJid(r.jid)===L.getBareJidFromJid(t)||null===L.getNodeFromJid(t)&&L.getDomainFromJid(r.jid)===t))){const t=new Error("_restore: no restoreable session.");throw t.name="StropheSessionError",t}this._conn.restored=!0,this._attach(r.jid,r.sid,r.rid,e,s,n,i)}_cacheSession(){this._conn.authenticated?this._conn.jid&&this.rid&&this.sid&&window.sessionStorage.setItem("strophe-bosh-session",JSON.stringify({jid:this._conn.jid,rid:this.rid,sid:this.sid})):window.sessionStorage.removeItem("strophe-bosh-session")}_connect_cb(t){const e=t.getAttribute("type");if(null!==e&&"terminate"===e){let e=t.getAttribute("condition");L.error("BOSH-Connection failed: "+e);const s=t.getElementsByTagName("conflict");return null!==e?("remote-stream-error"===e&&s.length>0&&(e="conflict"),this._conn._changeConnectStatus(L.Status.CONNFAIL,e)):this._conn._changeConnectStatus(L.Status.CONNFAIL,"unknown"),this._conn._doDisconnect(e),L.Status.CONNFAIL}this.sid||(this.sid=t.getAttribute("sid"));const s=t.getAttribute("requests");s&&(this.window=parseInt(s,10));const n=t.getAttribute("hold");n&&(this.hold=parseInt(n,10));const i=t.getAttribute("wait");i&&(this.wait=parseInt(i,10));const r=t.getAttribute("inactivity");r&&(this.inactivity=parseInt(r,10))}_disconnect(t){this._sendTerminate(t)}_doDisconnect(){this.sid=null,this.rid=Math.floor(4294967295*Math.random()),this._conn._sessionCachingSupported()&&window.sessionStorage.removeItem("strophe-bosh-session"),this._conn.nextValidRid(this.rid)}_emptyQueue(){return 0===this._requests.length}_callProtocolErrorHandlers(e){const s=t._getRequestStatus(e),n=this._conn.protocolErrorHandlers.HTTP[s];n&&n.call(this,s)}_hitError(t){this.errors++,L.warn("request errored, status: "+t+", number of errors: "+this.errors),this.errors>4&&this._conn._onDisconnectTimeout()}_no_auth_received(t){L.warn("Server did not yet offer a supported authentication mechanism. Sending a blank poll request."),t=t?t.bind(this._conn):this._conn._connect_cb.bind(this._conn);const e=this._buildBody();this._requests.push(new L.Request(e.tree(),this._onRequestStateChange.bind(this,t),e.tree().getAttribute("rid"))),this._throttledRequestHandler()}_onDisconnectTimeout(){this._abortAllRequests()}_abortAllRequests(){for(;this._requests.length>0;){const t=this._requests.pop();t.abort=!0,t.xhr.abort(),t.xhr.onreadystatechange=function(){}}}_onIdle(){const t=this._conn._data;if(this._conn.authenticated&&0===this._requests.length&&0===t.length&&!this._conn.disconnecting&&(L.debug("no requests during idle cycle, sending blank request"),t.push(null)),!this._conn.paused){if(this._requests.length<2&&t.length>0){const e=this._buildBody();for(let s=0;s<t.length;s++)null!==t[s]&&("restart"===t[s]?e.attrs({to:this._conn.domain,"xml:lang":"en","xmpp:restart":"true","xmlns:xmpp":L.NS.BOSH}):e.cnode(t[s]).up());delete this._conn._data,this._conn._data=[],this._requests.push(new L.Request(e.tree(),this._onRequestStateChange.bind(this,this._conn._dataRecv.bind(this._conn)),e.tree().getAttribute("rid"))),this._throttledRequestHandler()}if(this._requests.length>0){const t=this._requests[0].age();null!==this._requests[0].dead&&this._requests[0].timeDead()>Math.floor(L.SECONDARY_TIMEOUT*this.wait)&&this._throttledRequestHandler(),t>Math.floor(L.TIMEOUT*this.wait)&&(L.warn("Request "+this._requests[0].id+" timed out, over "+Math.floor(L.TIMEOUT*this.wait)+" seconds since last activity"),this._throttledRequestHandler())}}}static _getRequestStatus(t,e){let s;if(4===t.xhr.readyState)try{s=t.xhr.status}catch(t){L.error("Caught an error while retrieving a request's status, reqStatus: "+s)}return void 0===s&&(s="number"==typeof e?e:0),s}_onRequestStateChange(e,s){if(L.debug("request id "+s.id+"."+s.sends+" state changed to "+s.xhr.readyState),s.abort)return void(s.abort=!1);if(4!==s.xhr.readyState)return;const n=t._getRequestStatus(s);if(this.lastResponseHeaders=s.xhr.getAllResponseHeaders(),this._conn.disconnecting&&n>=400)return this._hitError(n),void this._callProtocolErrorHandlers(s);const i=n>0&&n<500,r=s.sends>this._conn.maxRetries;if((i||r)&&(this._removeRequest(s),L.debug("request id "+s.id+" should now be removed")),200===n){const t=this._requests[0]===s;(this._requests[1]===s||t&&this._requests.length>0&&this._requests[0].age()>Math.floor(L.SECONDARY_TIMEOUT*this.wait))&&this._restartRequest(0),this._conn.nextValidRid(Number(s.rid)+1),L.debug("request id "+s.id+"."+s.sends+" got 200"),e(s),this.errors=0}else 0===n||n>=400&&n<600||n>=12e3?(L.error("request id "+s.id+"."+s.sends+" error "+n+" happened"),this._hitError(n),this._callProtocolErrorHandlers(s),n>=400&&n<500&&(this._conn._changeConnectStatus(L.Status.DISCONNECTING,null),this._conn._doDisconnect())):L.error("request id "+s.id+"."+s.sends+" error "+n+" happened");i||r?r&&!this._conn.connected&&this._conn._changeConnectStatus(L.Status.CONNFAIL,"giving-up"):this._throttledRequestHandler()}_processRequest(e){let s=this._requests[e];const n=t._getRequestStatus(s,-1);if(s.sends>this._conn.maxRetries)return void this._conn._onDisconnectTimeout();const i=s.age(),r=!isNaN(i)&&i>Math.floor(L.TIMEOUT*this.wait),o=null!==s.dead&&s.timeDead()>Math.floor(L.SECONDARY_TIMEOUT*this.wait),a=4===s.xhr.readyState&&(n<1||n>=500);if((r||o||a)&&(o&&L.error(`Request ${this._requests[e].id} timed out (secondary), restarting`),s.abort=!0,s.xhr.abort(),s.xhr.onreadystatechange=function(){},this._requests[e]=new L.Request(s.xmlData,s.origFunc,s.rid,s.sends),s=this._requests[e]),0===s.xhr.readyState){L.debug("request id "+s.id+"."+s.sends+" posting");try{const t=this._conn.options.contentType||"text/xml; charset=utf-8";s.xhr.open("POST",this._conn.service,!this._conn.options.sync),void 0!==s.xhr.setRequestHeader&&s.xhr.setRequestHeader("Content-Type",t),this._conn.options.withCredentials&&(s.xhr.withCredentials=!0)}catch(t){return L.error("XHR open failed: "+t.toString()),this._conn.connected||this._conn._changeConnectStatus(L.Status.CONNFAIL,"bad-service"),void this._conn.disconnect()}const t=()=>{if(s.date=new Date,this._conn.options.customHeaders){const t=this._conn.options.customHeaders;for(const e in t)Object.prototype.hasOwnProperty.call(t,e)&&s.xhr.setRequestHeader(e,t[e])}s.xhr.send(s.data)};if(s.sends>1){const e=1e3*Math.min(Math.floor(L.TIMEOUT*this.wait),Math.pow(s.sends,3));setTimeout((function(){t()}),e)}else t();s.sends++,this._conn.xmlOutput!==L.Connection.prototype.xmlOutput&&(s.xmlData.nodeName===this.strip&&s.xmlData.childNodes.length?this._conn.xmlOutput(s.xmlData.childNodes[0]):this._conn.xmlOutput(s.xmlData)),this._conn.rawOutput!==L.Connection.prototype.rawOutput&&this._conn.rawOutput(s.data)}else L.debug("_processRequest: "+(0===e?"first":"second")+" request has readyState of "+s.xhr.readyState)}_removeRequest(t){L.debug("removing request");for(let e=this._requests.length-1;e>=0;e--)t===this._requests[e]&&this._requests.splice(e,1);t.xhr.onreadystatechange=function(){},this._throttledRequestHandler()}_restartRequest(t){const e=this._requests[t];null===e.dead&&(e.dead=new Date),this._processRequest(t)}_reqToData(t){try{return t.getResponse()}catch(t){if("parsererror"!==t.message)throw t;this._conn.disconnect("strophe-parsererror")}}_sendTerminate(t){L.debug("_sendTerminate was called");const e=this._buildBody().attrs({type:"terminate"});t&&e.cnode(t.tree());const s=new L.Request(e.tree(),this._onRequestStateChange.bind(this,this._conn._dataRecv.bind(this._conn)),e.tree().getAttribute("rid"));this._requests.push(s),this._throttledRequestHandler()}_send(){clearTimeout(this._conn._idleTimeout),this._throttledRequestHandler(),this._conn._idleTimeout=setTimeout((()=>this._conn._onIdle()),100)}_sendRestart(){this._throttledRequestHandler(),clearTimeout(this._conn._idleTimeout)}_throttledRequestHandler(){this._requests?L.debug("_throttledRequestHandler called with "+this._requests.length+" requests"):L.debug("_throttledRequestHandler called with undefined requests"),this._requests&&0!==this._requests.length&&(this._requests.length>0&&this._processRequest(0),this._requests.length>1&&Math.abs(this._requests[0].rid-this._requests[1].rid)<this.window&&this._processRequest(1))}},L.Bosh.prototype.strip=null,L.Websocket=class{constructor(t){this._conn=t,this.strip="wrapper";const e=t.service;if(0!==e.indexOf("ws:")&&0!==e.indexOf("wss:")){let s="";"ws"===t.options.protocol&&"https:"!==window.location.protocol?s+="ws":s+="wss",s+="://"+window.location.host,0!==e.indexOf("/")?s+=window.location.pathname+e:s+=e,t.service=s}}_buildStream(){return H("open",{xmlns:L.NS.FRAMING,to:this._conn.domain,version:"1.0"})}_checkStreamError(t,e){let s;if(s=t.getElementsByTagNameNS?t.getElementsByTagNameNS(L.NS.STREAM,"error"):t.getElementsByTagName("stream:error"),0===s.length)return!1;const n=s[0];let i="",r="";for(let t=0;t<n.childNodes.length;t++){const e=n.childNodes[t];if("urn:ietf:params:xml:ns:xmpp-streams"!==e.getAttribute("xmlns"))break;"text"===e.nodeName?r=e.textContent:i=e.nodeName}let o="WebSocket stream error: ";return o+=i||"unknown",r&&(o+=" - "+r),L.error(o),this._conn._changeConnectStatus(e,i),this._conn._doDisconnect(),!0}_reset(){}_connect(){this._closeSocket(),this.socket=new s(this._conn.service,"xmpp"),this.socket.onopen=()=>this._onOpen(),this.socket.onerror=t=>this._onError(t),this.socket.onclose=t=>this._onClose(t),this.socket.onmessage=t=>this._onInitialMessage(t)}_connect_cb(t){if(this._checkStreamError(t,L.Status.CONNFAIL))return L.Status.CONNFAIL}_handleStreamStart(t){let e=!1;const s=t.getAttribute("xmlns");"string"!=typeof s?e="Missing xmlns in <open />":s!==L.NS.FRAMING&&(e="Wrong xmlns in <open />: "+s);const n=t.getAttribute("version");return"string"!=typeof n?e="Missing version in <open />":"1.0"!==n&&(e="Wrong version in <open />: "+n),!e||(this._conn._changeConnectStatus(L.Status.CONNFAIL,e),this._conn._doDisconnect(),!1)}_onInitialMessage(t){if(0===t.data.indexOf("<open ")||0===t.data.indexOf("<?xml")){const e=t.data.replace(/^(<\?.*?\?>\s*)*/,"");if(""===e)return;const s=(new n).parseFromString(e,"text/xml").documentElement;this._conn.xmlInput(s),this._conn.rawInput(t.data),this._handleStreamStart(s)&&this._connect_cb(s)}else if(0===t.data.indexOf("<close ")){const