@talkjs/core 1.5.3 → 1.5.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -0
- package/dist/talkSession.cjs +1 -1
- package/dist/talkSession.d.ts +25 -1
- package/dist/talkSession.js +9 -6
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -69,6 +69,10 @@ If you encounter any problems with `@talkjs/core`, please open a [chat with supp
|
|
|
69
69
|
|
|
70
70
|
## Changelog
|
|
71
71
|
|
|
72
|
+
### 1.5.4
|
|
73
|
+
|
|
74
|
+
- Fixed a bug that prevented the websocket from disconnecting when idle after unsubscribing.
|
|
75
|
+
|
|
72
76
|
### 1.5.3
|
|
73
77
|
|
|
74
78
|
- Fixed a bug where subscribing to a conversation's messages after previously subscribing to that conversation, could cause an error related to sequence numbers being out-of-order.
|
package/dist/talkSession.cjs
CHANGED
|
@@ -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(ze){r(ze)}},a=e=>{try{o(s.throw(e))}catch(ze){r(ze)}},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 I{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 S{constructor(e,t){this.handlers=t,this.socket=new I(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 T{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 S(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 T(25e3),this.serverInactivityTimer=new T(1e4),this.serverTimeoutTimer=new T(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 R{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 T(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 N{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 R(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 _{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 O extends _{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 j extends _{constructor(e,t,s){super(s,(()=>this.sendMutate())),this.conversationId=e,this.connection=t,this.calls=[]}canPush(e,t){return!!j.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 U{constructor(e,t,s){this.pendingBatch=null,this.connection=new N(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(j.isCorrectBatchTypeFor(e,t)){const e=t[1];return new j(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 U(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.onTeardown),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)}emit(e){return h(this,null,(function*(){var t;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,reactions:ge(t.reactions)}})}))}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,reactions:t.data.reactions}})}))}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),reactions:me(s.value.data.reactions,t.diff.reactions)}})))}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,reactions:s.value.data.reactions}}):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"]),i={};return r.data.reactions.forEach((e=>{i[e.emoji]={count:e.count,currentUserReacted:e.currentUserReacted}})),C({status:200,data:l(u({},r.data),{senderId:null!=(e=null==n?void 0:n.store.userId)?e:null,reactions:i})})}))}}function me(e,t){if(void 0===t)return e;const s=e.map((e=>{const s=t[e.emoji];return void 0===s?e:null===s?l(u({},e),{count:0}):{emoji:e.emoji,count:z(e.count,s.count),currentUserReacted:z(e.currentUserReacted,s.currentUserReacted)}})).filter((e=>e.count>0)),n=new Set(s.map((e=>e.emoji)));for(const r in t){const e=t[r];e&&!n.has(r)&&s.push({emoji:r,count:e.count,currentUserReacted:e.currentUserReacted})}return s.sort(((e,t)=>e.emoji.localeCompare(t.emoji))),s}function ge(e){const t=Object.entries(e).map((([e,t])=>({emoji:e,count:t.count,currentUserReacted:t.currentUserReacted})));return t.sort(((e,t)=>e.emoji.localeCompare(t.emoji))),t}class ve 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,reactions:a.snapshot.reactions}})}))}}class be extends X{constructor(e,t,s,n,r){super(e,n,r),this.conversationId=t,this.realtimeClient=s,this.handlers=r,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 ye({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}):we({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 ye({count:e,cursor:s,conversationId:this.conversationId,realtimeClient:this.realtimeClient});yield this.handlers.onLoadedMore({type:"virtual.messages.loadedmore",conversationId:this.conversationId,data:n})}))}loadedMore(e,t){this.mutate(e,(s=>null===s.value.windowEnd?s:t.data.ok?null===t.data.value.messages?(console.warn("[TalkJS] When loading more messages, the conversation no longer existed. We should have been told about this."),s):we({seq:e,prevState:s.value,messages:t.data.value.messages,cursor:t.data.value.nextCursor,conversationId:this.conversationId,realtimeClient:this.realtimeClient}):t.data))}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 ve(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 ve(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 ye(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 we({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 ve(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 Ce 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 Ae(e,t){for(let s in e)Object.prototype.hasOwnProperty.call(e,s)&&t(e[s],s)}function Ee(e,t){return function(e){let s={};return Ae(e,((e,n)=>{const[r,i]=(([e,s])=>[e,t(s,e)])([n,e],0);s[r]=i})),s}(e)}class ke 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:Ee(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?{}:Ee(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 Ae(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=Ee(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&&Ae(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 xe 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 Ie extends X{constructor(e,t,s,n,r){super(e,n,r),this.conversationId=t,this.realtimeClient=s,this.handlers=r,this.unsubscribeDebounceMs=1e3,this.pendingLoadMore=void 0}fetchInitial(e){return h(this,null,(function*(){const t=yield Se({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 Se({count:e,cursor:s,conversationId:this.conversationId,realtimeClient:this.realtimeClient});yield this.handlers.onLoadedMore({type:"virtual.participants.loadedmore",conversationId:this.conversationId,data:n})}))}loadedMore(e,t){this.mutate(e,(s=>null===s.value.windowEnd?s:t.data.ok?null===t.data.value.participants?(console.warn("[TalkJS] When loading more participants, the conversation no longer existed. We should have been told about this."),s):Te({seq:e,prevStores:s.value.stores,participants:t.data.value.participants,cursor:t.data.value.nextCursor,conversationId:this.conversationId,realtimeClient:this.realtimeClient}):t.data))}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 xe(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 Se(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 t=new xe(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 De extends X{constructor(e,t,s,n,r){super(e,n,r),this.getConvDataStore=t,this.realtimeClient=s,this.handlers=r,this.unsubscribeDebounceMs=1e3,this.pendingLoadMore=void 0}fetchInitial(e){return h(this,null,(function*(){const t=yield Me({realtimeClient:this.realtimeClient,count:20});return t.ok?null===t.value.conversations?C({lastChanged:e,stores:null,windowEnd:null}):Fe({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 Me({count:e,cursor:s,realtimeClient:this.realtimeClient});yield this.handlers.onLoadedMore({type:"virtual.conversations.loadedmore",data:n})}))}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()}))}loadedMore(e,t){this.mutate(e,(s=>null===s.value.windowEnd?s:t.data.ok?null===t.data.value.conversations?(console.warn("[TalkJS] When loading more conversations, the user stopped existing, which should be impossible."),s):Fe({seq:e,prevStores:s.value.stores,conversations:t.data.value.conversations,cursor:t.data.value.nextCursor,getConvDataStore:this.getConvDataStore}):t.data))}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 Me(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 Fe({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 Be 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:Re(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:Re(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:Re(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 Re(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 Ne 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 Pe{constructor(e,t,s){this.realtimeClient=s,this.convDataStores={},this.storeMap={},this.emitMutex=new Q,this.virtualSeqOffset=0,this.realPublishSeq=0,this.refetchOnNextNetworkLoss=!0,this.connection=new L(e,t,{onUpstreamRestarting:()=>{this.refetchOnNextNetworkLoss=!1},onReady:()=>{this.refetchOnNextNetworkLoss=!0},onResubscribeSent:()=>{if(this.virtualSeqOffset+=this.realPublishSeq,this.realPublishSeq=0,this.refetchOnNextNetworkLoss){this.virtualSeqOffset++;const e=this.virtualSeq;this.refetchAll(e),this.emitAll(e)}},onResubscribeError:(e,t)=>{var s;null==(s=this.storeMap[_e(e)])||s.setError(t)},onPublish:(e,t)=>{this.realPublishSeq=e;const s=this.virtualSeq;for(const n of t)this.handlePublish(s,n);this.emitAll(s)}})}get virtualSeq(){return this.realPublishSeq+this.virtualSeqOffset}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,I,S,T,D,M,F;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==(I=this.storeMap[`/me/conversations/${t.conversationId}/participants`])||I.participantCreated(e,t));case"participant.deleted":return void(null==(S=this.storeMap[`/me/conversations/${t.conversationId}/participants`])||S.participantDeleted(e,t));case"user.online.changed":return void(null==(T=this.storeMap[`/users/${t.userId}/online`])||T.userOnlineChanged(e,t));case"virtual.conversations.loadedmore":return void(null==(D=this.storeMap["/me/conversations"])||D.loadedMore(e,t));case"virtual.messages.loadedmore":return void(null==(M=this.storeMap[`/me/conversations/${t.conversationId}/messages`])||M.loadedMore(e,t));case"virtual.participants.loadedmore":return void(null==(F=this.storeMap[`/me/conversations/${t.conversationId}/participants`])||F.loadedMore(e,t))}}call(e,t,s,n){return h(this,null,(function*(){if(!n.bypassCache&&"GET"===e){const e=_e(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}onVirtualPublish(e){return h(this,null,(function*(){this.virtualSeqOffset++;const t=this.virtualSeq;this.handlePublish(t,e),yield this.emitAll(t)}))}getOrCreateStore(e){const t=_e(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.virtualSeq,e[1],this.realtimeClient,this.emitMutex,{onTeardown:t});if(f(e,["me","conversations","*"]))return new Ce(this.virtualSeq,this.subscribeConvData(e[2]),this.realtimeClient,this.emitMutex,{onTeardown:t});if(f(e,["me","conversations","*","messages"]))return new be(this.virtualSeq,e[2],this.realtimeClient,this.emitMutex,{onTeardown:t,onLoadedMore:e=>this.onVirtualPublish(e)});if(f(e,["me","conversations","*","participants"]))return new Ie(this.virtualSeq,e[2],this.realtimeClient,this.emitMutex,{onTeardown:t,onLoadedMore:e=>this.onVirtualPublish(e)});if(f(e,["me","conversations","*","typing"]))return new ke(this.virtualSeq,e[2],this.realtimeClient,this.emitMutex,{onTeardown:t});if(f(e,["me","conversations"]))return new De(this.virtualSeq,(e=>this.subscribeConvData(e)),this.realtimeClient,this.emitMutex,{onTeardown:t,onLoadedMore:e=>this.onVirtualPublish(e)});if(f(e,["users","*","online"]))return new Ne(this.virtualSeq,e[1],this.realtimeClient,this.emitMutex,{onTeardown: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 Be(this.virtualSeq,e,this.realtimeClient,this.emitMutex,{onTeardown:()=>{delete this.convDataStores[t]}});return this.convDataStores[t]=s,{store:s,unsubscribe:s.registerInternalSubscription()}}}function _e(e){return`/${e.join("/")}`}class Oe{constructor(e,t,s){this.userId=t,this.alive=!0,this.connection=new Pe(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 je(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 je(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)):je(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,reactions:ge(e.reactions),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,reactions:ge(e.reactions),plaintext:de(e.content,{})}}}function je(e,t){return"server"===e.where?E(l(u({},e.value),{operation:t})):e}function Ue(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 $e{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 Ue("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 We{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 qe(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 He=(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:He(e.children,t,e.type)}];case"link":return[{type:e.type,url:e.url,children:He(e.children,t,e.type)}];case"actionlink":case"actionLink":case"actionbutton":case"actionButton":return[{type:e.type,action:e.action,params:e.params,children:He(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 Ge(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 Le="’'()[]{}<>:,‒–—―…!.«»-‐?‘’“”;/⁄␠·&@*\\•^¤¢$€£¥₩₪†‡°¡¿¬#№%‰‱¶′§~¨_|¦⁂☞∴‽※".replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&");var ze,Je=((ze=Je||{})[ze.italic=1]="italic",ze[ze.strikethrough=2]="strikethrough",ze[ze.bold=4]="bold",ze);const Ye=[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")})),Qe={_:1,"*":4,"~":2};function Ve(e){return Ze(e,0)}function Ze(e,t=0){const s=Ye[t],n=s?function(e){const t=Ge(Ke.getOrCompute(e,(()=>new RegExp(`(?:^|[\\s${Le}])(?:${e.source})(?=[\\s${Le}]|$)`,"g"))),(e=>{const t=e[0][1],s=e[1]||e[2]||e[3]||e[4]||e[5]||e[6];return[" ",{type:Je[Qe[t]],children:[s]}]}));return e=>{const[s,...n]=t(" "+e);return s.length>1&&n.unshift(s.substring(1)),n}}(s):()=>[e];return He(n(e),((e,s)=>"bold"===s||"italic"===s||"strikethrough"===s?Ze(e,t|Je[s]):[e]))}const Ke=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 Xe(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 et(e,t){for(var s=e.length-1;s>=0;s--)!0===t(e[s])&&e.splice(s,1)}function tt(e){throw new Error("Unhandled case for value: '"+e+"'")}var st=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===Xe(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=Xe(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}(),nt=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 st({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="…",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="…",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="…",i=3):i=r.length,s=s.substring(0,n-i)+r),s)},e}(),rt=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}(),it=function(e,t){return(it=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 at(e,t){function s(){this.constructor=e}it(e,t),e.prototype=null===t?Object.create(t):(s.prototype=t.prototype,new s)}var ot,ut=function(){return ut=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},ut.apply(this,arguments)},lt=function(e){function t(t){var s=e.call(this,t)||this;return s.email="",s.email=t.email,s}return at(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}(rt),ct=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 at(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}(rt),ht=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 at(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}(rt),dt=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 at(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}(rt),pt=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 at(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(/&/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,""").replace(/%26/gi,"&").replace(/%27/gi,"'").replace(/%3C/gi,"<").replace(/%3E/gi,">");try{return decodeURIComponent(t)}catch(s){return t}},t}(rt),ft=function(e){this.__jsduckDummyDocProp=null,this.tagBuilder=e.tagBuilder},mt=/[A-Za-z]/,gt=/[\d]/,vt=/[\D]/,bt=/\s/,yt=/['"]/,wt=/[\x00-\x1F\x7F]/,Ct=/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,At=Ct+/\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,Et=/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,kt=At+Et,xt=At+Et,It="(?:["+Et+"]{1,3}\\.){3}["+Et+"]{1,3}",St="["+xt+"](?:["+xt+"\\-]{0,61}["+xt+"])?",Tt=function(e){return"(?=("+St+"))\\"+e},Dt=function(e){return"(?:"+Tt(e)+"(?:\\."+Tt(e+1)+"){0,126}|"+It+")"},Mt=new RegExp("["+xt+"]"),Ft=/(?: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|ελ|бг|ею|рф|გე|닷넷|닷컴|삼성|한국|コム|世界|中信|中国|中國|企业|佛山|信息|健康|八卦|公司|公益|台湾|台灣|商城|商店|商标|嘉里|在线|大拿|娱乐|家電|工行|广东|微博|慈善|手机|手表|招聘|政务|政府|新闻|时尚|書籍|机构|游戏|澳門|点看|珠宝|移动|网址|网店|网站|网络|联通|谷歌|购物|通販|集团|食品|餐厅|香港)/,Bt=new RegExp("["+xt+"!#$%&'*+/=?^_`{|}~-]"),Rt=new RegExp("^"+Ft.source+"$"),Nt=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.localPartCharRegex=Bt,t.strictTldRegex=Rt,t}return at(t,e),t.prototype.parseMatches=function(e){for(var t=this.tagBuilder,s=this.localPartCharRegex,n=this.strictTldRegex,r=[],i=e.length,a=new Pt,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:tt(l)}u++}var d;return A(),r;function p(e,t){":"===e?s.test(t)?(l=2,c=new Pt(ut(ut({},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){Mt.test(e)?l=5:C()}function v(e){"."===e?l=7:"-"===e?l=6:Mt.test(e)||A()}function b(e){"-"===e||"."===e?A():Mt.test(e)?l=5:A()}function y(e){"."===e||"-"===e?A():Mt.test(e)?(l=5,c=new Pt(ut(ut({},c),{hasDomainDot:!0}))):A()}function w(e){void 0===e&&(e=2),l=e,c=new Pt({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 lt({tagBuilder:t,matchedText:s,offset:c.idx,email:i}))}C()}},t}(ft),Pt=function(e){void 0===e&&(e={}),this.idx=void 0!==e.idx?e.idx:-1,this.hasMailtoPrefix=!!e.hasMailtoPrefix,this.hasDomainDot=!!e.hasDomainDot},_t=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]*?["+Ct+"]"),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}(),Ot=(ot=new RegExp("[/?#](?:["+xt+"\\-+&@#/%=~_()|'$*\\[\\]{}?!:,.;^✓]*["+xt+"\\-+&@#/%=~_()|'$*\\[\\]{}✓])?"),new RegExp(["(?:","(",/(?:[A-Za-z][-.+A-Za-z0-9]{0,63}:(?![A-Za-z][-.+A-Za-z0-9]{0,63}:\/\/)(?!\d+\/?)(?:\/\/)?)/.source,Dt(2),")","|","(","(//)?",/(?:www\.)/.source,Dt(6),")","|","(","(//)?",Dt(10)+"\\.",Ft.source,"(?![-"+kt+"])",")",")","(?::[0-9]+)?","(?:"+ot.source+")?"].join(""),"gi")),jt=new RegExp("["+xt+"]"),Ut=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=Ot,s.wordCharRegExp=jt,s.stripPrefix=t.stripPrefix,s.stripTrailingSlash=t.stripTrailingSlash,s.decodePercentEncoding=t.decodePercentEncoding,s}return at(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(!_t.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 pt({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("^((.?//)?[-."+xt+"]*[-"+xt+"]\\.[-"+xt+"]+)").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}(ft),$t=new RegExp("#[_"+xt+"]{1,139}(?![_"+xt+"])","g"),Wt=new RegExp("[^"+xt+"]"),qt=function(e){function t(t){var s=e.call(this,t)||this;return s.serviceName="twitter",s.matcherRegex=$t,s.nonWordCharRegex=Wt,s.serviceName=t.serviceName,s}return at(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 ct({tagBuilder:i,matchedText:l,offset:o,serviceName:r,hashtag:c}))}}return a},t}(ft),Ht=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"),Gt=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.matcherRegex=Ht,t}return at(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 dt({tagBuilder:n,matchedText:i,offset:t.index,number:a,plusSign:o}))}return r},t.prototype.testMatch=function(e){return vt.test(e)},t}(ft),Lt=new RegExp("@[_"+xt+"]{1,50}(?![_"+xt+"])","g"),zt=new RegExp("@[_."+xt+"]{1,30}(?![_"+xt+"])","g"),Jt=new RegExp("@[-_."+xt+"]{1,50}(?![-_"+xt+"])","g"),Yt=new RegExp("[^"+xt+"]"),Qt=function(e){function t(t){var s=e.call(this,t)||this;return s.serviceName="twitter",s.matcherRegexes={twitter:Lt,instagram:zt,soundcloud:Jt},s.nonWordCharRegex=Yt,s.serviceName=t.serviceName,s}return at(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 ht({tagBuilder:i,matchedText:l,offset:o,serviceName:s,mention:c}))}}return a},t}(ft);var Vt=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},Zt=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 Vt,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:I(f);break;case 13:"--"===e.substr(l,2)?(l+=2,p=new Vt(ut(ut({},p),{type:"comment"})),h=14):"DOCTYPE"===e.substr(l,7).toUpperCase()?(l+=7,p=new Vt(ut(ut({},p),{type:"doctype"})),h=20):N();break;case 14:S(f);break;case 15:T(f);break;case 16:D(f);break;case 17:M(f);break;case 18:F(f);break;case 19:B(f);break;case 20:R(f);break;default:tt(h)}l++}function m(e){"!"===e?h=13:"/"===e?(h=2,p=new Vt(ut(ut({},p),{isClosing:!0}))):"<"===e?P():mt.test(e)?(h=3,p=new Vt(ut(ut({},p),{isOpening:!0}))):(h=0,p=u)}function g(e){bt.test(e)?(p=new Vt(ut(ut({},p),{name:O()})),h=4):"<"===e?P():"/"===e?(p=new Vt(ut(ut({},p),{name:O()})),h=12):">"===e?(p=new Vt(ut(ut({},p),{name:O()})),_()):mt.test(e)||gt.test(e)||":"===e||N()}function v(e){">"===e?N():mt.test(e)?h=3:N()}function b(e){bt.test(e)||("/"===e?h=12:">"===e?_():"<"===e?P():"="===e||yt.test(e)||wt.test(e)?N():h=5)}function y(e){bt.test(e)?h=6:"/"===e?h=12:"="===e?h=7:">"===e?_():"<"===e?P():yt.test(e)&&N()}function w(e){bt.test(e)||("/"===e?h=12:"="===e?h=7:">"===e?_():"<"===e?P():yt.test(e)?N():h=5)}function C(e){bt.test(e)||('"'===e?h=8:"'"===e?h=9:/[>=`]/.test(e)?N():"<"===e?P():h=10)}function A(e){'"'===e&&(h=11)}function E(e){"'"===e&&(h=11)}function k(e){bt.test(e)?h=4:">"===e?_():"<"===e&&P()}function x(e){bt.test(e)?h=4:"/"===e?h=12:">"===e?_():"<"===e?P():(h=4,l--)}function I(e){">"===e?(p=new Vt(ut(ut({},p),{isClosing:!0})),_()):h=4}function S(e){"-"===e?h=15:">"===e?N():h=16}function T(e){"-"===e?h=18:">"===e?N():h=16}function D(e){"-"===e&&(h=17)}function M(e){h="-"===e?18:16}function F(e){">"===e?_():"!"===e?h=19:"-"===e||(h=16)}function B(e){"-"===e?h=17:">"===e?_():h=16}function R(e){">"===e?_():"<"===e&&P()}function N(){h=0,p=u}function P(){h=1,p=new Vt({idx:l})}function _(){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)),N(),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,/( | |<|<|>|>|"|"|')/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||et(e,(function(e){return"hashtag"===e.getType()})),this.email||et(e,(function(e){return"email"===e.getType()})),this.phone||et(e,(function(e){return"phone"===e.getType()})),this.mention||et(e,(function(e){return"mention"===e.getType()})),this.urls.schemeMatches||et(e,(function(e){return"url"===e.getType()&&"scheme"===e.getUrlMatchType()})),this.urls.wwwMatches||et(e,(function(e){return"url"===e.getType()&&"www"===e.getUrlMatchType()})),this.urls.tldMatches||et(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,"<").replace(/>/g,">"));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 st?t.toAnchorString():e.buildTag().toAnchorString()},e.prototype.getMatchers=function(){if(this.matchers)return this.matchers;var e=this.getTagBuilder(),t=[new qt({tagBuilder:e,serviceName:this.hashtag}),new Nt({tagBuilder:e}),new Gt({tagBuilder:e}),new Qt({tagBuilder:e,serviceName:this.mention}),new Ut({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 nt({newWindow:this.newWindow,truncate:this.truncate,className:this.className})),e},e.version="3.14.3",e.AnchorTagBuilder=nt,e.HtmlTag=st,e.matcher={Email:Nt,Hashtag:qt,Matcher:ft,Mention:Qt,Phone:Gt,Url:Ut},e.match={Email:lt,Hashtag:ct,Match:rt,Mention:ht,Phone:dt,Url:pt},e}();function Kt(e,t=e){return{type:"autolink",url:e,text:t}}const Xt=Ge(/<!!mention:([^>\s]*?)\|(.*?)>/gm,(([e,t,s])=>function(e,t){return{type:"mention",id:e,text:t}}(decodeURIComponent(t),s))),es=Ge(/<!!customemoji:(.*?)>/gm,(([e,t])=>function(e){return{type:"customemoji",text:e}}(t))),ts=Ge(/<((?:https?|mailto):.*?)\|(.*?)>/gi,(([e,t,s])=>function(e,t=[]){return{type:"link",url:e,children:t}}(t,[s]))),ss=Ge(/<actionlink:([^|]+)[|]([^>]*)>/gi,(([e,t,s])=>{const{action:n,params:r}=rs(t);return function(e,t,s=[]){return{type:"actionlink",action:e,params:t,children:s}}(n,r,[s])})),ns=Ge(/<actionbutton:([^|]+)[|]([^>]*)>/gi,(([e,t,s])=>{const{action:n,params:r}=rs(t);return function(e,t,s=[]){return{type:"actionbutton",action:e,params:t,children:s}}(n,r,[s])}));function rs(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 is=Ge(/(?:^|\n)(?:\s*[-*+]\s+[^\n]+(?:\n|$))+/g,(([e])=>function(e=[]){return{type:"bulletlist",children:e}}([e.startsWith("\n")?e.slice(1):e]))),as=Ge(/^\s*[-*+]\s+([^\n]+)(?:\n|$)/gm,(([e,t])=>({type:"bulletpoint",children:[t]}))),os=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=Kt("tel:"+i.replace(/[^0-9+]/g,""),i);n.push(o),s=a+i.length}return s<e.length&&n.push(e.substring(s)),n},us=e=>ts(e).flatMap((e=>"string"==typeof e?ls(e):["<",...ls(e.url),...ls("|"+e.children[0]+">")])),ls=e=>{const t=Zt.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 lt?o="mailto:"+r.getEmail():r instanceof pt&&(o=r.getUrl()),t>n&&s.push(e.substring(n,t)),s.push(Kt(o,i)),n=t+a}return n<e.length&&s.push(e.substring(n)),s},cs=["Codeblock","Codespan","FormattedLink","Wikitext","Autolink","Actions","Mention","Mention","BulletPoint","CustomEmoji"];const hs=function(){const e=RegExp("[^\n]+\n?|\n","g");return t=>Array.from(t.match(e)||[])}();function ds(e,t={except:[]}){let s=function(e,t){let s=[e];return s=fs(s,t.multilineSteps),s=fs(s,[hs]),s=fs(s,t.singlelineSteps),s=ms(s),s}(e,function(e={except:[]}){var t;const s={multilineSteps:[],singlelineSteps:[]},n=null!=(t=e.except)?t:cs.filter((t=>!e.only.includes(t)));return n.includes("BulletPoint")||s.multilineSteps.push(is,as),n.includes("Mention")||s.singlelineSteps.push(Xt),n.includes("CustomEmoji")||s.singlelineSteps.push(es),n.includes("Codespan")||s.multilineSteps.push(Ge(/```([^]+?)```/g,(([e,t])=>({type:"codespan",text:t})))),n.includes("FormattedLink")||s.singlelineSteps.push(ts),n.includes("Actions")||(s.singlelineSteps.push(ss),s.singlelineSteps.push(ns)),n.includes("Wikitext")||s.singlelineSteps.push(Ve),n.includes("Autolink")||s.singlelineSteps.push(us,os),s}(t));return s=gs(s,!1),s}function ps(e){return ds(e,{except:["FormattedLink","Actions"]})}function fs(e,t){return t.reduce(((e,t)=>He(e,t)),e)}function ms(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:ms(n.children)}):n;return t}function gs(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=gs(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 vs{constructor(e,t,s,n){this.emoji=e,this.messageId=t,this.conversationId=s,this._realtimeClient=n}get brandedMessageId(){return this.messageId}get brandedConversationId(){return this.conversationId}add(){return h(this,null,(function*(){const e=yield this._realtimeClient.call("PUT",["conversations",this.brandedConversationId,"messages",this.brandedMessageId,"reactions",this.emoji,this._realtimeClient.userId],{});d(`Add ${this.emoji} reaction on message ${this.messageId} in conversation ${this.conversationId}`,e)}))}remove(){return h(this,null,(function*(){const e=yield this._realtimeClient.call("DELETE",["conversations",this.brandedConversationId,"messages",this.brandedMessageId,"reactions",this.emoji,this._realtimeClient.userId],{});(e.ok||"server"!==e.where||404!==e.value.status)&&d(`Remove ${this.emoji} reaction from message ${this.messageId} in conversation ${this.conversationId}`,e)}))}}class bs{constructor(e,t,s){this.id=e,this.conversationId=t,this._realtimeClient=s}get brandedId(){return this.id}get brandedConversationId(){return this.conversationId}reaction(e){if("string"!=typeof e)throw new Error(`Creating ReactionRef failed because emoji "${e}" is not a string`);if(""===e)throw new Error(`Creating ReactionRef failed because emoji "${e}" is an empty string`);return new vs(e,this.brandedId,this.brandedConversationId,this._realtimeClient)}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 Ue("Get message "+this.id,s)}))}edit(e){return h(this,null,(function*(){const t={content:ys(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 ys(e){return"string"==typeof e?[{type:"text",children:ds(e)}]:"text"in e&&e.text?[{type:"text",children:ds(e.text)}]:"content"in e&&e.content?e.content:void 0}class ws{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){if("string"==typeof e){if(""===e)throw new Error(`Creating ParticipantRef failed because ID "${e}" is an empty string`);return new We(e,this.id,this._realtimeClient)}if("brandedId"in e)return new We(e.id,this.id,this._realtimeClient);throw new Error(`Creating ParticipantRef failed because user "${e}" is not a string or a UserRef`)}message(e){if("string"!=typeof e)throw new Error(`Creating MessageRef failed because ID "${e}" is not a string`);if(""===e)throw new Error(`Creating MessageRef failed because ID "${e}" is an empty string`);return new bs(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=Ue("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:Cs(e),referencedMessageId:As(e),custom:"string"==typeof e?void 0:e.custom,idempotencyKey:qe((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 bs(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 Cs(e){return"string"==typeof e?[{type:"text",children:ps(e)}]:"text"in e?[{type:"text",children:ps(e.text)}]:e.content}function As(e){if("string"==typeof e)return;const t=e.referencedMessage;return void 0!==t?"string"==typeof t?t:t.id:void 0}class Es{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 Es("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 Es(`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 Es(`ws://${e}/public_api/v1`,`http://${e}/api/v0`,`http://${e}/public_api/v1`):new Es(`wss://${e}/public_api/v1`,`https://${e}/api/v0`,`https://${e}/public_api/v1`)}}function ks({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-09-02T09:13:11.435Z"};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?(Bs.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=>Bs.log(`${n} ${s.status} ${e} (10% logged)`))):Bs.log(`${n} ${s} (10% logged)`)),console.error("[TalkJS]",n)}throw s}))}const{cdnHost:xs,appHost:Is,restHost:Ss,realtimeHost:Ts,appProtocol:Ds,appWsProtocol:Ms}=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:"}}(),Fs=Is.startsWith("app.talkjs.com"),Bs="undefined"==typeof window?{log:e=>Promise.resolve(),setData:e=>{}}:new class{constructor(e){this._timeCreated=Date.now(),this._enabled=Fs,this._trackJSData={customer:{application:"",correlationId:"",sessionId:"",token:"",userId:"",version:"dev-2025-09-02T09:13:11.435Z"},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-09-02T09:13:11.435Z",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 ks({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 Rs{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 Ns{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 Rs({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:Ps(t[0]),payload:Ps(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)Bs.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 ks({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 Ps(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 _s{constructor(e){this.target=e}deref(){return this.target}}const Os=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 js(e),i=globalThis.WeakRef?new WeakRef(r):new _s(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 js{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 Es(e.apiUrls.realtimeWsApiUrl,e.apiUrls.internalHttpApiUrl,e.apiUrls.restApiHttpUrl):Es.fromHost(e.host),this._authProvider=new Ns(this._apiUrls,t,s,n,r,i);const a=Math.random().toString().split(".")[1];this._realtimeClient=new Oe(this._apiUrls.getRealtimeWsUrl(t,s,"1.5.2",a,e.clientBuild),s,this._authProvider),this.currentUser=new $e(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 ks({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){if("string"!=typeof e)throw new Error(`Creating UserRef failed because ID "${e}" is not a string`);if(""===e)throw new Error(`Creating UserRef failed because ID "${e}" is an empty string`);return new $e(e,this._realtimeClient)}conversation(e){if("string"!=typeof e)throw new Error(`Creating ConversationRef failed because ID "${e}" is not a string`);if(""===e)throw new Error(`Creating ConversationRef failed because ID "${e}" is an empty string`);return new ws(e,this._realtimeClient)}subscribeConversations(e){return this._realtimeClient.subscribe(["me","conversations"],e)}terminate(e){Os.deregister(this._appId,this.currentUser.id),this._terminationReason.resolve(e),this._realtimeClient.destroy()}_isConnected(){return this._realtimeClient.isConnected()}uploadFile(e,t){return Us(`${this._apiUrls.restApiHttpUrl}/${this._appId}/files`,this._authProvider,e,t)}uploadImage(e,t){return Us(`${this._apiUrls.restApiHttpUrl}/${this._appId}/files`,this._authProvider,e,u({subtype:"image"},t))}uploadVideo(e,t){return Us(`${this._apiUrls.restApiHttpUrl}/${this._appId}/files`,this._authProvider,e,u({subtype:"video"},t))}uploadAudio(e,t){return Us(`${this._apiUrls.restApiHttpUrl}/${this._appId}/files`,this._authProvider,e,u({subtype:"audio"},t))}uploadVoice(e,t){return Us(`${this._apiUrls.restApiHttpUrl}/${this._appId}/files`,this._authProvider,e,u({subtype:"voice"},t))}}function Us(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()),ks({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 js(e):Os.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(ze){r(ze)}},a=e=>{try{o(s.throw(e))}catch(ze){r(ze)}},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 I{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 S{constructor(e,t){this.handlers=t,this.socket=new I(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 T{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 S(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 T(25e3),this.serverInactivityTimer=new T(1e4),this.serverTimeoutTimer=new T(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 R{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 T(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++,this.logTrace("Called",t,s);const n=yield this.connection.call(e,t,s);return this.pendingCalls--,this.logTrace("Received",t,s),"SUBSCRIBE"===e&&n.ok?(this.activeSubscriptions++,this.logTrace("Subscribed",t,s)):"UNSUBSCRIBE"===e&&n.ok&&(this.activeSubscriptions--,this.logTrace("Unsubscribed",t,s)),this.inactive&&this.inactivityTimer.schedule((()=>{this.stateMachine.transition("stop")})),n}))}destroy(){this.stateMachine.transition("destroy")}isConnected(){return"READY"===this.stateMachine.state}logTrace(e,t,s){}}class N{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 R(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 _{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 O extends _{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 j extends _{constructor(e,t,s){super(s,(()=>this.sendMutate())),this.conversationId=e,this.connection=t,this.calls=[]}canPush(e,t){return!!j.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 U{constructor(e,t,s){this.pendingBatch=null,this.connection=new N(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(j.isCorrectBatchTypeFor(e,t)){const e=t[1];return new j(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 U(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),this.registerNewState(e.resultPromise)}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.onTeardown),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)}emit(e){return h(this,null,(function*(){var t;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,reactions:ge(t.reactions)}})}))}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,reactions:t.data.reactions}})}))}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),reactions:me(s.value.data.reactions,t.diff.reactions)}})))}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,reactions:s.value.data.reactions}}):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"]),i={};return r.data.reactions.forEach((e=>{i[e.emoji]={count:e.count,currentUserReacted:e.currentUserReacted}})),C({status:200,data:l(u({},r.data),{senderId:null!=(e=null==n?void 0:n.store.userId)?e:null,reactions:i})})}))}}function me(e,t){if(void 0===t)return e;const s=e.map((e=>{const s=t[e.emoji];return void 0===s?e:null===s?l(u({},e),{count:0}):{emoji:e.emoji,count:z(e.count,s.count),currentUserReacted:z(e.currentUserReacted,s.currentUserReacted)}})).filter((e=>e.count>0)),n=new Set(s.map((e=>e.emoji)));for(const r in t){const e=t[r];e&&!n.has(r)&&s.push({emoji:r,count:e.count,currentUserReacted:e.currentUserReacted})}return s.sort(((e,t)=>e.emoji.localeCompare(t.emoji))),s}function ge(e){const t=Object.entries(e).map((([e,t])=>({emoji:e,count:t.count,currentUserReacted:t.currentUserReacted})));return t.sort(((e,t)=>e.emoji.localeCompare(t.emoji))),t}class ve 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,reactions:a.snapshot.reactions}})}))}}class be extends X{constructor(e,t,s,n,r){super(e,n,r),this.conversationId=t,this.realtimeClient=s,this.handlers=r,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 ye({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}):we({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 ye({count:e,cursor:s,conversationId:this.conversationId,realtimeClient:this.realtimeClient});yield this.handlers.onLoadedMore({type:"virtual.messages.loadedmore",conversationId:this.conversationId,data:n})}))}loadedMore(e,t){this.mutate(e,(s=>null===s.value.windowEnd?s:t.data.ok?null===t.data.value.messages?(console.warn("[TalkJS] When loading more messages, the conversation no longer existed. We should have been told about this."),s):we({seq:e,prevState:s.value,messages:t.data.value.messages,cursor:t.data.value.nextCursor,conversationId:this.conversationId,realtimeClient:this.realtimeClient}):t.data))}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 ve(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 ve(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 ye(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 we({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 ve(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 Ce 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 Ae(e,t){for(let s in e)Object.prototype.hasOwnProperty.call(e,s)&&t(e[s],s)}function Ee(e,t){return function(e){let s={};return Ae(e,((e,n)=>{const[r,i]=(([e,s])=>[e,t(s,e)])([n,e],0);s[r]=i})),s}(e)}class ke 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:Ee(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?{}:Ee(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 Ae(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=Ee(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&&Ae(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 xe 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 Ie extends X{constructor(e,t,s,n,r){super(e,n,r),this.conversationId=t,this.realtimeClient=s,this.handlers=r,this.unsubscribeDebounceMs=1e3,this.pendingLoadMore=void 0}fetchInitial(e){return h(this,null,(function*(){const t=yield Se({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 Se({count:e,cursor:s,conversationId:this.conversationId,realtimeClient:this.realtimeClient});yield this.handlers.onLoadedMore({type:"virtual.participants.loadedmore",conversationId:this.conversationId,data:n})}))}loadedMore(e,t){this.mutate(e,(s=>null===s.value.windowEnd?s:t.data.ok?null===t.data.value.participants?(console.warn("[TalkJS] When loading more participants, the conversation no longer existed. We should have been told about this."),s):Te({seq:e,prevStores:s.value.stores,participants:t.data.value.participants,cursor:t.data.value.nextCursor,conversationId:this.conversationId,realtimeClient:this.realtimeClient}):t.data))}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 xe(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 Se(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 t=new xe(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 De extends X{constructor(e,t,s,n,r){super(e,n,r),this.getConvDataStore=t,this.realtimeClient=s,this.handlers=r,this.unsubscribeDebounceMs=1e3,this.pendingLoadMore=void 0}fetchInitial(e){return h(this,null,(function*(){const t=yield Me({realtimeClient:this.realtimeClient,count:20});return t.ok?null===t.value.conversations?C({lastChanged:e,stores:null,windowEnd:null}):Fe({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 Me({count:e,cursor:s,realtimeClient:this.realtimeClient});yield this.handlers.onLoadedMore({type:"virtual.conversations.loadedmore",data:n})}))}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()}))}loadedMore(e,t){this.mutate(e,(s=>null===s.value.windowEnd?s:t.data.ok?null===t.data.value.conversations?(console.warn("[TalkJS] When loading more conversations, the user stopped existing, which should be impossible."),s):Fe({seq:e,prevStores:s.value.stores,conversations:t.data.value.conversations,cursor:t.data.value.nextCursor,getConvDataStore:this.getConvDataStore}):t.data))}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 Me(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 Fe({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 Be 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:Re(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:Re(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:Re(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 Re(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 Ne 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 Pe{constructor(e,t,s){this.realtimeClient=s,this.convDataStores={},this.storeMap={},this.emitMutex=new Q,this.virtualSeqOffset=0,this.realPublishSeq=0,this.refetchOnNextNetworkLoss=!0,this.connection=new L(e,t,{onUpstreamRestarting:()=>{this.refetchOnNextNetworkLoss=!1},onReady:()=>{this.refetchOnNextNetworkLoss=!0},onResubscribeSent:()=>{if(this.virtualSeqOffset+=this.realPublishSeq,this.realPublishSeq=0,this.refetchOnNextNetworkLoss){this.virtualSeqOffset++;const e=this.virtualSeq;this.refetchAll(e),this.emitAll(e)}},onResubscribeError:(e,t)=>{var s;null==(s=this.storeMap[_e(e)])||s.setError(t)},onPublish:(e,t)=>{this.realPublishSeq=e;const s=this.virtualSeq;for(const n of t)this.handlePublish(s,n);this.emitAll(s)}})}get virtualSeq(){return this.realPublishSeq+this.virtualSeqOffset}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,I,S,T,D,M,F;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==(I=this.storeMap[`/me/conversations/${t.conversationId}/participants`])||I.participantCreated(e,t));case"participant.deleted":return void(null==(S=this.storeMap[`/me/conversations/${t.conversationId}/participants`])||S.participantDeleted(e,t));case"user.online.changed":return void(null==(T=this.storeMap[`/users/${t.userId}/online`])||T.userOnlineChanged(e,t));case"virtual.conversations.loadedmore":return void(null==(D=this.storeMap["/me/conversations"])||D.loadedMore(e,t));case"virtual.messages.loadedmore":return void(null==(M=this.storeMap[`/me/conversations/${t.conversationId}/messages`])||M.loadedMore(e,t));case"virtual.participants.loadedmore":return void(null==(F=this.storeMap[`/me/conversations/${t.conversationId}/participants`])||F.loadedMore(e,t))}}call(e,t,s,n){return h(this,null,(function*(){if(!n.bypassCache&&"GET"===e){const e=_e(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}onVirtualPublish(e){return h(this,null,(function*(){this.virtualSeqOffset++;const t=this.virtualSeq;this.handlePublish(t,e),yield this.emitAll(t)}))}getOrCreateStore(e){const t=_e(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.virtualSeq,e[1],this.realtimeClient,this.emitMutex,{onTeardown:t});if(f(e,["me","conversations","*"]))return new Ce(this.virtualSeq,this.subscribeConvData(e[2]),this.realtimeClient,this.emitMutex,{onTeardown:t});if(f(e,["me","conversations","*","messages"]))return new be(this.virtualSeq,e[2],this.realtimeClient,this.emitMutex,{onTeardown:t,onLoadedMore:e=>this.onVirtualPublish(e)});if(f(e,["me","conversations","*","participants"]))return new Ie(this.virtualSeq,e[2],this.realtimeClient,this.emitMutex,{onTeardown:t,onLoadedMore:e=>this.onVirtualPublish(e)});if(f(e,["me","conversations","*","typing"]))return new ke(this.virtualSeq,e[2],this.realtimeClient,this.emitMutex,{onTeardown:t});if(f(e,["me","conversations"]))return new De(this.virtualSeq,(e=>this.subscribeConvData(e)),this.realtimeClient,this.emitMutex,{onTeardown:t,onLoadedMore:e=>this.onVirtualPublish(e)});if(f(e,["users","*","online"]))return new Ne(this.virtualSeq,e[1],this.realtimeClient,this.emitMutex,{onTeardown: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 Be(this.virtualSeq,e,this.realtimeClient,this.emitMutex,{onTeardown:()=>{delete this.convDataStores[t]}});return this.convDataStores[t]=s,{store:s,unsubscribe:s.registerInternalSubscription()}}}function _e(e){return`/${e.join("/")}`}class Oe{constructor(e,t,s){this.userId=t,this.alive=!0,this.connection=new Pe(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 je(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 je(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)):je(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,reactions:ge(e.reactions),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,reactions:ge(e.reactions),plaintext:de(e.content,{})}}}function je(e,t){return"server"===e.where?E(l(u({},e.value),{operation:t})):e}function Ue(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 $e{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 Ue("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 We{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 qe(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 He=(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:He(e.children,t,e.type)}];case"link":return[{type:e.type,url:e.url,children:He(e.children,t,e.type)}];case"actionlink":case"actionLink":case"actionbutton":case"actionButton":return[{type:e.type,action:e.action,params:e.params,children:He(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 Ge(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 Le="’'()[]{}<>:,‒–—―…!.«»-‐?‘’“”;/⁄␠·&@*\\•^¤¢$€£¥₩₪†‡°¡¿¬#№%‰‱¶′§~¨_|¦⁂☞∴‽※".replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&");var ze,Je=((ze=Je||{})[ze.italic=1]="italic",ze[ze.strikethrough=2]="strikethrough",ze[ze.bold=4]="bold",ze);const Ye=[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")})),Qe={_:1,"*":4,"~":2};function Ve(e){return Ze(e,0)}function Ze(e,t=0){const s=Ye[t],n=s?function(e){const t=Ge(Ke.getOrCompute(e,(()=>new RegExp(`(?:^|[\\s${Le}])(?:${e.source})(?=[\\s${Le}]|$)`,"g"))),(e=>{const t=e[0][1],s=e[1]||e[2]||e[3]||e[4]||e[5]||e[6];return[" ",{type:Je[Qe[t]],children:[s]}]}));return e=>{const[s,...n]=t(" "+e);return s.length>1&&n.unshift(s.substring(1)),n}}(s):()=>[e];return He(n(e),((e,s)=>"bold"===s||"italic"===s||"strikethrough"===s?Ze(e,t|Je[s]):[e]))}const Ke=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 Xe(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 et(e,t){for(var s=e.length-1;s>=0;s--)!0===t(e[s])&&e.splice(s,1)}function tt(e){throw new Error("Unhandled case for value: '"+e+"'")}var st=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===Xe(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=Xe(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}(),nt=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 st({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="…",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="…",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="…",i=3):i=r.length,s=s.substring(0,n-i)+r),s)},e}(),rt=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}(),it=function(e,t){return(it=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 at(e,t){function s(){this.constructor=e}it(e,t),e.prototype=null===t?Object.create(t):(s.prototype=t.prototype,new s)}var ot,ut=function(){return ut=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},ut.apply(this,arguments)},lt=function(e){function t(t){var s=e.call(this,t)||this;return s.email="",s.email=t.email,s}return at(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}(rt),ct=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 at(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}(rt),ht=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 at(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}(rt),dt=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 at(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}(rt),pt=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 at(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(/&/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,""").replace(/%26/gi,"&").replace(/%27/gi,"'").replace(/%3C/gi,"<").replace(/%3E/gi,">");try{return decodeURIComponent(t)}catch(s){return t}},t}(rt),ft=function(e){this.__jsduckDummyDocProp=null,this.tagBuilder=e.tagBuilder},mt=/[A-Za-z]/,gt=/[\d]/,vt=/[\D]/,bt=/\s/,yt=/['"]/,wt=/[\x00-\x1F\x7F]/,Ct=/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,At=Ct+/\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,Et=/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,kt=At+Et,xt=At+Et,It="(?:["+Et+"]{1,3}\\.){3}["+Et+"]{1,3}",St="["+xt+"](?:["+xt+"\\-]{0,61}["+xt+"])?",Tt=function(e){return"(?=("+St+"))\\"+e},Dt=function(e){return"(?:"+Tt(e)+"(?:\\."+Tt(e+1)+"){0,126}|"+It+")"},Mt=new RegExp("["+xt+"]"),Ft=/(?: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|ελ|бг|ею|рф|გე|닷넷|닷컴|삼성|한국|コム|世界|中信|中国|中國|企业|佛山|信息|健康|八卦|公司|公益|台湾|台灣|商城|商店|商标|嘉里|在线|大拿|娱乐|家電|工行|广东|微博|慈善|手机|手表|招聘|政务|政府|新闻|时尚|書籍|机构|游戏|澳門|点看|珠宝|移动|网址|网店|网站|网络|联通|谷歌|购物|通販|集团|食品|餐厅|香港)/,Bt=new RegExp("["+xt+"!#$%&'*+/=?^_`{|}~-]"),Rt=new RegExp("^"+Ft.source+"$"),Nt=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.localPartCharRegex=Bt,t.strictTldRegex=Rt,t}return at(t,e),t.prototype.parseMatches=function(e){for(var t=this.tagBuilder,s=this.localPartCharRegex,n=this.strictTldRegex,r=[],i=e.length,a=new Pt,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:tt(l)}u++}var d;return A(),r;function p(e,t){":"===e?s.test(t)?(l=2,c=new Pt(ut(ut({},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){Mt.test(e)?l=5:C()}function v(e){"."===e?l=7:"-"===e?l=6:Mt.test(e)||A()}function b(e){"-"===e||"."===e?A():Mt.test(e)?l=5:A()}function y(e){"."===e||"-"===e?A():Mt.test(e)?(l=5,c=new Pt(ut(ut({},c),{hasDomainDot:!0}))):A()}function w(e){void 0===e&&(e=2),l=e,c=new Pt({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 lt({tagBuilder:t,matchedText:s,offset:c.idx,email:i}))}C()}},t}(ft),Pt=function(e){void 0===e&&(e={}),this.idx=void 0!==e.idx?e.idx:-1,this.hasMailtoPrefix=!!e.hasMailtoPrefix,this.hasDomainDot=!!e.hasDomainDot},_t=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]*?["+Ct+"]"),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}(),Ot=(ot=new RegExp("[/?#](?:["+xt+"\\-+&@#/%=~_()|'$*\\[\\]{}?!:,.;^✓]*["+xt+"\\-+&@#/%=~_()|'$*\\[\\]{}✓])?"),new RegExp(["(?:","(",/(?:[A-Za-z][-.+A-Za-z0-9]{0,63}:(?![A-Za-z][-.+A-Za-z0-9]{0,63}:\/\/)(?!\d+\/?)(?:\/\/)?)/.source,Dt(2),")","|","(","(//)?",/(?:www\.)/.source,Dt(6),")","|","(","(//)?",Dt(10)+"\\.",Ft.source,"(?![-"+kt+"])",")",")","(?::[0-9]+)?","(?:"+ot.source+")?"].join(""),"gi")),jt=new RegExp("["+xt+"]"),Ut=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=Ot,s.wordCharRegExp=jt,s.stripPrefix=t.stripPrefix,s.stripTrailingSlash=t.stripTrailingSlash,s.decodePercentEncoding=t.decodePercentEncoding,s}return at(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(!_t.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 pt({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("^((.?//)?[-."+xt+"]*[-"+xt+"]\\.[-"+xt+"]+)").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}(ft),$t=new RegExp("#[_"+xt+"]{1,139}(?![_"+xt+"])","g"),Wt=new RegExp("[^"+xt+"]"),qt=function(e){function t(t){var s=e.call(this,t)||this;return s.serviceName="twitter",s.matcherRegex=$t,s.nonWordCharRegex=Wt,s.serviceName=t.serviceName,s}return at(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 ct({tagBuilder:i,matchedText:l,offset:o,serviceName:r,hashtag:c}))}}return a},t}(ft),Ht=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"),Gt=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.matcherRegex=Ht,t}return at(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 dt({tagBuilder:n,matchedText:i,offset:t.index,number:a,plusSign:o}))}return r},t.prototype.testMatch=function(e){return vt.test(e)},t}(ft),Lt=new RegExp("@[_"+xt+"]{1,50}(?![_"+xt+"])","g"),zt=new RegExp("@[_."+xt+"]{1,30}(?![_"+xt+"])","g"),Jt=new RegExp("@[-_."+xt+"]{1,50}(?![-_"+xt+"])","g"),Yt=new RegExp("[^"+xt+"]"),Qt=function(e){function t(t){var s=e.call(this,t)||this;return s.serviceName="twitter",s.matcherRegexes={twitter:Lt,instagram:zt,soundcloud:Jt},s.nonWordCharRegex=Yt,s.serviceName=t.serviceName,s}return at(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 ht({tagBuilder:i,matchedText:l,offset:o,serviceName:s,mention:c}))}}return a},t}(ft);var Vt=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},Zt=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 Vt,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:I(f);break;case 13:"--"===e.substr(l,2)?(l+=2,p=new Vt(ut(ut({},p),{type:"comment"})),h=14):"DOCTYPE"===e.substr(l,7).toUpperCase()?(l+=7,p=new Vt(ut(ut({},p),{type:"doctype"})),h=20):N();break;case 14:S(f);break;case 15:T(f);break;case 16:D(f);break;case 17:M(f);break;case 18:F(f);break;case 19:B(f);break;case 20:R(f);break;default:tt(h)}l++}function m(e){"!"===e?h=13:"/"===e?(h=2,p=new Vt(ut(ut({},p),{isClosing:!0}))):"<"===e?P():mt.test(e)?(h=3,p=new Vt(ut(ut({},p),{isOpening:!0}))):(h=0,p=u)}function g(e){bt.test(e)?(p=new Vt(ut(ut({},p),{name:O()})),h=4):"<"===e?P():"/"===e?(p=new Vt(ut(ut({},p),{name:O()})),h=12):">"===e?(p=new Vt(ut(ut({},p),{name:O()})),_()):mt.test(e)||gt.test(e)||":"===e||N()}function v(e){">"===e?N():mt.test(e)?h=3:N()}function b(e){bt.test(e)||("/"===e?h=12:">"===e?_():"<"===e?P():"="===e||yt.test(e)||wt.test(e)?N():h=5)}function y(e){bt.test(e)?h=6:"/"===e?h=12:"="===e?h=7:">"===e?_():"<"===e?P():yt.test(e)&&N()}function w(e){bt.test(e)||("/"===e?h=12:"="===e?h=7:">"===e?_():"<"===e?P():yt.test(e)?N():h=5)}function C(e){bt.test(e)||('"'===e?h=8:"'"===e?h=9:/[>=`]/.test(e)?N():"<"===e?P():h=10)}function A(e){'"'===e&&(h=11)}function E(e){"'"===e&&(h=11)}function k(e){bt.test(e)?h=4:">"===e?_():"<"===e&&P()}function x(e){bt.test(e)?h=4:"/"===e?h=12:">"===e?_():"<"===e?P():(h=4,l--)}function I(e){">"===e?(p=new Vt(ut(ut({},p),{isClosing:!0})),_()):h=4}function S(e){"-"===e?h=15:">"===e?N():h=16}function T(e){"-"===e?h=18:">"===e?N():h=16}function D(e){"-"===e&&(h=17)}function M(e){h="-"===e?18:16}function F(e){">"===e?_():"!"===e?h=19:"-"===e||(h=16)}function B(e){"-"===e?h=17:">"===e?_():h=16}function R(e){">"===e?_():"<"===e&&P()}function N(){h=0,p=u}function P(){h=1,p=new Vt({idx:l})}function _(){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)),N(),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,/( | |<|<|>|>|"|"|')/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||et(e,(function(e){return"hashtag"===e.getType()})),this.email||et(e,(function(e){return"email"===e.getType()})),this.phone||et(e,(function(e){return"phone"===e.getType()})),this.mention||et(e,(function(e){return"mention"===e.getType()})),this.urls.schemeMatches||et(e,(function(e){return"url"===e.getType()&&"scheme"===e.getUrlMatchType()})),this.urls.wwwMatches||et(e,(function(e){return"url"===e.getType()&&"www"===e.getUrlMatchType()})),this.urls.tldMatches||et(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,"<").replace(/>/g,">"));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 st?t.toAnchorString():e.buildTag().toAnchorString()},e.prototype.getMatchers=function(){if(this.matchers)return this.matchers;var e=this.getTagBuilder(),t=[new qt({tagBuilder:e,serviceName:this.hashtag}),new Nt({tagBuilder:e}),new Gt({tagBuilder:e}),new Qt({tagBuilder:e,serviceName:this.mention}),new Ut({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 nt({newWindow:this.newWindow,truncate:this.truncate,className:this.className})),e},e.version="3.14.3",e.AnchorTagBuilder=nt,e.HtmlTag=st,e.matcher={Email:Nt,Hashtag:qt,Matcher:ft,Mention:Qt,Phone:Gt,Url:Ut},e.match={Email:lt,Hashtag:ct,Match:rt,Mention:ht,Phone:dt,Url:pt},e}();function Kt(e,t=e){return{type:"autolink",url:e,text:t}}const Xt=Ge(/<!!mention:([^>\s]*?)\|(.*?)>/gm,(([e,t,s])=>function(e,t){return{type:"mention",id:e,text:t}}(decodeURIComponent(t),s))),es=Ge(/<!!customemoji:(.*?)>/gm,(([e,t])=>function(e){return{type:"customemoji",text:e}}(t))),ts=Ge(/<((?:https?|mailto):.*?)\|(.*?)>/gi,(([e,t,s])=>function(e,t=[]){return{type:"link",url:e,children:t}}(t,[s]))),ss=Ge(/<actionlink:([^|]+)[|]([^>]*)>/gi,(([e,t,s])=>{const{action:n,params:r}=rs(t);return function(e,t,s=[]){return{type:"actionlink",action:e,params:t,children:s}}(n,r,[s])})),ns=Ge(/<actionbutton:([^|]+)[|]([^>]*)>/gi,(([e,t,s])=>{const{action:n,params:r}=rs(t);return function(e,t,s=[]){return{type:"actionbutton",action:e,params:t,children:s}}(n,r,[s])}));function rs(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 is=Ge(/(?:^|\n)(?:\s*[-*+]\s+[^\n]+(?:\n|$))+/g,(([e])=>function(e=[]){return{type:"bulletlist",children:e}}([e.startsWith("\n")?e.slice(1):e]))),as=Ge(/^\s*[-*+]\s+([^\n]+)(?:\n|$)/gm,(([e,t])=>({type:"bulletpoint",children:[t]}))),os=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=Kt("tel:"+i.replace(/[^0-9+]/g,""),i);n.push(o),s=a+i.length}return s<e.length&&n.push(e.substring(s)),n},us=e=>ts(e).flatMap((e=>"string"==typeof e?ls(e):["<",...ls(e.url),...ls("|"+e.children[0]+">")])),ls=e=>{const t=Zt.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 lt?o="mailto:"+r.getEmail():r instanceof pt&&(o=r.getUrl()),t>n&&s.push(e.substring(n,t)),s.push(Kt(o,i)),n=t+a}return n<e.length&&s.push(e.substring(n)),s},cs=["Codeblock","Codespan","FormattedLink","Wikitext","Autolink","Actions","Mention","Mention","BulletPoint","CustomEmoji"];const hs=function(){const e=RegExp("[^\n]+\n?|\n","g");return t=>Array.from(t.match(e)||[])}();function ds(e,t={except:[]}){let s=function(e,t){let s=[e];return s=fs(s,t.multilineSteps),s=fs(s,[hs]),s=fs(s,t.singlelineSteps),s=ms(s),s}(e,function(e={except:[]}){var t;const s={multilineSteps:[],singlelineSteps:[]},n=null!=(t=e.except)?t:cs.filter((t=>!e.only.includes(t)));return n.includes("BulletPoint")||s.multilineSteps.push(is,as),n.includes("Mention")||s.singlelineSteps.push(Xt),n.includes("CustomEmoji")||s.singlelineSteps.push(es),n.includes("Codespan")||s.multilineSteps.push(Ge(/```([^]+?)```/g,(([e,t])=>({type:"codespan",text:t})))),n.includes("FormattedLink")||s.singlelineSteps.push(ts),n.includes("Actions")||(s.singlelineSteps.push(ss),s.singlelineSteps.push(ns)),n.includes("Wikitext")||s.singlelineSteps.push(Ve),n.includes("Autolink")||s.singlelineSteps.push(us,os),s}(t));return s=gs(s,!1),s}function ps(e){return ds(e,{except:["FormattedLink","Actions"]})}function fs(e,t){return t.reduce(((e,t)=>He(e,t)),e)}function ms(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:ms(n.children)}):n;return t}function gs(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=gs(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 vs{constructor(e,t,s,n){this.emoji=e,this.messageId=t,this.conversationId=s,this._realtimeClient=n}get brandedMessageId(){return this.messageId}get brandedConversationId(){return this.conversationId}add(){return h(this,null,(function*(){const e=yield this._realtimeClient.call("PUT",["conversations",this.brandedConversationId,"messages",this.brandedMessageId,"reactions",this.emoji,this._realtimeClient.userId],{});d(`Add ${this.emoji} reaction on message ${this.messageId} in conversation ${this.conversationId}`,e)}))}remove(){return h(this,null,(function*(){const e=yield this._realtimeClient.call("DELETE",["conversations",this.brandedConversationId,"messages",this.brandedMessageId,"reactions",this.emoji,this._realtimeClient.userId],{});(e.ok||"server"!==e.where||404!==e.value.status)&&d(`Remove ${this.emoji} reaction from message ${this.messageId} in conversation ${this.conversationId}`,e)}))}}class bs{constructor(e,t,s){this.id=e,this.conversationId=t,this._realtimeClient=s}get brandedId(){return this.id}get brandedConversationId(){return this.conversationId}reaction(e){if("string"!=typeof e)throw new Error(`Creating ReactionRef failed because emoji "${e}" is not a string`);if(""===e)throw new Error(`Creating ReactionRef failed because emoji "${e}" is an empty string`);return new vs(e,this.brandedId,this.brandedConversationId,this._realtimeClient)}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 Ue("Get message "+this.id,s)}))}edit(e){return h(this,null,(function*(){const t={content:ys(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 ys(e){return"string"==typeof e?[{type:"text",children:ds(e)}]:"text"in e&&e.text?[{type:"text",children:ds(e.text)}]:"content"in e&&e.content?e.content:void 0}class ws{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){if("string"==typeof e){if(""===e)throw new Error(`Creating ParticipantRef failed because ID "${e}" is an empty string`);return new We(e,this.id,this._realtimeClient)}if("brandedId"in e)return new We(e.id,this.id,this._realtimeClient);throw new Error(`Creating ParticipantRef failed because user "${e}" is not a string or a UserRef`)}message(e){if("string"!=typeof e)throw new Error(`Creating MessageRef failed because ID "${e}" is not a string`);if(""===e)throw new Error(`Creating MessageRef failed because ID "${e}" is an empty string`);return new bs(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=Ue("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:Cs(e),referencedMessageId:As(e),custom:"string"==typeof e?void 0:e.custom,idempotencyKey:qe((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 bs(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 Cs(e){return"string"==typeof e?[{type:"text",children:ps(e)}]:"text"in e?[{type:"text",children:ps(e.text)}]:e.content}function As(e){if("string"==typeof e)return;const t=e.referencedMessage;return void 0!==t?"string"==typeof t?t:t.id:void 0}class Es{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 Es("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 Es(`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 Es(`ws://${e}/public_api/v1`,`http://${e}/api/v0`,`http://${e}/public_api/v1`):new Es(`wss://${e}/public_api/v1`,`https://${e}/api/v0`,`https://${e}/public_api/v1`)}}function ks({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-09-25T14:26:35.703Z"};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?(Bs.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=>Bs.log(`${n} ${s.status} ${e} (10% logged)`))):Bs.log(`${n} ${s} (10% logged)`)),console.error("[TalkJS]",n)}throw s}))}const{cdnHost:xs,appHost:Is,restHost:Ss,realtimeHost:Ts,appProtocol:Ds,appWsProtocol:Ms}=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:"}}(),Fs=Is.startsWith("app.talkjs.com"),Bs="undefined"==typeof window?{log:e=>Promise.resolve(),setData:e=>{}}:new class{constructor(e){this._timeCreated=Date.now(),this._enabled=Fs,this._trackJSData={customer:{application:"",correlationId:"",sessionId:"",token:"",userId:"",version:"dev-2025-09-25T14:26:35.703Z"},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-09-25T14:26:35.703Z",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 ks({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 Rs{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 Ns{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 Rs({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:Ps(t[0]),payload:Ps(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)Bs.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 ks({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 Ps(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 _s{constructor(e){this.target=e}deref(){return this.target}}const Os=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 js(e),i=globalThis.WeakRef?new WeakRef(r):new _s(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 js{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 Es(e.apiUrls.realtimeWsApiUrl,e.apiUrls.internalHttpApiUrl,e.apiUrls.restApiHttpUrl):Es.fromHost(e.host),this._authProvider=new Ns(this._apiUrls,t,s,n,r,i);const a=Math.random().toString().split(".")[1];this._realtimeClient=new Oe(this._apiUrls.getRealtimeWsUrl(t,s,"1.5.3",a,e.clientBuild),s,this._authProvider),this.currentUser=new $e(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 ks({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){if("string"!=typeof e)throw new Error(`Creating UserRef failed because ID "${e}" is not a string`);if(""===e)throw new Error(`Creating UserRef failed because ID "${e}" is an empty string`);return new $e(e,this._realtimeClient)}conversation(e){if("string"!=typeof e)throw new Error(`Creating ConversationRef failed because ID "${e}" is not a string`);if(""===e)throw new Error(`Creating ConversationRef failed because ID "${e}" is an empty string`);return new ws(e,this._realtimeClient)}subscribeConversations(e){return this._realtimeClient.subscribe(["me","conversations"],e)}terminate(e){Os.deregister(this._appId,this.currentUser.id),this._terminationReason.resolve(e),this._realtimeClient.destroy()}_isConnected(){return this._realtimeClient.isConnected()}uploadFile(e,t){return Us(`${this._apiUrls.restApiHttpUrl}/${this._appId}/files`,this._authProvider,e,t)}uploadImage(e,t){return Us(`${this._apiUrls.restApiHttpUrl}/${this._appId}/files`,this._authProvider,e,u({subtype:"image"},t))}uploadVideo(e,t){return Us(`${this._apiUrls.restApiHttpUrl}/${this._appId}/files`,this._authProvider,e,u({subtype:"video"},t))}uploadAudio(e,t){return Us(`${this._apiUrls.restApiHttpUrl}/${this._appId}/files`,this._authProvider,e,u({subtype:"audio"},t))}uploadVoice(e,t){return Us(`${this._apiUrls.restApiHttpUrl}/${this._appId}/files`,this._authProvider,e,u({subtype:"voice"},t))}}function Us(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()),ks({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){if(!e)throw new Error("[TalkJS] Must provide an options object to `getTalkSession`");return e.forceCreateNew?new js(e):Os.getOrCreate(e)},exports.registerPolyfills=function({WebSocket:e}){x=e};
|
|
2
2
|
//# sourceMappingURL=talkSession.cjs.map
|
package/dist/talkSession.d.ts
CHANGED
|
@@ -597,7 +597,11 @@ export declare interface ConversationSnapshot {
|
|
|
597
597
|
*/
|
|
598
598
|
photoUrl: string | null;
|
|
599
599
|
/**
|
|
600
|
-
* One or more welcome messages that will
|
|
600
|
+
* One or more welcome messages that will be rendered at the start of this conversation as system messages.
|
|
601
|
+
*
|
|
602
|
+
* @remarks
|
|
603
|
+
* Welcome messages are rendered in the UI as messages, but they are not real messages.
|
|
604
|
+
* This means they do not appear when you list messages using the REST API or JS Data API, and you cannot reply or react to them.
|
|
601
605
|
*/
|
|
602
606
|
welcomeMessages: string[];
|
|
603
607
|
/**
|
|
@@ -726,6 +730,10 @@ export declare interface CreateConversationParams {
|
|
|
726
730
|
/**
|
|
727
731
|
* System messages which are sent at the beginning of a conversation.
|
|
728
732
|
* Default = no messages.
|
|
733
|
+
*
|
|
734
|
+
* @remarks
|
|
735
|
+
* Welcome messages are rendered in the UI as messages, but they are not real messages.
|
|
736
|
+
* This means they do not appear when you list messages using the REST API or JS Data API, and you cannot reply or react to them.
|
|
729
737
|
*/
|
|
730
738
|
welcomeMessages?: string[];
|
|
731
739
|
/**
|
|
@@ -807,6 +815,10 @@ export declare interface CreateUserParams {
|
|
|
807
815
|
/**
|
|
808
816
|
* The default message a person sees when starting a chat with this user.
|
|
809
817
|
* Default = no welcome message
|
|
818
|
+
*
|
|
819
|
+
* @remarks
|
|
820
|
+
* Welcome messages are rendered in the UI as messages, but they are not real messages.
|
|
821
|
+
* This means they do not appear when you list messages using the REST API or JS Data API, and you cannot reply or react to them.
|
|
810
822
|
*/
|
|
811
823
|
welcomeMessage?: string;
|
|
812
824
|
/**
|
|
@@ -2005,6 +2017,10 @@ export declare interface SetConversationParams {
|
|
|
2005
2017
|
/**
|
|
2006
2018
|
* System messages which are sent at the beginning of a conversation.
|
|
2007
2019
|
* Default = no messages.
|
|
2020
|
+
*
|
|
2021
|
+
* @remarks
|
|
2022
|
+
* Welcome messages are rendered in the UI as messages, but they are not real messages.
|
|
2023
|
+
* This means they do not appear when you list messages using the REST API or JS Data API, and you cannot reply or react to them.
|
|
2008
2024
|
*/
|
|
2009
2025
|
welcomeMessages?: string[] | null;
|
|
2010
2026
|
/**
|
|
@@ -2090,6 +2106,10 @@ export declare interface SetUserParams {
|
|
|
2090
2106
|
/**
|
|
2091
2107
|
* The default message a person sees when starting a chat with this user.
|
|
2092
2108
|
* Default = no welcome message
|
|
2109
|
+
*
|
|
2110
|
+
* @remarks
|
|
2111
|
+
* Welcome messages are rendered in the UI as messages, but they are not real messages.
|
|
2112
|
+
* This means they do not appear when you list messages using the REST API or JS Data API, and you cannot reply or react to them.
|
|
2093
2113
|
*/
|
|
2094
2114
|
welcomeMessage?: string | null;
|
|
2095
2115
|
/**
|
|
@@ -2719,6 +2739,10 @@ export declare interface UserSnapshot {
|
|
|
2719
2739
|
role: string;
|
|
2720
2740
|
/**
|
|
2721
2741
|
* The default message a person sees when starting a chat with this user
|
|
2742
|
+
*
|
|
2743
|
+
* @remarks
|
|
2744
|
+
* Welcome messages are rendered in the UI as messages, but they are not real messages.
|
|
2745
|
+
* This means they do not appear when you list messages using the REST API or JS Data API, and you cannot reply or react to them.
|
|
2722
2746
|
*/
|
|
2723
2747
|
welcomeMessage: string | null;
|
|
2724
2748
|
}
|
package/dist/talkSession.js
CHANGED
|
@@ -404,9 +404,9 @@ class A {
|
|
|
404
404
|
}
|
|
405
405
|
call(e2, t2, s2) {
|
|
406
406
|
return __async(this, null, function* () {
|
|
407
|
-
this.inactivityTimer.stop(), this.pendingCalls
|
|
407
|
+
this.inactivityTimer.stop(), this.pendingCalls++, this.logTrace("Called", t2, s2);
|
|
408
408
|
const n2 = yield this.connection.call(e2, t2, s2);
|
|
409
|
-
return this.pendingCalls--, "SUBSCRIBE" === e2 && n2.ok ? this.activeSubscriptions
|
|
409
|
+
return this.pendingCalls--, this.logTrace("Received", t2, s2), "SUBSCRIBE" === e2 && n2.ok ? (this.activeSubscriptions++, this.logTrace("Subscribed", t2, s2)) : "UNSUBSCRIBE" === e2 && n2.ok && (this.activeSubscriptions--, this.logTrace("Unsubscribed", t2, s2)), this.inactive && this.inactivityTimer.schedule(() => {
|
|
410
410
|
this.stateMachine.transition("stop");
|
|
411
411
|
}), n2;
|
|
412
412
|
});
|
|
@@ -417,6 +417,8 @@ class A {
|
|
|
417
417
|
isConnected() {
|
|
418
418
|
return "READY" === this.stateMachine.state;
|
|
419
419
|
}
|
|
420
|
+
logTrace(e2, t2, s2) {
|
|
421
|
+
}
|
|
420
422
|
}
|
|
421
423
|
class E {
|
|
422
424
|
constructor(e2, t2, s2) {
|
|
@@ -769,7 +771,7 @@ class j {
|
|
|
769
771
|
}
|
|
770
772
|
class $ extends j {
|
|
771
773
|
constructor(e2, t2) {
|
|
772
|
-
super(e2), this.onTeardown = t2, this._error = null, this._lastGoodState = Promise.resolve(void 0);
|
|
774
|
+
super(e2), this.onTeardown = t2, this._error = null, this._lastGoodState = Promise.resolve(void 0), this.registerNewState(e2.resultPromise);
|
|
773
775
|
}
|
|
774
776
|
get error() {
|
|
775
777
|
return this._error;
|
|
@@ -3394,7 +3396,7 @@ class ps {
|
|
|
3394
3396
|
function fs({ method: e2, url: t2, data: s2, options: n2, attempts: r2, shouldRetry: i2, authProvider: o2 }) {
|
|
3395
3397
|
var _a2;
|
|
3396
3398
|
(!r2 || r2 <= 0) && (r2 = 1);
|
|
3397
|
-
const u2 = { "x-talkjs-client-build": "jssdk-dev", "x-talkjs-client-date": "2025-09-
|
|
3399
|
+
const u2 = { "x-talkjs-client-build": "jssdk-dev", "x-talkjs-client-date": "2025-09-25T14:26:35.703Z" };
|
|
3398
3400
|
s2 instanceof FormData || (u2["Content-Type"] = (_a2 = n2 == null ? void 0 : n2.contentType) != null ? _a2 : "application/json");
|
|
3399
3401
|
return a(r2, () => __async(this, null, function* () {
|
|
3400
3402
|
if (o2) {
|
|
@@ -3447,7 +3449,7 @@ const Cs = gs.startsWith("app.talkjs.com");
|
|
|
3447
3449
|
const As = "undefined" == typeof window ? { log: (e2) => Promise.resolve(), setData: (e2) => {
|
|
3448
3450
|
} } : new class {
|
|
3449
3451
|
constructor(e2) {
|
|
3450
|
-
this._timeCreated = Date.now(), this._enabled = Cs, this._trackJSData = { customer: { application: "", correlationId: "", sessionId: "", token: "", userId: "", version: "dev-2025-09-
|
|
3452
|
+
this._timeCreated = Date.now(), this._enabled = Cs, this._trackJSData = { customer: { application: "", correlationId: "", sessionId: "", token: "", userId: "", version: "dev-2025-09-25T14:26:35.703Z" }, 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: (/* @__PURE__ */ new Date()).toISOString(), version: "dev-2025-09-25T14:26:35.703Z", throttled: 0 }, this._url = `https://capture.trackjs.com/capture?token=${e2}`, this._trackJSData.customer.token = e2;
|
|
3451
3453
|
}
|
|
3452
3454
|
setData({ appId: e2, meId: t2, sessionId: s2 }) {
|
|
3453
3455
|
this._trackJSData.customer.userId = e2, this._trackJSData.customer.sessionId = `${e2}/${t2}`, this._trackJSData.customer.correlationId = s2;
|
|
@@ -3695,6 +3697,7 @@ const Ss = new class {
|
|
|
3695
3697
|
}
|
|
3696
3698
|
}();
|
|
3697
3699
|
function Ts(e2) {
|
|
3700
|
+
if (!e2) throw new Error("[TalkJS] Must provide an options object to `getTalkSession`");
|
|
3698
3701
|
return e2.forceCreateNew ? new Ds(e2) : Ss.getOrCreate(e2);
|
|
3699
3702
|
}
|
|
3700
3703
|
class Ds {
|
|
@@ -3709,7 +3712,7 @@ class Ds {
|
|
|
3709
3712
|
const { appId: t2, userId: s2, token: n2, tokenFetcher: r2, signature: i2 } = e2;
|
|
3710
3713
|
this._appId = t2, this._apiUrls = e2.apiUrls ? new ps(e2.apiUrls.realtimeWsApiUrl, e2.apiUrls.internalHttpApiUrl, e2.apiUrls.restApiHttpUrl) : ps.fromHost(e2.host), this._authProvider = new ks(this._apiUrls, t2, s2, n2, r2, i2);
|
|
3711
3714
|
const a2 = Math.random().toString().split(".")[1];
|
|
3712
|
-
this._realtimeClient = new Ie(this._apiUrls.getRealtimeWsUrl(t2, s2, "1.5.
|
|
3715
|
+
this._realtimeClient = new Ie(this._apiUrls.getRealtimeWsUrl(t2, s2, "1.5.3", a2, e2.clientBuild), s2, this._authProvider), this.currentUser = new De(this._realtimeClient.userId, this._realtimeClient), this._terminationReason = o(), this._terminationReason.promise.then((e3) => {
|
|
3713
3716
|
console.error(`[TalkSession] ${e3}`);
|
|
3714
3717
|
}), function(e3, t3, s3) {
|
|
3715
3718
|
return __async(this, null, function* () {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@talkjs/core",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.4",
|
|
4
4
|
"description": "Lets you connect to your TalkJS chat as a user and read, subscribe to, and update your chat data.",
|
|
5
5
|
"bugs": {
|
|
6
6
|
"url": "https://talkjs.com/?chat"
|
|
@@ -26,6 +26,7 @@
|
|
|
26
26
|
}
|
|
27
27
|
},
|
|
28
28
|
"scripts": {
|
|
29
|
+
"dev": "vite demo",
|
|
29
30
|
"typecheck": "tsc",
|
|
30
31
|
"lint": "eslint --max-warnings=0",
|
|
31
32
|
"test": "vitest run",
|