!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).strophe={})}(this,(function(e){"use strict";var t="undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{};const s=function(){let e=t.WebSocket;if(void 0===e)try{e=require("ws")}catch(e){throw new Error('You must install the "ws" package to use Strophe in nodejs.')}return e}();const n=function(){let e=t.DOMParser;if(void 0===e)try{e=require("@xmldom/xmldom").DOMParser}catch(e){throw new Error('You must install the "@xmldom/xmldom" package to use Strophe in nodejs.')}return e}();function i(){if("undefined"==typeof document)try{return(new(0,require("@xmldom/xmldom").DOMImplementation)).createDocument("jabber:client","strophe",null)}catch(e){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 e=function(){const e=["Msxml2.DOMDocument.6.0","Msxml2.DOMDocument.5.0","Msxml2.DOMDocument.4.0","MSXML2.DOMDocument.3.0","MSXML2.DOMDocument","MSXML.DOMDocument","Microsoft.XMLDOM"];for(let t=0;t>16)+(t>>16)+(s>>16)<<16|65535&s},o=function(e){if("string"!=typeof e)throw new Error("str2binl was passed a non-string");const t=[];for(let s=0;s<8*e.length;s+=8)t[s>>5]|=(255&e.charCodeAt(s/8))<>>32-h,s);var a,h},h=function(e,t,s,n,i,r,o){return a(t&s|~t&n,e,t,i,r,o)},l=function(e,t,s,n,i,r,o){return a(t&n|s&~n,e,t,i,r,o)},c=function(e,t,s,n,i,r,o){return a(t^s^n,e,t,i,r,o)},d=function(e,t,s,n,i,r,o){return a(s^(t|~n),e,t,i,r,o)},u=function(e,t){e[t>>5]|=128<>>9<<4)]=t;let s,n,i,o,a=1732584193,u=-271733879,_=-1732584194,m=271733878;for(let t=0;t>2]>>n%4*8+4&15)+t.charAt(e[n>>2]>>n%4*8&15);return s}(u(o(e),8*e.length))},hash:function(e){return function(e){let t="";for(let s=0;s<32*e.length;s+=8)t+=String.fromCharCode(e[s>>5]>>>s%32&255);return t}(u(o(e),8*e.length))}};class m{constructor(e,t,s){this.mechname=e,this.isClientFirst=t,this.priority=s}test(){return!0}onStart(e){this._connection=e}onChallenge(e,t){throw new Error("You should implement challenge handling!")}clientChallenge(e){if(!this.isClientFirst)throw new Error("clientChallenge should not be called if isClientFirst is false!");return this.onChallenge(e)}onFailure(){this._connection=null}onSuccess(){this._connection=null}}const p=function(e){var t,s,n="",i=e.length;for(t=0;t=0&&s<=127?n+=e.charAt(t):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(e){e=e||{};for(const t in e)if(Object.prototype.hasOwnProperty.call(e,t)){let s="",n="",i="";const r=e[t],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=t+"="+a+s+n+i}};function f(e,t){e[t>>5]|=128<<24-t%32,e[15+(t+64>>9<<4)]=t;var s,n,i,r,o,a,h,l,c=new Array(80),d=1732584193,u=-271733879,_=-1732584194,m=271733878,p=-1009589776;for(s=0;s16&&(s=f(s,8*e.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(y(t)),512+8*t.length);return f(i.concat(o),672)}function x(e,t){var s=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(s>>16)<<16|65535&s}function N(e,t){return e<>>32-t}function y(e){for(var t=[],s=0;s<8*e.length;s+=8)t[s>>5]|=(255&e.charCodeAt(s/8))<<24-s%32;return t}function w(e){for(var t,s,n="",i=0;i<4*e.length;i+=3)for(t=(e[i>>2]>>8*(3-i%4)&255)<<16|(e[i+1>>2]>>8*(3-(i+1)%4)&255)<<8|e[i+2>>2]>>8*(3-(i+2)%4)&255,s=0;s<4;s++)8*i+6*s>32*e.length?n+="=":n+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(t>>6*(3-s)&63);return n}function A(e){for(var t="",s=0;s<32*e.length;s+=8)t+=String.fromCharCode(e[s>>5]>>>24-s%32&255);return t}const C={b64_hmac_sha1:function(e,t){return w(T(e,t))},b64_sha1:function(e){return w(f(y(e),8*e.length))},binb2str:A,core_hmac_sha1:T,str_hmac_sha1:function(e,t){return A(T(e,t))},str_sha1:function(e){return A(f(y(e),8*e.length))}};function E(e){const t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(e);return t<0?void 0:t}var v=function(e){if(0===arguments.length)throw new TypeError("1 argument required, but only 0 present.");if((e=(e=`${e}`).replace(/[ \t\n\f\r]/g,"")).length%4==0&&(e=e.replace(/==?$/,"")),e.length%4==1||/[^+/0-9A-Za-z]/.test(e))return null;let t="",s=0,n=0;for(let i=0;i>16),t+=String.fromCharCode((65280&s)>>8),t+=String.fromCharCode(255&s),s=n=0);return 12===n?(s>>=4,t+=String.fromCharCode(s)):18===n&&(s>>=2,t+=String.fromCharCode((65280&s)>>8),t+=String.fromCharCode(255&s)),t};function O(e){if(e>=0&&e<64)return"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[e]}var H=function(e){if(0===arguments.length)throw new TypeError("1 argument required, but only 0 present.");let t;for(e=`${e}`,t=0;t255)return null;let s="";for(t=0;t>2,n[1]=(3&e.charCodeAt(t))<<4,e.length>t+1&&(n[1]|=e.charCodeAt(t+1)>>4,n[2]=(15&e.charCodeAt(t+1))<<2),e.length>t+2&&(n[2]|=e.charCodeAt(t+2)>>6,n[3]=63&e.charCodeAt(t+2));for(let e=0;e0)for(let s=0;se.tagName===t,_xmlGenerator:null,xmlGenerator:()=>(D._xmlGenerator||(D._xmlGenerator=i()),D._xmlGenerator),xmlElement(e){if(!e)return null;const t=D.xmlGenerator().createElement(e);for(let e=1;ee=(e=(e=(e=(e=e.replace(/\&/g,"&")).replace(//g,">")).replace(/'/g,"'")).replace(/"/g,"""),xmlunescape:e=>e=(e=(e=(e=(e=e.replace(/\&/g,"&")).replace(/</g,"<")).replace(/>/g,">")).replace(/'/g,"'")).replace(/"/g,'"'),xmlTextNode:e=>D.xmlGenerator().createTextNode(e),xmlHtmlNode(e){let t;if(n){t=(new n).parseFromString(e,"text/xml")}else t=new ActiveXObject("Microsoft.XMLDOM"),t.async="false",t.loadXML(e);return t},getText(e){if(!e)return null;let t="";0===e.childNodes.length&&e.nodeType===D.ElementType.TEXT&&(t+=e.nodeValue);for(let s=0;s0&&(r=e.join("; "),t.setAttribute(i,r))}else t.setAttribute(i,r)}for(let s=0;s"string"!=typeof e?e:e.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,"\\3e").replace(/@/g,"\\40"),unescapeNode:e=>"string"!=typeof e?e:e.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:e=>e.indexOf("@")<0?null:e.split("@")[0],getDomainFromJid(e){const t=D.getBareJidFromJid(e);if(t.indexOf("@")<0)return t;{const e=t.split("@");return e.splice(0,1),e.join("@")}},getResourceFromJid(e){if(!e)return null;const t=e.split("/");return t.length<2?null:(t.splice(0,1),t.join("/"))},getBareJidFromJid:e=>e?e.split("/")[0]:null,_handleError(e){void 0!==e.stack&&D.fatal(e.stack),e.sourceURL?D.fatal("error: "+this.handler+" "+e.sourceURL+":"+e.line+" - "+e.name+": "+e.message):e.fileName?D.fatal("error: "+this.handler+" "+e.fileName+":"+e.lineNumber+" - "+e.name+": "+e.message):D.fatal("error: "+e.message)},log(e,t){var s;e===this.LogLevel.FATAL&&(null===(s=console)||void 0===s||s.error(t))},debug(e){this.log(this.LogLevel.DEBUG,e)},info(e){this.log(this.LogLevel.INFO,e)},warn(e){this.log(this.LogLevel.WARN,e)},error(e){this.log(this.LogLevel.ERROR,e)},fatal(e){this.log(this.LogLevel.FATAL,e)},serialize(e){if(!e)return null;"function"==typeof e.tree&&(e=e.tree());const t=[...Array(e.attributes.length).keys()].map((t=>e.attributes[t].nodeName));t.sort();let s=t.reduce(((t,s)=>`${t} ${s}="${D.xmlescape(e.attributes.getNamedItem(s).value)}"`),`<${e.nodeName}`);if(e.childNodes.length>0){s+=">";for(let t=0;t"}}s+=""}else s+="/>";return s},_requestId:0,_connectionPlugins:{},addConnectionPlugin(e,t){D._connectionPlugins[e]=t},Builder:class{constructor(e,t){"presence"!==e&&"message"!==e&&"iq"!==e||(t&&!t.xmlns?t.xmlns=D.NS.CLIENT:t||(t={xmlns:D.NS.CLIENT})),this.nodeTree=D.xmlElement(e,t),this.node=this.nodeTree}tree(){return this.nodeTree}toString(){return D.serialize(this.nodeTree)}up(){return this.node=this.node.parentNode,this}root(){return this.node=this.nodeTree,this}attrs(e){for(const t in e)Object.prototype.hasOwnProperty.call(e,t)&&(void 0===e[t]?this.node.removeAttribute(t):this.node.setAttribute(t,e[t]));return this}c(e,t,s){const n=D.xmlElement(e,t,s);return this.node.appendChild(n),"string"!=typeof s&&"number"!=typeof s&&(this.node=n),this}cnode(e){let t;const s=D.xmlGenerator();try{t=void 0!==s.importNode}catch(e){t=!1}const n=t?s.importNode(e,!0):D.copyElement(e);return this.node.appendChild(n),this.node=n,this}t(e){const t=D.xmlTextNode(e);return this.node.appendChild(t),this}h(e){const t=D.xmlGenerator().createElement("body");t.innerHTML=e;const s=D.createHtml(t);for(;s.childNodes.length>0;)this.node.appendChild(s.childNodes[0]);return this}},Handler:function(e,t,s,n,i,r,o){this.handler=e,this.ns=t,this.name=s,this.type=n,this.id=i,this.options=o||{matchBareFromJid:!1,ignoreNamespaceFragment:!1},this.options.matchBare&&(D.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?D.getBareJidFromJid(r):null:this.from=r,this.user=!0}};D.Handler.prototype={getNamespace(e){let t=e.getAttribute("xmlns");return t&&this.options.ignoreNamespaceFragment&&(t=t.split("#")[0]),t},namespaceMatch(e){let t=!1;return!this.ns||(D.forEachChild(e,null,(e=>{this.getNamespace(e)===this.ns&&(t=!0)})),t||this.getNamespace(e)===this.ns)},isMatch(e){let t=e.getAttribute("from");this.options.matchBareFromJid&&(t=D.getBareJidFromJid(t));const s=e.getAttribute("type");return!(!this.namespaceMatch(e)||this.name&&!D.isTagEqual(e,this.name)||this.type&&(Array.isArray(this.type)?-1===this.type.indexOf(s):s!==this.type)||this.id&&e.getAttribute("id")!==this.id||this.from&&t!==this.from)},run(e){let t=null;try{t=this.handler(e)}catch(e){throw D._handleError(e),e}return t},toString(){return"{Handler: "+this.handler+"("+this.name+","+this.id+","+this.ns+")}"}},D.TimedHandler=class{constructor(e,t){this.period=e,this.handler=t,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+")}"}},D.Connection=class{constructor(e,t){this.service=e,this.options=t||{},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),this.iqFallbackHandler=new D.Handler((e=>this.send(q({type:"error",id:e.getAttribute("id")}).c("error",{type:"cancel"}).c("service-unavailable",{xmlns:D.NS.STANZAS}))),null,"iq",["get","set"]);for(const e in D._connectionPlugins)if(Object.prototype.hasOwnProperty.call(D._connectionPlugins,e)){const t=function(){};t.prototype=D._connectionPlugins[e],this[e]=new t,this[e].init(this)}}setProtocol(){const e=this.options.protocol||"";this.options.worker?this._proto=new D.WorkerWebsocket(this):0===this.service.indexOf("ws:")||0===this.service.indexOf("wss:")||0===e.indexOf("ws")?this._proto=new D.Websocket(this):this._proto=new D.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(e){const t="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){const t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)}));return"string"==typeof e||"number"==typeof e?t+":"+e:t+""}addProtocolErrorHandler(e,t,s){this.protocolErrorHandlers[e][t]=s}connect(e,t,s,n,i,r,o){let a=arguments.length>7&&void 0!==arguments[7]?arguments[7]:3e3;this.jid=e,this.authzid=D.getBareJidFromJid(this.jid),this.authcid=o||D.getNodeFromJid(this.jid),this.pass=t,this.connect_callback=s,this.disconnecting=!1,this.connected=!1,this.authenticated=!1,this.restored=!1,this.disconnection_timeout=a,this.domain=D.getDomainFromJid(this.jid),this._changeConnectStatus(D.Status.CONNECTING,null),this._proto._connect(n,i,r)}attach(e,t,s,n,i,r,o){if(this._proto._attach)return this._proto._attach(e,t,s,n,i,r,o);{const e=new Error('The "attach" method is not available for your connection protocol');throw e.name="StropheSessionError",e}}restore(e,t,s,n,i){if(!this._sessionCachingSupported()){const e=new Error('The "restore" method can only be used with a BOSH connection.');throw e.name="StropheSessionError",e}this._proto._restore(e,t,s,n,i)}_sessionCachingSupported(){if(this._proto instanceof D.Bosh){if(!JSON)return!1;try{sessionStorage.setItem("_strophe_","_strophe_"),sessionStorage.removeItem("_strophe_")}catch(e){return!1}return!0}return!1}xmlInput(e){}xmlOutput(e){}rawInput(e){}rawOutput(e){}nextValidRid(e){}send(e){if(null!==e){if("function"==typeof e.sort)for(let t=0;t{i&&this.deleteTimedHandler(i),"error"===e.getAttribute("type")?s&&s(e):t&&t(e)}),null,"presence",null,r);n&&(i=this.addTimedHandler(n,(()=>(this.deleteHandler(e),s&&s(null),!1))))}return this.send(e),r}sendIQ(e,t,s,n){let i=null;"function"==typeof e.tree&&(e=e.tree());let r=e.getAttribute("id");if(r||(r=this.getUniqueId("sendIQ"),e.setAttribute("id",r)),"function"==typeof t||"function"==typeof s){const e=this.addHandler((e=>{i&&this.deleteTimedHandler(i);const n=e.getAttribute("type");if("result"===n)t&&t(e);else{if("error"!==n){const e=new Error(`Got bad IQ type of ${n}`);throw e.name="StropheError",e}s&&s(e)}}),null,"iq",["error","result"],r);n&&(i=this.addTimedHandler(n,(()=>(this.deleteHandler(e),s&&s(null),!1))))}return this.send(e),r}_queueData(e){if(null===e||!e.tagName||!e.childNodes){const e=new Error("Cannot queue non-DOMElement.");throw e.name="StropheError",e}this._data.push(e)}_sendRestart(){this._data.push("restart"),this._proto._sendRestart(),this._idleTimeout=setTimeout((()=>this._onIdle()),100)}addTimedHandler(e,t){const s=new D.TimedHandler(e,t);return this.addTimeds.push(s),s}deleteTimedHandler(e){this.removeTimeds.push(e)}addHandler(e,t,s,n,i,r,o){const a=new D.Handler(e,t,s,n,i,r,o);return this.addHandlers.push(a),a}deleteHandler(e){this.removeHandlers.push(e);const t=this.addHandlers.indexOf(e);t>=0&&this.addHandlers.splice(t,1)}registerSASLMechanisms(e){this.mechanisms={},(e=e||[D.SASLAnonymous,D.SASLExternal,D.SASLOAuthBearer,D.SASLXOAuth2,D.SASLPlain,D.SASLSHA1]).forEach((e=>this.registerSASLMechanism(e)))}registerSASLMechanism(e){const t=new e;this.mechanisms[t.mechname]=t}disconnect(e){if(this._changeConnectStatus(D.Status.DISCONNECTING,e),e?D.warn("Disconnect was called because: "+e):D.info("Disconnect was called"),this.connected){let e=!1;this.disconnecting=!0,this.authenticated&&(e=L({xmlns:D.NS.CLIENT,type:"unavailable"})),this._disconnectTimeout=this._addSysTimedHandler(this.disconnection_timeout,this._onDisconnectTimeout.bind(this)),this._proto._disconnect(e)}else D.warn("Disconnect was called before Strophe connected to the server"),this._proto._abortAllRequests(),this._doDisconnect()}_changeConnectStatus(e,t,s){for(const s in D._connectionPlugins)if(Object.prototype.hasOwnProperty.call(D._connectionPlugins,s)){const n=this[s];if(n.statusChanged)try{n.statusChanged(e,t)}catch(e){D.error(`${s} plugin caused an exception changing status: ${e}`)}}if(this.connect_callback)try{this.connect_callback(e,t,s)}catch(e){D._handleError(e),D.error(`User connection callback caused an exception: ${e}`)}}_doDisconnect(e){"number"==typeof this._idleTimeout&&clearTimeout(this._idleTimeout),null!==this._disconnectTimeout&&(this.deleteTimedHandler(this._disconnectTimeout),this._disconnectTimeout=null),D.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(D.Status.DISCONNECTED,e),this.connected=!1}_dataRecv(e,t){const s=this._proto._reqToData(e);if(null===s)return;for(this.xmlInput!==D.Connection.prototype.xmlInput&&(s.nodeName===this._proto.strip&&s.childNodes.length?this.xmlInput(s.childNodes[0]):this.xmlInput(s)),this.rawInput!==D.Connection.prototype.rawInput&&(t?this.rawInput(t):this.rawInput(D.serialize(s)));this.removeHandlers.length>0;){const e=this.removeHandlers.pop(),t=this.handlers.indexOf(e);t>=0&&this.handlers.splice(t,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 e=s.getAttribute("condition");const t=s.getElementsByTagName("conflict");return null!==e?("remote-stream-error"===e&&t.length>0&&(e="conflict"),this._changeConnectStatus(D.Status.CONNFAIL,e)):this._changeConnectStatus(D.Status.CONNFAIL,D.ErrorCondition.UNKOWN_REASON),void this._doDisconnect(e)}D.forEachChild(s,null,(e=>{const t=[];this.handlers=this.handlers.reduce(((s,n)=>{try{!n.isMatch(e)||!this.authenticated&&n.user?s.push(n):(n.run(e)&&s.push(n),t.push(n))}catch(e){D.warn("Removing Strophe handlers due to uncaught exception: "+e.message)}return s}),[]),!t.length&&this.iqFallbackHandler.isMatch(e)&&this.iqFallbackHandler.run(e)}))}_connect_cb(e,t,s){let n;D.debug("_connect_cb was called"),this.connected=!0;try{n=this._proto._reqToData(e)}catch(e){if(e.name!==D.ErrorCondition.BAD_FORMAT)throw e;this._changeConnectStatus(D.Status.CONNFAIL,D.ErrorCondition.BAD_FORMAT),this._doDisconnect(D.ErrorCondition.BAD_FORMAT)}if(!n)return;this.xmlInput!==D.Connection.prototype.xmlInput&&(n.nodeName===this._proto.strip&&n.childNodes.length?this.xmlInput(n.childNodes[0]):this.xmlInput(n)),this.rawInput!==D.Connection.prototype.rawInput&&(s?this.rawInput(s):this.rawInput(D.serialize(n)));if(this._proto._connect_cb(n)===D.Status.CONNFAIL)return;let i;if(i=n.getElementsByTagNameNS?n.getElementsByTagNameNS(D.NS.STREAM,"features").length>0:n.getElementsByTagName("stream:features").length>0||n.getElementsByTagName("features").length>0,!i)return void this._proto._no_auth_received(t);const r=Array.from(n.getElementsByTagName("mechanism")).map((e=>this.mechanisms[e.textContent])).filter((e=>e));0!==r.length||0!==n.getElementsByTagName("auth").length?!1!==this.do_authentication&&this.authenticate(r):this._proto._no_auth_received(t)}sortMechanismsByPriority(e){for(let t=0;te[s].priority&&(s=n);if(s!==t){const n=e[t];e[t]=e[s],e[s]=n}}return e}authenticate(e){this._attemptSASLAuth(e)||this._attemptLegacyAuth()}_attemptSASLAuth(e){e=this.sortMechanismsByPriority(e||[]);let t=!1;for(let s=0;s{for(;e.length;)this.deleteHandler(e.pop());return this._onStreamFeaturesAfterSASL(t),!1};return t.push(this._addSysHandler((e=>s(t,e)),null,"stream:features",null,null)),t.push(this._addSysHandler((e=>s(t,e)),D.NS.STREAM,"features",null,null)),this._sendRestart(),!1}_onStreamFeaturesAfterSASL(e){this.features=e;for(let t=0;t0&&(t=D.ErrorCondition.CONFLICT),this._changeConnectStatus(D.Status.AUTHFAIL,t,e),!1}const t=e.getElementsByTagName("bind");if(!(t.length>0))return D.warn("Resource binding failed."),this._changeConnectStatus(D.Status.AUTHFAIL,null,e),!1;{const e=t[0].getElementsByTagName("jid");e.length>0&&(this.authenticated=!0,this.jid=D.getText(e[0]),this.do_session?this._establishSession():this._changeConnectStatus(D.Status.CONNECTED,null))}}_establishSession(){if(!this.do_session)throw new Error(`Strophe.Connection.prototype._establishSession called but apparently ${D.NS.SESSION} wasn't advertised by the server`);this._addSysHandler(this._onSessionResultIQ.bind(this),null,null,null,"_session_auth_2"),this.send(q({type:"set",id:"_session_auth_2"}).c("session",{xmlns:D.NS.SESSION}).tree())}_onSessionResultIQ(e){if("result"===e.getAttribute("type"))this.authenticated=!0,this._changeConnectStatus(D.Status.CONNECTED,null);else if("error"===e.getAttribute("type"))return this.authenticated=!1,D.warn("Session creation failed."),this._changeConnectStatus(D.Status.AUTHFAIL,null,e),!1;return!1}_sasl_failure_cb(e){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(D.Status.AUTHFAIL,null,e),!1}_auth2_cb(e){return"result"===e.getAttribute("type")?(this.authenticated=!0,this._changeConnectStatus(D.Status.CONNECTED,null)):"error"===e.getAttribute("type")&&(this._changeConnectStatus(D.Status.AUTHFAIL,null,e),this.disconnect("authentication failed")),!1}_addSysTimedHandler(e,t){const s=new D.TimedHandler(e,t);return s.user=!1,this.addTimeds.push(s),s}_addSysHandler(e,t,s,n,i){const r=new D.Handler(e,t,s,n,i);return r.user=!1,this.addHandlers.push(r),r}_onDisconnectTimeout(){return D.debug("_onDisconnectTimeout was called"),this._changeConnectStatus(D.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 e=this.removeTimeds.pop(),t=this.timedHandlers.indexOf(e);t>=0&&this.timedHandlers.splice(t,1)}const e=(new Date).getTime(),t=[];for(let s=0;sthis._onIdle()),100))}},D.SASLMechanism=m,D.SASLAnonymous=class extends m{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"ANONYMOUS",arguments.length>1&&void 0!==arguments[1]&&arguments[1],arguments.length>2&&void 0!==arguments[2]?arguments[2]:20)}test(e){return null===e.authcid}},D.SASLPlain=class extends m{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"PLAIN",!(arguments.length>1&&void 0!==arguments[1])||arguments[1],arguments.length>2&&void 0!==arguments[2]?arguments[2]:50)}test(e){return null!==e.authcid}onChallenge(e){const{authcid:t,authzid:s,domain:n,pass:i}=e;if(!n)throw new Error("SASLPlain onChallenge: domain is not defined!");let r=s!==`${t}@${n}`?s:"";return r+="\0",r+=t,r+="\0",r+=i,p(r)}},D.SASLSHA1=class extends m{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"SCRAM-SHA-1",!(arguments.length>1&&void 0!==arguments[1])||arguments[1],arguments.length>2&&void 0!==arguments[2]?arguments[2]:60)}test(e){return null!==e.authcid}onChallenge(e,t){let s,n,i,r,o,a,h,l,c="c=biws,",d=`${e._sasl_data["client-first-message-bare"]},${t},`;const u=e._sasl_data.cnonce,_=/([a-z]+)=([^,]+)(,|$)/;for(;t.match(_);){const e=t.match(_);switch(t=t.replace(e[0],""),e[1]){case"r":s=e[2];break;case"s":n=e[2];break;case"i":i=e[2]}}if(s.slice(0,u.length)!==u)return e._sasl_data={},e._sasl_failure_cb();c+="r="+s,d+=c,n=atob(n),n+="\0\0\0";const m=p(e.pass);for(r=a=C.core_hmac_sha1(m,n),h=1;h0&&void 0!==arguments[0]?arguments[0]:"OAUTHBEARER",!(arguments.length>1&&void 0!==arguments[1])||arguments[1],arguments.length>2&&void 0!==arguments[2]?arguments[2]:40)}test(e){return null!==e.pass}onChallenge(e){let t="n,";return null!==e.authcid&&(t=t+"a="+e.authzid),t+=",",t+="",t+="auth=Bearer ",t+=e.pass,t+="",t+="",p(t)}},D.SASLExternal=class extends m{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"EXTERNAL",!(arguments.length>1&&void 0!==arguments[1])||arguments[1],arguments.length>2&&void 0!==arguments[2]?arguments[2]:10)}onChallenge(e){return e.authcid===e.authzid?"":e.authzid}},D.SASLXOAuth2=class extends m{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"X-OAUTH2",!(arguments.length>1&&void 0!==arguments[1])||arguments[1],arguments.length>2&&void 0!==arguments[2]?arguments[2]:30)}test(e){return null!==e.pass}onChallenge(e){let t="\0";return null!==e.authcid&&(t+=e.authzid),t+="\0",t+=e.pass,p(t)}};var F={Strophe:D,$build:R,$iq:q,$msg:M,$pres:L,SHA1:C,MD5:_,b64_hmac_sha1:C.b64_hmac_sha1,b64_sha1:C.b64_sha1,str_hmac_sha1:C.str_hmac_sha1,str_sha1:C.str_sha1};D.Request=class{constructor(e,t,s,n){this.id=++D._requestId,this.xmlData=e,this.data=D.serialize(e),this.origFunc=t,this.func=t,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 e=null;if(this.xhr.responseXML&&this.xhr.responseXML.documentElement){if(e=this.xhr.responseXML.documentElement,"parsererror"===e.tagName)throw D.error("invalid response received"),D.error("responseText: "+this.xhr.responseText),D.error("responseXML: "+D.serialize(this.xhr.responseXML)),new Error("parsererror")}else if(this.xhr.responseText){if(D.debug("Got responseText but no responseXML; attempting to parse it with DOMParser..."),e=(new n).parseFromString(this.xhr.responseText,"application/xml").documentElement,!e)throw new Error("Parsing produced null node");if(e.querySelector("parsererror")){D.error("invalid response received: "+e.querySelector("parsererror").textContent),D.error("responseText: "+this.xhr.responseText);const t=new Error;throw t.name=D.ErrorCondition.BAD_FORMAT,t}}return e}_newXHR(){let e=null;return window.XMLHttpRequest?(e=new XMLHttpRequest,e.overrideMimeType&&e.overrideMimeType("text/xml; charset=utf-8")):window.ActiveXObject&&(e=new ActiveXObject("Microsoft.XMLHTTP")),e.onreadystatechange=this.func.bind(null,this),e}},D.Bosh=class e{constructor(e){this._conn=e,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 e=R("body",{rid:this.rid++,xmlns:D.NS.HTTPBIND});return null!==this.sid&&e.attrs({sid:this.sid}),this._conn.options.keepalive&&this._conn._sessionCachingSupported()&&this._cacheSession(),e}_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(e,t,s){this.wait=e||this.wait,this.hold=t||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":D.NS.BOSH});s&&n.attrs({route:s});const i=this._conn._connect_cb;this._requests.push(new D.Request(n.tree(),this._onRequestStateChange.bind(this,i.bind(this._conn)),n.tree().getAttribute("rid"))),this._throttledRequestHandler()}_attach(e,t,s,n,i,r,o){this._conn.jid=e,this.sid=t,this.rid=s,this._conn.connect_callback=n,this._conn.domain=D.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(D.Status.ATTACHED,null)}_restore(e,t,s,n,i){const r=JSON.parse(window.sessionStorage.getItem("strophe-bosh-session"));if(!(null!=r&&r.rid&&r.sid&&r.jid&&(null==e||D.getBareJidFromJid(r.jid)===D.getBareJidFromJid(e)||null===D.getNodeFromJid(e)&&D.getDomainFromJid(r.jid)===e))){const e=new Error("_restore: no restoreable session.");throw e.name="StropheSessionError",e}this._conn.restored=!0,this._attach(r.jid,r.sid,r.rid,t,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(e){const t=e.getAttribute("type");if(null!==t&&"terminate"===t){let t=e.getAttribute("condition");D.error("BOSH-Connection failed: "+t);const s=e.getElementsByTagName("conflict");return null!==t?("remote-stream-error"===t&&s.length>0&&(t="conflict"),this._conn._changeConnectStatus(D.Status.CONNFAIL,t)):this._conn._changeConnectStatus(D.Status.CONNFAIL,"unknown"),this._conn._doDisconnect(t),D.Status.CONNFAIL}this.sid||(this.sid=e.getAttribute("sid"));const s=e.getAttribute("requests");s&&(this.window=parseInt(s,10));const n=e.getAttribute("hold");n&&(this.hold=parseInt(n,10));const i=e.getAttribute("wait");i&&(this.wait=parseInt(i,10));const r=e.getAttribute("inactivity");r&&(this.inactivity=parseInt(r,10))}_disconnect(e){this._sendTerminate(e)}_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(t){const s=e._getRequestStatus(t),n=this._conn.protocolErrorHandlers.HTTP[s];n&&n.call(this,s)}_hitError(e){this.errors++,D.warn("request errored, status: "+e+", number of errors: "+this.errors),this.errors>4&&this._conn._onDisconnectTimeout()}_no_auth_received(e){D.warn("Server did not yet offer a supported authentication mechanism. Sending a blank poll request."),e=e?e.bind(this._conn):this._conn._connect_cb.bind(this._conn);const t=this._buildBody();this._requests.push(new D.Request(t.tree(),this._onRequestStateChange.bind(this,e),t.tree().getAttribute("rid"))),this._throttledRequestHandler()}_onDisconnectTimeout(){this._abortAllRequests()}_abortAllRequests(){for(;this._requests.length>0;){const e=this._requests.pop();e.abort=!0,e.xhr.abort(),e.xhr.onreadystatechange=function(){}}}_onIdle(){const e=this._conn._data;if(this._conn.authenticated&&0===this._requests.length&&0===e.length&&!this._conn.disconnecting&&(D.debug("no requests during idle cycle, sending blank request"),e.push(null)),!this._conn.paused){if(this._requests.length<2&&e.length>0){const t=this._buildBody();for(let s=0;s0){const e=this._requests[0].age();null!==this._requests[0].dead&&this._requests[0].timeDead()>Math.floor(D.SECONDARY_TIMEOUT*this.wait)&&this._throttledRequestHandler(),e>Math.floor(D.TIMEOUT*this.wait)&&(D.warn("Request "+this._requests[0].id+" timed out, over "+Math.floor(D.TIMEOUT*this.wait)+" seconds since last activity"),this._throttledRequestHandler())}}}static _getRequestStatus(e,t){let s;if(4===e.xhr.readyState)try{s=e.xhr.status}catch(e){D.error("Caught an error while retrieving a request's status, reqStatus: "+s)}return void 0===s&&(s="number"==typeof t?t:0),s}_onRequestStateChange(t,s){if(D.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=e._getRequestStatus(s);if(this.lastResponseHeaders=s.xhr.getAllResponseHeaders(),this._conn.disconnecting&&n>=400)return this._hitError(n),void this._callProtocolErrorHandlers(s);const i=this._requests[0]===s,r=this._requests[1]===s,o=n>0&&n<500,a=s.sends>this._conn.maxRetries;(o||a)&&(this._removeRequest(s),D.debug("request id "+s.id+" should now be removed")),200===n?((r||i&&this._requests.length>0&&this._requests[0].age()>Math.floor(D.SECONDARY_TIMEOUT*this.wait))&&this._restartRequest(0),this._conn.nextValidRid(Number(s.rid)+1),D.debug("request id "+s.id+"."+s.sends+" got 200"),t(s),this.errors=0):0===n||n>=400&&n<600||n>=12e3?(D.error("request id "+s.id+"."+s.sends+" error "+n+" happened"),this._hitError(n),this._callProtocolErrorHandlers(s),n>=400&&n<500&&(this._conn._changeConnectStatus(D.Status.DISCONNECTING,null),this._conn._doDisconnect())):D.error("request id "+s.id+"."+s.sends+" error "+n+" happened"),o||a?a&&!this._conn.connected&&this._conn._changeConnectStatus(D.Status.CONNFAIL,"giving-up"):this._throttledRequestHandler()}_processRequest(t){let s=this._requests[t];const n=e._getRequestStatus(s,-1);if(s.sends>this._conn.maxRetries)return void this._conn._onDisconnectTimeout();const i=s.age(),r=!isNaN(i)&&i>Math.floor(D.TIMEOUT*this.wait),o=null!==s.dead&&s.timeDead()>Math.floor(D.SECONDARY_TIMEOUT*this.wait),a=4===s.xhr.readyState&&(n<1||n>=500);if((r||o||a)&&(o&&D.error(`Request ${this._requests[t].id} timed out (secondary), restarting`),s.abort=!0,s.xhr.abort(),s.xhr.onreadystatechange=function(){},this._requests[t]=new D.Request(s.xmlData,s.origFunc,s.rid,s.sends),s=this._requests[t]),0===s.xhr.readyState){D.debug("request id "+s.id+"."+s.sends+" posting");try{const e=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",e),this._conn.options.withCredentials&&(s.xhr.withCredentials=!0)}catch(e){return D.error("XHR open failed: "+e.toString()),this._conn.connected||this._conn._changeConnectStatus(D.Status.CONNFAIL,"bad-service"),void this._conn.disconnect()}const e=()=>{if(s.date=new Date,this._conn.options.customHeaders){const e=this._conn.options.customHeaders;for(const t in e)Object.prototype.hasOwnProperty.call(e,t)&&s.xhr.setRequestHeader(t,e[t])}s.xhr.send(s.data)};if(s.sends>1){const t=1e3*Math.min(Math.floor(D.TIMEOUT*this.wait),Math.pow(s.sends,3));setTimeout((function(){e()}),t)}else e();s.sends++,this._conn.xmlOutput!==D.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!==D.Connection.prototype.rawOutput&&this._conn.rawOutput(s.data)}else D.debug("_processRequest: "+(0===t?"first":"second")+" request has readyState of "+s.xhr.readyState)}_removeRequest(e){D.debug("removing request");for(let t=this._requests.length-1;t>=0;t--)e===this._requests[t]&&this._requests.splice(t,1);e.xhr.onreadystatechange=function(){},this._throttledRequestHandler()}_restartRequest(e){const t=this._requests[e];null===t.dead&&(t.dead=new Date),this._processRequest(e)}_reqToData(e){try{return e.getResponse()}catch(e){if("parsererror"!==e.message)throw e;this._conn.disconnect("strophe-parsererror")}}_sendTerminate(e){D.debug("_sendTerminate was called");const t=this._buildBody().attrs({type:"terminate"});e&&t.cnode(e.tree());const s=new D.Request(t.tree(),this._onRequestStateChange.bind(this,this._conn._dataRecv.bind(this._conn)),t.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?D.debug("_throttledRequestHandler called with "+this._requests.length+" requests"):D.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._onOpen(),this.socket.onerror=e=>this._onError(e),this.socket.onclose=e=>this._onClose(e),this.socket.onmessage=e=>this._onInitialMessage(e)}_connect_cb(e){if(this._checkStreamError(e,D.Status.CONNFAIL))return D.Status.CONNFAIL}_handleStreamStart(e){let t=!1;const s=e.getAttribute("xmlns");"string"!=typeof s?t="Missing xmlns in ":s!==D.NS.FRAMING&&(t="Wrong xmlns in : "+s);const n=e.getAttribute("version");return"string"!=typeof n?t="Missing version in ":"1.0"!==n&&(t="Wrong version in : "+n),!t||(this._conn._changeConnectStatus(D.Status.CONNFAIL,t),this._conn._doDisconnect(),!1)}_onInitialMessage(e){if(0===e.data.indexOf("\s*)*/,"");if(""===t)return;const s=(new n).parseFromString(t,"text/xml").documentElement;this._conn.xmlInput(s),this._conn.rawInput(e.data),this._handleStreamStart(s)&&this._connect_cb(s)}else if(0===e.data.indexOf("=0&&s.indexOf("wss:")>=0||e.indexOf("ws:")>=0)&&(this._conn._changeConnectStatus(D.Status.REDIRECT,"Received see-other-uri, resetting connection"),this._conn.reset(),this._conn.service=s,this._connect())}else this._conn._changeConnectStatus(D.Status.CONNFAIL,"Received closing stream"),this._conn._doDisconnect()}else{this._replaceMessageHandler();const t=this._streamWrap(e.data),s=(new n).parseFromString(t,"text/xml").documentElement;this._conn._connect_cb(s,null,e.data)}}_replaceMessageHandler(){this.socket.onmessage=e=>this._onMessage(e)}_disconnect(e){if(this.socket&&this.socket.readyState!==s.CLOSED){e&&this._conn.send(e);const t=R("close",{xmlns:D.NS.FRAMING});this._conn.xmlOutput(t.tree());const s=D.serialize(t);this._conn.rawOutput(s);try{this.socket.send(s)}catch(e){D.warn("Couldn't send tag.")}}setTimeout((()=>this._conn._doDisconnect),0)}_doDisconnect(){D.debug("WebSockets _doDisconnect was called"),this._closeSocket()}_streamWrap(e){return""+e+""}_closeSocket(){if(this.socket)try{this.socket.onclose=null,this.socket.onerror=null,this.socket.onmessage=null,this.socket.close()}catch(e){D.debug(e.message)}this.socket=null}_emptyQueue(){return!0}_onClose(e){this._conn.connected&&!this._conn.disconnecting?(D.error("Websocket closed unexpectedly"),this._conn._doDisconnect()):e&&1006===e.code&&!this._conn.connected&&this.socket?(D.error("Websocket closed unexcectedly"),this._conn._changeConnectStatus(D.Status.CONNFAIL,"The WebSocket connection could not be established or was disconnected."),this._conn._doDisconnect()):D.debug("Websocket closed")}_no_auth_received(e){D.error("Server did not offer a supported authentication mechanism"),this._conn._changeConnectStatus(D.Status.CONNFAIL,D.ErrorCondition.NO_AUTH_MECH),e&&e.call(this._conn),this._conn._doDisconnect()}_onDisconnectTimeout(){}_abortAllRequests(){}_onError(e){D.error("Websocket error "+JSON.stringify(e)),this._conn._changeConnectStatus(D.Status.CONNFAIL,"The WebSocket connection could not be established or was disconnected."),this._disconnect()}_onIdle(){const e=this._conn._data;if(e.length>0&&!this._conn.paused){for(let t=0;t{var t;null===(t=console)||void 0===t||t.error(e),D.log(D.LogLevel.ERROR,`Shared Worker Error: ${e}`)}}get socket(){return{send:e=>this.worker.port.postMessage(["send",e])}}_connect(){this._messageHandler=e=>this._onInitialMessage(e),this.worker.port.start(),this.worker.port.onmessage=e=>this._onWorkerMessage(e),this.worker.port.postMessage(["_connect",this._conn.service,this._conn.jid])}_attach(e){this._messageHandler=e=>this._onMessage(e),this._conn.connect_callback=e,this.worker.port.start(),this.worker.port.onmessage=e=>this._onWorkerMessage(e),this.worker.port.postMessage(["_attach",this._conn.service])}_attachCallback(e,t){e===D.Status.ATTACHED?(this._conn.jid=t,this._conn.authenticated=!0,this._conn.connected=!0,this._conn.restored=!0,this._conn._changeConnectStatus(D.Status.ATTACHED)):e===D.Status.ATTACHFAIL&&(this._conn.authenticated=!1,this._conn.connected=!1,this._conn.restored=!1,this._conn._changeConnectStatus(D.Status.ATTACHFAIL))}_disconnect(e,t){t&&this._conn.send(t);const s=R("close",{xmlns:D.NS.FRAMING});this._conn.xmlOutput(s.tree());const n=D.serialize(s);this._conn.rawOutput(n),this.worker.port.postMessage(["send",n]),this._conn._doDisconnect()}_onClose(e){this._conn.connected&&!this._conn.disconnecting?(D.error("Websocket closed unexpectedly"),this._conn._doDisconnect()):e&&1006===e.code&&!this._conn.connected?(D.error("Websocket closed unexcectedly"),this._conn._changeConnectStatus(D.Status.CONNFAIL,"The WebSocket connection could not be established or was disconnected."),this._conn._doDisconnect()):D.debug("Websocket closed")}_closeSocket(){this.worker.port.postMessage(["_closeSocket"])}_replaceMessageHandler(){this._messageHandler=e=>this._onMessage(e)}_onWorkerMessage(e){const{data:t}=e,s=t[0];if("_onMessage"===s)this._messageHandler(t[1]);else if(s in this)try{this[s].apply(this,e.data.slice(1))}catch(e){D.log(D.LogLevel.ERROR,e)}else if("log"===s){const e=t[1],s=t[2];D.log(k[e],s)}else D.log(D.LogLevel.ERROR,`Found unhandled service worker message: ${t}`)}},t.$build=F.$build,t.$iq=F.$iq,t.$msg=F.$msg,t.$pres=F.$pres,t.Strophe=F.Strophe;const{b64_sha1:B}=C;e.$build=R,e.$iq=q,e.$msg=M,e.$pres=L,e.Strophe=D,e.b64_sha1=B,Object.defineProperty(e,"__esModule",{value:!0})}));