@talkjs/core 1.4.0 → 1.4.2

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,2 +1,2 @@
1
- "use strict";var e,t=Object.defineProperty,s=Object.defineProperties,n=Object.getOwnPropertyDescriptors,r=Object.getOwnPropertySymbols,i=Object.prototype.hasOwnProperty,a=Object.prototype.propertyIsEnumerable,o=(e,s,n)=>s in e?t(e,s,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[s]=n,u=(e,t)=>{for(var s in t||(t={}))i.call(t,s)&&o(e,s,t[s]);if(r)for(var s of r(t))a.call(t,s)&&o(e,s,t[s]);return e},l=(e,t)=>s(e,n(t)),c=(e,t)=>{var s={};for(var n in e)i.call(e,n)&&t.indexOf(n)<0&&(s[n]=e[n]);if(null!=e&&r)for(var n of r(e))t.indexOf(n)<0&&a.call(e,n)&&(s[n]=e[n]);return s},h=(e,t,s)=>new Promise(((n,r)=>{var i=e=>{try{o(s.next(e))}catch(Ge){r(Ge)}},a=e=>{try{o(s.throw(e))}catch(Ge){r(Ge)}},o=e=>e.done?n(e.value):Promise.resolve(e.value).then(i,a);o((s=s.apply(e,t)).next())}));function d(e,t){if(t.ok)return t.value.data;if("SESSION_DESTROYED"===t.value)throw new Error(`${e} failed because the session was destroyed`);if("server"===t.where)throw new Error(p(e,t.value));throw"unreachable"}function p(e,t){let s;return s=Array.isArray(t.reasons)?t.reasons.join():JSON.stringify(t.reasons),`${e} failed, got status ${t.status} ${t.errorCode}, reasons: ${s}`}function f(e,t){if(e.length!==t.length)return!1;for(let s=0;s<e.length;s++)if("*"!==t[s]&&e[s]!==t[s])return!1;return!0}function m(e){return e<=0?Promise.resolve():new Promise((t=>setTimeout(t,e)))}function g(e,t){return e*(1-t+2*Math.random()*t)}Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const v=()=>!0;function b(e,t,s){return h(this,arguments,(function*(e,t,{initialDelay:s,maxDelay:n,log:r,shouldRetry:i=v}){return t().catch((a=>h(this,null,(function*(){if(0===e)throw a;if(!(yield i(a)))throw a;const o=1e3*s*1.2,u=g(n?Math.min(1e3*n,o):o,.05);return m(u).then((()=>b(e-1,t,{initialDelay:u/1e3,maxDelay:n,log:r,shouldRetry:i})))}))))}))}function y(){const e={},t=new Promise((function(t,s){e.resolve=t,e.reject=s}));return e.promise=t,e}class w{constructor(e,t,s){this.layer=e,this.states=t,this.transitions=s,this._state=t[0]}get state(){return this._state}transition(e){const t=this.transitions[e];if(!t)return;if(!this.canTransition(e))return;const s=this.state;this._state=t.to,t.afterTransition({from:s,to:this.state})}canTransition(e){const t=this.transitions[e];return!!t&&("ANY"===t.from||t.from.includes(this.state))}}function C(e){return{ok:!0,value:e}}function A(e){return{ok:!1,where:"client",value:e}}function E(e){return{ok:!1,where:"server",value:e}}function k(){const e={},t=new Promise((t=>{e.ok=e=>h(this,null,(function*(){return t(C(e))})),e.clientErr=e=>t(A(e)),e.serverErr=e=>t(E(e)),e.resolve=e=>t(e)}));return e.promise=t,e}let x=null;class T{constructor(e,t){this.realtimeUrl=e,this.handlers=t,this.socket=null,this.stateMachine=new w("ReconnectingSocket",["STOPPED","CONNECTING","READY","DISCONNECTED","TERMINATED"],{startWs:{from:["STOPPED","DISCONNECTED"],to:"CONNECTING",afterTransition:()=>{const e=new(function(){if(x)return x;if(globalThis.WebSocket)return globalThis.WebSocket;throw new Error("Missing WebSocket implementation")}())(this.realtimeUrl+"&talkjs-time="+Date.now());this.socket=e,e.addEventListener("open",(()=>{this.socket===e&&this.stateMachine.transition("onOpen")})),e.addEventListener("close",(()=>{this.socket===e&&this.stateMachine.transition("onClose")})),e.addEventListener("message",(t=>{this.socket===e&&this.handlers.onMessage(t)}))}},onOpen:{from:["CONNECTING"],to:"READY",afterTransition:()=>{this.handlers.onOpen()}},onClose:{from:["CONNECTING","READY"],to:"DISCONNECTED",afterTransition:e=>h(this,[e],(function*({from:e}){"READY"===e&&this.handlers.onClose(),this.socket=null;const t=g(1e4,.5);setTimeout((()=>{"DISCONNECTED"===this.stateMachine.state&&this.stateMachine.transition("startWs")}),t)}))},stopWs:{from:["CONNECTING","DISCONNECTED","READY"],to:"STOPPED",afterTransition:({from:e})=>{"READY"===e&&this.handlers.onClose();const t=this.socket;this.socket=null,null==t||t.close(1e3)}},destroy:{from:"ANY",to:"TERMINATED",afterTransition:()=>{const e=this.socket;this.socket=null,null==e||e.close(1e3)}}})}stopWs(){this.stateMachine.transition("stopWs")}startWs(){this.stateMachine.transition("startWs")}send(e){return"READY"===this.stateMachine.state?(this.socket.send(e),C(void 0)):A("SOCKET_NOT_READY")}terminate(){const e=this.socket;this.stateMachine.canTransition("onClose")&&this.stateMachine.transition("onClose"),e&&("terminate"in e?e.terminate():e.close(1e3))}destroy(){this.stateMachine.transition("destroy")}}class I{constructor(e,t){this.handlers=t,this.socket=new T(e,{onOpen:()=>this.handlers.onOpen(),onClose:()=>this.handlers.onClose(),onMessage:e=>this.onWebSocketMessage(e)})}call(e,t,s,n){const r=`/${s.map((e=>encodeURIComponent(e))).join("/")}`,i=JSON.stringify([e,t,r,n]);return this.socket.send(i)}stopWs(){this.socket.stopWs()}startWs(){this.socket.startWs()}destroy(){this.socket.destroy()}terminate(){this.socket.terminate()}onWebSocketMessage(e){if("Auth token expired"!==e.data)try{const t=JSON.parse(e.data);if("PUBLISH"===t[1]){const e=t[0],s=JSON.stringify([e,"ACK"]);this.socket.send(s);const n=t.slice(2),r=[];n.forEach((e=>{"session.expired"===e.type?this.handlers.onAuthExpired():"upstream.restarting"===e.type?this.handlers.onUpstreamRestarting():r.push(e)})),r.length>0&&this.handlers.onPublish(e,r)}else{const e=t[0],s=t[1],n=t[2];this.handlers.onResponse(e,s,n)}}catch(t){}else this.handlers.onAuthExpired()}}class S{constructor(e){this.delayMs=e,this.timeout=void 0}schedule(e){this.stop(),this.timeout=setTimeout((()=>{void 0!==this.timeout&&(this.stop(),e())}),this.delayMs)}stop(){void 0!==this.timeout&&(clearTimeout(this.timeout),this.timeout=void 0)}}class D{constructor(){this.i=-1}next(){return this.i++,this.i}reset(){this.i=-1}}class M{constructor(e,t){this.handlers=t,this.seqCounter=new D,this.responseHandlers={},this.heartbeats=new F(this),this.socket=new I(e,{onUpstreamRestarting:()=>{this.heartbeats.serverActive(),this.handlers.onUpstreamRestarting()},onOpen:()=>{this.heartbeats.clientActive(),this.heartbeats.serverActive(),this.handlers.onReady()},onClose:()=>{this.heartbeats.stop(),Object.values(this.responseHandlers).forEach((e=>{e.clientErr("WEBSOCKET_DISCONNECTED")})),this.responseHandlers={},this.seqCounter.reset(),this.handlers.onNotReady()},onResponse:(e,t,s)=>{this.heartbeats.serverActive(),this.onResponse(e,t,s)},onPublish:(e,t)=>{this.heartbeats.serverActive(),this.handlers.onPublish(e,t),this.heartbeats.clientActive()},onAuthExpired:()=>{this.heartbeats.serverActive(),this.handlers.onAuthExpired()}})}call(e,t,s){const n=this.seqCounter.next(),r=k();this.responseHandlers[n]=r;const i=this.socket.call(n,e,t,s);return i.ok||r.resolve(i),this.heartbeats.clientActive(),r.promise}onResponse(e,t,s){return h(this,null,(function*(){const n=this.responseHandlers[e];n&&(200===t?n.ok({status:t,data:s}):n.serverErr({status:t,errorCode:s.errorCode,reasons:s.reasons}),delete this.responseHandlers[e])}))}stopWs(){this.socket.stopWs()}startWs(){this.socket.startWs()}destroy(){this.heartbeats.stop(),Object.values(this.responseHandlers).forEach((e=>{e.clientErr("WEBSOCKET_DISCONNECTED")})),this.responseHandlers={},this.socket.destroy()}terminate(){this.socket.terminate()}}class F{constructor(e){this.connection=e,this.clientInactivityTimer=new S(25e3),this.serverInactivityTimer=new S(1e4),this.serverTimeoutTimer=new S(5e3)}clientActive(){this.clientInactivityTimer.schedule((()=>{this.sendHeartbeat()}))}serverActive(){this.serverTimeoutTimer.stop(),this.serverInactivityTimer.schedule((()=>{this.sendHeartbeat(),this.serverTimeoutTimer.schedule((()=>{this.connection.terminate()}))}))}stop(){this.clientInactivityTimer.stop(),this.serverInactivityTimer.stop(),this.serverTimeoutTimer.stop()}sendHeartbeat(){this.connection.call("GET",["ping"],{}).catch((()=>{}))}}class B{constructor(e,t,s){this.authProvider=t,this.handlers=s,this.stateMachine=new w("AuthenticatedConnection",["WAITING_FOR_WS","LOGGING_IN","RENEWING_SESSION","READY","TERMINATED"],{logIn:{from:["WAITING_FOR_WS"],to:"LOGGING_IN",afterTransition:()=>h(this,null,(function*(){yield this.renewSession()}))},logInFailed:{from:["LOGGING_IN"],to:"LOGGING_IN",afterTransition:()=>h(this,null,(function*(){this.authProvider.refreshToken(),yield this.renewSession()}))},scheduledReauth:{from:["READY"],to:"RENEWING_SESSION",afterTransition:()=>h(this,null,(function*(){yield this.renewSession()}))},scheduledReauthFailed:{from:["RENEWING_SESSION"],to:"RENEWING_SESSION",afterTransition:()=>h(this,null,(function*(){this.authProvider.refreshToken(),yield this.renewSession()}))},authenticated:{from:["LOGGING_IN","RENEWING_SESSION"],to:"READY",afterTransition:({from:e})=>{"LOGGING_IN"===e&&this.handlers.onReady()}},authExpired:{from:["READY","RENEWING_SESSION"],to:"LOGGING_IN",afterTransition:()=>h(this,null,(function*(){this.handlers.onNotReady(),this.authProvider.refreshToken(),yield this.renewSession()}))},wsDisconnected:{from:["READY","LOGGING_IN","RENEWING_SESSION"],to:"WAITING_FOR_WS",afterTransition:({from:e})=>{"READY"!==e&&"RENEWING_SESSION"!==e||this.handlers.onNotReady(),this.authProvider.clearScheduledRefresh()}},destroy:{from:"ANY",to:"TERMINATED",afterTransition:()=>{this.authProvider.clearScheduledRefresh(),this.connection.destroy()}}}),this.connection=new M(e,{onUpstreamRestarting:()=>this.handlers.onUpstreamRestarting(),onReady:()=>this.stateMachine.transition("logIn"),onNotReady:()=>{this.stateMachine.transition("wsDisconnected")},onAuthExpired:()=>{this.stateMachine.transition("authExpired")},onPublish:(e,t)=>{this.handlers.onPublish(e,t)}}),t.onTokenChanged((()=>{"READY"===this.stateMachine.state&&this.stateMachine.transition("scheduledReauth")}))}call(e,t,s){const n=this.connection.call(e,t,s);return n.then((e=>{e.ok||"server"!==e.where||401!==e.value.status||"READY"!==this.stateMachine.state&&"RENEWING_SESSION"!==this.stateMachine.state||this.stateMachine.transition("authExpired")})),n}stopWs(){this.connection.stopWs()}startWs(){this.connection.startWs()}destroy(){this.stateMachine.transition("destroy")}renewSession(){return h(this,null,(function*(){const e=yield this.authProvider.getToken(),t=yield this.connection.call("POST",["session","renew"],{token:e});if(!t.ok&&"client"===t.where)return;const s=t.value;if(s.status,200===s.status){const t=s.data.expiresInSeconds;return void(null!==t&&t<120?(console.warn(`[TalkJS] Authenticated with a token that expires in ${t}s. Treating it as already expired and refreshing. Newly generated tokens should last at least 10 minutes.`),"LOGGING_IN"===this.stateMachine.state?this.stateMachine.transition("logInFailed"):"RENEWING_SESSION"===this.stateMachine.state&&this.stateMachine.transition("scheduledReauthFailed")):(this.authProvider.scheduleRefresh(t),this.authProvider.emitTokenAccepted(e),this.stateMachine.canTransition("authenticated")&&this.stateMachine.transition("authenticated")))}if(401===s.status)return void("LOGGING_IN"===this.stateMachine.state?this.stateMachine.transition("logInFailed"):"RENEWING_SESSION"===this.stateMachine.state&&this.stateMachine.transition("scheduledReauthFailed"));if(400===s.status)return void this.authProvider.emitTokenRefreshFailed(p("Authentication",s));if(402===s.status)return void this.authProvider.emitTokenRefreshFailed(p("Authentication",s));const n=5e3*Math.random()+5e3;setTimeout((()=>{this.call("POST",["session","renew"],{token:e}).catch((()=>{}))}),n)}))}}class N{constructor(e,t,s){this.handlers=s,this.stateMachine=new w("StopStartConnection",["STOPPED","WAITING_FOR_WS","READY","TERMINATED"],{unexpectedDisconnect:{from:["READY"],to:"WAITING_FOR_WS",afterTransition:()=>{this.inactivityTimer.stop(),this.handlers.onNotReady()}},stop:{from:["WAITING_FOR_WS","READY"],to:"STOPPED",afterTransition:()=>{this.connection.stopWs(),this.inactivityTimer.stop(),this.handlers.onNotReady()}},start:{from:["STOPPED"],to:"WAITING_FOR_WS",afterTransition:()=>{this.connection.startWs()}},ready:{from:["WAITING_FOR_WS"],to:"READY",afterTransition:()=>{this.pendingCalls=0,this.activeSubscriptions=0,this.inactivityTimer.schedule((()=>{this.stateMachine.transition("stop")})),this.handlers.onReady()}},destroy:{from:"ANY",to:"TERMINATED",afterTransition:()=>{this.inactivityTimer.stop(),this.connection.destroy()}}}),this.pendingCalls=0,this.activeSubscriptions=0,this.inactivityTimer=new S(3e3),this.connection=new B(e,t,{onUpstreamRestarting:()=>{this.handlers.onUpstreamRestarting()},onReady:()=>{this.stateMachine.transition("ready")},onNotReady:()=>{"READY"===this.stateMachine.state&&this.stateMachine.transition("unexpectedDisconnect")},onPublish:(e,t)=>{this.handlers.onPublish(e,t)}})}get inactive(){return 0===this.pendingCalls&&0===this.activeSubscriptions}ensureStarted(){this.stateMachine.canTransition("start")&&this.stateMachine.transition("start")}call(e,t,s){return h(this,null,(function*(){this.inactivityTimer.stop(),this.pendingCalls++;const n=yield this.connection.call(e,t,s);return this.pendingCalls--,"SUBSCRIBE"===e&&n.ok?this.activeSubscriptions++:"UNSUBSCRIBE"===e&&n.ok&&this.activeSubscriptions--,this.inactive&&this.inactivityTimer.schedule((()=>{this.stateMachine.transition("stop")})),n}))}destroy(){this.stateMachine.transition("destroy")}isConnected(){return"READY"===this.stateMachine.state}}class R{constructor(e,t,s){this.handlers=s,this.stateMachine=new w("QueuedConnection",["NOT_READY","PROCESSING_QUEUE","READY","TERMINATED"],{processQueue:{from:["NOT_READY"],to:"PROCESSING_QUEUE",afterTransition:()=>{this.sendQueuedCalls()}},ready:{from:["PROCESSING_QUEUE"],to:"READY",afterTransition:()=>{this.handlers.onReady()}},notReady:{from:["PROCESSING_QUEUE","READY"],to:"NOT_READY",afterTransition:()=>{Object.values(this.subscribeQueue).forEach((e=>e.deferred.ok({status:200,data:{}}))),this.subscribeQueue={},this.handlers.onSubscriptionsLost()}},destroy:{from:"ANY",to:"TERMINATED",afterTransition:()=>{for(var e;this.callQueue.length;){const t=null==(e=this.callQueue.shift())?void 0:e.deferred;null==t||t.clientErr("SESSION_DESTROYED")}this.connection.destroy()}}}),this.subscribeQueue={},this.callQueue=[],this.connection=new N(e,t,{onUpstreamRestarting:()=>{this.handlers.onUpstreamRestarting()},onReady:()=>{this.stateMachine.transition("processQueue")},onNotReady:()=>{this.stateMachine.transition("notReady")},onPublish:(e,t)=>{this.handlers.onPublish(e,t)}})}call(e,t,s){return"READY"===this.stateMachine.state?this.connection.call(e,t,s):("NOT_READY"===this.stateMachine.state&&this.connection.ensureStarted(),"SUBSCRIBE"===e||"UNSUBSCRIBE"===e?this._subscribe(e,t,s):this._call(e,t,s))}_subscribe(e,t,s){const n=t.join("/"),r=this.subscribeQueue[n];if(r&&r.method===e)return r.deferred.promise;r&&r.method!==e&&(r.deferred.ok({status:200,data:{}}),delete this.subscribeQueue[n]);const i={deferred:k(),method:e,path:t,data:s};return this.subscribeQueue[n]=i,i.deferred.promise}_call(e,t,s){const n={deferred:k(),method:e,path:t,data:s};return this.callQueue.push(n),n.deferred.promise}dequeue(){for(const e in this.subscribeQueue){const t=this.subscribeQueue[e];return delete this.subscribeQueue[e],t}return this.callQueue.shift()}destroy(){this.stateMachine.transition("destroy")}sendQueuedCalls(){return h(this,null,(function*(){let e=0;for(;"PROCESSING_QUEUE"===this.stateMachine.state;){e++;const t=this.dequeue();if(!t)return void this.stateMachine.transition("ready");this.connection.call(t.method,t.path,t.data).then((e=>{t.deferred.resolve(e)})),e>50&&(yield new Promise((e=>setTimeout(e,100))))}}))}isConnected(){return"READY"===this.stateMachine.state||"PROCESSING_QUEUE"===this.stateMachine.state}}const P="undefined"!=typeof window&&null!=(e=window.queueMicrotask)?e:setTimeout;class O{constructor(e,t){this.clearPendingBatch=e,this.sendCalls=t,this.sent=!1,P((()=>this.send()))}send(){this.sent||(this.sent=!0,this.clearPendingBatch(),this.sendCalls())}destroy(){this.sent=!0}}class _ extends O{constructor(e,t){super(t,(()=>{this.sendSubscribe(),this.sendGet()})),this.connection=e,this.getCalls=[],this.subscribeCalls=[]}canPush(e,t){return _.isCorrectBatchTypeFor(e,t)}static isCorrectBatchTypeFor(e,t){return f(t,["users","*"])&&("GET"===e||"SUBSCRIBE"===e)}push(e,t,s){const n=t[1],r=k();return"GET"===e?this.getCalls.push({userId:n,deferred:r}):this.subscribeCalls.push({userId:n,deferred:r}),1e3!==this.getCalls.length&&1e3!==this.subscribeCalls.length||this.send(),r.promise}sendGet(){return h(this,null,(function*(){if(0===this.getCalls.length)return;const e=[...new Set(this.getCalls.map((e=>e.userId)))],t=yield this.connection.call("GET",["users"],{ids:e,includePrivateFields:!1});if(t.ok)for(const s of this.getCalls){const e=t.value.data[s.userId];e?s.deferred.ok({status:200,data:e}):s.deferred.serverErr({status:404,errorCode:"NOT_FOUND",reasons:["No user with that ID exists"]})}else this.getCalls.forEach((e=>e.deferred.resolve(t)))}))}sendSubscribe(){if(0===this.subscribeCalls.length)return;const e=[...new Set(this.subscribeCalls.map((e=>e.userId)))];this.connection.call("SUBSCRIBE",["users"],{ids:e}).then((e=>this.subscribeCalls.forEach((t=>t.deferred.resolve(e)))))}}class U extends O{constructor(e,t,s){super(s,(()=>this.sendMutate())),this.conversationId=e,this.connection=t,this.calls=[]}canPush(e,t){return!!U.isCorrectBatchTypeFor(e,t)&&t[1]===this.conversationId}static isCorrectBatchTypeFor(e,t){return f(t,["conversations","*","participants","*"])&&("PUT"===e||"POST"===e||"PATCH"===e)}push(e,t,s){const n=t[3],r=k();return this.calls.push({action:{id:n,method:e,params:s},deferred:r}),100===this.calls.length&&this.send(),r.promise}sendMutate(){return h(this,null,(function*(){const e=this.calls.map((e=>e.action)),t=yield this.connection.call("POST",["conversations",this.conversationId,"participants"],{actions:e});if(!t.ok)return void this.calls.forEach((e=>e.deferred.resolve(t)));const s=t.value.data.responses;for(let n=0;n<s.length;n++){const e=this.calls[n].deferred,t=s[n];200===t.status?e.ok(l(u({},t),{data:{}})):e.serverErr(t)}}))}}class j{constructor(e,t,s){this.pendingBatch=null,this.connection=new R(e,t,s)}call(e,t,s){return h(this,null,(function*(){var n;if(null==(n=this.pendingBatch)?void 0:n.canPush(e,t))return this.pendingBatch.push(e,t,s);this.pendingBatch&&this.pendingBatch.send();const r=this.createEmptyBatchFor(e,t);return r?(this.pendingBatch=r,r.push(e,t,s)):this.connection.call(e,t,s)}))}destroy(){var e;this.connection.destroy(),null==(e=this.pendingBatch)||e.destroy()}isConnected(){return this.connection.isConnected()}createEmptyBatchFor(e,t){if(_.isCorrectBatchTypeFor(e,t))return new _(this.connection,(()=>this.pendingBatch=null));if(U.isCorrectBatchTypeFor(e,t)){const e=t[1];return new U(e,this.connection,(()=>this.pendingBatch=null))}return null}}const $={200:"RESOLVE",400:"RESOLVE",401:"RETRY",402:"RESOLVE",403:"RESOLVE",404:"RESOLVE",405:"RESOLVE",409:"RESOLVE",429:"DELAY",500:"DELAY"};class W{constructor(e,t,s){this.throttler=new q,this.alive=!0,this.connection=new j(e,t,s)}call(e,t,s){return h(this,null,(function*(){let n=0;for(;this.alive;){const r=yield this.connection.call(e,t,s);if((r.ok||"client"!==r.where||"SOCKET_NOT_READY"!==r.value)&&(r.ok||"server"!==r.where||500!==r.value.status)||n++,10===n)return r;if(r.ok||"client"!==r.where){const e=r.value,t=e.status,s=$[t];if("RESOLVE"===s)return this.throttler.resetDelay(),r;if("RETRY"===s)continue;if("DELAY"===s){yield this.throttler.wait();continue}return console.warn("[TalkJS] Unexpected status code",t),e}if("SESSION_DESTROYED"===r.value)return A("SESSION_DESTROYED");"WEBSOCKET_DISCONNECTED"!==r.value&&("SOCKET_NOT_READY"!==r.value?r.value:yield this.throttler.wait())}return A("SESSION_DESTROYED")}))}destroy(){this.alive=!1,this.connection.destroy()}isConnected(){return this.connection.isConnected()}}class q{constructor(){this.initialDelayMs=200,this.exponentialFactor=1.2,this.maxDelayMs=3e4,this.currentDelayMs=this.initialDelayMs,this.lastCall=0}getCurrentDelay(){return this.currentDelayMs}wait(){const e=(new Date).getTime(),t=g(this.currentDelayMs,.05),s=this.lastCall+t,n=Math.max(0,s-e);return this.lastCall=e+n,this.currentDelayMs=Math.min(t*this.exponentialFactor,this.maxDelayMs),m(n)}resetDelay(){this.currentDelayMs=this.initialDelayMs}}function H(e){return e.map((e=>encodeURIComponent(e))).join()}class G{constructor(){this.paths={}}add(e){this.paths[H(e)]=e}delete(e){delete this.paths[H(e)]}has(e){return Object.hasOwnProperty.call(this.paths,H(e))}clear(){this.paths={}}forEach(e){Object.values(this.paths).forEach((t=>e(t)))}}class L{constructor(e,t,s){this.handlers=s,this.targetSubscriptions=new G,this.connection=new W(e,t,{onUpstreamRestarting:()=>this.handlers.onUpstreamRestarting(),onSubscriptionsLost:()=>{this.targetSubscriptions.forEach((e=>{this.resubscribe(e)})),this.handlers.onResubscribeSent()},onReady:()=>this.handlers.onReady(),onPublish:(e,t)=>{this.handlers.onPublish(e,t)}})}call(e,t,s){return this.connection.call(e,t,s)}subscribe(e){return h(this,null,(function*(){return this.targetSubscriptions.add(e),this.connection.call("SUBSCRIBE",e,{})}))}unsubscribe(e){return h(this,null,(function*(){return this.targetSubscriptions.delete(e),this.connection.call("UNSUBSCRIBE",e,{})}))}resubscribe(e){return h(this,null,(function*(){const t=yield this.connection.call("SUBSCRIBE",e,{});t.ok||this.handlers.onResubscribeError(e,t)}))}destroy(){this.targetSubscriptions.clear(),this.connection.destroy()}isConnected(){return this.connection.isConnected()}}function z(e,t){return void 0===t?e:t}function J(e,t){if(void 0===t)return e;if(null===t)return{};const s=u({},e);for(const n in t){const e=t[n];null===e?delete s[n]:s[n]=e}return s}function Y(e,t){if(e===t)return!0;if(!e||!t)return!1;if("object"!=typeof e||"object"!=typeof t)return!1;if(e.constructor!==t.constructor)return!1;if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return!1;for(let s=0;s<e.length;s++)if(!Y(e[s],t[s]))return!1}else{const s=Object.keys(e);if(s.length!==Object.keys(t).length)return!1;for(const n of s){if(!Object.hasOwnProperty.call(t,n))return!1;if(!Y(e[n],t[n]))return!1}}return!0}class Q{constructor(){this.prev=Promise.resolve()}runExclusive(e){return h(this,null,(function*(){const t=this.prev.then((()=>e()));return this.prev=t,t}))}}class V{constructor(e){this.initialised=!1,this.getPointer=void 0,this.pendingStates=[e],e.resultPromise.then((()=>this.initialised=!0))}get pendingPointer(){if(0!==this.pendingStates.length)return this.pendingStates[this.pendingStates.length-1]}get mostRecentState(){var e;return null!=(e=this.pendingPointer)?e:this.getPointer}canAppendState(e){var t,s;const n=null==(t=this.getPointer)?void 0:t.seq;if(void 0!==n&&e<=n)return!1;const r=null==(s=this.pendingPointer)?void 0:s.seq;return!(void 0!==r&&e<r)}set(e){if(!this.canAppendState(e.seq))throw"Appending in the past";this.pendingStates.push(e)}mutate(e,t){if(!this.initialised)return;if(!this.canAppendState(e))throw"Mutating in the past";const s=this.mostRecentState.resultPromise.then((e=>e.ok?t(e):e));this.pendingStates.push({seq:e,resultPromise:s})}get(e){if(void 0!==this.getPointer&&e<this.getPointer.seq)throw`Trying to load state ${e} when we have previously loaded ${this.getPointer.seq}`;for(;this.pendingStates.length>0&&this.pendingStates[0].seq<=e;)this.getPointer=this.pendingStates.shift();return this.getPointer}}class Z extends V{constructor(e,t){super(e),this.onTeardown=t,this._error=null,this._lastGoodState=Promise.resolve(void 0)}get error(){return this._error}get lastGoodState(){return this._lastGoodState}mutate(e,t){super.mutate(e,t),this.registerNewState(this.mostRecentState.resultPromise)}set(e){super.set(e),this.registerNewState(this.mostRecentState.resultPromise)}registerNewState(e){const t=this.lastGoodState;this._lastGoodState=e.then((e=>e.ok?e.value:t)),e.then((e=>{e.ok||this.setError(e)}))}setError(e){var t;this._error||(this._error=e,null==(t=this.onTeardown)||t.call(this,e),this.lastGoodState.then((e=>{void 0!==e&&this.teardownNested(e)})))}}class K extends Z{constructor(e){super({seq:0,resultPromise:new Promise((e=>setTimeout(e))).then((()=>this.fetchInitial(0)))},e),this.getDeepMutex=new Q,this.lastDeep=void 0}refetchInitial(e){return h(this,null,(function*(){const t=this.mostRecentState.resultPromise,s=this.fetchInitial(e),[n,r]=yield Promise.all([t,s]);return void 0!==n&&n.ok&&r.ok&&this.equal(n.value,r.value)?n:r}))}refetch(e){if(null!==this.error)return;const t={seq:e,resultPromise:this.refetchInitial(e)};this.set(t)}changedBetween(e,t){return h(this,null,(function*(){if(e>=t)return!1;const s=this.get(t),n=yield s.resultPromise;return!!n.ok&&(n.value.lastChanged>e||(yield this.anyChildChanged(e,t,n.value)))}))}getDeep(e){return h(this,null,(function*(){return this.getDeepMutex.runExclusive((()=>h(this,null,(function*(){var t;if(null!==this.error)return this.error;const s=null==(t=this.lastDeep)?void 0:t.seq;if(e===s)return this.lastDeep.deep;if(void 0!==s){if(e<s)throw`Trying to load seq ${e} when we have previously loaded seq ${s}`;if(!(yield this.changedBetween(s,e)))return this.lastDeep.seq=e,this.lastDeep.deep}const n=this.get(e).resultPromise,r=n.then((t=>t.ok?this.loadNested(e,t.value):t));this.lastDeep={seq:e,shallow:n,deep:r};const i=yield r;return i.ok||this.setError(i),i}))))}))}}class X extends K{constructor(e,t){super(t),this.emitMutex=e,this.unsubscribeTimer=new ee,this.referencedByOtherStores=0,this.listeners=[],this.lastEmitSeq=void 0,this.lastEmitResult=void 0,e.runExclusive((()=>h(this,null,(function*(){yield this.emit(0)}))))}registerInternalSubscription(){this.referencedByOtherStores++;let e=!0;return()=>{e&&(e=!1,this.referencedByOtherStores--,this.startUnsubscribeTimerIfOrphan())}}get onlyUsedInternally(){return 0===this.listeners.length}listen(e){return this.unsubscribeTimer.stop(),this.listeners.push(e),void 0!==this.lastEmitResult&&e(this.lastEmitResult),()=>{this.listeners=this.listeners.filter((t=>t!==e)),this.startUnsubscribeTimerIfOrphan()}}startUnsubscribeTimerIfOrphan(){0===this.referencedByOtherStores&&0===this.listeners.length&&this.unsubscribeTimer.restart((()=>{this.setError(A("UNSUBSCRIBED"))}),this.unsubscribeDebounceMs)}getLoadMoreSeq(){var e;const t=null!=(e=this.lastEmitSeq)?e:0,s=this.mostRecentState.seq;return Math.max(t,s)+1e-6}emit(e){return h(this,null,(function*(){var t;if(this.onlyUsedInternally)return;if(this.lastEmitSeq&&this.lastEmitSeq>=e)return;if(!1===(null==(t=this.lastEmitResult)?void 0:t.ok))return;this.lastEmitSeq=e;const s=yield this.getDeep(e);s!==this.lastEmitResult&&(this.lastEmitResult=s,this.listeners.forEach((e=>e(s))))}))}}class ee{constructor(){this.timerId=void 0}restart(e,t){void 0!==this.timerId&&clearTimeout(this.timerId),this.timerId=setTimeout((()=>e()),t)}stop(){clearTimeout(this.timerId)}}class te extends X{constructor(e,t,s,n){super(s,n),this.userId=e,this.realtimeClient=t,this.unsubscribeDebounceMs=1e4}fetchInitial(e){return h(this,null,(function*(){const t=yield this.realtimeClient.call("GET",["users",this.userId],{includePrivateFields:!1},{bypassCache:!0});return t.ok?C({snapshot:this.realtimeClient.createUserSnapshot(t.value.data),lastChanged:e}):"server"===t.where&&404===t.value.status?C({snapshot:null,lastChanged:e}):t}))}equal(e,t){return Y(e.snapshot,t.snapshot)}loadNested(e,t){return h(this,null,(function*(){return C(t)}))}userCreated(e,t){this.mutate(e,(s=>null!==s.value.snapshot?s:C({snapshot:this.realtimeClient.createUserSnapshot(t.state),lastChanged:e})))}userEdited(e,t){this.mutate(e,(s=>{const n=s.value.snapshot;return null===n?(console.warn("[TalkJS] Received a 'used edited' event for a user that we thought didn't exist."),s):C({snapshot:{id:n.id,name:z(n.name,t.diff.name),custom:J(n.custom,t.diff.custom),locale:z(n.locale,t.diff.locale),photoUrl:z(n.photoUrl,t.diff.photoUrl),role:z(n.role,t.diff.role),welcomeMessage:z(n.welcomeMessage,t.diff.welcomeMessage)},lastChanged:e})}))}getFromCache(){return h(this,null,(function*(){const e=yield this.mostRecentState.resultPromise;return e.ok?null===e.value.snapshot?E({status:404,errorCode:"USER_NOT_FOUND",reasons:["That user does not exist yet"]}):C({status:200,data:{id:e.value.snapshot.id,name:e.value.snapshot.name,custom:e.value.snapshot.custom,locale:e.value.snapshot.locale,photoUrl:e.value.snapshot.photoUrl,role:e.value.snapshot.role,welcomeMessage:e.value.snapshot.welcomeMessage}}):A("NOT_IN_CACHE")}))}teardownNested(e){}anyChildChanged(e,t,s){return h(this,null,(function*(){return!1}))}}var se,ne={};function re(e,t){const s=t.lastIndex;let n;const r=[];for(;null!==(n=t.exec(e));)r.push(n);return t.lastIndex=s,r}function ie(e){const t=e.replace(/%2F/g,"/").replace(/^.*?\/([^/]+?)(?:\?.*)?$/,"$1");return decodeURIComponent(t)}function ae(e,t){e()||t||(t=e.toString().replace(/^function\s*\(\)\s*\{\s*return\s*(.*);\s*\}\s*$/,"`$1`")+" was not true")}!function(){if(se)return ne;function e(e){return String.fromCharCode(parseInt(e.slice(1),16))}function t(e){return`%${`00${e.charCodeAt(0).toString(16)}`.slice(-2)}`}se=1,Object.defineProperty(ne,"__esModule",{value:!0}),ne.encode=function(t){return btoa(encodeURIComponent(t).replace(/%[0-9A-F]{2}/g,e))},ne.decode=function(e){return decodeURIComponent(Array.from(atob(e),t).join(""))}}(),(e=>{function t(e,t){(function(e,t){switch(t){case"undefined":return void 0===e;case String:return"string"==typeof e||e instanceof String;case Boolean:return"boolean"==typeof e||e instanceof Boolean;case Number:return"number"==typeof e||e instanceof Number;default:return e instanceof t}})(e,t)||(t.name,String(e))}e.defined=function(e){},e.has=function(e,t){e[t]},e.is=t,e.equals=function(e,t){},e.oneOf=function(e,t){t.includes(e)||JSON.stringify(t)},e.isArray=function(e,s){t(e,Array),e&&e.length>0&&t(e[0],s)},e.optional=function(e,s){void 0!==e&&t(e,s)},e.falsy=function(e){},e.never=function(e){}})(ae||(ae={}));const oe=ae,ue=/^\/.*[^\\]\/[im]*$/;function le(e){return!!ue.test(e)&&!ce(e).test("")}function ce(e){const t=e.match(/^\/(.*[^\\])\/(.*)$/);if(!t)throw new Error(`Expected ${e} to be a (non-empty) regex`);let s=t[2]||"";return s=s.replace(/[^im]/g,"")+"g",new RegExp(t[1],s)}class he{constructor({mode:e,allowedHostnames:t,allowedPhoneNrs:s,allowedMatches:n,forbiddenMatches:r,suppressLinks:i,suppressEmailAddresses:a,suppressPhoneNumbers:o,replacement:u}){oe.oneOf(e,["all","otherOnly","off"]),this.mode=e,this.suppressLinks=!1!==i,this.suppressEmailAddresses=!1!==a,this.suppressPhoneNumbers=!1!==o,this.allowedHostnames=t||[],this.allowedPhoneNrs=(s||[]).filter((e=>e)).map((e=>e.replace(/[^0-9]/g,""))),this.allowedMatches=(n||[]).filter(le).map((e=>ce(e))),this.forbiddenMatches=(r||[]).filter(le).map((e=>ce(e))),oe((()=>this.allowedMatches.every((e=>e.flags.includes("g")))),"All regexes in `suppressContactInfo.allowedMatches` must be global. Check `allowedMatches`!"),oe((()=>this.forbiddenMatches.every((e=>e.flags.includes("g")))),"All regexes in `suppressContactInfo.forbiddenMatches` must be global. Check `forbiddenMatches`!"),u=null==u?void 0:u.trim(),this.replacement=u&&u.length>0?u:void 0}shouldSuppress({isContentBySender:e}){return"all"===this.mode||"otherOnly"===this.mode&&!e}}function de(e,t){return e.map((e=>function(e,t){if("text"===e.type)return pe(e.children,function(e){var t,s,n,r,i,a,o,u,l,c,h,d;let p="";return e.t&&(p=`(${e.t("CONTACT_INFORMATION_HIDDEN")})`),{formattedLinks:null!=(t=e.formattedLinks)?t:"plaintext",markup:null!=(s=e.markup)&&s,useFallbackMentions:null!=(n=e.useFallbackMentions)&&n,sameTabLinkRules:null!=(r=e.sameTabLinkRules)?r:[],enableEmojiImageFallback:null!=(i=e.enableEmojiImageFallback)&&i,highlight:null!=(a=e.highlight)?a:[],contactInfo:null!=(o=e.contactInfo)&&o,suppression:null!=(u=e.suppression)?u:new he({mode:"off"}),contactInfoHiddenText:null!=(h=null!=(c=e.contactInfoHiddenText)?c:null==(l=e.suppression)?void 0:l.replacement)?h:p,customEmojiUrls:null!=(d=e.customEmojiUrls)?d:{}}}(t));if("file"===e.type&&"video"===e.subtype)return`🎥 ${ie(e.url)}`;if("file"===e.type&&"image"===e.subtype)return`📷 ${ie(e.url)}`;if("file"===e.type&&"audio"===e.subtype)return`🎧 ${ie(e.url)}`;if("file"===e.type&&"voice"===e.subtype){const t=e.duration;return void 0===t?"🎙️":`🎙️ (${Math.floor(t/60)}:${Math.floor(t%60).toString().padStart(2,"0")})`}return"file"===e.type?(e.subtype,`📎 ${ie(e.url)}`):"location"===e.type?"📍":""}(e,t))).join("\n\n")}function pe(e,t){return e.flatMap((e=>{if("string"==typeof e)return e;switch(e.type){case"blockquote":case"bold":case"italic":case"strikethrough":case"link":case"actionlink":case"actionLink":case"actionbutton":case"actionButton":return pe(e.children,t);case"bulletlist":case"bulletList":return"\n"+pe(e.children,t);case"bulletpoint":case"bulletPoint":return"- "+pe(e.children,t)+"\n";case"autolink":case"autoLink":case"codeblock":case"codeBlock":case"codespan":case"codeSpan":case"emoji":case"customemoji":case"customEmoji":return e.text;case"suppressed":return t.contactInfoHiddenText;case"mention":return`@${e.text}`}})).join("")}class fe extends K{constructor(e,t,s){super(),this.conversationId=e,this.message=t,this.realtimeClient=s}get messageId(){return"string"==typeof this.message?this.message:this.message.id}fetchInitial(e){return h(this,null,(function*(){let t;if("object"==typeof this.message)t=this.message;else{const e=yield this.realtimeClient.call("GET",["me","conversations",this.conversationId,"messages",this.message],{},{bypassCache:!0});if(!e.ok)return e;t=e.value.data}return C({lastChanged:e,sender:null===t.senderId?null:this.realtimeClient.internalSubscribe(["users",t.senderId]),data:{id:t.id,type:t.type,custom:t.custom,createdAt:t.createdAt,editedAt:t.editedAt,referencedMessageId:t.referencedMessageId,origin:t.origin,plaintext:de(t.content,{}),content:t.content}})}))}refetch(e){throw"Do not call refetch on message data stores, it can return outdated data. Destroy and remake them instead"}equal(e,t){return Y(e.data,t.data)}teardownNested(e){var t;null==(t=e.sender)||t.unsubscribe()}anyChildChanged(e,t,s){return h(this,null,(function*(){var n;const r=null==(n=s.sender)?void 0:n.store;return!0===(yield null==r?void 0:r.changedBetween(e,t))}))}loadNested(e,t){return h(this,null,(function*(){var s,n,r;const i=yield null==(n=null==(s=t.sender)?void 0:s.store)?void 0:n.getDeep(e);if(!1===(null==i?void 0:i.ok))return i;if(null===t.data)return C({snapshot:null});const a=null==i?void 0:i.value;return C({snapshot:{sender:null!=(r=null==a?void 0:a.snapshot)?r:null,id:t.data.id,type:t.data.type,custom:t.data.custom,createdAt:t.data.createdAt,editedAt:t.data.editedAt,origin:t.data.origin,plaintext:de(t.data.content,{}),content:t.data.content,referencedMessageId:t.data.referencedMessageId}})}))}messageEdited(e,t){this.mutate(e,(s=>null===s.value.data?s:C({lastChanged:e,sender:s.value.sender,data:{id:s.value.data.id,type:s.value.data.type,createdAt:s.value.data.createdAt,origin:s.value.data.origin,referencedMessageId:s.value.data.referencedMessageId,editedAt:z(s.value.data.editedAt,t.diff.editedAt),custom:J(s.value.data.custom,t.diff.custom),content:z(s.value.data.content,t.diff.content)}})))}messageDeleted(e,t){this.mutate(e,(s=>null===s.value.data?s:this.messageId===t.messageId?(this.teardownNested(s.value),C({lastChanged:e,sender:null,data:null})):s.value.data.referencedMessageId===t.messageId?C({lastChanged:e,sender:s.value.sender,data:{id:s.value.data.id,type:s.value.data.type,createdAt:s.value.data.createdAt,origin:s.value.data.origin,referencedMessageId:null,editedAt:s.value.data.editedAt,custom:s.value.data.custom,content:s.value.data.content}}):s))}getFromCache(){return h(this,null,(function*(){var e;const t=yield this.mostRecentState.resultPromise;if(!t.ok)return A("NOT_IN_CACHE");if(null===t.value.data)return E({status:404,errorCode:"MESSAGE_NOT_FOUND",reasons:["No message with that ID exists"]});const s=t.value,{sender:n}=s,r=c(s,["sender"]);return C({status:200,data:l(u({},r.data),{senderId:null!=(e=null==n?void 0:n.store.userId)?e:null})})}))}}class me extends K{constructor(e,t,s){super(),this.createdAt=e,this.dataStore=t,this.referencedDataStore=s}get messageId(){return this.dataStore.messageId}fetchInitial(e){return h(this,null,(function*(){return C({lastChanged:e,dataStore:this.dataStore,referencedDataStore:this.referencedDataStore})}))}refetch(e){throw"Do not call refetch on message stores, it can return outdated data. Destroy and remake them instead"}equal(e,t){return!0}teardownNested(e){}anyChildChanged(e,t,s){return h(this,arguments,(function*(e,t,{dataStore:s,referencedDataStore:n}){return!0===(yield s.changedBetween(e,t))||!0===(yield null==n?void 0:n.changedBetween(e,t))}))}loadNested(e,t){return h(this,null,(function*(){var s,n,r;const i=yield t.dataStore.getDeep(e);if(!i.ok)return i;const a=i.value;if(null===a.snapshot)return C({snapshot:null});const o=yield null==(s=t.referencedDataStore)?void 0:s.getDeep(e);if(o&&!o.ok)return o;const u=null!=(n=null==o?void 0:o.value)?n:null,l=null!=(r=null==u?void 0:u.snapshot)?r:null;return C({snapshot:{id:a.snapshot.id,type:a.snapshot.type,sender:a.snapshot.sender,custom:a.snapshot.custom,createdAt:a.snapshot.createdAt,editedAt:a.snapshot.editedAt,referencedMessage:l,origin:a.snapshot.origin,plaintext:a.snapshot.plaintext,content:a.snapshot.content}})}))}}class ge extends X{constructor(e,t,s,n){super(s,n),this.conversationId=e,this.realtimeClient=t,this.unsubscribeDebounceMs=1e3,this.pendingLoadMore=void 0}listen(e){return this.onlyUsedInternally&&this.mostRecentState.resultPromise.then((e=>{if(e.ok&&null!==e.value.inWindow){const t=30-e.value.inWindow.length;t>0&&this._loadMoreMessages(t)}})),super.listen(e)}fetchInitial(e){return h(this,null,(function*(){const t=this.onlyUsedInternally?1:30,s=yield ve({realtimeClient:this.realtimeClient,conversationId:this.conversationId,count:t});return s.ok?null===s.value.messages?C({lastChanged:e,lastMessageChanged:e,stores:null,inWindow:null,windowEnd:null}):be({seq:e,messages:s.value.messages,cursor:s.value.nextCursor,conversationId:this.conversationId,realtimeClient:this.realtimeClient}):s}))}teardownNested(e){if(e.stores){const t=A("TERMINATED");Object.values(e.stores).forEach((e=>e.setError(t))),e.inWindow.forEach((e=>e.setError(t)))}}anyChildChanged(e,t,s){return h(this,null,(function*(){for(const n in s.stores){const r=s.stores[n];if(!0===(yield null==r?void 0:r.changedBetween(e,t)))return!0}return!1}))}lastMessageChangedBetween(e,t){return h(this,null,(function*(){if(e>=t)return!1;const s=yield this.get(t).resultPromise;if(!s.ok)return!1;if(s.value.lastMessageChanged>e)return!0;if(null===s.value.stores)return!1;const n=s.value.inWindow[0];return void 0!==n&&!0===(yield n.changedBetween(e,t))}))}equal(e,t){return null===e.stores&&null===t.stores||null!==e.stores&&null!==t.stores&&!!Y(Object.keys(e.stores),Object.keys(t.stores))&&!!Y(e.inWindow.map((e=>e.messageId)),t.inWindow.map((e=>e.messageId)))&&Y(e.windowEnd,t.windowEnd)}loadNested(e,t){return h(this,null,(function*(){if(null===t.stores)return C({snapshot:null,loadedAll:!0});const s=yield Promise.all(t.inWindow.map((t=>t.getDeep(e)))),n=s.find((e=>!e.ok));return n||C({snapshot:s.filter((e=>null!==e.value.snapshot)).map((e=>e.value.snapshot)),loadedAll:null===t.windowEnd})}))}loadMore(e){return h(this,null,(function*(){if(this.pendingLoadMore)return this.pendingLoadMore;const t=y();this.pendingLoadMore=t.promise,yield this._loadMoreMessages(e),t.resolve(),this.pendingLoadMore=void 0}))}_loadMoreMessages(e=30){return h(this,null,(function*(){const t=yield this.mostRecentState.resultPromise;if(!t.ok)return;if(null===t.value.windowEnd)return;const s=t.value.windowEnd.cursor,n=yield ve({count:e,cursor:s,conversationId:this.conversationId,realtimeClient:this.realtimeClient}),r=this.getLoadMoreSeq();this.mutate(r,(e=>null===e.value.windowEnd||s!==e.value.windowEnd.cursor?e:n.ok?null===n.value.messages?(console.warn("[TalkJS] When loading more messages, the conversation no longer existed. We should have been told about this."),e):be({seq:r,prevState:e.value,messages:n.value.messages,cursor:n.value.nextCursor,conversationId:this.conversationId,realtimeClient:this.realtimeClient}):n)),yield this.emitMutex.runExclusive((()=>this.emit(r)))}))}messageCreated(e,t){this.mutate(e,(s=>{if(null===s.value.stores)return console.warn("[TalkJS] Received a 'message.created' event for a nonexistent conversation."),s;if(s.value.windowEnd&&t.state.createdAt<s.value.windowEnd.oldestMessageTs)return s;if(Object.hasOwnProperty.call(s.value.stores,t.state.id))return s;const n=u({},s.value.stores),r=new fe(this.conversationId,t.state,this.realtimeClient);n[t.state.id]=r;const i=t.state.referencedMessageId;let a;null===i?a=null:i in n?a=n[i]:(a=new fe(this.conversationId,i,this.realtimeClient),n[i]=a);const o=new me(t.state.createdAt,r,a),l=[...s.value.inWindow,o];l.sort(((e,t)=>t.createdAt-e.createdAt));const c=l[0].messageId===t.messageId?e:s.value.lastMessageChanged;return C({lastChanged:e,lastMessageChanged:c,stores:n,inWindow:l,windowEnd:s.value.windowEnd})}))}messageEdited(e,t){this.mutate(e,(s=>{var n;return null===s.value.stores?(console.warn("[TalkJS] Received a 'message.edited' event for a nonexistent conversation."),s):(null==(n=s.value.stores[t.messageId])||n.messageEdited(e,t),s)}))}messageDeleted(e,t){this.mutate(e,(s=>{if(null===s.value.stores)return console.warn("[TalkJS] Received a 'message.deleted' event for a conversation that we thought didn't exist."),s;if(Object.values(s.value.stores).forEach((s=>s.messageDeleted(e,t))),void 0===s.value.stores[t.messageId])return s;const n=u({},s.value.stores);delete n[t.messageId];const r=s.value.inWindow.filter((e=>e.messageId!==t.messageId));if(t.newLastMessage&&0===r.length){const e=new fe(this.conversationId,t.newLastMessage,this.realtimeClient);n[e.messageId]=e;const s=t.newLastMessage.referencedMessageId;let i;null===s?i=null:s in n?i=n[s]:(i=new fe(this.conversationId,s,this.realtimeClient),n[s]=i);const a=new me(t.newLastMessage.createdAt,e,i);r.push(a)}const i=void 0!==t.newLastMessage?e:s.value.lastMessageChanged;return C({lastChanged:e,lastMessageChanged:i,stores:n,inWindow:r,windowEnd:s.value.windowEnd})}))}conversationCleared(e,t){this.mutate(e,(t=>{var s;return 0===(null==(s=t.value.inWindow)?void 0:s.length)&&null===t.value.windowEnd?t:(this.teardownNested(t.value),C({lastChanged:e,lastMessageChanged:e,stores:{},inWindow:[],windowEnd:null}))}))}sideCreated(e,t){const s=this.fetchInitial(e);this.mutate(e,(e=>null!==e.value.stores?(s.then((e=>{e.ok&&this.teardownNested(e.value)})),e):s))}sideDeleted(e,t){this.mutate(e,(t=>null===t.value.stores?t:(this.teardownNested(t.value),C({lastChanged:e,lastMessageChanged:e,stores:null,inWindow:null,windowEnd:null}))))}getMessageFromCache(e){return h(this,null,(function*(){const t=yield this.mostRecentState.resultPromise;if(!t.ok)return A("NOT_IN_CACHE");if(null===t.value.stores)return A("NOT_IN_CACHE");const s=t.value.stores[e];return void 0===s?A("NOT_IN_CACHE"):s.getFromCache()}))}}function ve(e){return h(this,arguments,(function*({cursor:e,realtimeClient:t,conversationId:s,count:n}){const r={limit:n,cursor:e},i=yield t.call("GET",["me","conversations",s,"messages"],r,{bypassCache:!0});if(i.ok){const{data:e,cursor:t}=i.value.data;return C({messages:e,nextCursor:t})}return!i.ok&&"server"===i.where&&404===i.value.status||!i.ok&&"server"===i.where&&403===i.value.status&&"NOT_A_PARTICIPANT"===i.value.errorCode?C({messages:null,nextCursor:null}):i}))}function be({seq:e,prevState:t,messages:s,cursor:n,conversationId:r,realtimeClient:i}){var a,o,l,c;const h=t?u({},t.stores):{};for(const u of s)if(void 0===h[u.id]){const e=new fe(r,u,i);h[e.messageId]=e}for(const u of s){const e=u.referencedMessageId;if(e&&void 0===h[e]){const t=new fe(r,e,i);h[t.messageId]=t}}const d=t?[...t.inWindow]:[];for(const u of s)d.push(new me(u.createdAt,h[u.id],u.referencedMessageId?h[u.referencedMessageId]:null));d.sort(((e,t)=>t.createdAt-e.createdAt));const p=(null==(o=null==(a=null==t?void 0:t.inWindow)?void 0:a[0])?void 0:o.messageId)===(null==(l=null==d?void 0:d[0])?void 0:l.messageId)&&null!=(c=null==t?void 0:t.lastMessageChanged)?c:e;return C(null===n?{lastChanged:e,lastMessageChanged:p,stores:h,inWindow:d,windowEnd:null}:{lastChanged:e,lastMessageChanged:p,stores:h,inWindow:d,windowEnd:{cursor:n,oldestMessageTs:s[s.length-1].createdAt}})}class ye extends X{constructor(e,t,s,n){super(s,n),this.convDataStore=e,this.realtimeClient=t,this.unsubscribeDebounceMs=0}fetchInitial(e){return h(this,null,(function*(){return C({lastChanged:e,store:this.convDataStore})}))}teardownNested(e){e.store.unsubscribe()}anyChildChanged(e,t,s){return h(this,null,(function*(){return s.store.store.changedBetween(e,t)}))}equal(e,t){return!0}loadNested(e,t){return h(this,null,(function*(){return t.store.store.getDeep(e)}))}getFromCache(){return h(this,null,(function*(){return this.convDataStore.store.getFromCache()}))}}function we(e,t){for(let s in e)Object.prototype.hasOwnProperty.call(e,s)&&t(e[s],s)}function Ce(e,t){return function(e){let s={};return we(e,((e,n)=>{const[r,i]=(([e,s])=>[e,t(s,e)])([n,e],0);s[r]=i})),s}(e)}class Ae extends X{constructor(e,t,s,n){super(s,n),this.conversationId=e,this.realtimeClient=t,this.unsubscribeDebounceMs=1e4}fetchInitial(e){return h(this,null,(function*(){const t=yield this.realtimeClient.call("GET",["me","conversations",this.conversationId,"typing"],{},{bypassCache:!0});if(!t.ok&&"server"===t.where&&404===t.value.status)return C({data:null,lastChanged:e});if(!t.ok&&"server"===t.where&&403===t.value.status&&"NOT_A_PARTICIPANT"===t.value.errorCode)return C({data:null,lastChanged:e});if(!t.ok)return t;const s=t.value.data;return s.many?C({data:{usersTyping:null,many:!0},userSubscriptions:{},lastChanged:e}):C({data:s,userSubscriptions:Ce(s.usersTyping,((e,t)=>this.realtimeClient.internalSubscribe(["users",t]))),lastChanged:e})}))}equal(e,t){return Y(e.data,t.data)}loadNested(e,t){return h(this,null,(function*(){if(null===t.data)return C({snapshot:null,lastChanged:t.lastChanged});if(t.data.many)return C({snapshot:{many:!0},lastChanged:t.lastChanged});const s=Object.entries(t.data.usersTyping).sort((([e,t],[s,n])=>t-n)).map((([e,t])=>e)).map((s=>t.userSubscriptions[s].store.getDeep(e))),n=yield Promise.all(s),r=n.find((e=>!e.ok));if(r)return r;const i=n.map((e=>e.value)),a=i.map((e=>e.snapshot)),o=i.map((e=>e.lastChanged));return C({snapshot:{users:a,many:!1},lastChanged:Math.max(t.lastChanged,...o)})}))}typingAvailable(e,t){this.mutate(e,(()=>C({data:t.state,userSubscriptions:t.state.many?{}:Ce(t.state.usersTyping,((e,t)=>this.realtimeClient.internalSubscribe(["users",t]))),lastChanged:e})))}typingChanged(e,t){this.mutate(e,(s=>{if(null===s.value.data)return s;if(void 0===t.diff.many){if(!0===s.value.data.many)return s;const n=u({},s.value.data.usersTyping),r=u({},s.value.userSubscriptions);return we(t.diff.usersTyping,((e,t)=>{var s;"number"==typeof e?(n[t]=e,r[t]=this.realtimeClient.internalSubscribe(["users",t])):null===e&&(delete n[t],null==(s=r[t])||s.unsubscribe(),delete r[t])})),C({data:{usersTyping:n,many:!1},userSubscriptions:r,lastChanged:e})}if(!0===t.diff.many)return s.value.data.many?s:C({data:{usersTyping:null,many:!0},userSubscriptions:{},lastChanged:e});if(!1===t.diff.many){if(!1===s.value.data.many)return s;const n=Ce(t.diff.usersTyping,((e,t)=>this.realtimeClient.internalSubscribe(["users",t])));return C({data:t.diff,userSubscriptions:n,lastChanged:e})}throw t.diff,"Unreachable"}))}sideDeleted(e,t){this.mutate(e,(t=>null===t.value.data?t:C({data:null,lastChanged:e})))}teardownNested(e){e.data&&we(e.userSubscriptions,(e=>e.unsubscribe()))}anyChildChanged(e,t,s){return h(this,null,(function*(){var n;if(null===s.data)return!1;for(const r in s.userSubscriptions){const i=s.userSubscriptions[r];if(!0===(yield null==(n=null==i?void 0:i.store)?void 0:n.changedBetween(e,t)))return!0}return!1}))}}class Ee extends K{constructor(e,t,s){super(),this.conversationId=e,this.participantData=t,this.realtimeClient=s}fetchInitial(e){return h(this,null,(function*(){return C({lastChanged:e,user:this.realtimeClient.internalSubscribe(["users",this.participantData.id]),data:this.participantData})}))}refetch(e){throw"Do not call refetch on participant data stores, it can return outdated data. Destroy and remake them instead"}equal(e,t){var s,n,r,i;return(null==(n=null==(s=e.user)?void 0:s.store)?void 0:n.userId)===(null==(i=null==(r=t.user)?void 0:r.store)?void 0:i.userId)&&Y(e.data,t.data)}teardownNested(e){var t;null==(t=e.user)||t.unsubscribe()}anyChildChanged(e,t,s){return h(this,null,(function*(){var n;const r=null==(n=s.user)?void 0:n.store;return!0===(yield null==r?void 0:r.changedBetween(e,t))}))}loadNested(e,t){return h(this,null,(function*(){if(null===t.data)return C({snapshot:null});const s=yield t.user.store.getDeep(e);if(!1===s.ok)return s;const n=s.value.snapshot;return C({snapshot:this.realtimeClient.createParticipantSnapshotPreloaded(t.data,n)})}))}participantEdited(e,t){this.mutate(e,(s=>null===s.value.data?s:C({lastChanged:e,user:s.value.user,data:{id:s.value.data.id,access:z(s.value.data.access,t.diff.access),notify:z(s.value.data.notify,t.diff.notify),joinedAt:s.value.data.joinedAt}})))}participantDeleted(e,t){this.mutate(e,(t=>null===t.value.data?t:(this.teardownNested(t.value),C({lastChanged:e,user:null,data:null}))))}getFromCache(){return h(this,null,(function*(){const e=yield this.mostRecentState.resultPromise;return e.ok?null===e.value.data?E({status:404,errorCode:"PARTICIPANT_NOT_FOUND",reasons:["No participant with that ID exists"]}):C({status:200,data:e.value.data}):A("NOT_IN_CACHE")}))}}class ke extends X{constructor(e,t,s,n){super(s,n),this.conversationId=e,this.realtimeClient=t,this.unsubscribeDebounceMs=1e3,this.pendingLoadMore=void 0}fetchInitial(e){return h(this,null,(function*(){const t=yield xe({realtimeClient:this.realtimeClient,conversationId:this.conversationId,count:10});return t.ok?null===t.value.participants?C({lastChanged:e,stores:null,inWindow:null,windowEnd:null}):Te({seq:e,participants:t.value.participants,cursor:t.value.nextCursor,conversationId:this.conversationId,realtimeClient:this.realtimeClient}):t}))}teardownNested(e){if(e.stores){const t=A("TERMINATED");Object.values(e.stores).forEach((e=>e.setError(t)))}}anyChildChanged(e,t,s){return h(this,null,(function*(){for(const n in s.stores){const r=s.stores[n];if(!0===(yield null==r?void 0:r.changedBetween(e,t)))return!0}return!1}))}equal(e,t){return null===e.stores&&null===t.stores||null!==e.stores&&null!==t.stores&&!!Y(Object.keys(e.stores),Object.keys(t.stores))&&Y(e.windowEnd,t.windowEnd)}loadNested(e,t){return h(this,null,(function*(){if(null===t.stores)return C({snapshot:null,loadedAll:!0});const s=yield Promise.all(Object.values(t.stores).map((t=>t.getDeep(e)))),n=s.find((e=>!e.ok));if(n)return n;const r=s.filter((e=>null!==e.value.snapshot)).map((e=>e.value.snapshot));return r.sort(((e,t)=>t.joinedAt-e.joinedAt)),C({snapshot:r,loadedAll:null===t.windowEnd})}))}loadMore(e){return h(this,null,(function*(){if(this.pendingLoadMore)return this.pendingLoadMore;const t=y();this.pendingLoadMore=t.promise,yield this._loadMoreParticipants(e),t.resolve(),this.pendingLoadMore=void 0}))}_loadMoreParticipants(e=10){return h(this,null,(function*(){const t=yield this.mostRecentState.resultPromise;if(!t.ok)return;if(null===t.value.windowEnd)return;const s=t.value.windowEnd.cursor,n=yield xe({count:e,cursor:s,conversationId:this.conversationId,realtimeClient:this.realtimeClient}),r=this.getLoadMoreSeq();this.mutate(r,(e=>null===e.value.windowEnd||s!==e.value.windowEnd.cursor?e:n.ok?null===n.value.participants?(console.warn("[TalkJS] When loading more participants, the conversation no longer existed. We should have been told about this."),e):Te({seq:r,prevStores:e.value.stores,participants:n.value.participants,cursor:n.value.nextCursor,conversationId:this.conversationId,realtimeClient:this.realtimeClient}):n)),yield this.emitMutex.runExclusive((()=>this.emit(r)))}))}participantCreated(e,t){this.mutate(e,(s=>{if(null===s.value.stores)return console.warn("[TalkJS] Received a 'participant.created' event for a nonexistent conversation."),s;if(s.value.windowEnd&&t.state.joinedAt<s.value.windowEnd.oldestParticipantTs)return s;if(Object.hasOwnProperty.call(s.value.stores,t.state.id))return s;const n=u({},s.value.stores),r=new Ee(this.conversationId,t.state,this.realtimeClient);return n[t.state.id]=r,C({lastChanged:e,stores:n,windowEnd:s.value.windowEnd})}))}participantEdited(e,t){this.mutate(e,(s=>{var n;return null===s.value.stores?(console.warn("[TalkJS] Received a 'participant.edited' event for a nonexistent conversation."),s):(null==(n=s.value.stores[t.userId])||n.participantEdited(e,t),s)}))}participantDeleted(e,t){this.mutate(e,(s=>{if(null===s.value.stores)return console.warn("[TalkJS] Received a 'participant.deleted' event for a conversation that we thought didn't exist."),s;const n=s.value.stores[t.userId];if(void 0===n)return s;n.participantDeleted(e,t);const r=u({},s.value.stores);return delete r[t.userId],C({lastChanged:e,stores:r,windowEnd:s.value.windowEnd})}))}sideCreated(e,t){const s=this.fetchInitial(e);this.mutate(e,(e=>null!==e.value.stores?(s.then((e=>{e.ok&&this.teardownNested(e.value)})),e):s))}sideDeleted(e,t){this.mutate(e,(t=>null===t.value.stores?t:(this.teardownNested(t.value),C({lastChanged:e,stores:null,inWindow:null,windowEnd:null}))))}getParticipantFromCache(e){return h(this,null,(function*(){const t=yield this.mostRecentState.resultPromise;if(!t.ok)return A("NOT_IN_CACHE");if(null===t.value.stores)return A("NOT_IN_CACHE");const s=t.value.stores[e];return void 0===s?A("NOT_IN_CACHE"):s.getFromCache()}))}}function xe(e){return h(this,arguments,(function*({cursor:e,realtimeClient:t,conversationId:s,count:n}){const r={limit:n,cursor:e},i=yield t.call("GET",["me","conversations",s,"participants"],r,{bypassCache:!0});if(i.ok){const{data:e,cursor:t}=i.value.data;return C({participants:e,nextCursor:t})}return!i.ok&&"server"===i.where&&404===i.value.status||!i.ok&&"server"===i.where&&403===i.value.status&&"NOT_A_PARTICIPANT"===i.value.errorCode?C({participants:null,nextCursor:null}):i}))}function Te({seq:e,prevStores:t,participants:s,cursor:n,conversationId:r,realtimeClient:i}){const a=t?u({},t):{};for(const o of s)if(void 0===a[o.id]){const e=new Ee(r,o,i);a[o.id]=e}return C(null===n?{lastChanged:e,stores:a,windowEnd:null}:{lastChanged:e,stores:a,windowEnd:{cursor:n,oldestParticipantTs:s[s.length-1].joinedAt}})}class Ie extends X{constructor(e,t,s,n){super(s,n),this.getConvDataStore=e,this.realtimeClient=t,this.unsubscribeDebounceMs=1e3,this.pendingLoadMore=void 0}fetchInitial(e){return h(this,null,(function*(){const t=yield Se({realtimeClient:this.realtimeClient,count:20});return t.ok?null===t.value.conversations?C({lastChanged:e,stores:null,windowEnd:null}):De({seq:e,conversations:t.value.conversations,cursor:t.value.nextCursor,getConvDataStore:this.getConvDataStore}):t}))}teardownNested(e){null!==e.stores&&Object.values(e.stores).forEach((e=>e.unsubscribe()))}anyChildChanged(e,t,s){return h(this,null,(function*(){var n;for(const r in s.stores){const i=s.stores[r];if(!0===(yield null==(n=null==i?void 0:i.store)?void 0:n.changedBetween(e,t)))return!0}return!1}))}equal(e,t){return null===e.stores&&null===t.stores||null!==e.stores&&null!==t.stores&&!!Y(Object.keys(e.stores),Object.keys(t.stores))&&Y(e.windowEnd,t.windowEnd)}loadNested(e,t){return h(this,null,(function*(){if(null===t.stores)return C({snapshot:[],loadedAll:!0});const s=yield Promise.all(Object.values(t.stores).map((t=>t.store.getDeep(e)))),n=s.find((e=>!e.ok));if(n)return n;const r=s.filter((e=>null!==e.value.snapshot)).map((e=>e.value.snapshot));return r.sort(((e,t)=>{var s,n,r,i;const a=null!=(n=null==(s=e.lastMessage)?void 0:s.createdAt)?n:e.joinedAt;return(null!=(i=null==(r=t.lastMessage)?void 0:r.createdAt)?i:t.joinedAt)-a})),C({snapshot:r,loadedAll:null===t.windowEnd})}))}loadMore(e){return h(this,null,(function*(){if(this.pendingLoadMore)return this.pendingLoadMore;const t=y();this.pendingLoadMore=t.promise,yield this._loadMoreConversations(e),t.resolve(),this.pendingLoadMore=void 0}))}_loadMoreConversations(e=20){return h(this,null,(function*(){const t=yield this.mostRecentState.resultPromise;if(!t.ok)return;if(null===t.value.windowEnd)return;const s=t.value.windowEnd.cursor,n=yield Se({count:e,cursor:s,realtimeClient:this.realtimeClient}),r=this.getLoadMoreSeq();this.mutate(r,(e=>null===e.value.windowEnd||s!==e.value.windowEnd.cursor?e:n.ok?null===n.value.conversations?(console.warn("[TalkJS] When loading more conversations, the user stopped existing, which should be impossible."),e):De({seq:r,prevStores:e.value.stores,conversations:n.value.conversations,cursor:n.value.nextCursor,getConvDataStore:this.getConvDataStore}):n)),yield this.emitMutex.runExclusive((()=>this.emit(r)))}))}getConvFromCache(e){return h(this,null,(function*(){const t=yield this.mostRecentState.resultPromise;if(!t.ok)return A("NOT_IN_CACHE");if(null===t.value.stores)return E({status:404,errorCode:"USER_NOT_FOUND",reasons:["No user with that ID exists"]});const s=t.value.stores[e];return void 0===s?A("NOT_IN_CACHE"):s.store.getFromCache()}))}userCreated(e,t){this.mutate(e,(e=>null!==e.value.stores?e:C({lastChanged:e.value.lastChanged,stores:{},windowEnd:null})))}sideCreated(e,t){const s=this.getConvDataStore(t.state);this.mutate(e,(n=>Object.hasOwnProperty.call(n.value.stores,t.conversationId)?(s.unsubscribe(),n):C({lastChanged:e,stores:l(u({},n.value.stores),{[t.conversationId]:s}),windowEnd:n.value.windowEnd})))}sideDeleted(e,t){this.mutate(e,(s=>{var n;if(!Object.hasOwnProperty.call(s.value.stores,t.conversationId))return s;const r=u({},s.value.stores);return null==(n=r[t.conversationId])||n.unsubscribe(),delete r[t.conversationId],C({lastChanged:e,stores:r,windowEnd:s.value.windowEnd})}))}sideEdited(e,t){const s=t.diff.lastMessageAt;void 0!==s&&this.mutate(e,(n=>{var r;if(null===n.value.stores)return console.warn("[TalkJS] Received a 'side.edited' event when we thought your user didn't exist."),n;if(null===n.value.windowEnd)return n;const i=Object.hasOwnProperty.call(n.value.stores,t.conversationId);if(i&&s<n.value.windowEnd.oldestMessageTs){const s=u({},n.value.stores);return null==(r=s[t.conversationId])||r.unsubscribe(),delete s[t.conversationId],C({lastChanged:e,stores:s,windowEnd:n.value.windowEnd})}if(!i&&s>=n.value.windowEnd.oldestMessageTs){const s=this.getConvDataStore(t.conversationId);return C({lastChanged:e,stores:l(u({},n.value.stores),{[t.conversationId]:s}),windowEnd:n.value.windowEnd})}return n}))}}function Se(e){return h(this,arguments,(function*({cursor:e,realtimeClient:t,count:s}){const n={limit:s,cursor:e},r=yield t.call("GET",["me","conversations"],n,{bypassCache:!0});if(r.ok){const{data:e,cursor:t}=r.value.data;return C({conversations:e,nextCursor:t})}return r.ok||"server"!==r.where||404!==r.value.status||"USER_NOT_FOUND"!==r.value.errorCode?r:C({conversations:null,nextCursor:null})}))}function De({seq:e,prevStores:t,conversations:s,cursor:n,getConvDataStore:r}){const i=t?u({},t):{};for(const a of s)void 0===i[a.id]&&(i[a.id]=r(a));return C(null===n?{lastChanged:e,stores:i,windowEnd:null}:{lastChanged:e,stores:i,windowEnd:{cursor:n,oldestMessageTs:Math.min(...s.map((e=>e.lastMessageAt)))}})}class Me extends X{constructor(e,t,s,n){super(s,n),this.conversation=e,this.realtimeClient=t,this.unsubscribeDebounceMs=5e3}get conversationId(){return"string"==typeof this.conversation?this.conversation:this.conversation.id}fetchInitial(e){return h(this,null,(function*(){const t=this.realtimeClient.internalSubscribe(["me","conversations",this.conversationId,"messages"]);if("object"==typeof this.conversation)return C({lastChanged:e,snapshot:this.conversation,messageWindowStore:t});const s=yield this.realtimeClient.call("GET",["me","conversations",this.conversationId],{},{bypassCache:!0});let n;if(s.ok)n=s.value.data;else if("server"===s.where&&404===s.value.status)n=null;else{if("server"!==s.where||403!==s.value.status||"NOT_A_PARTICIPANT"!==s.value.errorCode)return t.unsubscribe(),s;n=null}return C({lastChanged:e,snapshot:n,messageWindowStore:t})}))}teardownNested(e){var t;null==(t=e.messageWindowStore)||t.unsubscribe()}anyChildChanged(e,t,s){return h(this,null,(function*(){return!0===(yield s.messageWindowStore.store.lastMessageChangedBetween(e,t))}))}equal(e,t){return Y(e.snapshot,t.snapshot)}loadNested(e,t){return h(this,null,(function*(){var s;if(!t.snapshot)return C({snapshot:null,loadedAll:!0});const n=yield t.messageWindowStore.store.getDeep(e);if(!n.ok)return n;const r=n.value.snapshot,i=null!=(s=null==r?void 0:r[0])?s:null;return C({snapshot:l(u({},t.snapshot),{lastMessage:i})})}))}participantEdited(e,t){this.mutate(e,(s=>null===s.value.snapshot?(console.warn("[TalkJS] Received a 'participant.edited' event for a conversation that we thought didn't exist."),s):C({lastChanged:e,snapshot:Fe(s.value.snapshot,t.diff),messageWindowStore:s.value.messageWindowStore})))}conversationEdited(e,t){this.mutate(e,(s=>null===s.value.snapshot?(console.warn("[TalkJS] Received a 'conversation.edited' event for a conversation that we thought didn't exist."),s):C({lastChanged:e,snapshot:Fe(s.value.snapshot,t.diff),messageWindowStore:s.value.messageWindowStore})))}sideEdited(e,t){this.mutate(e,(s=>null===s.value.snapshot?(console.warn("[TalkJS] Received a 'side.edited' event for a conversation that we thought didn't exist."),s):C({lastChanged:e,snapshot:Fe(s.value.snapshot,t.diff),messageWindowStore:s.value.messageWindowStore})))}sideCreated(e,t){this.mutate(e,(s=>s.value.snapshot?s:C({lastChanged:e,snapshot:t.state,messageWindowStore:s.value.messageWindowStore})))}sideDeleted(e,t){this.mutate(e,(t=>null===t.value.snapshot?t:C({lastChanged:e,snapshot:null,messageWindowStore:t.value.messageWindowStore})))}getFromCache(){return h(this,null,(function*(){const e=yield this.mostRecentState.resultPromise;return e.ok&&e.value.snapshot?C({status:200,data:e.value.snapshot}):A("NOT_IN_CACHE")}))}}function Fe(e,t){const s=t;return{id:e.id,createdAt:e.createdAt,subject:z(e.subject,s.subject),photoUrl:z(e.photoUrl,s.photoUrl),welcomeMessages:z(e.welcomeMessages,s.welcomeMessages),custom:J(e.custom,s.custom),lastMessageAt:z(e.lastMessageAt,s.lastMessageAt),unreadMessageCount:z(e.unreadMessageCount,s.unreadMessageCount),isUnread:z(e.isUnread,s.isUnread),access:z(e.access,s.access),notify:z(e.notify,s.notify),readUntil:z(e.readUntil,s.readUntil),everyoneReadUntil:z(e.everyoneReadUntil,s.everyoneReadUntil),joinedAt:e.joinedAt}}class Be extends X{constructor(e,t,s,n){super(s,n),this.userId=e,this.realtimeClient=t,this.unsubscribeDebounceMs=1e3}fetchInitial(e){return h(this,null,(function*(){const t=this.realtimeClient.internalSubscribe(["users",this.userId]),s=yield this.realtimeClient.call("GET",["users",this.userId,"online"],{},{bypassCache:!0});return s.ok||"server"!==s.where||404!==s.value.status||"USER_NOT_FOUND"!==s.value.errorCode?s.ok?C({lastChanged:e,user:t,data:s.value.data}):s:C({lastChanged:e,user:t,data:null})}))}equal(e,t){return Y(e.data,t.data)}teardownNested(e){e.user.unsubscribe()}anyChildChanged(e,t,s){return h(this,null,(function*(){return s.user.store.changedBetween(e,t)}))}loadNested(e,t){return h(this,null,(function*(){const s=yield t.user.store.getDeep(e);if(!s.ok)return s;const n=s.value.snapshot;return null===t.data||null===n?C({snapshot:null}):C({snapshot:u({user:n},t.data)})}))}userCreated(e,t){const s=this.fetchInitial(e);this.mutate(e,(e=>null!==e.value.data?(s.then((e=>{e.ok&&this.teardownNested(e.value)})),e):s))}userOnlineChanged(e,t){this.mutate(e,(s=>null===s.value.data?s:C({lastChanged:e,user:s.value.user,data:t.diff})))}getFromCache(){return h(this,null,(function*(){const e=yield this.mostRecentState.resultPromise;if(!e.ok)return A("NOT_IN_CACHE");if(null===e.value.data)return E({status:404,errorCode:"USER_NOT_FOUND",reasons:["No user with that ID exists"]});const t=e.value,{user:s}=t,n=c(t,["user"]);return C({status:200,data:u({},n.data)})}))}}class Ne{constructor(e,t,s){this.realtimeClient=s,this.convDataStores={},this.storeMap={},this.emitMutex=new Q,this.seqOffset=0,this.seqInThisConnection=0,this.refetchOnNextNetworkLoss=!0,this.connection=new L(e,t,{onUpstreamRestarting:()=>{this.refetchOnNextNetworkLoss=!1},onReady:()=>{this.refetchOnNextNetworkLoss=!0},onResubscribeSent:()=>{if(this.seqOffset+=this.seq,this.seqInThisConnection=0,this.refetchOnNextNetworkLoss){this.seqOffset++;const e=this.seq;this.refetchAll(e),this.emitAll(e)}},onResubscribeError:(e,t)=>{var s;null==(s=this.storeMap[Re(e)])||s.setError(t)},onPublish:(e,t)=>{this.seqInThisConnection=e;const s=this.seq;for(const n of t)this.handlePublish(s,n);this.emitAll(s)}})}get seq(){return this.seqOffset+this.seqInThisConnection}refetchAll(e){Object.values(this.storeMap).forEach((t=>null==t?void 0:t.refetch(e)))}emitAll(e){return this.emitMutex.runExclusive((()=>h(this,null,(function*(){const t=Object.values(this.storeMap).map((t=>null==t?void 0:t.emit(e)));yield Promise.all(t)}))))}handlePublish(e,t){var s,n,r,i,a,o,u,l,c,h,d,p,f,m,g,v,b,y,w,C,A,E,k,x,T,I,S;switch(t.type){case"user.created":return null==(s=this.storeMap[`/users/${t.userId}`])||s.userCreated(e,t),null==(n=this.storeMap["/me/conversations"])||n.userCreated(e,t),void(null==(r=this.storeMap[`/users/${t.userId}/online`])||r.userCreated(e,t));case"user.edited":return void(null==(i=this.storeMap[`/users/${t.userId}`])||i.userEdited(e,t));case"side.created":return null==(a=this.convDataStores[t.conversationId])||a.sideCreated(e,t),null==(o=this.storeMap[`/me/conversations/${t.conversationId}/messages`])||o.sideCreated(e,t),null==(u=this.storeMap[`/me/conversations/${t.conversationId}/participants`])||u.sideCreated(e,t),void(null==(l=this.storeMap["/me/conversations"])||l.sideCreated(e,t));case"side.edited":return null==(c=this.convDataStores[t.conversationId])||c.sideEdited(e,t),void(null==(h=this.storeMap["/me/conversations"])||h.sideEdited(e,t));case"side.deleted":return null==(d=this.convDataStores[t.conversationId])||d.sideDeleted(e,t),null==(p=this.storeMap[`/me/conversations/${t.conversationId}/messages`])||p.sideDeleted(e,t),null==(f=this.storeMap[`/me/conversations/${t.conversationId}/participants`])||f.sideDeleted(e,t),null==(m=this.storeMap[`/me/conversations/${t.conversationId}/typing`])||m.sideDeleted(e,t),void(null==(g=this.storeMap["/me/conversations"])||g.sideDeleted(e,t));case"conversation.edited":return void(null==(v=this.convDataStores[t.conversationId])||v.conversationEdited(e,t));case"message.created":return void(null==(b=this.storeMap[`/me/conversations/${t.conversationId}/messages`])||b.messageCreated(e,t));case"message.edited":return void(null==(y=this.storeMap[`/me/conversations/${t.conversationId}/messages`])||y.messageEdited(e,t));case"message.deleted":return void(null==(w=this.storeMap[`/me/conversations/${t.conversationId}/messages`])||w.messageDeleted(e,t));case"typing.available":return void(null==(C=this.storeMap[`/me/conversations/${t.conversationId}/typing`])||C.typingAvailable(e,t));case"typing.changed":return void(null==(A=this.storeMap[`/me/conversations/${t.conversationId}/typing`])||A.typingChanged(e,t));case"conversation.cleared":return void(null==(E=this.storeMap[`/me/conversations/${t.conversationId}/messages`])||E.conversationCleared(e,t));case"participant.edited":return null==(k=this.convDataStores[t.conversationId])||k.participantEdited(e,t),void(null==(x=this.storeMap[`/me/conversations/${t.conversationId}/participants`])||x.participantEdited(e,t));case"participant.created":return void(null==(T=this.storeMap[`/me/conversations/${t.conversationId}/participants`])||T.participantCreated(e,t));case"participant.deleted":return void(null==(I=this.storeMap[`/me/conversations/${t.conversationId}/participants`])||I.participantDeleted(e,t));case"user.online.changed":return void(null==(S=this.storeMap[`/users/${t.userId}/online`])||S.userOnlineChanged(e,t))}}call(e,t,s,n){return h(this,null,(function*(){if(!n.bypassCache&&"GET"===e){const e=Re(t);if(e in this.storeMap){const t=e,s=this.storeMap[t];if(s&&"getFromCache"in s){const e=yield s.getFromCache();if("NOT_IN_CACHE"!==e.value)return e}}else if(f(t,["me","conversations","*","messages","*"])){const e=this.storeMap[`/me/conversations/${t[2]}/messages`];if(e){const s=yield e.getMessageFromCache(t[4]);if("NOT_IN_CACHE"!==s.value)return s}}else if(f(t,["me","conversations","*","participants","*"])){const e=this.storeMap[`/me/conversations/${t[2]}/participants`];if(e){const s=yield e.getParticipantFromCache(t[4]);if("NOT_IN_CACHE"!==s.value)return s}}else if(f(t,["me","conversations","*"])){const e=this.storeMap["/me/conversations"];if(e){const s=yield e.getConvFromCache(t[2]);if("NOT_IN_CACHE"!==s.value)return s}}}return this.connection.call(e,t,s)}))}subscribe(e,t){const s=this.getOrCreateStore(e),n=y(),r=y();n.promise.catch((()=>{})),r.promise.catch((()=>{}));const i={state:{type:"pending",latestSnapshot:void 0},connected:n.promise,terminated:r.promise,loadMore:e=>h(this,null,(function*(){"loadMore"in s&&(yield s.loadMore(e))})),unsubscribe:()=>{}},a=s.listen((s=>{if(s.ok){const e=!("loadedAll"in s.value)||s.value.loadedAll,r={type:"active",latestSnapshot:s.value.snapshot,loadedAll:e};i.state=r,null==t||t(s.value.snapshot,e),n.resolve(r)}else if("pending"===i.state.type||"active"===i.state.type){if("server"===s.where){const t={type:"error",error:new Error(p(`Subscribe to ${e.join("/")}`,s.value))};return i.state=t,r.resolve(t),void n.reject("Subscription encountered an error during initial connection")}if("SESSION_DESTROYED"===s.value){const e={type:"error",error:new Error("Session was destroyed causing all subscriptions to be terminated")};return i.state=e,r.resolve(e),void n.reject("Subscription encountered an error during initial connection")}if("UNSUBSCRIBED"===s.value)return;if("TERMINATED"===s.value)return;s.value}}));return i.unsubscribe=()=>{if("pending"===i.state.type||"active"===i.state.type){a();const e={type:"unsubscribed"};i.state=e,r.resolve(e),n.reject("Subscription was unsubscribed before connecting")}},i}getOrCreateStore(e){const t=Re(e);if(t in this.storeMap)return this.storeMap[t];this.connection.subscribe(e).then((e=>{e.ok||s.setError(e)}));const s=this.instantiateStore(e,(()=>{delete this.storeMap[t],this.connection.unsubscribe(e)}));return this.storeMap[t]=s,s}destroy(){this.storeMap={},this.convDataStores={},this.connection.destroy()}isConnected(){return this.connection.isConnected()}instantiateStore(e,t){if(f(e,["users","*"]))return new te(e[1],this.realtimeClient,this.emitMutex,t);if(f(e,["me","conversations","*"]))return new ye(this.subscribeConvData(e[2]),this.realtimeClient,this.emitMutex,t);if(f(e,["me","conversations","*","messages"]))return new ge(e[2],this.realtimeClient,this.emitMutex,t);if(f(e,["me","conversations","*","participants"]))return new ke(e[2],this.realtimeClient,this.emitMutex,t);if(f(e,["me","conversations","*","typing"]))return new Ae(e[2],this.realtimeClient,this.emitMutex,t);if(f(e,["me","conversations"]))return new Ie((e=>this.subscribeConvData(e)),this.realtimeClient,this.emitMutex,t);if(f(e,["users","*","online"]))return new Be(e[1],this.realtimeClient,this.emitMutex,t);throw"Unreachable"}subscribeConvData(e){const t="string"==typeof e?e:e.id;if(Object.hasOwnProperty.call(this.convDataStores,t)){const e=this.convDataStores[t];return{store:e,unsubscribe:e.registerInternalSubscription()}}const s=new Me(e,this.realtimeClient,this.emitMutex,(()=>{delete this.convDataStores[t]}));return this.convDataStores[t]=s,{store:s,unsubscribe:s.registerInternalSubscription()}}}function Re(e){return`/${e.join("/")}`}class Pe{constructor(e,t,s){this.userId=t,this.alive=!0,this.connection=new Ne(e,s,this),s.onTokenRefreshFailed((()=>{this.destroy()}))}call(e,t,s){return h(this,arguments,(function*(e,t,s,n={}){return this.alive?this.connection.call(e,t,s,n):A("SESSION_DESTROYED")}))}subscribe(e,t){return this.connection.subscribe(e,t)}internalSubscribe(e){const t=this.connection.getOrCreateStore(e);return{store:t,unsubscribe:t.registerInternalSubscription()}}destroy(){this.alive=!1,this.connection.destroy()}isConnected(){return this.connection.isConnected()}listMessages(e,t){return h(this,null,(function*(){const s=yield this.call("GET",["me","conversations",e,"messages"],t);if(!s.ok)return Oe(s,"Listing messages in "+e);const n=s.value.data.data,r=yield Promise.all(n.map((t=>this.createMessageSnapshot(t,e)))),i=r.find((e=>!e.ok));return void 0===i||i.ok?C(r.map((({value:e})=>e))):i}))}createConversationSnapshotPreloaded(e,t){return{id:e.id,subject:e.subject,photoUrl:e.photoUrl,welcomeMessages:e.welcomeMessages,custom:e.custom,createdAt:e.createdAt,joinedAt:e.joinedAt,lastMessageAt:e.lastMessageAt,unreadMessageCount:e.unreadMessageCount,isUnread:e.isUnread,access:e.access,notify:e.notify,lastMessage:t,readUntil:e.readUntil,everyoneReadUntil:e.everyoneReadUntil}}createUserSnapshot(e){return{id:e.id,name:e.name,custom:e.custom,locale:e.locale,photoUrl:e.photoUrl,role:e.role,welcomeMessage:e.welcomeMessage}}createParticipantSnapshotPreloaded(e,t){return{user:t,access:e.access,notify:e.notify,joinedAt:e.joinedAt}}createMessageSnapshot(e,t){return h(this,null,(function*(){const s=null===e.senderId?Promise.resolve(C(null)):this.getUser(e.senderId),n=null===e.referencedMessageId?Promise.resolve(C(null)):this.getReferencedMessage(t,e.referencedMessageId),r=yield s;if(!r.ok)return r;const i=yield n;return i.ok?C(this.createMessageSnapshotPreloaded(e,r.value,i.value)):i}))}getReferencedMessage(e,t){return h(this,null,(function*(){const s=yield this.call("GET",["me","conversations",e,"messages",t],{});if(!s.ok&&"server"===s.where&&404===s.value.status)return C(null);if(!s.ok&&"server"===s.where&&403===s.value.status&&"NOT_A_PARTICIPANT"===s.value.errorCode)return C(null);if(!s.ok)return Oe(s,`Fetching referenced message ${t} in conversation ${e}`);const n=s.value.data,r=yield this.getUser(n.senderId);if(!r.ok)return r;const i=r.value;return C(this.createReferencedMessageSnapshotPreloaded(n,i))}))}getUser(e){return h(this,null,(function*(){const t=yield this.call("GET",["users",e],{includePrivateFields:!1});return t.ok||"server"!==t.where||404!==t.value.status?t.ok?C(this.createUserSnapshot(t.value.data)):Oe(t,"Get user "+e):C(null)}))}createMessageSnapshotPreloaded(e,t,s){return{id:e.id,type:e.type,sender:t,referencedMessage:s,custom:e.custom,createdAt:e.createdAt,editedAt:e.editedAt,origin:e.origin,content:e.content,plaintext:de(e.content,{})}}createReferencedMessageSnapshotPreloaded(e,t){return{id:e.id,type:e.type,sender:t,referencedMessageId:e.referencedMessageId,custom:e.custom,createdAt:e.createdAt,editedAt:e.editedAt,origin:e.origin,content:e.content,plaintext:de(e.content,{})}}}function Oe(e,t){return"server"===e.where?E(l(u({},e.value),{operation:t})):e}function _e(e,t){var s;if(t.ok)return t.value;throw"SESSION_DESTROYED"===t.value?new Error(`${e} failed because the session was destroyed`):new Error(p(null!=(s=t.value.operation)?s:e,t.value))}class Ue{constructor(e,t){this.id=e,this._realtimeClient=t}get brandedId(){return this.id}get(){return h(this,null,(function*(){const e=yield this._realtimeClient.getUser(this.brandedId);return _e("Get user "+this.id,e)}))}set(e){return h(this,null,(function*(){null===e.role&&(e.role="default");const t="string"==typeof e.email?[e.email]:e.email,s="string"==typeof e.phone?[e.phone]:e.phone,n=yield this._realtimeClient.call("PUT",["users",this.brandedId],l(u({},e),{email:t,phone:s}));d("Set user "+this.id,n)}))}createIfNotExists(e){return h(this,null,(function*(){void 0===e.role&&(e.role="default");const t="string"==typeof e.email?[e.email]:e.email,s="string"==typeof e.phone?[e.phone]:e.phone,n=yield this._realtimeClient.call("POST",["users",this.brandedId],l(u({},e),{email:t,phone:s}));(n.ok||"server"!==n.where||409!=n.value.status)&&d(`Create user ${this.id} if not exists`,n)}))}subscribe(e){return this._realtimeClient.subscribe(["users",this.brandedId],e)}subscribeOnline(e){return this._realtimeClient.subscribe(["users",this.brandedId,"online"],e)}}class je{constructor(e,t,s){this.userId=e,this.conversationId=t,this._realtimeClient=s}get brandedUserId(){return this.userId}get brandedConversationId(){return this.conversationId}get(){return h(this,null,(function*(){const e=yield this._realtimeClient.call("GET",["me","conversations",this.brandedConversationId,"participants",this.brandedUserId],{}),t=yield this._realtimeClient.call("GET",["users",this.brandedUserId],{includePrivateFields:!1}),[s,n]=yield Promise.all([e,t]);if(!s.ok&&"server"===s.where&&404===s.value.status)return null;if(!n.ok&&"server"===n.where&&404===n.value.status)return null;const r=d(`Get participant ${this.userId} in conversation ${this.conversationId}`,s),i=d(`Get user ${this.userId}`,n),a=this._realtimeClient.createUserSnapshot(i);return this._realtimeClient.createParticipantSnapshotPreloaded(r,a)}))}set(){return h(this,arguments,(function*(e={}){const t=yield this._realtimeClient.call("PUT",["conversations",this.brandedConversationId,"participants",this.brandedUserId],e);d(`Set participant ${this.userId} in conversation ${this.conversationId}`,t)}))}edit(){return h(this,arguments,(function*(e={}){const t=yield this._realtimeClient.call("PATCH",["conversations",this.brandedConversationId,"participants",this.brandedUserId],e);d(`Edit participant ${this.userId} in conversation ${this.conversationId}`,t)}))}createIfNotExists(){return h(this,arguments,(function*(e={}){const t=yield this._realtimeClient.call("POST",["conversations",this.brandedConversationId,"participants",this.brandedUserId],e);(t.ok||"server"!==t.where||409!==t.value.status)&&d(`Add participant ${this.userId} to conversation ${this.conversationId}`,t)}))}delete(){return h(this,null,(function*(){const e=yield this._realtimeClient.call("DELETE",["conversations",this.brandedConversationId,"participants",this.brandedUserId],{});(e.ok||"server"!==e.where||404!==e.value.status)&&d(`Remove participant ${this.userId} from conversation ${this.conversationId}`,e)}))}}function $e(e){const t="-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz";let s=0;const n=[],r=e===s;s=e;const i=new Array(8);for(let o=7;o>=0;o--)i[o]=t.charAt(e%64),e=Math.floor(e/64);if(0!==e)throw new Error("We should have converted the entire timestamp.");let a=i.join("");if(r){let e;for(e=11;e>=0&&63===n[e];e--)n[e]=0;n[e]++}else for(let o=0;o<12;o++)n[o]=Math.floor(64*Math.random());for(let o=0;o<12;o++)a+=t.charAt(n[o]);if(20!=a.length)throw new Error("Length should be 20.");return a}const We=(e,t,s=void 0)=>e.reduce(((e,n,r)=>e.concat((e=>{if("string"==typeof e)return t(e,s);switch(e.type){case"bold":case"italic":case"strikethrough":case"blockquote":case"bulletlist":case"bulletList":case"bulletpoint":case"bulletPoint":return[{type:e.type,children:We(e.children,t,e.type)}];case"link":return[{type:e.type,url:e.url,children:We(e.children,t,e.type)}];case"actionlink":case"actionLink":case"actionbutton":case"actionButton":return[{type:e.type,action:e.action,params:e.params,children:We(e.children,t,e.type)}];case"mention":case"autolink":case"autoLink":case"codeblock":case"codeBlock":case"codespan":case"codeSpan":case"suppressed":case"emoji":case"customemoji":case"customEmoji":return[e]}})(n))),[]);function qe(e,t){return s=>{const n=s;let r=0;const i=[];for(const a of re(s,e)){a.index-r>0&&i.push(n.substring(r,a.index));const e=t(a);Array.isArray(e)?i.push(...e):i.push(e),r=a.index+a[0].length}return r<s.length&&i.push(s.substring(r)),i}}const He="’'()[]{}<>:,‒–—―…!.«»-‐?‘’“”;/⁄␠·&@*\\•^¤¢$€£¥₩₪†‡°¡¿¬#№%‰‱¶′§~¨_|¦⁂☞∴‽※".replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&");var Ge,Le=((Ge=Le||{})[Ge.italic=1]="italic",Ge[Ge.strikethrough=2]="strikethrough",Ge[Ge.bold=4]="bold",Ge);const ze=[0,1,2,3,4,5,6].map((e=>{const t=[];return 1&e||t.push(/_([^\s_].*?[^\s_])_|_([^\s_])_/),2&e||t.push(/~([^\s~].*?[^\s~])~|~([^\s~])~/),4&e||t.push(/\*([^\s*].*?[^\s*])\*|\*([^\s*])\*/),new RegExp(t.map((e=>e.source)).join("|"),"g")})),Je={_:1,"*":4,"~":2};function Ye(e){return Qe(e,0)}function Qe(e,t=0){const s=ze[t],n=s?function(e){const t=qe(Ve.getOrCompute(e,(()=>new RegExp(`(?:^|[\\s${He}])(?:${e.source})(?=[\\s${He}]|$)`,"g"))),(e=>{const t=e[0][1],s=e[1]||e[2]||e[3]||e[4]||e[5]||e[6];return[" ",{type:Le[Je[t]],children:[s]}]}));return e=>{const[s,...n]=t(" "+e);return s.length>1&&n.unshift(s.substring(1)),n}}(s):()=>[e];return We(n(e),((e,s)=>"bold"===s||"italic"===s||"strikethrough"===s?Qe(e,t|Le[s]):[e]))}const Ve=function(){const e=function(){try{return new WeakMap}catch(e){const t={has:()=>!1,get:()=>{},set:()=>t};return t}}();return{getOrCompute(t,s){if(e.has(t))return e.get(t);const n=s();return e.set(t,n),n}}}();function Ze(e,t){if(Array.prototype.indexOf)return e.indexOf(t);for(var s=0,n=e.length;s<n;s++)if(e[s]===t)return s;return-1}function Ke(e,t){for(var s=e.length-1;s>=0;s--)!0===t(e[s])&&e.splice(s,1)}function Xe(e){throw new Error("Unhandled case for value: '"+e+"'")}var et=function(){function e(e){void 0===e&&(e={}),this.tagName="",this.attrs={},this.innerHTML="",this.whitespaceRegex=/\s+/,this.tagName=e.tagName||"",this.attrs=e.attrs||{},this.innerHTML=e.innerHtml||e.innerHTML||""}return e.prototype.setTagName=function(e){return this.tagName=e,this},e.prototype.getTagName=function(){return this.tagName||""},e.prototype.setAttr=function(e,t){return this.getAttrs()[e]=t,this},e.prototype.getAttr=function(e){return this.getAttrs()[e]},e.prototype.setAttrs=function(e){return Object.assign(this.getAttrs(),e),this},e.prototype.getAttrs=function(){return this.attrs||(this.attrs={})},e.prototype.setClass=function(e){return this.setAttr("class",e)},e.prototype.addClass=function(e){for(var t,s=this.getClass(),n=this.whitespaceRegex,r=s?s.split(n):[],i=e.split(n);t=i.shift();)-1===Ze(r,t)&&r.push(t);return this.getAttrs().class=r.join(" "),this},e.prototype.removeClass=function(e){for(var t,s=this.getClass(),n=this.whitespaceRegex,r=s?s.split(n):[],i=e.split(n);r.length&&(t=i.shift());){var a=Ze(r,t);-1!==a&&r.splice(a,1)}return this.getAttrs().class=r.join(" "),this},e.prototype.getClass=function(){return this.getAttrs().class||""},e.prototype.hasClass=function(e){return-1!==(" "+this.getClass()+" ").indexOf(" "+e+" ")},e.prototype.setInnerHTML=function(e){return this.innerHTML=e,this},e.prototype.setInnerHtml=function(e){return this.setInnerHTML(e)},e.prototype.getInnerHTML=function(){return this.innerHTML||""},e.prototype.getInnerHtml=function(){return this.getInnerHTML()},e.prototype.toAnchorString=function(){var e=this.getTagName(),t=this.buildAttrsStr();return["<",e,t=t?" "+t:"",">",this.getInnerHtml(),"</",e,">"].join("")},e.prototype.buildAttrsStr=function(){if(!this.attrs)return"";var e=this.getAttrs(),t=[];for(var s in e)e.hasOwnProperty(s)&&t.push(s+'="'+e[s]+'"');return t.join(" ")},e}(),tt=function(){function e(e){void 0===e&&(e={}),this.newWindow=!1,this.truncate={},this.className="",this.newWindow=e.newWindow||!1,this.truncate=e.truncate||{},this.className=e.className||""}return e.prototype.build=function(e){return new et({tagName:"a",attrs:this.createAttrs(e),innerHtml:this.processAnchorText(e.getAnchorText())})},e.prototype.createAttrs=function(e){var t={href:e.getAnchorHref()},s=this.createCssClass(e);return s&&(t.class=s),this.newWindow&&(t.target="_blank",t.rel="noopener noreferrer"),this.truncate&&this.truncate.length&&this.truncate.length<e.getAnchorText().length&&(t.title=e.getAnchorHref()),t},e.prototype.createCssClass=function(e){var t=this.className;if(t){for(var s=[t],n=e.getCssClassSuffixes(),r=0,i=n.length;r<i;r++)s.push(t+"-"+n[r]);return s.join(" ")}return""},e.prototype.processAnchorText=function(e){return this.doTruncate(e)},e.prototype.doTruncate=function(e){var t=this.truncate;if(!t||!t.length)return e;var s,n,r,i,a=t.length,o=t.location;return"smart"===o?function(e,t,s){var n,r;null==s?(s="&hellip;",r=3,n=8):(r=s.length,n=s.length);var i=function(e){var t="";return e.scheme&&e.host&&(t+=e.scheme+"://"),e.host&&(t+=e.host),e.path&&(t+="/"+e.path),e.query&&(t+="?"+e.query),e.fragment&&(t+="#"+e.fragment),t},a=function(e,t){var n=t/2,r=Math.ceil(n),i=-1*Math.floor(n),a="";return i<0&&(a=e.substr(i)),e.substr(0,r)+s+a};if(e.length<=t)return e;var o,u,l,c=t-r,h=(o={},(l=(u=e).match(/^([a-z]+):\/\//i))&&(o.scheme=l[1],u=u.substr(l[0].length)),(l=u.match(/^(.*?)(?=(\?|#|\/|$))/i))&&(o.host=l[1],u=u.substr(l[0].length)),(l=u.match(/^\/(.*?)(?=(\?|#|$))/i))&&(o.path=l[1],u=u.substr(l[0].length)),(l=u.match(/^\?(.*?)(?=(#|$))/i))&&(o.query=l[1],u=u.substr(l[0].length)),(l=u.match(/^#(.*?)$/i))&&(o.fragment=l[1]),o);if(h.query){var d=h.query.match(/^(.*?)(?=(\?|\#))(.*?)$/i);d&&(h.query=h.query.substr(0,d[1].length),e=i(h))}if(e.length<=t)return e;if(h.host&&(h.host=h.host.replace(/^www\./,""),e=i(h)),e.length<=t)return e;var p="";if(h.host&&(p+=h.host),p.length>=c)return h.host.length==t?(h.host.substr(0,t-r)+s).substr(0,c+n):a(p,c).substr(0,c+n);var f="";if(h.path&&(f+="/"+h.path),h.query&&(f+="?"+h.query),f){if((p+f).length>=c)return(p+f).length==t?(p+f).substr(0,t):(p+a(f,c-p.length)).substr(0,c+n);p+=f}if(h.fragment){var m="#"+h.fragment;if((p+m).length>=c)return(p+m).length==t?(p+m).substr(0,t):(p+a(m,c-p.length)).substr(0,c+n);p+=m}if(h.scheme&&h.host){var g=h.scheme+"://";if((p+g).length<c)return(g+p).substr(0,t)}if(p.length<=t)return p;var v="";return c>0&&(v=p.substr(-1*Math.floor(c/2))),(p.substr(0,Math.ceil(c/2))+s+v).substr(0,c+n)}(e,a):"middle"===o?function(e,t,s){if(e.length<=t)return e;var n,r;null==s?(s="&hellip;",n=8,r=3):(n=s.length,r=s.length);var i=t-r,a="";return i>0&&(a=e.substr(-1*Math.floor(i/2))),(e.substr(0,Math.ceil(i/2))+s+a).substr(0,i+n)}(e,a):(n=a,r=void 0,(s=e).length>n&&(null==r?(r="&hellip;",i=3):i=r.length,s=s.substring(0,n-i)+r),s)},e}(),st=function(){function e(e){this.__jsduckDummyDocProp=null,this.matchedText="",this.offset=0,this.tagBuilder=e.tagBuilder,this.matchedText=e.matchedText,this.offset=e.offset}return e.prototype.getMatchedText=function(){return this.matchedText},e.prototype.setOffset=function(e){this.offset=e},e.prototype.getOffset=function(){return this.offset},e.prototype.getCssClassSuffixes=function(){return[this.getType()]},e.prototype.buildTag=function(){return this.tagBuilder.build(this)},e}(),nt=function(e,t){return(nt=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var s in t)t.hasOwnProperty(s)&&(e[s]=t[s])})(e,t)};function rt(e,t){function s(){this.constructor=e}nt(e,t),e.prototype=null===t?Object.create(t):(s.prototype=t.prototype,new s)}var it,at=function(){return at=Object.assign||function(e){for(var t,s=1,n=arguments.length;s<n;s++)for(var r in t=arguments[s])Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e},at.apply(this,arguments)},ot=function(e){function t(t){var s=e.call(this,t)||this;return s.email="",s.email=t.email,s}return rt(t,e),t.prototype.getType=function(){return"email"},t.prototype.getEmail=function(){return this.email},t.prototype.getAnchorHref=function(){return"mailto:"+this.email},t.prototype.getAnchorText=function(){return this.email},t}(st),ut=function(e){function t(t){var s=e.call(this,t)||this;return s.serviceName="",s.hashtag="",s.serviceName=t.serviceName,s.hashtag=t.hashtag,s}return rt(t,e),t.prototype.getType=function(){return"hashtag"},t.prototype.getServiceName=function(){return this.serviceName},t.prototype.getHashtag=function(){return this.hashtag},t.prototype.getAnchorHref=function(){var e=this.serviceName,t=this.hashtag;switch(e){case"twitter":return"https://twitter.com/hashtag/"+t;case"facebook":return"https://www.facebook.com/hashtag/"+t;case"instagram":return"https://instagram.com/explore/tags/"+t;default:throw new Error("Unknown service name to point hashtag to: "+e)}},t.prototype.getAnchorText=function(){return"#"+this.hashtag},t}(st),lt=function(e){function t(t){var s=e.call(this,t)||this;return s.serviceName="twitter",s.mention="",s.mention=t.mention,s.serviceName=t.serviceName,s}return rt(t,e),t.prototype.getType=function(){return"mention"},t.prototype.getMention=function(){return this.mention},t.prototype.getServiceName=function(){return this.serviceName},t.prototype.getAnchorHref=function(){switch(this.serviceName){case"twitter":return"https://twitter.com/"+this.mention;case"instagram":return"https://instagram.com/"+this.mention;case"soundcloud":return"https://soundcloud.com/"+this.mention;default:throw new Error("Unknown service name to point mention to: "+this.serviceName)}},t.prototype.getAnchorText=function(){return"@"+this.mention},t.prototype.getCssClassSuffixes=function(){var t=e.prototype.getCssClassSuffixes.call(this),s=this.getServiceName();return s&&t.push(s),t},t}(st),ct=function(e){function t(t){var s=e.call(this,t)||this;return s.number="",s.plusSign=!1,s.number=t.number,s.plusSign=t.plusSign,s}return rt(t,e),t.prototype.getType=function(){return"phone"},t.prototype.getPhoneNumber=function(){return this.number},t.prototype.getNumber=function(){return this.getPhoneNumber()},t.prototype.getAnchorHref=function(){return"tel:"+(this.plusSign?"+":"")+this.number},t.prototype.getAnchorText=function(){return this.matchedText},t}(st),ht=function(e){function t(t){var s=e.call(this,t)||this;return s.url="",s.urlMatchType="scheme",s.protocolUrlMatch=!1,s.protocolRelativeMatch=!1,s.stripPrefix={scheme:!0,www:!0},s.stripTrailingSlash=!0,s.decodePercentEncoding=!0,s.schemePrefixRegex=/^(https?:\/\/)?/i,s.wwwPrefixRegex=/^(https?:\/\/)?(www\.)?/i,s.protocolRelativeRegex=/^\/\//,s.protocolPrepended=!1,s.urlMatchType=t.urlMatchType,s.url=t.url,s.protocolUrlMatch=t.protocolUrlMatch,s.protocolRelativeMatch=t.protocolRelativeMatch,s.stripPrefix=t.stripPrefix,s.stripTrailingSlash=t.stripTrailingSlash,s.decodePercentEncoding=t.decodePercentEncoding,s}return rt(t,e),t.prototype.getType=function(){return"url"},t.prototype.getUrlMatchType=function(){return this.urlMatchType},t.prototype.getUrl=function(){var e=this.url;return this.protocolRelativeMatch||this.protocolUrlMatch||this.protocolPrepended||(e=this.url="http://"+e,this.protocolPrepended=!0),e},t.prototype.getAnchorHref=function(){return this.getUrl().replace(/&amp;/g,"&")},t.prototype.getAnchorText=function(){var e=this.getMatchedText();return this.protocolRelativeMatch&&(e=this.stripProtocolRelativePrefix(e)),this.stripPrefix.scheme&&(e=this.stripSchemePrefix(e)),this.stripPrefix.www&&(e=this.stripWwwPrefix(e)),this.stripTrailingSlash&&(e=this.removeTrailingSlash(e)),this.decodePercentEncoding&&(e=this.removePercentEncoding(e)),e},t.prototype.stripSchemePrefix=function(e){return e.replace(this.schemePrefixRegex,"")},t.prototype.stripWwwPrefix=function(e){return e.replace(this.wwwPrefixRegex,"$1")},t.prototype.stripProtocolRelativePrefix=function(e){return e.replace(this.protocolRelativeRegex,"")},t.prototype.removeTrailingSlash=function(e){return"/"===e.charAt(e.length-1)&&(e=e.slice(0,-1)),e},t.prototype.removePercentEncoding=function(e){var t=e.replace(/%22/gi,"&quot;").replace(/%26/gi,"&amp;").replace(/%27/gi,"&#39;").replace(/%3C/gi,"&lt;").replace(/%3E/gi,"&gt;");try{return decodeURIComponent(t)}catch(s){return t}},t}(st),dt=function(e){this.__jsduckDummyDocProp=null,this.tagBuilder=e.tagBuilder},pt=/[A-Za-z]/,ft=/[\d]/,mt=/[\D]/,gt=/\s/,vt=/['"]/,bt=/[\x00-\x1F\x7F]/,yt=/A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC/.source,wt=yt+/\u2700-\u27bf\udde6-\uddff\ud800-\udbff\udc00-\udfff\ufe0e\ufe0f\u0300-\u036f\ufe20-\ufe23\u20d0-\u20f0\ud83c\udffb-\udfff\u200d\u3299\u3297\u303d\u3030\u24c2\ud83c\udd70-\udd71\udd7e-\udd7f\udd8e\udd91-\udd9a\udde6-\uddff\ude01-\ude02\ude1a\ude2f\ude32-\ude3a\ude50-\ude51\u203c\u2049\u25aa-\u25ab\u25b6\u25c0\u25fb-\u25fe\u00a9\u00ae\u2122\u2139\udc04\u2600-\u26FF\u2b05\u2b06\u2b07\u2b1b\u2b1c\u2b50\u2b55\u231a\u231b\u2328\u23cf\u23e9-\u23f3\u23f8-\u23fa\udccf\u2935\u2934\u2190-\u21ff/.source+/\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D4-\u08E1\u08E3-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C00-\u0C03\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D01-\u0D03\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D82\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u1885\u1886\u18A9\u1920-\u192B\u1930-\u193B\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF2-\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF5\u1DFB-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA880\uA881\uA8B4-\uA8C5\uA8E0-\uA8F1\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9E5\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F/.source,Ct=/0-9\u0660-\u0669\u06F0-\u06F9\u07C0-\u07C9\u0966-\u096F\u09E6-\u09EF\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0BE6-\u0BEF\u0C66-\u0C6F\u0CE6-\u0CEF\u0D66-\u0D6F\u0DE6-\u0DEF\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F29\u1040-\u1049\u1090-\u1099\u17E0-\u17E9\u1810-\u1819\u1946-\u194F\u19D0-\u19D9\u1A80-\u1A89\u1A90-\u1A99\u1B50-\u1B59\u1BB0-\u1BB9\u1C40-\u1C49\u1C50-\u1C59\uA620-\uA629\uA8D0-\uA8D9\uA900-\uA909\uA9D0-\uA9D9\uA9F0-\uA9F9\uAA50-\uAA59\uABF0-\uABF9\uFF10-\uFF19/.source,At=wt+Ct,Et=wt+Ct,kt="(?:["+Ct+"]{1,3}\\.){3}["+Ct+"]{1,3}",xt="["+Et+"](?:["+Et+"\\-]{0,61}["+Et+"])?",Tt=function(e){return"(?=("+xt+"))\\"+e},It=function(e){return"(?:"+Tt(e)+"(?:\\."+Tt(e+1)+"){0,126}|"+kt+")"},St=new RegExp("["+Et+"]"),Dt=/(?:xn--vermgensberatung-pwb|xn--vermgensberater-ctb|xn--clchc0ea0b2g2a9gcd|xn--w4r85el8fhu5dnra|northwesternmutual|travelersinsurance|vermögensberatung|xn--3oq18vl8pn36a|xn--5su34j936bgsg|xn--bck1b9a5dre4c|xn--mgbai9azgqp6j|xn--mgberp4a5d4ar|xn--xkc2dl3a5ee0h|vermögensberater|xn--fzys8d69uvgm|xn--mgba7c0bbn0a|xn--xkc2al3hye2a|americanexpress|kerryproperties|sandvikcoromant|xn--i1b6b1a6a2e|xn--kcrx77d1x4a|xn--lgbbat1ad8j|xn--mgba3a4f16a|xn--mgbaakc7dvf|xn--mgbc0a9azcg|xn--nqv7fs00ema|afamilycompany|americanfamily|bananarepublic|cancerresearch|cookingchannel|kerrylogistics|weatherchannel|xn--54b7fta0cc|xn--6qq986b3xl|xn--80aqecdr1a|xn--b4w605ferd|xn--fiq228c5hs|xn--h2breg3eve|xn--jlq61u9w7b|xn--mgba3a3ejt|xn--mgbaam7a8h|xn--mgbayh7gpa|xn--mgbb9fbpob|xn--mgbbh1a71e|xn--mgbca7dzdo|xn--mgbi4ecexp|xn--mgbx4cd0ab|xn--rvc1e0am3e|international|lifeinsurance|spreadbetting|travelchannel|wolterskluwer|xn--eckvdtc9d|xn--fpcrj9c3d|xn--fzc2c9e2c|xn--h2brj9c8c|xn--tiq49xqyj|xn--yfro4i67o|xn--ygbi2ammx|construction|lplfinancial|scholarships|versicherung|xn--3e0b707e|xn--45br5cyl|xn--80adxhks|xn--80asehdb|xn--8y0a063a|xn--gckr3f0f|xn--mgb9awbf|xn--mgbab2bd|xn--mgbgu82a|xn--mgbpl2fh|xn--mgbt3dhd|xn--mk1bu44c|xn--ngbc5azd|xn--ngbe9e0a|xn--ogbpf8fl|xn--qcka1pmc|accountants|barclaycard|blackfriday|blockbuster|bridgestone|calvinklein|contractors|creditunion|engineering|enterprises|foodnetwork|investments|kerryhotels|lamborghini|motorcycles|olayangroup|photography|playstation|productions|progressive|redumbrella|rightathome|williamhill|xn--11b4c3d|xn--1ck2e1b|xn--1qqw23a|xn--2scrj9c|xn--3bst00m|xn--3ds443g|xn--3hcrj9c|xn--42c2d9a|xn--45brj9c|xn--55qw42g|xn--6frz82g|xn--80ao21a|xn--9krt00a|xn--cck2b3b|xn--czr694b|xn--d1acj3b|xn--efvy88h|xn--estv75g|xn--fct429k|xn--fjq720a|xn--flw351e|xn--g2xx48c|xn--gecrj9c|xn--gk3at1e|xn--h2brj9c|xn--hxt814e|xn--imr513n|xn--j6w193g|xn--jvr189m|xn--kprw13d|xn--kpry57d|xn--kpu716f|xn--mgbbh1a|xn--mgbtx2b|xn--mix891f|xn--nyqy26a|xn--otu796d|xn--pbt977c|xn--pgbs0dh|xn--q9jyb4c|xn--rhqv96g|xn--rovu88b|xn--s9brj9c|xn--ses554g|xn--t60b56a|xn--vuq861b|xn--w4rs40l|xn--xhq521b|xn--zfr164b|சிங்கப்பூர்|accountant|apartments|associates|basketball|bnpparibas|boehringer|capitalone|consulting|creditcard|cuisinella|eurovision|extraspace|foundation|healthcare|immobilien|industries|management|mitsubishi|nationwide|newholland|nextdirect|onyourside|properties|protection|prudential|realestate|republican|restaurant|schaeffler|swiftcover|tatamotors|technology|telefonica|university|vistaprint|vlaanderen|volkswagen|xn--30rr7y|xn--3pxu8k|xn--45q11c|xn--4gbrim|xn--55qx5d|xn--5tzm5g|xn--80aswg|xn--90a3ac|xn--9dbq2a|xn--9et52u|xn--c2br7g|xn--cg4bki|xn--czrs0t|xn--czru2d|xn--fiq64b|xn--fiqs8s|xn--fiqz9s|xn--io0a7i|xn--kput3i|xn--mxtq1m|xn--o3cw4h|xn--pssy2u|xn--unup4y|xn--wgbh1c|xn--wgbl6a|xn--y9a3aq|accenture|alfaromeo|allfinanz|amsterdam|analytics|aquarelle|barcelona|bloomberg|christmas|community|directory|education|equipment|fairwinds|financial|firestone|fresenius|frontdoor|fujixerox|furniture|goldpoint|hisamitsu|homedepot|homegoods|homesense|honeywell|institute|insurance|kuokgroup|ladbrokes|lancaster|landrover|lifestyle|marketing|marshalls|melbourne|microsoft|panasonic|passagens|pramerica|richardli|scjohnson|shangrila|solutions|statebank|statefarm|stockholm|travelers|vacations|xn--90ais|xn--c1avg|xn--d1alf|xn--e1a4c|xn--fhbei|xn--j1aef|xn--j1amh|xn--l1acc|xn--ngbrx|xn--nqv7f|xn--p1acf|xn--tckwe|xn--vhquv|yodobashi|abudhabi|airforce|allstate|attorney|barclays|barefoot|bargains|baseball|boutique|bradesco|broadway|brussels|budapest|builders|business|capetown|catering|catholic|chrysler|cipriani|cityeats|cleaning|clinique|clothing|commbank|computer|delivery|deloitte|democrat|diamonds|discount|discover|download|engineer|ericsson|esurance|etisalat|everbank|exchange|feedback|fidelity|firmdale|football|frontier|goodyear|grainger|graphics|guardian|hdfcbank|helsinki|holdings|hospital|infiniti|ipiranga|istanbul|jpmorgan|lighting|lundbeck|marriott|maserati|mckinsey|memorial|merckmsd|mortgage|movistar|observer|partners|pharmacy|pictures|plumbing|property|redstone|reliance|saarland|samsclub|security|services|shopping|showtime|softbank|software|stcgroup|supplies|symantec|training|uconnect|vanguard|ventures|verisign|woodside|xn--90ae|xn--node|xn--p1ai|xn--qxam|yokohama|السعودية|abogado|academy|agakhan|alibaba|android|athleta|auction|audible|auspost|avianca|banamex|bauhaus|bentley|bestbuy|booking|brother|bugatti|capital|caravan|careers|cartier|channel|charity|chintai|citadel|clubmed|college|cologne|comcast|company|compare|contact|cooking|corsica|country|coupons|courses|cricket|cruises|dentist|digital|domains|exposed|express|farmers|fashion|ferrari|ferrero|finance|fishing|fitness|flights|florist|flowers|forsale|frogans|fujitsu|gallery|genting|godaddy|grocery|guitars|hamburg|hangout|hitachi|holiday|hosting|hoteles|hotmail|hyundai|iselect|ismaili|jewelry|juniper|kitchen|komatsu|lacaixa|lancome|lanxess|lasalle|latrobe|leclerc|liaison|limited|lincoln|markets|metlife|monster|netbank|netflix|network|neustar|okinawa|oldnavy|organic|origins|philips|pioneer|politie|realtor|recipes|rentals|reviews|rexroth|samsung|sandvik|schmidt|schwarz|science|shiksha|shriram|singles|staples|starhub|storage|support|surgery|systems|temasek|theater|theatre|tickets|tiffany|toshiba|trading|walmart|wanggou|watches|weather|website|wedding|whoswho|windows|winners|xfinity|yamaxun|youtube|zuerich|католик|اتصالات|الجزائر|العليان|پاکستان|كاثوليك|موبايلي|இந்தியா|abarth|abbott|abbvie|active|africa|agency|airbus|airtel|alipay|alsace|alstom|anquan|aramco|author|bayern|beauty|berlin|bharti|blanco|bostik|boston|broker|camera|career|caseih|casino|center|chanel|chrome|church|circle|claims|clinic|coffee|comsec|condos|coupon|credit|cruise|dating|datsun|dealer|degree|dental|design|direct|doctor|dunlop|dupont|durban|emerck|energy|estate|events|expert|family|flickr|futbol|gallup|garden|george|giving|global|google|gratis|health|hermes|hiphop|hockey|hotels|hughes|imamat|insure|intuit|jaguar|joburg|juegos|kaufen|kinder|kindle|kosher|lancia|latino|lawyer|lefrak|living|locker|london|luxury|madrid|maison|makeup|market|mattel|mobile|mobily|monash|mormon|moscow|museum|mutual|nagoya|natura|nissan|nissay|norton|nowruz|office|olayan|online|oracle|orange|otsuka|pfizer|photos|physio|piaget|pictet|quebec|racing|realty|reisen|repair|report|review|rocher|rogers|ryukyu|safety|sakura|sanofi|school|schule|search|secure|select|shouji|soccer|social|stream|studio|supply|suzuki|swatch|sydney|taipei|taobao|target|tattoo|tennis|tienda|tjmaxx|tkmaxx|toyota|travel|unicom|viajes|viking|villas|virgin|vision|voting|voyage|vuelos|walter|warman|webcam|xihuan|yachts|yandex|zappos|москва|онлайн|ابوظبي|ارامكو|الاردن|المغرب|امارات|فلسطين|مليسيا|भारतम्|இலங்கை|ファッション|actor|adult|aetna|amfam|amica|apple|archi|audio|autos|azure|baidu|beats|bible|bingo|black|boats|bosch|build|canon|cards|chase|cheap|cisco|citic|click|cloud|coach|codes|crown|cymru|dabur|dance|deals|delta|dodge|drive|dubai|earth|edeka|email|epost|epson|faith|fedex|final|forex|forum|gallo|games|gifts|gives|glade|glass|globo|gmail|green|gripe|group|gucci|guide|homes|honda|horse|house|hyatt|ikano|intel|irish|iveco|jetzt|koeln|kyoto|lamer|lease|legal|lexus|lilly|linde|lipsy|lixil|loans|locus|lotte|lotto|lupin|macys|mango|media|miami|money|mopar|movie|nadex|nexus|nikon|ninja|nokia|nowtv|omega|osaka|paris|parts|party|phone|photo|pizza|place|poker|praxi|press|prime|promo|quest|radio|rehab|reise|ricoh|rocks|rodeo|rugby|salon|sener|seven|sharp|shell|shoes|skype|sling|smart|smile|solar|space|sport|stada|store|study|style|sucks|swiss|tatar|tires|tirol|tmall|today|tokyo|tools|toray|total|tours|trade|trust|tunes|tushu|ubank|vegas|video|vodka|volvo|wales|watch|weber|weibo|works|world|xerox|yahoo|zippo|ایران|بازار|بھارت|سودان|سورية|همراه|भारोत|संगठन|বাংলা|భారత్|ഭാരതം|嘉里大酒店|aarp|able|adac|aero|aigo|akdn|ally|amex|arab|army|arpa|arte|asda|asia|audi|auto|baby|band|bank|bbva|beer|best|bike|bing|blog|blue|bofa|bond|book|buzz|cafe|call|camp|care|cars|casa|case|cash|cbre|cern|chat|citi|city|club|cool|coop|cyou|data|date|dclk|deal|dell|desi|diet|dish|docs|doha|duck|duns|dvag|erni|fage|fail|fans|farm|fast|fiat|fido|film|fire|fish|flir|food|ford|free|fund|game|gbiz|gent|ggee|gift|gmbh|gold|golf|goog|guge|guru|hair|haus|hdfc|help|here|hgtv|host|hsbc|icbc|ieee|imdb|immo|info|itau|java|jeep|jobs|jprs|kddi|kiwi|kpmg|kred|land|lego|lgbt|lidl|life|like|limo|link|live|loan|loft|love|ltda|luxe|maif|meet|meme|menu|mini|mint|mobi|moda|moto|name|navy|news|next|nico|nike|ollo|open|page|pars|pccw|pics|ping|pink|play|plus|pohl|porn|post|prod|prof|qpon|raid|read|reit|rent|rest|rich|rmit|room|rsvp|ruhr|safe|sale|sarl|save|saxo|scor|scot|seat|seek|sexy|shaw|shia|shop|show|silk|sina|site|skin|sncf|sohu|song|sony|spot|star|surf|talk|taxi|team|tech|teva|tiaa|tips|town|toys|tube|vana|visa|viva|vivo|vote|voto|wang|weir|wien|wiki|wine|work|xbox|yoga|zara|zero|zone|дети|сайт|بارت|بيتك|ڀارت|تونس|شبكة|عراق|عمان|موقع|भारत|ভারত|ভাৰত|ਭਾਰਤ|ભારત|ଭାରତ|ಭಾರತ|ලංකා|グーグル|クラウド|ポイント|大众汽车|组织机构|電訊盈科|香格里拉|aaa|abb|abc|aco|ads|aeg|afl|aig|anz|aol|app|art|aws|axa|bar|bbc|bbt|bcg|bcn|bet|bid|bio|biz|bms|bmw|bnl|bom|boo|bot|box|buy|bzh|cab|cal|cam|car|cat|cba|cbn|cbs|ceb|ceo|cfa|cfd|com|crs|csc|dad|day|dds|dev|dhl|diy|dnp|dog|dot|dtv|dvr|eat|eco|edu|esq|eus|fan|fit|fly|foo|fox|frl|ftr|fun|fyi|gal|gap|gdn|gea|gle|gmo|gmx|goo|gop|got|gov|hbo|hiv|hkt|hot|how|ibm|ice|icu|ifm|inc|ing|ink|int|ist|itv|jcb|jcp|jio|jll|jmp|jnj|jot|joy|kfh|kia|kim|kpn|krd|lat|law|lds|llc|lol|lpl|ltd|man|map|mba|med|men|mil|mit|mlb|mls|mma|moe|moi|mom|mov|msd|mtn|mtr|nab|nba|nec|net|new|nfl|ngo|nhk|now|nra|nrw|ntt|nyc|obi|off|one|ong|onl|ooo|org|ott|ovh|pay|pet|phd|pid|pin|pnc|pro|pru|pub|pwc|qvc|red|ren|ril|rio|rip|run|rwe|sap|sas|sbi|sbs|sca|scb|ses|sew|sex|sfr|ski|sky|soy|srl|srt|stc|tab|tax|tci|tdk|tel|thd|tjx|top|trv|tui|tvs|ubs|uno|uol|ups|vet|vig|vin|vip|wed|win|wme|wow|wtc|wtf|xin|xxx|xyz|you|yun|zip|бел|ком|қаз|мкд|мон|орг|рус|срб|укр|հայ|קום|عرب|قطر|كوم|مصر|कॉम|नेट|คอม|ไทย|ストア|セール|みんな|中文网|天主教|我爱你|新加坡|淡马锡|诺基亚|飞利浦|ac|ad|ae|af|ag|ai|al|am|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cw|cx|cy|cz|de|dj|dk|dm|do|dz|ec|ee|eg|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|za|zm|zw|ελ|бг|ею|рф|გე|닷넷|닷컴|삼성|한국|コム|世界|中信|中国|中國|企业|佛山|信息|健康|八卦|公司|公益|台湾|台灣|商城|商店|商标|嘉里|在线|大拿|娱乐|家電|工行|广东|微博|慈善|手机|手表|招聘|政务|政府|新闻|时尚|書籍|机构|游戏|澳門|点看|珠宝|移动|网址|网店|网站|网络|联通|谷歌|购物|通販|集团|食品|餐厅|香港)/,Mt=new RegExp("["+Et+"!#$%&'*+/=?^_`{|}~-]"),Ft=new RegExp("^"+Dt.source+"$"),Bt=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.localPartCharRegex=Mt,t.strictTldRegex=Ft,t}return rt(t,e),t.prototype.parseMatches=function(e){for(var t=this.tagBuilder,s=this.localPartCharRegex,n=this.strictTldRegex,r=[],i=e.length,a=new Nt,o={m:"a",a:"i",i:"l",l:"t",t:"o",o:":"},u=0,l=0,c=a;u<i;){var h=e.charAt(u);switch(l){case 0:"m"===(d=h)?w(1):s.test(d)&&w();break;case 1:p(e.charAt(u-1),h);break;case 2:f(h);break;case 3:m(h);break;case 4:g(h);break;case 5:v(h);break;case 6:b(h);break;case 7:y(h);break;default:Xe(l)}u++}var d;return A(),r;function p(e,t){":"===e?s.test(t)?(l=2,c=new Nt(at(at({},c),{hasMailtoPrefix:!0}))):C():o[e]===t||(s.test(t)?l=2:"."===t?l=3:"@"===t?l=4:C())}function f(e){"."===e?l=3:"@"===e?l=4:s.test(e)||C()}function m(e){"."===e||"@"===e?C():s.test(e)?l=2:C()}function g(e){St.test(e)?l=5:C()}function v(e){"."===e?l=7:"-"===e?l=6:St.test(e)||A()}function b(e){"-"===e||"."===e?A():St.test(e)?l=5:A()}function y(e){"."===e||"-"===e?A():St.test(e)?(l=5,c=new Nt(at(at({},c),{hasDomainDot:!0}))):A()}function w(e){void 0===e&&(e=2),l=e,c=new Nt({idx:u})}function C(){l=0,c=a}function A(){if(c.hasDomainDot){var s=e.slice(c.idx,u);/[-.]$/.test(s)&&(s=s.slice(0,-1));var i=c.hasMailtoPrefix?s.slice(7):s;(function(e){var t=(e.split(".").pop()||"").toLowerCase();return n.test(t)})(i)&&r.push(new ot({tagBuilder:t,matchedText:s,offset:c.idx,email:i}))}C()}},t}(dt),Nt=function(e){void 0===e&&(e={}),this.idx=void 0!==e.idx?e.idx:-1,this.hasMailtoPrefix=!!e.hasMailtoPrefix,this.hasDomainDot=!!e.hasDomainDot},Rt=function(){function e(){}return e.isValid=function(e,t){return!(t&&!this.isValidUriScheme(t)||this.urlMatchDoesNotHaveProtocolOrDot(e,t)||this.urlMatchDoesNotHaveAtLeastOneWordChar(e,t)&&!this.isValidIpAddress(e)||this.containsMultipleDots(e))},e.isValidIpAddress=function(e){var t=new RegExp(this.hasFullProtocolRegex.source+this.ipRegex.source);return null!==e.match(t)},e.containsMultipleDots=function(e){var t=e;return this.hasFullProtocolRegex.test(e)&&(t=e.split("://")[1]),t.split("/")[0].indexOf("..")>-1},e.isValidUriScheme=function(e){var t=e.match(this.uriSchemeRegex),s=t&&t[0].toLowerCase();return"javascript:"!==s&&"vbscript:"!==s},e.urlMatchDoesNotHaveProtocolOrDot=function(e,t){return!(!e||t&&this.hasFullProtocolRegex.test(t)||-1!==e.indexOf("."))},e.urlMatchDoesNotHaveAtLeastOneWordChar=function(e,t){return!(!e||!t||this.hasFullProtocolRegex.test(t)||this.hasWordCharAfterProtocolRegex.test(e))},e.hasFullProtocolRegex=/^[A-Za-z][-.+A-Za-z0-9]*:\/\//,e.uriSchemeRegex=/^[A-Za-z][-.+A-Za-z0-9]*:/,e.hasWordCharAfterProtocolRegex=new RegExp(":[^\\s]*?["+yt+"]"),e.ipRegex=/[0-9][0-9]?[0-9]?\.[0-9][0-9]?[0-9]?\.[0-9][0-9]?[0-9]?\.[0-9][0-9]?[0-9]?(:[0-9]*)?\/?$/,e}(),Pt=(it=new RegExp("[/?#](?:["+Et+"\\-+&@#/%=~_()|'$*\\[\\]{}?!:,.;^✓]*["+Et+"\\-+&@#/%=~_()|'$*\\[\\]{}✓])?"),new RegExp(["(?:","(",/(?:[A-Za-z][-.+A-Za-z0-9]{0,63}:(?![A-Za-z][-.+A-Za-z0-9]{0,63}:\/\/)(?!\d+\/?)(?:\/\/)?)/.source,It(2),")","|","(","(//)?",/(?:www\.)/.source,It(6),")","|","(","(//)?",It(10)+"\\.",Dt.source,"(?![-"+At+"])",")",")","(?::[0-9]+)?","(?:"+it.source+")?"].join(""),"gi")),Ot=new RegExp("["+Et+"]"),_t=function(e){function t(t){var s=e.call(this,t)||this;return s.stripPrefix={scheme:!0,www:!0},s.stripTrailingSlash=!0,s.decodePercentEncoding=!0,s.matcherRegex=Pt,s.wordCharRegExp=Ot,s.stripPrefix=t.stripPrefix,s.stripTrailingSlash=t.stripTrailingSlash,s.decodePercentEncoding=t.decodePercentEncoding,s}return rt(t,e),t.prototype.parseMatches=function(e){for(var t,s=this.matcherRegex,n=this.stripPrefix,r=this.stripTrailingSlash,i=this.decodePercentEncoding,a=this.tagBuilder,o=[],u=function(){var s=t[0],u=t[1],c=t[4],h=t[5],d=t[9],p=t.index,f=h||d,m=e.charAt(p-1);if(!Rt.isValid(s,u))return"continue";if(p>0&&"@"===m)return"continue";if(p>0&&f&&l.wordCharRegExp.test(m))return"continue";if(/\?$/.test(s)&&(s=s.substr(0,s.length-1)),l.matchHasUnbalancedClosingParen(s))s=s.substr(0,s.length-1);else{var g=l.matchHasInvalidCharAfterTld(s,u);g>-1&&(s=s.substr(0,g))}var v=["http://","https://"].find((function(e){return!!u&&-1!==u.indexOf(e)}));if(v){var b=s.indexOf(v);s=s.substr(b),u=u.substr(b),p+=b}var y=u?"scheme":c?"www":"tld",w=!!u;o.push(new ht({tagBuilder:a,matchedText:s,offset:p,urlMatchType:y,url:s,protocolUrlMatch:w,protocolRelativeMatch:!!f,stripPrefix:n,stripTrailingSlash:r,decodePercentEncoding:i}))},l=this;null!==(t=s.exec(e));)u();return o},t.prototype.matchHasUnbalancedClosingParen=function(e){var t,s=e.charAt(e.length-1);if(")"===s)t="(";else if("]"===s)t="[";else{if("}"!==s)return!1;t="{"}for(var n=0,r=0,i=e.length-1;r<i;r++){var a=e.charAt(r);a===t?n++:a===s&&(n=Math.max(n-1,0))}return 0===n},t.prototype.matchHasInvalidCharAfterTld=function(e,t){if(!e)return-1;var s=0;t&&(s=e.indexOf(":"),e=e.slice(s));var n=new RegExp("^((.?//)?[-."+Et+"]*[-"+Et+"]\\.[-"+Et+"]+)").exec(e);return null===n?-1:(s+=n[1].length,e=e.slice(n[1].length),/^[^-.A-Za-z0-9:\/?#]/.test(e)?s:-1)},t}(dt),Ut=new RegExp("#[_"+Et+"]{1,139}(?![_"+Et+"])","g"),jt=new RegExp("[^"+Et+"]"),$t=function(e){function t(t){var s=e.call(this,t)||this;return s.serviceName="twitter",s.matcherRegex=Ut,s.nonWordCharRegex=jt,s.serviceName=t.serviceName,s}return rt(t,e),t.prototype.parseMatches=function(e){for(var t,s=this.matcherRegex,n=this.nonWordCharRegex,r=this.serviceName,i=this.tagBuilder,a=[];null!==(t=s.exec(e));){var o=t.index,u=e.charAt(o-1);if(0===o||n.test(u)){var l=t[0],c=t[0].slice(1);a.push(new ut({tagBuilder:i,matchedText:l,offset:o,serviceName:r,hashtag:c}))}}return a},t}(dt),Wt=new RegExp(/(?:(?:(?:(\+)?\d{1,3}[-\040.]?)?\(?\d{3}\)?[-\040.]?\d{3}[-\040.]?\d{4})|(?:(\+)(?:9[976]\d|8[987530]\d|6[987]\d|5[90]\d|42\d|3[875]\d|2[98654321]\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|4[987654310]|3[9643210]|2[70]|7|1)[-\040.]?(?:\d[-\040.]?){6,12}\d+))([,;]+[0-9]+#?)*/.source+"|"+/(0([1-9]{1}-?[1-9]\d{3}|[1-9]{2}-?\d{3}|[1-9]{2}\d{1}-?\d{2}|[1-9]{2}\d{2}-?\d{1})-?\d{4}|0[789]0-?\d{4}-?\d{4}|050-?\d{4}-?\d{4})/.source,"g"),qt=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.matcherRegex=Wt,t}return rt(t,e),t.prototype.parseMatches=function(e){for(var t,s=this.matcherRegex,n=this.tagBuilder,r=[];null!==(t=s.exec(e));){var i=t[0],a=i.replace(/[^0-9,;#]/g,""),o=!(!t[1]&&!t[2]),u=0==t.index?"":e.substr(t.index-1,1),l=e.substr(t.index+i.length,1),c=!u.match(/\d/)&&!l.match(/\d/);this.testMatch(t[3])&&this.testMatch(i)&&c&&r.push(new ct({tagBuilder:n,matchedText:i,offset:t.index,number:a,plusSign:o}))}return r},t.prototype.testMatch=function(e){return mt.test(e)},t}(dt),Ht=new RegExp("@[_"+Et+"]{1,50}(?![_"+Et+"])","g"),Gt=new RegExp("@[_."+Et+"]{1,30}(?![_"+Et+"])","g"),Lt=new RegExp("@[-_."+Et+"]{1,50}(?![-_"+Et+"])","g"),zt=new RegExp("[^"+Et+"]"),Jt=function(e){function t(t){var s=e.call(this,t)||this;return s.serviceName="twitter",s.matcherRegexes={twitter:Ht,instagram:Gt,soundcloud:Lt},s.nonWordCharRegex=zt,s.serviceName=t.serviceName,s}return rt(t,e),t.prototype.parseMatches=function(e){var t,s=this.serviceName,n=this.matcherRegexes[this.serviceName],r=this.nonWordCharRegex,i=this.tagBuilder,a=[];if(!n)return a;for(;null!==(t=n.exec(e));){var o=t.index,u=e.charAt(o-1);if(0===o||r.test(u)){var l=t[0].replace(/\.+$/g,""),c=l.slice(1);a.push(new lt({tagBuilder:i,matchedText:l,offset:o,serviceName:s,mention:c}))}}return a},t}(dt);var Yt=function(e){void 0===e&&(e={}),this.idx=void 0!==e.idx?e.idx:-1,this.type=e.type||"tag",this.name=e.name||"",this.isOpening=!!e.isOpening,this.isClosing=!!e.isClosing},Qt=function(){function e(t){void 0===t&&(t={}),this.version=e.version,this.urls={},this.email=!0,this.phone=!0,this.hashtag=!1,this.mention=!1,this.newWindow=!0,this.stripPrefix={scheme:!0,www:!0},this.stripTrailingSlash=!0,this.decodePercentEncoding=!0,this.truncate={length:0,location:"end"},this.className="",this.replaceFn=null,this.context=void 0,this.sanitizeHtml=!1,this.matchers=null,this.tagBuilder=null,this.urls=this.normalizeUrlsCfg(t.urls),this.email="boolean"==typeof t.email?t.email:this.email,this.phone="boolean"==typeof t.phone?t.phone:this.phone,this.hashtag=t.hashtag||this.hashtag,this.mention=t.mention||this.mention,this.newWindow="boolean"==typeof t.newWindow?t.newWindow:this.newWindow,this.stripPrefix=this.normalizeStripPrefixCfg(t.stripPrefix),this.stripTrailingSlash="boolean"==typeof t.stripTrailingSlash?t.stripTrailingSlash:this.stripTrailingSlash,this.decodePercentEncoding="boolean"==typeof t.decodePercentEncoding?t.decodePercentEncoding:this.decodePercentEncoding,this.sanitizeHtml=t.sanitizeHtml||!1;var s=this.mention;if(!1!==s&&"twitter"!==s&&"instagram"!==s&&"soundcloud"!==s)throw new Error("invalid `mention` cfg - see docs");var n=this.hashtag;if(!1!==n&&"twitter"!==n&&"facebook"!==n&&"instagram"!==n)throw new Error("invalid `hashtag` cfg - see docs");this.truncate=this.normalizeTruncateCfg(t.truncate),this.className=t.className||this.className,this.replaceFn=t.replaceFn||this.replaceFn,this.context=t.context||this}return e.link=function(t,s){return new e(s).link(t)},e.parse=function(t,s){return new e(s).parse(t)},e.prototype.normalizeUrlsCfg=function(e){return null==e&&(e=!0),"boolean"==typeof e?{schemeMatches:e,wwwMatches:e,tldMatches:e}:{schemeMatches:"boolean"!=typeof e.schemeMatches||e.schemeMatches,wwwMatches:"boolean"!=typeof e.wwwMatches||e.wwwMatches,tldMatches:"boolean"!=typeof e.tldMatches||e.tldMatches}},e.prototype.normalizeStripPrefixCfg=function(e){return null==e&&(e=!0),"boolean"==typeof e?{scheme:e,www:e}:{scheme:"boolean"!=typeof e.scheme||e.scheme,www:"boolean"!=typeof e.www||e.www}},e.prototype.normalizeTruncateCfg=function(e){return"number"==typeof e?{length:e,location:"end"}:function(e,t){for(var s in t)t.hasOwnProperty(s)&&void 0===e[s]&&(e[s]=t[s]);return e}(e||{},{length:Number.POSITIVE_INFINITY,location:"end"})},e.prototype.parse=function(e){var t=this,s=["a","style","script"],n=0,r=[];return function(e,t){for(var s,n=t.onOpenTag,r=t.onCloseTag,i=t.onText,a=t.onComment,o=t.onDoctype,u=new Yt,l=0,c=e.length,h=0,d=0,p=u;l<c;){var f=e.charAt(l);switch(h){case 0:"<"===f&&P();break;case 1:m(f);break;case 2:v(f);break;case 3:g(f);break;case 4:b(f);break;case 5:y(f);break;case 6:w(f);break;case 7:C(f);break;case 8:A(f);break;case 9:E(f);break;case 10:k(f);break;case 11:x(f);break;case 12:T(f);break;case 13:"--"===e.substr(l,2)?(l+=2,p=new Yt(at(at({},p),{type:"comment"})),h=14):"DOCTYPE"===e.substr(l,7).toUpperCase()?(l+=7,p=new Yt(at(at({},p),{type:"doctype"})),h=20):R();break;case 14:I(f);break;case 15:S(f);break;case 16:D(f);break;case 17:M(f);break;case 18:F(f);break;case 19:B(f);break;case 20:N(f);break;default:Xe(h)}l++}function m(e){"!"===e?h=13:"/"===e?(h=2,p=new Yt(at(at({},p),{isClosing:!0}))):"<"===e?P():pt.test(e)?(h=3,p=new Yt(at(at({},p),{isOpening:!0}))):(h=0,p=u)}function g(e){gt.test(e)?(p=new Yt(at(at({},p),{name:_()})),h=4):"<"===e?P():"/"===e?(p=new Yt(at(at({},p),{name:_()})),h=12):">"===e?(p=new Yt(at(at({},p),{name:_()})),O()):pt.test(e)||ft.test(e)||":"===e||R()}function v(e){">"===e?R():pt.test(e)?h=3:R()}function b(e){gt.test(e)||("/"===e?h=12:">"===e?O():"<"===e?P():"="===e||vt.test(e)||bt.test(e)?R():h=5)}function y(e){gt.test(e)?h=6:"/"===e?h=12:"="===e?h=7:">"===e?O():"<"===e?P():vt.test(e)&&R()}function w(e){gt.test(e)||("/"===e?h=12:"="===e?h=7:">"===e?O():"<"===e?P():vt.test(e)?R():h=5)}function C(e){gt.test(e)||('"'===e?h=8:"'"===e?h=9:/[>=`]/.test(e)?R():"<"===e?P():h=10)}function A(e){'"'===e&&(h=11)}function E(e){"'"===e&&(h=11)}function k(e){gt.test(e)?h=4:">"===e?O():"<"===e&&P()}function x(e){gt.test(e)?h=4:"/"===e?h=12:">"===e?O():"<"===e?P():(h=4,l--)}function T(e){">"===e?(p=new Yt(at(at({},p),{isClosing:!0})),O()):h=4}function I(e){"-"===e?h=15:">"===e?R():h=16}function S(e){"-"===e?h=18:">"===e?R():h=16}function D(e){"-"===e&&(h=17)}function M(e){h="-"===e?18:16}function F(e){">"===e?O():"!"===e?h=19:"-"===e||(h=16)}function B(e){"-"===e?h=17:">"===e?O():h=16}function N(e){">"===e?O():"<"===e&&P()}function R(){h=0,p=u}function P(){h=1,p=new Yt({idx:l})}function O(){var t=e.slice(d,p.idx);t&&i(t,d),"comment"===p.type?a(p.idx):"doctype"===p.type?o(p.idx):(p.isOpening&&n(p.name,p.idx),p.isClosing&&r(p.name,p.idx)),R(),d=l+1}function _(){var t=p.idx+(p.isClosing?2:1);return e.slice(t,l).toLowerCase()}d<l&&(s=e.slice(d,l),i(s,d),d=l+1)}(e,{onOpenTag:function(e){s.indexOf(e)>=0&&n++},onText:function(e,s){if(0===n){var i=function(e,t){if(!t.global)throw new Error("`splitRegex` must have the 'g' flag set");for(var s,n=[],r=0;s=t.exec(e);)n.push(e.substring(r,s.index)),n.push(s[0]),r=s.index+s[0].length;return n.push(e.substring(r)),n}(e,/(&nbsp;|&#160;|&lt;|&#60;|&gt;|&#62;|&quot;|&#34;|&#39;)/gi),a=s;i.forEach((function(e,s){if(s%2==0){var n=t.parseText(e,a);r.push.apply(r,n)}a+=e.length}))}},onCloseTag:function(e){s.indexOf(e)>=0&&(n=Math.max(n-1,0))},onComment:function(e){},onDoctype:function(e){}}),r=this.compactMatches(r),r=this.removeUnwantedMatches(r)},e.prototype.compactMatches=function(e){e.sort((function(e,t){return e.getOffset()-t.getOffset()}));for(var t=0;t<e.length-1;t++){var s=e[t],n=s.getOffset(),r=s.getMatchedText().length,i=n+r;if(t+1<e.length){if(e[t+1].getOffset()===n){var a=e[t+1].getMatchedText().length>r?t:t+1;e.splice(a,1);continue}e[t+1].getOffset()<i&&e.splice(t+1,1)}}return e},e.prototype.removeUnwantedMatches=function(e){return this.hashtag||Ke(e,(function(e){return"hashtag"===e.getType()})),this.email||Ke(e,(function(e){return"email"===e.getType()})),this.phone||Ke(e,(function(e){return"phone"===e.getType()})),this.mention||Ke(e,(function(e){return"mention"===e.getType()})),this.urls.schemeMatches||Ke(e,(function(e){return"url"===e.getType()&&"scheme"===e.getUrlMatchType()})),this.urls.wwwMatches||Ke(e,(function(e){return"url"===e.getType()&&"www"===e.getUrlMatchType()})),this.urls.tldMatches||Ke(e,(function(e){return"url"===e.getType()&&"tld"===e.getUrlMatchType()})),e},e.prototype.parseText=function(e,t){void 0===t&&(t=0),t=t||0;for(var s=this.getMatchers(),n=[],r=0,i=s.length;r<i;r++){for(var a=s[r].parseMatches(e),o=0,u=a.length;o<u;o++)a[o].setOffset(t+a[o].getOffset());n.push.apply(n,a)}return n},e.prototype.link=function(e){if(!e)return"";this.sanitizeHtml&&(e=e.replace(/</g,"&lt;").replace(/>/g,"&gt;"));for(var t=this.parse(e),s=[],n=0,r=0,i=t.length;r<i;r++){var a=t[r];s.push(e.substring(n,a.getOffset())),s.push(this.createMatchReturnVal(a)),n=a.getOffset()+a.getMatchedText().length}return s.push(e.substring(n)),s.join("")},e.prototype.createMatchReturnVal=function(e){var t;return this.replaceFn&&(t=this.replaceFn.call(this.context,e)),"string"==typeof t?t:!1===t?e.getMatchedText():t instanceof et?t.toAnchorString():e.buildTag().toAnchorString()},e.prototype.getMatchers=function(){if(this.matchers)return this.matchers;var e=this.getTagBuilder(),t=[new $t({tagBuilder:e,serviceName:this.hashtag}),new Bt({tagBuilder:e}),new qt({tagBuilder:e}),new Jt({tagBuilder:e,serviceName:this.mention}),new _t({tagBuilder:e,stripPrefix:this.stripPrefix,stripTrailingSlash:this.stripTrailingSlash,decodePercentEncoding:this.decodePercentEncoding})];return this.matchers=t},e.prototype.getTagBuilder=function(){var e=this.tagBuilder;return e||(e=this.tagBuilder=new tt({newWindow:this.newWindow,truncate:this.truncate,className:this.className})),e},e.version="3.14.3",e.AnchorTagBuilder=tt,e.HtmlTag=et,e.matcher={Email:Bt,Hashtag:$t,Matcher:dt,Mention:Jt,Phone:qt,Url:_t},e.match={Email:ot,Hashtag:ut,Match:st,Mention:lt,Phone:ct,Url:ht},e}();function Vt(e,t=e){return{type:"autolink",url:e,text:t}}const Zt=qe(/<!!mention:([^>\s]*?)\|(.*?)>/gm,(([e,t,s])=>function(e,t){return{type:"mention",id:e,text:t}}(decodeURIComponent(t),s))),Kt=qe(/<!!customemoji:(.*?)>/gm,(([e,t])=>function(e){return{type:"customemoji",text:e}}(t))),Xt=qe(/<((?:https?|mailto):.*?)\|(.*?)>/gi,(([e,t,s])=>function(e,t=[]){return{type:"link",url:e,children:t}}(t,[s]))),es=qe(/<actionlink:([^|]+)[|]([^>]*)>/gi,(([e,t,s])=>{const{action:n,params:r}=ss(t);return function(e,t,s=[]){return{type:"actionlink",action:e,params:t,children:s}}(n,r,[s])})),ts=qe(/<actionbutton:([^|]+)[|]([^>]*)>/gi,(([e,t,s])=>{const{action:n,params:r}=ss(t);return function(e,t,s=[]){return{type:"actionbutton",action:e,params:t,children:s}}(n,r,[s])}));function ss(e){const t=e.indexOf("?");return-1===t?{action:e,params:{}}:{action:e.slice(0,t),params:Object.fromEntries(new URLSearchParams(e.slice(t)))}}const ns=qe(/(?:^|\n)(?:\s*[-*+]\s+[^\n]+(?:\n|$))+/g,(([e])=>function(e=[]){return{type:"bulletlist",children:e}}([e.startsWith("\n")?e.slice(1):e]))),rs=qe(/^\s*[-*+]\s+([^\n]+)(?:\n|$)/gm,(([e,t])=>({type:"bulletpoint",children:[t]}))),is=e=>{const t=/(?:^|[^-:/\w])([(+]?[0-9](?:[-_+ ().]?[0-9]){5,11}[0-9])(?:[^-:/\w]|$)/g;let s=0;const n=[];for(const r of re(e,t)){const t=r[0],i=r[1],a=t.startsWith(i)?r.index:r.index+1;a-s>0&&n.push(e.substring(s,a));const o=Vt("tel:"+i.replace(/[^0-9+]/g,""),i);n.push(o),s=a+i.length}return s<e.length&&n.push(e.substring(s)),n},as=e=>Xt(e).flatMap((e=>"string"==typeof e?os(e):["<",...os(e.url),...os("|"+e.children[0]+">")])),os=e=>{const t=Qt.parse(e,{urls:!0,email:!0,phone:!1,hashtag:!1,mention:!1}),s=[];let n=0;for(const r of t){const t=r.getOffset(),i=r.getMatchedText(),a=i.length;let o=i;r instanceof ot?o="mailto:"+r.getEmail():r instanceof ht&&(o=r.getUrl()),t>n&&s.push(e.substring(n,t)),s.push(Vt(o,i)),n=t+a}return n<e.length&&s.push(e.substring(n)),s},us=["Codeblock","Codespan","FormattedLink","Wikitext","Autolink","Actions","Mention","Mention","BulletPoint","CustomEmoji"];const ls=function(){const e=RegExp("[^\n]+\n?|\n","g");return t=>Array.from(t.match(e)||[])}();function cs(e,t={except:[]}){let s=function(e,t){let s=[e];return s=hs(s,t.multilineSteps),s=hs(s,[ls]),s=hs(s,t.singlelineSteps),s=ds(s),s}(e,function(e={except:[]}){var t;const s={multilineSteps:[],singlelineSteps:[]},n=null!=(t=e.except)?t:us.filter((t=>!e.only.includes(t)));return n.includes("BulletPoint")||s.multilineSteps.push(ns,rs),n.includes("Mention")||s.singlelineSteps.push(Zt),n.includes("CustomEmoji")||s.singlelineSteps.push(Kt),n.includes("Codespan")||s.multilineSteps.push(qe(/```([^]+?)```/g,(([e,t])=>({type:"codespan",text:t})))),n.includes("FormattedLink")||s.singlelineSteps.push(Xt),n.includes("Actions")||(s.singlelineSteps.push(es),s.singlelineSteps.push(ts)),n.includes("Wikitext")||s.singlelineSteps.push(Ye),n.includes("Autolink")||s.singlelineSteps.push(as,is),s}(t));return s=ps(s,!1),s}function hs(e,t){return t.reduce(((e,t)=>We(e,t)),e)}function ds(e){const t=[];let s=-1;for(const n of e)"string"==typeof n?"string"==typeof t[s]?t[s]+=n:t[++s]=n:t[++s]="children"in n?l(u({},n),{children:ds(n.children)}):n;return t}function ps(e,t){const s=[];let n=[];for(let r=0;r<e.length;r++){const i=e[r];"string"==typeof i?n.push(i):"children"in i?(n.length>0&&(s.push(n.join("")),n=[]),i.children=ps(i.children,t||"link"===i.type||"actionbutton"===i.type||"actionlink"===i.type),s.push(i)):"autolink"===i.type&&t?n.push(i.text):(n.length>0&&(s.push(n.join("")),n=[]),s.push(i))}return n.length>0&&(s.push(n.join("")),n=[]),s}class fs{constructor(e,t,s){this.id=e,this.conversationId=t,this._realtimeClient=s}get brandedId(){return this.id}get brandedConversationId(){return this.conversationId}get(){return h(this,null,(function*(){const e=yield this._realtimeClient.call("GET",["me","conversations",this.brandedConversationId,"messages",this.brandedId],{});if(!e.ok&&"server"===e.where&&404===e.value.status)return null;if(!e.ok&&"server"===e.where&&403===e.value.status&&"NOT_A_PARTICIPANT"===e.value.errorCode)return null;const t=d("Get message "+this.id,e),s=yield this._realtimeClient.createMessageSnapshot(t,this.brandedConversationId);return _e("Get message "+this.id,s)}))}edit(e){return h(this,null,(function*(){const t={content:ms(e),custom:"string"==typeof e?void 0:e.custom},s=yield this._realtimeClient.call("PATCH",["conversations",this.brandedConversationId,"messages",this.brandedId],t);d(`Edit message ${this.id} in conversation ${this.conversationId}`,s)}))}delete(){return h(this,null,(function*(){const e=yield this._realtimeClient.call("DELETE",["conversations",this.brandedConversationId,"messages",this.brandedId],{});(e.ok||"server"!==e.where||404!==e.value.status)&&d(`Delete message ${this.id} in conversation ${this.conversationId}`,e)}))}}function ms(e){return"string"==typeof e?[{type:"text",children:cs(e)}]:"text"in e&&e.text?[{type:"text",children:cs(e.text)}]:"content"in e&&e.content?e.content:void 0}class gs{constructor(e,t){this.id=e,this._realtimeClient=t,this.uselessObjForTypeCheck={subject:null,photoUrl:null,welcomeMessages:null,custom:null,access:null,notify:null}}get brandedId(){return this.id}get brandedUserId(){return this._realtimeClient.userId}participant(e){return new je("string"==typeof e?e:e.id,this.id,this._realtimeClient)}message(e){return new fs(e,this.brandedId,this._realtimeClient)}get(){return h(this,null,(function*(){const e=this._realtimeClient.listMessages(this.brandedId,{limit:1}),t=yield this._realtimeClient.call("GET",["me","conversations",this.brandedId],{});if(!t.ok&&"server"===t.where&&404===t.value.status)return null;const s=d("Get conversation "+this.id,t),n=_e("Get last message in conversation "+this.id,yield e),r=0===n.length?null:n[0];return this._realtimeClient.createConversationSnapshotPreloaded(s,r)}))}set(e){return h(this,null,(function*(){const t=this._realtimeClient.call("PUT",["conversations",this.brandedId],e),s=this._realtimeClient.call("PUT",["conversations",this.brandedId,"participants",this.brandedUserId],e),n=yield t;!n.ok&&"server"===n.where&&403===n.value.status&&"UNAUTHORIZED_TO_EDIT"===n.value.errorCode&&function(e){return void 0===e.subject&&(void 0===e.photoUrl&&(void 0===e.welcomeMessages&&(null!==e.custom&&(void 0===e.custom||!Object.values(e.custom).some((e=>void 0!==e))))))}(e)||d("Set conversation "+this.id,n);const r=yield s;!r.ok&&"server"===r.where&&403===r.value.status&&"UNAUTHORIZED_TO_EDIT_PARTICIPANT"===r.value.errorCode&&function(e){return void 0===e.access&&void 0===e.notify}(e)||d("Set your participation in conversation "+this.id,r)}))}createIfNotExists(){return h(this,arguments,(function*(e={}){const t=this._realtimeClient.call("POST",["conversations",this.brandedId],e),s=this._realtimeClient.call("POST",["conversations",this.brandedId,"participants",this.brandedUserId],e),n=yield t;(n.ok||"server"!==n.where||409!==n.value.status)&&d("Create conversation "+this.id,yield t);const r=yield s;(r.ok||"server"!==r.where||409!==r.value.status)&&d("Join conversation "+this.id,yield s)}))}markAsRead(){return h(this,null,(function*(){const e=yield this._realtimeClient.call("POST",["me","conversations",this.brandedId,"read"],{});d(`Mark ${this.id} as read`,e)}))}markAsUnread(){return h(this,null,(function*(){const e=yield this._realtimeClient.call("POST",["me","conversations",this.brandedId,"unread"],{});d(`Mark ${this.id} as unread`,e)}))}send(e){return h(this,null,(function*(){const t={content:vs(e),referencedMessageId:bs(e),custom:"string"==typeof e?void 0:e.custom,idempotencyKey:$e((new Date).getTime())},s=yield this._realtimeClient.call("POST",["conversations",this.brandedId,"messages"],t),n=d("Send message to conversation "+this.id,s);return new fs(n.id,this.brandedId,this._realtimeClient)}))}subscribeMessages(e){return this._realtimeClient.subscribe(["me","conversations",this.brandedId,"messages"],e)}subscribeParticipants(e){return this._realtimeClient.subscribe(["me","conversations",this.brandedId,"participants"],e)}subscribe(e){return this._realtimeClient.subscribe(["me","conversations",this.brandedId],e)}subscribeTyping(e){return this._realtimeClient.subscribe(["me","conversations",this.brandedId,"typing"],e)}markAsTyping(){return h(this,null,(function*(){const e=yield this._realtimeClient.call("POST",["me","conversations",this.brandedId,"typing"],{});d(`Set user as typing in ${this.id}`,e)}))}}function vs(e){return"string"==typeof e?[{type:"text",children:cs(e)}]:"text"in e?[{type:"text",children:cs(e.text)}]:e.content}function bs(e){if("string"==typeof e)return;const t=e.referencedMessage;return void 0!==t?"string"==typeof t?t:t.id:void 0}class ys{constructor(e,t,s){this.realtimeWsApiUrl=e,this.internalHttpApiUrl=t,this.restApiHttpUrl=s}getBokensUrl(e,t,s){return this.internalHttpApiUrl+`/${e}/bokens/${encodeURIComponent(t)}?signature=${encodeURIComponent(null!=s?s:"")}`}getRealtimeWsUrl(e,t,s,n,r){const i=encodeURIComponent(t);return this.realtimeWsApiUrl+`/${e}/realtime/${i}?talkjs-client-build=${null!=r?r:"standalone"}&talkjs-core=${s}&talkjs-client-id=${n}`}}function ws({method:e,url:t,data:s,options:n,attempts:r,shouldRetry:i,authProvider:a}){var o;(!r||r<=0)&&(r=1);const u={"x-talkjs-client-build":"jssdk-dev","x-talkjs-client-date":"2025-07-08T10:01:42.871Z"};return s instanceof FormData||(u["Content-Type"]=null!=(o=null==n?void 0:n.contentType)?o:"application/json"),b(r,(()=>h(this,null,(function*(){if(a){const e=yield a.getToken();u.Authorization=`Bearer ${e}`}return fetch(t,{method:e,headers:u,body:s}).then((e=>{if(e.ok)return e;throw e}))}))),{initialDelay:.2,log:void 0,shouldRetry:s=>h(this,null,(function*(){return a&&401===s.status?(Ss.log(`401 error from ${e} ${t}, ${yield a.getToken()}`),a.refreshToken(),!0):i?i(s):!("status"in s&&s.status>=400&&s.status<500)}))}).catch((s=>{if(Math.random()<.1&&!t.toString().startsWith("https://capture.trackjs.com")){const n=`Network Error for ${e} ${t}`;"undefined"!=typeof window&&(s instanceof Response?s.clone().text().then((e=>Ss.log(`${n} ${s.status} ${e} (10% logged)`))):Ss.log(`${n} ${s} (10% logged)`)),console.error("[TalkJS]",n)}throw s}))}const{cdnHost:Cs,appHost:As,restHost:Es,realtimeHost:ks,appProtocol:xs,appWsProtocol:Ts}=function(){if("undefined"==typeof window)return{cdnHost:"test-hostname",appHost:"test-hostname",appProtocol:"http:",appWsProtocol:"ws:"};const e=function(){if(document.currentScript)return document.currentScript.src;try{throw new Error}catch(o){const t=o.stack.match(/https?:\/\/.*\.(js|jsx|ts|tsx)/);return t?t[0]:""}}(),t=document.createElement("a");t.href=e;const s=t.host,n=(o=s).match(/^cdn[.-]/)?o.replace(/^cdn/,"app"):"talkjs.com"===o?"app.talkjs.com":o,r=function(e){return e.match(/^app[.-]/)?e.replace(/^app/,"api"):e+"/public_api"}(n),i=function(e){return e.match(/^app[.-]/)?e.replace(/^app/,"realtime"):e+"/public_api"}(n),a=t.protocol;var o;return{cdnHost:s,appHost:n,restHost:r,realtimeHost:i,appProtocol:a,appWsProtocol:"https:"===a?"wss:":"ws:"}}(),Is=As.startsWith("app.talkjs.com"),Ss="undefined"==typeof window?{log:e=>Promise.resolve(),setData:e=>{}}:new class{constructor(e){this._timeCreated=Date.now(),this._enabled=Is,this._trackJSData={customer:{application:"",correlationId:"",sessionId:"",token:"",userId:"",version:"dev-2025-07-08T10:01:42.871Z"},entry:"direct",environment:{age:Date.now()-this._timeCreated,dependencies:{},originalUrl:window.location.href,referrer:document.referrer,userAgent:window.navigator.userAgent},metadata:[],nav:[],network:[],url:window.location.href,stack:"",timestamp:(new Date).toISOString(),version:"dev-2025-07-08T10:01:42.871Z",throttled:0},this._url=`https://capture.trackjs.com/capture?token=${e}`,this._trackJSData.customer.token=e}setData({appId:e,meId:t,sessionId:s}){this._trackJSData.customer.userId=e,this._trackJSData.customer.sessionId=`${e}/${t}`,this._trackJSData.customer.correlationId=s}log(e){return h(this,null,(function*(){try{if(!this._enabled)return Promise.resolve();const t=l(u({},this._trackJSData),{message:e});yield ws({method:"POST",url:this._url,data:JSON.stringify(t),options:{contentType:"text/plain"}})}catch(t){console.error("[TalkJS] Failed when sending an error report. Error: ",t)}}))}}("970cd0be0fb74630b75c8451051299dc");class Ds{constructor(e,t={}){this._onSubscription=t,this._handlers={};for(const s in e)Object.hasOwnProperty.call(e,s)&&(this._handlers[s]=[])}emit(e,t){for(const n of this._handlers[e])try{n(t)}catch(s){console.error(`[TalkJS] '${String(e)}' handler threw an error:`,s)}}emitAsync(e,t){return h(this,null,(function*(){try{const s=this._handlers[e].map((e=>e(t)));yield Promise.all(s)}catch(s){console.error(`[TalkJS] '${String(e)}' handler threw an error:`,s)}}))}supports(e){return e in this._handlers}on(e,t){var s,n;if(!this.supports(e))throw new Error(`Unknown event type '${String(e)}'`);null==(n=(s=this._onSubscription)[e])||n.call(s),this._handlers[e].push(t)}off(e,t){if(!Object.hasOwnProperty.call(this._handlers,e))throw new Error(`Unknown event type '${String(e)}'`);const s=this._handlers[e].indexOf(t);-1!==s&&this._handlers[e].splice(s,1)}removeAllListeners(){for(const e in this._handlers)this._handlers[e]=[]}handles(e){return this._handlers[e].length>0}subscribe(e,t){return this.on(e,t),{unsubscribe:()=>this.off(e,t)}}}class Ms{constructor(e,t,s,n,r,i){if(this.appId=t,this.userId=s,this.tokenFetcher=r,this.usingBokens=!1,this.requestInProgress=!1,this.eventEmitter=new Ds({tokenChanged(e){},tokenRefreshFailed(e){},tokenAccepted(e){}}),this.sessionExpiryWarningTimeoutId=void 0,i&&(n||r))throw new Error("[TalkJS] If providing a signature for authentication, you must not provide a token or tokenFetcher.");n?this.fetchToken((()=>n)):(r||(this.usingBokens=!0,this.tokenFetcher=()=>this.sendBokenRequest(e,i)),this.refreshToken())}get canRefreshToken(){return this.usingBokens||!!this.tokenFetcher}getToken(){return this.token}refreshToken(){if(!this.requestInProgress){if(!this.tokenFetcher)throw this.emitTokenRefreshFailed("no `tokenFetcher` provided"),new Error("[TalkJS] Cannot refresh token, no `tokenFetcher` provided.");this.fetchToken(this.tokenFetcher)}}onTokenChanged(e){return this.eventEmitter.on("tokenChanged",e),()=>{this.eventEmitter.off("tokenChanged",e)}}emitTokenChanged(e){this.eventEmitter.emit("tokenChanged",e)}onTokenRefreshFailed(e){return this.eventEmitter.on("tokenRefreshFailed",e),()=>{this.eventEmitter.off("tokenRefreshFailed",e)}}emitTokenRefreshFailed(e){this.eventEmitter.emit("tokenRefreshFailed",e),console.error(`[TalkJS] Could not authenticate, cannot recover automatically: ${e}`)}onTokenAccepted(e){return this.eventEmitter.on("tokenAccepted",e),()=>{this.eventEmitter.off("tokenAccepted",e)}}emitTokenAccepted(e){this.eventEmitter.emit("tokenAccepted",e)}clearScheduledRefresh(){this.sessionExpiryWarningTimeoutId&&clearTimeout(this.sessionExpiryWarningTimeoutId)}scheduleRefresh(e){if(this.clearScheduledRefresh(),null===e)return;const t=void 0!==this.tokenFetcher;if(e<120&&!t?console.warn(`[TalkJS] TalkJS will stop working in ${e} seconds due to auth token expiry. Token expires in ${e} seconds, and cannot be refreshed because no \`tokenFetcher\` was provided when creating the session. Non-refreshable tokens are recommended to expire at least 24 hours in the future.`):e<120&&t?console.warn(`[TalkJS] TalkJS auth token will expire and need to be refreshed in ${e} seconds. Refreshable JWTs are recommended to expire at least 30 minutes in the future, to improve performance and reduce unnecessary refreshes.`):e<3300&&!t&&console.warn(`[TalkJS debug] TalkJS will stop working in ${Math.round(e/60)} minutes due to auth token expiry. Non-refreshable tokens are recommended to expire at least 24 hours in the future. Alternatively, provide a \`tokenFetcher\` when creating the session, so that tokens can be refreshed when they expire.`),void 0!==this.tokenFetcher){const t=e>600?e-300:e/2,s=Math.min(1728e6,1e3*t);this.sessionExpiryWarningTimeoutId=setTimeout((()=>{this.refreshToken()}),s)}else e<2e6&&(this.sessionExpiryWarningTimeoutId=setTimeout((()=>{this.emitTokenRefreshFailed("Token has expired and no `tokenFetcher` was provided when creating the session, so it cannot be refreshed.")}),1e3*e))}fetchToken(e){return h(this,null,(function*(){if(this.requestInProgress)return;this.requestInProgress=!0;const t=()=>h(this,null,(function*(){const t=yield e();return this.checkJwt(t),t}));try{const e=void 0!==this.token;this.token=t(),yield this.token.then((t=>{e&&this.emitTokenChanged(t)})).catch((e=>{this.emitTokenRefreshFailed(e)}))}catch(s){this.emitTokenRefreshFailed(s)}finally{this.requestInProgress=!1}}))}checkJwt(e){!function(e){if(!("string"==typeof e||e instanceof String)){if(void 0===e)throw"Token was undefined";throw"Token must be a string, got: "+e}}(e);const t=[];let s,n,r;if("string"==typeof e?s=e:t.push(`Token type is ${typeof e} instead of a string.`),s)try{const e=function(e){const t=e.split(".");if(3!==t.length)throw"Token does not contain exactly two `.`. Check that you generated your JWT correctly. It should be `<header>.<payload>.<signature>`.";return{header:Fs(t[0]),payload:Fs(t[1])}}(s);n=e.header,r=e.payload}catch(i){t.push(i)}if(n){const e=this.checkJwtHeader(n);t.push(...e)}if(r){const e=this.checkJwtPayload(r);t.push(...e)}if(t.length)if(this.usingBokens)Ss.log(`JWT Errors detected by AuthProvider when using bokens: ${t.join("\n")}`);else{console.warn("[TalkJS] Authentication token appears to be generated incorrectly. Will still attempt to authenticate, but TalkJS may not work as expected. See below for a description of any problems and how to fix them.");const s=t.length>1;t.forEach(((e,t)=>{const n=s?`Reason ${t+1}:`:"Reason:";console.warn(`[TalkJS] ${n} ${e}`)})),console.warn(`[TalkJS]: Authentication token: "${e}"`)}}checkJwtHeader(e){const t=[],s=e.alg;return void 0===s?t.push('Token header must contain `"alg": "HS256"`, but no `alg` was specified.'):"string"!=typeof s?t.push(`Token header must contain \`"alg": "HS256"\`, but \`alg\` was ${typeof s} instead of a string. Make sure you wrap the value in "".`):"HS256"!==s&&t.push(`Token header must contain \`"alg": "HS256"\`, but \`alg\` was set to "${s}" instead. HS256 is the only supported algorithm.`),t}checkJwtPayload(e){const t=[],s=e.iss;void 0===s?t.push(`Token payload must contain an \`iss\` claim set to your app ID (${this.appId}), but \`iss\` was missing.`):"string"!=typeof s?t.push(`Token payload must contain an \`iss\` claim set to your app ID (${this.appId}), but \`iss\` was ${typeof s} instead of a string. Make sure you wrap the value in "".`):s!==this.appId&&t.push(`Token payload must contain an \`iss\` claim set to your app ID (${this.appId}), but \`iss\` was set to "${s}" instead.`);const n=e.sub;void 0===n?t.push(`Token payload must contain a \`sub\` claim set to your user ID (${this.userId}), but \`sub\` was missing.`):"string"!=typeof n?t.push(`Token payload must contain a \`sub\` claim set to your user ID (${this.userId}), but \`sub\` was ${typeof n} instead of a string. Make sure you wrap the value in "".`):n!==this.userId&&t.push(`Token payload must contain a \`sub\` claim set to your userId ID (${this.userId}), but \`sub\` was set to "${n}" instead.`);const r=e.tokenType;void 0===r?t.push('Token payload must contain a `"tokenType": "user"` claim, but no `tokenType` was specified.'):"string"!=typeof r?t.push(`Token payload must contain a \`"tokenType": "user"\` claim, but \`tokenType\` was ${typeof r} instead of a string. Make sure you wrap the value in "".`):"user"!==r&&t.push(`Token payload must contain a \`"tokenType": "user"\` claim, but \`tokenType\` was set to "${r}" instead.`);const i=e.exp;void 0===i||("number"!=typeof i?t.push(`Token payload contains an \`exp\` claim, but \`exp\` was ${typeof r} instead of a number. If set, \`exp\` should be the expiry date as a number of seconds since 1970-01-01. Don't wrap the value in "".`):i<1e9?t.push(`Token payload contains an \`exp\` claim, but \`exp\` is very small (${i}, representing ${new Date(1e3*i).toLocaleDateString()}). If set, \`exp\` should be the expiry date as a number of seconds since 1970-01-01.`):i>1e11?t.push(`Token payload contains an \`exp\` claim, but \`exp\` is very small (${i}, representing ${new Date(1e3*i).toLocaleDateString()}). If set, \`exp\` should be the expiry date as a number of seconds since 1970-01-01. Double-check that you are using seconds and not milliseconds or nanoseconds.`):i<(new Date).getTime()/1e3&&t.push(`Token payload contains an \`exp\` claim, but \`exp\` (${i}, representing ${new Date(1e3*i).toLocaleDateString()}) appears to be in the past, meaning the token will be rejected. This error can also happen if your device's clock is set incorrectly, in which case the token will still work.`));const a=e.nbf;return void 0===a||("number"!=typeof a?t.push(`Token payload contains a \`nbf\` (not-before) claim, but \`nbf\` was ${typeof r} instead of a number. If set, \`nbf\` should be the date when the JWT becomes valid, as a number of seconds since 1970-01-01.`):a>1e11&&t.push(`Token payload contains a \`nbf\` (not-before) claim, but \`nbf\` is very large (${a}, representing ${new Date(1e3*a).toLocaleDateString()}). If set, \`nbf\` should be the date when the JWT becomes valid, as a number of seconds since 1970-01-01. Double-check that you are using seconds and not milliseconds or nanoseconds.`)),t}sendBokenRequest(e,t){return h(this,null,(function*(){let s=0;const n=e.getBokensUrl(this.appId,this.userId,t),r=yield ws({method:"GET",url:n,attempts:1e4,shouldRetry:e=>{if(e instanceof Error)return!0;if(401===e.status)throw"Check that you provided a valid signature.";if(404===e.status)throw"Check that you specified the correct App ID.";if(429===e.status||502===e.status)return!0;if(e.status>=400&&e.status<500)throw`Unexpected HTTP ${e.status} response when fetching auth token. Check that you configured the session correctly.`;if(s++,s>=5)throw`Unexpected HTTP ${e.status} response when fetching auth token, retrying did not help.`;return!0}});return(yield r.json()).boken}))}}function Fs(e){try{const t=e.replace(/-/g,"+").replace(/_/g,"/"),s=decodeURIComponent(atob(t).split("").map((e=>"%"+("00"+e.charCodeAt(0).toString(16)).slice(-2))).join(""));return JSON.parse(s)}catch(t){throw`Could not base64-decode and JSON-parse token section: ${e}. Check that you base-64 encoded the section correctly.`}}const Bs=new ys("wss://realtime.talkjs.com/v1","https://app.talkjs.com/api/v0","https://api.talkjs.com/v1");class Ns{constructor(e){this.target=e}deref(){return this.target}}const Rs=new class{constructor(){this.registry={}}getOrCreate(e){var t;const s=this.key(e),n=null==(t=this.registry[s])?void 0:t.deref();if(n)return n;const r=new Ps(e),i=globalThis.WeakRef?new WeakRef(r):new Ns(r);return this.registry[s]=i,r}deregister(e,t){const s=this.key({appId:e,userId:t});delete this.registry[s]}key({appId:e,userId:t}){return`${e}:${t}`}};class Ps{constructor(e){!function(e){function t(e,t){if(!e)throw new Error("[TalkJS] TalkSession: "+t)}t(e&&"object"==typeof e,"Expected an object argument in TalkSession#constructor."),t(e.appId&&"string"==typeof e.appId,"The `appId` property of TalkSession#constructor is required and it must be a non-empty string."),t("string"==typeof e.userId,"The `userId` property of TalkSession#constructor is required and it must be a string."),void 0!==e.token&&t(e.token&&"string"==typeof e.token,"The `token` property of TalkSession#constructor must be a non-empty string."),void 0!==e.tokenFetcher&&t("function"==typeof e.tokenFetcher,"The `tokenFetcher` property of TalkSession#constructor must be a function.")}(e);const{appId:t,userId:s,token:n,tokenFetcher:r,signature:i}=e;this._appId=t,this._apiUrls=e.apiUrls?new ys(e.apiUrls.realtimeWsApiUrl,e.apiUrls.internalHttpApiUrl,e.apiUrls.restApiHttpUrl):Bs,this._authProvider=new Ms(this._apiUrls,t,s,n,r,i);const a=Math.random().toString().split(".")[1];this._realtimeClient=new Pe(this._apiUrls.getRealtimeWsUrl(t,s,"1.3.0",a,e.clientBuild),s,this._authProvider),this.currentUser=new Ue(this._realtimeClient.userId,this._realtimeClient),this._terminationReason=y(),this._terminationReason.promise.then((e=>{console.error(`[TalkSession] ${e}`)})),function(e,t,s){return h(this,null,(function*(){return ws({method:"GET",url:`${t}/${e}/app`,authProvider:s}).then((e=>200===e.status||404!==e.status&&(console.warn(`[TalkJS] Received unexpected ${e.status} status code when validating app ID. Assuming that the app ID is valid.`),!0))).catch((e=>{if("string"!=typeof e&&"status"in e){const t=e;return 200===t.status||404!==t.status&&(console.warn(`[TalkJS] Received unexpected ${t.status} status code when validating app ID. Assuming that the app ID is valid.`),!0)}return console.warn("[TalkJS] Encountered network issues when validating app ID. Assuming that the app ID is valid."),!0}))}))}(this._appId,this._apiUrls.internalHttpApiUrl,this._authProvider).then((e=>{e||this.terminate(new Error(`The app ID ${this._appId} does not exist. Make sure you are using the correct app ID as found on the TalkJS dashboard. App IDs are case-sensitive.`))})),this._authProvider.onTokenRefreshFailed((e=>{this.terminate(new Error(`Could not authenticate, cannot recover automatically: ${e}`))}))}onError(e){const t=y();return Promise.race([t.promise,this._terminationReason.promise]).then((t=>{"UNSUBSCRIBED"!==t&&e(t)})),{unsubscribe:()=>t.resolve("UNSUBSCRIBED")}}user(e){return new Ue(e,this._realtimeClient)}conversation(e){return new gs(e,this._realtimeClient)}subscribeConversations(e){return this._realtimeClient.subscribe(["me","conversations"],e)}terminate(e){Rs.deregister(this._appId,this.currentUser.id),this._terminationReason.resolve(e),this._realtimeClient.destroy()}_isConnected(){return this._realtimeClient.isConnected()}uploadFile(e,t){return Os(`${this._apiUrls.restApiHttpUrl}/${this._appId}/files`,this._authProvider,e,t)}uploadImage(e,t){return Os(`${this._apiUrls.restApiHttpUrl}/${this._appId}/files`,this._authProvider,e,u({subtype:"image"},t))}uploadVideo(e,t){return Os(`${this._apiUrls.restApiHttpUrl}/${this._appId}/files`,this._authProvider,e,u({subtype:"video"},t))}uploadAudio(e,t){return Os(`${this._apiUrls.restApiHttpUrl}/${this._appId}/files`,this._authProvider,e,u({subtype:"audio"},t))}uploadVoice(e,t){return Os(`${this._apiUrls.restApiHttpUrl}/${this._appId}/files`,this._authProvider,e,u({subtype:"voice"},t))}}function Os(e,t,s,n){return h(this,arguments,(function*(e,t,s,{subtype:n,filename:r,width:i,height:a,duration:o}){const u=new FormData;return u.set("file",s,r),void 0!==n&&u.set("subtype",n),void 0!==i&&u.set("width",i.toString()),void 0!==a&&u.set("height",a.toString()),void 0!==o&&u.set("duration",o.toString()),ws({method:"POST",url:e,data:u,authProvider:t}).then((e=>e.json())).then((e=>e.attachmentToken)).catch((e=>h(this,null,(function*(){if(e instanceof Response){const t=yield e.json(),s=`Unexpected response when uploading file, status code ${e.status} ${t.errorCode}, ${t.reasons}`;throw new Error(s)}throw e}))))}))}exports.getTalkSession=function(e){return e.forceCreateNew?new Ps(e):Rs.getOrCreate(e)},exports.registerPolyfills=function({WebSocket:e}){x=e};
1
+ "use strict";var e,t=Object.defineProperty,s=Object.defineProperties,n=Object.getOwnPropertyDescriptors,r=Object.getOwnPropertySymbols,i=Object.prototype.hasOwnProperty,a=Object.prototype.propertyIsEnumerable,o=(e,s,n)=>s in e?t(e,s,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[s]=n,u=(e,t)=>{for(var s in t||(t={}))i.call(t,s)&&o(e,s,t[s]);if(r)for(var s of r(t))a.call(t,s)&&o(e,s,t[s]);return e},l=(e,t)=>s(e,n(t)),c=(e,t)=>{var s={};for(var n in e)i.call(e,n)&&t.indexOf(n)<0&&(s[n]=e[n]);if(null!=e&&r)for(var n of r(e))t.indexOf(n)<0&&a.call(e,n)&&(s[n]=e[n]);return s},h=(e,t,s)=>new Promise(((n,r)=>{var i=e=>{try{o(s.next(e))}catch(Ge){r(Ge)}},a=e=>{try{o(s.throw(e))}catch(Ge){r(Ge)}},o=e=>e.done?n(e.value):Promise.resolve(e.value).then(i,a);o((s=s.apply(e,t)).next())}));function d(e,t){if(t.ok)return t.value.data;if("SESSION_DESTROYED"===t.value)throw new Error(`${e} failed because the session was destroyed`);if("server"===t.where)throw new Error(p(e,t.value));throw"unreachable"}function p(e,t){let s;return s=Array.isArray(t.reasons)?t.reasons.join():JSON.stringify(t.reasons),`${e} failed, got status ${t.status} ${t.errorCode}, reasons: ${s}`}function f(e,t){if(e.length!==t.length)return!1;for(let s=0;s<e.length;s++)if("*"!==t[s]&&e[s]!==t[s])return!1;return!0}function m(e){return e<=0?Promise.resolve():new Promise((t=>setTimeout(t,e)))}function g(e,t){return e*(1-t+2*Math.random()*t)}Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const v=()=>!0;function b(e,t,s){return h(this,arguments,(function*(e,t,{initialDelay:s,maxDelay:n,log:r,shouldRetry:i=v}){return t().catch((a=>h(this,null,(function*(){if(0===e)throw a;if(!(yield i(a)))throw a;const o=1e3*s*1.2,u=g(n?Math.min(1e3*n,o):o,.05);return m(u).then((()=>b(e-1,t,{initialDelay:u/1e3,maxDelay:n,log:r,shouldRetry:i})))}))))}))}function y(){const e={},t=new Promise((function(t,s){e.resolve=t,e.reject=s}));return e.promise=t,e}class w{constructor(e,t,s){this.layer=e,this.states=t,this.transitions=s,this._state=t[0]}get state(){return this._state}transition(e){const t=this.transitions[e];if(!t)return;if(!this.canTransition(e))return;const s=this.state;this._state=t.to,t.afterTransition({from:s,to:this.state})}canTransition(e){const t=this.transitions[e];return!!t&&("ANY"===t.from||t.from.includes(this.state))}}function C(e){return{ok:!0,value:e}}function A(e){return{ok:!1,where:"client",value:e}}function E(e){return{ok:!1,where:"server",value:e}}function k(){const e={},t=new Promise((t=>{e.ok=e=>h(this,null,(function*(){return t(C(e))})),e.clientErr=e=>t(A(e)),e.serverErr=e=>t(E(e)),e.resolve=e=>t(e)}));return e.promise=t,e}let x=null;class S{constructor(e,t){this.realtimeUrl=e,this.handlers=t,this.socket=null,this.stateMachine=new w("ReconnectingSocket",["STOPPED","CONNECTING","READY","DISCONNECTED","TERMINATED"],{startWs:{from:["STOPPED","DISCONNECTED"],to:"CONNECTING",afterTransition:()=>{const e=new(function(){if(x)return x;if(globalThis.WebSocket)return globalThis.WebSocket;throw new Error("Missing WebSocket implementation")}())(this.realtimeUrl+"&talkjs-time="+Date.now());this.socket=e,e.addEventListener("open",(()=>{this.socket===e&&this.stateMachine.transition("onOpen")})),e.addEventListener("close",(()=>{this.socket===e&&this.stateMachine.transition("onClose")})),e.addEventListener("message",(t=>{this.socket===e&&this.handlers.onMessage(t)}))}},onOpen:{from:["CONNECTING"],to:"READY",afterTransition:()=>{this.handlers.onOpen()}},onClose:{from:["CONNECTING","READY"],to:"DISCONNECTED",afterTransition:e=>h(this,[e],(function*({from:e}){"READY"===e&&this.handlers.onClose(),this.socket=null;const t=g(1e4,.5);setTimeout((()=>{"DISCONNECTED"===this.stateMachine.state&&this.stateMachine.transition("startWs")}),t)}))},stopWs:{from:["CONNECTING","DISCONNECTED","READY"],to:"STOPPED",afterTransition:({from:e})=>{"READY"===e&&this.handlers.onClose();const t=this.socket;this.socket=null,null==t||t.close(1e3)}},destroy:{from:"ANY",to:"TERMINATED",afterTransition:()=>{const e=this.socket;this.socket=null,null==e||e.close(1e3)}}})}stopWs(){this.stateMachine.transition("stopWs")}startWs(){this.stateMachine.transition("startWs")}send(e){return"READY"===this.stateMachine.state?(this.socket.send(e),C(void 0)):A("SOCKET_NOT_READY")}terminate(){const e=this.socket;this.stateMachine.canTransition("onClose")&&this.stateMachine.transition("onClose"),e&&("terminate"in e?e.terminate():e.close(1e3))}destroy(){this.stateMachine.transition("destroy")}}class T{constructor(e,t){this.handlers=t,this.socket=new S(e,{onOpen:()=>this.handlers.onOpen(),onClose:()=>this.handlers.onClose(),onMessage:e=>this.onWebSocketMessage(e)})}call(e,t,s,n){const r=`/${s.map((e=>encodeURIComponent(e))).join("/")}`,i=JSON.stringify([e,t,r,n]);return this.socket.send(i)}stopWs(){this.socket.stopWs()}startWs(){this.socket.startWs()}destroy(){this.socket.destroy()}terminate(){this.socket.terminate()}onWebSocketMessage(e){if("Auth token expired"!==e.data)try{const t=JSON.parse(e.data);if("PUBLISH"===t[1]){const e=t[0],s=JSON.stringify([e,"ACK"]);this.socket.send(s);const n=t.slice(2),r=[];n.forEach((e=>{"session.expired"===e.type?this.handlers.onAuthExpired():"upstream.restarting"===e.type?this.handlers.onUpstreamRestarting():r.push(e)})),r.length>0&&this.handlers.onPublish(e,r)}else{const e=t[0],s=t[1],n=t[2];this.handlers.onResponse(e,s,n)}}catch(t){}else this.handlers.onAuthExpired()}}class I{constructor(e){this.delayMs=e,this.timeout=void 0}schedule(e){this.stop(),this.timeout=setTimeout((()=>{void 0!==this.timeout&&(this.stop(),e())}),this.delayMs)}stop(){void 0!==this.timeout&&(clearTimeout(this.timeout),this.timeout=void 0)}}class D{constructor(){this.i=-1}next(){return this.i++,this.i}reset(){this.i=-1}}class M{constructor(e,t){this.handlers=t,this.seqCounter=new D,this.responseHandlers={},this.heartbeats=new F(this),this.socket=new T(e,{onUpstreamRestarting:()=>{this.heartbeats.serverActive(),this.handlers.onUpstreamRestarting()},onOpen:()=>{this.heartbeats.clientActive(),this.heartbeats.serverActive(),this.handlers.onReady()},onClose:()=>{this.heartbeats.stop(),Object.values(this.responseHandlers).forEach((e=>{e.clientErr("WEBSOCKET_DISCONNECTED")})),this.responseHandlers={},this.seqCounter.reset(),this.handlers.onNotReady()},onResponse:(e,t,s)=>{this.heartbeats.serverActive(),this.onResponse(e,t,s)},onPublish:(e,t)=>{this.heartbeats.serverActive(),this.handlers.onPublish(e,t),this.heartbeats.clientActive()},onAuthExpired:()=>{this.heartbeats.serverActive(),this.handlers.onAuthExpired()}})}call(e,t,s){const n=this.seqCounter.next(),r=k();this.responseHandlers[n]=r;const i=this.socket.call(n,e,t,s);return i.ok||r.resolve(i),this.heartbeats.clientActive(),r.promise}onResponse(e,t,s){return h(this,null,(function*(){const n=this.responseHandlers[e];n&&(200===t?n.ok({status:t,data:s}):n.serverErr({status:t,errorCode:s.errorCode,reasons:s.reasons}),delete this.responseHandlers[e])}))}stopWs(){this.socket.stopWs()}startWs(){this.socket.startWs()}destroy(){this.heartbeats.stop(),Object.values(this.responseHandlers).forEach((e=>{e.clientErr("WEBSOCKET_DISCONNECTED")})),this.responseHandlers={},this.socket.destroy()}terminate(){this.socket.terminate()}}class F{constructor(e){this.connection=e,this.clientInactivityTimer=new I(25e3),this.serverInactivityTimer=new I(1e4),this.serverTimeoutTimer=new I(5e3)}clientActive(){this.clientInactivityTimer.schedule((()=>{this.sendHeartbeat()}))}serverActive(){this.serverTimeoutTimer.stop(),this.serverInactivityTimer.schedule((()=>{this.sendHeartbeat(),this.serverTimeoutTimer.schedule((()=>{this.connection.terminate()}))}))}stop(){this.clientInactivityTimer.stop(),this.serverInactivityTimer.stop(),this.serverTimeoutTimer.stop()}sendHeartbeat(){this.connection.call("GET",["ping"],{}).catch((()=>{}))}}class B{constructor(e,t,s){this.authProvider=t,this.handlers=s,this.stateMachine=new w("AuthenticatedConnection",["WAITING_FOR_WS","LOGGING_IN","RENEWING_SESSION","READY","TERMINATED"],{logIn:{from:["WAITING_FOR_WS"],to:"LOGGING_IN",afterTransition:()=>h(this,null,(function*(){yield this.renewSession()}))},logInFailed:{from:["LOGGING_IN"],to:"LOGGING_IN",afterTransition:()=>h(this,null,(function*(){this.authProvider.refreshToken(),yield this.renewSession()}))},scheduledReauth:{from:["READY"],to:"RENEWING_SESSION",afterTransition:()=>h(this,null,(function*(){yield this.renewSession()}))},scheduledReauthFailed:{from:["RENEWING_SESSION"],to:"RENEWING_SESSION",afterTransition:()=>h(this,null,(function*(){this.authProvider.refreshToken(),yield this.renewSession()}))},authenticated:{from:["LOGGING_IN","RENEWING_SESSION"],to:"READY",afterTransition:({from:e})=>{"LOGGING_IN"===e&&this.handlers.onReady()}},authExpired:{from:["READY","RENEWING_SESSION"],to:"LOGGING_IN",afterTransition:()=>h(this,null,(function*(){this.handlers.onNotReady(),this.authProvider.refreshToken(),yield this.renewSession()}))},wsDisconnected:{from:["READY","LOGGING_IN","RENEWING_SESSION"],to:"WAITING_FOR_WS",afterTransition:({from:e})=>{"READY"!==e&&"RENEWING_SESSION"!==e||this.handlers.onNotReady(),this.authProvider.clearScheduledRefresh()}},destroy:{from:"ANY",to:"TERMINATED",afterTransition:()=>{this.authProvider.clearScheduledRefresh(),this.connection.destroy()}}}),this.connection=new M(e,{onUpstreamRestarting:()=>this.handlers.onUpstreamRestarting(),onReady:()=>this.stateMachine.transition("logIn"),onNotReady:()=>{this.stateMachine.transition("wsDisconnected")},onAuthExpired:()=>{this.stateMachine.transition("authExpired")},onPublish:(e,t)=>{this.handlers.onPublish(e,t)}}),t.onTokenChanged((()=>{"READY"===this.stateMachine.state&&this.stateMachine.transition("scheduledReauth")}))}call(e,t,s){const n=this.connection.call(e,t,s);return n.then((e=>{e.ok||"server"!==e.where||401!==e.value.status||"READY"!==this.stateMachine.state&&"RENEWING_SESSION"!==this.stateMachine.state||this.stateMachine.transition("authExpired")})),n}stopWs(){this.connection.stopWs()}startWs(){this.connection.startWs()}destroy(){this.stateMachine.transition("destroy")}renewSession(){return h(this,null,(function*(){const e=yield this.authProvider.getToken(),t=yield this.connection.call("POST",["session","renew"],{token:e});if(!t.ok&&"client"===t.where)return;const s=t.value;if(s.status,200===s.status){const t=s.data.expiresInSeconds;return void(null!==t&&t<120?(console.warn(`[TalkJS] Authenticated with a token that expires in ${t}s. Treating it as already expired and refreshing. Newly generated tokens should last at least 10 minutes.`),"LOGGING_IN"===this.stateMachine.state?this.stateMachine.transition("logInFailed"):"RENEWING_SESSION"===this.stateMachine.state&&this.stateMachine.transition("scheduledReauthFailed")):(this.authProvider.scheduleRefresh(t),this.authProvider.emitTokenAccepted(e),this.stateMachine.canTransition("authenticated")&&this.stateMachine.transition("authenticated")))}if(401===s.status)return void("LOGGING_IN"===this.stateMachine.state?this.stateMachine.transition("logInFailed"):"RENEWING_SESSION"===this.stateMachine.state&&this.stateMachine.transition("scheduledReauthFailed"));if(400===s.status)return void this.authProvider.emitTokenRefreshFailed(p("Authentication",s));if(402===s.status)return void this.authProvider.emitTokenRefreshFailed(p("Authentication",s));const n=5e3*Math.random()+5e3;setTimeout((()=>{this.call("POST",["session","renew"],{token:e}).catch((()=>{}))}),n)}))}}class N{constructor(e,t,s){this.handlers=s,this.stateMachine=new w("StopStartConnection",["STOPPED","WAITING_FOR_WS","READY","TERMINATED"],{unexpectedDisconnect:{from:["READY"],to:"WAITING_FOR_WS",afterTransition:()=>{this.inactivityTimer.stop(),this.handlers.onNotReady()}},stop:{from:["WAITING_FOR_WS","READY"],to:"STOPPED",afterTransition:()=>{this.connection.stopWs(),this.inactivityTimer.stop(),this.handlers.onNotReady()}},start:{from:["STOPPED"],to:"WAITING_FOR_WS",afterTransition:()=>{this.connection.startWs()}},ready:{from:["WAITING_FOR_WS"],to:"READY",afterTransition:()=>{this.pendingCalls=0,this.activeSubscriptions=0,this.inactivityTimer.schedule((()=>{this.stateMachine.transition("stop")})),this.handlers.onReady()}},destroy:{from:"ANY",to:"TERMINATED",afterTransition:()=>{this.inactivityTimer.stop(),this.connection.destroy()}}}),this.pendingCalls=0,this.activeSubscriptions=0,this.inactivityTimer=new I(3e3),this.connection=new B(e,t,{onUpstreamRestarting:()=>{this.handlers.onUpstreamRestarting()},onReady:()=>{this.stateMachine.transition("ready")},onNotReady:()=>{"READY"===this.stateMachine.state&&this.stateMachine.transition("unexpectedDisconnect")},onPublish:(e,t)=>{this.handlers.onPublish(e,t)}})}get inactive(){return 0===this.pendingCalls&&0===this.activeSubscriptions}ensureStarted(){this.stateMachine.canTransition("start")&&this.stateMachine.transition("start")}call(e,t,s){return h(this,null,(function*(){this.inactivityTimer.stop(),this.pendingCalls++;const n=yield this.connection.call(e,t,s);return this.pendingCalls--,"SUBSCRIBE"===e&&n.ok?this.activeSubscriptions++:"UNSUBSCRIBE"===e&&n.ok&&this.activeSubscriptions--,this.inactive&&this.inactivityTimer.schedule((()=>{this.stateMachine.transition("stop")})),n}))}destroy(){this.stateMachine.transition("destroy")}isConnected(){return"READY"===this.stateMachine.state}}class R{constructor(e,t,s){this.handlers=s,this.stateMachine=new w("QueuedConnection",["NOT_READY","PROCESSING_QUEUE","READY","TERMINATED"],{processQueue:{from:["NOT_READY"],to:"PROCESSING_QUEUE",afterTransition:()=>{this.sendQueuedCalls()}},ready:{from:["PROCESSING_QUEUE"],to:"READY",afterTransition:()=>{this.handlers.onReady()}},notReady:{from:["PROCESSING_QUEUE","READY"],to:"NOT_READY",afterTransition:()=>{Object.values(this.subscribeQueue).forEach((e=>e.deferred.ok({status:200,data:{}}))),this.subscribeQueue={},this.handlers.onSubscriptionsLost()}},destroy:{from:"ANY",to:"TERMINATED",afterTransition:()=>{for(var e;this.callQueue.length;){const t=null==(e=this.callQueue.shift())?void 0:e.deferred;null==t||t.clientErr("SESSION_DESTROYED")}this.connection.destroy()}}}),this.subscribeQueue={},this.callQueue=[],this.connection=new N(e,t,{onUpstreamRestarting:()=>{this.handlers.onUpstreamRestarting()},onReady:()=>{this.stateMachine.transition("processQueue")},onNotReady:()=>{this.stateMachine.transition("notReady")},onPublish:(e,t)=>{this.handlers.onPublish(e,t)}})}call(e,t,s){return"READY"===this.stateMachine.state?this.connection.call(e,t,s):("NOT_READY"===this.stateMachine.state&&this.connection.ensureStarted(),"SUBSCRIBE"===e||"UNSUBSCRIBE"===e?this._subscribe(e,t,s):this._call(e,t,s))}_subscribe(e,t,s){const n=t.join("/"),r=this.subscribeQueue[n];if(r&&r.method===e)return r.deferred.promise;r&&r.method!==e&&(r.deferred.ok({status:200,data:{}}),delete this.subscribeQueue[n]);const i={deferred:k(),method:e,path:t,data:s};return this.subscribeQueue[n]=i,i.deferred.promise}_call(e,t,s){const n={deferred:k(),method:e,path:t,data:s};return this.callQueue.push(n),n.deferred.promise}dequeue(){for(const e in this.subscribeQueue){const t=this.subscribeQueue[e];return delete this.subscribeQueue[e],t}return this.callQueue.shift()}destroy(){this.stateMachine.transition("destroy")}sendQueuedCalls(){return h(this,null,(function*(){let e=0;for(;"PROCESSING_QUEUE"===this.stateMachine.state;){e++;const t=this.dequeue();if(!t)return void this.stateMachine.transition("ready");this.connection.call(t.method,t.path,t.data).then((e=>{t.deferred.resolve(e)})),e>50&&(yield new Promise((e=>setTimeout(e,100))))}}))}isConnected(){return"READY"===this.stateMachine.state||"PROCESSING_QUEUE"===this.stateMachine.state}}const _="undefined"!=typeof window&&null!=(e=window.queueMicrotask)?e:setTimeout;class P{constructor(e,t){this.clearPendingBatch=e,this.sendCalls=t,this.sent=!1,_((()=>this.send()))}send(){this.sent||(this.sent=!0,this.clearPendingBatch(),this.sendCalls())}destroy(){this.sent=!0}}class O extends P{constructor(e,t){super(t,(()=>{this.sendSubscribe(),this.sendGet()})),this.connection=e,this.getCalls=[],this.subscribeCalls=[]}canPush(e,t){return O.isCorrectBatchTypeFor(e,t)}static isCorrectBatchTypeFor(e,t){return f(t,["users","*"])&&("GET"===e||"SUBSCRIBE"===e)}push(e,t,s){const n=t[1],r=k();return"GET"===e?this.getCalls.push({userId:n,deferred:r}):this.subscribeCalls.push({userId:n,deferred:r}),1e3!==this.getCalls.length&&1e3!==this.subscribeCalls.length||this.send(),r.promise}sendGet(){return h(this,null,(function*(){if(0===this.getCalls.length)return;const e=[...new Set(this.getCalls.map((e=>e.userId)))],t=yield this.connection.call("GET",["users"],{ids:e,includePrivateFields:!1});if(t.ok)for(const s of this.getCalls){const e=t.value.data[s.userId];e?s.deferred.ok({status:200,data:e}):s.deferred.serverErr({status:404,errorCode:"NOT_FOUND",reasons:["No user with that ID exists"]})}else this.getCalls.forEach((e=>e.deferred.resolve(t)))}))}sendSubscribe(){if(0===this.subscribeCalls.length)return;const e=[...new Set(this.subscribeCalls.map((e=>e.userId)))];this.connection.call("SUBSCRIBE",["users"],{ids:e}).then((e=>this.subscribeCalls.forEach((t=>t.deferred.resolve(e)))))}}class U extends P{constructor(e,t,s){super(s,(()=>this.sendMutate())),this.conversationId=e,this.connection=t,this.calls=[]}canPush(e,t){return!!U.isCorrectBatchTypeFor(e,t)&&t[1]===this.conversationId}static isCorrectBatchTypeFor(e,t){return f(t,["conversations","*","participants","*"])&&("PUT"===e||"POST"===e||"PATCH"===e)}push(e,t,s){const n=t[3],r=k();return this.calls.push({action:{id:n,method:e,params:s},deferred:r}),100===this.calls.length&&this.send(),r.promise}sendMutate(){return h(this,null,(function*(){const e=this.calls.map((e=>e.action)),t=yield this.connection.call("POST",["conversations",this.conversationId,"participants"],{actions:e});if(!t.ok)return void this.calls.forEach((e=>e.deferred.resolve(t)));const s=t.value.data.responses;for(let n=0;n<s.length;n++){const e=this.calls[n].deferred,t=s[n];200===t.status?e.ok(l(u({},t),{data:{}})):e.serverErr(t)}}))}}class j{constructor(e,t,s){this.pendingBatch=null,this.connection=new R(e,t,s)}call(e,t,s){return h(this,null,(function*(){var n;if(null==(n=this.pendingBatch)?void 0:n.canPush(e,t))return this.pendingBatch.push(e,t,s);this.pendingBatch&&this.pendingBatch.send();const r=this.createEmptyBatchFor(e,t);return r?(this.pendingBatch=r,r.push(e,t,s)):this.connection.call(e,t,s)}))}destroy(){var e;this.connection.destroy(),null==(e=this.pendingBatch)||e.destroy()}isConnected(){return this.connection.isConnected()}createEmptyBatchFor(e,t){if(O.isCorrectBatchTypeFor(e,t))return new O(this.connection,(()=>this.pendingBatch=null));if(U.isCorrectBatchTypeFor(e,t)){const e=t[1];return new U(e,this.connection,(()=>this.pendingBatch=null))}return null}}const $={200:"RESOLVE",400:"RESOLVE",401:"RETRY",402:"RESOLVE",403:"RESOLVE",404:"RESOLVE",405:"RESOLVE",409:"RESOLVE",429:"DELAY",500:"DELAY"};class W{constructor(e,t,s){this.throttler=new q,this.alive=!0,this.connection=new j(e,t,s)}call(e,t,s){return h(this,null,(function*(){let n=0;for(;this.alive;){const r=yield this.connection.call(e,t,s);if((r.ok||"client"!==r.where||"SOCKET_NOT_READY"!==r.value)&&(r.ok||"server"!==r.where||500!==r.value.status)||n++,10===n)return r;if(r.ok||"client"!==r.where){const e=r.value,t=e.status,s=$[t];if("RESOLVE"===s)return this.throttler.resetDelay(),r;if("RETRY"===s)continue;if("DELAY"===s){yield this.throttler.wait();continue}return console.warn("[TalkJS] Unexpected status code",t),e}if("SESSION_DESTROYED"===r.value)return A("SESSION_DESTROYED");"WEBSOCKET_DISCONNECTED"!==r.value&&("SOCKET_NOT_READY"!==r.value?r.value:yield this.throttler.wait())}return A("SESSION_DESTROYED")}))}destroy(){this.alive=!1,this.connection.destroy()}isConnected(){return this.connection.isConnected()}}class q{constructor(){this.initialDelayMs=200,this.exponentialFactor=1.2,this.maxDelayMs=3e4,this.currentDelayMs=this.initialDelayMs,this.lastCall=0}getCurrentDelay(){return this.currentDelayMs}wait(){const e=(new Date).getTime(),t=g(this.currentDelayMs,.05),s=this.lastCall+t,n=Math.max(0,s-e);return this.lastCall=e+n,this.currentDelayMs=Math.min(t*this.exponentialFactor,this.maxDelayMs),m(n)}resetDelay(){this.currentDelayMs=this.initialDelayMs}}function H(e){return e.map((e=>encodeURIComponent(e))).join()}class G{constructor(){this.paths={}}add(e){this.paths[H(e)]=e}delete(e){delete this.paths[H(e)]}has(e){return Object.hasOwnProperty.call(this.paths,H(e))}clear(){this.paths={}}forEach(e){Object.values(this.paths).forEach((t=>e(t)))}}class L{constructor(e,t,s){this.handlers=s,this.targetSubscriptions=new G,this.connection=new W(e,t,{onUpstreamRestarting:()=>this.handlers.onUpstreamRestarting(),onSubscriptionsLost:()=>{this.targetSubscriptions.forEach((e=>{this.resubscribe(e)})),this.handlers.onResubscribeSent()},onReady:()=>this.handlers.onReady(),onPublish:(e,t)=>{this.handlers.onPublish(e,t)}})}call(e,t,s){return this.connection.call(e,t,s)}subscribe(e){return h(this,null,(function*(){return this.targetSubscriptions.add(e),this.connection.call("SUBSCRIBE",e,{})}))}unsubscribe(e){return h(this,null,(function*(){return this.targetSubscriptions.delete(e),this.connection.call("UNSUBSCRIBE",e,{})}))}resubscribe(e){return h(this,null,(function*(){const t=yield this.connection.call("SUBSCRIBE",e,{});t.ok||this.handlers.onResubscribeError(e,t)}))}destroy(){this.targetSubscriptions.clear(),this.connection.destroy()}isConnected(){return this.connection.isConnected()}}function z(e,t){return void 0===t?e:t}function J(e,t){if(void 0===t)return e;if(null===t)return{};const s=u({},e);for(const n in t){const e=t[n];null===e?delete s[n]:s[n]=e}return s}function Y(e,t){if(e===t)return!0;if(!e||!t)return!1;if("object"!=typeof e||"object"!=typeof t)return!1;if(e.constructor!==t.constructor)return!1;if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return!1;for(let s=0;s<e.length;s++)if(!Y(e[s],t[s]))return!1}else{const s=Object.keys(e);if(s.length!==Object.keys(t).length)return!1;for(const n of s){if(!Object.hasOwnProperty.call(t,n))return!1;if(!Y(e[n],t[n]))return!1}}return!0}class Q{constructor(){this.prev=Promise.resolve()}runExclusive(e){return h(this,null,(function*(){const t=this.prev.then((()=>e()));return this.prev=t,t}))}}class V{constructor(e){this.initialised=!1,this.getPointer=void 0,this.pendingStates=[e],e.resultPromise.then((()=>this.initialised=!0))}get pendingPointer(){if(0!==this.pendingStates.length)return this.pendingStates[this.pendingStates.length-1]}get mostRecentState(){var e;return null!=(e=this.pendingPointer)?e:this.getPointer}canAppendState(e){var t,s;const n=null==(t=this.getPointer)?void 0:t.seq;if(void 0!==n&&e<=n)return!1;const r=null==(s=this.pendingPointer)?void 0:s.seq;return!(void 0!==r&&e<r)}set(e){if(!this.canAppendState(e.seq))throw"Appending in the past";this.pendingStates.push(e)}mutate(e,t){if(!this.initialised)return;if(!this.canAppendState(e))throw"Mutating in the past";const s=this.mostRecentState.resultPromise.then((e=>e.ok?t(e):e));this.pendingStates.push({seq:e,resultPromise:s})}get(e){for(;this.pendingStates.length>0&&(void 0===this.getPointer||this.pendingStates[0].seq<=e);)this.getPointer=this.pendingStates.shift();return this.getPointer}}class Z extends V{constructor(e,t){super(e),this.onTeardown=t,this._error=null,this._lastGoodState=Promise.resolve(void 0)}get error(){return this._error}get lastGoodState(){return this._lastGoodState}mutate(e,t){super.mutate(e,t),this.registerNewState(this.mostRecentState.resultPromise)}set(e){super.set(e),this.registerNewState(this.mostRecentState.resultPromise)}registerNewState(e){const t=this.lastGoodState;this._lastGoodState=e.then((e=>e.ok?e.value:t)),e.then((e=>{e.ok||this.setError(e)}))}setError(e){var t;this._error||(this._error=e,null==(t=this.onTeardown)||t.call(this,e),this.lastGoodState.then((e=>{void 0!==e&&this.teardownNested(e)})))}}class K extends Z{constructor(e,t){const s=new Promise((e=>setTimeout(e))).then((()=>this.fetchInitial(e)));super({seq:e,resultPromise:s},t),this.initialSeq=e,this.getDeepMutex=new Q,this.lastDeep=void 0}refetchInitial(e){return h(this,null,(function*(){const t=this.mostRecentState.resultPromise,s=this.fetchInitial(e),[n,r]=yield Promise.all([t,s]);return void 0!==n&&n.ok&&r.ok&&this.equal(n.value,r.value)?n:r}))}refetch(e){if(null!==this.error)return;const t={seq:e,resultPromise:this.refetchInitial(e)};this.set(t)}changedBetween(e,t){return h(this,null,(function*(){if(e>=t)return!1;const s=this.get(t),n=yield s.resultPromise;return!!n.ok&&(n.value.lastChanged>Math.max(this.initialSeq,e)&&n.value.lastChanged<=t||(yield this.anyChildChanged(e,t,n.value)))}))}getDeep(e){return h(this,null,(function*(){return this.getDeepMutex.runExclusive((()=>h(this,null,(function*(){var t;if(null!==this.error)return this.error;const s=null==(t=this.lastDeep)?void 0:t.seq;if(e===s)return this.lastDeep.deep;if(void 0!==s){if(e<s)throw`Trying to load seq ${e} when we have previously loaded seq ${s}`;if(!(yield this.changedBetween(s,e)))return this.lastDeep.seq=e,this.lastDeep.deep}const n=this.get(e).resultPromise,r=n.then((t=>t.ok?this.loadNested(e,t.value):t));this.lastDeep={seq:e,shallow:n,deep:r};const i=yield r;return i.ok||this.setError(i),i}))))}))}}class X extends K{constructor(e,t,s){super(e,s),this.emitMutex=t,this.unsubscribeTimer=new ee,this.referencedByOtherStores=0,this.listeners=[],this.lastEmitSeq=void 0,this.lastEmitResult=void 0,t.runExclusive((()=>h(this,null,(function*(){yield this.emit(e)}))))}registerInternalSubscription(){this.referencedByOtherStores++;let e=!0;return()=>{e&&(e=!1,this.referencedByOtherStores--,this.startUnsubscribeTimerIfOrphan())}}get onlyUsedInternally(){return 0===this.listeners.length}listen(e){return this.unsubscribeTimer.stop(),this.listeners.push(e),void 0!==this.lastEmitResult&&e(this.lastEmitResult),()=>{this.listeners=this.listeners.filter((t=>t!==e)),this.startUnsubscribeTimerIfOrphan()}}startUnsubscribeTimerIfOrphan(){0===this.referencedByOtherStores&&0===this.listeners.length&&this.unsubscribeTimer.restart((()=>{this.setError(A("UNSUBSCRIBED"))}),this.unsubscribeDebounceMs)}getLoadMoreSeq(){var e;const t=null!=(e=this.lastEmitSeq)?e:0,s=this.mostRecentState.seq;return Math.max(t,s)+1e-6}emit(e){return h(this,null,(function*(){var t;if(this.onlyUsedInternally)return;if(this.lastEmitSeq&&this.lastEmitSeq>=e)return;if(!1===(null==(t=this.lastEmitResult)?void 0:t.ok))return;this.lastEmitSeq=e;const s=yield this.getDeep(e);s!==this.lastEmitResult&&(this.lastEmitResult=s,this.listeners.forEach((e=>e(s))))}))}}class ee{constructor(){this.timerId=void 0}restart(e,t){void 0!==this.timerId&&clearTimeout(this.timerId),this.timerId=setTimeout((()=>e()),t)}stop(){clearTimeout(this.timerId)}}class te extends X{constructor(e,t,s,n,r){super(e,n,r),this.userId=t,this.realtimeClient=s,this.unsubscribeDebounceMs=1e4}fetchInitial(e){return h(this,null,(function*(){const t=yield this.realtimeClient.call("GET",["users",this.userId],{includePrivateFields:!1},{bypassCache:!0});return t.ok?C({snapshot:this.realtimeClient.createUserSnapshot(t.value.data),lastChanged:e}):"server"===t.where&&404===t.value.status?C({snapshot:null,lastChanged:e}):t}))}equal(e,t){return Y(e.snapshot,t.snapshot)}loadNested(e,t){return h(this,null,(function*(){return C(t)}))}userCreated(e,t){this.mutate(e,(s=>null!==s.value.snapshot?s:C({snapshot:this.realtimeClient.createUserSnapshot(t.state),lastChanged:e})))}userEdited(e,t){this.mutate(e,(s=>{const n=s.value.snapshot;return null===n?(console.warn("[TalkJS] Received a 'used edited' event for a user that we thought didn't exist."),s):C({snapshot:{id:n.id,name:z(n.name,t.diff.name),custom:J(n.custom,t.diff.custom),locale:z(n.locale,t.diff.locale),photoUrl:z(n.photoUrl,t.diff.photoUrl),role:z(n.role,t.diff.role),welcomeMessage:z(n.welcomeMessage,t.diff.welcomeMessage)},lastChanged:e})}))}getFromCache(){return h(this,null,(function*(){const e=yield this.mostRecentState.resultPromise;return e.ok?null===e.value.snapshot?E({status:404,errorCode:"USER_NOT_FOUND",reasons:["That user does not exist yet"]}):C({status:200,data:{id:e.value.snapshot.id,name:e.value.snapshot.name,custom:e.value.snapshot.custom,locale:e.value.snapshot.locale,photoUrl:e.value.snapshot.photoUrl,role:e.value.snapshot.role,welcomeMessage:e.value.snapshot.welcomeMessage}}):A("NOT_IN_CACHE")}))}teardownNested(e){}anyChildChanged(e,t,s){return h(this,null,(function*(){return!1}))}}var se,ne={};function re(e,t){const s=t.lastIndex;let n;const r=[];for(;null!==(n=t.exec(e));)r.push(n);return t.lastIndex=s,r}function ie(e){const t=e.replace(/%2F/g,"/").replace(/^.*?\/([^/]+?)(?:\?.*)?$/,"$1");return decodeURIComponent(t)}function ae(e,t){e()||t||(t=e.toString().replace(/^function\s*\(\)\s*\{\s*return\s*(.*);\s*\}\s*$/,"`$1`")+" was not true")}!function(){if(se)return ne;function e(e){return String.fromCharCode(parseInt(e.slice(1),16))}function t(e){return`%${`00${e.charCodeAt(0).toString(16)}`.slice(-2)}`}se=1,Object.defineProperty(ne,"__esModule",{value:!0}),ne.encode=function(t){return btoa(encodeURIComponent(t).replace(/%[0-9A-F]{2}/g,e))},ne.decode=function(e){return decodeURIComponent(Array.from(atob(e),t).join(""))}}(),(e=>{function t(e,t){(function(e,t){switch(t){case"undefined":return void 0===e;case String:return"string"==typeof e||e instanceof String;case Boolean:return"boolean"==typeof e||e instanceof Boolean;case Number:return"number"==typeof e||e instanceof Number;default:return e instanceof t}})(e,t)||(t.name,String(e))}e.defined=function(e){},e.has=function(e,t){e[t]},e.is=t,e.equals=function(e,t){},e.oneOf=function(e,t){t.includes(e)||JSON.stringify(t)},e.isArray=function(e,s){t(e,Array),e&&e.length>0&&t(e[0],s)},e.optional=function(e,s){void 0!==e&&t(e,s)},e.falsy=function(e){},e.never=function(e){}})(ae||(ae={}));const oe=ae,ue=/^\/.*[^\\]\/[im]*$/;function le(e){return!!ue.test(e)&&!ce(e).test("")}function ce(e){const t=e.match(/^\/(.*[^\\])\/(.*)$/);if(!t)throw new Error(`Expected ${e} to be a (non-empty) regex`);let s=t[2]||"";return s=s.replace(/[^im]/g,"")+"g",new RegExp(t[1],s)}class he{constructor({mode:e,allowedHostnames:t,allowedPhoneNrs:s,allowedMatches:n,forbiddenMatches:r,suppressLinks:i,suppressEmailAddresses:a,suppressPhoneNumbers:o,replacement:u}){oe.oneOf(e,["all","otherOnly","off"]),this.mode=e,this.suppressLinks=!1!==i,this.suppressEmailAddresses=!1!==a,this.suppressPhoneNumbers=!1!==o,this.allowedHostnames=t||[],this.allowedPhoneNrs=(s||[]).filter((e=>e)).map((e=>e.replace(/[^0-9]/g,""))),this.allowedMatches=(n||[]).filter(le).map((e=>ce(e))),this.forbiddenMatches=(r||[]).filter(le).map((e=>ce(e))),oe((()=>this.allowedMatches.every((e=>e.flags.includes("g")))),"All regexes in `suppressContactInfo.allowedMatches` must be global. Check `allowedMatches`!"),oe((()=>this.forbiddenMatches.every((e=>e.flags.includes("g")))),"All regexes in `suppressContactInfo.forbiddenMatches` must be global. Check `forbiddenMatches`!"),u=null==u?void 0:u.trim(),this.replacement=u&&u.length>0?u:void 0}shouldSuppress({isContentBySender:e}){return"all"===this.mode||"otherOnly"===this.mode&&!e}}function de(e,t){return e.map((e=>function(e,t){if("text"===e.type)return pe(e.children,function(e){var t,s,n,r,i,a,o,u,l,c,h,d;let p="";return e.t&&(p=`(${e.t("CONTACT_INFORMATION_HIDDEN")})`),{formattedLinks:null!=(t=e.formattedLinks)?t:"plaintext",markup:null!=(s=e.markup)&&s,useFallbackMentions:null!=(n=e.useFallbackMentions)&&n,sameTabLinkRules:null!=(r=e.sameTabLinkRules)?r:[],enableEmojiImageFallback:null!=(i=e.enableEmojiImageFallback)&&i,highlight:null!=(a=e.highlight)?a:[],contactInfo:null!=(o=e.contactInfo)&&o,suppression:null!=(u=e.suppression)?u:new he({mode:"off"}),contactInfoHiddenText:null!=(h=null!=(c=e.contactInfoHiddenText)?c:null==(l=e.suppression)?void 0:l.replacement)?h:p,customEmojiUrls:null!=(d=e.customEmojiUrls)?d:{}}}(t));if("file"===e.type&&"video"===e.subtype)return`🎥 ${ie(e.url)}`;if("file"===e.type&&"image"===e.subtype)return`📷 ${ie(e.url)}`;if("file"===e.type&&"audio"===e.subtype)return`🎧 ${ie(e.url)}`;if("file"===e.type&&"voice"===e.subtype){const t=e.duration;return void 0===t?"🎙️":`🎙️ (${Math.floor(t/60)}:${Math.floor(t%60).toString().padStart(2,"0")})`}return"file"===e.type?(e.subtype,`📎 ${ie(e.url)}`):"location"===e.type?"📍":""}(e,t))).join("\n\n")}function pe(e,t){return e.flatMap((e=>{if("string"==typeof e)return e;switch(e.type){case"blockquote":case"bold":case"italic":case"strikethrough":case"link":case"actionlink":case"actionLink":case"actionbutton":case"actionButton":return pe(e.children,t);case"bulletlist":case"bulletList":return"\n"+pe(e.children,t);case"bulletpoint":case"bulletPoint":return"- "+pe(e.children,t)+"\n";case"autolink":case"autoLink":case"codeblock":case"codeBlock":case"codespan":case"codeSpan":case"emoji":case"customemoji":case"customEmoji":return e.text;case"suppressed":return t.contactInfoHiddenText;case"mention":return`@${e.text}`}})).join("")}class fe extends K{constructor(e,t,s,n){super(e),this.conversationId=t,this.message=s,this.realtimeClient=n}get messageId(){return"string"==typeof this.message?this.message:this.message.id}fetchInitial(e){return h(this,null,(function*(){let t;if("object"==typeof this.message)t=this.message;else{const e=yield this.realtimeClient.call("GET",["me","conversations",this.conversationId,"messages",this.message],{},{bypassCache:!0});if(!e.ok)return e;t=e.value.data}return C({lastChanged:e,sender:null===t.senderId?null:this.realtimeClient.internalSubscribe(["users",t.senderId]),data:{id:t.id,type:t.type,custom:t.custom,createdAt:t.createdAt,editedAt:t.editedAt,referencedMessageId:t.referencedMessageId,origin:t.origin,plaintext:de(t.content,{}),content:t.content}})}))}refetch(e){throw"Do not call refetch on message data stores, it can return outdated data. Destroy and remake them instead"}equal(e,t){return Y(e.data,t.data)}teardownNested(e){var t;null==(t=e.sender)||t.unsubscribe()}anyChildChanged(e,t,s){return h(this,null,(function*(){var n;const r=null==(n=s.sender)?void 0:n.store;return!0===(yield null==r?void 0:r.changedBetween(e,t))}))}loadNested(e,t){return h(this,null,(function*(){var s,n,r;const i=yield null==(n=null==(s=t.sender)?void 0:s.store)?void 0:n.getDeep(e);if(!1===(null==i?void 0:i.ok))return i;if(null===t.data)return C({snapshot:null});const a=null==i?void 0:i.value;return C({snapshot:{sender:null!=(r=null==a?void 0:a.snapshot)?r:null,id:t.data.id,type:t.data.type,custom:t.data.custom,createdAt:t.data.createdAt,editedAt:t.data.editedAt,origin:t.data.origin,plaintext:de(t.data.content,{}),content:t.data.content,referencedMessageId:t.data.referencedMessageId}})}))}messageEdited(e,t){this.mutate(e,(s=>null===s.value.data?s:C({lastChanged:e,sender:s.value.sender,data:{id:s.value.data.id,type:s.value.data.type,createdAt:s.value.data.createdAt,origin:s.value.data.origin,referencedMessageId:s.value.data.referencedMessageId,editedAt:z(s.value.data.editedAt,t.diff.editedAt),custom:J(s.value.data.custom,t.diff.custom),content:z(s.value.data.content,t.diff.content)}})))}messageDeleted(e,t){this.mutate(e,(s=>null===s.value.data?s:this.messageId===t.messageId?(this.teardownNested(s.value),C({lastChanged:e,sender:null,data:null})):s.value.data.referencedMessageId===t.messageId?C({lastChanged:e,sender:s.value.sender,data:{id:s.value.data.id,type:s.value.data.type,createdAt:s.value.data.createdAt,origin:s.value.data.origin,referencedMessageId:null,editedAt:s.value.data.editedAt,custom:s.value.data.custom,content:s.value.data.content}}):s))}getFromCache(){return h(this,null,(function*(){var e;const t=yield this.mostRecentState.resultPromise;if(!t.ok)return A("NOT_IN_CACHE");if(null===t.value.data)return E({status:404,errorCode:"MESSAGE_NOT_FOUND",reasons:["No message with that ID exists"]});const s=t.value,{sender:n}=s,r=c(s,["sender"]);return C({status:200,data:l(u({},r.data),{senderId:null!=(e=null==n?void 0:n.store.userId)?e:null})})}))}}class me extends K{constructor(e,t,s,n){super(e),this.createdAt=t,this.dataStore=s,this.referencedDataStore=n}get messageId(){return this.dataStore.messageId}fetchInitial(e){return h(this,null,(function*(){return C({lastChanged:e,dataStore:this.dataStore,referencedDataStore:this.referencedDataStore})}))}refetch(e){throw"Do not call refetch on message stores, it can return outdated data. Destroy and remake them instead"}equal(e,t){return!0}teardownNested(e){}anyChildChanged(e,t,s){return h(this,arguments,(function*(e,t,{dataStore:s,referencedDataStore:n}){return!0===(yield s.changedBetween(e,t))||!0===(yield null==n?void 0:n.changedBetween(e,t))}))}loadNested(e,t){return h(this,null,(function*(){var s,n,r;const i=yield t.dataStore.getDeep(e);if(!i.ok)return i;const a=i.value;if(null===a.snapshot)return C({snapshot:null});const o=yield null==(s=t.referencedDataStore)?void 0:s.getDeep(e);if(o&&!o.ok)return o;const u=null!=(n=null==o?void 0:o.value)?n:null,l=null!=(r=null==u?void 0:u.snapshot)?r:null;return C({snapshot:{id:a.snapshot.id,type:a.snapshot.type,sender:a.snapshot.sender,custom:a.snapshot.custom,createdAt:a.snapshot.createdAt,editedAt:a.snapshot.editedAt,referencedMessage:l,origin:a.snapshot.origin,plaintext:a.snapshot.plaintext,content:a.snapshot.content}})}))}}class ge extends X{constructor(e,t,s,n,r){super(e,n,r),this.conversationId=t,this.realtimeClient=s,this.unsubscribeDebounceMs=1e3,this.pendingLoadMore=void 0}listen(e){return this.onlyUsedInternally&&this.mostRecentState.resultPromise.then((e=>{if(e.ok&&null!==e.value.inWindow){const t=30-e.value.inWindow.length;t>0&&this._loadMoreMessages(t)}})),super.listen(e)}fetchInitial(e){return h(this,null,(function*(){const t=this.onlyUsedInternally?1:30,s=yield ve({realtimeClient:this.realtimeClient,conversationId:this.conversationId,count:t});return s.ok?null===s.value.messages?C({lastChanged:e,lastMessageChanged:e,stores:null,inWindow:null,windowEnd:null}):be({seq:e,messages:s.value.messages,cursor:s.value.nextCursor,conversationId:this.conversationId,realtimeClient:this.realtimeClient}):s}))}teardownNested(e){if(e.stores){const t=A("TERMINATED");Object.values(e.stores).forEach((e=>e.setError(t))),e.inWindow.forEach((e=>e.setError(t)))}}anyChildChanged(e,t,s){return h(this,null,(function*(){for(const n in s.stores){const r=s.stores[n];if(!0===(yield null==r?void 0:r.changedBetween(e,t)))return!0}return!1}))}lastMessageChangedBetween(e,t){return h(this,null,(function*(){if(e>=t)return!1;const s=yield this.get(t).resultPromise;if(!s.ok)return!1;if(s.value.lastMessageChanged>e)return!0;if(null===s.value.stores)return!1;const n=s.value.inWindow[0];return void 0!==n&&!0===(yield n.changedBetween(e,t))}))}equal(e,t){return null===e.stores&&null===t.stores||null!==e.stores&&null!==t.stores&&!!Y(Object.keys(e.stores),Object.keys(t.stores))&&!!Y(e.inWindow.map((e=>e.messageId)),t.inWindow.map((e=>e.messageId)))&&Y(e.windowEnd,t.windowEnd)}loadNested(e,t){return h(this,null,(function*(){if(null===t.stores)return C({snapshot:null,loadedAll:!0});const s=yield Promise.all(t.inWindow.map((t=>t.getDeep(e)))),n=s.find((e=>!e.ok));return n||C({snapshot:s.filter((e=>null!==e.value.snapshot)).map((e=>e.value.snapshot)),loadedAll:null===t.windowEnd})}))}loadMore(e){return h(this,null,(function*(){if(this.pendingLoadMore)return this.pendingLoadMore;const t=y();this.pendingLoadMore=t.promise,yield this._loadMoreMessages(e),t.resolve(),this.pendingLoadMore=void 0}))}_loadMoreMessages(e=30){return h(this,null,(function*(){const t=yield this.mostRecentState.resultPromise;if(!t.ok)return;if(null===t.value.windowEnd)return;const s=t.value.windowEnd.cursor,n=yield ve({count:e,cursor:s,conversationId:this.conversationId,realtimeClient:this.realtimeClient}),r=this.getLoadMoreSeq();this.mutate(r,(e=>null===e.value.windowEnd||s!==e.value.windowEnd.cursor?e:n.ok?null===n.value.messages?(console.warn("[TalkJS] When loading more messages, the conversation no longer existed. We should have been told about this."),e):be({seq:r,prevState:e.value,messages:n.value.messages,cursor:n.value.nextCursor,conversationId:this.conversationId,realtimeClient:this.realtimeClient}):n)),yield this.emitMutex.runExclusive((()=>this.emit(r)))}))}messageCreated(e,t){this.mutate(e,(s=>{if(null===s.value.stores)return console.warn("[TalkJS] Received a 'message.created' event for a nonexistent conversation."),s;if(s.value.windowEnd&&t.state.createdAt<s.value.windowEnd.oldestMessageTs)return s;if(Object.hasOwnProperty.call(s.value.stores,t.state.id))return s;const n=u({},s.value.stores),r=new fe(e,this.conversationId,t.state,this.realtimeClient);n[t.state.id]=r;const i=t.state.referencedMessageId;let a;null===i?a=null:i in n?a=n[i]:(a=new fe(e,this.conversationId,i,this.realtimeClient),n[i]=a);const o=new me(e,t.state.createdAt,r,a),l=[...s.value.inWindow,o];l.sort(((e,t)=>t.createdAt-e.createdAt));const c=l[0].messageId===t.messageId?e:s.value.lastMessageChanged;return C({lastChanged:e,lastMessageChanged:c,stores:n,inWindow:l,windowEnd:s.value.windowEnd})}))}messageEdited(e,t){this.mutate(e,(s=>{var n;return null===s.value.stores?(console.warn("[TalkJS] Received a 'message.edited' event for a nonexistent conversation."),s):(null==(n=s.value.stores[t.messageId])||n.messageEdited(e,t),s)}))}messageDeleted(e,t){this.mutate(e,(s=>{if(null===s.value.stores)return console.warn("[TalkJS] Received a 'message.deleted' event for a conversation that we thought didn't exist."),s;if(Object.values(s.value.stores).forEach((s=>s.messageDeleted(e,t))),void 0===s.value.stores[t.messageId])return s;const n=u({},s.value.stores);delete n[t.messageId];const r=s.value.inWindow.filter((e=>e.messageId!==t.messageId));if(t.newLastMessage&&0===r.length){const s=new fe(e,this.conversationId,t.newLastMessage,this.realtimeClient);n[s.messageId]=s;const i=t.newLastMessage.referencedMessageId;let a;null===i?a=null:i in n?a=n[i]:(a=new fe(e,this.conversationId,i,this.realtimeClient),n[i]=a);const o=new me(e,t.newLastMessage.createdAt,s,a);r.push(o)}const i=void 0!==t.newLastMessage?e:s.value.lastMessageChanged;return C({lastChanged:e,lastMessageChanged:i,stores:n,inWindow:r,windowEnd:s.value.windowEnd})}))}conversationCleared(e,t){this.mutate(e,(t=>{var s;return 0===(null==(s=t.value.inWindow)?void 0:s.length)&&null===t.value.windowEnd?t:(this.teardownNested(t.value),C({lastChanged:e,lastMessageChanged:e,stores:{},inWindow:[],windowEnd:null}))}))}sideCreated(e,t){const s=this.fetchInitial(e);this.mutate(e,(e=>null!==e.value.stores?(s.then((e=>{e.ok&&this.teardownNested(e.value)})),e):s))}sideDeleted(e,t){this.mutate(e,(t=>null===t.value.stores?t:(this.teardownNested(t.value),C({lastChanged:e,lastMessageChanged:e,stores:null,inWindow:null,windowEnd:null}))))}getMessageFromCache(e){return h(this,null,(function*(){const t=yield this.mostRecentState.resultPromise;if(!t.ok)return A("NOT_IN_CACHE");if(null===t.value.stores)return A("NOT_IN_CACHE");const s=t.value.stores[e];return void 0===s?A("NOT_IN_CACHE"):s.getFromCache()}))}}function ve(e){return h(this,arguments,(function*({cursor:e,realtimeClient:t,conversationId:s,count:n}){const r={limit:n,cursor:e},i=yield t.call("GET",["me","conversations",s,"messages"],r,{bypassCache:!0});if(i.ok){const{data:e,cursor:t}=i.value.data;return C({messages:e,nextCursor:t})}return!i.ok&&"server"===i.where&&404===i.value.status||!i.ok&&"server"===i.where&&403===i.value.status&&"NOT_A_PARTICIPANT"===i.value.errorCode?C({messages:null,nextCursor:null}):i}))}function be({seq:e,prevState:t,messages:s,cursor:n,conversationId:r,realtimeClient:i}){var a,o,l,c;const h=t?u({},t.stores):{};for(const u of s)if(void 0===h[u.id]){const t=new fe(e,r,u,i);h[t.messageId]=t}for(const u of s){const t=u.referencedMessageId;if(t&&void 0===h[t]){const s=new fe(e,r,t,i);h[s.messageId]=s}}const d=t?[...t.inWindow]:[];for(const u of s)d.push(new me(e,u.createdAt,h[u.id],u.referencedMessageId?h[u.referencedMessageId]:null));d.sort(((e,t)=>t.createdAt-e.createdAt));const p=(null==(o=null==(a=null==t?void 0:t.inWindow)?void 0:a[0])?void 0:o.messageId)===(null==(l=null==d?void 0:d[0])?void 0:l.messageId)&&null!=(c=null==t?void 0:t.lastMessageChanged)?c:e;return C(null===n?{lastChanged:e,lastMessageChanged:p,stores:h,inWindow:d,windowEnd:null}:{lastChanged:e,lastMessageChanged:p,stores:h,inWindow:d,windowEnd:{cursor:n,oldestMessageTs:s[s.length-1].createdAt}})}class ye extends X{constructor(e,t,s,n,r){super(e,n,r),this.convDataStore=t,this.realtimeClient=s,this.unsubscribeDebounceMs=0}fetchInitial(e){return h(this,null,(function*(){return C({lastChanged:e,store:this.convDataStore})}))}teardownNested(e){e.store.unsubscribe()}anyChildChanged(e,t,s){return h(this,null,(function*(){return s.store.store.changedBetween(e,t)}))}equal(e,t){return!0}loadNested(e,t){return h(this,null,(function*(){return t.store.store.getDeep(e)}))}getFromCache(){return h(this,null,(function*(){return this.convDataStore.store.getFromCache()}))}}function we(e,t){for(let s in e)Object.prototype.hasOwnProperty.call(e,s)&&t(e[s],s)}function Ce(e,t){return function(e){let s={};return we(e,((e,n)=>{const[r,i]=(([e,s])=>[e,t(s,e)])([n,e],0);s[r]=i})),s}(e)}class Ae extends X{constructor(e,t,s,n,r){super(e,n,r),this.conversationId=t,this.realtimeClient=s,this.unsubscribeDebounceMs=1e4}fetchInitial(e){return h(this,null,(function*(){const t=yield this.realtimeClient.call("GET",["me","conversations",this.conversationId,"typing"],{},{bypassCache:!0});if(!t.ok&&"server"===t.where&&404===t.value.status)return C({data:null,lastChanged:e});if(!t.ok&&"server"===t.where&&403===t.value.status&&"NOT_A_PARTICIPANT"===t.value.errorCode)return C({data:null,lastChanged:e});if(!t.ok)return t;const s=t.value.data;return s.many?C({data:{usersTyping:null,many:!0},userSubscriptions:{},lastChanged:e}):C({data:s,userSubscriptions:Ce(s.usersTyping,((e,t)=>this.realtimeClient.internalSubscribe(["users",t]))),lastChanged:e})}))}equal(e,t){return Y(e.data,t.data)}loadNested(e,t){return h(this,null,(function*(){if(null===t.data)return C({snapshot:null,lastChanged:t.lastChanged});if(t.data.many)return C({snapshot:{many:!0},lastChanged:t.lastChanged});const s=Object.entries(t.data.usersTyping).sort((([e,t],[s,n])=>t-n)).map((([e,t])=>e)).map((s=>t.userSubscriptions[s].store.getDeep(e))),n=yield Promise.all(s),r=n.find((e=>!e.ok));if(r)return r;const i=n.map((e=>e.value)),a=i.map((e=>e.snapshot)),o=i.map((e=>e.lastChanged));return C({snapshot:{users:a,many:!1},lastChanged:Math.max(t.lastChanged,...o)})}))}typingAvailable(e,t){this.mutate(e,(()=>C({data:t.state,userSubscriptions:t.state.many?{}:Ce(t.state.usersTyping,((e,t)=>this.realtimeClient.internalSubscribe(["users",t]))),lastChanged:e})))}typingChanged(e,t){this.mutate(e,(s=>{if(null===s.value.data)return s;if(void 0===t.diff.many){if(!0===s.value.data.many)return s;const n=u({},s.value.data.usersTyping),r=u({},s.value.userSubscriptions);return we(t.diff.usersTyping,((e,t)=>{var s;"number"==typeof e?(n[t]=e,r[t]=this.realtimeClient.internalSubscribe(["users",t])):null===e&&(delete n[t],null==(s=r[t])||s.unsubscribe(),delete r[t])})),C({data:{usersTyping:n,many:!1},userSubscriptions:r,lastChanged:e})}if(!0===t.diff.many)return s.value.data.many?s:C({data:{usersTyping:null,many:!0},userSubscriptions:{},lastChanged:e});if(!1===t.diff.many){if(!1===s.value.data.many)return s;const n=Ce(t.diff.usersTyping,((e,t)=>this.realtimeClient.internalSubscribe(["users",t])));return C({data:t.diff,userSubscriptions:n,lastChanged:e})}throw t.diff,"Unreachable"}))}sideDeleted(e,t){this.mutate(e,(t=>null===t.value.data?t:C({data:null,lastChanged:e})))}teardownNested(e){e.data&&we(e.userSubscriptions,(e=>e.unsubscribe()))}anyChildChanged(e,t,s){return h(this,null,(function*(){var n;if(null===s.data)return!1;for(const r in s.userSubscriptions){const i=s.userSubscriptions[r];if(!0===(yield null==(n=null==i?void 0:i.store)?void 0:n.changedBetween(e,t)))return!0}return!1}))}}class Ee extends K{constructor(e,t,s,n){super(e),this.conversationId=t,this.participantData=s,this.realtimeClient=n}fetchInitial(e){return h(this,null,(function*(){return C({lastChanged:e,user:this.realtimeClient.internalSubscribe(["users",this.participantData.id]),data:this.participantData})}))}refetch(e){throw"Do not call refetch on participant data stores, it can return outdated data. Destroy and remake them instead"}equal(e,t){var s,n,r,i;return(null==(n=null==(s=e.user)?void 0:s.store)?void 0:n.userId)===(null==(i=null==(r=t.user)?void 0:r.store)?void 0:i.userId)&&Y(e.data,t.data)}teardownNested(e){var t;null==(t=e.user)||t.unsubscribe()}anyChildChanged(e,t,s){return h(this,null,(function*(){var n;const r=null==(n=s.user)?void 0:n.store;return!0===(yield null==r?void 0:r.changedBetween(e,t))}))}loadNested(e,t){return h(this,null,(function*(){if(null===t.data)return C({snapshot:null});const s=yield t.user.store.getDeep(e);if(!1===s.ok)return s;const n=s.value.snapshot;return C({snapshot:this.realtimeClient.createParticipantSnapshotPreloaded(t.data,n)})}))}participantEdited(e,t){this.mutate(e,(s=>null===s.value.data?s:C({lastChanged:e,user:s.value.user,data:{id:s.value.data.id,access:z(s.value.data.access,t.diff.access),notify:z(s.value.data.notify,t.diff.notify),joinedAt:s.value.data.joinedAt}})))}participantDeleted(e,t){this.mutate(e,(t=>null===t.value.data?t:(this.teardownNested(t.value),C({lastChanged:e,user:null,data:null}))))}getFromCache(){return h(this,null,(function*(){const e=yield this.mostRecentState.resultPromise;return e.ok?null===e.value.data?E({status:404,errorCode:"PARTICIPANT_NOT_FOUND",reasons:["No participant with that ID exists"]}):C({status:200,data:e.value.data}):A("NOT_IN_CACHE")}))}}class ke extends X{constructor(e,t,s,n,r){super(e,n,r),this.conversationId=t,this.realtimeClient=s,this.unsubscribeDebounceMs=1e3,this.pendingLoadMore=void 0}fetchInitial(e){return h(this,null,(function*(){const t=yield xe({realtimeClient:this.realtimeClient,conversationId:this.conversationId,count:10});return t.ok?null===t.value.participants?C({lastChanged:e,stores:null,inWindow:null,windowEnd:null}):Se({seq:e,participants:t.value.participants,cursor:t.value.nextCursor,conversationId:this.conversationId,realtimeClient:this.realtimeClient}):t}))}teardownNested(e){if(e.stores){const t=A("TERMINATED");Object.values(e.stores).forEach((e=>e.setError(t)))}}anyChildChanged(e,t,s){return h(this,null,(function*(){for(const n in s.stores){const r=s.stores[n];if(!0===(yield null==r?void 0:r.changedBetween(e,t)))return!0}return!1}))}equal(e,t){return null===e.stores&&null===t.stores||null!==e.stores&&null!==t.stores&&!!Y(Object.keys(e.stores),Object.keys(t.stores))&&Y(e.windowEnd,t.windowEnd)}loadNested(e,t){return h(this,null,(function*(){if(null===t.stores)return C({snapshot:null,loadedAll:!0});const s=yield Promise.all(Object.values(t.stores).map((t=>t.getDeep(e)))),n=s.find((e=>!e.ok));if(n)return n;const r=s.filter((e=>null!==e.value.snapshot)).map((e=>e.value.snapshot));return r.sort(((e,t)=>t.joinedAt-e.joinedAt)),C({snapshot:r,loadedAll:null===t.windowEnd})}))}loadMore(e){return h(this,null,(function*(){if(this.pendingLoadMore)return this.pendingLoadMore;const t=y();this.pendingLoadMore=t.promise,yield this._loadMoreParticipants(e),t.resolve(),this.pendingLoadMore=void 0}))}_loadMoreParticipants(e=10){return h(this,null,(function*(){const t=yield this.mostRecentState.resultPromise;if(!t.ok)return;if(null===t.value.windowEnd)return;const s=t.value.windowEnd.cursor,n=yield xe({count:e,cursor:s,conversationId:this.conversationId,realtimeClient:this.realtimeClient}),r=this.getLoadMoreSeq();this.mutate(r,(e=>null===e.value.windowEnd||s!==e.value.windowEnd.cursor?e:n.ok?null===n.value.participants?(console.warn("[TalkJS] When loading more participants, the conversation no longer existed. We should have been told about this."),e):Se({seq:r,prevStores:e.value.stores,participants:n.value.participants,cursor:n.value.nextCursor,conversationId:this.conversationId,realtimeClient:this.realtimeClient}):n)),yield this.emitMutex.runExclusive((()=>this.emit(r)))}))}participantCreated(e,t){this.mutate(e,(s=>{if(null===s.value.stores)return console.warn("[TalkJS] Received a 'participant.created' event for a nonexistent conversation."),s;if(s.value.windowEnd&&t.state.joinedAt<s.value.windowEnd.oldestParticipantTs)return s;if(Object.hasOwnProperty.call(s.value.stores,t.state.id))return s;const n=u({},s.value.stores),r=new Ee(e,this.conversationId,t.state,this.realtimeClient);return n[t.state.id]=r,C({lastChanged:e,stores:n,windowEnd:s.value.windowEnd})}))}participantEdited(e,t){this.mutate(e,(s=>{var n;return null===s.value.stores?(console.warn("[TalkJS] Received a 'participant.edited' event for a nonexistent conversation."),s):(null==(n=s.value.stores[t.userId])||n.participantEdited(e,t),s)}))}participantDeleted(e,t){this.mutate(e,(s=>{if(null===s.value.stores)return console.warn("[TalkJS] Received a 'participant.deleted' event for a conversation that we thought didn't exist."),s;const n=s.value.stores[t.userId];if(void 0===n)return s;n.participantDeleted(e,t);const r=u({},s.value.stores);return delete r[t.userId],C({lastChanged:e,stores:r,windowEnd:s.value.windowEnd})}))}sideCreated(e,t){const s=this.fetchInitial(e);this.mutate(e,(e=>null!==e.value.stores?(s.then((e=>{e.ok&&this.teardownNested(e.value)})),e):s))}sideDeleted(e,t){this.mutate(e,(t=>null===t.value.stores?t:(this.teardownNested(t.value),C({lastChanged:e,stores:null,inWindow:null,windowEnd:null}))))}getParticipantFromCache(e){return h(this,null,(function*(){const t=yield this.mostRecentState.resultPromise;if(!t.ok)return A("NOT_IN_CACHE");if(null===t.value.stores)return A("NOT_IN_CACHE");const s=t.value.stores[e];return void 0===s?A("NOT_IN_CACHE"):s.getFromCache()}))}}function xe(e){return h(this,arguments,(function*({cursor:e,realtimeClient:t,conversationId:s,count:n}){const r={limit:n,cursor:e},i=yield t.call("GET",["me","conversations",s,"participants"],r,{bypassCache:!0});if(i.ok){const{data:e,cursor:t}=i.value.data;return C({participants:e,nextCursor:t})}return!i.ok&&"server"===i.where&&404===i.value.status||!i.ok&&"server"===i.where&&403===i.value.status&&"NOT_A_PARTICIPANT"===i.value.errorCode?C({participants:null,nextCursor:null}):i}))}function Se({seq:e,prevStores:t,participants:s,cursor:n,conversationId:r,realtimeClient:i}){const a=t?u({},t):{};for(const o of s)if(void 0===a[o.id]){const t=new Ee(e,r,o,i);a[o.id]=t}return C(null===n?{lastChanged:e,stores:a,windowEnd:null}:{lastChanged:e,stores:a,windowEnd:{cursor:n,oldestParticipantTs:s[s.length-1].joinedAt}})}class Te extends X{constructor(e,t,s,n,r){super(e,n,r),this.getConvDataStore=t,this.realtimeClient=s,this.unsubscribeDebounceMs=1e3,this.pendingLoadMore=void 0}fetchInitial(e){return h(this,null,(function*(){const t=yield Ie({realtimeClient:this.realtimeClient,count:20});return t.ok?null===t.value.conversations?C({lastChanged:e,stores:null,windowEnd:null}):De({seq:e,conversations:t.value.conversations,cursor:t.value.nextCursor,getConvDataStore:this.getConvDataStore}):t}))}teardownNested(e){null!==e.stores&&Object.values(e.stores).forEach((e=>e.unsubscribe()))}anyChildChanged(e,t,s){return h(this,null,(function*(){var n;for(const r in s.stores){const i=s.stores[r];if(!0===(yield null==(n=null==i?void 0:i.store)?void 0:n.changedBetween(e,t)))return!0}return!1}))}equal(e,t){return null===e.stores&&null===t.stores||null!==e.stores&&null!==t.stores&&!!Y(Object.keys(e.stores),Object.keys(t.stores))&&Y(e.windowEnd,t.windowEnd)}loadNested(e,t){return h(this,null,(function*(){if(null===t.stores)return C({snapshot:[],loadedAll:!0});const s=yield Promise.all(Object.values(t.stores).map((t=>t.store.getDeep(e)))),n=s.find((e=>!e.ok));if(n)return n;const r=s.filter((e=>null!==e.value.snapshot)).map((e=>e.value.snapshot));return r.sort(((e,t)=>{var s,n,r,i;const a=null!=(n=null==(s=e.lastMessage)?void 0:s.createdAt)?n:e.joinedAt;return(null!=(i=null==(r=t.lastMessage)?void 0:r.createdAt)?i:t.joinedAt)-a})),C({snapshot:r,loadedAll:null===t.windowEnd})}))}loadMore(e){return h(this,null,(function*(){if(this.pendingLoadMore)return this.pendingLoadMore;const t=y();this.pendingLoadMore=t.promise,yield this._loadMoreConversations(e),t.resolve(),this.pendingLoadMore=void 0}))}_loadMoreConversations(e=20){return h(this,null,(function*(){const t=yield this.mostRecentState.resultPromise;if(!t.ok)return;if(null===t.value.windowEnd)return;const s=t.value.windowEnd.cursor,n=yield Ie({count:e,cursor:s,realtimeClient:this.realtimeClient}),r=this.getLoadMoreSeq();this.mutate(r,(e=>null===e.value.windowEnd||s!==e.value.windowEnd.cursor?e:n.ok?null===n.value.conversations?(console.warn("[TalkJS] When loading more conversations, the user stopped existing, which should be impossible."),e):De({seq:r,prevStores:e.value.stores,conversations:n.value.conversations,cursor:n.value.nextCursor,getConvDataStore:this.getConvDataStore}):n)),yield this.emitMutex.runExclusive((()=>this.emit(r)))}))}getConvFromCache(e){return h(this,null,(function*(){const t=yield this.mostRecentState.resultPromise;if(!t.ok)return A("NOT_IN_CACHE");if(null===t.value.stores)return E({status:404,errorCode:"USER_NOT_FOUND",reasons:["No user with that ID exists"]});const s=t.value.stores[e];return void 0===s?A("NOT_IN_CACHE"):s.store.getFromCache()}))}userCreated(e,t){this.mutate(e,(e=>null!==e.value.stores?e:C({lastChanged:e.value.lastChanged,stores:{},windowEnd:null})))}sideCreated(e,t){const s=this.getConvDataStore(t.state);this.mutate(e,(n=>Object.hasOwnProperty.call(n.value.stores,t.conversationId)?(s.unsubscribe(),n):C({lastChanged:e,stores:l(u({},n.value.stores),{[t.conversationId]:s}),windowEnd:n.value.windowEnd})))}sideDeleted(e,t){this.mutate(e,(s=>{var n;if(!Object.hasOwnProperty.call(s.value.stores,t.conversationId))return s;const r=u({},s.value.stores);return null==(n=r[t.conversationId])||n.unsubscribe(),delete r[t.conversationId],C({lastChanged:e,stores:r,windowEnd:s.value.windowEnd})}))}sideEdited(e,t){const s=t.diff.lastMessageAt;void 0!==s&&this.mutate(e,(n=>{var r;if(null===n.value.stores)return console.warn("[TalkJS] Received a 'side.edited' event when we thought your user didn't exist."),n;if(null===n.value.windowEnd)return n;const i=Object.hasOwnProperty.call(n.value.stores,t.conversationId);if(i&&s<n.value.windowEnd.oldestMessageTs){const s=u({},n.value.stores);return null==(r=s[t.conversationId])||r.unsubscribe(),delete s[t.conversationId],C({lastChanged:e,stores:s,windowEnd:n.value.windowEnd})}if(!i&&s>=n.value.windowEnd.oldestMessageTs){const s=this.getConvDataStore(t.conversationId);return C({lastChanged:e,stores:l(u({},n.value.stores),{[t.conversationId]:s}),windowEnd:n.value.windowEnd})}return n}))}}function Ie(e){return h(this,arguments,(function*({cursor:e,realtimeClient:t,count:s}){const n={limit:s,cursor:e},r=yield t.call("GET",["me","conversations"],n,{bypassCache:!0});if(r.ok){const{data:e,cursor:t}=r.value.data;return C({conversations:e,nextCursor:t})}return r.ok||"server"!==r.where||404!==r.value.status||"USER_NOT_FOUND"!==r.value.errorCode?r:C({conversations:null,nextCursor:null})}))}function De({seq:e,prevStores:t,conversations:s,cursor:n,getConvDataStore:r}){const i=t?u({},t):{};for(const a of s)void 0===i[a.id]&&(i[a.id]=r(a));return C(null===n?{lastChanged:e,stores:i,windowEnd:null}:{lastChanged:e,stores:i,windowEnd:{cursor:n,oldestMessageTs:Math.min(...s.map((e=>e.lastMessageAt)))}})}class Me extends X{constructor(e,t,s,n,r){super(e,n,r),this.conversation=t,this.realtimeClient=s,this.unsubscribeDebounceMs=5e3}get conversationId(){return"string"==typeof this.conversation?this.conversation:this.conversation.id}fetchInitial(e){return h(this,null,(function*(){const t=this.realtimeClient.internalSubscribe(["me","conversations",this.conversationId,"messages"]);if("object"==typeof this.conversation)return C({lastChanged:e,snapshot:this.conversation,messageWindowStore:t});const s=yield this.realtimeClient.call("GET",["me","conversations",this.conversationId],{},{bypassCache:!0});let n;if(s.ok)n=s.value.data;else if("server"===s.where&&404===s.value.status)n=null;else{if("server"!==s.where||403!==s.value.status||"NOT_A_PARTICIPANT"!==s.value.errorCode)return t.unsubscribe(),s;n=null}return C({lastChanged:e,snapshot:n,messageWindowStore:t})}))}teardownNested(e){var t;null==(t=e.messageWindowStore)||t.unsubscribe()}anyChildChanged(e,t,s){return h(this,null,(function*(){return!0===(yield s.messageWindowStore.store.lastMessageChangedBetween(e,t))}))}equal(e,t){return Y(e.snapshot,t.snapshot)}loadNested(e,t){return h(this,null,(function*(){var s;if(!t.snapshot)return C({snapshot:null,loadedAll:!0});const n=yield t.messageWindowStore.store.getDeep(e);if(!n.ok)return n;const r=n.value.snapshot,i=null!=(s=null==r?void 0:r[0])?s:null;return C({snapshot:l(u({},t.snapshot),{lastMessage:i})})}))}participantEdited(e,t){this.mutate(e,(s=>null===s.value.snapshot?(console.warn("[TalkJS] Received a 'participant.edited' event for a conversation that we thought didn't exist."),s):C({lastChanged:e,snapshot:Fe(s.value.snapshot,t.diff),messageWindowStore:s.value.messageWindowStore})))}conversationEdited(e,t){this.mutate(e,(s=>null===s.value.snapshot?(console.warn("[TalkJS] Received a 'conversation.edited' event for a conversation that we thought didn't exist."),s):C({lastChanged:e,snapshot:Fe(s.value.snapshot,t.diff),messageWindowStore:s.value.messageWindowStore})))}sideEdited(e,t){this.mutate(e,(s=>null===s.value.snapshot?(console.warn("[TalkJS] Received a 'side.edited' event for a conversation that we thought didn't exist."),s):C({lastChanged:e,snapshot:Fe(s.value.snapshot,t.diff),messageWindowStore:s.value.messageWindowStore})))}sideCreated(e,t){this.mutate(e,(s=>s.value.snapshot?s:C({lastChanged:e,snapshot:t.state,messageWindowStore:s.value.messageWindowStore})))}sideDeleted(e,t){this.mutate(e,(t=>null===t.value.snapshot?t:C({lastChanged:e,snapshot:null,messageWindowStore:t.value.messageWindowStore})))}getFromCache(){return h(this,null,(function*(){const e=yield this.mostRecentState.resultPromise;return e.ok&&e.value.snapshot?C({status:200,data:e.value.snapshot}):A("NOT_IN_CACHE")}))}}function Fe(e,t){const s=t;return{id:e.id,createdAt:e.createdAt,subject:z(e.subject,s.subject),photoUrl:z(e.photoUrl,s.photoUrl),welcomeMessages:z(e.welcomeMessages,s.welcomeMessages),custom:J(e.custom,s.custom),lastMessageAt:z(e.lastMessageAt,s.lastMessageAt),unreadMessageCount:z(e.unreadMessageCount,s.unreadMessageCount),isUnread:z(e.isUnread,s.isUnread),access:z(e.access,s.access),notify:z(e.notify,s.notify),readUntil:z(e.readUntil,s.readUntil),everyoneReadUntil:z(e.everyoneReadUntil,s.everyoneReadUntil),joinedAt:e.joinedAt}}class Be extends X{constructor(e,t,s,n,r){super(e,n,r),this.userId=t,this.realtimeClient=s,this.unsubscribeDebounceMs=1e3}fetchInitial(e){return h(this,null,(function*(){const t=this.realtimeClient.internalSubscribe(["users",this.userId]),s=yield this.realtimeClient.call("GET",["users",this.userId,"online"],{},{bypassCache:!0});return s.ok||"server"!==s.where||404!==s.value.status||"USER_NOT_FOUND"!==s.value.errorCode?s.ok?C({lastChanged:e,user:t,data:s.value.data}):s:C({lastChanged:e,user:t,data:null})}))}equal(e,t){return Y(e.data,t.data)}teardownNested(e){e.user.unsubscribe()}anyChildChanged(e,t,s){return h(this,null,(function*(){return s.user.store.changedBetween(e,t)}))}loadNested(e,t){return h(this,null,(function*(){const s=yield t.user.store.getDeep(e);if(!s.ok)return s;const n=s.value.snapshot;return null===t.data||null===n?C({snapshot:null}):C({snapshot:u({user:n},t.data)})}))}userCreated(e,t){const s=this.fetchInitial(e);this.mutate(e,(e=>null!==e.value.data?(s.then((e=>{e.ok&&this.teardownNested(e.value)})),e):s))}userOnlineChanged(e,t){this.mutate(e,(s=>null===s.value.data?s:C({lastChanged:e,user:s.value.user,data:t.diff})))}getFromCache(){return h(this,null,(function*(){const e=yield this.mostRecentState.resultPromise;if(!e.ok)return A("NOT_IN_CACHE");if(null===e.value.data)return E({status:404,errorCode:"USER_NOT_FOUND",reasons:["No user with that ID exists"]});const t=e.value,{user:s}=t,n=c(t,["user"]);return C({status:200,data:u({},n.data)})}))}}class Ne{constructor(e,t,s){this.realtimeClient=s,this.convDataStores={},this.storeMap={},this.emitMutex=new Q,this.seqOffset=0,this.seqInThisConnection=0,this.refetchOnNextNetworkLoss=!0,this.connection=new L(e,t,{onUpstreamRestarting:()=>{this.refetchOnNextNetworkLoss=!1},onReady:()=>{this.refetchOnNextNetworkLoss=!0},onResubscribeSent:()=>{if(this.seqOffset+=this.seq,this.seqInThisConnection=0,this.refetchOnNextNetworkLoss){this.seqOffset++;const e=this.seq;this.refetchAll(e),this.emitAll(e)}},onResubscribeError:(e,t)=>{var s;null==(s=this.storeMap[Re(e)])||s.setError(t)},onPublish:(e,t)=>{this.seqInThisConnection=e;const s=this.seq;for(const n of t)this.handlePublish(s,n);this.emitAll(s)}})}get seq(){return this.seqOffset+this.seqInThisConnection}refetchAll(e){Object.values(this.storeMap).forEach((t=>null==t?void 0:t.refetch(e)))}emitAll(e){return this.emitMutex.runExclusive((()=>h(this,null,(function*(){const t=Object.values(this.storeMap).map((t=>null==t?void 0:t.emit(e)));yield Promise.all(t)}))))}handlePublish(e,t){var s,n,r,i,a,o,u,l,c,h,d,p,f,m,g,v,b,y,w,C,A,E,k,x,S,T,I;switch(t.type){case"user.created":return null==(s=this.storeMap[`/users/${t.userId}`])||s.userCreated(e,t),null==(n=this.storeMap["/me/conversations"])||n.userCreated(e,t),void(null==(r=this.storeMap[`/users/${t.userId}/online`])||r.userCreated(e,t));case"user.edited":return void(null==(i=this.storeMap[`/users/${t.userId}`])||i.userEdited(e,t));case"side.created":return null==(a=this.convDataStores[t.conversationId])||a.sideCreated(e,t),null==(o=this.storeMap[`/me/conversations/${t.conversationId}/messages`])||o.sideCreated(e,t),null==(u=this.storeMap[`/me/conversations/${t.conversationId}/participants`])||u.sideCreated(e,t),void(null==(l=this.storeMap["/me/conversations"])||l.sideCreated(e,t));case"side.edited":return null==(c=this.convDataStores[t.conversationId])||c.sideEdited(e,t),void(null==(h=this.storeMap["/me/conversations"])||h.sideEdited(e,t));case"side.deleted":return null==(d=this.convDataStores[t.conversationId])||d.sideDeleted(e,t),null==(p=this.storeMap[`/me/conversations/${t.conversationId}/messages`])||p.sideDeleted(e,t),null==(f=this.storeMap[`/me/conversations/${t.conversationId}/participants`])||f.sideDeleted(e,t),null==(m=this.storeMap[`/me/conversations/${t.conversationId}/typing`])||m.sideDeleted(e,t),void(null==(g=this.storeMap["/me/conversations"])||g.sideDeleted(e,t));case"conversation.edited":return void(null==(v=this.convDataStores[t.conversationId])||v.conversationEdited(e,t));case"message.created":return void(null==(b=this.storeMap[`/me/conversations/${t.conversationId}/messages`])||b.messageCreated(e,t));case"message.edited":return void(null==(y=this.storeMap[`/me/conversations/${t.conversationId}/messages`])||y.messageEdited(e,t));case"message.deleted":return void(null==(w=this.storeMap[`/me/conversations/${t.conversationId}/messages`])||w.messageDeleted(e,t));case"typing.available":return void(null==(C=this.storeMap[`/me/conversations/${t.conversationId}/typing`])||C.typingAvailable(e,t));case"typing.changed":return void(null==(A=this.storeMap[`/me/conversations/${t.conversationId}/typing`])||A.typingChanged(e,t));case"conversation.cleared":return void(null==(E=this.storeMap[`/me/conversations/${t.conversationId}/messages`])||E.conversationCleared(e,t));case"participant.edited":return null==(k=this.convDataStores[t.conversationId])||k.participantEdited(e,t),void(null==(x=this.storeMap[`/me/conversations/${t.conversationId}/participants`])||x.participantEdited(e,t));case"participant.created":return void(null==(S=this.storeMap[`/me/conversations/${t.conversationId}/participants`])||S.participantCreated(e,t));case"participant.deleted":return void(null==(T=this.storeMap[`/me/conversations/${t.conversationId}/participants`])||T.participantDeleted(e,t));case"user.online.changed":return void(null==(I=this.storeMap[`/users/${t.userId}/online`])||I.userOnlineChanged(e,t))}}call(e,t,s,n){return h(this,null,(function*(){if(!n.bypassCache&&"GET"===e){const e=Re(t);if(e in this.storeMap){const t=e,s=this.storeMap[t];if(s&&"getFromCache"in s){const e=yield s.getFromCache();if("NOT_IN_CACHE"!==e.value)return e}}else if(f(t,["me","conversations","*","messages","*"])){const e=this.storeMap[`/me/conversations/${t[2]}/messages`];if(e){const s=yield e.getMessageFromCache(t[4]);if("NOT_IN_CACHE"!==s.value)return s}}else if(f(t,["me","conversations","*","participants","*"])){const e=this.storeMap[`/me/conversations/${t[2]}/participants`];if(e){const s=yield e.getParticipantFromCache(t[4]);if("NOT_IN_CACHE"!==s.value)return s}}else if(f(t,["me","conversations","*"])){const e=this.storeMap["/me/conversations"];if(e){const s=yield e.getConvFromCache(t[2]);if("NOT_IN_CACHE"!==s.value)return s}}}return this.connection.call(e,t,s)}))}subscribe(e,t){const s=this.getOrCreateStore(e),n=y(),r=y();n.promise.catch((()=>{})),r.promise.catch((()=>{}));const i={state:{type:"pending",latestSnapshot:void 0},connected:n.promise,terminated:r.promise,loadMore:e=>h(this,null,(function*(){"loadMore"in s&&(yield s.loadMore(e))})),unsubscribe:()=>{}},a=s.listen((s=>{if(s.ok){const e=!("loadedAll"in s.value)||s.value.loadedAll,r={type:"active",latestSnapshot:s.value.snapshot,loadedAll:e};i.state=r,null==t||t(s.value.snapshot,e),n.resolve(r)}else if("pending"===i.state.type||"active"===i.state.type){if("server"===s.where){const t={type:"error",error:new Error(p(`Subscribe to ${e.join("/")}`,s.value))};return i.state=t,r.resolve(t),void n.reject("Subscription encountered an error during initial connection")}if("SESSION_DESTROYED"===s.value){const e={type:"error",error:new Error("Session was destroyed causing all subscriptions to be terminated")};return i.state=e,r.resolve(e),void n.reject("Subscription encountered an error during initial connection")}if("UNSUBSCRIBED"===s.value)return;if("TERMINATED"===s.value)return;s.value}}));return i.unsubscribe=()=>{if("pending"===i.state.type||"active"===i.state.type){a();const e={type:"unsubscribed"};i.state=e,r.resolve(e),n.reject("Subscription was unsubscribed before connecting")}},i}getOrCreateStore(e){const t=Re(e);if(t in this.storeMap)return this.storeMap[t];this.connection.subscribe(e).then((e=>{e.ok||s.setError(e)}));const s=this.instantiateStore(e,(()=>{delete this.storeMap[t],this.connection.unsubscribe(e)}));return this.storeMap[t]=s,s}destroy(){this.storeMap={},this.convDataStores={},this.connection.destroy()}isConnected(){return this.connection.isConnected()}instantiateStore(e,t){if(f(e,["users","*"]))return new te(this.seq,e[1],this.realtimeClient,this.emitMutex,t);if(f(e,["me","conversations","*"]))return new ye(this.seq,this.subscribeConvData(e[2]),this.realtimeClient,this.emitMutex,t);if(f(e,["me","conversations","*","messages"]))return new ge(this.seq,e[2],this.realtimeClient,this.emitMutex,t);if(f(e,["me","conversations","*","participants"]))return new ke(this.seq,e[2],this.realtimeClient,this.emitMutex,t);if(f(e,["me","conversations","*","typing"]))return new Ae(this.seq,e[2],this.realtimeClient,this.emitMutex,t);if(f(e,["me","conversations"]))return new Te(this.seq,(e=>this.subscribeConvData(e)),this.realtimeClient,this.emitMutex,t);if(f(e,["users","*","online"]))return new Be(this.seq,e[1],this.realtimeClient,this.emitMutex,t);throw"Unreachable"}subscribeConvData(e){const t="string"==typeof e?e:e.id;if(Object.hasOwnProperty.call(this.convDataStores,t)){const e=this.convDataStores[t];return{store:e,unsubscribe:e.registerInternalSubscription()}}const s=new Me(this.seq,e,this.realtimeClient,this.emitMutex,(()=>{delete this.convDataStores[t]}));return this.convDataStores[t]=s,{store:s,unsubscribe:s.registerInternalSubscription()}}}function Re(e){return`/${e.join("/")}`}class _e{constructor(e,t,s){this.userId=t,this.alive=!0,this.connection=new Ne(e,s,this),s.onTokenRefreshFailed((()=>{this.destroy()}))}call(e,t,s){return h(this,arguments,(function*(e,t,s,n={}){return this.alive?this.connection.call(e,t,s,n):A("SESSION_DESTROYED")}))}subscribe(e,t){return this.connection.subscribe(e,t)}internalSubscribe(e){const t=this.connection.getOrCreateStore(e);return{store:t,unsubscribe:t.registerInternalSubscription()}}destroy(){this.alive=!1,this.connection.destroy()}isConnected(){return this.connection.isConnected()}listMessages(e,t){return h(this,null,(function*(){const s=yield this.call("GET",["me","conversations",e,"messages"],t);if(!s.ok)return Pe(s,"Listing messages in "+e);const n=s.value.data.data,r=yield Promise.all(n.map((t=>this.createMessageSnapshot(t,e)))),i=r.find((e=>!e.ok));return void 0===i||i.ok?C(r.map((({value:e})=>e))):i}))}createConversationSnapshotPreloaded(e,t){return{id:e.id,subject:e.subject,photoUrl:e.photoUrl,welcomeMessages:e.welcomeMessages,custom:e.custom,createdAt:e.createdAt,joinedAt:e.joinedAt,lastMessageAt:e.lastMessageAt,unreadMessageCount:e.unreadMessageCount,isUnread:e.isUnread,access:e.access,notify:e.notify,lastMessage:t,readUntil:e.readUntil,everyoneReadUntil:e.everyoneReadUntil}}createUserSnapshot(e){return{id:e.id,name:e.name,custom:e.custom,locale:e.locale,photoUrl:e.photoUrl,role:e.role,welcomeMessage:e.welcomeMessage}}createParticipantSnapshotPreloaded(e,t){return{user:t,access:e.access,notify:e.notify,joinedAt:e.joinedAt}}createMessageSnapshot(e,t){return h(this,null,(function*(){const s=null===e.senderId?Promise.resolve(C(null)):this.getUser(e.senderId),n=null===e.referencedMessageId?Promise.resolve(C(null)):this.getReferencedMessage(t,e.referencedMessageId),r=yield s;if(!r.ok)return r;const i=yield n;return i.ok?C(this.createMessageSnapshotPreloaded(e,r.value,i.value)):i}))}getReferencedMessage(e,t){return h(this,null,(function*(){const s=yield this.call("GET",["me","conversations",e,"messages",t],{});if(!s.ok&&"server"===s.where&&404===s.value.status)return C(null);if(!s.ok&&"server"===s.where&&403===s.value.status&&"NOT_A_PARTICIPANT"===s.value.errorCode)return C(null);if(!s.ok)return Pe(s,`Fetching referenced message ${t} in conversation ${e}`);const n=s.value.data,r=yield this.getUser(n.senderId);if(!r.ok)return r;const i=r.value;return C(this.createReferencedMessageSnapshotPreloaded(n,i))}))}getUser(e){return h(this,null,(function*(){const t=yield this.call("GET",["users",e],{includePrivateFields:!1});return t.ok||"server"!==t.where||404!==t.value.status?t.ok?C(this.createUserSnapshot(t.value.data)):Pe(t,"Get user "+e):C(null)}))}createMessageSnapshotPreloaded(e,t,s){return{id:e.id,type:e.type,sender:t,referencedMessage:s,custom:e.custom,createdAt:e.createdAt,editedAt:e.editedAt,origin:e.origin,content:e.content,plaintext:de(e.content,{})}}createReferencedMessageSnapshotPreloaded(e,t){return{id:e.id,type:e.type,sender:t,referencedMessageId:e.referencedMessageId,custom:e.custom,createdAt:e.createdAt,editedAt:e.editedAt,origin:e.origin,content:e.content,plaintext:de(e.content,{})}}}function Pe(e,t){return"server"===e.where?E(l(u({},e.value),{operation:t})):e}function Oe(e,t){var s;if(t.ok)return t.value;throw"SESSION_DESTROYED"===t.value?new Error(`${e} failed because the session was destroyed`):new Error(p(null!=(s=t.value.operation)?s:e,t.value))}class Ue{constructor(e,t){this.id=e,this._realtimeClient=t}get brandedId(){return this.id}get(){return h(this,null,(function*(){const e=yield this._realtimeClient.getUser(this.brandedId);return Oe("Get user "+this.id,e)}))}set(e){return h(this,null,(function*(){null===e.role&&(e.role="default");const t="string"==typeof e.email?[e.email]:e.email,s="string"==typeof e.phone?[e.phone]:e.phone,n=yield this._realtimeClient.call("PUT",["users",this.brandedId],l(u({},e),{email:t,phone:s}));d("Set user "+this.id,n)}))}createIfNotExists(e){return h(this,null,(function*(){void 0===e.role&&(e.role="default");const t="string"==typeof e.email?[e.email]:e.email,s="string"==typeof e.phone?[e.phone]:e.phone,n=yield this._realtimeClient.call("POST",["users",this.brandedId],l(u({},e),{email:t,phone:s}));(n.ok||"server"!==n.where||409!=n.value.status)&&d(`Create user ${this.id} if not exists`,n)}))}subscribe(e){return this._realtimeClient.subscribe(["users",this.brandedId],e)}subscribeOnline(e){return this._realtimeClient.subscribe(["users",this.brandedId,"online"],e)}}class je{constructor(e,t,s){this.userId=e,this.conversationId=t,this._realtimeClient=s}get brandedUserId(){return this.userId}get brandedConversationId(){return this.conversationId}get(){return h(this,null,(function*(){const e=yield this._realtimeClient.call("GET",["me","conversations",this.brandedConversationId,"participants",this.brandedUserId],{}),t=yield this._realtimeClient.call("GET",["users",this.brandedUserId],{includePrivateFields:!1}),[s,n]=yield Promise.all([e,t]);if(!s.ok&&"server"===s.where&&404===s.value.status)return null;if(!n.ok&&"server"===n.where&&404===n.value.status)return null;const r=d(`Get participant ${this.userId} in conversation ${this.conversationId}`,s),i=d(`Get user ${this.userId}`,n),a=this._realtimeClient.createUserSnapshot(i);return this._realtimeClient.createParticipantSnapshotPreloaded(r,a)}))}set(){return h(this,arguments,(function*(e={}){const t=yield this._realtimeClient.call("PUT",["conversations",this.brandedConversationId,"participants",this.brandedUserId],e);d(`Set participant ${this.userId} in conversation ${this.conversationId}`,t)}))}edit(){return h(this,arguments,(function*(e={}){const t=yield this._realtimeClient.call("PATCH",["conversations",this.brandedConversationId,"participants",this.brandedUserId],e);d(`Edit participant ${this.userId} in conversation ${this.conversationId}`,t)}))}createIfNotExists(){return h(this,arguments,(function*(e={}){const t=yield this._realtimeClient.call("POST",["conversations",this.brandedConversationId,"participants",this.brandedUserId],e);(t.ok||"server"!==t.where||409!==t.value.status)&&d(`Add participant ${this.userId} to conversation ${this.conversationId}`,t)}))}delete(){return h(this,null,(function*(){const e=yield this._realtimeClient.call("DELETE",["conversations",this.brandedConversationId,"participants",this.brandedUserId],{});(e.ok||"server"!==e.where||404!==e.value.status)&&d(`Remove participant ${this.userId} from conversation ${this.conversationId}`,e)}))}}function $e(e){const t="-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz";let s=0;const n=[],r=e===s;s=e;const i=new Array(8);for(let o=7;o>=0;o--)i[o]=t.charAt(e%64),e=Math.floor(e/64);if(0!==e)throw new Error("We should have converted the entire timestamp.");let a=i.join("");if(r){let e;for(e=11;e>=0&&63===n[e];e--)n[e]=0;n[e]++}else for(let o=0;o<12;o++)n[o]=Math.floor(64*Math.random());for(let o=0;o<12;o++)a+=t.charAt(n[o]);if(20!=a.length)throw new Error("Length should be 20.");return a}const We=(e,t,s=void 0)=>e.reduce(((e,n,r)=>e.concat((e=>{if("string"==typeof e)return t(e,s);switch(e.type){case"bold":case"italic":case"strikethrough":case"blockquote":case"bulletlist":case"bulletList":case"bulletpoint":case"bulletPoint":return[{type:e.type,children:We(e.children,t,e.type)}];case"link":return[{type:e.type,url:e.url,children:We(e.children,t,e.type)}];case"actionlink":case"actionLink":case"actionbutton":case"actionButton":return[{type:e.type,action:e.action,params:e.params,children:We(e.children,t,e.type)}];case"mention":case"autolink":case"autoLink":case"codeblock":case"codeBlock":case"codespan":case"codeSpan":case"suppressed":case"emoji":case"customemoji":case"customEmoji":return[e]}})(n))),[]);function qe(e,t){return s=>{const n=s;let r=0;const i=[];for(const a of re(s,e)){a.index-r>0&&i.push(n.substring(r,a.index));const e=t(a);Array.isArray(e)?i.push(...e):i.push(e),r=a.index+a[0].length}return r<s.length&&i.push(s.substring(r)),i}}const He="’'()[]{}<>:,‒–—―…!.«»-‐?‘’“”;/⁄␠·&@*\\•^¤¢$€£¥₩₪†‡°¡¿¬#№%‰‱¶′§~¨_|¦⁂☞∴‽※".replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&");var Ge,Le=((Ge=Le||{})[Ge.italic=1]="italic",Ge[Ge.strikethrough=2]="strikethrough",Ge[Ge.bold=4]="bold",Ge);const ze=[0,1,2,3,4,5,6].map((e=>{const t=[];return 1&e||t.push(/_([^\s_].*?[^\s_])_|_([^\s_])_/),2&e||t.push(/~([^\s~].*?[^\s~])~|~([^\s~])~/),4&e||t.push(/\*([^\s*].*?[^\s*])\*|\*([^\s*])\*/),new RegExp(t.map((e=>e.source)).join("|"),"g")})),Je={_:1,"*":4,"~":2};function Ye(e){return Qe(e,0)}function Qe(e,t=0){const s=ze[t],n=s?function(e){const t=qe(Ve.getOrCompute(e,(()=>new RegExp(`(?:^|[\\s${He}])(?:${e.source})(?=[\\s${He}]|$)`,"g"))),(e=>{const t=e[0][1],s=e[1]||e[2]||e[3]||e[4]||e[5]||e[6];return[" ",{type:Le[Je[t]],children:[s]}]}));return e=>{const[s,...n]=t(" "+e);return s.length>1&&n.unshift(s.substring(1)),n}}(s):()=>[e];return We(n(e),((e,s)=>"bold"===s||"italic"===s||"strikethrough"===s?Qe(e,t|Le[s]):[e]))}const Ve=function(){const e=function(){try{return new WeakMap}catch(e){const t={has:()=>!1,get:()=>{},set:()=>t};return t}}();return{getOrCompute(t,s){if(e.has(t))return e.get(t);const n=s();return e.set(t,n),n}}}();function Ze(e,t){if(Array.prototype.indexOf)return e.indexOf(t);for(var s=0,n=e.length;s<n;s++)if(e[s]===t)return s;return-1}function Ke(e,t){for(var s=e.length-1;s>=0;s--)!0===t(e[s])&&e.splice(s,1)}function Xe(e){throw new Error("Unhandled case for value: '"+e+"'")}var et=function(){function e(e){void 0===e&&(e={}),this.tagName="",this.attrs={},this.innerHTML="",this.whitespaceRegex=/\s+/,this.tagName=e.tagName||"",this.attrs=e.attrs||{},this.innerHTML=e.innerHtml||e.innerHTML||""}return e.prototype.setTagName=function(e){return this.tagName=e,this},e.prototype.getTagName=function(){return this.tagName||""},e.prototype.setAttr=function(e,t){return this.getAttrs()[e]=t,this},e.prototype.getAttr=function(e){return this.getAttrs()[e]},e.prototype.setAttrs=function(e){return Object.assign(this.getAttrs(),e),this},e.prototype.getAttrs=function(){return this.attrs||(this.attrs={})},e.prototype.setClass=function(e){return this.setAttr("class",e)},e.prototype.addClass=function(e){for(var t,s=this.getClass(),n=this.whitespaceRegex,r=s?s.split(n):[],i=e.split(n);t=i.shift();)-1===Ze(r,t)&&r.push(t);return this.getAttrs().class=r.join(" "),this},e.prototype.removeClass=function(e){for(var t,s=this.getClass(),n=this.whitespaceRegex,r=s?s.split(n):[],i=e.split(n);r.length&&(t=i.shift());){var a=Ze(r,t);-1!==a&&r.splice(a,1)}return this.getAttrs().class=r.join(" "),this},e.prototype.getClass=function(){return this.getAttrs().class||""},e.prototype.hasClass=function(e){return-1!==(" "+this.getClass()+" ").indexOf(" "+e+" ")},e.prototype.setInnerHTML=function(e){return this.innerHTML=e,this},e.prototype.setInnerHtml=function(e){return this.setInnerHTML(e)},e.prototype.getInnerHTML=function(){return this.innerHTML||""},e.prototype.getInnerHtml=function(){return this.getInnerHTML()},e.prototype.toAnchorString=function(){var e=this.getTagName(),t=this.buildAttrsStr();return["<",e,t=t?" "+t:"",">",this.getInnerHtml(),"</",e,">"].join("")},e.prototype.buildAttrsStr=function(){if(!this.attrs)return"";var e=this.getAttrs(),t=[];for(var s in e)e.hasOwnProperty(s)&&t.push(s+'="'+e[s]+'"');return t.join(" ")},e}(),tt=function(){function e(e){void 0===e&&(e={}),this.newWindow=!1,this.truncate={},this.className="",this.newWindow=e.newWindow||!1,this.truncate=e.truncate||{},this.className=e.className||""}return e.prototype.build=function(e){return new et({tagName:"a",attrs:this.createAttrs(e),innerHtml:this.processAnchorText(e.getAnchorText())})},e.prototype.createAttrs=function(e){var t={href:e.getAnchorHref()},s=this.createCssClass(e);return s&&(t.class=s),this.newWindow&&(t.target="_blank",t.rel="noopener noreferrer"),this.truncate&&this.truncate.length&&this.truncate.length<e.getAnchorText().length&&(t.title=e.getAnchorHref()),t},e.prototype.createCssClass=function(e){var t=this.className;if(t){for(var s=[t],n=e.getCssClassSuffixes(),r=0,i=n.length;r<i;r++)s.push(t+"-"+n[r]);return s.join(" ")}return""},e.prototype.processAnchorText=function(e){return this.doTruncate(e)},e.prototype.doTruncate=function(e){var t=this.truncate;if(!t||!t.length)return e;var s,n,r,i,a=t.length,o=t.location;return"smart"===o?function(e,t,s){var n,r;null==s?(s="&hellip;",r=3,n=8):(r=s.length,n=s.length);var i=function(e){var t="";return e.scheme&&e.host&&(t+=e.scheme+"://"),e.host&&(t+=e.host),e.path&&(t+="/"+e.path),e.query&&(t+="?"+e.query),e.fragment&&(t+="#"+e.fragment),t},a=function(e,t){var n=t/2,r=Math.ceil(n),i=-1*Math.floor(n),a="";return i<0&&(a=e.substr(i)),e.substr(0,r)+s+a};if(e.length<=t)return e;var o,u,l,c=t-r,h=(o={},(l=(u=e).match(/^([a-z]+):\/\//i))&&(o.scheme=l[1],u=u.substr(l[0].length)),(l=u.match(/^(.*?)(?=(\?|#|\/|$))/i))&&(o.host=l[1],u=u.substr(l[0].length)),(l=u.match(/^\/(.*?)(?=(\?|#|$))/i))&&(o.path=l[1],u=u.substr(l[0].length)),(l=u.match(/^\?(.*?)(?=(#|$))/i))&&(o.query=l[1],u=u.substr(l[0].length)),(l=u.match(/^#(.*?)$/i))&&(o.fragment=l[1]),o);if(h.query){var d=h.query.match(/^(.*?)(?=(\?|\#))(.*?)$/i);d&&(h.query=h.query.substr(0,d[1].length),e=i(h))}if(e.length<=t)return e;if(h.host&&(h.host=h.host.replace(/^www\./,""),e=i(h)),e.length<=t)return e;var p="";if(h.host&&(p+=h.host),p.length>=c)return h.host.length==t?(h.host.substr(0,t-r)+s).substr(0,c+n):a(p,c).substr(0,c+n);var f="";if(h.path&&(f+="/"+h.path),h.query&&(f+="?"+h.query),f){if((p+f).length>=c)return(p+f).length==t?(p+f).substr(0,t):(p+a(f,c-p.length)).substr(0,c+n);p+=f}if(h.fragment){var m="#"+h.fragment;if((p+m).length>=c)return(p+m).length==t?(p+m).substr(0,t):(p+a(m,c-p.length)).substr(0,c+n);p+=m}if(h.scheme&&h.host){var g=h.scheme+"://";if((p+g).length<c)return(g+p).substr(0,t)}if(p.length<=t)return p;var v="";return c>0&&(v=p.substr(-1*Math.floor(c/2))),(p.substr(0,Math.ceil(c/2))+s+v).substr(0,c+n)}(e,a):"middle"===o?function(e,t,s){if(e.length<=t)return e;var n,r;null==s?(s="&hellip;",n=8,r=3):(n=s.length,r=s.length);var i=t-r,a="";return i>0&&(a=e.substr(-1*Math.floor(i/2))),(e.substr(0,Math.ceil(i/2))+s+a).substr(0,i+n)}(e,a):(n=a,r=void 0,(s=e).length>n&&(null==r?(r="&hellip;",i=3):i=r.length,s=s.substring(0,n-i)+r),s)},e}(),st=function(){function e(e){this.__jsduckDummyDocProp=null,this.matchedText="",this.offset=0,this.tagBuilder=e.tagBuilder,this.matchedText=e.matchedText,this.offset=e.offset}return e.prototype.getMatchedText=function(){return this.matchedText},e.prototype.setOffset=function(e){this.offset=e},e.prototype.getOffset=function(){return this.offset},e.prototype.getCssClassSuffixes=function(){return[this.getType()]},e.prototype.buildTag=function(){return this.tagBuilder.build(this)},e}(),nt=function(e,t){return(nt=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var s in t)t.hasOwnProperty(s)&&(e[s]=t[s])})(e,t)};function rt(e,t){function s(){this.constructor=e}nt(e,t),e.prototype=null===t?Object.create(t):(s.prototype=t.prototype,new s)}var it,at=function(){return at=Object.assign||function(e){for(var t,s=1,n=arguments.length;s<n;s++)for(var r in t=arguments[s])Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e},at.apply(this,arguments)},ot=function(e){function t(t){var s=e.call(this,t)||this;return s.email="",s.email=t.email,s}return rt(t,e),t.prototype.getType=function(){return"email"},t.prototype.getEmail=function(){return this.email},t.prototype.getAnchorHref=function(){return"mailto:"+this.email},t.prototype.getAnchorText=function(){return this.email},t}(st),ut=function(e){function t(t){var s=e.call(this,t)||this;return s.serviceName="",s.hashtag="",s.serviceName=t.serviceName,s.hashtag=t.hashtag,s}return rt(t,e),t.prototype.getType=function(){return"hashtag"},t.prototype.getServiceName=function(){return this.serviceName},t.prototype.getHashtag=function(){return this.hashtag},t.prototype.getAnchorHref=function(){var e=this.serviceName,t=this.hashtag;switch(e){case"twitter":return"https://twitter.com/hashtag/"+t;case"facebook":return"https://www.facebook.com/hashtag/"+t;case"instagram":return"https://instagram.com/explore/tags/"+t;default:throw new Error("Unknown service name to point hashtag to: "+e)}},t.prototype.getAnchorText=function(){return"#"+this.hashtag},t}(st),lt=function(e){function t(t){var s=e.call(this,t)||this;return s.serviceName="twitter",s.mention="",s.mention=t.mention,s.serviceName=t.serviceName,s}return rt(t,e),t.prototype.getType=function(){return"mention"},t.prototype.getMention=function(){return this.mention},t.prototype.getServiceName=function(){return this.serviceName},t.prototype.getAnchorHref=function(){switch(this.serviceName){case"twitter":return"https://twitter.com/"+this.mention;case"instagram":return"https://instagram.com/"+this.mention;case"soundcloud":return"https://soundcloud.com/"+this.mention;default:throw new Error("Unknown service name to point mention to: "+this.serviceName)}},t.prototype.getAnchorText=function(){return"@"+this.mention},t.prototype.getCssClassSuffixes=function(){var t=e.prototype.getCssClassSuffixes.call(this),s=this.getServiceName();return s&&t.push(s),t},t}(st),ct=function(e){function t(t){var s=e.call(this,t)||this;return s.number="",s.plusSign=!1,s.number=t.number,s.plusSign=t.plusSign,s}return rt(t,e),t.prototype.getType=function(){return"phone"},t.prototype.getPhoneNumber=function(){return this.number},t.prototype.getNumber=function(){return this.getPhoneNumber()},t.prototype.getAnchorHref=function(){return"tel:"+(this.plusSign?"+":"")+this.number},t.prototype.getAnchorText=function(){return this.matchedText},t}(st),ht=function(e){function t(t){var s=e.call(this,t)||this;return s.url="",s.urlMatchType="scheme",s.protocolUrlMatch=!1,s.protocolRelativeMatch=!1,s.stripPrefix={scheme:!0,www:!0},s.stripTrailingSlash=!0,s.decodePercentEncoding=!0,s.schemePrefixRegex=/^(https?:\/\/)?/i,s.wwwPrefixRegex=/^(https?:\/\/)?(www\.)?/i,s.protocolRelativeRegex=/^\/\//,s.protocolPrepended=!1,s.urlMatchType=t.urlMatchType,s.url=t.url,s.protocolUrlMatch=t.protocolUrlMatch,s.protocolRelativeMatch=t.protocolRelativeMatch,s.stripPrefix=t.stripPrefix,s.stripTrailingSlash=t.stripTrailingSlash,s.decodePercentEncoding=t.decodePercentEncoding,s}return rt(t,e),t.prototype.getType=function(){return"url"},t.prototype.getUrlMatchType=function(){return this.urlMatchType},t.prototype.getUrl=function(){var e=this.url;return this.protocolRelativeMatch||this.protocolUrlMatch||this.protocolPrepended||(e=this.url="http://"+e,this.protocolPrepended=!0),e},t.prototype.getAnchorHref=function(){return this.getUrl().replace(/&amp;/g,"&")},t.prototype.getAnchorText=function(){var e=this.getMatchedText();return this.protocolRelativeMatch&&(e=this.stripProtocolRelativePrefix(e)),this.stripPrefix.scheme&&(e=this.stripSchemePrefix(e)),this.stripPrefix.www&&(e=this.stripWwwPrefix(e)),this.stripTrailingSlash&&(e=this.removeTrailingSlash(e)),this.decodePercentEncoding&&(e=this.removePercentEncoding(e)),e},t.prototype.stripSchemePrefix=function(e){return e.replace(this.schemePrefixRegex,"")},t.prototype.stripWwwPrefix=function(e){return e.replace(this.wwwPrefixRegex,"$1")},t.prototype.stripProtocolRelativePrefix=function(e){return e.replace(this.protocolRelativeRegex,"")},t.prototype.removeTrailingSlash=function(e){return"/"===e.charAt(e.length-1)&&(e=e.slice(0,-1)),e},t.prototype.removePercentEncoding=function(e){var t=e.replace(/%22/gi,"&quot;").replace(/%26/gi,"&amp;").replace(/%27/gi,"&#39;").replace(/%3C/gi,"&lt;").replace(/%3E/gi,"&gt;");try{return decodeURIComponent(t)}catch(s){return t}},t}(st),dt=function(e){this.__jsduckDummyDocProp=null,this.tagBuilder=e.tagBuilder},pt=/[A-Za-z]/,ft=/[\d]/,mt=/[\D]/,gt=/\s/,vt=/['"]/,bt=/[\x00-\x1F\x7F]/,yt=/A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC/.source,wt=yt+/\u2700-\u27bf\udde6-\uddff\ud800-\udbff\udc00-\udfff\ufe0e\ufe0f\u0300-\u036f\ufe20-\ufe23\u20d0-\u20f0\ud83c\udffb-\udfff\u200d\u3299\u3297\u303d\u3030\u24c2\ud83c\udd70-\udd71\udd7e-\udd7f\udd8e\udd91-\udd9a\udde6-\uddff\ude01-\ude02\ude1a\ude2f\ude32-\ude3a\ude50-\ude51\u203c\u2049\u25aa-\u25ab\u25b6\u25c0\u25fb-\u25fe\u00a9\u00ae\u2122\u2139\udc04\u2600-\u26FF\u2b05\u2b06\u2b07\u2b1b\u2b1c\u2b50\u2b55\u231a\u231b\u2328\u23cf\u23e9-\u23f3\u23f8-\u23fa\udccf\u2935\u2934\u2190-\u21ff/.source+/\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D4-\u08E1\u08E3-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C00-\u0C03\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D01-\u0D03\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D82\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u1885\u1886\u18A9\u1920-\u192B\u1930-\u193B\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF2-\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF5\u1DFB-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA880\uA881\uA8B4-\uA8C5\uA8E0-\uA8F1\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9E5\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F/.source,Ct=/0-9\u0660-\u0669\u06F0-\u06F9\u07C0-\u07C9\u0966-\u096F\u09E6-\u09EF\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0BE6-\u0BEF\u0C66-\u0C6F\u0CE6-\u0CEF\u0D66-\u0D6F\u0DE6-\u0DEF\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F29\u1040-\u1049\u1090-\u1099\u17E0-\u17E9\u1810-\u1819\u1946-\u194F\u19D0-\u19D9\u1A80-\u1A89\u1A90-\u1A99\u1B50-\u1B59\u1BB0-\u1BB9\u1C40-\u1C49\u1C50-\u1C59\uA620-\uA629\uA8D0-\uA8D9\uA900-\uA909\uA9D0-\uA9D9\uA9F0-\uA9F9\uAA50-\uAA59\uABF0-\uABF9\uFF10-\uFF19/.source,At=wt+Ct,Et=wt+Ct,kt="(?:["+Ct+"]{1,3}\\.){3}["+Ct+"]{1,3}",xt="["+Et+"](?:["+Et+"\\-]{0,61}["+Et+"])?",St=function(e){return"(?=("+xt+"))\\"+e},Tt=function(e){return"(?:"+St(e)+"(?:\\."+St(e+1)+"){0,126}|"+kt+")"},It=new RegExp("["+Et+"]"),Dt=/(?:xn--vermgensberatung-pwb|xn--vermgensberater-ctb|xn--clchc0ea0b2g2a9gcd|xn--w4r85el8fhu5dnra|northwesternmutual|travelersinsurance|vermögensberatung|xn--3oq18vl8pn36a|xn--5su34j936bgsg|xn--bck1b9a5dre4c|xn--mgbai9azgqp6j|xn--mgberp4a5d4ar|xn--xkc2dl3a5ee0h|vermögensberater|xn--fzys8d69uvgm|xn--mgba7c0bbn0a|xn--xkc2al3hye2a|americanexpress|kerryproperties|sandvikcoromant|xn--i1b6b1a6a2e|xn--kcrx77d1x4a|xn--lgbbat1ad8j|xn--mgba3a4f16a|xn--mgbaakc7dvf|xn--mgbc0a9azcg|xn--nqv7fs00ema|afamilycompany|americanfamily|bananarepublic|cancerresearch|cookingchannel|kerrylogistics|weatherchannel|xn--54b7fta0cc|xn--6qq986b3xl|xn--80aqecdr1a|xn--b4w605ferd|xn--fiq228c5hs|xn--h2breg3eve|xn--jlq61u9w7b|xn--mgba3a3ejt|xn--mgbaam7a8h|xn--mgbayh7gpa|xn--mgbb9fbpob|xn--mgbbh1a71e|xn--mgbca7dzdo|xn--mgbi4ecexp|xn--mgbx4cd0ab|xn--rvc1e0am3e|international|lifeinsurance|spreadbetting|travelchannel|wolterskluwer|xn--eckvdtc9d|xn--fpcrj9c3d|xn--fzc2c9e2c|xn--h2brj9c8c|xn--tiq49xqyj|xn--yfro4i67o|xn--ygbi2ammx|construction|lplfinancial|scholarships|versicherung|xn--3e0b707e|xn--45br5cyl|xn--80adxhks|xn--80asehdb|xn--8y0a063a|xn--gckr3f0f|xn--mgb9awbf|xn--mgbab2bd|xn--mgbgu82a|xn--mgbpl2fh|xn--mgbt3dhd|xn--mk1bu44c|xn--ngbc5azd|xn--ngbe9e0a|xn--ogbpf8fl|xn--qcka1pmc|accountants|barclaycard|blackfriday|blockbuster|bridgestone|calvinklein|contractors|creditunion|engineering|enterprises|foodnetwork|investments|kerryhotels|lamborghini|motorcycles|olayangroup|photography|playstation|productions|progressive|redumbrella|rightathome|williamhill|xn--11b4c3d|xn--1ck2e1b|xn--1qqw23a|xn--2scrj9c|xn--3bst00m|xn--3ds443g|xn--3hcrj9c|xn--42c2d9a|xn--45brj9c|xn--55qw42g|xn--6frz82g|xn--80ao21a|xn--9krt00a|xn--cck2b3b|xn--czr694b|xn--d1acj3b|xn--efvy88h|xn--estv75g|xn--fct429k|xn--fjq720a|xn--flw351e|xn--g2xx48c|xn--gecrj9c|xn--gk3at1e|xn--h2brj9c|xn--hxt814e|xn--imr513n|xn--j6w193g|xn--jvr189m|xn--kprw13d|xn--kpry57d|xn--kpu716f|xn--mgbbh1a|xn--mgbtx2b|xn--mix891f|xn--nyqy26a|xn--otu796d|xn--pbt977c|xn--pgbs0dh|xn--q9jyb4c|xn--rhqv96g|xn--rovu88b|xn--s9brj9c|xn--ses554g|xn--t60b56a|xn--vuq861b|xn--w4rs40l|xn--xhq521b|xn--zfr164b|சிங்கப்பூர்|accountant|apartments|associates|basketball|bnpparibas|boehringer|capitalone|consulting|creditcard|cuisinella|eurovision|extraspace|foundation|healthcare|immobilien|industries|management|mitsubishi|nationwide|newholland|nextdirect|onyourside|properties|protection|prudential|realestate|republican|restaurant|schaeffler|swiftcover|tatamotors|technology|telefonica|university|vistaprint|vlaanderen|volkswagen|xn--30rr7y|xn--3pxu8k|xn--45q11c|xn--4gbrim|xn--55qx5d|xn--5tzm5g|xn--80aswg|xn--90a3ac|xn--9dbq2a|xn--9et52u|xn--c2br7g|xn--cg4bki|xn--czrs0t|xn--czru2d|xn--fiq64b|xn--fiqs8s|xn--fiqz9s|xn--io0a7i|xn--kput3i|xn--mxtq1m|xn--o3cw4h|xn--pssy2u|xn--unup4y|xn--wgbh1c|xn--wgbl6a|xn--y9a3aq|accenture|alfaromeo|allfinanz|amsterdam|analytics|aquarelle|barcelona|bloomberg|christmas|community|directory|education|equipment|fairwinds|financial|firestone|fresenius|frontdoor|fujixerox|furniture|goldpoint|hisamitsu|homedepot|homegoods|homesense|honeywell|institute|insurance|kuokgroup|ladbrokes|lancaster|landrover|lifestyle|marketing|marshalls|melbourne|microsoft|panasonic|passagens|pramerica|richardli|scjohnson|shangrila|solutions|statebank|statefarm|stockholm|travelers|vacations|xn--90ais|xn--c1avg|xn--d1alf|xn--e1a4c|xn--fhbei|xn--j1aef|xn--j1amh|xn--l1acc|xn--ngbrx|xn--nqv7f|xn--p1acf|xn--tckwe|xn--vhquv|yodobashi|abudhabi|airforce|allstate|attorney|barclays|barefoot|bargains|baseball|boutique|bradesco|broadway|brussels|budapest|builders|business|capetown|catering|catholic|chrysler|cipriani|cityeats|cleaning|clinique|clothing|commbank|computer|delivery|deloitte|democrat|diamonds|discount|discover|download|engineer|ericsson|esurance|etisalat|everbank|exchange|feedback|fidelity|firmdale|football|frontier|goodyear|grainger|graphics|guardian|hdfcbank|helsinki|holdings|hospital|infiniti|ipiranga|istanbul|jpmorgan|lighting|lundbeck|marriott|maserati|mckinsey|memorial|merckmsd|mortgage|movistar|observer|partners|pharmacy|pictures|plumbing|property|redstone|reliance|saarland|samsclub|security|services|shopping|showtime|softbank|software|stcgroup|supplies|symantec|training|uconnect|vanguard|ventures|verisign|woodside|xn--90ae|xn--node|xn--p1ai|xn--qxam|yokohama|السعودية|abogado|academy|agakhan|alibaba|android|athleta|auction|audible|auspost|avianca|banamex|bauhaus|bentley|bestbuy|booking|brother|bugatti|capital|caravan|careers|cartier|channel|charity|chintai|citadel|clubmed|college|cologne|comcast|company|compare|contact|cooking|corsica|country|coupons|courses|cricket|cruises|dentist|digital|domains|exposed|express|farmers|fashion|ferrari|ferrero|finance|fishing|fitness|flights|florist|flowers|forsale|frogans|fujitsu|gallery|genting|godaddy|grocery|guitars|hamburg|hangout|hitachi|holiday|hosting|hoteles|hotmail|hyundai|iselect|ismaili|jewelry|juniper|kitchen|komatsu|lacaixa|lancome|lanxess|lasalle|latrobe|leclerc|liaison|limited|lincoln|markets|metlife|monster|netbank|netflix|network|neustar|okinawa|oldnavy|organic|origins|philips|pioneer|politie|realtor|recipes|rentals|reviews|rexroth|samsung|sandvik|schmidt|schwarz|science|shiksha|shriram|singles|staples|starhub|storage|support|surgery|systems|temasek|theater|theatre|tickets|tiffany|toshiba|trading|walmart|wanggou|watches|weather|website|wedding|whoswho|windows|winners|xfinity|yamaxun|youtube|zuerich|католик|اتصالات|الجزائر|العليان|پاکستان|كاثوليك|موبايلي|இந்தியா|abarth|abbott|abbvie|active|africa|agency|airbus|airtel|alipay|alsace|alstom|anquan|aramco|author|bayern|beauty|berlin|bharti|blanco|bostik|boston|broker|camera|career|caseih|casino|center|chanel|chrome|church|circle|claims|clinic|coffee|comsec|condos|coupon|credit|cruise|dating|datsun|dealer|degree|dental|design|direct|doctor|dunlop|dupont|durban|emerck|energy|estate|events|expert|family|flickr|futbol|gallup|garden|george|giving|global|google|gratis|health|hermes|hiphop|hockey|hotels|hughes|imamat|insure|intuit|jaguar|joburg|juegos|kaufen|kinder|kindle|kosher|lancia|latino|lawyer|lefrak|living|locker|london|luxury|madrid|maison|makeup|market|mattel|mobile|mobily|monash|mormon|moscow|museum|mutual|nagoya|natura|nissan|nissay|norton|nowruz|office|olayan|online|oracle|orange|otsuka|pfizer|photos|physio|piaget|pictet|quebec|racing|realty|reisen|repair|report|review|rocher|rogers|ryukyu|safety|sakura|sanofi|school|schule|search|secure|select|shouji|soccer|social|stream|studio|supply|suzuki|swatch|sydney|taipei|taobao|target|tattoo|tennis|tienda|tjmaxx|tkmaxx|toyota|travel|unicom|viajes|viking|villas|virgin|vision|voting|voyage|vuelos|walter|warman|webcam|xihuan|yachts|yandex|zappos|москва|онлайн|ابوظبي|ارامكو|الاردن|المغرب|امارات|فلسطين|مليسيا|भारतम्|இலங்கை|ファッション|actor|adult|aetna|amfam|amica|apple|archi|audio|autos|azure|baidu|beats|bible|bingo|black|boats|bosch|build|canon|cards|chase|cheap|cisco|citic|click|cloud|coach|codes|crown|cymru|dabur|dance|deals|delta|dodge|drive|dubai|earth|edeka|email|epost|epson|faith|fedex|final|forex|forum|gallo|games|gifts|gives|glade|glass|globo|gmail|green|gripe|group|gucci|guide|homes|honda|horse|house|hyatt|ikano|intel|irish|iveco|jetzt|koeln|kyoto|lamer|lease|legal|lexus|lilly|linde|lipsy|lixil|loans|locus|lotte|lotto|lupin|macys|mango|media|miami|money|mopar|movie|nadex|nexus|nikon|ninja|nokia|nowtv|omega|osaka|paris|parts|party|phone|photo|pizza|place|poker|praxi|press|prime|promo|quest|radio|rehab|reise|ricoh|rocks|rodeo|rugby|salon|sener|seven|sharp|shell|shoes|skype|sling|smart|smile|solar|space|sport|stada|store|study|style|sucks|swiss|tatar|tires|tirol|tmall|today|tokyo|tools|toray|total|tours|trade|trust|tunes|tushu|ubank|vegas|video|vodka|volvo|wales|watch|weber|weibo|works|world|xerox|yahoo|zippo|ایران|بازار|بھارت|سودان|سورية|همراه|भारोत|संगठन|বাংলা|భారత్|ഭാരതം|嘉里大酒店|aarp|able|adac|aero|aigo|akdn|ally|amex|arab|army|arpa|arte|asda|asia|audi|auto|baby|band|bank|bbva|beer|best|bike|bing|blog|blue|bofa|bond|book|buzz|cafe|call|camp|care|cars|casa|case|cash|cbre|cern|chat|citi|city|club|cool|coop|cyou|data|date|dclk|deal|dell|desi|diet|dish|docs|doha|duck|duns|dvag|erni|fage|fail|fans|farm|fast|fiat|fido|film|fire|fish|flir|food|ford|free|fund|game|gbiz|gent|ggee|gift|gmbh|gold|golf|goog|guge|guru|hair|haus|hdfc|help|here|hgtv|host|hsbc|icbc|ieee|imdb|immo|info|itau|java|jeep|jobs|jprs|kddi|kiwi|kpmg|kred|land|lego|lgbt|lidl|life|like|limo|link|live|loan|loft|love|ltda|luxe|maif|meet|meme|menu|mini|mint|mobi|moda|moto|name|navy|news|next|nico|nike|ollo|open|page|pars|pccw|pics|ping|pink|play|plus|pohl|porn|post|prod|prof|qpon|raid|read|reit|rent|rest|rich|rmit|room|rsvp|ruhr|safe|sale|sarl|save|saxo|scor|scot|seat|seek|sexy|shaw|shia|shop|show|silk|sina|site|skin|sncf|sohu|song|sony|spot|star|surf|talk|taxi|team|tech|teva|tiaa|tips|town|toys|tube|vana|visa|viva|vivo|vote|voto|wang|weir|wien|wiki|wine|work|xbox|yoga|zara|zero|zone|дети|сайт|بارت|بيتك|ڀارت|تونس|شبكة|عراق|عمان|موقع|भारत|ভারত|ভাৰত|ਭਾਰਤ|ભારત|ଭାରତ|ಭಾರತ|ලංකා|グーグル|クラウド|ポイント|大众汽车|组织机构|電訊盈科|香格里拉|aaa|abb|abc|aco|ads|aeg|afl|aig|anz|aol|app|art|aws|axa|bar|bbc|bbt|bcg|bcn|bet|bid|bio|biz|bms|bmw|bnl|bom|boo|bot|box|buy|bzh|cab|cal|cam|car|cat|cba|cbn|cbs|ceb|ceo|cfa|cfd|com|crs|csc|dad|day|dds|dev|dhl|diy|dnp|dog|dot|dtv|dvr|eat|eco|edu|esq|eus|fan|fit|fly|foo|fox|frl|ftr|fun|fyi|gal|gap|gdn|gea|gle|gmo|gmx|goo|gop|got|gov|hbo|hiv|hkt|hot|how|ibm|ice|icu|ifm|inc|ing|ink|int|ist|itv|jcb|jcp|jio|jll|jmp|jnj|jot|joy|kfh|kia|kim|kpn|krd|lat|law|lds|llc|lol|lpl|ltd|man|map|mba|med|men|mil|mit|mlb|mls|mma|moe|moi|mom|mov|msd|mtn|mtr|nab|nba|nec|net|new|nfl|ngo|nhk|now|nra|nrw|ntt|nyc|obi|off|one|ong|onl|ooo|org|ott|ovh|pay|pet|phd|pid|pin|pnc|pro|pru|pub|pwc|qvc|red|ren|ril|rio|rip|run|rwe|sap|sas|sbi|sbs|sca|scb|ses|sew|sex|sfr|ski|sky|soy|srl|srt|stc|tab|tax|tci|tdk|tel|thd|tjx|top|trv|tui|tvs|ubs|uno|uol|ups|vet|vig|vin|vip|wed|win|wme|wow|wtc|wtf|xin|xxx|xyz|you|yun|zip|бел|ком|қаз|мкд|мон|орг|рус|срб|укр|հայ|קום|عرب|قطر|كوم|مصر|कॉम|नेट|คอม|ไทย|ストア|セール|みんな|中文网|天主教|我爱你|新加坡|淡马锡|诺基亚|飞利浦|ac|ad|ae|af|ag|ai|al|am|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cw|cx|cy|cz|de|dj|dk|dm|do|dz|ec|ee|eg|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|za|zm|zw|ελ|бг|ею|рф|გე|닷넷|닷컴|삼성|한국|コム|世界|中信|中国|中國|企业|佛山|信息|健康|八卦|公司|公益|台湾|台灣|商城|商店|商标|嘉里|在线|大拿|娱乐|家電|工行|广东|微博|慈善|手机|手表|招聘|政务|政府|新闻|时尚|書籍|机构|游戏|澳門|点看|珠宝|移动|网址|网店|网站|网络|联通|谷歌|购物|通販|集团|食品|餐厅|香港)/,Mt=new RegExp("["+Et+"!#$%&'*+/=?^_`{|}~-]"),Ft=new RegExp("^"+Dt.source+"$"),Bt=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.localPartCharRegex=Mt,t.strictTldRegex=Ft,t}return rt(t,e),t.prototype.parseMatches=function(e){for(var t=this.tagBuilder,s=this.localPartCharRegex,n=this.strictTldRegex,r=[],i=e.length,a=new Nt,o={m:"a",a:"i",i:"l",l:"t",t:"o",o:":"},u=0,l=0,c=a;u<i;){var h=e.charAt(u);switch(l){case 0:"m"===(d=h)?w(1):s.test(d)&&w();break;case 1:p(e.charAt(u-1),h);break;case 2:f(h);break;case 3:m(h);break;case 4:g(h);break;case 5:v(h);break;case 6:b(h);break;case 7:y(h);break;default:Xe(l)}u++}var d;return A(),r;function p(e,t){":"===e?s.test(t)?(l=2,c=new Nt(at(at({},c),{hasMailtoPrefix:!0}))):C():o[e]===t||(s.test(t)?l=2:"."===t?l=3:"@"===t?l=4:C())}function f(e){"."===e?l=3:"@"===e?l=4:s.test(e)||C()}function m(e){"."===e||"@"===e?C():s.test(e)?l=2:C()}function g(e){It.test(e)?l=5:C()}function v(e){"."===e?l=7:"-"===e?l=6:It.test(e)||A()}function b(e){"-"===e||"."===e?A():It.test(e)?l=5:A()}function y(e){"."===e||"-"===e?A():It.test(e)?(l=5,c=new Nt(at(at({},c),{hasDomainDot:!0}))):A()}function w(e){void 0===e&&(e=2),l=e,c=new Nt({idx:u})}function C(){l=0,c=a}function A(){if(c.hasDomainDot){var s=e.slice(c.idx,u);/[-.]$/.test(s)&&(s=s.slice(0,-1));var i=c.hasMailtoPrefix?s.slice(7):s;(function(e){var t=(e.split(".").pop()||"").toLowerCase();return n.test(t)})(i)&&r.push(new ot({tagBuilder:t,matchedText:s,offset:c.idx,email:i}))}C()}},t}(dt),Nt=function(e){void 0===e&&(e={}),this.idx=void 0!==e.idx?e.idx:-1,this.hasMailtoPrefix=!!e.hasMailtoPrefix,this.hasDomainDot=!!e.hasDomainDot},Rt=function(){function e(){}return e.isValid=function(e,t){return!(t&&!this.isValidUriScheme(t)||this.urlMatchDoesNotHaveProtocolOrDot(e,t)||this.urlMatchDoesNotHaveAtLeastOneWordChar(e,t)&&!this.isValidIpAddress(e)||this.containsMultipleDots(e))},e.isValidIpAddress=function(e){var t=new RegExp(this.hasFullProtocolRegex.source+this.ipRegex.source);return null!==e.match(t)},e.containsMultipleDots=function(e){var t=e;return this.hasFullProtocolRegex.test(e)&&(t=e.split("://")[1]),t.split("/")[0].indexOf("..")>-1},e.isValidUriScheme=function(e){var t=e.match(this.uriSchemeRegex),s=t&&t[0].toLowerCase();return"javascript:"!==s&&"vbscript:"!==s},e.urlMatchDoesNotHaveProtocolOrDot=function(e,t){return!(!e||t&&this.hasFullProtocolRegex.test(t)||-1!==e.indexOf("."))},e.urlMatchDoesNotHaveAtLeastOneWordChar=function(e,t){return!(!e||!t||this.hasFullProtocolRegex.test(t)||this.hasWordCharAfterProtocolRegex.test(e))},e.hasFullProtocolRegex=/^[A-Za-z][-.+A-Za-z0-9]*:\/\//,e.uriSchemeRegex=/^[A-Za-z][-.+A-Za-z0-9]*:/,e.hasWordCharAfterProtocolRegex=new RegExp(":[^\\s]*?["+yt+"]"),e.ipRegex=/[0-9][0-9]?[0-9]?\.[0-9][0-9]?[0-9]?\.[0-9][0-9]?[0-9]?\.[0-9][0-9]?[0-9]?(:[0-9]*)?\/?$/,e}(),_t=(it=new RegExp("[/?#](?:["+Et+"\\-+&@#/%=~_()|'$*\\[\\]{}?!:,.;^✓]*["+Et+"\\-+&@#/%=~_()|'$*\\[\\]{}✓])?"),new RegExp(["(?:","(",/(?:[A-Za-z][-.+A-Za-z0-9]{0,63}:(?![A-Za-z][-.+A-Za-z0-9]{0,63}:\/\/)(?!\d+\/?)(?:\/\/)?)/.source,Tt(2),")","|","(","(//)?",/(?:www\.)/.source,Tt(6),")","|","(","(//)?",Tt(10)+"\\.",Dt.source,"(?![-"+At+"])",")",")","(?::[0-9]+)?","(?:"+it.source+")?"].join(""),"gi")),Pt=new RegExp("["+Et+"]"),Ot=function(e){function t(t){var s=e.call(this,t)||this;return s.stripPrefix={scheme:!0,www:!0},s.stripTrailingSlash=!0,s.decodePercentEncoding=!0,s.matcherRegex=_t,s.wordCharRegExp=Pt,s.stripPrefix=t.stripPrefix,s.stripTrailingSlash=t.stripTrailingSlash,s.decodePercentEncoding=t.decodePercentEncoding,s}return rt(t,e),t.prototype.parseMatches=function(e){for(var t,s=this.matcherRegex,n=this.stripPrefix,r=this.stripTrailingSlash,i=this.decodePercentEncoding,a=this.tagBuilder,o=[],u=function(){var s=t[0],u=t[1],c=t[4],h=t[5],d=t[9],p=t.index,f=h||d,m=e.charAt(p-1);if(!Rt.isValid(s,u))return"continue";if(p>0&&"@"===m)return"continue";if(p>0&&f&&l.wordCharRegExp.test(m))return"continue";if(/\?$/.test(s)&&(s=s.substr(0,s.length-1)),l.matchHasUnbalancedClosingParen(s))s=s.substr(0,s.length-1);else{var g=l.matchHasInvalidCharAfterTld(s,u);g>-1&&(s=s.substr(0,g))}var v=["http://","https://"].find((function(e){return!!u&&-1!==u.indexOf(e)}));if(v){var b=s.indexOf(v);s=s.substr(b),u=u.substr(b),p+=b}var y=u?"scheme":c?"www":"tld",w=!!u;o.push(new ht({tagBuilder:a,matchedText:s,offset:p,urlMatchType:y,url:s,protocolUrlMatch:w,protocolRelativeMatch:!!f,stripPrefix:n,stripTrailingSlash:r,decodePercentEncoding:i}))},l=this;null!==(t=s.exec(e));)u();return o},t.prototype.matchHasUnbalancedClosingParen=function(e){var t,s=e.charAt(e.length-1);if(")"===s)t="(";else if("]"===s)t="[";else{if("}"!==s)return!1;t="{"}for(var n=0,r=0,i=e.length-1;r<i;r++){var a=e.charAt(r);a===t?n++:a===s&&(n=Math.max(n-1,0))}return 0===n},t.prototype.matchHasInvalidCharAfterTld=function(e,t){if(!e)return-1;var s=0;t&&(s=e.indexOf(":"),e=e.slice(s));var n=new RegExp("^((.?//)?[-."+Et+"]*[-"+Et+"]\\.[-"+Et+"]+)").exec(e);return null===n?-1:(s+=n[1].length,e=e.slice(n[1].length),/^[^-.A-Za-z0-9:\/?#]/.test(e)?s:-1)},t}(dt),Ut=new RegExp("#[_"+Et+"]{1,139}(?![_"+Et+"])","g"),jt=new RegExp("[^"+Et+"]"),$t=function(e){function t(t){var s=e.call(this,t)||this;return s.serviceName="twitter",s.matcherRegex=Ut,s.nonWordCharRegex=jt,s.serviceName=t.serviceName,s}return rt(t,e),t.prototype.parseMatches=function(e){for(var t,s=this.matcherRegex,n=this.nonWordCharRegex,r=this.serviceName,i=this.tagBuilder,a=[];null!==(t=s.exec(e));){var o=t.index,u=e.charAt(o-1);if(0===o||n.test(u)){var l=t[0],c=t[0].slice(1);a.push(new ut({tagBuilder:i,matchedText:l,offset:o,serviceName:r,hashtag:c}))}}return a},t}(dt),Wt=new RegExp(/(?:(?:(?:(\+)?\d{1,3}[-\040.]?)?\(?\d{3}\)?[-\040.]?\d{3}[-\040.]?\d{4})|(?:(\+)(?:9[976]\d|8[987530]\d|6[987]\d|5[90]\d|42\d|3[875]\d|2[98654321]\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|4[987654310]|3[9643210]|2[70]|7|1)[-\040.]?(?:\d[-\040.]?){6,12}\d+))([,;]+[0-9]+#?)*/.source+"|"+/(0([1-9]{1}-?[1-9]\d{3}|[1-9]{2}-?\d{3}|[1-9]{2}\d{1}-?\d{2}|[1-9]{2}\d{2}-?\d{1})-?\d{4}|0[789]0-?\d{4}-?\d{4}|050-?\d{4}-?\d{4})/.source,"g"),qt=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.matcherRegex=Wt,t}return rt(t,e),t.prototype.parseMatches=function(e){for(var t,s=this.matcherRegex,n=this.tagBuilder,r=[];null!==(t=s.exec(e));){var i=t[0],a=i.replace(/[^0-9,;#]/g,""),o=!(!t[1]&&!t[2]),u=0==t.index?"":e.substr(t.index-1,1),l=e.substr(t.index+i.length,1),c=!u.match(/\d/)&&!l.match(/\d/);this.testMatch(t[3])&&this.testMatch(i)&&c&&r.push(new ct({tagBuilder:n,matchedText:i,offset:t.index,number:a,plusSign:o}))}return r},t.prototype.testMatch=function(e){return mt.test(e)},t}(dt),Ht=new RegExp("@[_"+Et+"]{1,50}(?![_"+Et+"])","g"),Gt=new RegExp("@[_."+Et+"]{1,30}(?![_"+Et+"])","g"),Lt=new RegExp("@[-_."+Et+"]{1,50}(?![-_"+Et+"])","g"),zt=new RegExp("[^"+Et+"]"),Jt=function(e){function t(t){var s=e.call(this,t)||this;return s.serviceName="twitter",s.matcherRegexes={twitter:Ht,instagram:Gt,soundcloud:Lt},s.nonWordCharRegex=zt,s.serviceName=t.serviceName,s}return rt(t,e),t.prototype.parseMatches=function(e){var t,s=this.serviceName,n=this.matcherRegexes[this.serviceName],r=this.nonWordCharRegex,i=this.tagBuilder,a=[];if(!n)return a;for(;null!==(t=n.exec(e));){var o=t.index,u=e.charAt(o-1);if(0===o||r.test(u)){var l=t[0].replace(/\.+$/g,""),c=l.slice(1);a.push(new lt({tagBuilder:i,matchedText:l,offset:o,serviceName:s,mention:c}))}}return a},t}(dt);var Yt=function(e){void 0===e&&(e={}),this.idx=void 0!==e.idx?e.idx:-1,this.type=e.type||"tag",this.name=e.name||"",this.isOpening=!!e.isOpening,this.isClosing=!!e.isClosing},Qt=function(){function e(t){void 0===t&&(t={}),this.version=e.version,this.urls={},this.email=!0,this.phone=!0,this.hashtag=!1,this.mention=!1,this.newWindow=!0,this.stripPrefix={scheme:!0,www:!0},this.stripTrailingSlash=!0,this.decodePercentEncoding=!0,this.truncate={length:0,location:"end"},this.className="",this.replaceFn=null,this.context=void 0,this.sanitizeHtml=!1,this.matchers=null,this.tagBuilder=null,this.urls=this.normalizeUrlsCfg(t.urls),this.email="boolean"==typeof t.email?t.email:this.email,this.phone="boolean"==typeof t.phone?t.phone:this.phone,this.hashtag=t.hashtag||this.hashtag,this.mention=t.mention||this.mention,this.newWindow="boolean"==typeof t.newWindow?t.newWindow:this.newWindow,this.stripPrefix=this.normalizeStripPrefixCfg(t.stripPrefix),this.stripTrailingSlash="boolean"==typeof t.stripTrailingSlash?t.stripTrailingSlash:this.stripTrailingSlash,this.decodePercentEncoding="boolean"==typeof t.decodePercentEncoding?t.decodePercentEncoding:this.decodePercentEncoding,this.sanitizeHtml=t.sanitizeHtml||!1;var s=this.mention;if(!1!==s&&"twitter"!==s&&"instagram"!==s&&"soundcloud"!==s)throw new Error("invalid `mention` cfg - see docs");var n=this.hashtag;if(!1!==n&&"twitter"!==n&&"facebook"!==n&&"instagram"!==n)throw new Error("invalid `hashtag` cfg - see docs");this.truncate=this.normalizeTruncateCfg(t.truncate),this.className=t.className||this.className,this.replaceFn=t.replaceFn||this.replaceFn,this.context=t.context||this}return e.link=function(t,s){return new e(s).link(t)},e.parse=function(t,s){return new e(s).parse(t)},e.prototype.normalizeUrlsCfg=function(e){return null==e&&(e=!0),"boolean"==typeof e?{schemeMatches:e,wwwMatches:e,tldMatches:e}:{schemeMatches:"boolean"!=typeof e.schemeMatches||e.schemeMatches,wwwMatches:"boolean"!=typeof e.wwwMatches||e.wwwMatches,tldMatches:"boolean"!=typeof e.tldMatches||e.tldMatches}},e.prototype.normalizeStripPrefixCfg=function(e){return null==e&&(e=!0),"boolean"==typeof e?{scheme:e,www:e}:{scheme:"boolean"!=typeof e.scheme||e.scheme,www:"boolean"!=typeof e.www||e.www}},e.prototype.normalizeTruncateCfg=function(e){return"number"==typeof e?{length:e,location:"end"}:function(e,t){for(var s in t)t.hasOwnProperty(s)&&void 0===e[s]&&(e[s]=t[s]);return e}(e||{},{length:Number.POSITIVE_INFINITY,location:"end"})},e.prototype.parse=function(e){var t=this,s=["a","style","script"],n=0,r=[];return function(e,t){for(var s,n=t.onOpenTag,r=t.onCloseTag,i=t.onText,a=t.onComment,o=t.onDoctype,u=new Yt,l=0,c=e.length,h=0,d=0,p=u;l<c;){var f=e.charAt(l);switch(h){case 0:"<"===f&&_();break;case 1:m(f);break;case 2:v(f);break;case 3:g(f);break;case 4:b(f);break;case 5:y(f);break;case 6:w(f);break;case 7:C(f);break;case 8:A(f);break;case 9:E(f);break;case 10:k(f);break;case 11:x(f);break;case 12:S(f);break;case 13:"--"===e.substr(l,2)?(l+=2,p=new Yt(at(at({},p),{type:"comment"})),h=14):"DOCTYPE"===e.substr(l,7).toUpperCase()?(l+=7,p=new Yt(at(at({},p),{type:"doctype"})),h=20):R();break;case 14:T(f);break;case 15:I(f);break;case 16:D(f);break;case 17:M(f);break;case 18:F(f);break;case 19:B(f);break;case 20:N(f);break;default:Xe(h)}l++}function m(e){"!"===e?h=13:"/"===e?(h=2,p=new Yt(at(at({},p),{isClosing:!0}))):"<"===e?_():pt.test(e)?(h=3,p=new Yt(at(at({},p),{isOpening:!0}))):(h=0,p=u)}function g(e){gt.test(e)?(p=new Yt(at(at({},p),{name:O()})),h=4):"<"===e?_():"/"===e?(p=new Yt(at(at({},p),{name:O()})),h=12):">"===e?(p=new Yt(at(at({},p),{name:O()})),P()):pt.test(e)||ft.test(e)||":"===e||R()}function v(e){">"===e?R():pt.test(e)?h=3:R()}function b(e){gt.test(e)||("/"===e?h=12:">"===e?P():"<"===e?_():"="===e||vt.test(e)||bt.test(e)?R():h=5)}function y(e){gt.test(e)?h=6:"/"===e?h=12:"="===e?h=7:">"===e?P():"<"===e?_():vt.test(e)&&R()}function w(e){gt.test(e)||("/"===e?h=12:"="===e?h=7:">"===e?P():"<"===e?_():vt.test(e)?R():h=5)}function C(e){gt.test(e)||('"'===e?h=8:"'"===e?h=9:/[>=`]/.test(e)?R():"<"===e?_():h=10)}function A(e){'"'===e&&(h=11)}function E(e){"'"===e&&(h=11)}function k(e){gt.test(e)?h=4:">"===e?P():"<"===e&&_()}function x(e){gt.test(e)?h=4:"/"===e?h=12:">"===e?P():"<"===e?_():(h=4,l--)}function S(e){">"===e?(p=new Yt(at(at({},p),{isClosing:!0})),P()):h=4}function T(e){"-"===e?h=15:">"===e?R():h=16}function I(e){"-"===e?h=18:">"===e?R():h=16}function D(e){"-"===e&&(h=17)}function M(e){h="-"===e?18:16}function F(e){">"===e?P():"!"===e?h=19:"-"===e||(h=16)}function B(e){"-"===e?h=17:">"===e?P():h=16}function N(e){">"===e?P():"<"===e&&_()}function R(){h=0,p=u}function _(){h=1,p=new Yt({idx:l})}function P(){var t=e.slice(d,p.idx);t&&i(t,d),"comment"===p.type?a(p.idx):"doctype"===p.type?o(p.idx):(p.isOpening&&n(p.name,p.idx),p.isClosing&&r(p.name,p.idx)),R(),d=l+1}function O(){var t=p.idx+(p.isClosing?2:1);return e.slice(t,l).toLowerCase()}d<l&&(s=e.slice(d,l),i(s,d),d=l+1)}(e,{onOpenTag:function(e){s.indexOf(e)>=0&&n++},onText:function(e,s){if(0===n){var i=function(e,t){if(!t.global)throw new Error("`splitRegex` must have the 'g' flag set");for(var s,n=[],r=0;s=t.exec(e);)n.push(e.substring(r,s.index)),n.push(s[0]),r=s.index+s[0].length;return n.push(e.substring(r)),n}(e,/(&nbsp;|&#160;|&lt;|&#60;|&gt;|&#62;|&quot;|&#34;|&#39;)/gi),a=s;i.forEach((function(e,s){if(s%2==0){var n=t.parseText(e,a);r.push.apply(r,n)}a+=e.length}))}},onCloseTag:function(e){s.indexOf(e)>=0&&(n=Math.max(n-1,0))},onComment:function(e){},onDoctype:function(e){}}),r=this.compactMatches(r),r=this.removeUnwantedMatches(r)},e.prototype.compactMatches=function(e){e.sort((function(e,t){return e.getOffset()-t.getOffset()}));for(var t=0;t<e.length-1;t++){var s=e[t],n=s.getOffset(),r=s.getMatchedText().length,i=n+r;if(t+1<e.length){if(e[t+1].getOffset()===n){var a=e[t+1].getMatchedText().length>r?t:t+1;e.splice(a,1);continue}e[t+1].getOffset()<i&&e.splice(t+1,1)}}return e},e.prototype.removeUnwantedMatches=function(e){return this.hashtag||Ke(e,(function(e){return"hashtag"===e.getType()})),this.email||Ke(e,(function(e){return"email"===e.getType()})),this.phone||Ke(e,(function(e){return"phone"===e.getType()})),this.mention||Ke(e,(function(e){return"mention"===e.getType()})),this.urls.schemeMatches||Ke(e,(function(e){return"url"===e.getType()&&"scheme"===e.getUrlMatchType()})),this.urls.wwwMatches||Ke(e,(function(e){return"url"===e.getType()&&"www"===e.getUrlMatchType()})),this.urls.tldMatches||Ke(e,(function(e){return"url"===e.getType()&&"tld"===e.getUrlMatchType()})),e},e.prototype.parseText=function(e,t){void 0===t&&(t=0),t=t||0;for(var s=this.getMatchers(),n=[],r=0,i=s.length;r<i;r++){for(var a=s[r].parseMatches(e),o=0,u=a.length;o<u;o++)a[o].setOffset(t+a[o].getOffset());n.push.apply(n,a)}return n},e.prototype.link=function(e){if(!e)return"";this.sanitizeHtml&&(e=e.replace(/</g,"&lt;").replace(/>/g,"&gt;"));for(var t=this.parse(e),s=[],n=0,r=0,i=t.length;r<i;r++){var a=t[r];s.push(e.substring(n,a.getOffset())),s.push(this.createMatchReturnVal(a)),n=a.getOffset()+a.getMatchedText().length}return s.push(e.substring(n)),s.join("")},e.prototype.createMatchReturnVal=function(e){var t;return this.replaceFn&&(t=this.replaceFn.call(this.context,e)),"string"==typeof t?t:!1===t?e.getMatchedText():t instanceof et?t.toAnchorString():e.buildTag().toAnchorString()},e.prototype.getMatchers=function(){if(this.matchers)return this.matchers;var e=this.getTagBuilder(),t=[new $t({tagBuilder:e,serviceName:this.hashtag}),new Bt({tagBuilder:e}),new qt({tagBuilder:e}),new Jt({tagBuilder:e,serviceName:this.mention}),new Ot({tagBuilder:e,stripPrefix:this.stripPrefix,stripTrailingSlash:this.stripTrailingSlash,decodePercentEncoding:this.decodePercentEncoding})];return this.matchers=t},e.prototype.getTagBuilder=function(){var e=this.tagBuilder;return e||(e=this.tagBuilder=new tt({newWindow:this.newWindow,truncate:this.truncate,className:this.className})),e},e.version="3.14.3",e.AnchorTagBuilder=tt,e.HtmlTag=et,e.matcher={Email:Bt,Hashtag:$t,Matcher:dt,Mention:Jt,Phone:qt,Url:Ot},e.match={Email:ot,Hashtag:ut,Match:st,Mention:lt,Phone:ct,Url:ht},e}();function Vt(e,t=e){return{type:"autolink",url:e,text:t}}const Zt=qe(/<!!mention:([^>\s]*?)\|(.*?)>/gm,(([e,t,s])=>function(e,t){return{type:"mention",id:e,text:t}}(decodeURIComponent(t),s))),Kt=qe(/<!!customemoji:(.*?)>/gm,(([e,t])=>function(e){return{type:"customemoji",text:e}}(t))),Xt=qe(/<((?:https?|mailto):.*?)\|(.*?)>/gi,(([e,t,s])=>function(e,t=[]){return{type:"link",url:e,children:t}}(t,[s]))),es=qe(/<actionlink:([^|]+)[|]([^>]*)>/gi,(([e,t,s])=>{const{action:n,params:r}=ss(t);return function(e,t,s=[]){return{type:"actionlink",action:e,params:t,children:s}}(n,r,[s])})),ts=qe(/<actionbutton:([^|]+)[|]([^>]*)>/gi,(([e,t,s])=>{const{action:n,params:r}=ss(t);return function(e,t,s=[]){return{type:"actionbutton",action:e,params:t,children:s}}(n,r,[s])}));function ss(e){const t=e.indexOf("?");return-1===t?{action:e,params:{}}:{action:e.slice(0,t),params:Object.fromEntries(new URLSearchParams(e.slice(t)))}}const ns=qe(/(?:^|\n)(?:\s*[-*+]\s+[^\n]+(?:\n|$))+/g,(([e])=>function(e=[]){return{type:"bulletlist",children:e}}([e.startsWith("\n")?e.slice(1):e]))),rs=qe(/^\s*[-*+]\s+([^\n]+)(?:\n|$)/gm,(([e,t])=>({type:"bulletpoint",children:[t]}))),is=e=>{const t=/(?:^|[^-:/\w])([(+]?[0-9](?:[-_+ ().]?[0-9]){5,11}[0-9])(?:[^-:/\w]|$)/g;let s=0;const n=[];for(const r of re(e,t)){const t=r[0],i=r[1],a=t.startsWith(i)?r.index:r.index+1;a-s>0&&n.push(e.substring(s,a));const o=Vt("tel:"+i.replace(/[^0-9+]/g,""),i);n.push(o),s=a+i.length}return s<e.length&&n.push(e.substring(s)),n},as=e=>Xt(e).flatMap((e=>"string"==typeof e?os(e):["<",...os(e.url),...os("|"+e.children[0]+">")])),os=e=>{const t=Qt.parse(e,{urls:!0,email:!0,phone:!1,hashtag:!1,mention:!1}),s=[];let n=0;for(const r of t){const t=r.getOffset(),i=r.getMatchedText(),a=i.length;let o=i;r instanceof ot?o="mailto:"+r.getEmail():r instanceof ht&&(o=r.getUrl()),t>n&&s.push(e.substring(n,t)),s.push(Vt(o,i)),n=t+a}return n<e.length&&s.push(e.substring(n)),s},us=["Codeblock","Codespan","FormattedLink","Wikitext","Autolink","Actions","Mention","Mention","BulletPoint","CustomEmoji"];const ls=function(){const e=RegExp("[^\n]+\n?|\n","g");return t=>Array.from(t.match(e)||[])}();function cs(e,t={except:[]}){let s=function(e,t){let s=[e];return s=hs(s,t.multilineSteps),s=hs(s,[ls]),s=hs(s,t.singlelineSteps),s=ds(s),s}(e,function(e={except:[]}){var t;const s={multilineSteps:[],singlelineSteps:[]},n=null!=(t=e.except)?t:us.filter((t=>!e.only.includes(t)));return n.includes("BulletPoint")||s.multilineSteps.push(ns,rs),n.includes("Mention")||s.singlelineSteps.push(Zt),n.includes("CustomEmoji")||s.singlelineSteps.push(Kt),n.includes("Codespan")||s.multilineSteps.push(qe(/```([^]+?)```/g,(([e,t])=>({type:"codespan",text:t})))),n.includes("FormattedLink")||s.singlelineSteps.push(Xt),n.includes("Actions")||(s.singlelineSteps.push(es),s.singlelineSteps.push(ts)),n.includes("Wikitext")||s.singlelineSteps.push(Ye),n.includes("Autolink")||s.singlelineSteps.push(as,is),s}(t));return s=ps(s,!1),s}function hs(e,t){return t.reduce(((e,t)=>We(e,t)),e)}function ds(e){const t=[];let s=-1;for(const n of e)"string"==typeof n?"string"==typeof t[s]?t[s]+=n:t[++s]=n:t[++s]="children"in n?l(u({},n),{children:ds(n.children)}):n;return t}function ps(e,t){const s=[];let n=[];for(let r=0;r<e.length;r++){const i=e[r];"string"==typeof i?n.push(i):"children"in i?(n.length>0&&(s.push(n.join("")),n=[]),i.children=ps(i.children,t||"link"===i.type||"actionbutton"===i.type||"actionlink"===i.type),s.push(i)):"autolink"===i.type&&t?n.push(i.text):(n.length>0&&(s.push(n.join("")),n=[]),s.push(i))}return n.length>0&&(s.push(n.join("")),n=[]),s}class fs{constructor(e,t,s){this.id=e,this.conversationId=t,this._realtimeClient=s}get brandedId(){return this.id}get brandedConversationId(){return this.conversationId}get(){return h(this,null,(function*(){const e=yield this._realtimeClient.call("GET",["me","conversations",this.brandedConversationId,"messages",this.brandedId],{});if(!e.ok&&"server"===e.where&&404===e.value.status)return null;if(!e.ok&&"server"===e.where&&403===e.value.status&&"NOT_A_PARTICIPANT"===e.value.errorCode)return null;const t=d("Get message "+this.id,e),s=yield this._realtimeClient.createMessageSnapshot(t,this.brandedConversationId);return Oe("Get message "+this.id,s)}))}edit(e){return h(this,null,(function*(){const t={content:ms(e),custom:"string"==typeof e?void 0:e.custom},s=yield this._realtimeClient.call("PATCH",["conversations",this.brandedConversationId,"messages",this.brandedId],t);d(`Edit message ${this.id} in conversation ${this.conversationId}`,s)}))}delete(){return h(this,null,(function*(){const e=yield this._realtimeClient.call("DELETE",["conversations",this.brandedConversationId,"messages",this.brandedId],{});(e.ok||"server"!==e.where||404!==e.value.status)&&d(`Delete message ${this.id} in conversation ${this.conversationId}`,e)}))}}function ms(e){return"string"==typeof e?[{type:"text",children:cs(e)}]:"text"in e&&e.text?[{type:"text",children:cs(e.text)}]:"content"in e&&e.content?e.content:void 0}class gs{constructor(e,t){this.id=e,this._realtimeClient=t,this.uselessObjForTypeCheck={subject:null,photoUrl:null,welcomeMessages:null,custom:null,access:null,notify:null}}get brandedId(){return this.id}get brandedUserId(){return this._realtimeClient.userId}participant(e){return new je("string"==typeof e?e:e.id,this.id,this._realtimeClient)}message(e){return new fs(e,this.brandedId,this._realtimeClient)}get(){return h(this,null,(function*(){const e=this._realtimeClient.listMessages(this.brandedId,{limit:1}),t=yield this._realtimeClient.call("GET",["me","conversations",this.brandedId],{});if(!t.ok&&"server"===t.where&&404===t.value.status)return null;const s=d("Get conversation "+this.id,t),n=Oe("Get last message in conversation "+this.id,yield e),r=0===n.length?null:n[0];return this._realtimeClient.createConversationSnapshotPreloaded(s,r)}))}set(e){return h(this,null,(function*(){const t=this._realtimeClient.call("PUT",["conversations",this.brandedId],e),s=this._realtimeClient.call("PUT",["conversations",this.brandedId,"participants",this.brandedUserId],e),n=yield t;!n.ok&&"server"===n.where&&403===n.value.status&&"UNAUTHORIZED_TO_EDIT"===n.value.errorCode&&function(e){return void 0===e.subject&&(void 0===e.photoUrl&&(void 0===e.welcomeMessages&&(null!==e.custom&&(void 0===e.custom||!Object.values(e.custom).some((e=>void 0!==e))))))}(e)||d("Set conversation "+this.id,n);const r=yield s;!r.ok&&"server"===r.where&&403===r.value.status&&"UNAUTHORIZED_TO_EDIT_PARTICIPANT"===r.value.errorCode&&function(e){return void 0===e.access&&void 0===e.notify}(e)||d("Set your participation in conversation "+this.id,r)}))}createIfNotExists(){return h(this,arguments,(function*(e={}){const t=this._realtimeClient.call("POST",["conversations",this.brandedId],e),s=this._realtimeClient.call("POST",["conversations",this.brandedId,"participants",this.brandedUserId],e),n=yield t;(n.ok||"server"!==n.where||409!==n.value.status)&&d("Create conversation "+this.id,yield t);const r=yield s;(r.ok||"server"!==r.where||409!==r.value.status)&&d("Join conversation "+this.id,yield s)}))}markAsRead(){return h(this,null,(function*(){const e=yield this._realtimeClient.call("POST",["me","conversations",this.brandedId,"read"],{});d(`Mark ${this.id} as read`,e)}))}markAsUnread(){return h(this,null,(function*(){const e=yield this._realtimeClient.call("POST",["me","conversations",this.brandedId,"unread"],{});d(`Mark ${this.id} as unread`,e)}))}send(e){return h(this,null,(function*(){const t={content:vs(e),referencedMessageId:bs(e),custom:"string"==typeof e?void 0:e.custom,idempotencyKey:$e((new Date).getTime())},s=yield this._realtimeClient.call("POST",["conversations",this.brandedId,"messages"],t),n=d("Send message to conversation "+this.id,s);return new fs(n.id,this.brandedId,this._realtimeClient)}))}subscribeMessages(e){return this._realtimeClient.subscribe(["me","conversations",this.brandedId,"messages"],e)}subscribeParticipants(e){return this._realtimeClient.subscribe(["me","conversations",this.brandedId,"participants"],e)}subscribe(e){return this._realtimeClient.subscribe(["me","conversations",this.brandedId],e)}subscribeTyping(e){return this._realtimeClient.subscribe(["me","conversations",this.brandedId,"typing"],e)}markAsTyping(){return h(this,null,(function*(){const e=yield this._realtimeClient.call("POST",["me","conversations",this.brandedId,"typing"],{});d(`Set user as typing in ${this.id}`,e)}))}}function vs(e){return"string"==typeof e?[{type:"text",children:cs(e)}]:"text"in e?[{type:"text",children:cs(e.text)}]:e.content}function bs(e){if("string"==typeof e)return;const t=e.referencedMessage;return void 0!==t?"string"==typeof t?t:t.id:void 0}class ys{constructor(e,t,s){this.realtimeWsApiUrl=e,this.internalHttpApiUrl=t,this.restApiHttpUrl=s}getBokensUrl(e,t,s){return this.internalHttpApiUrl+`/${e}/bokens/${encodeURIComponent(t)}?signature=${encodeURIComponent(null!=s?s:"")}`}getRealtimeWsUrl(e,t,s,n,r){const i=encodeURIComponent(t);return this.realtimeWsApiUrl+`/${e}/realtime/${i}?talkjs-client-build=${null!=r?r:"standalone"}&talkjs-core=${s}&talkjs-client-id=${n}`}static fromHost(e){const t=new ys("wss://realtime.talkjs.com/v1","https://app.talkjs.com/api/v0","https://api.talkjs.com/v1");if(!e)return t;if(e.endsWith("talkjs.com")){const s=e.match(/\w+-(\w+)\.talkjs\.com/);if(s){const e=s[1];return new ys(`wss://realtime-${e}.talkjs.com/v1`,`https://app-${e}.talkjs.com/api/v0`,`https://api-${e}.talkjs.com/v1`)}return t}return e.includes("localhost")||e.includes("localtest.me")||/^\d+\.\d+\.\d+\.\d+(:\d+)?$/.test(e)?new ys(`ws://${e}/public_api/v1`,`http://${e}/api/v0`,`http://${e}/public_api/v1`):new ys(`wss://${e}/public_api/v1`,`https://${e}/api/v0`,`https://${e}/public_api/v1`)}}function ws({method:e,url:t,data:s,options:n,attempts:r,shouldRetry:i,authProvider:a}){var o;(!r||r<=0)&&(r=1);const u={"x-talkjs-client-build":"jssdk-dev","x-talkjs-client-date":"2025-07-28T10:49:18.625Z"};return s instanceof FormData||(u["Content-Type"]=null!=(o=null==n?void 0:n.contentType)?o:"application/json"),b(r,(()=>h(this,null,(function*(){if(a){const e=yield a.getToken();u.Authorization=`Bearer ${e}`}return fetch(t,{method:e,headers:u,body:s}).then((e=>{if(e.ok)return e;throw e}))}))),{initialDelay:.2,log:void 0,shouldRetry:s=>h(this,null,(function*(){return a&&401===s.status?(Is.log(`401 error from ${e} ${t}, ${yield a.getToken()}`),a.refreshToken(),!0):i?i(s):!("status"in s&&s.status>=400&&s.status<500)}))}).catch((s=>{if(Math.random()<.1&&!t.toString().startsWith("https://capture.trackjs.com")){const n=`Network Error for ${e} ${t}`;"undefined"!=typeof window&&(s instanceof Response?s.clone().text().then((e=>Is.log(`${n} ${s.status} ${e} (10% logged)`))):Is.log(`${n} ${s} (10% logged)`)),console.error("[TalkJS]",n)}throw s}))}const{cdnHost:Cs,appHost:As,restHost:Es,realtimeHost:ks,appProtocol:xs,appWsProtocol:Ss}=function(){if("undefined"==typeof window)return{cdnHost:"test-hostname",appHost:"test-hostname",appProtocol:"http:",appWsProtocol:"ws:"};const e=function(){if(document.currentScript)return document.currentScript.src;try{throw new Error}catch(o){const t=o.stack.match(/https?:\/\/.*\.(js|jsx|ts|tsx)/);return t?t[0]:""}}(),t=document.createElement("a");t.href=e;const s=t.host,n=(o=s).match(/^cdn[.-]/)?o.replace(/^cdn/,"app"):"talkjs.com"===o?"app.talkjs.com":o,r=function(e){return e.match(/^app[.-]/)?e.replace(/^app/,"api"):e+"/public_api"}(n),i=function(e){return e.match(/^app[.-]/)?e.replace(/^app/,"realtime"):e+"/public_api"}(n),a=t.protocol;var o;return{cdnHost:s,appHost:n,restHost:r,realtimeHost:i,appProtocol:a,appWsProtocol:"https:"===a?"wss:":"ws:"}}(),Ts=As.startsWith("app.talkjs.com"),Is="undefined"==typeof window?{log:e=>Promise.resolve(),setData:e=>{}}:new class{constructor(e){this._timeCreated=Date.now(),this._enabled=Ts,this._trackJSData={customer:{application:"",correlationId:"",sessionId:"",token:"",userId:"",version:"dev-2025-07-28T10:49:18.625Z"},entry:"direct",environment:{age:Date.now()-this._timeCreated,dependencies:{},originalUrl:window.location.href,referrer:document.referrer,userAgent:window.navigator.userAgent},metadata:[],nav:[],network:[],url:window.location.href,stack:"",timestamp:(new Date).toISOString(),version:"dev-2025-07-28T10:49:18.625Z",throttled:0},this._url=`https://capture.trackjs.com/capture?token=${e}`,this._trackJSData.customer.token=e}setData({appId:e,meId:t,sessionId:s}){this._trackJSData.customer.userId=e,this._trackJSData.customer.sessionId=`${e}/${t}`,this._trackJSData.customer.correlationId=s}log(e){return h(this,null,(function*(){try{if(!this._enabled)return Promise.resolve();const t=l(u({},this._trackJSData),{message:e});yield ws({method:"POST",url:this._url,data:JSON.stringify(t),options:{contentType:"text/plain"}})}catch(t){console.error("[TalkJS] Failed when sending an error report. Error: ",t)}}))}}("970cd0be0fb74630b75c8451051299dc");class Ds{constructor(e,t={}){this._onSubscription=t,this._handlers={};for(const s in e)Object.hasOwnProperty.call(e,s)&&(this._handlers[s]=[])}emit(e,t){for(const n of this._handlers[e])try{n(t)}catch(s){console.error(`[TalkJS] '${String(e)}' handler threw an error:`,s)}}emitAsync(e,t){return h(this,null,(function*(){try{const s=this._handlers[e].map((e=>e(t)));yield Promise.all(s)}catch(s){console.error(`[TalkJS] '${String(e)}' handler threw an error:`,s)}}))}supports(e){return e in this._handlers}on(e,t){var s,n;if(!this.supports(e))throw new Error(`Unknown event type '${String(e)}'`);null==(n=(s=this._onSubscription)[e])||n.call(s),this._handlers[e].push(t)}off(e,t){if(!Object.hasOwnProperty.call(this._handlers,e))throw new Error(`Unknown event type '${String(e)}'`);const s=this._handlers[e].indexOf(t);-1!==s&&this._handlers[e].splice(s,1)}removeAllListeners(){for(const e in this._handlers)this._handlers[e]=[]}handles(e){return this._handlers[e].length>0}subscribe(e,t){return this.on(e,t),{unsubscribe:()=>this.off(e,t)}}}class Ms{constructor(e,t,s,n,r,i){if(this.appId=t,this.userId=s,this.tokenFetcher=r,this.usingBokens=!1,this.requestInProgress=!1,this.eventEmitter=new Ds({tokenChanged(e){},tokenRefreshFailed(e){},tokenAccepted(e){}}),this.sessionExpiryWarningTimeoutId=void 0,i&&(n||r))throw new Error("[TalkJS] If providing a signature for authentication, you must not provide a token or tokenFetcher.");n?this.fetchToken((()=>n)):(r||(this.usingBokens=!0,this.tokenFetcher=()=>this.sendBokenRequest(e,i)),this.refreshToken())}get canRefreshToken(){return this.usingBokens||!!this.tokenFetcher}getToken(){return this.token}refreshToken(){if(!this.requestInProgress){if(!this.tokenFetcher)throw this.emitTokenRefreshFailed("no `tokenFetcher` provided"),new Error("[TalkJS] Cannot refresh token, no `tokenFetcher` provided.");this.fetchToken(this.tokenFetcher)}}onTokenChanged(e){return this.eventEmitter.on("tokenChanged",e),()=>{this.eventEmitter.off("tokenChanged",e)}}emitTokenChanged(e){this.eventEmitter.emit("tokenChanged",e)}onTokenRefreshFailed(e){return this.eventEmitter.on("tokenRefreshFailed",e),()=>{this.eventEmitter.off("tokenRefreshFailed",e)}}emitTokenRefreshFailed(e){this.eventEmitter.emit("tokenRefreshFailed",e),console.error(`[TalkJS] Could not authenticate, cannot recover automatically: ${e}`)}onTokenAccepted(e){return this.eventEmitter.on("tokenAccepted",e),()=>{this.eventEmitter.off("tokenAccepted",e)}}emitTokenAccepted(e){this.eventEmitter.emit("tokenAccepted",e)}clearScheduledRefresh(){this.sessionExpiryWarningTimeoutId&&clearTimeout(this.sessionExpiryWarningTimeoutId)}scheduleRefresh(e){if(this.clearScheduledRefresh(),null===e)return;const t=void 0!==this.tokenFetcher;if(e<120&&!t?console.warn(`[TalkJS] TalkJS will stop working in ${e} seconds due to auth token expiry. Token expires in ${e} seconds, and cannot be refreshed because no \`tokenFetcher\` was provided when creating the session. Non-refreshable tokens are recommended to expire at least 24 hours in the future.`):e<120&&t?console.warn(`[TalkJS] TalkJS auth token will expire and need to be refreshed in ${e} seconds. Refreshable JWTs are recommended to expire at least 30 minutes in the future, to improve performance and reduce unnecessary refreshes.`):e<3300&&!t&&console.warn(`[TalkJS debug] TalkJS will stop working in ${Math.round(e/60)} minutes due to auth token expiry. Non-refreshable tokens are recommended to expire at least 24 hours in the future. Alternatively, provide a \`tokenFetcher\` when creating the session, so that tokens can be refreshed when they expire.`),void 0!==this.tokenFetcher){const t=e>600?e-300:e/2,s=Math.min(1728e6,1e3*t);this.sessionExpiryWarningTimeoutId=setTimeout((()=>{this.refreshToken()}),s)}else e<2e6&&(this.sessionExpiryWarningTimeoutId=setTimeout((()=>{this.emitTokenRefreshFailed("Token has expired and no `tokenFetcher` was provided when creating the session, so it cannot be refreshed.")}),1e3*e))}fetchToken(e){return h(this,null,(function*(){if(this.requestInProgress)return;this.requestInProgress=!0;const t=()=>h(this,null,(function*(){const t=yield e();return this.checkJwt(t),t}));try{const e=void 0!==this.token;this.token=t(),yield this.token.then((t=>{e&&this.emitTokenChanged(t)})).catch((e=>{this.emitTokenRefreshFailed(e)}))}catch(s){this.emitTokenRefreshFailed(s)}finally{this.requestInProgress=!1}}))}checkJwt(e){!function(e){if(!("string"==typeof e||e instanceof String)){if(void 0===e)throw"Token was undefined";throw"Token must be a string, got: "+e}}(e);const t=[];let s,n,r;if("string"==typeof e?s=e:t.push(`Token type is ${typeof e} instead of a string.`),s)try{const e=function(e){const t=e.split(".");if(3!==t.length)throw"Token does not contain exactly two `.`. Check that you generated your JWT correctly. It should be `<header>.<payload>.<signature>`.";return{header:Fs(t[0]),payload:Fs(t[1])}}(s);n=e.header,r=e.payload}catch(i){t.push(i)}if(n){const e=this.checkJwtHeader(n);t.push(...e)}if(r){const e=this.checkJwtPayload(r);t.push(...e)}if(t.length)if(this.usingBokens)Is.log(`JWT Errors detected by AuthProvider when using bokens: ${t.join("\n")}`);else{console.warn("[TalkJS] Authentication token appears to be generated incorrectly. Will still attempt to authenticate, but TalkJS may not work as expected. See below for a description of any problems and how to fix them.");const s=t.length>1;t.forEach(((e,t)=>{const n=s?`Reason ${t+1}:`:"Reason:";console.warn(`[TalkJS] ${n} ${e}`)})),console.warn(`[TalkJS]: Authentication token: "${e}"`)}}checkJwtHeader(e){const t=[],s=e.alg;return void 0===s?t.push('Token header must contain `"alg": "HS256"`, but no `alg` was specified.'):"string"!=typeof s?t.push(`Token header must contain \`"alg": "HS256"\`, but \`alg\` was ${typeof s} instead of a string. Make sure you wrap the value in "".`):"HS256"!==s&&t.push(`Token header must contain \`"alg": "HS256"\`, but \`alg\` was set to "${s}" instead. HS256 is the only supported algorithm.`),t}checkJwtPayload(e){const t=[],s=e.iss;void 0===s?t.push(`Token payload must contain an \`iss\` claim set to your app ID (${this.appId}), but \`iss\` was missing.`):"string"!=typeof s?t.push(`Token payload must contain an \`iss\` claim set to your app ID (${this.appId}), but \`iss\` was ${typeof s} instead of a string. Make sure you wrap the value in "".`):s!==this.appId&&t.push(`Token payload must contain an \`iss\` claim set to your app ID (${this.appId}), but \`iss\` was set to "${s}" instead.`);const n=e.sub;void 0===n?t.push(`Token payload must contain a \`sub\` claim set to your user ID (${this.userId}), but \`sub\` was missing.`):"string"!=typeof n?t.push(`Token payload must contain a \`sub\` claim set to your user ID (${this.userId}), but \`sub\` was ${typeof n} instead of a string. Make sure you wrap the value in "".`):n!==this.userId&&t.push(`Token payload must contain a \`sub\` claim set to your userId ID (${this.userId}), but \`sub\` was set to "${n}" instead.`);const r=e.tokenType;void 0===r?t.push('Token payload must contain a `"tokenType": "user"` claim, but no `tokenType` was specified.'):"string"!=typeof r?t.push(`Token payload must contain a \`"tokenType": "user"\` claim, but \`tokenType\` was ${typeof r} instead of a string. Make sure you wrap the value in "".`):"user"!==r&&t.push(`Token payload must contain a \`"tokenType": "user"\` claim, but \`tokenType\` was set to "${r}" instead.`);const i=e.exp;void 0===i||("number"!=typeof i?t.push(`Token payload contains an \`exp\` claim, but \`exp\` was ${typeof r} instead of a number. If set, \`exp\` should be the expiry date as a number of seconds since 1970-01-01. Don't wrap the value in "".`):i<1e9?t.push(`Token payload contains an \`exp\` claim, but \`exp\` is very small (${i}, representing ${new Date(1e3*i).toLocaleDateString()}). If set, \`exp\` should be the expiry date as a number of seconds since 1970-01-01.`):i>1e11?t.push(`Token payload contains an \`exp\` claim, but \`exp\` is very small (${i}, representing ${new Date(1e3*i).toLocaleDateString()}). If set, \`exp\` should be the expiry date as a number of seconds since 1970-01-01. Double-check that you are using seconds and not milliseconds or nanoseconds.`):i<(new Date).getTime()/1e3&&t.push(`Token payload contains an \`exp\` claim, but \`exp\` (${i}, representing ${new Date(1e3*i).toLocaleDateString()}) appears to be in the past, meaning the token will be rejected. This error can also happen if your device's clock is set incorrectly, in which case the token will still work.`));const a=e.nbf;return void 0===a||("number"!=typeof a?t.push(`Token payload contains a \`nbf\` (not-before) claim, but \`nbf\` was ${typeof r} instead of a number. If set, \`nbf\` should be the date when the JWT becomes valid, as a number of seconds since 1970-01-01.`):a>1e11&&t.push(`Token payload contains a \`nbf\` (not-before) claim, but \`nbf\` is very large (${a}, representing ${new Date(1e3*a).toLocaleDateString()}). If set, \`nbf\` should be the date when the JWT becomes valid, as a number of seconds since 1970-01-01. Double-check that you are using seconds and not milliseconds or nanoseconds.`)),t}sendBokenRequest(e,t){return h(this,null,(function*(){let s=0;const n=e.getBokensUrl(this.appId,this.userId,t),r=yield ws({method:"GET",url:n,attempts:1e4,shouldRetry:e=>{if(e instanceof Error)return!0;if(401===e.status)throw"Check that you provided a valid signature.";if(404===e.status)throw"Check that you specified the correct App ID.";if(429===e.status||502===e.status)return!0;if(e.status>=400&&e.status<500)throw`Unexpected HTTP ${e.status} response when fetching auth token. Check that you configured the session correctly.`;if(s++,s>=5)throw`Unexpected HTTP ${e.status} response when fetching auth token, retrying did not help.`;return!0}});return(yield r.json()).boken}))}}function Fs(e){try{const t=e.replace(/-/g,"+").replace(/_/g,"/"),s=decodeURIComponent(atob(t).split("").map((e=>"%"+("00"+e.charCodeAt(0).toString(16)).slice(-2))).join(""));return JSON.parse(s)}catch(t){throw`Could not base64-decode and JSON-parse token section: ${e}. Check that you base-64 encoded the section correctly.`}}class Bs{constructor(e){this.target=e}deref(){return this.target}}const Ns=new class{constructor(){this.registry={}}getOrCreate(e){var t;const s=this.key(e),n=null==(t=this.registry[s])?void 0:t.deref();if(n)return n;const r=new Rs(e),i=globalThis.WeakRef?new WeakRef(r):new Bs(r);return this.registry[s]=i,r}deregister(e,t){const s=this.key({appId:e,userId:t});delete this.registry[s]}key({appId:e,userId:t}){return`${e}:${t}`}};class Rs{constructor(e){!function(e){function t(e,t){if(!e)throw new Error("[TalkJS] TalkSession: "+t)}t(e&&"object"==typeof e,"Expected an object argument in TalkSession#constructor."),t(e.appId&&"string"==typeof e.appId,"The `appId` property of TalkSession#constructor is required and it must be a non-empty string."),t("string"==typeof e.userId,"The `userId` property of TalkSession#constructor is required and it must be a string."),void 0!==e.token&&t(e.token&&"string"==typeof e.token,"The `token` property of TalkSession#constructor must be a non-empty string."),void 0!==e.tokenFetcher&&t("function"==typeof e.tokenFetcher,"The `tokenFetcher` property of TalkSession#constructor must be a function.")}(e);const{appId:t,userId:s,token:n,tokenFetcher:r,signature:i}=e;this._appId=t,this._apiUrls=e.apiUrls?new ys(e.apiUrls.realtimeWsApiUrl,e.apiUrls.internalHttpApiUrl,e.apiUrls.restApiHttpUrl):ys.fromHost(e.host),this._authProvider=new Ms(this._apiUrls,t,s,n,r,i);const a=Math.random().toString().split(".")[1];this._realtimeClient=new _e(this._apiUrls.getRealtimeWsUrl(t,s,"1.4.1",a,e.clientBuild),s,this._authProvider),this.currentUser=new Ue(this._realtimeClient.userId,this._realtimeClient),this._terminationReason=y(),this._terminationReason.promise.then((e=>{console.error(`[TalkSession] ${e}`)})),function(e,t,s){return h(this,null,(function*(){return ws({method:"GET",url:`${t}/${e}/app`,authProvider:s}).then((e=>200===e.status||404!==e.status&&(console.warn(`[TalkJS] Received unexpected ${e.status} status code when validating app ID. Assuming that the app ID is valid.`),!0))).catch((e=>{if("string"!=typeof e&&"status"in e){const t=e;return 200===t.status||404!==t.status&&(console.warn(`[TalkJS] Received unexpected ${t.status} status code when validating app ID. Assuming that the app ID is valid.`),!0)}return console.warn("[TalkJS] Encountered network issues when validating app ID. Assuming that the app ID is valid."),!0}))}))}(this._appId,this._apiUrls.internalHttpApiUrl,this._authProvider).then((e=>{e||this.terminate(new Error(`The app ID ${this._appId} does not exist. Make sure you are using the correct app ID as found on the TalkJS dashboard. App IDs are case-sensitive.`))})),this._authProvider.onTokenRefreshFailed((e=>{this.terminate(new Error(`Could not authenticate, cannot recover automatically: ${e}`))}))}onError(e){const t=y();return Promise.race([t.promise,this._terminationReason.promise]).then((t=>{"UNSUBSCRIBED"!==t&&e(t)})),{unsubscribe:()=>t.resolve("UNSUBSCRIBED")}}user(e){return new Ue(e,this._realtimeClient)}conversation(e){return new gs(e,this._realtimeClient)}subscribeConversations(e){return this._realtimeClient.subscribe(["me","conversations"],e)}terminate(e){Ns.deregister(this._appId,this.currentUser.id),this._terminationReason.resolve(e),this._realtimeClient.destroy()}_isConnected(){return this._realtimeClient.isConnected()}uploadFile(e,t){return _s(`${this._apiUrls.restApiHttpUrl}/${this._appId}/files`,this._authProvider,e,t)}uploadImage(e,t){return _s(`${this._apiUrls.restApiHttpUrl}/${this._appId}/files`,this._authProvider,e,u({subtype:"image"},t))}uploadVideo(e,t){return _s(`${this._apiUrls.restApiHttpUrl}/${this._appId}/files`,this._authProvider,e,u({subtype:"video"},t))}uploadAudio(e,t){return _s(`${this._apiUrls.restApiHttpUrl}/${this._appId}/files`,this._authProvider,e,u({subtype:"audio"},t))}uploadVoice(e,t){return _s(`${this._apiUrls.restApiHttpUrl}/${this._appId}/files`,this._authProvider,e,u({subtype:"voice"},t))}}function _s(e,t,s,n){return h(this,arguments,(function*(e,t,s,{subtype:n,filename:r,width:i,height:a,duration:o}){const u=new FormData;return u.set("file",s,r),void 0!==n&&u.set("subtype",n),void 0!==i&&u.set("width",i.toString()),void 0!==a&&u.set("height",a.toString()),void 0!==o&&u.set("duration",o.toString()),ws({method:"POST",url:e,data:u,authProvider:t}).then((e=>e.json())).then((e=>e.attachmentToken)).catch((e=>h(this,null,(function*(){if(e instanceof Response){const t=yield e.json(),s=`Unexpected response when uploading file, status code ${e.status} ${t.errorCode}, ${t.reasons}`;throw new Error(s)}throw e}))))}))}exports.getTalkSession=function(e){return e.forceCreateNew?new Rs(e):Ns.getOrCreate(e)},exports.registerPolyfills=function({WebSocket:e}){x=e};
2
2
  //# sourceMappingURL=talkSession.cjs.map