PageSourceSearch

https://assets.taskrabbit.com/_next/static/chunks/da3c5f25-277b368138622fbe.js

js taskrabbit.com collected 2026-09-24 09:12:00 UTC 267,199 bytes, 2 lines download raw bytes

1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3138],{40361:(e,t,s)=>{s.d(t,{$0p:()=>tZ,B$M:()=>eR,BDe:()=>B,Byk:()=>eD,GkB:()=>eI,H5z:()=>eL,Jwm:()=>tc,KcZ:()=>eT,OTL:()=>t5,Oc7:()=>eM,QZx:()=>ew,R2Q:()=>ev,STC:()=>t4,Tpk:()=>th,Ux6:()=>eU,VeN:()=>tu,Vv6:()=>ex,ZVi:()=>sj,byb:()=>eS,e9t:()=>ek,fyH:()=>ep,hwK:()=>V,hxx:()=>is,iJg:()=>eC,lF4:()=>td,nLB:()=>eE,ocW:()=>sh});var i=s(48983),a=s(79188),n=s(29735),r=s(53927),o=s(82176),l=s(6109).Buffer,h=s(29143),d=Object.create,c=Object.defineProperty,u=Object.getOwnPropertyDescriptor,g=Object.getOwnPropertyNames,p=Object.getPrototypeOf,m=Object.prototype.hasOwnProperty,f=(e,t)=>function(){try{return t||(0,e[g(e)[0]])((t={exports:{}}).exports,t),t.exports}catch(e){throw t=0,e}},y=(e,t,s)=>(s=null!=e?d(p(e)):{},((e,t,s,i)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let s of g(t))m.call(e,s)||void 0===s||c(e,s,{get:()=>t[s],enumerable:!(i=u(t,s))||i.enumerable});return e})(!t&&e&&e.__esModule?s:c(s,"default",{value:e,enumerable:!0}),e)),_=f({"(disabled):https"(){}}),b=f({"(disabled):node_modules/jsonwebtoken/index.js"(){}}),w=f({"(disabled):crypto"(){}}),v=f({"(disabled):zlib"(){}});function C(e){return"string"==typeof e}var S=class{constructor(e,t,s){this.client=e,this.id=t,this.data=s}
1async create(){let e={id:this.id,message_template:this.data?.message_template,segment_ids:this.data?.segment_ids,sender_id:this.data?.sender_id,sender_mode:this.data?.sender_mode,sender_visibility:this.data?.sender_visibility,channel_template:this.data?.channel_template,create_channels:this.data?.create_channels,show_channels:this.data?.show_channels,description:this.data?.description,name:this.data?.name,skip_push:this.data?.skip_push,skip_webhook:this.data?.skip_webhook,user_ids:this.data?.user_ids},t=await this.client.createCampaign(e);return this.id=t.campaign.id,this.data=t.campaign,t}verifyCampaignId(){if(!this.id)throw Error("Campaign id is missing. Either create the campaign using campaign.create() or set the id during instantiation - const campaign = client.campaign(id)")}async start(e){return this.verifyCampaignId(),await this.client.startCampaign(this.id,e)}update(e){return this.verifyCampaignId(),this.client.updateCampaign(this.id,e)}async delete(){return this.verifyCampaignId(),await this.client.deleteCampaign(this.id)}stop(){return this.verifyCampaignId(),this.client.stopCampaign(this.id)}get(e){return this.verifyCampaignId(),this.client.getCampaign(this.id,e)}},R=class{constructor(e){this.client=e}async addMembers(e,t){return await this.client.updateChannelsBatch({operation:"addMembers",filter:e,members:t})}async removeMembers(e,t){return await this.client.updateChannelsBatch({operation:"removeMembers",filter:e,members:t})}async inviteMembers(e,t){return await this.client.updateChannelsBatch({operation:"inviteMembers",filter:e,members:t})}async addModerators(e,t){return await this.client.updateChannelsBatch({operation:"addModerators",filter:e,members:t})}async demoteModerators(e,t){return await this.client.updateChannelsBatch({operation:"demoteModerators",filter:e,members:t})}async assignRoles(e,t){return await this.client.updateChannelsBatch({operation:"assignRoles",filter:e,members:t})}async hide(e){return await this.client.updateChannelsBatch({operation:"hide",filter:e})}async show(e){return await this.client.updateChannelsBatch({operation:"show",filter:e})}async archive(e){return await this.client.updateChannelsBatch({operation:"archive",filter:e})}async unarchive(e){return await this.client.updateChannelsBatch({operation:"unarchive",filter:e})}async updateData(e,t){return await this.client.updateChannelsBatch({operation:"updateData",filter:e,data:t})}},U=y(_()),M=Object.freeze({hasNext:!1,hasPrev:!1}),x=Object.freeze({created_at:!0,deleted_at:!0,pinned_at:!0,updated_at:!0,command:!0,mentioned_groups:!0,mentioned_users:!0,quoted_message:!0,latest_reactions:!0,own_reactions:!0,reaction_counts:!0,reply_count:!0,i18n:!0,t
1ype:!0,html:!0,__html:!0,user:!0}),L=Object.freeze({error:!0});function I(e,t){e.then().catch(e=>{console.warn(`failed to do ${t}, ran into error: `,e)})}var D=e=>new Promise(t=>setTimeout(t,e));function k(e){return"function"==typeof e||e instanceof Function||"[object Function]"===Object.prototype.toString.call(e)}var T={TOKEN_EXPIRED:40,WS_CLOSED_SUCCESS:1e3};function E(e){let t=[];for(let s of Array.isArray(e)?e:[e]){let e=Object.entries(s);for(let[s,i]of(e.length>1&&console.warn("client._buildSort() - multiple fields in a single sort object detected. Object's field order is not guaranteed"),e))t.push({field:s,direction:i})}return t}function A(e){let t=Math.min(500+2e3*e,25e3),s=Math.min(Math.max(250,(e-1)*2e3),25e3);return Math.floor(Math.random()*(t-s)+s)}function P(e){let t="";for(let s=0;s<e.length;s++)t+=e[s].toString(16).padStart(2,"0");return t}function O(){let e=function(e){let t=new Uint8Array(16);return F(t),t}(16);return e[6]=15&e[6]|64,e[8]=191&e[8]|128,P(e.subarray(0,4))+"-"+P(e.subarray(4,6))+"-"+P(e.subarray(6,8))+"-"+P(e.subarray(8,10))+"-"+P(e.subarray(10,16))}var F="undefined"!=typeof crypto&&void 0!==crypto?.getRandomValues?crypto.getRandomValues.bind(crypto):"undefined"!=typeof msCrypto?msCrypto.getRandomValues.bind(msCrypto):function(e){let t=Math.pow(2,8*e.byteLength/e.length);for(let s=0;s<e.length;s++)e[s]=Math.random()*t};function $(e){"undefined"!=typeof window&&window.addEventListener&&(window.addEventListener("offline",e),window.addEventListener("online",e))}function N(e){"undefined"!=typeof window&&window.removeEventListener&&(window.removeEventListener("offline",e),window.removeEventListener("online",e))}var q=e=>{let t=[];for(let s in e)void 0!==e[s]&&(Array.isArray(e[s])||"object"==typeof e[s]?t.push(`${s}=${encodeURIComponent(JSON.stringify(e[s]))}`):t.push(`${s}=${encodeURIComponent(e[s])}`));return t.join("&")};function V(e){let t=e=>e?{...e,created_at:e.created_at?new Date(e.created_at):new Date,deleted_at:e.deleted_at?new Date(e.deleted_at):null,pinned_at:e.pinned_at?new Date(e.pinned_at):null,reaction_groups:function(e,t,s){if(e)return e;if(t&&s){let e={};for(let i of Object.keys(t))e[i]={count:t[i],sum_scores:s[i]};return e}return null}(e.reaction_groups,e.reaction_counts,e.reaction_scores),status:e.status||"received",updated_at:e.updated_at?new Date(e.updated_at):new Date}:null;return{...t(e),error:e.error??null,quoted_message:t(e.quoted_message)}}var B=e=>{let{created_at:t,updated_at:s,deleted_at:i,error:a,status:n,latest_reactions:r,own_reactions:o,reaction_counts:l,reaction_scores:h,reply_count:d,command:c,html:u,i18n:g,mentioned_groups:p,quoted_message:m,mentioned_users:f,...y}=e;return{...y,pinned_at:y.pinned_at?.toISOString(),mentioned_users:f?.map(e=>e.id)}},Q=e=>{let t={...x,...L};return{...Object.fromEntries(Object.entries(e).filter(([e])=>!t[e])),pinned:!!e.pinned_at,mentioned_users:e.mentioned_users?.map(e=>"string"==typeof e?e:e.id)}},j=({message:e,deletedAt:t,hardDelete:s=!1})=>s?{attachments:[],cid:e.cid,created_at:e.created_at,deleted_at:t,id:e.id,latest_reactions:[],mentioned_users:[],own_reactions:[],parent_id:e.parent_id,reply_count:e.reply_count,status:e.status,thread_participants:e.thread_participants,type:"deleted",updated_at:e.updated_at,user:e.user}:{...e,attachments:[],type:"deleted",deleted_at:t},W=({messages:e,user:t,hardDelete:s=!1,deletedAt:i})=>{for(let a=0;a<e.length;a++){let n=e[a];n.user?.id===t.id&&(e[a]="deleted"===n.type?n:j({message:n,hardDelete:s,deletedAt:i})),e[a].quoted_message&&n.quoted_message?.user?.id===t.id&&(e[a].quoted_message="deleted"===n.quoted_message.type?n.quoted_message:j({message:e[a].quoted_message,hardDelete:s,deletedAt:i}))}},z=({needle:e,sortedArray:t,selectKey:s,selectValueToCompare:i=e=>e,sortDirection:a="ascending"})=>
1{if(!t.length)return 0;let n=0,r=t.length-1,o=0,l=()=>{o=Math.round((n+r)/2)},h=i(e);for(;n<=r;){l();let e=i(t[o]);"ascending"===a&&h<e||"descending"===a&&h>=e?r=o-1:n=o+1}if(s){let r=s(e),o="ascending"===a?-1:1;for(let e=n+o;0<=e&&e<t.length&&i(t[e])===h;e+=o)if(s(t[e])===r)return e}return n};function H(e,t,s=!1,i="created_at",a=!0){let n=a||s,r=[...e];if(s&&(r=r.filter(e=>!(e.id&&t.id===e.id))),0===r.length&&n)return r.concat(t);if(0===r.length)return r;let o=t[i].getTime(),l=r.at(-1)[i].getTime()<o;if(l&&n)return r.concat(t);if(l)return r;let h=z({needle:t,sortedArray:r,sortDirection:"ascending",selectValueToCompare:e=>e[i].getTime(),selectKey:e=>e.id});return!s&&t.id&&r[h]&&t.id===r[h].id?r[h]=t:n&&r.splice(h,0,t),r}var G=(e,t=0,{leading:s=!1,trailing:i=!0}={})=>{let a,n=null,r=null,o=(...o)=>(n?clearTimeout(n):s&&(a=e(...o)),i&&(r=o),n=setTimeout(()=>{r&&(a=e(...r),r=null),n=null},t),a);return o.cancel=()=>{n&&clearTimeout(n)},o.flush=()=>(n&&(clearTimeout(n),n=null,r&&(a=e(...r))),a),o},J=(e,t=200,{leading:s=!0,trailing:i=!1}={})=>{let a=null,n=null;return(...r)=>{if(a){i&&(n=r);return}s&&e(...r);let o=()=>{if(n){e(...n),n=null,a=setTimeout(o,t);return}a=null};a=setTimeout(o,t)}},K=e=>e.parentSet.messages.length+(e.returnedPage.length-e.filteredReturnedPage.length)<e.returnedPage.length?(e.logger?.("error","Corrupted message set state: parent set size < returned page size"),e.parentSet.pagination):e.messagePaginationOptions?.created_at_around?(({parentSet:e,requestedPageSize:t,returnedPage:s,filteredReturnedPage:i,messagePaginationOptions:a})=>{let n,r,o,l,h={...e.pagination};if(!a?.created_at_around)return h;let d=new Date(a.created_at_around),[c,u]=[s[0],s.slice(-1)[0]],g=!!c?.created_at&&new Date(c.created_at)>d,p=!!u?.created_at&&new Date(u.created_at)<d,m=t>e.messages.length&&t>s.length,f=(t>e.messages.length||e.messages.length>=s.length)&&t>s.length;if(g)n=!1,o=!0,m&&(r=!1,l=!0);else if(p)r=!1,l=!0,m&&(n=!1,o=!0);else if(f)r=n=!1,o=l=!0;else{let[t,a]=[i[0],i.slice(-1)[0]],[h,c]=[t?.id&&t.id===e.messages[0]?.id,a?.id&&a.id===e.messages.slice(-1)[0]?.id];o=h,l=c;let u=Math.floor(s.length/2),g=function(e,t){let s=0,i=e.length-1;for(;s<=i;){let a=Math.floor((s+i)/2),n=e[a].created_at;if(!n){s+=1;continue}let r=new Date(n);if(r.getTime()===t.getTime())return a;r.getTime()<t.getTime()?s=a+1:i=a-1}return s}(s,d);-1!==g&&(n=u<=g,r=u>=g)}return o&&void 0!==n&&(h.hasPrev=n),l&&void 0!==r&&(h.hasNext=r),h})(e):e.messagePaginationOptions?.id_around?(({parentSet:e,requestedPageSize:t,returnedPage:s,filteredReturnedPage:i,messagePaginationOptions:a})=>{let n,r,o={...e.pagination},{id_around:l}=a||{};if(!l)return o;let[h,d]=[i[0],i.slice(-1)[0]],[c,u]=[h?.id===e.messages[0]?.id,d?.id===e.messages.slice(-1)[0]?.id],g=c,p=u,m=Math.floor(s.length/2);if((t>e.messages.length||e.messages.length>=s.length)&&t>s.length)r=n=!1,g=p=!0;else if(!s[m])return o;else if(s[m].id===l)n=r=!0;else{let e,t=[s.slice(0,m),s.slice(m)];n=r=!0;for(let s=0;s<t.length;s++)(e=t[s].find(e=>e.id===l))&&0===s&&(n=!1),e&&1===s&&(r=!1)}return g&&void 0!==n&&(o.hasPrev=n),p&&void 0!==r&&(o.hasNext=r),o})(e):(({parentSet:e,requestedPageSize:t,returnedPage:s,filteredReturnedPage:i,messagePaginationOptions:a})=>{let n,r,o={...e.pagination},[l,h]=[i[0],i.slice(-1)[0]],[d,c]=[l?.id&&l.id===e.messages[0]?.id,h?.id&&h.id===e.messages.slice(-1)[0]?.id],u=a&&(a.created_at_after_or_equal||a.created_at_after||a.id_gt||a.id_gte),g=void 0===a||a.created_at_before_or_equal||a.created_at_before||a.id_lt||a.id_lte||a.offset,p=!u&&!g&&!a?.id_around&&!a?.created_at_around,m=s.length>=t;(void 0!==g||p)&&(n=m),void 0!==u&&(r=m);let f=0===s.length;return(d||f)&&void 0!==n&&(o.hasPrev=n),(c||f)&&void 0!==r&&(o.hasNext=r),o})(e),X={},Z=async({channel:e,client:t,id:s,members:i,options:a,type:n})=>{if(!e&&!n)throw Error("Channel or channel type have to be provided to query a channel.");let r=e||t.channel(n,s,{members:i}),o=r.id?r.cid:i&&i.length?Y(r.type,i):void 0;if(!o)throw Error("Channel ID or channel members array have to be provided to query a channel.");let l=X[o];if(l)await l;else try{X[o]=r.watch(a),await X[o]}finally{delete X[o]}return r},Y=(e,t)=>
1{if(!t)return;let s=[...t].sort().join(",");if(s)return`${e}:!members-${s}`},ee=e=>{if(!e)return!1;let t=e.state.membership;return!!t?.pinned_at},et=e=>{if(!e)return!1;let t=e.state.membership;return!!t?.archived_at},es=e=>!!e&&"boolean"==typeof e.archived,ei=({atIndex:e,sort:t,targetKey:s})=>{if(!t)return null;let i=null;if(Array.isArray(t))i=t[e]??null;else{let a=0;for(let n in t){if(a!==e){a++;continue}if(n!==s)return null;i=t;break}}return i?.[s]??null},ea=e=>{let t=en({sort:e});return"number"==typeof t&&1===Math.abs(t)},en=({sort:e})=>ei({atIndex:0,sort:e,targetKey:"pinned_at"}),er=({channels:e})=>{let t=null;for(let s of e){if(!ee(s))break;"number"==typeof t?t++:t=0}return t},eo=({channels:e,channelToMove:t,channelToMoveIndexWithinChannels:s,sort:i})=>{let a=s??e.findIndex(e=>e.cid===t.cid),n=a>=0,r=0===a,o=ea(i),l=ee(t);if(r||o&&l)return e;let h=[...e];n&&h.splice(a,1);let d=null;return o&&(d=er({channels:h})),h.splice("number"==typeof d?d+1:0,0,t),h},el=e=>"error"===e.type&&(e.moderation_details?.action==="MESSAGE_RESPONSE_ACTION_REMOVE"||e.moderation?.action==="remove"),eh=(e,t)=>({newestMessageA:new Date(e[0]?.created_at??0),oldestMessageA:new Date(e.slice(-1)[0]?.created_at??0),newestMessageB:new Date(t[0]?.created_at??0),oldestMessageB:new Date(t.slice(-1)[0]?.created_at??0)}),ed=(e,t)=>{let{newestMessageA:s,newestMessageB:i,oldestMessageA:a,oldestMessageB:n}=eh(e,t);return s>=i&&n>=a},ec=(e,t)=>{let{newestMessageA:s,newestMessageB:i,oldestMessageA:a,oldestMessageB:n}=eh(e,t);return a<n&&n<s&&s<i},eu=class{constructor(e){this.messageSets=[],this.formatMessage=e=>V(e),this.setIsUpToDate=e=>{this.isUpToDate=e},this.removeMessageFromArray=(e,t)=>{let s=e.filter(e=>!(e.id&&t.id&&e.id===t.id));return{removed:s.length<e.length,result:s}},this.updateUserMessages=e=>{let t=(e,t)=>{for(let s=0;s<e.length;s++){let i=e[s];i.user?.id===t.id&&(e[s]={...i,user:t})}};for(let s in this.messageSets.forEach(s=>t(s.messages,e)),this.threads)t(this.threads[s],e);t(this.pinnedMessages,e)},this.deleteUserMessages=(e,t=!1,s)=>{for(let i in this.messageSets.forEach(({messages:i})=>W({messages:i,user:e,hardDelete:t,deletedAt:s??null})),this.threads)W({messages:this.threads[i],user:e,hardDelete:t,deletedAt:s??null});W({messages:this.pinnedMessages,user:e,hardDelete:t,deletedAt:s??null})},this.findMessageSetByOldestTimestamp=e=>{let t=0,s=this.messageSets.length;for(;t<s;){let i=t+s>>>1,a=this.messageSets[i];if(0===a.messages.length)return -1;a.messages[0].created_at.getTime()<=e?s=i:t=i+1}return t},this._channel=e,this.watcher_count=0,this.typing={},this.read={},this.initMessages(),this.pinnedMessages=[],this.pending_messages=[],this.threads={},this.mutedUsers=[],this.watchers={},this.members={},this.membership={},this.unreadCount=0,this.isUpToDate=!0,this.last_message_at=e?.state?.last_message_at!=null?new Date(e.state.last_message_at):null}get messages(){return this.messageSets.find(e=>e.isCurrent)?.messages||[]}set messages(e){let t=this.messageSets.findIndex(e=>e.isCurrent);this.messageSets[t].messages=e}get latestMessages(){return this.messageSets.find(e=>e.isLatest)?.messages||[]}set latestMessages(e){let t=this.messageSets.findIndex(e=>e.isLatest);this.messageSets[t].messages=e}get messagePagination(){return this.messageSets.find(e=>e.isCurrent)?.pagination||M}pruneOldest(e){let t=this.messageSets.findIndex(e=>e.isCurrent);if(this.messageSets[t].isLatest){let s=this.messageSets[t].messages;this.messageSets[t].messages=s.slice(-e),this.messageSets[t].pagination.hasPrev=!0}}addMessageSorted(e,t=!1,s=!0,i="latest"){return this.addMessagesSorted([e],t,!1,s,i)}addMessagesSorted(e,t=!1,s=!1,i=!0,a="current"){let{messagesToAdd:n,targetMessageSetIndex:r}=this.findTargetMessageSet(e,i,a),o=[];for(let e=0;e<n.length;e+=1){let a;if(n[e].shadowed&&i){o.push(n[e].id);continue}n[e].created_at instanceof Date?a=n[e]:((a=this.formatMessage(n[e])).user&&this._channel?.cid&&this._channel.getClient().state.updateUserReference(a.user,this._channel.cid),s&&a.id&&this.threads[a.id]&&!this._channel.getClient().preventThreadCleanup&&delete this.threads[a.id],!(this._channel.getConfig()?.skip_last_msg_update_for_system_msgs&&"system"===a.type)&&(!this.last_message_at||a.created_at.getTime()>this.last_message_at.getTime())&&(this.last_message_at=new Date(a.created_at.getTime())));let l=a.parent_id;if((!l||a.show_in_channel)&&-1!==r&&(this.messageSets[r].messages=this._addToMessageList(this.messageSets[r].messages,a,t,"created_at",i)),l&&!s){let e=this.threads[l]||[];this.threads[l]=this._addToMessageList(e,a,t,"created_at",i)}}return{messageSet:this.messageSets[r],filteredMessageIds:o}}addPinnedMessages(e){for(let t=0;t<e.length;t+=1)this.addPinnedMessage(e[t])}addPinnedMessage(e){this.pinnedMessages=this._addToMessageList(this.pinnedMessages,this.formatMessage(e),!1,"pinned_at")}removePinnedMessage(e){let{result:t}=this.removeMessageFromArray(this.pinnedMessages,e);this.pinnedMessages=t}addReaction(e,t,s){let i;if(t||(i=this.findMessage(e.message_id)),!t&&!i)return;let a=t??i,n={id:a?.id,parent_id:a?.parent_id,pinned:a?.pinned,show_in_channel:a?.show_in_channel};return this._updateMessage(n,a=>{if(t){let i={...t};return t.own_reactions=this._addOwnReactionToMessage(a.own_reactions,e,s),i.own_reactions=this._channel.getClient().userID===e.user_id?t.own_reactions:a.own_reactions,this.formatMessage(i)}return i?this._addReactionToState(i,e,s):a}),t??i}
1_addReactionToState(e,t,s){if(e.reaction_groups||(e.reaction_groups={}),s)for(let t of e.own_reactions??[]){let s=e.reaction_groups[t.type];e.reaction_groups[t.type]={...s,count:s.count-1,sum_scores:s.sum_scores-(t.score??1)},e.reaction_groups[t.type].count<1&&delete e.reaction_groups[t.type]}let i=e.reaction_groups[t.type],a=t.score??1;e.reaction_groups[t.type]=i?{...i,count:i.count+1,sum_scores:i.sum_scores+a,last_reaction_at:t.created_at}:{count:1,first_reaction_at:t.created_at,last_reaction_at:t.created_at,sum_scores:a},e.own_reactions=this._addOwnReactionToMessage(e.own_reactions,t,s);let n=this._channel.getClient().userID;return e.latest_reactions=s?[...(e.latest_reactions||[]).filter(e=>e.user_id!==n),t]:[...e.latest_reactions||[],t],e}_addOwnReactionToMessage(e,t,s){return e=(e=s?[]:this._removeOwnReactionFromMessage(e,t))||[],this._channel.getClient().userID===t.user_id&&e.push(t),e}_removeOwnReactionFromMessage(e,t){return e?e.filter(e=>e.user_id!==t.user_id||e.type!==t.type):e}removeReaction(e,t){let s;if(t||(s=this.findMessage(e.message_id)),!t&&!s)return;let i=t??s,a={id:i?.id,parent_id:i?.parent_id,pinned:i?.pinned,show_in_channel:i?.show_in_channel};return this._updateMessage(a,i=>t?(t.own_reactions=this._removeOwnReactionFromMessage(i.own_reactions,e),this.formatMessage(t)):s?this._removeReactionFromState(s,e):i),t}_removeReactionFromState(e,t){let s=e.own_reactions?.find(e=>e.type===t.type);if(s&&e.reaction_groups?.[s.type]){let t=e.reaction_groups[s.type];e.reaction_groups[s.type]={...t,count:t.count-1,sum_scores:t.sum_scores-(s.score??1)},e.reaction_groups[s.type].count<1&&delete e.reaction_groups[s.type]}e.own_reactions=e.own_reactions?.filter(e=>e.type!==t.type);let i=this._channel.getClient().userID;return e.latest_reactions=e.latest_reactions?.filter(e=>e.user_id!==i||e.type!==t.type),e}_updateQuotedMessageReferences({message:e,remove:t}){let s=s=>{let i=s.reduce((s,i)=>(i.quoted_message_id===e.id&&s.push({...{...i,created_at:i.created_at.toISOString(),pinned_at:i.pinned_at?.toISOString(),updated_at:i.updated_at?.toISOString()},quoted_message:t?{...e,attachments:[]}:e}),s),[]);this.addMessagesSorted(i,!0)};e.parent_id?e.parent_id&&this.threads[e.parent_id]&&s(this.threads[e.parent_id]):this.messageSets.forEach(e=>s(e.messages))}removeQuotedMessageReferences(e){this._updateQuotedMessageReferences({message:e,remove:!0})}_updateMessage(e,t){let{parent_id:s,show_in_channel:i,pinned:a}=e;if(s&&this.threads[s]){let i=this.threads[s],a=i.findIndex(t=>t.id===e.id);-1!==a&&(i[a]=t(i[a]),this.threads[s]=i)}if(!i&&!s||i){let s=this.findMessageSetIndex(e);if(-1!==s){let i=this.messageSets[s].messages.findIndex(t=>t.id===e.id);if(-1!==i){let e=t(this.messageSets[s].messages[i]);this.messageSets[s].messages[i]=e}}}if(a){let s=this.pinnedMessages.findIndex(t=>t.id===e.id);-1!==s&&(this.pinnedMessages[s]=t(this.pinnedMessages[s]))}}_addToMessageList(e,t,s=!1,i="created_at",a=!0){return H(e,t,s,i,a)}removeMessage(e){let t=!1;if(e.parent_id&&this.threads[e.parent_id]){let{removed:s,result:i}=this.removeMessageFromArray(this.threads[e.parent_id],e);this.threads[e.parent_id]=i,t=s}else{let s=e.messageSetIndex??this.findMessageSetIndex(e);if(-1!==s){let{removed:i,result:a}=this.removeMessageFromArray(this.messageSets[s].messages,e);this.messageSets[s].messages=a,t=i}}return t}filterErrorMessages(){let e=this.latestMessages.filter(e=>"error"!==e.type);for(let e of this.latestMessages.filter(el))this._channel.getClient().offlineDb?.hardDeleteMessage({id:e.id});this.latestMessages=e}clean(){let e=new Date;for(let[t,s]of Object.entries(this.typing)){let i="string"==typeof s.received_at?new Date(s.received_at):s.received_at||new Date;e.getTime()-i.getTime()>7e3&&(delete this.typing[t],this._channel.getClient().dispatchEvent({cid:this._channel.cid,type:"typing.stop",user:{id:t}}))}}clearMessages(){this.initMessages(),this.pinnedMessages=[]}initMessages(){this.messageSets=[{messages:[],isLatest:!0,isCurrent:!0,pagination:{...M}}]}async loadMessageIntoState(e,t,s=25){let i,a=!1,n=!1,r=t||e;if("latest"===e){if(this.messages===this.latestMessages)return;i=this.messageSets.findIndex(e=>e.isLatest)}else i=this.findMessageSetIndex({id:r});-1!==i&&(this.switchToMessageSet(i),a=!0),n=!t||!!this.threads[t]?.find(t=>
1t.id===e),a&&n||(a||await this._channel.query({messages:{id_around:r,limit:s}},"new"),!n&&t&&await this._channel.getReplies(t,{id_around:e,limit:s}),-1!==(i=this.findMessageSetIndex({id:r}))&&this.switchToMessageSet(i))}findMessage(e,t){if(t){let s=this.threads[t];if(!s)return;return s.find(t=>t.id===e)}let s=this.findMessageSetIndex({id:e});if(-1!==s)return this.messageSets[s].messages.find(t=>t.id===e)}findMessageByTimestamp(e,t,s=!1){if(t&&!this.threads[t]||0===this.messageSets.length)return null;let i=this.findMessageSetByOldestTimestamp(e),a=this.messageSets[i]?.messages;if(!a?.length)return null;let n=a[0].created_at.getTime(),r=a.slice(-1)[0].created_at.getTime();if((e<n||r<e)&&s)return null;let o=0,l=a.length-1;for(;o<l;){let t=o+l>>>1;e<=a[t].created_at.getTime()?l=t:o=t+1}let h=a[o];return s?h.created_at.getTime()===e?h:null:h}switchToMessageSet(e){let t=this.messageSets.find(e=>e.isCurrent);t&&(t.isCurrent=!1,this.messageSets[e].isCurrent=!0)}areMessageSetsOverlap(e,t){return e.some(e=>t.find(t=>e.id===t.id))}findMessageSetIndex(e){return this.messageSets.findIndex(t=>!!t.messages.find(t=>t.id===e.id))}findTargetMessageSet(e,t=!0,s="current"){let i,a=e;if(0===e.length)return{targetMessageSetIndex:0,messagesToAdd:e};if(t){let t=this.messageSets.map((e,t)=>t).filter(t=>this.areMessageSetsOverlap(this.messageSets[t].messages,e)),n=this.messageSets.map((e,t)=>t).filter(t=>{let s,i;return ed(s=this.messageSets[t].messages,i=e.map(V))||ed(i,s)||ec(s,i)||ec(i,s)});switch(s){case"new":if(t.length>0)i=t[0];else if(n.length>0)i=n[0];else if(e.some(e=>!e.parent_id)){let t=this.findMessageSetByOldestTimestamp(new Date(e[0].created_at).getTime());if(-1===t)this.messageSets.push({messages:[],isCurrent:!1,isLatest:!1,pagination:{...M}}),i=this.messageSets.length-1;else{let e=0===t;this.messageSets.splice(t,0,{messages:[],isCurrent:!1,isLatest:e,pagination:{...M}}),e&&this.messageSets.slice(1).forEach(e=>{e.isLatest=!1}),i=t}}break;case"current":i=n.length>0?n[0]:this.messageSets.findIndex(e=>e.isCurrent);break;case"latest":i=n.length>0?n[0]:this.messageSets.findIndex(e=>e.isLatest);break;default:i=-1}let r=t.splice(0,1)[0],o=[...t];if(void 0!==r&&r!==i&&o.push(i),o.length>0){let t=this.messageSets[r],s=this.messageSets.filter((e,t)=>-1!==o.indexOf(t));s.forEach(e=>{t.isLatest=t.isLatest||e.isLatest,t.isCurrent=t.isCurrent||e.isCurrent,t.pagination.hasPrev=e.messages[0].created_at<t.messages[0].created_at?e.pagination.hasPrev:t.pagination.hasPrev,t.pagination.hasNext=t.messages.slice(-1)[0].created_at<e.messages.slice(-1)[0].created_at?e.pagination.hasNext:t.pagination.hasNext,a=[...a,...e.messages]}),s.forEach(e=>this.messageSets.splice(this.messageSets.indexOf(e),1)),i=this.messageSets.findIndex(t=>this.areMessageSetsOverlap(t.messages,e))}}else i=this.findMessageSetIndex(e[0]);return{targetMessageSetIndex:i,messagesToAdd:a}}},eg=()=>{},ep=class{constructor(e){this.value=e,this.handlers=new Set,this.preprocessors=new Set,this.partialNext=e=>this.next(t=>({...t,...e})),this.subscribeWithSelector=(e,t)=>{let s;return this.subscribe(i=>{let a=e(i),n=void 0===s;for(let e in s)if(s[e]!==a[e]){n=!0;break}if(!n)return;let r=s;s=a,t(a,r)})}}merge(e){return new em({original:this,merged:e})}next(e){let t="function"==typeof e?e(this.value):e;if(t===this.value)return;this.preprocessors.forEach(e=>e(t,this.value));let s=this.value;this.value=t,this.handlers.forEach(e=>e(this.value,s))}getLatestValue(){return this.value}subscribe(e){return e(this.value,void 0),this.handlers.add(e),()=>{this.handlers.delete(e)}}addPreprocessor(e){return this.preprocessors.add(e),()=>{this.preprocessors.delete(e)}}},em=class e extends ep{constructor({original:t,merged:s}){let i=t.getLatestValue(),a=s.getLatestValue();super({...i,...a}),this.next=()=>{console.warn(`${e.name}.next is disabled, call original.next or merged.next instead`)},this.partialNext=()=>{console.warn(`${e.name}.partialNext is disabled, call original.partialNext or merged.partialNext instead`)},this.cachedOriginalValue=i,this.cachedMergedValue=a,this.original=t,this.merged=s}subscribe(e){let t=[];if(!this.handlers.size){let e=e=>{super.next(t=>({...t,...e}))};t.push(this.original.subscribe(t=>{t!==this.cachedOriginalValue&&(this.cachedOriginalValue=t,e(t))}),this.merged.subscribe(t=>{t!==this.cachedMergedValue&&(this.cachedMergedValue=t,e(t))}))}return t.push(super.subscribe(e)),()=>
1{t.forEach(e=>e())}}getLatestValue(){if(!this.handlers.size){let e=this.original.getLatestValue(),t=this.merged.getLatestValue();(e!==this.cachedOriginalValue||t!==this.cachedMergedValue)&&(this.value={...e,...t},this.cachedMergedValue=t,this.cachedOriginalValue=e)}return super.getLatestValue()}addPreprocessor(){return console.warn(`${e.name}.addPreprocessor is disabled, call original.addPreprocessor or merged.addPreprocessor instead`),eg}},ef=class e{constructor(){this.unsubscribeFunctions=new Set,this.refCount=0}get hasSubscriptions(){return this.unsubscribeFunctions.size>0}addUnsubscribeFunction(e){this.unsubscribeFunctions.add(e)}incrementRefCount(){return++this.refCount}unregisterSubscriptions(){return this.refCount>1?this.refCount--:(this.unsubscribeFunctions.forEach(e=>e()),this.unsubscribeFunctions.clear(),this.refCount=0),e.symbol}};ef.symbol=Symbol(ef.name);var ey=ef,e_=e=>{if(e instanceof Date)return e;if("string"==typeof e||"number"==typeof e){let t=new Date(e);if(!Number.isNaN(t.getTime()))return t}},eb=class extends ey{constructor({channel:e}){super(),this.timeout=null,this.registerSubscriptions=()=>{this.incrementRefCount(),this.hasSubscriptions||(this.addUnsubscribeFunction(this.channel.on("message.new",e=>{e.message?.user?.id&&e.message.user.id===this.getOwnUserId()&&this.setOwnLatestMessageDate(e_(e.message?.created_at))}).unsubscribe),this.addUnsubscribeFunction(this.channel.on("channel.updated",e=>{e.channel?.cooldown!==this.cooldownConfigSeconds&&this.refresh()}).unsubscribe))},this.setCooldownRemaining=e=>{this.state.partialNext({cooldownRemaining:e})},this.clearTimeout=()=>{this.timeout&&(clearTimeout(this.timeout),this.timeout=null)},this.refresh=()=>{let{cooldown:e=0,own_capabilities:t}=this.channel.data??{},s=(t??[]).includes("skip-slow-mode"),i=this.findOwnLatestMessageDate({messages:this.channel.state.latestMessages});if((e!==this.cooldownConfigSeconds||i?.getTime()!==this.ownLatestMessageDate?.getTime()||s!==this.canSkipCooldown)&&this.state.partialNext({cooldownConfigSeconds:e,ownLatestMessageDate:i,canSkipCooldown:s}),this.canSkipCooldown||0===this.cooldownConfigSeconds){this.clearTimeout(),0!==this.cooldownRemaining&&this.setCooldownRemaining(0);return}this.recalculate()},this.setOwnLatestMessageDate=e=>{this.state.partialNext({ownLatestMessageDate:e}),this.recalculate()},this.recalculate=()=>{this.clearTimeout();let{cooldownConfigSeconds:e,ownLatestMessageDate:t,canSkipCooldown:s}=this.state.getLatestValue(),i=null!=t?Math.max(0,(Date.now()-t.getTime())/1e3):void 0,a=!s&&void 0!==i&&e>i?Math.round(e-i):0;a!==this.cooldownRemaining&&this.setCooldownRemaining(a),a<=0||(this.timeout=setTimeout(()=>{this.recalculate()},1e3))},this.channel=e,this.state=new ep({cooldownConfigSeconds:0,cooldownRemaining:0,ownLatestMessageDate:void 0,canSkipCooldown:!1}),this.refresh()}get cooldownConfigSeconds(){return this.state.getLatestValue().cooldownConfigSeconds}get cooldownRemaining(){return this.state.getLatestValue().cooldownRemaining}get canSkipCooldown(){return this.state.getLatestValue().canSkipCooldown}get ownLatestMessageDate(){return this.state.getLatestValue().ownLatestMessageDate}getOwnUserId(){let e=this.channel.getClient();return e.userID??e.user?.id}findOwnLatestMessageDate({messages:e}){let t,s=this.getOwnUserId();if(s){for(let i=e.length-1;i>=0;i-=1){let a=e[i];if(a.user?.id!==s)continue;let n=e_(a.created_at);if(n&&((!t||n.getTime()>t.getTime())&&(t=n),t.getTime()>n.getTime()))break}return t}}},ew=e=>!!e?.og_scrape_url||!!e?.title_link,ev=e=>!!e?.localMetadata?.id,eC=(e,t=[])=>"file"===e.type||!!(e.mime_type&&-1===t.indexOf(e.mime_type)&&"video"!==e.type),eS=e=>eC(e)&&ev(e),eR=e=>"image"===e.type&&!ew(e),eU=e=>eR(e)&&ev(e),eM=e=>"audio"===e.type,ex=e=>eM(e)&&ev(e),eL=e=>"voiceRecording"===e.type,eI=e=>eL(e)&&ev(e),eD=(e,t=[])=>"video"===e.type||!!(e.mime_type&&-1!==t.indexOf(e.mime_type)),ek=e=>eD(e)&&ev(e),eT=e=>!!e.latitude&&!!e.longitude&&!!e.channel_cid,eE=e=>"giphy"===e.type,eA=e=>!!e.lastModified&&!("uri"in e),eP=e=>null!==e&&"object"==typeof e&&!eA(e)&&!(e=>e instanceof Blob&&!(e instanceof File))(e)&&"string"==typeof e.name&&"string"==typeof e.uri&&"number"==typeof e.size&&"string"==typeof e.type,eO=({blobsArray:e,fileName:t,mimeType:s})=>{let i=new Blob(e,{type:s});return new File([i],t,{type:i.type})},eF=e=>{let t=(e=>{let t=e.match(/\/([^/;]+)/);return t?.[1]})(e);return`file_${new Date().toISOString()}${t?"."+t:""}`},e$=e=>{let t=e.type;return t.startsWith("image/")&&!t.endsWith(".photoshop")},eN=e=>{if(!e)return null;if(ev(e))return e;let{localMetadata:t,...s}=e;return{localMetadata:{...t??{},id:t?.id||O()},...s}};eB(function(e,t){let s=!1;return{cb:()=>t().finally(()=>{s||eV.delete(e)}),onContinued:()=>s=!0}
1});var eq=eB(function(e,t){let s=new AbortController;return{cb:()=>s.signal.aborted?Promise.resolve("canceled"):t(s.signal).finally(()=>{s.signal.aborted||eV.delete(e)}),onContinued:()=>s.abort()}}),eV=new Map;function eB(e){return function(t,s){let{cb:i,onContinued:a}=e(t,s),n=eV.get(t);n?.onContinued();let r=n?n.promise.then(i,i):i();return eV.set(t,{promise:r,onContinued:a}),r}}var eQ=class{constructor(){this.middleware=[],this.id=O()}use(e){return this.middleware=this.middleware.concat(e),this}replace(e){let t=[...this.middleware];return e.forEach(e=>{let s=this.middleware.findIndex(t=>t.id===e.id);s>=0?t.splice(s,1,e):t.push(e)}),this.middleware=t,this}insert({middleware:e,position:t,unique:s}){s&&e.forEach(e=>{let t=this.middleware.findIndex(t=>t.id===e.id);t>=0&&this.middleware.splice(t,1)});let i=t.after||t.before,a=this.middleware.findIndex(e=>e.id===i),n=t.after?a+1:a;return this.middleware.splice(n,0,...e),this}setOrder(e){this.middleware=e.map(e=>this.middleware.find(t=>t.id===e)).filter(Boolean)}remove(e){(e||e.length)&&(this.middleware=this.middleware.filter(t=>"string"==typeof e?e!==t.id:!e.includes(t.id)))}async executeMiddlewareChain({eventName:e,initialValue:t,mode:s="cancelable"}){let i=-1,a=async(t,s,n)=>{if(t<=i)throw Error("next() called multiple times");if(i=t,t===this.middleware.length||n&&["complete","discard"].includes(n))return{state:s,status:n};let r=this.middleware[t].handlers[e];return r?await r({state:s,next:e=>a(t+1,e),complete:e=>a(t+1,e,"complete"),discard:()=>a(t+1,s,"discard"),forward:()=>a(t+1,s)}):a(t+1,s,n)},n="cancelable"===s?await eq(`middleware-execution-${this.id}-${e}`,async e=>{let s=await a(0,t);return e.aborted?"canceled":s}):await a(0,t);return"canceled"===n?{state:t,status:"discard"}:n}async execute({eventName:e,initialValue:t,mode:s}){return await this.executeMiddlewareChain({eventName:e,initialValue:t,mode:s})}},ej=class extends eQ{constructor({composer:e}){super(),this.use([{id:"stream-io/attachment-manager-middleware/upload-error",handlers:{postProcess:({state:t,discard:s,forward:i})=>{let{attachment:a,error:n}=t;if(!n)return i();if(!a)return s();let r=n instanceof Error?n.message:"unknown error";return e.client.notifications.addError({message:"Error uploading attachment",origin:{emitter:"AttachmentManager",context:{attachment:a}},options:{type:"api:attachment:upload:failed",metadata:{reason:r},originalError:n}}),i()}}},{id:"stream-io/attachment-manager-middleware/post-upload-enrichment",handlers:{postProcess:({state:e,discard:t,forward:s,next:i})=>{let{attachment:a,error:n,response:r}=e;if(n)return s();if(!a||!r)return t();let o={...a},l=a.localMetadata.previewUri;return l&&(l.startsWith("blob:")&&URL.revokeObjectURL(l),delete o.localMetadata.previewUri),eU(a)?o.image_url=r.file:o.asset_url=r.file,r.thumb_url&&(o.thumb_url=r.thumb_url),i({...e,attachment:o})}}}])}},eW=class extends eQ{constructor({composer:e}){super(),this.use([{id:"stream-io/attachment-manager-middleware/file-upload-config-check",handlers:{prepare:async({state:t,next:s,discard:i})=>{let{attachmentManager:a}=e;if(!a||!t.attachment)return i();let n=await a.getUploadConfigCheck(t.attachment.localMetadata.file),r={...t.attachment,localMetadata:{...t.attachment.localMetadata,uploadPermissionCheck:n,uploadState:n.uploadBlocked?"blocked":"pending"}};return s({...t,attachment:r})}}},{id:"stream-io/attachment-manager-middleware/blocked-upload-notification",handlers:{prepare:({state:{attachment:t},forward:s})=>(!t||t.localMetadata.uploadPermissionCheck?.uploadBlocked&&e.client.notifications.addError({message:"The attachment upload was blocked",origin:{emitter:"AttachmentManager",context:{blockedAttachment:t}},options:{type:"validation:attachment:upload:blocked",metadata:{reason:t.localMetadata.uploadPermissionCheck?.reason}}}),s())}}])}},ez=e=>{if(!e||"object"!=typeof e||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return null!==t&&t!==Object.prototype&&e.constructor&&e.constructor!==Object},eH=(e,t,s=new Set,i=new WeakSet,a=new WeakSet)=>{if(e===t)return!0;if(null==e||null==t)return!1;let n=typeof e;if(n!==typeof t)return!1;if("object"!==n)return e!=e&&t!=t||e===t;if(i.has(e)||a.has(t))return i.has(e)&&a.has(t);if(i.add(e),a.add(t),e instanceof Date&&t instanceof Date)return i.delete(e),a.delete(t),e.getTime()===t.getTime();if(e instanceof RegExp&&t instanceof RegExp)return i.delete(e),a.delete(t),e.toString()===t.toString();if(ez(e)||ez(t))return i.delete(e),a.delete(t),!1;let r=Array.isArray(e),o=Array.isArray(t);if(r!==o)return i.delete(e),a.delete(t),!1;if(r&&o){if(e.length!==t.length)return i.delete(e),a.delete(t),!1;let n=[e,t];if(s.has(n))return i.delete(e),a.delete(t),!0;
1s.add(n);for(let r=0;r<e.length;r++)if(!eH(e[r],t[r],s,i,a))return s.delete(n),i.delete(e),a.delete(t),!1;return s.delete(n),i.delete(e),a.delete(t),!0}let l=Object.keys(e),h=Object.keys(t);if(l.length!==h.length)return i.delete(e),a.delete(t),!1;for(let s of h)if(!Object.prototype.hasOwnProperty.call(e,s))return i.delete(e),a.delete(t),!1;let d=[e,t];if(s.has(d))return i.delete(e),a.delete(t),!0;for(let n of(s.add(d),l))if(!eH(e[n],t[n],s,i,a))return s.delete(d),i.delete(e),a.delete(t),!1;return s.delete(d),i.delete(e),a.delete(t),!0};function eG(e={}){let{trackDiff:t=!1}=e;return function({target:e,source:s,customizer:i}){let a=Array.isArray(s)?s:[s],n=t?structuredClone(e):void 0;function r(e,t,s,a){for(let n of[...Object.keys(t),...Object.getOwnPropertySymbols(t)])!function(e,t,s,a,n){let r=t[s],o=e[s];if(!function(e,t,s,a,n,r){let o=i?.(e,t,s,a,n,r);return void 0!==o&&(Object.defineProperty(a,s,{value:o,enumerable:!0,writable:!0,configurable:!0}),!0)}(o,r,s,e,t,a))if(r&&"object"==typeof r){if(!a.has(r)){let t=function(e,t){if(null==e||!Array.isArray(e)&&"object"!=typeof e)return t;if(e&&"object"==typeof e){let s=ez(e),i=ez(t);return s||i?i?t:e:Array.isArray(e)?[...e]:{...e}}return Array.isArray(t)?[]:{}}(o,r);if(Object.defineProperty(e,s,{value:t,enumerable:!0,writable:!0,configurable:!0}),ez(t))return;n.push({target:t,source:r,sourceKey:s,parentTarget:e})}}else void 0!==r&&(e[s]=r)}(e,t,n,s,a)}let o=a.reduce((e,s)=>(function(e,s,i=new Set){if(i.has(e)||i.has(s))return{...e};let a={...e},n=[];for(i.add(a),i.add(s),r(a,s,i,n);n.length;)!function({target:e,source:s,sourceKey:i,parentTarget:a},n,o){if(n.has(s)){t&&i&&a&&Object.defineProperty(a,i,{value:e,enumerable:!0,writable:!0,configurable:!0});return}n.has(e)||n.has(s)||(n.add(e),n.add(s),r(e,s,n,o),n.delete(s),n.delete(e))}(n.pop(),i,n);return i.delete(s),i.delete(a),a})(e,s),{...e}),l=t&&n?function(e,t){let s={children:{}};return function e(t,s,i,a,n=new Set,r=new Set){if(eH(t,s,new Set(n)))return;if(null==t){void 0!==a&&(i.children[String(a)]={type:"added",value:s,children:{}});return}if("object"==typeof t&&null!==t){if(r.has(t)){void 0!==a&&(i.children[String(a)]={type:"circular",value:s,oldValue:t,children:{}});return}r.add(t)}if("object"!=typeof t||"object"!=typeof s||null===t||null===s||Array.isArray(t)!==Array.isArray(s)||ez(t)||ez(s)){void 0!==a&&(i.children[String(a)]={type:"updated",value:s,oldValue:t,children:{}}),"object"==typeof t&&null!==t&&r.delete(t);return}let o=void 0!==a?{type:"updated",children:{},oldValue:t,value:s}:i;void 0!==a&&(i.children[String(a)]=o);let l=[t,s];if(n.has(l)){"object"==typeof t&&null!==t&&r.delete(t);return}for(let i of(n.add(l),new Set([...Object.keys(t),...Object.getOwnPropertySymbols(t),...Object.keys(s),...Object.getOwnPropertySymbols(s)]))){let a=t[i],l=s[i];if(i in s){if(!(i in t)){o.children[String(i)]={type:"added",value:l,children:{}};continue}e(a,l,o,i,n,r)}}n.delete(l),"object"==typeof t&&null!==t&&r.delete(t)}(e,t,s),eJ(s)}(n,o):null;return{result:o,diff:l}}}function eJ(e){let t={},s=!1;for(let i in e.children){let a=eJ(e.children[i]);a&&(t[i]=a,s=!0)}return e.type||s?{...e,children:t}:null}function eK(e,t,s){return eG()({target:e,source:t,customizer:s}).result}function eX(e,t,s){let{result:i,diff:a}=eG({trackDiff:!0})({target:e,source:t,customizer:s});return{result:i,diff:eJ(a??{children:{}})||{children:{}}}}var eZ=({message:e})=>({attachments:(e?.attachments??[])?.filter(({og_scrape_url:e})=>!e).map(e=>{let t=(e=>eM(e)||eC(e)||eR(e)||eD(e)||eL(e))(e)?{id:O(),uploadState:"finished"}:{id:O()};return{...e,localMetadata:t}})}),eY=class e{constructor({composer:t,message:s}){this.setCustomUploadFn=e=>{this.composer.updateConfig({attachments:{doUploadRequest:e}})},this.cancelAttachmentUploads=(e=this.attachments)=>{for(let{localMetadata:t}of e)this.client.uploadManager.deleteUploadRecord(t.id)},this.normalizeSnapshotAttachment=e=>"uploading"!==e.localMetadata.uploadState?e:(this.client.uploadManager.deleteUploadRecord(e.localMetadata.id),{...e,localMetadata:{...e.localMetadata,uploadProgress:void 0,uploadState:"failed"}}),this.initState=({message:e}={})=>{this.state.next(eZ({message:e}))}
1,this.getSnapshot=()=>{let e=this.state.getLatestValue(),t=!1,s=e.attachments.map(this.normalizeSnapshotAttachment);for(let i=0;i<s.length;i++)if(s[i]!==e.attachments[i]){t=!0;break}return t?{...e,attachments:s}:e},this.restoreSnapshot=e=>{this.cancelAttachmentUploads(this.attachments),this.state.next(e)},this.setAttachments=e=>{this.state.partialNext({attachments:e})},this.clearAttachments=()=>{this.attachments.length&&this.removeAttachments(this.attachments.map(e=>e.localMetadata.id))},this.getAttachmentIndex=e=>{let t=this.attachmentsById;return this.attachments.indexOf(t[e])},this.prepareAttachmentUpdate=e=>{let t=this.attachments,s=[...this.attachments],i=this.getAttachmentIndex(e.localMetadata.id);if(-1===i)return null;let a=eX(t[i],e);if(a.diff&&Object.keys(a.diff.children).length){let e=eN(a.result);if(e)return s.splice(i,1,e),s}return t},this.updateAttachment=e=>{let t=this.prepareAttachmentUpdate(e);t&&t!==this.attachments&&this.state.partialNext({attachments:t})},this.upsertAttachments=e=>{if(!e.length)return;let t=[...this.attachments],s=!1;e.forEach(e=>{let i=this.prepareAttachmentUpdate(e);if(null===i){let i=eN(e);i&&(t.push(i),s=!0)}else i!==this.attachments&&(t=i,s=!0)}),s&&this.state.partialNext({attachments:t})},this.removeAttachments=e=>{if(e.length)for(let t of(this.state.partialNext({attachments:this.attachments.filter(t=>!e.includes(t.localMetadata?.id))}),e))this.client.uploadManager.deleteUploadRecord(t)},this.getUploadConfigCheck=async e=>{let t,s=this.channel.getClient();t=s.appSettingsPromise?await s.appSettingsPromise:await s.getAppSettings();let i=e$(e)?t?.app?.image_upload_config:t?.app?.file_upload_config;if(!i)return{uploadBlocked:!1};let{allowed_file_extensions:a,allowed_mime_types:n,blocked_file_extensions:r,blocked_mime_types:o,size_limit:l}=i,h=e.type;if(eA(e)||eP(e)){if(a?.length&&!a.some(t=>e.name.toLowerCase().endsWith(t.toLowerCase())))return{uploadBlocked:!0,reason:"allowed_file_extensions"};if(r?.length&&r.some(t=>e.name.toLowerCase().endsWith(t.toLowerCase())))return{uploadBlocked:!0,reason:"blocked_file_extensions"}}return n?.length&&!n.some(e=>e.toLowerCase()===h?.toLowerCase())?{uploadBlocked:!0,reason:"allowed_mime_types"}:o?.length&&o.some(e=>e.toLowerCase()===h?.toLowerCase())?{uploadBlocked:!0,reason:"blocked_mime_types"}:e.size&&e.size>(l||0x6400000)?{uploadBlocked:!0,reason:"size_limit"}:{uploadBlocked:!1}},this.fileToLocalUploadAttachment=async t=>{let s=e.toLocalUploadAttachment(t),i=await this.getUploadConfigCheck(s.localMetadata.file);return s.localMetadata.uploadPermissionCheck=i,s.localMetadata.uploadState=i.uploadBlocked?"blocked":"pending",s},this.ensureLocalUploadAttachment=async e=>{if(!e.localMetadata?.file)return void this.client.notifications.addError({message:"File is required for upload attachment",origin:{emitter:"AttachmentManager",context:{attachment:e}},options:{type:"validation:attachment:file:missing"}});if(!e.localMetadata.id)return void this.client.notifications.addError({message:"Local upload attachment missing local id",origin:{emitter:"AttachmentManager",context:{attachment:e}},options:{type:"validation:attachment:id:missing"}});if(!this.fileUploadFilter(e))return;let t=await this.fileToLocalUploadAttachment(e.localMetadata.file);return e.localMetadata.id&&(t.localMetadata.id=e.localMetadata.id),t},this.doDefaultUploadRequest=async(e,t)=>{let s=t?.onProgress?e=>{let s=e.lengthComputable&&e.total?Math.round(100*e.loaded/e.total):void 0;t.onProgress?.(s)}:void 0,i=s||t?.abortSignal?{...s?{onUploadProgress:s}:{},...t?.abortSignal?{signal:t.abortSignal}:{}}:void 0;if(eP(e))return this.channel[e$(e)?"sendImage":"sendFile"](e.uri,e.name,e.type,void 0,i);let a=eA(e)?e:eO({blobsArray:[e],fileName:eF(e.type),mimeType:e.type}),{duration:n,...r}=await this.channel[e$(e)?"sendImage":"sendFile"](a,void 0,void 0,void 0,i);return r},this.doUploadRequest=async(e,t)=>{let s=this.config.doUploadRequest;return s?await s(e,t):this.doDefaultUploadRequest(e,t)},this.uploadAttachment=async e=>{let t;if(!this.isUploadEnabled)return;let s=await this.ensureLocalUploadAttachment(e);
1if(void 0===s)return;if("blocked"===s.localMetadata.uploadState)return this.upsertAttachments([s]),this.client.notifications.addError({message:"The attachment upload was blocked",origin:{emitter:"AttachmentManager",context:{attachment:e,blockedAttachment:s}},options:{type:"validation:attachment:upload:blocked",metadata:{reason:s.localMetadata.uploadPermissionCheck?.reason}}}),s;try{t=await this.upload(e)}catch(i){let t=i instanceof Error?i.message:"unknown error",s={...e,localMetadata:{...e.localMetadata,uploadState:"failed",uploadProgress:void 0}};return this.client.notifications.addError({message:"Error uploading attachment",origin:{emitter:"AttachmentManager",context:{attachment:e,failedAttachment:s}},options:{type:"api:attachment:upload:failed",metadata:{reason:t},originalError:i instanceof Error?i:void 0}}),this.updateAttachment(s),s}if(!t)return void this.removeAttachments([e.localMetadata.id]);let i={...e,localMetadata:{...e.localMetadata,uploadState:"finished",uploadProgress:void 0}},a=i.localMetadata.previewUri;return a&&(a.startsWith("blob:")&&URL.revokeObjectURL(a),delete i.localMetadata.previewUri),eU(i)?i.image_url=t.file:i.asset_url=t.file,t.thumb_url&&(i.thumb_url=t.thumb_url),this.updateAttachment(i),i},this.uploadFile=async t=>{let s,i,a=await this.preUploadMiddlewareExecutor.execute({eventName:"prepare",initialValue:{attachment:e.toLocalUploadAttachment(t)},mode:"concurrent"}),n=a.state.attachment;if("discard"===a.status||!this.fileUploadFilter(n))return n;if("blocked"===n.localMetadata.uploadState)return this.upsertAttachments([n]),a.state.attachment;try{s=await this.upload(n)}catch(e){i=e instanceof Error?e:void 0}let r=await this.postUploadMiddlewareExecutor.execute({eventName:"postProcess",initialValue:{attachment:{...n,localMetadata:{...n.localMetadata,uploadState:i?"failed":"finished",uploadProgress:void 0}},error:i,response:s},mode:"concurrent"});return(n=r.state.attachment,"discard"===r.status)?this.removeAttachments([n.localMetadata.id]):this.updateAttachment(n),n},this.uploadFiles=async e=>{if(this.hasCustomDoUploadRequest&&!this.hasAvailableUploadSlots||!this.hasCustomDoUploadRequest&&!this.isUploadEnabled)return;let t=(e=>null!=e&&"object"==typeof e&&("undefined"!=typeof FileList&&e instanceof FileList||"item"in e&&"length"in e&&!Array.isArray(e)))(e)?Array.from(e):e;return await Promise.all(t.slice(0,this.availableUploadSlots).map(this.uploadFile))},this.composer=t,this.state=new ep(eZ({message:s})),this.attachmentsByIdGetterCache={attachmentsById:{},attachments:[]},this.preUploadMiddlewareExecutor=new eW({composer:t}),this.postUploadMiddlewareExecutor=new ej({composer:t})}get attachmentsById(){let{attachments:e}=this.state.getLatestValue();return e!==this.attachmentsByIdGetterCache.attachments&&(this.attachmentsByIdGetterCache.attachments=e,this.attachmentsByIdGetterCache.attachmentsById=e.reduce((e,t)=>{var s;return t.localMetadata.id&&(e[s=t.localMetadata.id]??(e[s]=t)),e},{})),this.attachmentsByIdGetterCache.attachmentsById}get client(){return this.composer.client}get channel(){return this.composer.channel}get config(){return this.composer.config.attachments}get acceptedFiles(){return this.config.acceptedFiles}set acceptedFiles(e){this.composer.updateConfig({attachments:{acceptedFiles:e}})}get fileUploadFilter(){return this.config.fileUploadFilter}set fileUploadFilter(e){this.composer.updateConfig({attachments:{fileUploadFilter:e}})}get maxNumberOfFilesPerMessage(){return this.config.maxNumberOfFilesPerMessage}set maxNumberOfFilesPerMessage(e){e!==this.maxNumberOfFilesPerMessage&&this.composer.updateConfig({attachments:{maxNumberOfFilesPerMessage:e}})}get attachments(){return this.state.getLatestValue().attachments}get hasUploadPermission(){return!!this.channel.data?.own_capabilities?.includes("upload-file")}get hasCustomDoUploadRequest(){return"function"==typeof this.config.doUploadRequest}get hasAvailableUploadSlots(){return this.availableUploadSlots>0}get isUploadEnabled(){return this.hasUploadPermission&&this.hasAvailableUploadSlots}get successfulUploads(){return this.getUploadsByState("finished")}get successfulUploadsCount(){return this.successfulUploads.length}get uploadsInProgressCount(){return this.getUploadsByState("uploading").length}get failedUploadsCount(){return this.getUploadsByState("failed").length}get blockedUploadsCount(){return this.getUploadsByState("blocked").length}get pendingUploadsCount(){return this.getUploadsByState("pending").length}get availableUploadSlots(){return this.config.maxNumberOfFilesPerMessage-this.successfulUploadsCount-this.uploadsInProgressCount}getUploadsByState(e){return Object.values(this.attachments).filter(({localMetadata:t})=>t.uploadState===e)}upload(e){let t=e.localMetadata.id;this.upsertAttachments([{...e,localMetadata:{...e.localMetadata,uploadState:"uploading",uploadProgress:this.config.trackUploadProgress?0:void 0}}]);let s=this.client.uploadManager.state.subscribeWithSelector(e=>({upload:e.uploads[t]}),({upload:t})=>{t&&this.updateAttachment({...e,localMetadata:{...e.localMetadata,uploadState:"uploading",uploadProgress:t.uploadProgress}})});return this.client.uploadManager.upload({id:t,channelCid:this.channel.cid,file:e.localMetadata.file}).finally(()=>{s()})}};eY.toLocalUploadAttachment=e=>{let t=eP(e)||eA(e)?e:eO({blobsArray:[e],fileName:eF(e.type),mimeType:e.type}
1),s={file_size:t.size,mime_type:t.type,localMetadata:{file:t,id:O(),uploadState:"pending"},type:(e=>e.startsWith("image/")&&!e.endsWith(".photoshop")?"image":e.includes("video/")?"video":e.includes("audio/")?"audio":"file")(t.type)};return s[e$(t)?"fallback":"title"]=t.name,s.localMetadata.previewUri=eP(e)?e.uri:URL.createObjectURL?.(e),eP(e)&&e.height&&e.width&&e$(t)&&(s.original_height=e.height,s.original_width=e.width),eP(e)&&e.thumb_url&&(s.thumb_url=e.thumb_url),eP(e)&&e.duration&&(s.duration=e.duration),s};var e0=e=>{let{localMetadata:t,...s}=e;return s},e1=e=>"user"===e.mentionType,e2=e=>({...e,mentionType:"user"}),e3=e=>{let{mentionType:t,...s}=e;return s},e6=e=>{let{mentionType:t,tokenizedDisplayName:s,...i}=e;return i},e5=e=>{let t=e.trim();return""===t||">"===t||"``````"===t||"``"===t||"**"===t||"____"===t||"__"===t||"****"===t},e4=({composer:e,message:t})=>{if(!t){let t=e.config.text.defaultValue??"";return{command:null,mentionedUsers:[],mentions:[],text:t,selection:{start:t.length,end:t.length}}}let s=t.text??"",i=(e=>{if(!e)return[];let t=(e.mentioned_users??[]).map(e=>"string"==typeof e?{id:e,mentionType:"user"}:{...e,mentionType:"user"});return e.mentioned_channel&&t.push({id:"channel",mentionType:"channel",name:"channel"}),e.mentioned_here&&t.push({id:"here",mentionType:"here",name:"here"}),e.mentioned_roles?.length&&t.push(...e.mentioned_roles.map(e=>({id:e,mentionType:"role",name:e}))),e.mentioned_groups?.length?t.push(...e.mentioned_groups.map(e=>({id:e.id,mentionType:"user_group",name:e.name}))):e.mentioned_group_ids?.length&&t.push(...e.mentioned_group_ids.map(e=>({id:e,mentionType:"user_group"}))),t})(t);return{mentionedUsers:(t.mentioned_users??[]).map(e=>"string"==typeof e?{id:e}:e),mentions:i,text:s,selection:{start:s.length,end:s.length}}},e8=class{constructor({composer:e,message:t}){this.initState=({message:e}={})=>{this.state.next(e4({composer:this.composer,message:e}))},this.getSnapshot=(e=this.state.getLatestValue())=>e,this.restoreSnapshot=e=>{this.state.next(e)},this.upsertMentionedUser=e=>{let t=[...this.mentionedUsers],s=t.findIndex(t=>t.id===e.id);s>=0?t.splice(s,1,e):t.push(e),this.setMentionedUsers(t)},this.getMentionedUser=e=>this.mentionedUsers.find(t=>t.id===e),this.removeMentionedUser=e=>{let t=this.mentionedUsers.findIndex(t=>t.id===e);if(-1===t)return;let s=[...this.mentionedUsers];s.splice(t,1),this.setMentionedUsers(s)},this.upsertMentionEntity=e=>{let t=[...this.mentions],s=t.findIndex(t=>((e,t)=>e.id===t.id&&e.mentionType===t.mentionType)(t,e));s>=0?t.splice(s,1,e):t.push(e),this.setMentions(t)},this.getMentionEntity=(e,t)=>this.mentions.find(s=>s.mentionType===e&&s.id===t),this.removeMentionEntity=(e,t)=>{let s=this.mentions.findIndex(s=>s.mentionType===e&&s.id===t);if(-1===s)return;let i=[...this.mentions];i.splice(s,1),this.setMentions(i)},this.setCommand=e=>{if(!e)return void this.clearCommand();e.name===this.command?.name||this.composer.isCommandDisabled(e)||this.commitState({...this.state.getLatestValue(),command:e,effects:[{command:e,stateToRestore:{command:null},type:"command.activate"}],suggestions:void 0})},this.setText=e=>{this.enabled&&e!==this.text&&this.state.partialNext({text:e})},this.setSelection=e=>{let t=e.start!==this.selection.start||e.end!==this.selection.end;this.enabled&&t&&this.state.partialNext({selection:e})},this.insertText=async({text:e,selection:t})=>{if(!this.enabled)return;let s=e.replace(/\r\n/g,"\n"),i=t??this.selection,{maxLengthOnEdit:a}=this.composer.config.text??{},n=this.text,r=[n.slice(0,i.start),s,n.slice(i.end)].join(""),o=r.slice(0,"number"==typeof a?a:r.length),l=Math.min(i.start+s.length,o.length);await this.handleChange({text:o,selection:{start:l,end:l}})},this.wrapSelection=({head:e="",selection:t,tail:s=""})=>
1{if(!this.enabled)return;let i=t??this.selection,a=this.text.slice(0,i.start),n=this.text.slice(i.start,i.end),r=this.text.slice(i.end),o={start:a.length+e.length,end:a.length+e.length+n.length};this.state.partialNext({text:[a,e,n,s,r].join(""),selection:o})},this.setSuggestions=e=>{this.state.partialNext({suggestions:e})},this.closeSuggestions=()=>{let{suggestions:e}=this.state.getLatestValue();e&&this.state.partialNext({suggestions:void 0})},this.commitState=e=>{let{change:t,effects:s,...i}=e;this.state.next(i),this.composer.applyEffects(s)},this.handleChange=async({text:e,selection:t})=>{if(!this.enabled)return;let s=await this.middlewareExecutor.execute({eventName:"onChange",initialValue:{...this.state.getLatestValue(),text:e,selection:t}});"discard"!==s.status&&(this.commitState(s.state),this.config.publishTypingEvents&&e&&I(this.channel.keystroke(this.composer.threadId??void 0),"start typing event"))},this.handleSelect=async e=>{if(!this.enabled)return;let t=await this.middlewareExecutor.execute({eventName:"onSuggestionItemSelect",initialValue:{...this.state.getLatestValue(),change:{selectedSuggestion:e}}});t?.status!=="discard"&&this.commitState(t.state)},this.composer=e,this.state=new ep(e4({composer:e,message:t})),this.middlewareExecutor=new tQ({composer:e})}get channel(){return this.composer.channel}get config(){return this.composer.config.text}get enabled(){return this.composer.config.text.enabled}set enabled(e){e!==this.enabled&&this.composer.updateConfig({text:{enabled:e}})}get defaultValue(){return this.composer.config.text.defaultValue}set defaultValue(e){e!==this.defaultValue&&this.composer.updateConfig({text:{defaultValue:e}})}get maxLengthOnEdit(){return this.composer.config.text.maxLengthOnEdit}set maxLengthOnEdit(e){e!==this.maxLengthOnEdit&&this.composer.updateConfig({text:{maxLengthOnEdit:e}})}get maxLengthOnSend(){return this.composer.config.text.maxLengthOnSend}set maxLengthOnSend(e){e!==this.maxLengthOnSend&&this.composer.updateConfig({text:{maxLengthOnSend:e}})}get publishTypingEvents(){return this.composer.config.text.publishTypingEvents}set publishTypingEvents(e){e!==this.publishTypingEvents&&this.composer.updateConfig({text:{publishTypingEvents:e}})}get command(){return this.state.getLatestValue().command}get mentionedUsers(){return this.state.getLatestValue().mentionedUsers}get mentions(){let e;return(e=this.state.getLatestValue()).mentions??e.mentionedUsers.map(e2)}get selection(){return this.state.getLatestValue().selection}get suggestions(){return this.state.getLatestValue().suggestions}get text(){return this.state.getLatestValue().text}get textIsEmpty(){return e5(this.text)}setMentionedUsers(e){let t=this.mentions.filter(e=>!e1(e));this.state.partialNext({mentionedUsers:e,mentions:[...t,...e.map(e2)]})}setMentions(e){this.state.partialNext({mentionedUsers:e.filter(e1).map(e3),mentions:e})}clearCommand(){this.command&&this.commitState({...this.state.getLatestValue(),command:null,effects:[{type:"command.clear"}]})}},e9={"-1":{name:"InternalSystemError",retryable:!0},2:{name:"AccessKeyError",retryable:!1},3:{name:"AuthenticationFailedError",retryable:!0},4:{name:"InputError",retryable:!1},6:{name:"DuplicateUsernameError",retryable:!1},9:{name:"RateLimitError",retryable:!0},16:{name:"DoesNotExistError",retryable:!1},17:{name:"NotAllowedError",retryable:!1},18:{name:"EventNotSupportedError",retryable:!1},19:{name:"ChannelFeatureNotSupportedError",retryable:!1},20:{name:"MessageTooLongError",retryable:!1},21:{name:"MultipleNestingLevelError",retryable:!1},22:{name:"PayloadTooBigError",retryable:!1},23:{name:"RequestTimeoutError",retryable:!0},24:{name:"MaxHeaderSizeExceededError",retryable:!1},40:{name:"AuthErrorTokenExpired",retryable:!1},41:{name:"AuthErrorTokenNotValidYet",retryable:!1},42:{name:"AuthErrorTokenUsedBeforeIssuedAt",retryable:!1},43:{name:"AuthErrorTokenSignatureInvalid",retryable:!1},44:{name:"CustomCommandEndpointMissingError",retryable:!1},45:{name:"CustomCommandEndpointCallError",retryable:!0},46:{name:"ConnectionIDNotFoundError",retryable:!1},60:{name:"CoolDownError",retryable:!0},69:{name:"ErrWrongRegion",retryable:!1},70:{name:"ErrQueryChannelPermissions",retryable:!1},71:{name:"ErrTooManyConnections",retryable:!0},99:{name:"AppSuspendedError",retryable:!1}};function e7(e){return void 0!==e.code}function te(e){if(!e.code)return!1;let t=e9[`${e.code}`];return!!t&&t.retryable}var tt={debounceMs:300,pageSize:10,allowEmptySearchString:!1,resetOnNewSearchQuery:!0},ts=class{constructor(e){this.activate=()=>{this.isActive||this.state.partialNext({isActive:!0})},this.deactivate=()=>{this.isActive&&this.state.partialNext({isActive:!1})},this.canExecuteQuery=e=>{let t=e??this.searchQuery;return!!(this.isActive&&!this.isLoading&&(this.hasNext||void 0!==e)&&(this.allowEmptySearchString||t))};let{pageSize:t,allowEmptySearchString:s,resetOnNewSearchQuery:i}={...tt,...e};this.pageSize=t,this.allowEmptySearchString=s,this.resetOnNewSearchQuery=i,this.state=new ep(this.initialState)}get lastQueryError(){return this.state.getLatestValue().lastQueryError}get hasNext(){return this.state.getLatestValue().hasNext}get hasResults(){return Array.isArray(this.state.getLatestValue().items)}get isActive(){return this.state.getLatestValue().isActive}get isLoading(){return this.state.getLatestValue().isLoading}get initialState(){return{hasNext:!0,isActive:!1,isLoading:!1,items:void 0,lastQueryError:void 0,next:void 0,offset:0,searchQuery:""}}get items(){return this.state.getLatestValue().items}get next(){return this.state.getLatestValue().next}get offset(){return this.state.getLatestValue().offset}get searchQuery(){return this.state.getLatestValue().searchQuery}getStateBeforeFirstQuery(e){let t=this.initialState,s=this.items,i=this.resetOnNewSearchQuery?t.items:s;return{...t,items:i,isActive:this.isActive,isLoading:!!this.resetOnNewSearchQuery||!s,searchQuery:e}}getStateAfterQuery(e,t){return{...this.state.getLatestValue(),lastQueryError:void 0,...e,isLoading:!1,items:t?e.items:[...this.items??[],...e.items||[]]}}prepareStateForQuery(e){let t=void 0!==e,s=e??this.searchQuery;return t?this.state.next(this.getStateBeforeFirstQuery(e??"")):this.state.partialNext({isLoading:!0}),{searchString:s,hasNewSearchQuery:t}}updatePaginationStateFromQuery(e){let{items:t,next:s}=e,i={};return Object.prototype.hasOwnProperty.call(e,"next")?(i.next=s,i.hasNext=!!s):(i.offset=(this.offset??0)+t.length,i.hasNext=t.length===this.pageSize),i}resetState(){this.state.next(this.initialState)}resetStateAndActivate(){this.resetState(),this.activate()}},ti=class extends ts{constructor(e){let{debounceMs:t}={...tt,...e};super(e),this.setDebounceOptions=({debounceMs:e})=>{this.searchDebounced=G(this.executeQuery.bind(this),e)},this.search=e=>this.searchDebounced(e),this.setDebounceOptions({debounceMs:t})}async executeQuery(e){if(!this.canExecuteQuery(e))return;let{hasNewSearchQuery:t,searchString:s}=this.prepareStateForQuery(e),i={};try{let e=await this.query(s);if(!e)return;let{items:t}=e;(i=this.updatePaginationStateFromQuery(e)).items=await this.filterQueryResults(t)}catch(e){i.lastQueryError=e,e7(e)&&!te(e)&&(i.hasNext=!1)}finally{this.state.next(this.getStateAfterQuery(i,t))}}cancelScheduledQuery(){this.searchDebounced.cancel()}},ta=class extends ts{constructor(e){let{debounceMs:t}={...tt,...e};super(e),this.setDebounceOptions=({debounceMs:e})=>{this.searchDebounced=G(this.executeQuery.bind(this),e)},this.search=e=>this.searchDebounced(e),this.setDebounceOptions({debounceMs:t})}executeQuery(e){if(!this.canExecuteQuery(e))return;let{hasNewSearchQuery:t,searchString:s}=this.prepareStateForQuery(e),i={};try{let e=this.query(s);if(!e)return;let{items:t}=e;(i=this.updatePaginationStateFromQuery(e)).items=this.filterQueryResults(t)}catch(e){i.lastQueryError=e,e7(e)&&!te(e)&&(i.hasNext=!1)}finally{this.state.next(this.getStateAfterQuery(i,t))}}cancelScheduledQuery(){this.searchDebounced.cancel()}},tn={debounceMs:300,pageSize:10},tr=class{constructor(e){this._isCursorPagination=!1,this.setDebounceOptions=({debounceMs:e})=>{this._executeQueryDebounced=G(this.executeQuery.bind(this),e)},this.canExecuteQuery=e=>!this.isLoading&&"next"===e&&this.hasNext||"prev"===e&&this.hasPrev,this.next=()=>this.executeQuery({direction:"next"}),this.prev=()=>this.executeQuery({direction:"prev"}),this.nextDebounced=()=>{this._executeQueryDebounced({direction:"next"})},this.prevDebounced=()=>{this._executeQueryDebounced({direction:"prev"})};let{debounceMs:t,pageSize:s}={...tn,...e};this.pageSize=s,this.state=new ep(this.initialState),this.setDebounceOptions({debounceMs:t})}get lastQueryError(){return this.state.getLatestValue().lastQueryError}get hasNext(){return this.state.getLatestValue().hasNext}get hasPrev(){return this.state.getLatestValue().hasPrev}get hasResults(){return Array.isArray(this.state.getLatestValue().items)}get isLoading(){return this.state.getLatestValue().isLoading}get initialState(){return{hasNext:!0,hasPrev:!0,isLoading:!1,items:void 0,lastQueryError:void 0,cursor:void 0,offset:0}}get items(){return this.state.getLatestValue().items}
1get cursor(){return this.state.getLatestValue().cursor}get offset(){return this.state.getLatestValue().offset}getStateBeforeFirstQuery(){return{...this.initialState,isLoading:!0}}getStateAfterQuery(e,t){return{...this.state.getLatestValue(),lastQueryError:void 0,...e,isLoading:!1,items:t?e.items:[...this.items??[],...e.items||[]]}}async executeQuery({direction:e}){if(!this.canExecuteQuery(e))return;let t=void 0===this.items;t?this.state.next(this.getStateBeforeFirstQuery()):this.state.partialNext({isLoading:!0});let s={};try{let i=await this.query({direction:e});if(!i)return;let{items:a,next:n,prev:r}=i;t&&(n||r)&&(this._isCursorPagination=!0),this._isCursorPagination?(s.cursor={next:n||null,prev:r||null},s.hasNext=!!n,s.hasPrev=!!r):(s.offset=(this.offset??0)+a.length,s.hasNext=a.length===this.pageSize),s.items=await this.filterQueryResults(a)}catch(e){s.lastQueryError=e}finally{this.state.next(this.getStateAfterQuery(s,t))}}cancelScheduledQuery(){this._executeQueryDebounced.cancel()}resetState(){this.state.next(this.initialState)}},to=class{constructor(e){this.context=new ep(e?.initialContext??{}),this.filterConfig=new ep(e?.initialFilterConfig??{})}updateFilterConfig(e){this.filterConfig.partialNext(e)}enableFilter(e){let t=this.filterConfig.getLatestValue();t[e]&&this.filterConfig.partialNext({[e]:{...t[e],enabled:!0}})}disableFilter(e){let t=this.filterConfig.getLatestValue();t[e]&&this.filterConfig.partialNext({[e]:{...t[e],enabled:!1}})}updateContext(e){this.context.partialNext(e)}buildFilters(e){let t={...e?.baseFilters??{}},s=this.filterConfig.getLatestValue();for(let i in s){let a=s[i];if(!a?.enabled)continue;let n=a.generate({...this.context.getLatestValue(),...e?.context??{}});n&&Object.assign(t,n)}return t}},tl=class extends tr{constructor(e,t){super(t),this.query=async({direction:e})=>{let t=this.cursor?.[e],{reminders:s,next:i,prev:a}=await this.client.queryReminders({filter:this.filters,sort:this.sort,limit:this.pageSize,[e]:t});return{items:s,next:i,prev:a}},this.filterQueryResults=e=>e,this.client=e}get filters(){return this._filters}get sort(){return this._sort}set filters(e){this._filters=e,this.resetState()}set sort(e){this._sort=e,this.resetState()}},th=class{constructor({config:e,sources:t}={}){this.addSource=e=>{this.state.partialNext({sources:[...this.sources,e]})},this.getSource=e=>this.sources.find(t=>t.type===e),this.removeSource=e=>{let t=this.sources.filter(t=>t.type!==e);t.length!==this.sources.length&&this.state.partialNext({sources:t})},this.activateSource=e=>{let t=this.getSource(e);t&&!t.isActive&&(this.config.keepSingleActiveSource&&this.sources.forEach(t=>{t.type!==e&&t.deactivate()}),t.activate(),this.state.partialNext({sources:[...this.sources]}))},this.deactivateSource=e=>{let t=this.getSource(e);t?.isActive&&1!==this.activeSources.length&&(t.deactivate(),this.state.partialNext({sources:[...this.sources]}))},this.activate=()=>{this.activeSources.length||(this.config.keepSingleActiveSource?this.sources.slice(0,1):this.sources).forEach(e=>e.activate()),this.isActive||this.state.partialNext({isActive:!0})},this.search=async e=>{let t=this.activeSources;this.state.partialNext({searchQuery:e}),await Promise.all(t.map(t=>t.search(e)))},this.cancelSearchQueries=()=>{this.activeSources.forEach(e=>e.cancelScheduledQuery())},this.clear=()=>{this.cancelSearchQueries(),this.sources.forEach(e=>e.state.next({...e.initialState,isActive:e.isActive})),this.state.next(e=>({...e,isActive:!0,queriesInProgress:[],searchQuery:""}))},this.exit=()=>{this.cancelSearchQueries(),this.sources.forEach(e=>e.state.next({...e.initialState,isActive:e.isActive})),this.state.next(e=>({...e,isActive:!1,queriesInProgress:[],searchQuery:""}))},this.state=new ep({isActive:!1,searchQuery:"",sources:t??[]}),this._internalState=new ep({}),this.config={keepSingleActiveSource:!0,...e}}get hasNext(){return this.sources.some(e=>e.hasNext)}get sources(){return this.state.getLatestValue().sources}get activeSources(){return this.state.getLatestValue().sources.filter(e=>e.isActive)}get isActive(){return this.state.getLatestValue().isActive}get searchQuery(){return this.state.getLatestValue().searchQuery}get searchSourceTypes(){return this.sources.map(e=>e.type)}},td=class extends ti{constructor(e,t,s={}){super(t),this.type="users",this.client=e,this.filterBuilder=new to({initialFilterConfig:{$or:{enabled:!0,generate:({searchQuery:e})=>e?{$or:[{id:{$autocomplete:e}},{name:{$autocomplete:e}}]}:null}},...s})}async query(e){let t,s=this.filterBuilder.buildFilters({baseFilters:this.filters,context:{searchQuery:e}});t=Array.isArray(this.sort)?this.sort.some(e=>"id"in e)?this.sort:[...this.sort,{id:1}]:{id:1,...this.sort};let i={...this.searchOptions,limit:this.pageSize,offset:this.offset},{users:a}=await this.client.queryUsers(s,t,i);return{items:a}}filterQueryResults(e){return e.filter(e=>e.id!==this.client.user?.id)}},tc=class extends ti{constructor(e,t,s={}){super(t),this.type="channels",this.client=e,this.filterBuilder=new to({...s,initialFilterConfig:{name:{enabled:!0,generate:({searchQuery:e})=>e?{name:{$autocomplete:e}}:null},...s.initialFilterConfig}})}async query(e){let t=this.filterBuilder.buildFilters({baseFilters:{...this.client.userID?{members:{$in:[this.client.userID]}}:{},...this.filters},context:{searchQuery:e}}),s=this.sort??{},i={...this.searchOptions,limit:this.pageSize,offset:this.offset};return{items:await this.client.queryChannels(t,s,i)}}filterQueryResults(e){return e}},tu=class extends ti{constructor(e,t,s){super(t),this.type="messages",this.client=e,this.messageSearchChannelFilterBuilder=new to(s?.messageSearchChannel),this.messageSearchFilterBuilder=new to({...s?.messageSearch,initialFilterConfig:{text:{enabled:!0,generate:({searchQuery:e})=>e?{text:e}:null},...s?.messageSearch?.initialFilterConfig}}),this.channelQueryFilterBuilder=new to({...s?.channelQuery,initialFilterConfig:{cid:{enabled:!0,generate:({cids:e})=>e?{cid:{$in:e}}:null},...s?.channelQuery?.initialFilterConfig}})}async query(e){if(!this.client.userID||null===this.next)return{items:[]};let t=this.messageSearchChannelFilterBuilder.buildFilters({baseFilters:{...this.client.userID?{members:{$in:[this.client.userID]}}:{},...this.messageSearchChannelFilters},context:{searchQuery:e}}),s=this.messageSearchFilterBuilder.buildFilters({baseFilters:{type:"regular",...this.messageSearchFilters},context:{searchQuery:e}}),i={created_at:-1,...this.messageSearchSort},a={limit:this.pageSize,next:this.next,sort:i},{next:n,results:r}=await this.client.search(t,s,a),o=r.map(({message:e})=>e),l=Array.from(o.reduce((e,t)=>
1(t.cid&&!this.client.activeChannels[t.cid]&&e.add(t.cid),e),new Set));if(l.length>0){let e=this.channelQueryFilterBuilder.buildFilters({baseFilters:this.channelQueryFilters,context:{cids:l}});await this.client.queryChannels(e,{last_message_at:-1,...this.channelQuerySort},this.channelQueryOptions)}return{items:o,next:n}}filterQueryResults(e){return e}};function tg(e){return e.replace(/[-[\]{}()*+?.,/\\^$|#]/g,"\\$&")}var tp=e=>e?.match(/^\/(\S+)(?:\s.*)?$/)?.[1],tm=(e,t)=>Array.from(new Set(t.filter(({id:t,name:s})=>e.includes(`@${t}`)||!!s&&e.includes(`@${s}`)))),tf=(e,t)=>{if(!t)return;let s=t.toLowerCase();return e.query(s).items.find(e=>e.name?.toLowerCase()===s)},ty=(e,t)=>{let s=e.getCommandDisabledReason(t);if(s)return e.client.notifications.addWarning({message:"editing"===s?"Command not available while editing":"Command not available while replying",origin:{emitter:"MessageComposer",context:{command:t,composer:e}},options:{type:"validation:command:disabled",metadata:{command:t.name,reason:s}}}),!0},t_=({trigger:e,text:t,isCommand:s=!1,acceptTrailingSpaces:i=!0})=>{let a=tg(e),n=`[^\\s${a}]*`,r=t.match(RegExp(s?`^[${a}]${n}$`:i?`(?!^|\\W)?[${a}]${n}\\s?${n}$`:`(?!^|\\W)?[${a}]${n}$`,"g"));return r&&r[r.length-1].trim()},tb=({insertText:e,selection:t,text:s,trigger:i})=>{let a=s.slice(0,t.end),n=s.slice(t.end),r=a.lastIndexOf(i);return{text:a.slice(0,r)+e+n,selection:{start:r+e.length,end:r+e.length}}},tw=({displayName:e,searchToken:t})=>({tokenizedDisplayName:{token:t,parts:t?e.split(RegExp(`(${tg(t)})`,"gi")).filter(Boolean):[e]}}),tv=class extends ta{constructor(e,t){super(t),this.type="commands",this.canExecuteQuery=e=>this.isActive&&!this.isLoading&&(this.hasNext||void 0!==e),this.channel=e}getStateBeforeFirstQuery(e){let t=super.getStateBeforeFirstQuery(e),{items:s}=this.state.getLatestValue();return{...t,items:s}}query(e){let t=this.channel.getConfig(),s=(t?.commands||[]).filter(t=>!!(t.name&&-1!==t.name.toLowerCase().indexOf(e.toLowerCase())));return e&&s.sort((t,s)=>{let i=t.name?.toLowerCase(),a=s.name?.toLowerCase();if(i?.indexOf(e)===0&&(i=`0${i}`),a?.indexOf(e)===0&&(a=`0${a}`),null!=i&&null!=a){if(i<a)return -1;if(i>a)return 1}return 0}),{items:s.map(e=>({...e,id:e.name})),next:null}}filterQueryResults(e){return e}},tC={minChars:1,trigger:"/"},tS=e=>void 0!==e,tR=({mentions:e,text:t})=>((e,t)=>{let s=new Map;return e.forEach(e=>{s.set(t(e),e)}),[...s.values()]})(e.filter(e=>((e,t)=>{let s=(e=>"channel"===e.mentionType?["channel"]:"here"===e.mentionType?["here"]:"user"===e.mentionType?[e.id,e.name].filter(tS):"role"===e.mentionType||"user_group"===e.mentionType&&e.name?[e.name,e.id].filter(tS):[])(e);return!s.length||s.some(e=>t.includes(`@${e}`))})(e,t)),e=>`${e.mentionType}:${e.id}`).reduce((e,t)=>("user"===t.mentionType?e.mentioned_users.push(e3(t)):"channel"===t.mentionType?e.mentioned_channel=!0:"here"===t.mentionType?e.mentioned_here=!0:"role"===t.mentionType?e.mentioned_roles.push(t.id):"user_group"===t.mentionType&&e.mentioned_group_ids.push(t.id),e),{mentioned_channel:!1,mentioned_group_ids:[],mentioned_here:!1,mentioned_roles:[],mentioned_users:[]}),tU={attachments:[],mentioned_users:[],parent_id:void 0,quoted_message:void 0,text:""},tM=class extends eQ{constructor({composer:e}){super(),this.use([(e=>({id:"stream-io/message-composer-middleware/user-data-injection",handlers:{compose:({state:t,next:s,forward:i})=>{if(!e.client.user)return i();let{channel_mutes:a,devices:n,mutes:r,...o}=e.client.user;return s({...t,localMessage:{...t.localMessage,user:o,user_id:o.id}})}}}))(e),(e=>({id:"stream-io/message-composer-middleware/poll-only",handlers:{compose:({state:t,complete:s,forward:i})=>{let a=e.pollId,n=!!e.editedMessage,r=!!e.threadId;return!a||r||n?i():s({...t,localMessage:{...t.localMessage,...tU,poll_id:a},message:{id:t.localMessage.id,poll_id:a}})}}}))(e),(e=>({id:"stream-io/message-composer-middleware/text-composition",handlers:{compose:({state:t,next:s,forward:i})=>{if(!e.textComposer)return i();let{mentions:a,text:n}=e.textComposer,{mentioned_channel:r,mentioned_group_ids:o,mentioned_here:l,mentioned_roles:h,mentioned_users:d}=tR({mentions:a,text:n});return n||r||l||0!==o.length||0!==h.length||0!==d.length?s({...t,localMe
1ssage:{...t.localMessage,mentioned_channel:r,mentioned_group_ids:o,mentioned_here:l,mentioned_roles:h,mentioned_users:d,text:n},message:{...t.message,mentioned_channel:r,mentioned_group_ids:o,mentioned_here:l,mentioned_roles:h,mentioned_users:d.map(e=>e.id),text:n}}):i()}}}))(e),(e=>({id:"stream-io/message-composer-middleware/attachments",handlers:{compose:({state:t,next:s,discard:i,forward:a})=>{let{attachmentManager:n}=e;if(!n)return a();if(n.uploadsInProgressCount>0)return e.client.notifications.addWarning({message:"Wait until all attachments have uploaded",origin:{emitter:"MessageComposer",context:{composer:e}},options:{type:"validation:attachment:upload:in-progress"}}),i();let r=(t.message.attachments??[]).concat(n.successfulUploads.map(e0));return r.length?s({...t,localMessage:{...t.localMessage,attachments:r},message:{...t.message,attachments:r}}):a()}}}))(e),{id:"stream-io/message-composer-middleware/link-previews",handlers:{compose:({state:t,next:s,forward:i})=>{let{linkPreviewsManager:a}=e;if(!a)return i();a.cancelURLEnrichment();let n=a.loadingPreviews.length>0,r=a.dismissedPreviews.length>0,o=a.loadingPreviews.length>0?[]:a.loadedPreviews.map(e=>tZ.getPreviewData(e)),l=(t.message.attachments??[]).concat(o);if(!l.length)return i();let h={...t.sendOptions};return(!n&&o.length>0||r)&&(h.skip_enrich_url=!0),s({...t,message:{...t.message,attachments:l},localMessage:{...t.localMessage,attachments:l},sendOptions:h})}}},(e=>({id:"stream-io/message-composer-middleware/shared-location",handlers:{compose:({state:t,next:s,forward:i})=>{let{locationComposer:a}=e,n=a.validLocation;if(!a||!n||!e.client.user)return i();let r=new Date().toISOString();return s({...t,localMessage:{...t.localMessage,shared_location:{...n,channel_cid:e.channel.cid,created_at:r,updated_at:r,user_id:e.client.user.id}},message:{...t.message,shared_location:n}})}}}))(e),(e=>({id:"stream-io/message-composer-middleware/own-state",handlers:{compose:({state:t,next:s})=>{let i={};return e.quotedMessage&&(i.quoted_message_id=e.quotedMessage.id),e.pollId&&(i.poll_id=e.pollId),e.showReplyInChannel&&(i.show_in_channel=!0),s({...t,localMessage:{...t.localMessage,...i,quoted_message:e.quotedMessage??void 0},message:{...t.message,...i}})}}}))(e),{id:"stream-io/message-composer-middleware/custom-data",handlers:{compose:({state:t,next:s,forward:i})=>{let a=e.customDataManager.customMessageData;return a?s({...t,localMessage:{...t.localMessage,...a},message:{...t.message,...a}}):i()}}},((e,t)=>{let s=(void 0)??new tv(e.channel);return{id:"stream-io/message-composer-middleware/data-validation",handlers:{compose:async({state:t,discard:i,forward:a})=>{let{maxLengthOnSend:n}=e.config.text??{},r=t.message.text??"",o=((e,t,s)=>{let i=tf(t,tp(s));if(i&&e.isCommandDisabled(i))return i})(e,s,r);if(o)return ty(e,o),await i();let l=e.textComposer.command??tf(s,tp(r));if(l&&(({composer:e,sendability:t})=>{if(!t.ready)return e.client.notifications.addWarning({message:"Command not ready to be sent",origin:{emitter:"MessageComposer",context:{command:t.command,composer:e}},options:{type:"validation:command:not-ready",metadata:{command:t.command.name,...t.reason?{reason:t.reason}:{},...t.metadata??{}}}}),!0}
1)({composer:e,sendability:e.validateCommandSendability(l,r)}))return await i();let h="number"==typeof n&&r.length>n;return e.compositionIsEmpty||h?await i():await a()}}}})(e),(e=>({id:"stream-io/message-composer-middleware/data-cleanup",handlers:{compose:({state:t,next:s})=>{let i={type:e.editedMessage?.type&&"error"!==e.editedMessage.type?e.editedMessage.type:"regular"},a=e.editedMessage?Q(e.editedMessage):void 0;return s({...t,localMessage:V({...e.editedMessage,...t.localMessage,...i}),message:{...a,...t.message,...i},sendOptions:e.editedMessage&&t.sendOptions?.skip_enrich_url?{skip_enrich_url:t.sendOptions?.skip_enrich_url}:t.sendOptions})}}}))(e)])}},tx=class extends eQ{constructor({composer:e}){super(),this.use([(e=>({id:"stream-io/message-composer-middleware/draft-text-composition",handlers:{compose:({state:t,next:s,forward:i})=>{if(!e.textComposer)return i();let{maxLengthOnSend:a}=e.config.text??{},{mentions:n,text:r}=e.textComposer,o="number"==typeof a&&r.length>a?r.slice(0,a):r,{mentioned_channel:l,mentioned_group_ids:h,mentioned_here:d,mentioned_roles:c,mentioned_users:u}=tR({mentions:n,text:o}),g={...l?{mentioned_channel:!0}:{},...h.length?{mentioned_group_ids:h}:{},...d?{mentioned_here:!0}:{},...c.length?{mentioned_roles:c}:{},...u.length?{mentioned_users:u.map(e=>e.id)}:{}};return s({...t,draft:{...t.draft,...g,text:o}})}}}))(e),{id:"stream-io/message-composer-middleware/draft-attachments",handlers:{compose:({state:t,next:s,forward:i})=>{let{attachmentManager:a}=e;if(!a)return i();let n=a.successfulUploads,r=n.length?(t.draft.attachments??[]).concat(n.map(e0)):void 0;return s({...t,draft:{...t.draft,attachments:r}})}}},{id:"stream-io/message-composer-middleware/draft-link-previews",handlers:{compose:({state:t,next:s,forward:i})=>{let{linkPreviewsManager:a}=e;if(!a)return i();a.cancelURLEnrichment();let n=a.loadedPreviews.map(e=>tZ.getPreviewData(e));return n.length?s({...t,draft:{...t.draft,attachments:(t.draft.attachments??[]).concat(n)}}):i()}}},(e=>({id:"stream-io/message-composer-middleware/draft-own-state",handlers:{compose:({state:t,next:s})=>{let i={};return e.quotedMessage&&(i.quoted_message_id=e.quotedMessage.id),e.pollId&&(i.poll_id=e.pollId),e.showReplyInChannel&&(i.show_in_channel=!0),s({...t,draft:{...t.draft,...i}})}}}))(e),{id:"stream-io/message-composer-middleware/draft-custom-data",handlers:{compose:({state:t,next:s,forward:i})=>{let a=e.customDataManager.customMessageData;return a?s({...t,draft:{...t.draft,...a}}):i()}}},{id:"stream-io/message-composer-middleware/draft-data-validation",handlers:{compose:async({state:t,discard:s,forward:i})=>{let a=!e5(t.draft.text??"")||t.draft.attachments?.length||t.draft.poll_id||t.draft.quoted_message_id;return e.lastChangeOriginIsLocal&&a?await i():await s()}}}])}},tL=/^([2-9]|10)$/,tI=e=>!e.trim(),tD={enforce_unique_vote:()=>({max_votes_allowed:void 0}),max_votes_allowed:({data:e,value:t})=>e.enforce_unique_vote&&t?{max_votes_allowed:"Enforce unique vote is enabled"}:!t.match(/^[0-9]+$/)&&t?{max_votes_allowed:"Only numbers are allowed"}:t?.length>1&&!t.match(tL)?{max_votes_allowed:"Type a number from 2 to 10"}:{max_votes_allowed:void 0},options:({value:e})=>{let t={},s=new Set;return e.forEach(e=>{s.has(e.text)&&e.text.length?t[e.id]="Option already exists":s.add(e.text)}),Object.keys(t).length>0?{options:t}:{options:void 0}}},tk={name:({currentError:e,value:t})=>t&&e?{name:void 0}:{name:"string"==typeof e?e:void 0}},tT={max_votes_allowed:({value:e})=>e&&!e.match(tL)?{max_votes_allowed:"Type a number from 2 to 10"}:{max_votes_allowed:void 0},name:({value:e})=>tI(e)?{name:"Question is required"}:{name:void 0},options:e=>{let t=tD.options?.(e),s=t?.options??{};return e.value.forEach((t,i)=>{let a=i===e.value.length-1;tI(t.text)&&!a&&(s[t.id]="Option is empty")}),Object.keys(s).length>0?{options:s}:{options:void 0}}},tE={enforce_unique_vote:({value:e})=>({enforce_unique_vote:e,max_votes_allowed:""}),max_votes_allowed:({value:e})=>({max_votes_allowed:(e=>{if(""===e||null==e)return"";let t="string"==typeof e?parseInt(e,10):Number(e);return!Number.isInteger(t)||Number.isNaN(t)?"":String(Math.min(10,Math.max(2,t)))})(e)}),options:({value:e,data:t})=>{if(Array.isArray(e))return{options:e.map(e=>({id:e.id,text:e.text.trim()}))};let{index:s,text:i}=e,a=t.options||[],n=a&&a.slice(s+1).length>0&&!i,r=a.slice(0,s),o=a.slice(s+1),l=[...r,...n?[]:[{...a[s],text:i}],...o];return a.length<100&&!l.some(e=>!e.text.trim())&&l.push({id:O(),text:""}),{options:l}}},tA=class extends eQ{constructor({composer:e}){super(),this.use([{id:"stream-io/poll-composer-composition",handlers:{compose:({discard:t,forward:s})=>e.pollComposer.canCreatePoll?s():t()}}])}},tP=class extends eQ{constructor(){super(),this.use([(({processors:e,validators:t}={})=>{let s=({state:e,validators:t,processors:s})=>{let i,{previousState:a,targetFields:n}=e;if(!s&&(e=>!Array.isArray(e)&&"number"==typeof e?.index&&"string"==typeof e?.text)(n.options)){let e=[...a.data.options],t=a.data.options[n.options.index];t&&(t.text=n.options.text,e.splice(n.options.index,1,t)),i={...n,options:e}}else i=s?Object.entries(n).reduce((e,[t,i])=>{let n=s[t];return{...e,...n?n({data:a.data,value:i}):{[t]:i}}},{}):n;let r=Object.keys(n).reduce((e,s)=>{let n=t[s];if(n){let t=n({currentError:a.errors[s],data:a.data,value:i[s]});e={...e,...t}}return e},{});return{newData:i,newErrors:r}};return{id:"stream-io/poll-composer-state-processing",handlers:{handleFieldChange:({state:i,next:a,forward:n})=>{if(!i.targetFields)return n();let{previousState:r,injectedFieldErrors:o}
1=i,{newData:l,newErrors:h}=s({processors:{...tE,...e?.handleFieldChange},state:i,validators:{...tD,...tk,...t?.handleFieldChange}});return a({...i,nextState:{...r,data:{...r.data,...l},errors:{...r.errors,...h,...o}}})},handleFieldBlur:({state:i,next:a,forward:n})=>{if(!i.targetFields)return n();let{previousState:r}=i,{newData:o,newErrors:l}=s({processors:e?.handleFieldBlur,state:i,validators:{...tD,...tT,...t?.handleFieldBlur}});return a({...i,nextState:{...r,data:{...r.data,...o},errors:{...r.errors,...l,...i.injectedFieldErrors}}})}}}})()])}},tO={selection:{start:0,end:0},text:""},tF={a:"\xe1|\xe0|\xe3|\xe2|\xc0|\xc1|\xc3|\xc2",c:"\xe7|\xc7",e:"\xe9|\xe8|\xea|\xc9|\xc8|\xca",i:"\xed|\xec|\xee|\xcd|\xcc|\xce",n:"\xf1|\xd1",o:"\xf3|\xf2|\xf4|ő|\xf5|\xd3|\xd2|\xd4|\xd5",u:"\xfa|\xf9|\xfb|\xfc|\xda|\xd9|\xdb|\xdc"},t$=e=>e?Object.keys(tF).reduce((e,t)=>e.replace(RegExp(tF[t],"g"),t),e):"",tN=(e,t)=>e?.includes(t)??!1,tq={channel:(e,{searchToken:t})=>{let s=String(e);return{id:s,mentionType:"channel",name:"channel",...tw({displayName:s,searchToken:t})}},here:(e,{searchToken:t})=>{let s=String(e);return{id:s,mentionType:"here",name:"here",...tw({displayName:s,searchToken:t})}},role:(e,{searchToken:t})=>{let s=String(e);return{id:s,mentionType:"role",name:s,...tw({displayName:s,searchToken:t})}},user:(e,{searchToken:t})=>({...e,mentionType:"user",...tw({displayName:e.name||e.id,searchToken:t})}),user_group:(e,{searchToken:t})=>({description:e.description,id:e.id,memberCount:e.members?.length,mentionType:"user_group",name:e.name,...tw({displayName:e.name||e.id,searchToken:t})})},tV=class extends ti{constructor(e,t){let{mentionAllAppUsers:s,suggestionFactoryMappers:i,textComposerText:a,transliterate:n,trigger:r,...o}=t||{};super(o),this.type="mentions",this.normalizeSearchValue=e=>this.transliterate(t$(e)).toLowerCase(),this.matchesSearchQuery=(e,t)=>!t||this.normalizeSearchValue(e).includes(this.normalizeSearchValue(t)),this.matchesPrefixSearchQuery=(e,t)=>!t||this.normalizeSearchValue(e).startsWith(this.normalizeSearchValue(t)),this.matchesUserNameSearchQuery=(e,t)=>{if(!t)return!0;let s=this.normalizeSearchValue(e).split(/\s+/).filter(Boolean),i=this.normalizeSearchValue(t).split(/\s+/).filter(Boolean);if(!s.length||!i.length)return!1;let a=i.slice(0,-1),n=i[i.length-1];return a.every(e=>s.includes(e))&&s.some(e=>e.startsWith(n))},this.isMentionTypeAllowed=e=>(e=>({channel:tN(e,"notify-channel"),here:tN(e,"notify-here"),role:tN(e,"notify-role"),user:!0,user_group:tN(e,"notify-group")}))(this.channel.data?.own_capabilities)[e],this.mapMentionSuggestion=(e,t,s=this.searchQuery)=>(this.config.suggestionFactoryMappers?.[e]??tq[e])(t,{searchToken:s,source:this}),this.getChannelTeam=()=>this.channel.data?.team,this.toUserSuggestion=(e,t=this.searchQuery)=>this.mapMentionSuggestion("user",e,t),this.toChannelMentionSuggestion=(e=this.searchQuery)=>this.mapMentionSuggestion("channel","channel",e),this.toHereMentionSuggestion=(e=this.searchQuery)=>this.mapMentionSuggestion("here","here",e),this.toRoleMentionSuggestion=(e,t=this.searchQuery)=>this.mapMentionSuggestion("role",e,t),this.toUserGroupMentionSuggestion=(e,t=this.searchQuery)=>this.mapMentionSuggestion("user_group",e,t),this.canExecuteQuery=e=>this.isActive&&!this.isLoading&&(void 0!==e||this.hasNext),this.transliterate=e=>e,this.getMembersAndWatchers=()=>{let e=[...Object.values(this.channel.state.members??{}).map(({user:e})=>e),...Object.values(this.channel.state.watchers??{})],t={};return e.forEach(e=>{e&&!t[e.id]&&(t[e.id]=e)}),Object.values(t)},this.getBuiltinMentionSuggestions=e=>[...this.isMentionTypeAllowed("channel")?[this.toChannelMentionSuggestion(e)]:[],...this.isMentionTypeAllowed("here")?[this.toHereMentionSuggestion(e)]:[]].filter(({name:t})=>this.matchesPrefixSearchQuery(t,e)),this.getRoleMentionSuggestions=async e=>{if(!this.isMentionTypeAllowed("role")||!e)return[];let{roles:t}=await this.client.searchRoles({query:e});return[...t?.map(e=>e.name)??[]].sort((e,t)=>e.localeCompare(t)).map(t=>this.toRoleMentionSuggestion(t,e))},this.searchMembersLocally=e=>{let{textComposerText:t}=this.config;return t?this.getMembersAndWatchers().filter(s=>{if(s.id===this.client.userID)return!1;if(!e)return!0;let i=this.transliterate(t$(s.id)).toLowerCase(),a=this.transliterate(t$(e)).toLowerCase(),n=this.config.trigger??"@",r=t.slice(-4).includes(n);
1if(this.matchesUserNameSearchQuery(s.name,a))return!0;let o=((e,t)=>{let s,i;if(0===e.length)return t.length;if(0===t.length)return e.length;let a=[];for(s=0;s<=t.length;s++)a[s]=[s];for(i=0;i<=e.length;i++)a[0][i]=i;for(s=1;s<=t.length;s++)for(i=1;i<=e.length;i++)t.charAt(s-1)===e.charAt(i-1)?a[s][i]=a[s-1][i-1]:a[s][i]=Math.min(a[s-1][i-1]+1,Math.min(a[s][i-1]+1,a[s-1][i]+1));return a[t.length][e.length]})(a,i);return i.includes(a)||o<=3&&r}).sort((e,t)=>{if(!this.memberSort)return(e.name||"").localeCompare(t.name||"");for(let[s,i]of Object.entries(this.memberSort)){let a=e[s],n=t[s];if(a!==n)return 1===i?String(a||"").localeCompare(String(n||"")):String(n||"").localeCompare(String(a||""))}return 0}):[]},this.prepareQueryUsersParams=(e,t=0)=>({filters:{$or:[{id:{$autocomplete:e}},{name:{$autocomplete:e}}],...this.userFilters},sort:this.userSort??[{name:1},{id:1}],options:{...this.searchOptions,limit:this.pageSize,offset:t}}),this.prepareQueryMembersParams=(e,t=0)=>{let s=[{user_id:1}];return this.memberSort?Array.isArray(this.memberSort)?s=this.memberSort[0]:1===Object.keys(this.memberSort).length&&(s=this.memberSort):s=[{user_id:1}],{filters:this.memberFilters??{name:{$autocomplete:e}},sort:s,options:{...this.searchOptions,limit:this.pageSize,offset:t}}},this.queryUsers=async(e,t=0)=>{let{filters:s,sort:i,options:a}=this.prepareQueryUsersParams(e,t),{users:n}=await this.client.queryUsers(s,i,a);return n},this.queryMembers=async(e,t=0)=>{let{filters:s,sort:i,options:a}=this.prepareQueryMembersParams(e,t);return(await this.channel.queryMembers(s,i,a)).members.map(e=>e.user)},this.getUserSuggestionsPage=async(e,t=0)=>{let s;if(!this.isMentionTypeAllowed("user"))return{items:[],nextOffset:void 0};let i=this.allMembersLoadedWithInitialChannelQuery||!e;if(this.config.mentionAllAppUsers)s=await this.queryUsers(e,t);else if(i){let s=this.searchMembersLocally(e),i=s.slice(t,t+this.pageSize).map(t=>this.toUserSuggestion(t,e));return{items:i,nextOffset:s.length>t+this.pageSize?t+i.length:void 0}}else s=await this.queryMembers(e,t);return{items:s.map(t=>this.toUserSuggestion(t,e)),nextOffset:s.length===this.pageSize?t+s.length:void 0}},this.buildUserGroupSearchCursor=e=>{if(e.length<this.pageSize)return;let t=e[e.length-1];if(t?.name)return JSON.stringify({id_gt:t.id,name_gt:t.name})},this.getUserGroupSuggestionsPage=async(e,t)=>{if(!this.isMentionTypeAllowed("user_group")||!e)return{items:[],next:void 0};let s=this.getChannelTeam(),i=(e=>{if(e)try{return JSON.parse(e)}catch{return}})(t),a={query:e,limit:this.pageSize,...s?{team_id:s}:{},...i?.id_gt?{id_gt:i.id_gt}:{},...i?.name_gt?{name_gt:i.name_gt}:{}},{user_groups:n}=await this.client.searchUserGroups(a);return{items:n.map(t=>this.toUserGroupMentionSuggestion(t,e)),next:this.buildUserGroupSearchCursor(n)}},this.client=e.getClient(),this.channel=e,this.config={mentionAllAppUsers:s,suggestionFactoryMappers:i,textComposerText:a,trigger:r},n&&(this.transliterate=n)}get allMembersLoadedWithInitialChannelQuery(){return Object.keys(this.channel.state.members||{}).length<100}getStateBeforeFirstQuery(e){this.userGroupCursor=void 0;let t=super.getStateBeforeFirstQuery(e),{items:s}=this.state.getLatestValue();return{...t,items:s}}updatePaginationStateFromQuery(){let e=this.latestUserPaginationState??{itemCount:0};return{hasNext:void 0!==e.nextOffset||void 0!==this.userGroupCursor,next:void 0,offset:(this.offset??0)+e.itemCount}}async query(e){let t=this.offset??0,s=0===t&&void 0===this.userGroupCursor,i=this.latestUserPaginationState,a=this.userGroupCursor,[n,r,o]=await Promise.allSettled([this.getUserSuggestionsPage(e,t),this.getUserGroupSuggestionsPage(e,a),s?this.getRoleMentionSuggestions(e):Promise.resolve([])]),l="fulfilled"===n.status?n.value:{items:[],nextOffset:s?void 0:i?.nextOffset},h="fulfilled"===r.status?r.value:{items:[],next:s?void 0:a},d="fulfilled"===o.status?o.value:[],c=[...s?this.getBuiltinMentionSuggestions(e):[],...d,...h.items,...l.items];return this.latestUserPaginationState={itemCount:l.items.length,nextOffset:l.nextOffset},this.userGroupCursor=h.next,{items:c}}filterMutes(e){let{textComposerText:t}=this.config;if(!t)return[];let{mutedUsers:s}=this.client;return t.includes("/unmute")&&!s.length?[]:s.length?t.includes("/unmute")?e.filter(e=>"user"===e.mentionType&&s.some(t=>t.target.id===e.id)):e.filter(e=>"user"!==e.mentionType||s.every(t=>t.target.id!==e.id)):e}filterQueryResults(e){return this.filterMutes(e)}resetState(){this.latestUserPaginationState=void 0,this.userGroupCursor=void 0,super.resetState()}},tB={minChars:1,trigger:"@"},tQ=class extends eQ{constructor({composer:e}){super(),this.use([{id:"stream-io/text-composer/pre-validation-middleware",handlers:{onChange:({state:t,next:s,forward:i})=>{let{maxLengthOnEdit:a}=e.config.text??{};return"number"==typeof a&&t.text.length>a?(t.text=t.text.slice(0,a),s({...t,text:t.text})):i()},onSuggestionItemSelect:({forward:e})=>e()}},((e,t)=>{let s,i,a=eK(tB,(void 0)??{});return s=new tV(e,{trigger:a.trigger}),s.activate(),{id:"stream-io/text-composer/mentions-middleware",handlers:{onChange:({state:e,next:t,complete:n,forward:r})=>{if(!e.selection)return r();let o=void 0!==i&&e.selection.end===i;i=void 0;let l=e.command||e.text.trimStart().startsWith("/")?e.mentionedUsers:tm(e.text,e.mentionedUsers),h=l.length!==e.mentionedUsers.length||l.some((t,s)=>t.id!==e.mentionedUsers[s]?.id)?{...e,mentionedUsers:l}:e,d=h.text.slice(0,h.selection.end),c=t_({trigger:a.trigger,text:d});c&&c.length===a.minChars&&s.resetStateAndActivate();let u=!!c&&/\s$/.test(d)&&(o||(h.mentions??[]).some(e=>{let t=e.name??e.id;if(!t)return!1;let s=`@${t} `;if(!d.endsWith(s))return!1;let i=s.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),a=d.match(RegExp(i,"g"));return(a?.length??0)===1}));if(!c||c.length<a.minChars||u){let e=h.suggestions?.trigger===a.trigger,s={...h};return e&&delete s.suggestions,t(s)}return s.config.textComposerText=h.text,n({...h,suggestions:{query:c.slice(1),searchSource:s,trigger:a.trigger}})},onSuggestionItemSelect:({state:e,complete:t,forward:n})=>{let{selectedSuggestion:r}=e.change??{};if(!r||e.suggestions?.trigger!==a.trigger)return n();s.resetStateAndActivate();let o=(e=>{if("user"===e.mentionType)return e2(e6(e));if("channel"===e.mentionType)return{id:"channel",mentionType:"channel",name:"channel"};if("here"===e.mentionType)return{id:"here",mentionType:"here",name:"here"};if("role"===e.mentionType)return{id:e.id,mentionType:"role",name:e.name};if("user_group"===e.mentionType)return{id:e.id,mentionType:"user_group",name:e.name};throw Error(`Unsupported mention suggestion type: ${JSON.stringify(e)}`)})(r),l=((e,t)=>{let s=e.findIndex(e=>e.id===t.id&&e.mentionType===t.mentionType);if(-1===s)return e.concat(t);let i=[...e];return i.splice(s,1,t),i})(e.mentions??e.mentionedUsers.map(e2),o),h=tb({insertText:(e=>
1`@${e.name||e.id} `)(r),selection:e.selection,text:e.text,trigger:a.trigger});return i=h.selection.end,t({...e,...h,mentionedUsers:"user"===r.mentionType?((e,t)=>{let s=e.findIndex(e=>e.id===t.id);if(-1===s)return e.concat(t);let i=[...e];return i.splice(s,1,t),i})(e.mentionedUsers,e6(r)):e.mentionedUsers,mentions:l,suggestions:void 0})}}}})(e.channel),((e,t)=>{let s=eK(tC,t??{}),i=new tv(e);return t?.searchSource&&(i=t.searchSource).resetState(),i.activate(),{id:"stream-io/text-composer/commands-middleware",handlers:{onChange:({state:e,next:a,complete:n,forward:r})=>{if(!e.selection)return r();let o=e.text.slice(0,e.selection.end),l=(e=>{let t=e.match(/^\/(\S+)\s+.*/);return t&&t[1]})(o);if(l){let s=tf(i,l),n=t?.composer;if(s&&!n?.isCommandDisabled(s))return a({...e,command:s,suggestions:void 0})}let h=t_({trigger:s.trigger,text:o,acceptTrailingSpaces:!1,isCommand:!0});if(h&&h.length===s.minChars&&i.resetStateAndActivate(),!h||h.length<s.minChars){let t=e.suggestions?.trigger===s.trigger,i={...e};return t&&delete i.suggestions,a(i)}return n({...e,command:null,suggestions:{query:h.slice(1),searchSource:i,trigger:s.trigger}})},onSuggestionItemSelect:({state:e,next:a,forward:n})=>{let{selectedSuggestion:r}=e.change??{};if(!r||e.suggestions?.trigger!==s.trigger)return n();let o=t?.composer;return o&&ty(o,r)?n():(i.resetStateAndActivate(),a({...e,...tb({insertText:`/${r.name} `,selection:e.selection,text:e.text,trigger:s.trigger}),command:r,suggestions:void 0}))}}}})(e.channel,{composer:e}),{handlers:{onChange:({forward:e})=>e(),onSuggestionItemSelect:({state:e,next:t,forward:s})=>{let{selectedSuggestion:i}=e.change??{};return"string"==typeof i?.name&&e.command&&e.command.name===i.name?t({...e,effects:[...e.effects??[],{command:e.command,stateToRestore:tO,type:"command.activate"}]}):s()}},id:"stream-io/text-composer/command-effects-middleware"}])}async execute({eventName:e,initialValue:t}){let s=await this.executeMiddlewareChain({eventName:e,initialValue:t}),{query:i,searchSource:a}=s.state.suggestions??{};return a?.search(i)?.catch(console.error),s}},tj=new Set(["mute","unmute","unban"]),tW=(e,t)=>{let s=t?.commands?.sendValidator;return void 0===s?e:{...e,commands:{...e.commands,sendValidator:s}}},tz={attachments:{acceptedFiles:[],fileUploadFilter:()=>!0,maxNumberOfFilesPerMessage:10,trackUploadProgress:!0},commands:{sendValidator:({command:e,commandArgsText:t,mentionedUsersInText:s})=>"ban"===e.name||tj.has(e.name??"")?0===s.length?{command:e,ready:!1,reason:"missing-mention"}:"ban"!==e.name||((e,t,s="@")=>t.reduce((e,t)=>{let i=e.replace(`${s}${t.id}`,"");return t.name&&(i=i.replace(`${s}${t.name}`,"")),i.trim()},e.trim()))(t,s).length?{command:e,ready:!0}:{command:e,ready:!1,reason:"missing-ban-reason"}:void 0},drafts:{enabled:!1},linkPreviews:{debounceURLEnrichmentMs:1500,enabled:!1,findURLFn:e=>(0,r.I6)(e,"url",{defaultProtocol:"https"}).reduce((e,t)=>{try{let s=new URL(t.href);t.isLink&&/^[a-zA-Z0-9-.]+\.[a-zA-Z]{2,}$/.test(s.hostname)&&e.push(t.href)}catch{}return e},[])},location:{enabled:!0,getDeviceId:()=>O()},text:{enabled:!0,publishTypingEvents:!0}},tH=e=>({message:{},custom:{}}),tG=class{constructor({composer:e,message:t}){this.isMessageDataEqual=(e,t)=>JSON.stringify(e.message)===JSON.stringify(t?.message),this.initState=({message:e}={})=>{this.state.next(tH({composer:this.composer,message:e}))},this.getSnapshot=()=>this.state.getLatestValue(),this.restoreSnapshot=e=>{this.state.next(e)},this.composer=e,this.state=new ep(tH({composer:e,message:t}))}get customMessageData(){return this.state.getLatestValue().message}get customComposerData(){return this.state.getLatestValue().custom}setMessageData(e){this.state.partialNext({message:{...this.state.getLatestValue().message,...e}})}setCustomData(e){this.state.partialNext({custom:{...this.state.getLatestValue().custom,...e}})}},tJ=(e=>(e.DISMISSED="dismissed",e.FAILED="failed",e.LOADED="loaded",e.LOADING="loading",e.PENDING="pending",e))(tJ||{}),tK=({message:e})=>e?{previews:e.attachments?.reduce((e,t)=>(t.og_scrape_url&&e.set(t.og_scrape_url,{...t,status:"loaded"}),e),new Map)??new Map}:{previews:new Map},tX=class e{constructor({composer:t,message:s}){this.shouldDiscardEnrichQueries=!1,this.initState=({message:e}={})=>{this.cancelURLEnrichment(),this.state.next(tK({message:this.enabled?e:void 0}))}
1,this.getSnapshot=()=>this.state.getLatestValue(),this.restoreSnapshot=e=>{this.state.next(e)},this._findAndEnrichUrls=async e=>{if(!this.enabled)return;let t=this.config.findURLFn(e);if(this.shouldDiscardEnrichQueries=!t.length,this.shouldDiscardEnrichQueries)return void this.state.next({previews:new Map});let s=new Map(Array.from(this.previews).filter(([e])=>t.includes(e)||t.includes(e+"/"))),i=t.filter(e=>{let t=this.previews;return!(t.get(e)||t.get(e+"/"))}).map(e=>({og_scrape_url:e.trim(),status:"loading"}));i.length&&(this.state.partialNext({previews:new Map([...s,...new Map(i.map(e=>[e.og_scrape_url,e]))])}),await Promise.all(i.map(async e=>{try{let{duration:t,...s}=await this.client.enrichURL(e.og_scrape_url);if(this.shouldDiscardEnrichQueries)return;this.previews.has(e.og_scrape_url)&&this.updatePreview(e.og_scrape_url,{status:"loaded",...s})}catch(t){this.previews.has(e.og_scrape_url)&&this.updatePreview(e.og_scrape_url,{status:"failed"})}return e})))},this.cancelURLEnrichment=()=>{this.findAndEnrichUrls.cancel?.(),this.findAndEnrichUrls.flush?.()},this.clearPreviews=()=>{let t=this.previews,s=new Map;t.forEach((t,i)=>{e.previewIsDismissed(t)&&s.set(i,t)}),this.state.partialNext({previews:s})},this.updatePreview=(e,t)=>{if(!e)return;let s=this.previews.get(e),i=t.status??this.previews.get(e)?.status??"pending",a=t;if(s){let e=eX(s,t);if(!e.diff||0===Object.keys(e.diff).length)return;a=e.result}this.state.partialNext({previews:new Map(this.previews).set(e,{...a,og_scrape_url:e,status:i})})},this.dismissPreview=e=>{let t=this.previews.get(e);t&&(this.onLinkPreviewDismissed?.(t),this.updatePreview(e,{status:"dismissed"}))},this.composer=t,this.state=new ep(tK({message:this.enabled?s:void 0})),this.findAndEnrichUrls=G(this._findAndEnrichUrls.bind(this),this.config.debounceURLEnrichmentMs)}get client(){return this.composer.client}get channel(){return this.composer.channel}get previews(){return this.state.getLatestValue().previews}get loadingPreviews(){return Array.from(this.previews.values()).filter(t=>e.previewIsLoading(t))}get loadedPreviews(){return Array.from(this.previews.values()).filter(t=>e.previewIsLoaded(t))}get dismissedPreviews(){return Array.from(this.previews.values()).filter(t=>e.previewIsDismissed(t))}get failedPreviews(){return Array.from(this.previews.values()).filter(t=>e.previewIsFailed(t))}get pendingPreviews(){return Array.from(this.previews.values()).filter(t=>e.previewIsPending(t))}get config(){return this.composer.config.linkPreviews}get debounceURLEnrichmentMs(){return this.config.debounceURLEnrichmentMs}set debounceURLEnrichmentMs(e){this.cancelURLEnrichment(),this.findAndEnrichUrls=G(this._findAndEnrichUrls.bind(this),this.config.debounceURLEnrichmentMs),this.composer.updateConfig({linkPreviews:{debounceURLEnrichmentMs:e}})}get enabled(){return!!this.channel.getConfig()?.url_enrichment&&this.composer.config.linkPreviews.enabled}set enabled(e){e!==this.enabled&&this.composer.updateConfig({linkPreviews:{enabled:e}})}get findURLFn(){return this.config.findURLFn}set findURLFn(e){this.composer.updateConfig({linkPreviews:{findURLFn:e}})}get onLinkPreviewDismissed(){return this.config.onLinkPreviewDismissed}set onLinkPreviewDismissed(e){this.composer.updateConfig({linkPreviews:{onLinkPreviewDismissed:e}})}};tX.previewIsLoading=e=>"loading"===e.status,tX.previewIsLoaded=e=>"loaded"===e.status,tX.previewIsDismissed=e=>"dismissed"===e.status,tX.previewIsFailed=e=>"failed"===e.status,tX.previewIsPending=e=>"pending"===e.status,tX.getPreviewData=e=>{let{status:t,...s}=e;return s};var tZ=tX,tY=({message:e})=>({location:e?.shared_location??null}),t0=class{constructor({composer:e,message:t}){this.initState=({message:e}={})=>{this.state.next(tY({message:e}))},this.getSnapshot=()=>this.state.getLatestValue(),this.restoreSnapshot=e=>{this.state.next(e)},this.setData=e=>{this.config.enabled&&e.latitude&&e.longitude&&this.state.partialNext({location:{...e,message_id:this.composer.id,created_by_device_id:this.deviceId}})},this.composer=e,this.state=new ep(tY({message:t})),this._deviceId=this.config.getDeviceId()}get config(){return this.composer.config.location}get deviceId(){return this._deviceId}get location(){return this.state.getLatestValue().location}get validLocation(){let{durationMs:e,...t}=this.location??{};return t?.created_by_device_id&&t.message_id&&t.latitude&&t.longitude&&(void 0===e||e>=6e4)?{...t,end_at:e&&new Date(Date.now()+e).toISOString()}:null}},t1=(e,t)=>{let s=t.getSnapshot();e.stateToRestore&&(s.textComposer={...s.textComposer,...e.stateToRestore,command:null}),t.captureSnapshot(s),t.textComposer.state.next({command:e.command,mentionedUsers:[],mentions:[],suggestions:void 0,selection:{start:0,end:0},text:""});let i=t.attachmentManager.attachments;t.attachmentManager.initState(),t.attachmentManager.cancelAttachmentUploads(i),t.linkPreviewsManager.initState(),t.locationComposer.initState(),t.pollComposer.initState(),t.customDataManager.initState()},t2=(e,t)=>{let s=t.popSnapshot();s&&t.restoreSnapshot(s)},t3=class{constructor(e){this.options=e,this.handlers=new Map,this.registerDefaultHandlers=()=>{this.registerEffectHandler("command.activate",t1),this.registerEffectHandler("command.clear",t2)},this.registerEffectHandler=(e,t)=>{this.handlers.set(e,t)},this.applyEffects=(e=[])=>
1{e.forEach(e=>this.applyEffect(e))},this.applyEffect=e=>{let t=this.handlers.get(e.type);t?.(e,this.options.composer)},this.registerDefaultHandlers()}},t6=(e=>(e.Chat="chat",e.Video="video",e.Moderation="moderation",e.Feeds="feeds",e))(t6||{}),t5=class extends Error{constructor(e,{code:t,status:s,response:i}){super(e),this.name="ErrorFromResponse",this.code=t,this.response=i,this.status=s}toJSON(){let e=[["status",this.status],["code",this.code]],t=[];for(let[s,i]of e)null!=i&&t.push(`${s}: ${i}`);return{message:`(${t.join(", ")}) - ${this.message}`,stack:this.stack,name:this.name,code:this.code,status:this.status}}},t4=(e=>(e.anonymous="anonymous",e.public="public",e))(t4||{}),t8=class{constructor({composer:e}){this.initState=()=>{this.state.next(this.initialState)},this.getSnapshot=()=>this.state.getLatestValue(),this.restoreSnapshot=e=>{this.state.next(e)},this.updateFields=async(e,t)=>{let{state:s,status:i}=await this.stateMiddlewareExecutor.execute({eventName:"handleFieldChange",initialValue:{nextState:{...this.state.getLatestValue()},previousState:{...this.state.getLatestValue()},targetFields:e,injectedFieldErrors:t}});"discard"!==i&&this.state.next(s.nextState)},this.handleFieldBlur=async e=>{let t=await this.stateMiddlewareExecutor.execute({eventName:"handleFieldBlur",initialValue:{nextState:{...this.state.getLatestValue()},previousState:{...this.state.getLatestValue()},targetFields:{[e]:this.state.getLatestValue().data[e]}}});"discard"!==t.status&&this.state.next(t.state.nextState)},this.compose=async()=>{let{data:e,errors:t}=this.state.getLatestValue(),s=await this.compositionMiddlewareExecutor.execute({eventName:"compose",initialValue:{data:{...e,max_votes_allowed:e.max_votes_allowed?parseInt(e.max_votes_allowed):void 0,options:e.options?.filter(e=>e.text.trim()).map(e=>({text:e.text}))},errors:t}});if("discard"!==s.status)return s.state},this.composer=e,this.state=new ep(this.initialState),this.compositionMiddlewareExecutor=new tA({composer:e}),this.stateMiddlewareExecutor=new tP}get initialState(){return{data:{allow_answers:!1,allow_user_suggested_options:!1,description:"",enforce_unique_vote:!0,id:O(),max_votes_allowed:"",name:"",options:[{id:O(),text:""}],user_id:this.composer.client.user?.id,voting_visibility:"public"},errors:{}}}get allow_answers(){return this.state.getLatestValue().data.allow_answers}get allow_user_suggested_options(){return this.state.getLatestValue().data.allow_user_suggested_options}get description(){return this.state.getLatestValue().data.description}get enforce_unique_vote(){return this.state.getLatestValue().data.enforce_unique_vote}get id(){return this.state.getLatestValue().data.id}get max_votes_allowed(){return this.state.getLatestValue().data.max_votes_allowed}get name(){return this.state.getLatestValue().data.name}get options(){return this.state.getLatestValue().data.options}get user_id(){return this.state.getLatestValue().data.user_id}get voting_visibility(){return this.state.getLatestValue().data.voting_visibility}get canCreatePoll(){let{data:e,errors:t}=this.state.getLatestValue(),s=e.options.filter(e=>!!e.text.trim()).length>0,i=!!e.name,a=parseInt(e.max_votes_allowed?.match(tL)?.[0]||""),n=""===e.max_votes_allowed||!!a&&(2<=a||a<=10);return s&&i&&n&&0===Object.values(t).filter(e=>!!e).length}},t9=50,t7=[{created_at:-1}],se={active_participant_count:!0,channel:!0,channel_cid:!0,created_at:!0,created_by:!0,created_by_user_id:!0,deleted_at:!0,draft:!0,last_message_at:!0,latest_replies:!0,parent_message:!0,parent_message_id:!0,participant_count:!0,read:!0,reply_count:!0,thread_participants:!0,title:!0,updated_at:!0},st=e=>{let t={};for(let s in e)se[s]||(t[s]=e[s]);return t},ss=class extends ey{constructor({client:e,threadData:t}){super(),this.failedRepliesMap=new Map,this.activate=()=>{this.state.partialNext({active:!0})},this.deactivate=()=>{this.state.partialNext({active:!1})},this.reload=async()=>{if(!this.state.getLatestValue().isLoading){this.state.partialNext({isLoading:!0});try{let e=await this.client.getThread(this.id,{watch:!0});this.hydrateState(e)}finally{this.state.partialNext({isLoading:!1})}}},this.hydrateState=e=>{if(e===this)return;if(e.id!==this.id)throw Error("Cannot hydrate thread's state using thread with different threadId");let{createdAt:t,custom:s,title:i,deletedAt:a,parentMessage:n,participants:r,read:o,replyCount:l,replies:h,updatedAt:d}=e.state.getLatestValue(),c=Array.from(this.failedRepliesMap.values());this.state.partialNext({title:i,createdAt:t,custom:s,deletedAt:a,parentMessage:n,participants:r,read:o,replyCount:l,replies:c.length?h.concat(c):h,updatedAt:d,isStateStale:!1})},this.registerSubscriptions=()=>{this.hasSubscriptions||(this.addUnsubscribeFunction(this.subscribeThreadUpdated()),this.addUnsubscribeFunction(this.subscribeMarkActiveThreadRead()),this.addUnsubscribeFunction(this.subscribeReloadActiveStaleThread()),this.addUnsubscribeFunction(this.subscribeMarkThreadStale()),this.addUnsubscribeFunction(this.subscribeNewReplies()),this.addUnsubscribeFunction(this.subscribeRepliesRead()),this.addUnsubscribeFunction(this.subscribeRepliesUnread()),this.addUnsubscribeFunction(this.subscribeMessageDeleted()),this.addUnsubscribeFunction(this.subscribeMessageUpdated()))},this.subscribeThreadUpdated=()=>this.client.on("thread.updated",e=>{if(!e.thread||e.thread.parent_message_id!==this.id)return;let t=e.thread;this.state.partialNext({title:t.title,updatedAt:new Date(t.updated_at),deletedAt:t.deleted_at?new Date(t.deleted_at):null,custom:st(t)}
1)}).unsubscribe,this.subscribeMarkActiveThreadRead=()=>this.state.subscribeWithSelector(e=>({active:e.active,unreadMessageCount:sn(this.client.userID)(e)}),({active:e,unreadMessageCount:t})=>{e&&t&&this.throttledMarkAsRead()}),this.subscribeReloadActiveStaleThread=()=>this.state.subscribeWithSelector(e=>({active:e.active,isStateStale:e.isStateStale}),({active:e,isStateStale:t})=>{e&&t&&this.reload()}),this.subscribeMarkThreadStale=()=>this.client.on("user.watching.stop",e=>{let{channel:t}=this.state.getLatestValue();this.client.userID&&this.client.userID===e.user?.id&&e.channel?.cid===t.cid&&this.state.partialNext({isStateStale:!0})}).unsubscribe,this.subscribeRepliesUnread=()=>this.client.on("notification.mark_unread",e=>{if(!e.user||!e.created_at||!e.thread_id||e.thread_id!==this.id)return;let t=e.user.id,s=e.created_at,i=e.user;this.state.next(a=>({...a,read:{...a.read,[t]:{...a.read[t],lastReadAt:new Date(void 0!==e.last_read_at?e.last_read_at:s),user:i,firstUnreadMessageId:e.first_unread_message_id,unreadMessageCount:e.unread_messages??0}}}))}).unsubscribe,this.subscribeNewReplies=()=>this.client.on("message.new",e=>{if(!this.client.userID||e.message?.parent_id!==this.id)return;let t=e.message.user?.id===this.client.userID,{active:s,read:i}=this.state.getLatestValue();this.upsertReplyLocally({message:e.message,timestampChanged:t}),s&&this.throttledMarkAsRead();let a={};for(let t of Object.keys(i)){let n=i[t];if(n){let i=n;t===e.user?.id?i={...i,lastReadAt:e.created_at?new Date(e.created_at):new Date,user:e.user,unreadMessageCount:0}:s&&t===this.client.userID||(i={...i,unreadMessageCount:n.unreadMessageCount+1}),a[t]=i}}this.state.partialNext({read:a})}).unsubscribe,this.subscribeRepliesRead=()=>this.client.on("message.read",e=>{if(!e.user||!e.created_at||!e.thread||e.thread.parent_message_id!==this.id)return;let t=e.user.id,s=e.created_at,i=e.user;this.state.next(a=>({...a,read:{...a.read,[t]:{lastReadAt:new Date(s),user:i,lastReadMessageId:e.last_read_message_id,unreadMessageCount:0}}}))}).unsubscribe,this.subscribeMessageDeleted=()=>this.client.on("message.deleted",e=>{e.message&&(e.message.parent_id===this.id&&(e.hard_delete?this.deleteReplyLocally({message:e.message}):this.upsertReplyLocally({message:e.message})),e.message.id===this.id&&this.updateParentMessageLocally({message:e.message}))}).unsubscribe,this.subscribeMessageUpdated=()=>{let e=["message.updated","reaction.new","reaction.deleted","reaction.updated"].map(e=>this.client.on(e,e=>{e.message&&this.updateParentMessageOrReplyLocally(e.message)}).unsubscribe);return()=>e.forEach(e=>e())},this.unregisterSubscriptions=()=>{let e=super.unregisterSubscriptions();return this.state.partialNext({isStateStale:!0}),e},this.deleteReplyLocally=({message:e})=>{let{replies:t}=this.state.getLatestValue(),s=z({needle:V(e),sortedArray:t,sortDirection:"ascending",selectValueToCompare:e=>e.created_at.getTime(),selectKey:e=>e.id});if(t[s]?.id!==e.id)return;let i=[...t];i.splice(s,1),this.state.partialNext({replies:i})},this.upsertReplyLocally=({message:e,timestampChanged:t=!1})=>{if(e.parent_id!==this.id)throw Error("Reply does not belong to this thread");let s=V(e);"failed"===e.status?this.failedRepliesMap.set(s.id,s):this.failedRepliesMap.has(e.id)&&this.failedRepliesMap.delete(e.id),this.state.next(e=>({...e,replies:H(e.replies,s,t)}))},this.updateParentMessageLocally=({message:e})=>
1{if(e.id!==this.id)throw Error("Message does not belong to this thread");this.state.next(t=>{let s=V(e);return{...t,deletedAt:s.deleted_at,parentMessage:s,replyCount:e.reply_count??t.replyCount}})},this.updateParentMessageOrReplyLocally=e=>{e.parent_id===this.id&&this.upsertReplyLocally({message:e}),e.parent_id||e.id!==this.id||this.updateParentMessageLocally({message:e})},this.markAsRead=async({force:e=!1}={})=>0!==this.ownUnreadCount||e?await this.client.messageDeliveryReporter.markRead(this):null,this.throttledMarkAsRead=J(()=>this.markAsRead(),1e3,{trailing:!0}),this.queryReplies=({limit:e=t9,sort:t=t7,...s}={})=>this.channel.getReplies(this.id,{limit:e,...s},t),this.loadNextPage=({limit:e=t9}={})=>this.loadPage(e),this.loadPrevPage=({limit:e=t9}={})=>this.loadPage(-e),this.loadPage=async e=>{let{pagination:t}=this.state.getLatestValue(),[s,i,a]=e>0?["isLoadingNext","nextCursor","push"]:["isLoadingPrev","prevCursor","unshift"];if(t[s]||null===t[i])return;let n={[e>0?"id_gt":"id_lt"]:t[i]},r=Math.abs(e);this.state.partialNext({pagination:{...t,[s]:!0}});try{let t=await this.queryReplies({...n,limit:r}),o=t.messages.map(V),l=o.at(e>0?-1:0)?.id??null;this.state.next(e=>{let n=e.replies;return o.length>0&&(n=[...e.replies])[a](...o),{...e,replies:n,pagination:{...e.pagination,[i]:t.messages.length<r?null:l,[s]:!1}}})}catch(e){this.client.logger("error",e.message),this.state.next(e=>({...e,pagination:{...e.pagination,[s]:!1}}))}};
1let s=e.channel(t.channel.type,t.channel.id,{name:t.channel.name});s._hydrateMembers({members:t.channel.members??[],overrideCurrentState:!1});let i=e.userID?[{user:{id:e.userID},unread_messages:0,last_read:new Date().toISOString()}]:[];this.state=new ep({active:!1,isLoading:!1,isStateStale:!1,channel:s,createdAt:new Date(t.created_at),deletedAt:t.deleted_at?new Date(t.deleted_at):null,pagination:sa(t),parentMessage:V(t.parent_message),participants:t.thread_participants,read:si(t.read&&0!==t.read.length?t.read:i),replies:t.latest_replies.map(V),replyCount:t.reply_count??0,updatedAt:t.updated_at?new Date(t.updated_at):null,title:t.title,custom:st(t)}),this.id=t.parent_message_id,this.client=e,this.messageComposer=new sh({client:e,composition:t.draft,compositionContext:this})}get channel(){return this.state.getLatestValue().channel}get hasStaleState(){return this.state.getLatestValue().isStateStale}get ownUnreadCount(){return sn(this.client.userID)(this.state.getLatestValue())}},si=e=>e.reduce((e,t)=>(e[t.user.id]={user:t.user,lastReadMessageId:t.last_read_message_id,unreadMessageCount:t.unread_messages??0,lastReadAt:new Date(t.last_read)},e),{}),sa=e=>({nextCursor:null,prevCursor:e.latest_replies.length===e.reply_count?null:e.latest_replies.at(0)?.id??null,isLoadingNext:!1,isLoadingPrev:!1}),sn=e=>t=>e&&t.read[e]?.unreadMessageCount||0,sr=e=>!!e?.message,so=e=>{let t;if(!e)return{draftId:null,id:sh.generateId(),pollId:null,quotedMessage:null,showReplyInChannel:!1,editedMessage:null};let s=e.quoted_message,i=sr(e)?null:V(e),a=null,n=sh.generateId();return sr(e)?(t=e.message,a=e.message.id):(t=e,n=e.id),{draftId:a,id:n,pollId:t.poll_id??null,quotedMessage:s?V(s):null,showReplyInChannel:!1,editedMessage:i}},sl=class e extends ey{constructor({composition:t,config:s,compositionContext:i,client:a}){let n;if(super(),this.snapshots=[],this.setEditedMessage=e=>{this.state.partialNext({editedMessage:e??null}),e&&this.textComposer.clearCommand()},this.getCommandDisabledReason=e=>this.editedMessage?"editing":this.quotedMessage&&("moderation_set"===e.set||"moderation_set"===e.name)?"quoted_message":void 0,this.isCommandDisabled=e=>
1!!this.getCommandDisabledReason(e),this.validateCommandSendability=(e,t=this.textComposer.text)=>{let s,i=tm(t,this.textComposer.mentionedUsers),a={command:e,commandArgsText:e.name?(s=e.name,t.replace(RegExp(`^${tg(`/${s}`)}\\s*`),"")).trim():t.trim(),composer:this,mentionedUsersInText:i,rawText:t},n=this.config.commands.sendValidator(a);return n&&!n.ready?n:{command:e,ready:!0}},this.refreshId=()=>{this.state.partialNext({id:e.generateId()})},this.initState=({composition:e}={})=>{this.clearSnapshots(),this.editingAuditState.partialNext(this.initEditingAuditState(e));let t=void 0===e?e:sr(e)?e.message:V(e);this.attachmentManager.initState({message:t}),this.linkPreviewsManager.initState({message:t}),this.locationComposer.initState({message:t}),this.textComposer.initState({message:t}),this.pollComposer.initState(),this.customDataManager.initState({message:t}),this.state.next(so(e))},this.initStateFromChannelResponse=e=>{this.channel.cid===e.channel.cid&&(e.draft?this.initState({composition:e.draft}):this.state.getLatestValue().draftId&&(this.clear(),this.client.offlineDb?.executeQuerySafely(e=>e.deleteDraft({cid:this.channel.cid,parent_id:void 0}),{method:"deleteDraft"})))},this.initEditingAuditState=e=>(e=>{let t=null,s=new Date().getTime();return sr(e)?s=t=new Date(e.created_at).getTime():e&&e.created_at.getTime&&(s=new Date(e.updated_at).getTime()),{lastChange:{draftUpdate:t,stateUpdate:s}}})(e),this.clearSnapshots=()=>{this.snapshots=[]},this.getSnapshot=()=>({attachmentManager:this.attachmentManager.getSnapshot(),customDataManager:this.customDataManager.getSnapshot(),linkPreviewsManager:this.linkPreviewsManager.getSnapshot(),locationComposer:this.locationComposer.getSnapshot(),pollComposer:this.pollComposer.getSnapshot(),textComposer:this.textComposer.getSnapshot()}),this.restoreSnapshot=e=>{this.attachmentManager.restoreSnapshot(e.attachmentManager),this.linkPreviewsManager.restoreSnapshot(e.linkPreviewsManager),this.locationComposer.restoreSnapshot(e.locationComposer),this.pollComposer.restoreSnapshot(e.pollComposer),this.customDataManager.restoreSnapshot(e.customDataManager),this.textComposer.restoreSnapshot(e.textComposer)},this.captureSnapshot=(e=this.getSnapshot())=>{this.snapshots.length||this.snapshots.push(e)},this.popSnapshot=()=>this.snapshots.pop(),this.registerEffectHandler=(e,t)=>{this.effectHandlers.registerEffectHandler(e,t)},this.applyEffects=(e=[])=>{this.effectHandlers.applyEffects(e)},this.registerDraftEventSubscriptions=()=>{let e=this.subscribeDraftUpdated(),t=this.subscribeDraftDeleted();return()=>{e(),t()}},this.registerSubscriptions=()=>(this.hasSubscriptions||(this.addUnsubscribeFunction(this.subscribeMessageComposerSetupStateChange()),this.addUnsubscribeFunction(this.subscribeMessageUpdated()),this.addUnsubscribeFunction(this.subscribeMessageDeleted()),this.addUnsubscribeFunction(this.subscribeTextComposerStateChanged()),this.addUnsubscribeFunction(this.subscribeAttachmentManagerStateChanged()),this.addUnsubscribeFunction(this.subscribeLinkPreviewsManagerStateChanged()),this.addUnsubscribeFunction(this.subscribeLocationComposerStateChanged()),this.addUnsubscribeFunction(this.subscribePollComposerStateChanged()),this.addUnsubscribeFunction(this.subscribeCustomDataManagerStateChanged()),this.addUnsubscribeFunction(this.subscribeMessageComposerStateChanged()),this.addUnsubscribeFunction(this.subscribeMessageComposerConfigStateChanged())),this.incrementRefCount(),()=>this.unregisterSubscriptions()),this.subscribeMessageUpdated=()=>{let e=["message.updated","reaction.new","reaction.deleted","reaction.updated"].map(e=>this.client.on(e,e=>{e.message&&(e.message.id===this.id&&this.initState({composition:e.message}),this.quotedMessage?.id&&e.message.id===this.quotedMessage.id&&this.setQuotedMessage(V(e.message)))}).unsubscribe);return()=>e.forEach(e=>e())},this.subscribeMessageComposerSetupStateChange=()=>{let e=null,t=this.client._messageComposerSetupState.subscribeWithSelector(({setupFunction:e})=>({setup:e}),({setup:t})=>{e?.(),e=t?.({composer:this})??null});return()=>{e?.(),t()}},this.subscribeMessageDeleted=()=>this.client.on("message.deleted",e=>{e.message&&(e.message.id===this.id?this.clear():this.quotedMessage&&e.message.id===this.quotedMessage.id&&this.setQuotedMessage(null))}).unsubscribe,this.subscribeDraftUpdated=()=>this.client.on("draft.updated",e=>{let t=e.draft;t&&(t.parent_id??null)===(this.threadId??null)&&t.channel_cid===this.channel.cid&&(this.editedMessage||this.initState({composition:t}))}).unsubscribe,this.subscribeDraftDeleted=()=>this.client.on("draft.deleted",e=>{let t=e.draft;t&&(t.parent_id??null)===(this.threadId??null)&&t.channel_cid===this.channel.cid&&!this.editedMessage&&(this.logDraftUpdateTimestamp(),this.compositionIsEmpty||this.clear())}).unsubscribe,this.subscribeTextComposerStateChanged=()=>this.textComposer.state.subscribeWithSelector(({text:e})=>[e],([e],t)=>{if(void 0!==t){if(this.logStateUpdateTimestamp(),this.compositionIsEmpty)return void this.deleteDraft();this.linkPreviewsManager.enabled&&(e?this.linkPreviewsManager.findAndEnrichUrls(e):this.linkPreviewsManager.clearPreviews())}}),this.subscribeAttachmentManagerStateChanged=()=>this.attachmentManager.state.subscribe((e,t)=>{if(void 0!==t&&(this.logStateUpdateTimestamp(),this.compositionIsEmpty))return void this.deleteDraft()}),this.subscribeLocationComposerStateChanged=()=>this.locationComposer.state.subscribe((e,t)=>{if(void 0!==t&&(this.logStateUpdateTimestamp(),this.compositionIsEmpty))return void this.deleteDraft()}),this.subscribeLinkPreviewsManagerStateChanged=()=>this.linkPreviewsManager.state.subscribe((e,t)=>{if(void 0!==t&&(this.logStateUpdateTimestamp(),this.compositionIsEmpty))return void this.deleteDraft()}),this.subscribePollComposerStateChanged=()=>this.pollComposer.state.subscribe((e,t)=>{if(void 0!==t&&(this.logStateUpdateTimestamp(),this.compositionIsEmpty))return void this.deleteDraft()}),this.subscribeCustomDataManagerStateChanged=()=>this.customDataManager.state.subscribe((e,t)=>{void 0===t||this.customDataManager.isMessageDataEqual(e,t)||this.logStateUpdateTimestamp()}),this.subscribeMessageComposerStateChanged=()=>this.state.subscribe((e,t)=>{void 0!==t&&(this.logStateUpdateTimestamp(),this.compositionIsEmpty&&this.deleteDraft())}),this.subscribeMessageComposerConfigStateChanged=()=>{let e,t=this.configState.subscribeWithSelector(e=>({textDefaultValue:e.text.defaultValue,draftsEnabled:e.drafts.enabled}),({textDefaultValue:t,draftsEnabled:s})=>{""===this.textComposer.text&&t&&this.textComposer.insertText({text:t,selection:{start:0,end:0}}),s&&!e?e=this.registerDraftEventSubscriptions():!s&&e&&(e(),e=null)});return()=>{e?.(),t()}},this.setQuotedMessage=e=>{this.state.partialNext({quotedMessage:e});let t=this.textComposer.command;e&&t&&this.isCommandDisabled(t)&&this.textComposer.clearCommand()},this.toggleShowReplyInChannel=()=>{this.state.partialNext({showReplyInChannel:!this.showReplyInChannel})},this.clear=()=>{this.setQuotedMessage(null),this.initState()},this.restore=()=>{let{editedMessage:e}=this;if(e)return void this.initState({composition:e});this.clear()},this.compose=async()=>{let e=this.editedMessage?.created_at??new Date,t=await this.compositionMiddlewareExecutor.execute({eventName:"compose",initialValue:{message:{id:this.id,parent_id:this.threadId??void 0,type:"regular"},localMessage:{attachments:[],created_at:e,deleted_at:null,error:void 0,id:this.id,mentioned_users:[],parent_id:this.threadId??void 0,pinned_at:this.editedMessage?.pinned_at||null,reaction_groups:null,status:this.editedMessage?this.editedMessage.status:"sending",text:"",type:"regular",updated_at:e},sendOptions:{}}});if("discard"!==t.status)return t.state},this.composeDraft=async()=>{let{state:e,status:t}=await this.draftCompositionMiddlewareExecutor.execute({eventName:"compose",initialValue:{draft:{id:this.id,parent_id:this.threadId??void 0,text:""}}
1});if("discard"!==t)return e},this.createDraft=async()=>{if(this.editedMessage||!this.config.drafts.enabled)return;let e=await this.composeDraft();if(!e)return;let{draft:t}=e;if(this.state.partialNext({draftId:t.id}),this.client.offlineDb)try{let e={channel_cid:this.channel.cid,created_at:new Date().toISOString(),message:t,parent_id:t.parent_id,quoted_message:this.quotedMessage?function(e){let t=t=>{if(!t)return null;let s=new Date().toISOString();return{...t,created_at:e.created_at?e.created_at.toISOString():s,deleted_at:e.deleted_at?e.deleted_at.toISOString():void 0,pinned_at:e.pinned_at?e.pinned_at.toISOString():void 0,updated_at:e.updated_at?e.updated_at.toISOString():s}};return{...t(e),quoted_message:t(e.quoted_message)}}(this.quotedMessage):void 0};await this.client.offlineDb.upsertDraft({draft:e})}catch(e){this.client.logger("error","offlineDb:upsertDraft",{tags:["channel","offlineDb"],error:e})}this.logDraftUpdateTimestamp(),await this.channel.createDraft(t)},this.deleteDraft=async()=>{if(this.editedMessage||!this.config.drafts.enabled||!this.draftId)return;this.state.partialNext({draftId:null});let e=this.threadId??void 0;if(this.client.offlineDb)try{await this.client.offlineDb.deleteDraft({cid:this.channel.cid,parent_id:e})}catch(e){this.client.logger("error","offlineDb:deleteDraft",{tags:["channel","offlineDb"],error:e})}this.logDraftUpdateTimestamp(),await this.channel.deleteDraft({parent_id:e})},this.getDraft=async()=>{if(this.editedMessage||!this.config.drafts.enabled||!this.client.userID)return;let e=await this.client.offlineDb?.getDraft({cid:this.channel.cid,userId:this.client.userID,parent_id:this.threadId??void 0});e&&this.initState({composition:e});try{let{draft:e}=await this.channel.getDraft({parent_id:this.threadId??void 0});if(!e)return;this.client.offlineDb?.executeQuerySafely(t=>t.upsertDraft({draft:e}),{method:"upsertDraft"}),this.initState({composition:e})}catch(e){this.client.logger("error","messageComposer:getDraft",{tags:["channel","messageComposer"],error:e})}},this.createPoll=async()=>{let e=await this.pollComposer.compose();if(e&&e.data.id)try{let t=await this.client.polls.createPoll(e.data);this.state.partialNext({pollId:t?.id})}catch(e){throw this.client.notifications.addError({message:"Failed to create the poll",origin:{emitter:"MessageComposer",context:{composer:this}},options:{type:"api:poll:create:failed",metadata:{reason:e.message},originalError:e instanceof Error?e:void 0}}),e}},this.sendLocation=async()=>{let e=this.locationComposer.validLocation;if(!this.threadId&&e)try{await this.channel.sendSharedLocation(e),this.refreshId(),this.locationComposer.initState()}catch(e){throw this.client.notifications.addError({message:"Failed to share the location",origin:{emitter:"MessageComposer",context:{composer:this}},options:{type:"api:location:create:failed",metadata:{reason:e.message},originalError:e instanceof Error?e:void 0}}),e}},this.compositionContext=i,i instanceof s_)this.channel=i;else if(i instanceof ss)this.channel=i.channel;else if(i.cid){let[e,t]=i.cid.split(":");this.channel=a.channel(e,t)}else throw Error("MessageComposer requires composition context pointing to channel (channel or context.cid)");this.configState=new ep(tW(eK(eK(tz,s??{}),{location:{enabled:this.channel.getConfig()?.shared_locations}},(e,t,s)=>"object"==typeof e?void 0:(!1!==e||"enabled"!==s)&&(["string","number","bigint","boolean","symbol"].includes(typeof t)?t:e)),s)),sr(t)?n=t.message:t&&(n=V(t)),this.attachmentManager=new eY({composer:this,message:n}),this.linkPreviewsManager=new tZ({composer:this,message:n}),this.locationComposer=new t0({composer:this,message:n}),this.textComposer=new e8({composer:this,message:n}),this.pollComposer=new t8({composer:this}),this.customDataManager=new tG({composer:this,message:n}),this.editingAuditState=new ep(this.initEditingAuditState(t)),this.state=new ep(so(t)),this.compositionMiddlewareExecutor=new tM({composer:this}),this.draftCompositionMiddlewareExecutor=new tx({composer:this}),this.effectHandlers=new t3({composer:this})}static evaluateContextType(e){return e instanceof s_?"channel":e instanceof ss?"thread":"string"==typeof e.legacyThreadId?"legacy_thread":"message"}static constructTag(e){return`${this.evaluateContextType(e)}_${e.id}`}get config(){return this.configState.getLatestValue()}get editedMessage(){return this.state.getLatestValue().editedMessage??void 0}set editedMessage(e){this.state.partialNext({editedMessage:e??null})}get contextType(){return e.evaluateContextType(this.compositionContext)}get tag(){return e.constructTag(this.compositionContext)}get threadId(){return this.compositionContext instanceof s_?null:this.compositionContext instanceof ss?this.compositionContext.id:"string"==typeof this.compositionContext.legacyThreadId?this.compositionContext.legacyThreadId:"string"==typeof this.compositionContext.parent_id?this.compositionContext.parent_id:null}get client(){return this.channel.getClient()}get id(){return this.state.getLatestValue().id}get draftId(){return this.state.getLatestValue().draftId}get lastChange(){return this.editingAuditState.getLatestValue().lastChange}get quotedMessage(){return this.state.getLatestValue().quotedMessage}get pollId(){return this.state.getLatestValue().pollId}
1get showReplyInChannel(){return this.state.getLatestValue().showReplyInChannel}get isCommandSendable(){let e=this.textComposer.command;return!e||this.validateCommandSendability(e).ready}get hasSendableData(){return this.isCommandSendable&&!!(!this.attachmentManager.uploadsInProgressCount&&(!this.textComposer.textIsEmpty||this.attachmentManager.successfulUploadsCount>0)||this.pollId||this.locationComposer.validLocation)}get compositionIsEmpty(){return!this.quotedMessage&&this.contentIsEmpty}get contentIsEmpty(){return this.textComposer.textIsEmpty&&!this.attachmentManager.attachments.length&&!this.pollId&&!this.locationComposer.validLocation}get lastChangeOriginIsLocal(){let e=null===this.lastChange.draftUpdate&&!this.editedMessage,t=!!this.editedMessage?.updated_at&&new Date(this.editedMessage.updated_at).getTime()<this.lastChange.stateUpdate,s=!!this.lastChange.draftUpdate&&this.lastChange.draftUpdate<this.lastChange.stateUpdate;return t||s||e}updateConfig(e){this.configState.partialNext(tW(eK(this.config,e),e))}logStateUpdateTimestamp(){this.editingAuditState.partialNext({lastChange:{...this.lastChange,stateUpdate:new Date().getTime()}})}logDraftUpdateTimestamp(){if(!this.config.drafts.enabled)return;let e=new Date().getTime();this.editingAuditState.partialNext({lastChange:{draftUpdate:e,stateUpdate:e}})}};sl.generateId=O;var sh=sl,sd=class e{constructor({client:e}){this.deliveryReportCandidates=new Map,this.nextDeliveryReportCandidates=new Map,this.markDeliveredRequestPromise=null,this.markDeliveredTimeout=null,this.requestTimeoutMs=1e3,this.requestRetryCount=0,this.getNextDeliveryReportCandidate=e=>{let t,s,i,a=this.client.user?.id;if(!a)return;let n=[];if(e instanceof s_){n=e.state.latestMessages;let r=e.state.read[a]??{};s=r?.last_read,t=r?.last_delivered_at,i=e.cid}else{if(!(e instanceof ss))return;n=e.state.getLatestValue().replies;let r=e.state.getLatestValue().read[a]??{};s=r?.lastReadAt,t=r?.lastDeliveredAt,i=`${e.channel.cid}:${e.id}`;return}if(!i)return;let[r]=n.slice(-1);return!r||s>=r.created_at||!r||(t??0)>=r.created_at?{key:i,id:null}:{key:i,id:r.id||null}},this.announceDelivery=e=>{if(!this.canExecuteRequest)return;let{latest_delivered_messages:t,sendBuffer:s}=this.confirmationsFromDeliveryReportCandidates();if(!t.length)return;let i={...e,latest_delivered_messages:t},a=({preventSchedulingRetry:t}={})=>{for(let[e,t]of(this.markDeliveredRequestPromise=null,this.nextDeliveryReportCandidates.entries()))this.deliveryReportCandidates.set(e,t);this.nextDeliveryReportCandidates=new Map,t||this.announceDeliveryBuffered(e)},n=()=>{this.resetBackOff(),a()},r=e=>{let t=new Map(s);for(let[e,s]of this.deliveryReportCandidates.entries())t.set(e,s);this.deliveryReportCandidates=t,e7(e)&&te(e)||e.status>=500?(this.increaseBackOff(),a()):a({preventSchedulingRetry:!0})};this.markDeliveredRequestPromise=this.client.markChannelsDelivered(i).then(n,r)},this.announceDeliveryBuffered=e=>{!this.hasTimer&&this.canExecuteRequest&&(this.markDeliveredTimeout=setTimeout(()=>{this.markDeliveredTimeout=null,this.announceDelivery(e)},this.requestTimeoutMs))},this.markRead=async(e,t)=>{let s;if(s=this.client,!(s.user?.privacy_settings?.read_receipts?.enabled??!0))return null;let i=null;return e instanceof s_?i=await e.markAsReadRequest(t):e instanceof ss&&(i=await e.channel.markAsReadRequest({...t,thread_id:e.id})),this.removeCandidateFor(e),i},this.throttledMarkRead=J(this.markRead,1e3,{leading:!1,trailing:!0}),this.client=e}get markDeliveredRequestInFlight(){return null!==this.markDeliveredRequestPromise}get hasTimer(){return null!==this.markDeliveredTimeout}get hasDeliveryCandidates(){return this.deliveryReportCandidates.size>0}get canExecuteRequest(){return!this.markDeliveredRequestInFlight&&this.hasDeliveryCandidates}static hasPermissionToReportDeliveryFor(e){return e instanceof s_?!!e.getConfig()?.delivery_events:e instanceof ss?!!e.channel.getConfig()?.delivery_events:void 0}increaseBackOff(){this.requestRetryCount>=3||(this.requestRetryCount=this.requestRetryCount+1,this.requestTimeoutMs=2*this.requestTimeoutMs)}resetBackOff(){this.requestTimeoutMs=1e3,this.requestRetryCount=0}confirmationsFrom(e){return Array.from(e.entries()).map(([e,t])=>{let[s,i,a]=e.split(":");return a?{cid:`${s}:${i}`,id:t,parent_id:a}:{cid:e,id:t}})}confirmationsFromDeliveryReportCandidates(){let e=Array.from(this.deliveryReportCandidates),t=new Map(e.slice(0,100));return this.deliveryReportCandidates=new Map(e.slice(100)),{latest_delivered_messages:this.confirmationsFrom(t),sendBuffer:t}}candidateKeyFor(e){return e instanceof s_?e.cid:e instanceof ss?`${e.channel.cid}:${e.id}`:void 0}trackDeliveredCandidate(t){if(!e.hasPermissionToReportDeliveryFor(t))return;let s=this.getNextDeliveryReportCandidate(t);
1if(!s?.key)return;let i=this.markDeliveredRequestInFlight?this.nextDeliveryReportCandidates:this.deliveryReportCandidates;null===s.id?i.delete(s.key):i.set(s.key,s.id)}removeCandidateFor(e){let t=this.candidateKeyFor(e);t&&(this.deliveryReportCandidates.delete(t),this.nextDeliveryReportCandidates.delete(t))}syncDeliveredCandidates(e){if(this.client.user?.privacy_settings?.delivery_receipts?.enabled!==!1){for(let t of e)this.trackDeliveredCandidate(t);this.announceDeliveryBuffered()}}},sc={timestampMs:-1/0,msgId:""},su=(e,t)=>e.timestampMs!==t.timestampMs?e.timestampMs-t.timestampMs:0,sg=(e,t,s)=>{let i=0,a=e.length;for(;i<a;){let n=i+a>>>1;su(s(e[n]),t)>=0?a=n:i=n+1}return i},sp=(e,t,s)=>{let i=0,a=e.length;for(;i<a;){let n=i+a>>>1;su(s(e[n]),t)>0?a=n:i=n+1}return i},sm=(e,t,s)=>e.splice(sp(e,s(t),s),0,t),sf=(e,t,s,i)=>{let a=sg(e,s,i);for(;a<e.length&&0===su(i(e[a]),s);){if(e[a].user.id===t.user.id)return void e.splice(a,1);a++}},sy=class{constructor({locateMessage:e}){this.byUser=new Map,this.readSorted=[],this.deliveredSorted=[],this.locateMessage=e}ingestInitial(e){for(let t of(this.byUser.clear(),this.readSorted=[],this.deliveredSorted=[],e)){let e=t.last_read?new Date(t.last_read).getTime():null,s=t.last_delivered_at?new Date(t.last_delivered_at).getTime():null,i=e?this.locateMessage(e)??sc:sc,a=s?this.locateMessage(s)??sc:sc;0>su(a,i)&&(a=i);let n={user:t.user,lastReadRef:i,lastDeliveredRef:a};this.byUser.set(t.user.id,n),this.readSorted.splice(sg(this.readSorted,i,e=>e.lastReadRef),0,n),this.deliveredSorted.splice(sg(this.deliveredSorted,a,e=>e.lastDeliveredRef),0,n)}}onMessageDelivered({user:e,deliveredAt:t,lastDeliveredMessageId:s}){let i=new Date(t).getTime(),a=s?{timestampMs:i,msgId:s}:this.locateMessage(new Date(t).getTime());if(!a)return;let n=this.ensureUser(e),r=0>su(a,n.lastReadRef)?n.lastReadRef:a;0>=su(r,n.lastDeliveredRef)||(sf(this.deliveredSorted,n,n.lastDeliveredRef,e=>e.lastDeliveredRef),n.lastDeliveredRef=r,sm(this.deliveredSorted,n,e=>e.lastDeliveredRef))}onMessageRead({user:e,readAt:t,lastReadMessageId:s}){let i=new Date(t).getTime(),a=s?{timestampMs:i,msgId:s}:this.locateMessage(i);if(!a)return;let n=this.ensureUser(e);!(0>=su(a,n.lastReadRef))&&(sf(this.readSorted,n,n.lastReadRef,e=>e.lastReadRef),n.lastReadRef=a,sm(this.readSorted,n,e=>e.lastReadRef),0>su(n.lastDeliveredRef,n.lastReadRef)&&(sf(this.deliveredSorted,n,n.lastDeliveredRef,e=>e.lastDeliveredRef),n.lastDeliveredRef=n.lastReadRef,sm(this.deliveredSorted,n,e=>e.lastDeliveredRef)))}onNotificationMarkUnread({user:e,lastReadAt:t,lastReadMessageId:s}){let i=this.ensureUser(e),a=t?{timestampMs:new Date(t).getTime(),msgId:s??""}:{...sc};(0!==su(a,i.lastReadRef)||a.msgId!==i.lastReadRef.msgId)&&(sf(this.readSorted,i,i.lastReadRef,e=>e.lastReadRef),i.lastReadRef=a,sm(this.readSorted,i,e=>e.lastReadRef),0>su(i.lastDeliveredRef,i.lastReadRef)&&(sf(this.deliveredSorted,i,i.lastDeliveredRef,e=>e.lastDeliveredRef),i.lastDeliveredRef=i.lastReadRef,sm(this.deliveredSorted,i,e=>e.lastDeliveredRef)))}readersForMessage(e){let t=sg(this.readSorted,e,({lastReadRef:e})=>e);return this.readSorted.slice(t).map(e=>e.user)}deliveredForMessage(e){let t=sg(this.deliveredSorted,e,({lastDeliveredRef:e})=>e);return this.deliveredSorted.slice(t).map(e=>e.user)}deliveredNotReadForMessage(e){let t=sg(this.deliveredSorted,e,({lastDeliveredRef:e})=>e),s=[];for(let i=t;i<this.deliveredSorted.length;i++){let t=this.deliveredSorted[i];0>su(t.lastReadRef,e)&&s.push(t.user)}return s}usersWhoseLastReadIs(e){if(!e.msgId)return[];let t=sg(this.readSorted,e,e=>e.lastReadRef),s=sp(this.readSorted,e,e=>e.lastReadRef),i=[];for(let a=t;a<s;a++){let t=this.readSorted[a];t.lastReadRef.msgId===e.msgId&&i.push(t.user)}return i}usersWhoseLastDeliveredIs(e){if(!e.msgId)return[];let t=sg(this.deliveredSorted,e,e=>e.lastDeliveredRef),s=sp(this.deliveredSorted,e,e=>e.lastDeliveredRef),i=[];for(let a=t;a<s;a++){let t=this.deliveredSorted[a];t.lastDeliveredRef.msgId===e.msgId&&i.push(t.user)}return i}hasUserRead(e,t){let s=this.byUser.get(t);return!!s&&su(s.lastReadRef,e)>=0}hasUserDelivered(e,t){let s=this.byUser.get(t);return!!s&&su(s.lastDeliveredRef,e)>=0}getUserProgress(e){let t=this.byUser.get(e);return t||null}groupUsersByLastReadMessage(){return Array.from(this.byUser.values()).reduce((e,t)=>
1{let s=t.lastReadRef.msgId;return s&&(e[s]||(e[s]=[]),e[s].push(t.user)),e},{})}groupUsersByLastDeliveredMessage(){return Array.from(this.byUser.values()).reduce((e,t)=>{let s=t.lastDeliveredRef.msgId;return s&&(e[s]||(e[s]=[]),e[s].push(t.user)),e},{})}ensureUser(e){let t=this.byUser.get(e.id);return t||(t={user:e,lastReadRef:sc,lastDeliveredRef:sc},this.byUser.set(e.id,t),sm(this.readSorted,t,e=>e.lastReadRef),sm(this.deliveredSorted,t,e=>e.lastDeliveredRef)),t}},s_=class{constructor(e,t,s,i){if(this.create=async e=>{let t={...e,watch:!1,state:!1,presence:!1};return await this.query(t,"latest")},this._callChannelListeners=e=>{let t=[];for(let s of(this.listeners.all&&t.push(...this.listeners.all),this.listeners[e.type]&&t.push(...this.listeners[e.type]),t))"string"!=typeof s&&s(e)},this._channelURL=()=>{if(!this.id)throw Error("channel id is not defined");return`${this.getClient().baseURL}/channels/${encodeURIComponent(this.type)}/${encodeURIComponent(this.id)}`},!/^[\w_-]+$/.test(t))throw Error(`Invalid chat type ${t}, letters, numbers and "_-" are allowed`);if("string"==typeof s&&!/^[\w!_-]+$/.test(s))throw Error(`Invalid chat id ${s}, letters, numbers and "!-_" are allowed`);this._client=e,this.type=t,this.id=s,this.data=i,this._data={...i},this.cid=`${t}:${s}`,this.listeners={},this.state=new eu(this),this.initialized=!1,this.offlineMode=!1,this.lastTypingEvent=null,this.isTyping=!1,this.disconnected=!1,this.messageComposer=new sh({client:this._client,compositionContext:this}),this.messageReceiptsTracker=new sy({locateMessage:e=>{let t=this.state.findMessageByTimestamp(e);return t&&{timestampMs:e,msgId:t.id}}}),this.cooldownTimer=new eb({channel:this})}getClient(){if(!0===this.disconnected)throw Error("You can't use a channel after client.disconnect() was called");return this._client}getConfig(){return this.getClient().configs[this.cid]}async _sendMessage(e,t){return await this.getClient().post(this._channelURL()+"/message",{message:e,...t})}async sendMessage(e,t){try{let s=this.getClient().offlineDb;if(s){let i=e.id;if(i)return await s.queueTask({task:{channelId:this.id,channelType:this.type,messageId:i,payload:[e,t],type:"send-message"}})}}catch(e){this._client.logger("error","offlineDb:send-message",{tags:["channel","offlineDb"],error:e})}return await this._sendMessage(e,t)}sendFile(e,t,s,i,a){return this.getClient().sendFile(`${this._channelURL()}/file`,e,t,s,i,a)}sendImage(e,t,s,i,a){return this.getClient().sendFile(`${this._channelURL()}/image`,e,t,s,i,a)}deleteFile(e){return this.getClient().delete(`${this._channelURL()}/file`,{url:e})}deleteImage(e){return this.getClient().delete(`${this._channelURL()}/image`,{url:e})}async sendEvent(e){return this._checkInitialized(),await this.getClient().post(this._channelURL()+"/event",{event:e})}async search(e,t={}){if(t.offset&&t.next)throw Error("Cannot specify offset with next");let s={filter_conditions:{cid:this.cid},...t,sort:t.sort?E(t.sort):void 0};if("string"==typeof e)s.query=e;else if("object"==typeof e)s.message_filter_conditions=e;else throw Error(`Invalid type ${typeof e} for query parameter`);return await this.getClient().wsPromise,await this.getClient().get(this.getClient().baseURL+"/search",{payload:s})}async queryMembers(e,t=[],s={}){let i,a,n=this.type;return this.id?i=this.id:this.data?.members&&Array.isArray(this.data.members)&&(a=this.data.members),await this.getClient().get(this.getClient().baseURL+"/members",{payload:{type:n,id:i,members:a,sort:E(t),filter_conditions:e,...s}})}async updateMemberPartial(e,t){let s=new URL(`${this._channelURL()}/member`);return t?.userId&&s.searchParams.append("user_id",t.userId),await this.getClient().patch(s.toString(),e)}async partialUpdateMember(e,t){if(!e)throw Error("Please specify the user id");return await this.getClient().patch(this._channelURL()+`/member/${encodeURIComponent(e)}`,t)}async sendReaction(e,t,s){if(!e)throw Error("Message id is missing");if(!t||0===Object.keys(t).length)throw Error("Reaction object is missing");try{let i=this.getClient().offlineDb;if(i)return await i.queueTask({task:{channelId:this.id,channelType:this.t
1ype,messageId:e,payload:[e,t,s],type:"send-reaction"}})}catch(e){this._client.logger("error","offlineDb:send-reaction",{tags:["channel","offlineDb"],error:e})}return this._sendReaction(e,t,s)}async _sendReaction(e,t,s){if(!e)throw Error("Message id is missing");if(!t||0===Object.keys(t).length)throw Error("Reaction object is missing");return await this.getClient().post(this.getClient().baseURL+`/messages/${encodeURIComponent(e)}/reaction`,{reaction:t,...s})}async deleteReaction(e,t,s){if(this._checkInitialized(),!t||!e)throw Error("Deleting a reaction requires specifying both the message and reaction type");try{let i=this.getClient().offlineDb;if(i){let a=this.state.messages.find(({id:t})=>t===e),n={created_at:"",updated_at:"",message_id:e,type:t,user_id:this.getClient().userID??s};return a&&await i.deleteReaction({message:a,reaction:n}),await i.queueTask({task:{channelId:this.id,channelType:this.type,messageId:e,payload:[e,t],type:"delete-reaction"}})}}catch(e){this._client.logger("error","offlineDb:delete-reaction",{tags:["channel","offlineDb"],error:e})}return await this._deleteReaction(e,t,s)}async _deleteReaction(e,t,s){if(this._checkInitialized(),!t||!e)throw Error("Deleting a reaction requires specifying both the message and reaction type");let i=this.getClient().baseURL+`/messages/${encodeURIComponent(e)}/reaction/${encodeURIComponent(t)}`;return s?await this.getClient().delete(i,{user_id:s}):await this.getClient().delete(i,{})}async update(e={},t,s){return["config","cid","created_by","id","member_count","type","created_at","updated_at","last_message_at","own_capabilities"].forEach(t=>{delete e[t]}),await this._update({message:t,data:e,...s})}async updatePartial(e){let t=await this.getClient().patch(this._channelURL(),e),s=[...t.channel.own_capabilities||[]].sort().join()!==[...Array.isArray(this.data?.own_capabilities)?this.data?.own_capabilities:[]].sort().join();return this.data=t.channel,s&&this.getClient().dispatchEvent({type:"capabilities.changed",cid:this.cid,own_capabilities:t.channel.own_capabilities}),t}async enableSlowMode(e){let t=await this.getClient().post(this._channelURL(),{cooldown:e});return this.data=t.channel,t}async disableSlowMode(){let e=await this.getClient().post(this._channelURL(),{cooldown:0});return this.data=e.channel,e}async sendSharedLocation(e,t){let s=await this.sendMessage({id:e.message_id,shared_location:e,user:t?{id:t}:void 0});return e.end_at&&this.getClient().dispatchEvent({message:s.message,type:"live_location_sharing.started"}),s}async stopLiveLocationSharing(e){let t=await this.getClient().updateLocation({...e,end_at:new Date().toISOString()});this.getClient().dispatchEvent({live_location:t,type:"live_location_sharing.stopped"})}async delete(e={}){return await this.getClient().delete(this._channelURL(),{...e})}async truncate(e={}){return await this.getClient().post(this._channelURL()+"/truncate",e)}async acceptInvite(e={}){return await this._update({accept_invite:!0,...e})}async rejectInvite(e={}){return await this._update({reject_invite:!0,...e})}async addMembers(e,t,s={}){return await this._update({add_members:e,message:t,...s})}async addFilterTags(e,t,s={}){return await this._update({add_filter_tags:e,message:t,...s})}async removeFilterTags(e,t,s={}){return await this._update({remove_filter_tags:e,message:t,...s})}async addModerators(e,t,s={}){return await this._update({add_moderators:e,message:t,...s})}async assignRoles(e,t,s={}){return await this._update({assign_roles:e,message:t,...s})}async inviteMembers(e,t,s={}){return await this._update({invites:e,message:t,...s})}async removeMembers(e,t,s={}){return await this._update({remove_members:e,message:t,...s})}async demoteModerators(e,t,s={}){return await this._update({demote_moderators:e,message:t,...s})}async _update(e){let t=await this.getClient().post(this._channelURL(),e);return this.data=t.channel,t}async mute(e={}){return await this.getClient().post(this.getClient().baseURL+"/moderation/mute/channel",{channel_cid:this.cid,...e})}async unmute(e={}){return await this.getClient().post(this.getClient().baseURL+"/moderation/unmute/channel",{channel_cid:this.cid,...e})}async archive(e={}){let t=this.getClient(),s=e.user_id||t.userID;if(!s)throw Error("A user_id is required for archiving a channel");return(await this.partialUpdateMember(s,{set:{archived:!0}})).channel_member}async unarchive(e={}){let t=this.getClient(),s=e.user_id||t.userID;if(!s)throw Error("A user_id is required for unarchiving a channel");return(await this.partialUpdateMember(s,{set:{archived:!1}})).channel_member}async pin(e={}){let t=this.getClient(),s=e.user_id||t.userID;if(!s)throw Error("A user_id is required for pinning a channel");return(await this.partialUpdateMember(s,{set:{pinned:!0}})).channel_member}async unpin(e={}){let t=this.getClient(),s=e.user_id||t.userID;if(!s)throw Error("A user_id is required for unpinning a channel");return(await this.partialUpdateMember(s,{set:{pinned:!1}
1})).channel_member}muteStatus(){return this._checkInitialized(),this.getClient()._muteStatus(this.cid)}sendAction(e,t){if(this._checkInitialized(),!e)throw Error("Message id is missing");return this.getClient().post(this.getClient().baseURL+`/messages/${encodeURIComponent(e)}/action`,{message_id:e,form_data:t,id:this.id,type:this.type})}async keystroke(e,t){if(!this._isTypingIndicatorsEnabled())return;let s=new Date,i=this.lastTypingEvent&&s.getTime()-this.lastTypingEvent.getTime();this.lastKeyStroke=s,this.isTyping=!0,(null===i||i>2e3)&&(this.lastTypingEvent=new Date,await this.sendEvent({type:"typing.start",parent_id:e,...t||{}}))}async updateAIState(e,t,s={}){await this.sendEvent({...s,type:"ai_indicator.update",message_id:e,ai_state:t})}async clearAIIndicator(){await this.sendEvent({type:"ai_indicator.clear"})}async stopAIResponse(){await this.sendEvent({type:"ai_indicator.stop"})}async stopTyping(e,t){this._isTypingIndicatorsEnabled()&&(this.lastTypingEvent=null,this.isTyping=!1,await this.sendEvent({type:"typing.stop",parent_id:e,...t||{}}))}_isTypingIndicatorsEnabled(){return!!this.getConfig()?.typing_events&&!!this.getClient().wsConnection?.isHealthy&&(this.getClient().user?.privacy_settings?.typing_indicators?.enabled??!0)}lastMessage(){let e=this.state.latestMessages.length-5;e<0&&(e=0);let t=this.state.latestMessages.length+1,s=this.state.latestMessages.slice(e,t);return s.sort((e,t)=>t.created_at.getTime()-e.created_at.getTime()),s[0]}async markRead(e={}){return await this.getClient().messageDeliveryReporter.markRead(this,e)}async markAsReadRequest(e={}){return(this._checkInitialized(),this.getConfig()?.read_events||this.getClient()._isUsingServerAuth())?await this.getClient().post(this._channelURL()+"/read",{...e}):null}async markUnread(e){return(this._checkInitialized(),this.getConfig()?.read_events||this.getClient()._isUsingServerAuth())?await this.getClient().post(this._channelURL()+"/unread",{...e}):Promise.resolve(null)}markReadLocally(){let e=this.getClient();if(!e.userID)return;
1let t={channel_id:this.id,channel_type:this.type,cid:this.cid,created_at:new Date().toISOString(),last_read_message_id:this.lastMessage()?.id,team:this.data?.team,type:"message.read_locally",user:e.user};return e.dispatchEvent(t),t}clean(){this.lastKeyStroke&&new Date().getTime()-this.lastKeyStroke.getTime()>1e3&&this.isTyping&&I(this.stopTyping(),"stop typing event"),this.state.clean()}async watch(e){let t={state:!0,watch:!0,presence:!1};await this.getClient().wsPromise,this.getClient()._hasConnectionID()||(t.watch=!1);let s={...t,...e},i=await this.query(s,"latest");return this.initialized=!0,this.data=i.channel,this._client.logger("info",`channel:watch() - started watching channel ${this.cid}`,{tags:["channel"],channel:this}),i}async stopWatching(){let e=await this.getClient().post(this._channelURL()+"/stop-watching",{});return this._client.logger("info",`channel:watch() - stopped watching channel ${this.cid}`,{tags:["channel"],channel:this}),e}async getReplies(e,t,s){let i=s?E(s):void 0,a=await this.getClient().get(this.getClient().baseURL+`/messages/${encodeURIComponent(e)}/replies`,{sort:i,...t});return a.messages&&this.state.addMessagesSorted(a.messages),a}async getPinnedMessages(e,t=[]){return await this.getClient().get(this._channelURL()+"/pinned_messages",{payload:{...e,sort:E(t)}})}getReactions(e,t){return this.getClient().get(this.getClient().baseURL+`/messages/${encodeURIComponent(e)}/reactions`,{...t})}getMessagesById(e){return this.getClient().get(this._channelURL()+"/messages",{ids:e.join(",")})}lastRead(){let{userID:e}=this.getClient();if(e)return this.state.read[e]?this.state.read[e].last_read:null}_countMessageAsUnread(e){return!(e.shadowed||e.silent||e.parent_id&&!e.show_in_channel||e.user?.id===this.getClient().userID||e.user?.id&&this.getClient().userMuteStatus(e.user.id))&&(!!this.getClient().options.isLocalUnreadCountEnabled||!!(e=>{let t=e?.data?.own_capabilities;return!(Array.isArray(t)&&!t.includes("read-events"))})(this))&&!this.getClient()._muteStatus(this.cid).muted}countUnread(e){if(!e)return this.state.unreadCount;let t=0;for(let s=0;s<this.state.latestMessages.length;s+=1){let i=this.state.latestMessages[s];i.created_at>e&&this._countMessageAsUnread(i)&&t++}return t}countUnreadMentions(){let e=this.lastRead(),t=this.getClient().userID,s=0;for(let i=0;i<this.state.latestMessages.length;i+=1){let a=this.state.latestMessages[i];this._countMessageAsUnread(a)&&(!e||a.created_at>e)&&a.mentioned_users?.some(e=>e.id===t)&&s++}return s}async query(e={},t="current"){await this.getClient().wsPromise;let s=e.created_by?.id??e.created_by_id??this._data?.created_by?.id??this._data?.created_by_id;this.getClient()._isUsingServerAuth()&&"string"!=typeof s&&this.getClient().logger("warn","Either `created_by` (with `id` property) or `created_by_id` are missing from both `Channel._data` and `options` parameter");let i=`${this.getClient().baseURL}/channels/${encodeURIComponent(this.type)}`;this.id&&(i+=`/${encodeURIComponent(this.id)}`);let a=await this.getClient().post(i+"/query",{data:this._data,state:!0,...e});if(!this.id){this.id=a.channel.id,this.cid=a.channel.cid;let e=Y(this.type,a.members.map(e=>e.user_id||e.user?.id||""));e&&e in this.getClient().activeChannels&&delete this.getClient().activeChannels[e],!(this.cid in this.getClient().activeChannels)&&this.getClient()._cacheEnabled()&&(this.getClient().activeChannels[this.cid]=this)}this.getClient()._addChannelConfig(a.channel),void 0!==a.channel.config?.shared_locations&&this.messageComposer.updateConfig({location:{enabled:a.channel.config.shared_locations}});let{messageSet:n,filteredMessageIds:r}=this._initializeState(a,t);n.pagination={...n.pagination,...K({parentSet:n,messagePaginationOptions:e?.messages,requestedPageSize:e?.messages?.limit??100,returnedPage:a.messages,filteredReturnedPage:a.messages.filter(e=>!r.includes(e.id)),logger:this.getClient().logger})},this.getClient().polls.hydratePollCache(a.messages,!0),this.getClient().reminders.hydrateState(a.messages),this.messageComposer.initStateFromChannelResponse(a);let o=[...a.channel.own_capabilities||[]].sort().join()!==[...this.data&&Array.isArray(this.data?.own_capabilities)?this.data.own_capabilities:[]].sort().join();return this.data=a.channel,this.offlineMode=!1,this.cooldownTimer.refresh(),o&&this.getClient().dispatchEvent({type:"capabilities.changed",cid:this.cid,own_capabilities:a.channel.own_capabilities}),this.getClient().dispatchEvent({type:"channels.queried",queriedChannels:{channels:[a],isLatestMessageSet:n.isLatest}}),this.getClient().offlineDb?.executeQuerySafely(e=>e.upsertChannels?.({channels:[a],isLatestMessagesSet:n.isLatest}),{method:"upsertChannels"}),this.getClient().syncDeliveredCandidates([this]),a}async banUser(e,t){return this._checkInitialized(),await this.getClient().banUser(e,{...t,type:this.t
1ype,id:this.id})}async hide(e=null,t=!1){return this._checkInitialized(),await this.getClient().post(`${this._channelURL()}/hide`,{user_id:e,clear_history:t})}async show(e=null){return this._checkInitialized(),await this.getClient().post(`${this._channelURL()}/show`,{user_id:e})}async unbanUser(e,t){return this._checkInitialized(),await this.getClient().unbanUser(e,{...t,type:this.type,id:this.id})}async shadowBan(e,t){return this._checkInitialized(),await this.getClient().shadowBan(e,{...t,type:this.type,id:this.id})}async removeShadowBan(e){return this._checkInitialized(),await this.getClient().removeShadowBan(e,{type:this.type,id:this.id})}async vote(e,t,s){return await this.getClient().castPollVote(e,t,s)}async removeVote(e,t,s){return await this.getClient().removePollVote(e,t,s)}async _createDraft(e){return await this.getClient().post(this._channelURL()+"/draft",{message:e})}async createDraft(e){try{let t=this.getClient().offlineDb;if(t)return await t.queueTask({task:{channelId:this.id,channelType:this.type,threadId:e.parent_id,payload:[e],type:"create-draft"}})}catch(e){this._client.logger("error","offlineDb:create-draft",{tags:["channel","offlineDb"],error:e})}return this._createDraft(e)}async _deleteDraft({parent_id:e}={}){return await this.getClient().delete(this._channelURL()+"/draft",{parent_id:e})}async deleteDraft(e={}){let{parent_id:t}=e;try{let s=this.getClient().offlineDb;if(s)return await s.queueTask({task:{channelId:this.id,channelType:this.type,threadId:t,payload:[e],type:"delete-draft"}})}catch(e){this._client.logger("error","offlineDb:delete-draft",{tags:["channel","offlineDb"],error:e})}return this._deleteDraft(e)}async getDraft({parent_id:e}={}){return await this.getClient().get(this._channelURL()+"/draft",{parent_id:e})}on(e,t){let s=t?e:"all",i=t||e;return s in this.listeners||(this.listeners[s]=[]),this._client.logger("info",`Attaching listener for ${s} event on channel ${this.cid}`,{tags:["event","channel"],channel:this}),this.listeners[s].push(i),{unsubscribe:()=>{this._client.logger("info",`Removing listener for ${s} event from channel ${this.cid}`,{tags:["event","channel"],channel:this}),this.listeners[s]=this.listeners[s].filter(e=>e!==i)}}}off(e,t){let s=t?e:"all",i=t||e;s in this.listeners||(this.listeners[s]=[]),this._client.logger("info",`Removing listener for ${s} event from channel ${this.cid}`,{tags:["event","channel"],channel:this}),this.listeners[s]=this.listeners[s].filter(e=>e!==i)}_handleChannelEvent(e){this._client.logger("info",`channel:_handleChannelEvent - Received event of type { ${e.type} } on ${this.cid}`,{tags:["event","channel"],channel:this});let t=this.state;switch(e.type){case"typing.start":e.user?.id&&(t.typing[e.user.id]=e);break;case"typing.stop":e.user?.id&&delete t.typing[e.user.id];break;case"message.read_locally":case"message.read":if(e.user?.id&&e.created_at){let s=t.read[e.user.id];t.read[e.user.id]={...s,last_read:new Date(e.created_at),last_read_message_id:e.last_read_message_id,user:e.user,unread_messages:0},this.messageReceiptsTracker.onMessageRead({user:e.user,readAt:e.created_at,lastReadMessageId:e.last_read_message_id});let i=this.getClient();e.user?.id===i.user?.id&&(t.unreadCount=0,"message.read"===e.type&&i.syncDeliveredCandidates([this]))}break;case"message.delivered":if(e.user?.id&&e.created_at){let s=t.read[e.user.id];t.read[e.user.id]={...s,last_delivered_at:e.last_delivered_at?new Date(e.last_delivered_at):void 0,last_delivered_message_id:e.last_delivered_message_id,user:e.user},this.messageReceiptsTracker.onMessageDelivered({user:e.user,deliveredAt:e.created_at,lastDeliveredMessageId:e.last_delivered_message_id});let i=this.getClient();e.user?.id===i.user?.id&&i.syncDeliveredCandidates([this])}break;case"user.watching.start":case"user.updated":e.user?.id&&(t.watchers[e.user.id]=e.user);break;case"user.watching.stop":e.user?.id&&delete t.watchers[e.user.id];break;case"message.deleted":e.message&&(this._extendEventWithOwnReactions(e),e.hard_delete?t.removeMessage(e.message):t.addMessageSorted(e.message,!1,!1),t.removeQuotedMessageReferences(e.message),e.message.pinned&&t.removePinnedMessage(e.message));break;case"user.messages.deleted":e.user&&this.state.deleteUserMessages(e.user,!!e.hard_delete,new Date(e.created_at??Date.now()));break;case"message.new":if(e.message){let s=this.getClient(),i=e.user?.id===s.user?.id,a=e.message.parent_id&&!e.message.show_in_channel;(this.state.isUpToDate||a)&&t.addMessageSorted(e.message,i),e.message.pinned&&t.addPinnedMessage(e.message);let n=i||a;if(i&&this.cooldownTimer.refresh(),n)break;if(e.user?.id)for(let s in t.read)s===e.user.id?t.read[e.user.id]={last_read:new Date(e.created_at),user:e.user,unread_messages:0,last_delivered_at:new Date(e.created_at),last_delivered_message_id:e.message.id}:t.read[s].unread_messages+=1;this._countMessageAsUnread(e.message)&&(t.unreadCount=t.unreadCount+1),s.syncDeliveredCandidates([this])}break;case"message.updated":case"message.undeleted":e.message&&(this._extendEventWithOwnReactions(e),t.addMessageSorted(e.message,!1,!1),t._updateQuotedMessageReferences({message:e.message}),e.message.pinned?t.addPinnedMessage(e.message):t.removePinnedMessage(e.message));break;case"channel.truncated":if(e.channel?.truncated_at){let s=+new Date(e.channel.truncated_at);
1t.messageSets.forEach((e,i)=>{e.messages.forEach(({created_at:e,id:a})=>{s>+e&&t.removeMessage({id:a,messageSetIndex:i})})}),t.pinnedMessages.forEach(({id:e,created_at:i})=>{s>+i&&t.removePinnedMessage({id:e})}),t.unreadCount=this.countUnread(new Date(e.channel.truncated_at))}else t.clearMessages(),t.unreadCount=0;e.message&&(t.addMessageSorted(e.message),e.message.pinned&&t.addPinnedMessage(e.message));break;case"member.added":case"member.updated":{let s={...e.member};null===s.pinned_at&&delete s.pinned_at,null===s.archived_at&&delete s.archived_at,s?.user&&(t.members={...t.members,[s.user.id]:s});let i=this.getClient().userID;"string"==typeof i&&"string"==typeof s?.user?.id&&s.user.id===i&&(t.membership=s);break}case"member.removed":if(e.user?.id){let s={...t.members};delete s[e.user.id],t.members=s}break;case"notification.mark_unread":{if(e.user?.id!==this.getClient().user?.id||!e.user)break;let s=e.unread_messages??0,i=t.read[e.user.id];t.read[e.user.id]={...i,first_unread_message_id:e.first_unread_message_id,last_read:new Date(e.last_read_at),last_read_message_id:e.last_read_message_id,user:e.user,unread_messages:s},t.unreadCount=s,this.messageReceiptsTracker.onNotificationMarkUnread({user:e.user,lastReadAt:e.last_read_at,lastReadMessageId:e.last_read_message_id});break}case"channel.updated":if(e.channel){e.channel?.frozen!==void 0&&e.channel.frozen!==this.data?.frozen&&this.query({state:!1,messages:{limit:0},watchers:{limit:0}});let t={...e.channel,hidden:e.channel?.hidden??this.data?.hidden,own_capabilities:e.channel?.own_capabilities??this.data?.own_capabilities};this.data=t,this.cooldownTimer.refresh()}break;case"reaction.new":if(e.message&&e.reaction){let{message:s,reaction:i}=e;e.message=t.addReaction(i,s)}break;case"reaction.deleted":if(e.message&&e.reaction){let{message:s,reaction:i}=e;e.message=t.removeReaction(i,s)}break;case"reaction.updated":if(e.message&&e.reaction){let{message:s,reaction:i}=e;e.message=t.addReaction(i,s,!0)}break;case"channel.hidden":this.data={...this.data,blocked:!!e.channel?.blocked,hidden:!0},e.clear_history&&t.clearMessages();break;case"channel.visible":this.data={...this.data,blocked:!!e.channel?.blocked,hidden:!1},this.getClient().offlineDb?.handleChannelVisibilityEvent({event:e});break;case"user.banned":if(!e.user?.id)break;t.members[e.user.id]={...t.members[e.user.id]||{},shadow_banned:!!e.shadow,banned:!e.shadow,user:{...t.members[e.user.id]?.user||{},...e.user}};break;case"user.unbanned":if(!e.user?.id)break;t.members[e.user.id]={...t.members[e.user.id]||{},shadow_banned:!1,banned:!1,user:{...t.members[e.user.id]?.user||{},...e.user}}}void 0!==e.watcher_count&&(this.state.watcher_count=e.watcher_count)}_checkInitialized(){if(!this.initialized&&!this.offlineMode&&!this.getClient()._isUsingServerAuth())throw Error(`Channel ${this.cid} hasn't been initialized yet. Make sure to call .watch() and wait for it to resolve`)}_initializeState(e,t="latest"){let{state:s,user:i,userID:a}=this.getClient();if(e.members)for(let t of(this._hydrateMembers({members:e.members}),e.members))t.user&&s.updateUserReference(t.user,this.cid);this.state.membership=e.membership||{};let n=e.messages||[];this.state.messages||this.state.initMessages();let{messageSet:r,filteredMessageIds:o}=this.state.addMessagesSorted(n,!1,!0,!0,t);if(this.state.pinnedMessages||(this.state.pinnedMessages=[]),this.state.addPinnedMessages(e.pinned_messages||[]),e.pending_messages&&(this.state.pending_messages=e.pending_messages),void 0!==e.watcher_count&&(this.state.watcher_count=e.watcher_count),e.watchers)for(let t of e.watchers)t&&(s.updateUserReference(t,this.cid),this.state.watchers[t.id]=t);if(null!=a){let e=this.state.last_message_at||new Date;i&&(this.state.read[i.id]={user:i,last_read:e,unread_messages:0})}if(e.read){for(let t of e.read)this.state.read[t.user.id]={last_delivered_at:t.last_delivered_at?new Date(t.last_delivered_at):void 0,last_delivered_message_id:t.last_delivered_message_id,last_read:new Date(t.last_read),last_read_message_id:t.last_read_message_id,unread_messages:t.unread_messages??0,user:t.user},t.user.id===i?.id&&(this.state.unreadCount=this.state.read[t.user.id].unread_messages);this.messageReceiptsTracker.ingestInitial(e.read)}return{messageSet:r,filteredMessageIds:o}}_extendEventWithOwnReactions(e){if(!e.message)return;let t=this.state.findMessage(e.message.id,e.message.parent_id);t&&(e.message.own_reactions=t.own_reactions)}_hydrateMembers({members:e,overrideCurrentState:t=!0}){let s=e.reduce((e,t)=>
1(t.user&&(e[t.user.id]=t),e),{});t?this.state.members=s:!t&&e.length&&(this.state.members={...this.state.members,...s})}_disconnect(){this._client.logger("info",`channel:disconnect() - Disconnecting the channel ${this.cid}`,{tags:["connection","channel"],channel:this}),this.disconnected=!0,this.cooldownTimer.clearTimeout(),this.state.setIsUpToDate(!1)}},sb=class{constructor({client:e}){this.client=e,this.users={},this.userChannelReferences={}}updateUsers(e){for(let t of e)this.updateUser(t)}updateUser(e){null!=e&&this.client._cacheEnabled()&&(this.users[e.id]=e)}updateUserReference(e,t){null!=e&&this.client._cacheEnabled()&&(this.updateUser(e),this.userChannelReferences[e.id]||(this.userChannelReferences[e.id]={}),this.userChannelReferences[e.id][t]=!0)}deleteAllChannelReference(e){for(let t in this.userChannelReferences)delete this.userChannelReferences[t][e]}},sw=class{constructor(){this.connectionStartTimestamp=null,this.wsTotalFailures=0,this.wsConsecutiveFailures=0,this.instanceClientId=O()}},sv=async(e,t)=>{for(let s=0;s<3;s++){try{await a.A.post(`https://chat-insights.getstream.io/insights/${e}`,t)}catch(e){await D((s+1)*3e3);continue}break}};function sC(e){let{client:t}=e;return{ready_state:e.ws?.readyState,url:e._buildUrl(),api_key:t.key,start_ts:t.insightMetrics.connectionStartTimestamp,end_ts:new Date().getTime(),auth_type:t.getAuthType(),token:t.tokenManager.token,user_id:t.userID,user_details:t._user,device:t.options.device,client_id:e.connectionID,ws_details:e.ws,ws_consecutive_failures:t.insightMetrics.wsConsecutiveFailures,ws_total_failures:t.insightMetrics.wsTotalFailures,request_id:e.requestID,online:"undefined"!=typeof navigator?navigator?.onLine:null,user_agent:"undefined"!=typeof navigator?navigator?.userAgent:null,instance_client_id:t.insightMetrics.instanceClientId}}var sS=class{constructor({client:e}){this._buildUrl=()=>{let e=this.client._buildWSPayload(this.requestID),t=this.client.tokenManager.getToken(),s=new URLSearchParams(this.client.options.wsUrlParams);return s.set("json",e),s.set("api_key",this.client.key),s.set("authorization",`${t}`),s.set("stream-auth-type",this.client.getAuthType()),s.set("X-Stream-Client",this.client.getUserAgent()),`${this.client.wsBaseURL}/connect?${s.toString()}`},this.onlineStatusChanged=e=>{"offline"===e.type?(this._log("onlineStatusChanged() - Status changing to offline"),this._setHealth(!1)):"online"===e.type&&(this._log(`onlineStatusChanged() - Status changing to online. isHealthy: ${this.isHealthy}`),this.isHealthy||this._reconnect({interval:10}))},this.onopen=e=>{this.wsID===e&&this._log("onopen() - onopen callback",{wsID:e})},this.onmessage=(e,t)=>{if(this.wsID!==e||(this._log("onmessage() - onmessage callback",{event:t,wsID:e}),"string"!=typeof t.data))return;let s=JSON.parse(t.data);if(!this.isResolved){if(this.isResolved=!0,s.error)return void this.rejectPromise?.(this._errorFromWSEvent(s,!1));this.resolvePromise?.(s),this._setHealth(!0)}this.lastEvent=new Date,"health.check"===s.type&&this.scheduleNextPing(),this.client.dispatchEvent(s),this.scheduleConnectionCheck()},this.onclose=(e,t)=>{if(this.wsID===e)if(this._log("onclose() - onclose callback - "+t.code,{event:t,wsID:e}),t.code===T.WS_CLOSED_SUCCESS){let e=Error(`WS connection reject with error ${t.reason}`);e.reason=t.reason,e.code=t.code,e.wasClean=t.wasClean,e.target=t.target,this.rejectPromise?.(e),this._log(`onclose() - WS connection reject with error ${t.reason}`,{event:t})}else this.consecutiveFailures+=1,this.totalFailures+=1,this._setHealth(!1),this.isConnecting=!1,this.rejectPromise?.(this._errorFromWSEvent(t)),this._log("onclose() - WS connection closed. Calling reconnect ...",{event:t}),this._reconnect()},this.onerror=(e,t)=>{this.wsID===e&&(this.consecutiveFailures+=1,this.totalFailures+=1,this._setHealth(!1),this.isConnecting=!1,this.rejectPromise?.(this._errorFromWSEvent(t)),this._log("onerror() - WS connection resulted into error",{event:t}),this._reconnect())},this._setHealth=e=>{if(e!==this.isHealthy){if(this.isHealthy=e,this.isHealthy)return void this.client.dispatchEvent({type:"connection.changed",online:this.isHealthy});setTimeout(()=>{this.isHealthy||this.client.dispatchEvent({type:"connection.changed",online:this.isHealthy})},5e3)}},this._errorFromWSEvent=(e,t=!0)=>{let s,i,a;void 0!==e.code&&(s=e.code,i="unknown",a=e.reason),void 0!==e.error&&(s=e.error.code,i=e.error.StatusCode,a=e.error.message),this._log(`_errorFromWSEvent() - WS failed with code ${s}`,{event:e},"warn");let n=Error(`WS failed with code ${s} and reason - ${a}`);return n.code=s,n.StatusCode=i,n.isWSFailure=t,n},this._setupConnectionPromise=()=>{this.isResolved=!1,this.connectionOpen=new Promise((e,t)=>
1{this.resolvePromise=e,this.rejectPromise=t})},this.scheduleNextPing=()=>{this.healthCheckTimeoutRef&&clearTimeout(this.healthCheckTimeoutRef),this.healthCheckTimeoutRef=setTimeout(()=>{let e=[{type:"health.check",client_id:this.client.clientID}];try{this.ws?.send(JSON.stringify(e))}catch(e){}},this.pingInterval)},this.scheduleConnectionCheck=()=>{this.connectionCheckTimeoutRef&&clearTimeout(this.connectionCheckTimeoutRef),this.connectionCheckTimeoutRef=setTimeout(()=>{let e=new Date;this.lastEvent&&e.getTime()-this.lastEvent.getTime()>this.connectionCheckTimeout&&(this._log("scheduleConnectionCheck - going to reconnect"),this._setHealth(!1),this._reconnect())},this.connectionCheckTimeout)},this.client=e,this.consecutiveFailures=0,this.totalFailures=0,this.isConnecting=!1,this.isDisconnected=!1,this.isResolved=!1,this.isHealthy=!1,this.wsID=1,this.lastEvent=null,this.pingInterval=25e3,this.connectionCheckTimeout=this.pingInterval+1e4,$(this.onlineStatusChanged)}_log(e,t={},s="info"){this.client.logger(s,"connection:"+e,{tags:["connection"],...t})}setClient(e){this.client=e}async connect(e=15e3){if(this.isConnecting)throw Error("You've called connect twice, can only attempt 1 connection at the time");this.isDisconnected=!1;try{let e=await this._connect();this.consecutiveFailures=0,this._log(`connect() - Established ws connection with healthcheck: ${e}`)}catch(e){if(this.isHealthy=!1,this.consecutiveFailures+=1,e.code!==T.TOKEN_EXPIRED||this.client.tokenManager.isStatic()){if(!e.isWSFailure)throw Error(JSON.stringify({code:e.code,StatusCode:e.StatusCode,message:e.message,isWSFailure:e.isWSFailure}))}else this._log("connect() - WS failure due to expired token, so going to try to reload token and reconnect"),this._reconnect({refreshToken:!0})}return await this._waitForHealthy(e)}_waitForHealthy(e=15e3){return Promise.race([(async()=>{for(let t=0;t<=e;t+=50)try{return await this.connectionOpen}catch(s){if(t===e)throw Error(JSON.stringify({code:s.code,StatusCode:s.StatusCode,message:s.message,isWSFailure:s.isWSFailure}));await D(50)}})(),(async()=>{throw await D(e),this.isConnecting=!1,Error(JSON.stringify({code:"",StatusCode:"",message:"initial WS connection could not be established",isWSFailure:!0}))})()])}disconnect(e){let t;this._log(`disconnect() - Closing the websocket connection for wsID ${this.wsID}`),this.wsID+=1,this.isConnecting=!1,this.isDisconnected=!0,this.healthCheckTimeoutRef&&clearInterval(this.healthCheckTimeoutRef),this.connectionCheckTimeoutRef&&clearInterval(this.connectionCheckTimeoutRef),N(this.onlineStatusChanged),this.isHealthy=!1,this.ws&&this.ws.removeAllListeners&&this.ws.removeAllListeners();let{ws:s}=this;return s&&s.close&&s.readyState===s.OPEN?(t=new Promise(t=>{let i=e=>{this._log(`disconnect() - resolving isClosedPromise ${e?"with":"without"} close frame`,{event:e}),t()};s.onclose=i,setTimeout(i,null!=e?e:1e3)}),this._log("disconnect() - Manually closed connection by calling client.disconnect()"),s.close(T.WS_CLOSED_SUCCESS,"Manually closed connection by calling client.disconnect()")):(this._log("disconnect() - ws connection doesn't exist or it is already closed."),t=Promise.resolve()),delete this.ws,t}async _connect(){if(this.isConnecting||this.isDisconnected&&this.client.options.enableWSFallback)return;this.isConnecting=!0,this.requestID=O(),this.client.insightMetrics.connectionStartTimestamp=new Date().getTime();let e=!1;try{this._log("_connect() - waiting for token"),await this.client.tokenManager.tokenReady(),e=!0}catch(e){}try{e||(this._log("_connect() - tokenProvider failed before, so going to retry"),await this.client.tokenManager.loadToken()),this._setupConnectionPromise();let t=this._buildUrl();this._log(`_connect() - Connecting to ${t}`,{wsURL:t,requestID:this.requestID}),this.ws=new o.A(t),this.ws.onopen=this.onopen.bind(this,this.wsID),this.ws.onclose=this.onclose.bind(this,this.wsID),this.ws.onerror=this.onerror.bind(this,this.wsID),this.ws.onmessage=this.onmessage.bind(this,this.wsID);let s=await this.connectionOpen;if(this.isConnecting=!1,s)return this.connectionID=s.connection_id,this.client.insightMetrics.wsConsecutiveFailures>0&&this.client.options.enableInsights&&(sv("ws_success_after_failure",sC(this)),this.client.insightMetrics.wsConsecutiveFailures=0),s}catch(e){if(this.isConnecting=!1,this._log("_connect() - Error - ",e),this.client.options.enableInsights){this.client.insightMetrics.wsConsecutiveFailures++,this.client.insightMetrics.wsTotalFailures++;let t={...function(e){let t={};if(!e)return t;try{Object.getOwnPropertyNames(e).forEach(s=>{t[s]=Object.getOwnPropertyDescriptor(e,s)})}catch(e){return{error:"failed to serialize the error"}}return t}(e),...sC(this)};sv?.("ws_fatal",t)}throw e}}async _reconnect(e={}){if(this._log("_reconnect() - Initiating the reconnect"),this.isConnecting||this.isHealthy)return void this._log("_reconnect() - Abort (1) since already connecting or healthy");let t=e.interval;if(t||(t=A(this.consecutiveFailures)),await D(t),this.isConnecting||this.isHealthy)return void this._log("_reconnect() - Abort (2) since already connecting or healthy");if(this.isDisconnected&&this.client.options.enableWSFallback)return void this._log("_reconnect() - Abort (3) since disconnect() is called");this._log("_reconnect() - Destroying current WS connection"),this._destroyCurrentWSConnection(),e.refreshToken&&await this.client.tokenManager.loadToken();try{await this._connect(),this._log("_reconnect() - Waiting for recoverCallBack"),await this.client.re
1coverState(),this._log("_reconnect() - Finished recoverCallBack"),this.consecutiveFailures=0}catch(e){if(this.isHealthy=!1,this.consecutiveFailures+=1,e.code===T.TOKEN_EXPIRED&&!this.client.tokenManager.isStatic())return this._log("_reconnect() - WS failure due to expired token, so going to try to reload token and reconnect"),this._reconnect({refreshToken:!0});e.isWSFailure&&(this._log("_reconnect() - WS failure, so going to try to reconnect"),this._reconnect())}this._log("_reconnect() - == END ==")}_destroyCurrentWSConnection(){this.wsID+=1;try{this?.ws?.removeAllListeners(),this?.ws?.close()}catch(e){}}},sR=()=>({uploads:{}}),sU=class{constructor(e){this.client=e,this.inFlightUploads=new Map,this.getUpload=e=>this.uploads[e],this.reset=()=>{for(let{abortController:e}of this.inFlightUploads.values())e.abort();this.inFlightUploads.clear(),this.state.next(sR())},this.deleteUploadRecord=e=>{let t=this.inFlightUploads.get(e);t&&(this.inFlightUploads.delete(e),t.abortController.abort()),this.state.next(t=>{if(!(e in t.uploads))return t;let s={...t.uploads};return delete s[e],{...t,uploads:s}})},this.upload=({id:e,channelCid:t,file:s})=>{let i,a,n=this.inFlightUploads.get(e);if(n)return n.promise;let r=new Promise((e,t)=>{i=e,a=t}),o=new AbortController;return this.inFlightUploads.set(e,{promise:r,abortController:o}),(async()=>{let n=this.resolveAttachmentManager(t),r=n.config.trackUploadProgress;try{this.upsertUpload({id:e,uploadProgress:r?0:void 0});let t=r?t=>{this.updateUpload({id:e,uploadProgress:t})}:void 0,a={abortSignal:o.signal,...t?{onProgress:t}:{}},l=await n.doUploadRequest(s,a);i(l)}catch(e){a(e)}finally{this.inFlightUploads.delete(e),this.deleteUploadRecord(e)}})(),r},this.upsertUpload=e=>{this.state.partialNext({uploads:((e,t)=>({...e,[t.id]:{...e[t.id],...t}}))(this.uploads,e)})},this.updateUpload=e=>{this.state.next(t=>{let s=((e,t)=>{if(!(t.id in e))return null;let s=e[t.id];return{...e,[t.id]:{...s,...t}}})(t.uploads,e);return s?{...t,uploads:s}:t})},this.state=new ep(sR())}resolveAttachmentManager(e){let t=e.indexOf(":");if(t<=0||t===e.length-1)throw Error(`Invalid channelCid: ${e}`);let s=e.slice(0,t),i=e.slice(t+1);return this.client.channel(s,i).messageComposer.attachmentManager}get uploads(){return this.state.getLatestValue().uploads}},sM=y(b()),sx=y(w()),sL=y(v());function sI(e,t,s={},i={}){if("string"!=typeof t)throw TypeError("userId should be a string");let a={user_id:t,...s};if(null==sM.default||null==sM.default.sign)throw Error("Unable to find jwt crypto, if you are getting this error is probably because you are trying to generate tokens on browser or React Native (or other environment where crypto functions are not available). Please Note: token should only be generated server-side.");let n=Object.assign({algorithm:"HS256",noTimestamp:!0},i);return a.iat&&(n.noTimestamp=!1),sM.default.sign(a,e,n)}function sD(e,t={}){let s=Object.assign({algorithm:"HS256",noTimestamp:!0},t);return sM.default.sign({server:!0},e,s)}function sk(e,t,s){let i=l.from(s,"utf8"),a=sx.default.createHmac("sha256",i).update(e).digest("hex");try{return sx.default.timingSafeEqual(l.from(a),l.from(t))}catch{return!1}}
1var sT={signatureMismatch:"signature mismatch",invalidBase64:"invalid base64 encoding",gzipFailed:"gzip decompression failed",invalidJson:"invalid JSON payload"},sE=class extends Error{constructor(e=sT.signatureMismatch){super(e),this.name="InvalidWebhookError"}};function sA(e){let t=l.from([31,139]),s=l.isBuffer(e)?e:l.from(e);if(s.length>=2&&s.subarray(0,2).equals(t))try{return sL.default.gunzipSync(s)}catch{throw new sE(sT.gzipFailed)}return s}function sP(e){if(!/^[A-Za-z0-9+/]*={0,2}$/.test(e)||e.length%4!=0)throw new sE(sT.invalidBase64);let t=l.from(e,"base64");if(t.toString("base64").length!==e.length)throw new sE(sT.invalidBase64);return sA(t)}function sO(e){let t=l.isBuffer(e)?e.toString("utf8"):e;try{return JSON.parse(t)}catch{throw new sE(sT.invalidJson)}}var sF=class{constructor(e){this.setTokenOrProvider=async(e,t)=>{this.validateToken(e,t),this.user=t,k(e)&&(this.tokenProvider=e,this.type="provider"),"string"==typeof e&&(this.token=e,this.type="static"),!e&&this.user&&this.secret&&(this.token=sI(this.secret,t.id,{},{}),this.type="static"),await this.loadToken()},this.reset=()=>{this.token=void 0,this.tokenProvider=void 0,this.type="static",this.user=void 0,this.loadTokenPromise=null},this.validateToken=(e,t)=>{if(!t||!t.anon||e){if(!this.secret&&!e)throw Error("User token can not be empty");if(e&&"string"!=typeof e&&!k(e))throw Error("user token should either be a string or a function");if("string"==typeof e){if(t.anon&&""===e)return;let s=function(e){let t=e.split(".");return 3!==t.length?"":JSON.parse((e=>{let t={},s=String.fromCharCode,i=e.length,a,n=0,r,o=0,l,h="";for(a=0;a<64;a++)t["ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(a)]=a;for(r=0;r<i;r++)for(n=(n<<6)+t[e.charAt(r)],o+=6;o>=8;)((l=n>>>(o-=8)&255)||r<i-2)&&(h+=s(l));return h})(t[1])).user_id}(e);if(null!=e&&(null==s||""===s||s!==t.id))throw Error("userToken does not have a user_id or is not matching with user.id")}}},this.tokenReady=()=>this.loadTokenPromise,this.loadToken=()=>(this.loadTokenPromise=new Promise(async(e,t)=>{if("static"===this.type)return e(this.token);if(this.tokenProvider&&"string"!=typeof this.tokenProvider){try{this.token=await this.tokenProvider()}catch(e){return t(Error(`Call to tokenProvider failed with message: ${e}`,{cause:e}))}e(this.token)}}),this.loadTokenPromise),this.getToken=()=>{if(this.token||this.user&&this.user.anon&&!this.token)return this.token;if(this.secret)return sD(this.secret);throw Error("Both secret and user tokens are not set. Either client.connectUser wasn't called or client.disconnect was called")},this.isStatic=()=>"static"===this.type,this.loadTokenPromise=null,e&&(this.secret=e),this.type="static",this.secret&&(this.token=sD(this.secret))}},s$=class{constructor({client:e}){this._onlineStatusChanged=e=>{if(this._log(`_onlineStatusChanged() - ${e.type}`),"offline"===e.type){this._setState("CLOSED"),this.cancelToken?.cancel("disconnect() is called"),this.cancelToken=void 0;return}"online"===e.type&&"CLOSED"===this.state&&this.connect(!0)},this._req=async(e,t,s)=>{this.cancelToken||e.close||(this.cancelToken=a.A.CancelToken.source());try{let s=await this.client.doAxiosRequest("get",this.client.baseURL.replace(":3030",":8900")+"/longpoll",void 0,{config:{...t,cancelToken:this.cancelToken?.token},params:e});return this.consecutiveFailures=0,s}catch(i){if(this.consecutiveFailures+=1,s&&te(i))return this._log("_req() - Retryable error, retrying request"),await D(A(this.consecutiveFailures)),this._req(e,t,s);throw i}},this._poll=async()=>{for(;"CONNECTED"===this.state;)try{let e=await this._req({},{timeout:3e4},!0);if(e.events?.length)for(let t=0;t<e.events.length;t++)this.client.dispatchEvent(e.events[t])}catch(e){if(a.A.isCancel(e))return void this._log("_poll() - axios canceled request");if(46===e.code){this._log("_poll() - ConnectionID error, connecting without ID..."),this._setState("DISCONNECTED"),this.connect(!0);return}if(e7(e)&&!te(e))return void this._setState("CLOSED");await D(A(this.consecutiveFailures))}},this.connect=async(e=!1)=>{if("CONNECTING"===this.state)return void this._log("connect() - connecting already in progress",{reconnect:e},"warn");if("CONNECTED"===this.state)return void this._log("connect() - already connected and polling",{reconnect:e},"warn");this._setState("CONNECTING"),this.connectionID=void 0;try{let{event:t}=await this._req({json:this.client._buildWSPayload()},{timeout:8e3},e);return this._setState("CONNECTED"),this.connectionID=t.connection_id,this.client.dispatchEvent(t),this._poll(),e&&this.client.re
1coverState(),t}catch(e){throw this._setState("CLOSED"),e}},this.isHealthy=()=>!!this.connectionID&&"CONNECTED"===this.state,this.disconnect=async(e=2e3)=>{N(this._onlineStatusChanged),this._setState("DISCONNECTED"),this.cancelToken?.cancel("disconnect() is called"),this.cancelToken=void 0;let t=this.connectionID;this.connectionID=void 0;try{await this._req({close:!0,connection_id:t},{timeout:e},!1),this._log("disconnect() - Closed connectionID")}catch(e){this._log("disconnect() - Failed",{err:e},"error")}},this.client=e,this.state="INIT",this.consecutiveFailures=0,$(this._onlineStatusChanged)}_log(e,t={},s="info"){this.client.logger(s,"WSConnectionFallback:"+e,{tags:["connection_fallback","connection"],...t})}_setState(e){this._log(`_setState() - ${e}`),"CONNECTING"===this.state&&"CONNECTED"===e&&this.client.dispatchEvent({type:"connection.changed",online:!0}),("CLOSED"===e||"DISCONNECTED"===e)&&this.client.dispatchEvent({type:"connection.changed",online:!1}),this.state=e}},sN=class{constructor(e,t,s,i){this.client=e,this.type=t,this.id=s,this.data=i}create(){let e={name:this.data?.name,filter:this.data?.filter,description:this.data?.description,all_sender_channels:this.data?.all_sender_channels,all_users:this.data?.all_users};return this.client.createSegment(this.type,this.id,e)}verifySegmentId(){if(!this.id)throw Error("Segment id is missing. Either create the segment using segment.create() or set the id during instantiation - const segment = client.segment(id)")}get(){return this.verifySegmentId(),this.client.getSegment(this.id)}update(e){return this.verifySegmentId(),this.client.updateSegment(this.id,e)}addTargets(e){return this.verifySegmentId(),this.client.addSegmentTargets(this.id,e)}removeTargets(e){return this.verifySegmentId(),this.client.removeSegmentTargets(this.id,e)}delete(){return this.verifySegmentId(),this.client.deleteSegment(this.id)}targetExists(e){return this.verifySegmentId(),this.client.segmentTargetExists(this.id,e)}queryTargets(e={},t=[],s={}){return this.verifySegmentId(),this.client.querySegmentTargets(this.id,e,t,s)}},sq={user:"stream:user",message:"stream:chat:v1:message",userprofile:"stream:v1:user_profile"},sV=class{constructor(e){this.client=e}flagUser(e,t,s={}){return this.flag(sq.user,e,"",t,s)}flagMessage(e,t,s={}){return this.flag(sq.message,e,"",t,s)}async flag(e,t,s,i,a={}){return await this.client.post(this.client.baseURL+"/api/v2/moderation/flag",{entity_type:e,entity_id:t,entity_creator_id:s,reason:i,...a})}async muteUser(e,t={}){return await this.client.post(this.client.baseURL+"/api/v2/moderation/mute",{target_ids:[e],...t})}async unmuteUser(e,t){return await this.client.post(this.client.baseURL+"/api/v2/moderation/unmute",{target_ids:[e],...t})}async getUserModerationReport(e,t={}){return await this.client.get(this.client.baseURL+"/api/v2/moderation/user_report",{user_id:e,...t})}async queryReviewQueue(e={},t=[],s={}){return await this.client.post(this.client.baseURL+"/api/v2/moderation/review_queue",{filter:e,sort:E(t),...s})}async upsertConfig(e){return await this.client.post(this.client.baseURL+"/api/v2/moderation/config",e)}async getConfig(e,t){return await this.client.get(this.client.baseURL+"/api/v2/moderation/config/"+e,t)}async deleteConfig(e,t){return await this.client.delete(this.client.baseURL+"/api/v2/moderation/config/"+e,t)}async queryConfigs(e,t,s={}){return await this.client.post(this.client.baseURL+"/api/v2/moderation/configs",{filter:e,sort:t,...s})}async submitAction(e,t,s={}){return await this.client.post(this.client.baseURL+"/api/v2/moderation/submit_action",{action_type:e,item_id:t,...s})}async check(e,t,s,i,a,n,r){return await this.client.post(this.client.baseURL+"/api/v2/moderation/check",{entity_type:e,entity_id:t,entity_creator_id:s,moderation_payload:i,config_key:a,options:n,test_mode:r})}async checkUserProfile(e,t){if(!t.username&&!t.image)throw Error("Either username or image must be provided");let s={};return t.username&&(s.texts=[t.username]),t.image&&(s.images=[t.image]),await this.check(sq.userprofile,e,e,s,"user_profile:default",{force_sync:!0},!0)}async addCustomFlags(e,t,s,i,a){return await this.client.post(this.client.baseURL+"/api/v2/moderation/custom_check",{entity_type:e,entity_id:t,entity_creator_id:s,moderation_payload:i,flags:a})}async addCustomMessageFlags(e,t){return await this.addCustomFlags(sq.message,e,"",{},t)}async upsertModerationRule(e){return await this.client.post(this.client.baseURL+"/api/v2/moderation/moderation_rule",e)}async queryModerationRules(e={},t=[],s={}){return await this.client.post(this.client.baseURL+"/api/v2/moderation/moderation_rules",{filter:e,sort:t,...s})}async getModerationRule(e){return await this.client.get(this.client.baseURL+"/api/v2/moderation/moderation_rule/"+e)}async deleteModerationRule(e){return await this.client.delete(this.client.baseURL+"/api/v2/moderation/moderation_rule/"+e)}},sB={active:!1,wasActivatedAtLeastOnce:!1,isThreadOrderStale:!1,threads:[],unreadThreadCount:0,unseenThreadIds:[],lastConnectionDropAt:null,pagination:{isLoading:!1,isLoadingNext:!1,nextCursor:null},ready:!1},sQ=class extends ey{constructor({client:e}){super(),this.resetState=()=>{this.state.next(sB)},this.activate=()=>{this.state.partialNext({active:!0,wasActivatedAtLeastOnce:!0})},this.deactivate=()=>{this.state.partialNext({active:!1})},this.registerSubscriptions=()=>{this.hasSubscriptions||(this.addUnsubscribeFunction(this.subscribeUnreadThreadsCountChange()),this.addUnsubscribeFunction(this.subscribeManageThreadSubscriptions()),this.addUnsubscribeFunction(this.subscribeReloadOnActivation()),this.addUnsubscribeFunction(this.subscribeNewReplies()),this.addUnsubscribeFunction(this.subscribeRecoverAfterConnectionDrop()),this.addUnsubscribeFunction(this.subscribeChannelDeleted()))},this.subscribeUnreadThreadsCountChange=()=>{let{unread_threads:e=0}=this.client.user??{};this.state.partialNext({unreadThreadCount:e});let t=["health.check","notification.mark_read","notification.mark_unread","notification.thread_message_new","notification.channel_deleted"].map(e=>this.client.on(e,e=>{let{unread_threads:t}=e.me??e;"number"==typeof t&&this.state.partialNext({unreadThreadCount:t})}).unsubscribe);return()=>
1t.forEach(e=>e())},this.subscribeChannelDeleted=()=>this.client.on("notification.channel_deleted",e=>{let{cid:t}=e,{threads:s}=this.state.getLatestValue(),i=s.filter(e=>e.channel.cid!==t);this.state.partialNext({threads:i})}).unsubscribe,this.subscribeManageThreadSubscriptions=()=>this.state.subscribeWithSelector(e=>({threads:e.threads}),({threads:e},t)=>{let{threads:s=[]}=t??{},i=s.filter(e=>e!==this.threadsById[e.id]);e.forEach(e=>e.registerSubscriptions()),i.forEach(e=>e.unregisterSubscriptions())}),this.subscribeReloadOnActivation=()=>this.state.subscribeWithSelector(e=>({active:e.active}),({active:e})=>{e&&this.reload()}),this.subscribeNewReplies=()=>this.client.on("notification.thread_message_new",e=>{let t=e.message?.parent_id;if(!t)return;let{unseenThreadIds:s,ready:i}=this.state.getLatestValue();i&&(this.threadsById[t]?this.state.partialNext({isThreadOrderStale:!0}):s.includes(t)||this.state.partialNext({unseenThreadIds:s.concat(t)}))}).unsubscribe,this.subscribeRecoverAfterConnectionDrop=()=>{let e=this.client.on("connection.changed",e=>{!1===e.online&&this.state.next(e=>e.lastConnectionDropAt?e:{...e,lastConnectionDropAt:new Date})}).unsubscribe,t=J(()=>{let{lastConnectionDropAt:e,wasActivatedAtLeastOnce:t}=this.state.getLatestValue();e&&t&&this.reload({force:!0})},1e3,{trailing:!0}),s=this.client.on("connection.recovered",t).unsubscribe;return()=>{e(),s()}},this.unregisterSubscriptions=()=>(this.state.getLatestValue().threads.forEach(e=>e.unregisterSubscriptions()),super.unregisterSubscriptions()),this.reload=async({force:e=!1}={})=>{let{threads:t,unseenThreadIds:s,isThreadOrderStale:i,pagination:a,ready:n}=this.state.getLatestValue();if(a.isLoading||!e&&n&&!s.length&&!i)return;let r=t.length+s.length;try{this.state.next(e=>({...e,pagination:{...e.pagination,isLoading:!0}}));let e=await this.queryThreads({limit:Math.min(r,25)||25}),t=[];for(let s of e.threads){let e=this.threadsById[s.id];e?(t.push(e),e.hasStaleState&&e.hydrateState(s)):t.push(s)}this.state.next(s=>({...s,threads:t,unseenThreadIds:[],isThreadOrderStale:!1,pagination:{...s.pagination,isLoading:!1,nextCursor:e.next??null},ready:!0}))}catch(e){this.client.logger("error",e.message),this.state.next(e=>({...e,pagination:{...e.pagination,isLoading:!1}}))}},this.queryThreads=(e={})=>this.client.queryThreads({limit:25,participant_limit:10,reply_limit:10,watch:!0,...e}),this.loadNextPage=async(e={})=>{let{pagination:t}=this.state.getLatestValue();if(!t.isLoadingNext&&t.nextCursor)try{this.state.partialNext({pagination:{...t,isLoadingNext:!0}});let s=await this.queryThreads({...e,next:t.nextCursor});this.state.next(e=>({...e,threads:s.threads.length?e.threads.concat(s.threads):e.threads,pagination:{...e.pagination,nextCursor:s.next??null,isLoadingNext:!1}}))}catch(e){this.client.logger("error",e.message),this.state.next(e=>({...e,pagination:{...e.pagination,isLoadingNext:!1}}))}},this.client=e,this.state=new ep(sB),this.threadsByIdGetterCache={threads:[],threadsById:{}}}get threadsById(){let{threads:e}=this.state.getLatestValue();if(e===this.threadsByIdGetterCache.threads)return this.threadsByIdGetterCache.threadsById;let t=e.reduce((e,t)=>(e[t.id]=t,e),{});return this.threadsByIdGetterCache.threads=e,this.threadsByIdGetterCache.threadsById=t,t}},sj=e=>!!e?.answer_text,sW=class{constructor({client:e,poll:t}){this.getInitialStateFromPollResponse=e=>{let{own_votes:t,id:s,...i}=e,{ownAnswer:a,ownVotes:n}=t?.reduce((e,t)=>(sj(t)?e.ownAnswer=t:e.ownVotes.push(t),e),{ownVotes:[]})??{ownVotes:[]};return{...i,lastActivityAt:new Date,maxVotedOptionIds:sz(i.vote_counts_by_option),ownAnswer:a,ownVotesByOptionId:function(e){return e?e.reduce((e,t)=>(sj(t)||!t.option_id||(e[t.option_id]=t),e),{}):{}}(n)}},this.upsertOfflineDb=()=>{this.client.offlineDb?.executeQuerySafely(e=>e.upsertPoll({poll:function(e){let{lastActivityAt:t,maxVotedOptionIds:s,ownVotesByOptionId:i,ownAnswer:a,...n}=e.data,r=[...Object.values(i),...a?[a]:[]].sort((e,t)=>Date.parse(e.created_at)-Date.parse(t.created_at));return{...n,own_votes:r,id:e.id}}(this)}),{method:"upsertPoll"})},this.reinitializeState=e=>{this.state.partialNext(this.getInitialStateFromPollResponse(e))},this.handlePollUpdated=e=>{if(e.poll?.id&&e.poll.id!==this.id||"poll.updated"!==e.type)return;let{id:t,...s}=function(e){return{allow_answers:e.allow_answers,allow_user_suggested_options:e.allow_user_suggested_options,description:e.description,enforce_unique_vote:e.enforce_unique_vote,id:e.id,is_closed:e.is_closed,max_votes_allowed:e.max_votes_allowed,name:e.name,options:e.options,voting_visibility:e.voting_visibility}}(e.poll);this.state.partialNext({...s,lastActivityAt:new Date(e.created_at)}),this.upsertOfflineDb()},this.handlePollClosed=e=>{e.poll?.id&&e.poll.id!==this.id||"poll.closed"===e.type&&(this.state.partialNext({is_closed:!0,lastActivityAt:new Date(e.created_at)}),this.upsertOfflineDb())},this.handleVoteCasted=e=>{if(e.poll?.id&&e.poll.id!==this.id||"poll.vote_casted"!==e.type)return;let t=this.data,s=e.poll_vote.user_id===this.client.userID,i=[...t.latest_answers],a=t.ownAnswer,n=t.ownVotesByOptionId,r=t.maxVotedOptionIds;s&&(sj(e.poll_vote)?a=e.poll_vote:e.poll_vote.option_id&&(n[e.poll_vote.option_id]=e.poll_vote)),sj(e.poll_vote)?i=[e.poll_vote,...i]:r=sz(e.poll.vote_counts_by_option);let o=sH(e.poll);this.state.partialNext({...o,latest_answers:i,lastActivityAt:new Date(e.created_at),ownAnswer:a,ownVotesByOptionId:n,maxVotedOptionIds:r}),this.upsertOfflineDb()},this.handleVoteChanged=e=>{if(e.poll?.id&&e.poll.id!==this.id||"poll.vote_changed"!==e.type)return;let t=this.data,s=e.poll_vote.user_id===this.client.userID,i=[...t.latest_answers],a=t.ownAnswer,n=t.ownVotesByOptionId,r=t.maxVotedOptionIds;s?sj(e.poll_vote)?(i=[e.poll_vote,...i.filter(t=>t.id!==e.poll_vote.id)],a=e.poll_vote):e.poll_vote.option_id&&(e.poll.enforce_unique_vote?n={[e.poll_vote.option_id]:e.poll_vote}:(n=Object.entries(n).reduce((t,[s,i])=>(s!==e.poll_vote.option_id&&i.id===e.poll_vote.id||(t[s]=i),t),{}))[e.poll_vote.option_id]=e.poll_vote,a?.id===e.poll_vote.id&&(a=void 0),r=sz(e.poll.vote_counts_by_option)):sj(e.poll_vote)?i=[e.poll_vote,...i]:r=sz(e.poll.vote_counts_by_option);let o=sH(e.poll);this.state.partialNext({...o,latest_answers:i,lastActivityAt:new Date(e.created_at),ownAnswer:a,ownVotesByOptionId:n,maxVotedOptionIds:r}),this.upsertOfflineDb()},this.handleVoteRemoved=e=>{if(e.poll?.id&&e.poll.id!==this.id||"poll.vote_removed"!==e.type)return;let t=this.data,s=e.poll_vote.user_id===this.client.userID,i=[...t.latest_answers],a=t.ownAnswer,n={...t.ownVotesByOptionId},r=t.maxVotedOptionIds;sj(e.poll_vote)?(i=i.filter(t=>t.id!==e.poll_vote.id),s&&(a=void 0)):(r=sz(e.poll.vote_counts_by_option),s&&e.poll_vote.option_id&&delete n[e.poll_vote.option_id]);let o=sH(e.poll);this.state.partialNext({...o,latest_answers:i,lastActivityAt:new Date(e.created_at),ownAnswer:a,ownVotesByOptionId:n,maxVotedOptionIds:r}),this.upsertOfflineDb()},this.query=async e=>{let{poll:t}=await this.client.getPoll(e);return this.state.partialNext({...t,lastActivityAt:new Date}),t},this.update=async e=>await this.client.updatePoll({...e,id:this.id}),this.partialUpdate=async e=>await this.client.partialUpdatePoll(this.id,e),this.close=async()=>
1await this.client.closePoll(this.id),this.delete=async()=>await this.client.deletePoll(this.id),this.createOption=async e=>await this.client.createPollOption(this.id,e),this.updateOption=async e=>await this.client.updatePollOption(this.id,e),this.deleteOption=async e=>await this.client.deletePollOption(this.id,e),this.castVote=async(e,t)=>{let{max_votes_allowed:s,ownVotesByOptionId:i}=this.data;return s&&s===Object.keys(i).length?void this.client.notifications.addInfo({message:"Reached the vote limit. Remove an existing vote first.",origin:{emitter:"Poll",context:{messageId:t,optionId:e}},options:{type:"validation:poll:castVote:limit"}}):await this.client.castPollVote(t,this.id,{option_id:e})},this.removeVote=async(e,t)=>await this.client.removePollVote(t,this.id,e),this.addAnswer=async(e,t)=>await this.client.addPollAnswer(t,this.id,e),this.removeAnswer=async(e,t)=>await this.client.removePollVote(t,this.id,e),this.queryAnswers=async e=>await this.client.queryPollAnswers(this.id,e.filter,e.sort,e.options),this.queryOptionVotes=async e=>await this.client.queryPollVotes(this.id,e.filter,e.sort,e.options),this.client=e,this.id=t.id,this.state=new ep(this.getInitialStateFromPollResponse(t))}get data(){return this.state.getLatestValue()}};function sz(e){let t=0,s=[];for(let[i,a]of Object.entries(e??{}))a>t?(s=[i],t=a):a===t&&s.push(i);return s}function sH(e){return{answers_count:e.answers_count,latest_votes_by_option:e.latest_votes_by_option,vote_count:e.vote_count,vote_counts_by_option:e.vote_counts_by_option}}var sG=class extends ey{constructor({client:e}){super(),this.pollCache=new Map,this.fromState=e=>this.pollCache.get(e),this.registerSubscriptions=()=>{this.hasSubscriptions||(this.addUnsubscribeFunction(this.subscribeMessageNew()),this.addUnsubscribeFunction(this.subscribePollUpdated()),this.addUnsubscribeFunction(this.subscribePollClosed()),this.addUnsubscribeFunction(this.subscribeVoteCasted()),this.addUnsubscribeFunction(this.subscribeVoteChanged()),this.addUnsubscribeFunction(this.subscribeVoteRemoved()))},this.createPoll=async e=>{let{poll:t}=await this.client.createPoll(e);return t.vote_counts_by_option||(t.vote_counts_by_option={}),this.setOrOverwriteInCache(t),this.fromState(t.id)},this.getPoll=async e=>{let t=this.fromState(e);if(t)return this.client.getPoll(e).then(({poll:e})=>this.setOrOverwriteInCache(e,!0)),t;let{poll:s}=await this.client.getPoll(e);return this.setOrOverwriteInCache(s),this.fromState(e)},this.queryPolls=async(e,t=[],s={})=>{let{polls:i,next:a}=await this.client.queryPolls(e,t,s);return{polls:i.map(e=>(this.setOrOverwriteInCache(e,!0),this.fromState(e.id))),next:a}},this.hydratePollCache=(e,t)=>{for(let s of e){if(!s.poll)continue;let e=s.poll;this.setOrOverwriteInCache(e,t)}},this.setOrOverwriteInCache=(e,t)=>{if(!this.client._cacheEnabled())return;let s=this.fromState(e.id);if(s)t&&s.reinitializeState(e);else{let t=new sW({client:this.client,poll:e});this.pollCache.set(t.id,t)}},this.subscribePollUpdated=()=>this.client.on("poll.updated",e=>{e.poll?.id&&this.fromState(e.poll.id)?.handlePollUpdated(e)}).unsubscribe,this.subscribePollClosed=()=>this.client.on("poll.closed",e=>{e.poll?.id&&this.fromState(e.poll.id)?.handlePollClosed(e)}).unsubscribe,this.subscribeVoteCasted=()=>this.client.on("poll.vote_casted",e=>{e.poll?.id&&this.fromState(e.poll.id)?.handleVoteCasted(e)}).unsubscribe,this.subscribeVoteChanged=()=>this.client.on("poll.vote_changed",e=>{e.poll?.id&&this.fromState(e.poll.id)?.handleVoteChanged(e)}).unsubscribe,this.subscribeVoteRemoved=()=>this.client.on("poll.vote_removed",e=>{e.poll?.id&&this.fromState(e.poll.id)?.handleVoteRemoved(e)}).unsubscribe,this.subscribeMessageNew=()=>this.client.on("message.new",e=>{let{message:t}=e;if(t){let e=V(t);this.hydratePollCache([e])}}).unsubscribe,this.client=e}get data(){return this.pollCache}},sJ={"channel.deleted":"channelDeletedHandler","channel.hidden":"channelHiddenHandler","channel.truncated":"channelTruncatedHandler","channel.updated":"channelUpdatedHandler","channel.visible":"channelVisibleHandler","message.new":"newMessageHandler","member.updated":"memberUpdatedHandler","notification.added_to_channel":"notificationAddedToChannelHandler","notification.message_new":"notificationNewMessageHandler","notification.removed_from_channel":"notificationRemovedFromChannelHandler"},sK={abortInFlightQuery:!1,allowNotLoadedChannelPromotionForEvent:{"channel.visible":!0,"message.new":!0,"notification.added_to_channel":!0,"notification.message_new":!0},lockChannelOrder:!1},sX={offset:0},sZ=e=>
1({filters:e.responseFilters??e.filters,sort:e.responseSort??e.sort}),sY=e=>{let t={...e};return delete t.responseFilters,delete t.responseSort,t},s0=e=>!Array.isArray(e),s1=class extends ey{constructor({client:e,eventHandlerOverrides:t={},options:s={},queryChannelsOverride:i}){super(),this.eventHandlers=new Map,this.eventHandlerOverrides=new Map,this.options={},this.stateOptions={},this.setChannels=e=>{this.state.next(t=>{let{channels:s}=t,i="function"==typeof e?e(s):e;return s===i?t:{...t,channels:i}});let{channels:t,pagination:{filters:s,options:i,sort:a}}=this.state.getLatestValue();this.client.offlineDb?.executeQuerySafely(e=>e.upsertCidsForQuery({cids:t.map(e=>e.cid),filters:s,options:i,sort:a}),{method:"upsertCidsForQuery"})},this.setEventHandlerOverrides=(e={})=>{let t=Object.entries(e).reduce((e,[t,s])=>(s&&(e[t]=s),e),{});this.eventHandlerOverrides=new Map(Object.entries(t))},this.setQueryChannelsRequest=e=>{this.queryChannelsRequest=e},this.setOptions=(e={})=>{this.options={...sK,...e}},this.executeChannelsQuery=async(e,t=0)=>{let{filters:s,sort:i,options:a,stateOptions:n}=e,{offset:r,limit:o}={...sX,...a};try{let e=await this.queryChannelsRequest(s,i,a,{...n,withResponse:!0}),t=s0(e)?e.channels:e,l=r+(t?.length??0),h={...a,offset:l},{pagination:d}=this.state.getLatestValue(),c=(({queryChannelsResponse:e,sort:t})=>{let s=e?.predefined_filter;return s?{responseFilters:s.filter,responseSort:void 0!==s.sort?(s.sort??[]).map(({direction:e=1,field:t})=>({[t]:e})):t}:{}})({queryChannelsResponse:s0(e)?e:void 0,sort:i}),u=sY(d);this.state.partialNext({channels:t,pagination:{...u,hasNext:(t?.length??0)>=(o??1),isLoading:!1,options:h,...c},initialized:!0,error:void 0}),this.client.offlineDb?.executeQuerySafely(e=>e.upsertCidsForQuery({cids:t.map(e=>e.cid),filters:d.filters,options:a,sort:d.sort}),{method:"upsertCidsForQuery"})}catch(s){if(t>=3){console.warn(s);let e=Error(`Maximum number of retries reached in queryChannels. Last error message is: ${s}`),t=this.state.getLatestValue(),i=this.client.offlineDb&&t.channels.length>0;this.state.partialNext({error:i?void 0:e,pagination:{...t.pagination,isLoading:!1,isLoadingNext:!1}});return}return await D(1e3),this.executeChannelsQuery(e,t+1)}},this.queryChannels=async(e,t=[],s={},i={})=>{let{pagination:{isLoading:a,filters:n},initialized:r}=this.state.getLatestValue();if(a&&!this.options.abortInFlightQuery&&JSON.stringify(n)===JSON.stringify(e))return;let o={filters:e,sort:t,options:s,stateOptions:i};try{if(this.stateOptions=i,this.state.next(i=>({...i,pagination:{...sY(i.pagination),isLoading:!0,isLoadingNext:!1,filters:e,sort:t,options:s},error:void 0})),this.client.offlineDb?.getChannelsForQuery&&this.client.user?.id){if(!r){let i=await this.client.offlineDb.getChannelsForQuery({userId:this.client.user.id,filters:e,options:s,sort:t});if(i){let e=this.client.hydrateActiveChannels(i,{offlineMode:!0,skipInitialization:[]});this.state.partialNext({channels:e})}}if(!this.client.offlineDb.syncManager.syncStatus)return void this.client.offlineDb.syncManager.scheduleSyncStatusChangeCallback(this.id,async()=>{await this.executeChannelsQuery(o)})}await this.executeChannelsQuery(o)}catch(e){throw this.client.logger("error",e.message),this.state.next(e=>({...e,pagination:{...e.pagination,isLoading:!1}})),e}},this.loadNext=async()=>{let{pagination:e,initialized:t}=this.state.getLatestValue(),{filters:s,sort:i,options:a,isLoadingNext:n,hasNext:r}=e;if(t&&!n&&r)try{let{offset:t,limit:n}={...sX,...a};this.state.partialNext({pagination:{...e,isLoading:!1,isLoadingNext:!0}});let r=await this.queryChannelsRequest(s,i,a,this.stateOptions),o=s0(r)?r.channels:r,{channels:l}=this.state.getLatestValue(),h=t+(o?.length??0),d={...a,offset:h};this.state.partialNext({channels:((e,t)=>{if(!Array.isArray(e))return[];let s=new Set;return e.filter(e=>{let t="cid".split(".").reduce((e,t)=>{if(e&&"object"==typeof e&&t in e)return e[t]},e);return!s.has(t)&&(s.add(t),!0)})})([...l||[],...o],"cid"),pagination:{...e,hasNext:(o?.length??0)>=(n??1),isLoading:!1,isLoadingNext:!1,options:d}})}catch(e){throw this.client.logger("error",e.message),this.state.next(e=>({...e,pagination:{...e.pagination,isLoadingNext:!1,isLoading:!1}})),e}},this.notificationAddedToChannelHandler=async e=>{let{id:t,type:s,members:i}=e?.channel??{};if(!s||!this.options.allowNotLoadedChannelPromotionForEvent?.["notification.added_to_channel"])return;let a=await Z({client:this.client,id:t,members:i?.reduce((e,{user:t,user_id:s})=>{let i=s||t?.id;return i&&e.push(i),e},[]),type:s}),{pagination:n,channels:r}=this.state.getLatestValue();if(!r)return;let{sort:o}=sZ(n);this.setChannels(eo({channels:r,channelToMove:a,sort:o}))},this.channelDeletedHandler=e=>{let{channels:t}=this.state.getLatestValue();if(!t)return;let s=[...t],i=s.findIndex(t=>t.cid===(e.cid||e.channel?.cid));i<0||(s.splice(i,1),this.setChannels(s))},this.channelHiddenHandler=this.channelDeletedHandler,this.newMessageHandler=e=>{let{pagination:t,channels:s}=this.state.getLatestValue();if(!s)return;let{filters:i,sort:a}=sZ(t),n=e.channel_type,r=e.channel_id;if(!n||!r)return;let o=this.client.channel(n,r),l=s.indexOf(o),h=l>
1=0,d=ee(o),c=et(o),u=es(i),g=ea(a);(!u||!c||i.archived)&&(!u||c||!i.archived)&&(!g||!d)&&!this.options.lockChannelOrder&&(h||this.options.allowNotLoadedChannelPromotionForEvent?.["message.new"])&&this.setChannels(eo({channels:s,channelToMove:o,channelToMoveIndexWithinChannels:l,sort:a}))},this.notificationNewMessageHandler=async e=>{let{id:t,type:s}=e?.channel??{};if(!t||!s)return;let i=await Z({client:this.client,id:t,type:s}),{channels:a,pagination:n}=this.state.getLatestValue(),{filters:r,sort:o}=sZ(n),l=es(r),h=et(i);a&&(!l||!h||r.archived)&&(!l||h||!r.archived)&&this.options.allowNotLoadedChannelPromotionForEvent?.["notification.message_new"]&&this.setChannels(eo({channels:a,channelToMove:i,sort:o}))},this.channelVisibleHandler=async e=>{let{channel_type:t,channel_id:s}=e;if(!t||!s)return;let i=await Z({client:this.client,id:e.channel_id,type:e.channel_type}),{channels:a,pagination:n}=this.state.getLatestValue(),{filters:r,sort:o}=sZ(n),l=es(r),h=et(i);a&&(!l||!h||r.archived)&&(!l||h||!r.archived)&&this.options.allowNotLoadedChannelPromotionForEvent?.["channel.visible"]&&this.setChannels(eo({channels:a,channelToMove:i,sort:o}))},this.notificationRemovedFromChannelHandler=this.channelDeletedHandler,this.memberUpdatedHandler=e=>{let{pagination:t,channels:s}=this.state.getLatestValue(),{filters:i,sort:a}=sZ(t);if(!e.member?.user||e.member.user.id!==this.client.userID||!e.channel_type||!e.channel_id)return;let n=e.channel_type,r=e.channel_id,o=ea(a),l=es(i),h=ei({atIndex:0,sort:a,targetKey:"pinned_at"});if(!s||!o&&!l||this.options.lockChannelOrder)return;let d=this.client.channel(n,r),c=s.indexOf(d),u=c>=0,g=ee(d),p=et(d),m=[...s];if(u&&m.splice(c,1),l&&!p&&i?.archived||l&&p&&!i?.archived)return void this.setChannels(m);let f=null;1!==h&&(-1!==h||g)||(f=er({channels:m}));let y="number"==typeof f?f+1:0;s[y]!==d&&(m.splice(y,0,d),this.setChannels(m))},this.subscriptionOrOverride=e=>{let t=sJ[e.type],s=this.eventHandlers.get(t),i=this.eventHandlerOverrides.get(t);if(i&&"function"==typeof i)return void i(this.setChannels,e);s&&"function"==typeof s&&s(e)},this.registerSubscriptions=()=>{if(!this.hasSubscriptions)for(let e of Object.keys(sJ))this.addUnsubscribeFunction(this.client.on(e,this.subscriptionOrOverride).unsubscribe)},this.id=`channel-manager-${O()}`,this.client=e,this.state=new ep({channels:[],pagination:{isLoading:!1,isLoadingNext:!1,hasNext:!1,filters:{},sort:{},options:sX},initialized:!1,error:void 0}),this.setEventHandlerOverrides(t),this.setOptions(s),this.queryChannelsRequest=i??((...e)=>this.client.queryChannels(...e)),this.eventHandlers=new Map(Object.entries({channelDeletedHandler:this.channelDeletedHandler,channelHiddenHandler:this.channelHiddenHandler,channelVisibleHandler:this.channelVisibleHandler,memberUpdatedHandler:this.memberUpdatedHandler,newMessageHandler:this.newMessageHandler,notificationAddedToChannelHandler:this.notificationAddedToChannelHandler,notificationNewMessageHandler:this.notificationNewMessageHandler,notificationRemovedFromChannelHandler:this.notificationRemovedFromChannelHandler}))}},s2={durations:{error:3e3,info:3e3,success:3e3,warning:3e3}},s3=class{constructor(e={}){this.timeouts=new Map,this.store=new ep({notifications:[]}),this.config=eK(s2,e)}get notifications(){return this.store.getLatestValue().notifications}get warning(){return this.notifications.filter(e=>"warning"===e.severity)}get error(){return this.notifications.filter(e=>"error"===e.severity)}get info(){return this.notifications.filter(e=>"info"===e.severity)}get success(){return this.notifications.filter(e=>"success"===e.severity)}add({message:e,origin:t,options:s={}}){let i=O(),a=Date.now(),n=s.severity,r=s.duration??(n?this.config.durations[n]:void 0),o={id:i,message:e,origin:t,type:s?.type,severity:n,createdAt:a,duration:r,actions:s.actions,metadata:s.metadata,tags:s.tags,originalError:s.originalError},l=[...this.store.getLatestValue().notifications,o];return this.store.partialNext({notifications:this.config.sortComparator?[...l].sort(this.config.sortComparator):l}),i}addError({message:e,origin:t,options:s}){return this.add({message:e,origin:t,options:{...s,severity:"error"}})}addWarning({message:e,origin:t,options:s}){return this.add({message:e,origin:t,options:{...s,severity:"warning"}})}addInfo({message:e,origin:t,options:s}){return this.add({message:e,origin:t,options:{...s,severity:"info"}})}addSuccess({message:e,origin:t,options:s}){return this.add({message:e,origin:t,options:{...s,severity:"success"}})}clearTimeout(e){let t=this.timeouts.get(e);t&&(clearTimeout(t),this.timeouts.delete(e))}startTimeout(e,t){let s=this.store.getLatestValue().notifications.find(t=>
1t.id===e),i=t??s?.duration;if(!s||!i)return;this.clearTimeout(e);let a=setTimeout(()=>{this.remove(e)},i);this.timeouts.set(e,a)}remove(e){this.clearTimeout(e),this.store.partialNext({notifications:this.store.getLatestValue().notifications.filter(t=>t.id!==e)})}clear(){this.timeouts.forEach(e=>clearTimeout(e)),this.timeouts.clear(),this.store.partialNext({notifications:[]})}},s6={minute:{lower:6e4,upper:36e5},hour:{lower:36e5,upper:864e5}},s5=class{constructor({reminder:e,config:t}){this.timeout=null,this.stopRefreshBoundaryMs=12096e5,this.getRefreshIntervalLength=()=>{if(!this.reminder.remindAt)return null;let e=Math.abs(s4(this.reminder.remindAt.getTime()));return 0===e?6e4:e<s6.minute.lower?e:e<=s6.minute.upper?6e4:e<=s6.hour.upper?36e5:864e5},this.init=()=>{if(!this.reminder.remindAt)return null;let e=this.getRefreshIntervalLength();if(null===e)return null;if(this.reminder.remindAt?.getTime()+this.stopRefreshBoundaryMs-Date.now()<=0){this.timeout=null;return}this.timeout&&clearTimeout(this.timeout),this.timeout=setTimeout(()=>{this.reminder.refreshTimeLeft(),this.init()},e)},this.clear=()=>{this.timeout&&(clearInterval(this.timeout),this.timeout=null)},this.reminder=e,"number"==typeof t?.stopRefreshBoundaryMs&&(this.stopRefreshBoundaryMs=t.stopRefreshBoundaryMs)}},s4=e=>e-new Date().getTime(),s8=class e{constructor({data:t,config:s}){this.setState=t=>{this.state.next(s=>{let i={...s,...e.toStateValue(t)};return i.remind_at&&(i.timeLeftMs=s4(i.remind_at.getTime())),i}),t.remind_at?this.initTimer():t.remind_at||this.clearTimer()},this.refreshTimeLeft=()=>{this.remindAt&&this.state.partialNext({timeLeftMs:s4(this.remindAt.getTime())})},this.initTimer=()=>{this.timer.init()},this.clearTimer=()=>{this.timer.clear()},this.state=new ep(e.toStateValue(t)),this.timer=new s5({reminder:this,config:s}),this.initTimer()}get id(){return this.state.getLatestValue().message_id}get remindAt(){return this.state.getLatestValue().remind_at}get timeLeftMs(){return this.state.getLatestValue().timeLeftMs}};s8.toStateValue=e=>({...e,created_at:new Date(e.created_at),message:e.message||null,remind_at:e.remind_at?new Date(e.remind_at):null,timeLeftMs:e.remind_at?s4(new Date(e.remind_at).getTime()):null,updated_at:new Date(e.updated_at),user:e.user||null});var s9={scheduledOffsetsMs:[12e4,18e5,36e5,72e5,288e5,864e5],stopTimerRefreshBoundaryMs:12096e5},s7=class e extends ey{constructor({client:t,config:s}){super(),this.upsertToState=({data:e,overwrite:t=!0})=>{if(!this.client._cacheEnabled())return;let s=this.getFromState(e.message_id);if(s)t&&s.setState(e);else{let t=new s8({data:e,config:{stopRefreshBoundaryMs:this.stopTimerRefreshBoundaryMs}});this.state.partialNext({reminders:new Map(this.reminders.set(e.message_id,t))})}return s},this.removeFromState=e=>{let t=this.getFromState(e);if(!t)return;t.clearTimer();let s=this.reminders;s.delete(e),this.state.partialNext({reminders:new Map(s)})},this.hydrateState=e=>{e.forEach(({reminder:e})=>{e&&this.upsertToState({data:e})})},this.initTimers=()=>{this.reminders.forEach(e=>e.initTimer())},this.clearTimers=()=>{this.reminders.forEach(e=>e.clearTimer())},this.registerSubscriptions=()=>{this.hasSubscriptions||(this.addUnsubscribeFunction(this.subscribeReminderCreated()),this.addUnsubscribeFunction(this.subscribeReminderUpdated()),this.addUnsubscribeFunction(this.subscribeReminderDeleted()),this.addUnsubscribeFunction(this.subscribeNotificationReminderDue()),this.addUnsubscribeFunction(this.subscribeMessageDeleted()),this.addUnsubscribeFunction(this.subscribeMessageUndeleted()),this.addUnsubscribeFunction(this.subscribePaginatorStateUpdated()),this.addUnsubscribeFunction(this.subscribeConfigStateUpdated()))},this.subscribeReminderCreated=()=>this.client.on("reminder.created",t=>{if(!e.isReminderWsEventPayload(t))return;let{reminder:s}=t;this.upsertToState({data:s})}).unsubscribe,this.subscribeReminderUpdated=()=>this.client.on("reminder.updated",t=>{if(!e.isReminderWsEventPayload(t))return;let{reminder:s}=t;this.upsertToState({data:s})}).unsubscribe,this.subscribeReminderDeleted=()=>this.client.on("reminder.deleted",t=>{e.isReminderWsEventPayload(t)&&this.removeFromState(t.message_id)}).unsubscribe,this.subscribeMessageDeleted=()=>this.client.on("message.deleted",e=>{e.message?.id&&this.removeFromState(e.message.id)}).unsubscribe,this.subscribeMessageUndeleted=()=>this.client.on("message.undeleted",e=>{e.message?.reminder&&this.upsertToState({data:e.message.reminder})}).unsubscribe,this.subscribeNotificationReminderDue=()=>this.client.on("notification.reminder_due",()=>null).unsubscribe,this.subscribePaginatorStateUpdated=()=>this.paginator.state.subscribeWithSelector(({items:e})=>[e],([e])=>{if(e)for(let t of e)this.upsertToState({data:t})}),this.subscribeConfigStateUpdated=()=>this.configState.subscribeWithSelector(({stopTimerRefreshBoundaryMs:e})=>({stopTimerRefreshBoundaryMs:e}),({stopTimerRefreshBoundaryMs:e},t)=>{"number"==typeof e&&e!==t?.stopTimerRefreshBoundaryMs&&this.reminders.forEac
1h(t=>{t.timer&&(t.timer.stopRefreshBoundaryMs=e)})}),this.upsertReminder=async e=>{let{messageId:t}=e;if(this.getFromState(t))try{return await this.updateReminder(e)}catch(t){if(t.message.match("reminder does not exist"))return await this.createReminder(e);throw t}try{return await this.createReminder(e)}catch(t){if(t.message.match("already has reminder created for this message_id"))return await this.updateReminder(e);throw t}},this.createReminder=async e=>{let{reminder:t}=await this.client.createReminder(e);return this.upsertToState({data:t,overwrite:!1})},this.updateReminder=async e=>{let{reminder:t}=await this.client.updateReminder(e);return this.upsertToState({data:t})},this.deleteReminder=async e=>{await this.client.deleteReminder(e),this.removeFromState(e)},this.queryNextReminders=async()=>{await this.paginator.next()},this.queryPreviousReminders=async()=>{await this.paginator.prev()},this.client=t,this.configState=new ep({scheduledOffsetsMs:s?.scheduledOffsetsMs??s9.scheduledOffsetsMs,stopTimerRefreshBoundaryMs:s?.stopTimerRefreshBoundaryMs??s9.stopTimerRefreshBoundaryMs}),this.state=new ep({reminders:new Map}),this.paginator=new tl(t)}updateConfig(e){"number"==typeof e.stopTimerRefreshBoundaryMs&&e.stopTimerRefreshBoundaryMs!==this.stopTimerRefreshBoundaryMs&&this.reminders.forEach(t=>{t.timer.stopRefreshBoundaryMs=e?.stopTimerRefreshBoundaryMs}),this.configState.partialNext(e)}get stopTimerRefreshBoundaryMs(){return this.configState.getLatestValue().stopTimerRefreshBoundaryMs}get scheduledOffsetsMs(){return this.configState.getLatestValue().scheduledOffsetsMs}get reminders(){return this.state.getLatestValue().reminders}getFromState(e){return this.reminders.get(e)}};s7.isReminderWsEventPayload=e=>!!e.reminder&&(e.type.startsWith("reminder.")||"notification.reminder_due"===e.type);var ie=class{constructor(e,t){if(!e)throw Error("Size must be greater than 0");this.keys=[],this.size=e,this.map=new Map,this.dispose=t?.dispose??null}add(e,t){if(this.keys.indexOf(e)>-1)this.keys.splice(this.keys.indexOf(e),1);else if(this.keys.length>=this.size){let e=this.keys.shift();if(e){let t=this.peek(e);t&&this.dispose?.(e,t),this.map.delete(e)}}this.keys.push(e),this.map.set(e,t)}peek(e){return this.map.get(e)}get(e){let t=this.peek(e);return t&&this.keys.indexOf(e)!==this.size-1&&(this.keys.splice(this.keys.indexOf(e),1),this.keys.push(e)),t}clear(){this.dispose&&this.map.forEach((e,t)=>this.dispose?.(t,e)),this.map.clear(),this.keys=[]}};function it(e){return"string"==typeof e||e instanceof String}var is=class e{constructor(e,t,s){this.preventThreadCleanup=!1,this.nextRequestAbortController=null,this._messageComposerSetupState=new ep({setupFunction:null}),this._getConnectionID=()=>this.wsConnection?.connectionID||this.wsFallback?.connectionID,this._hasConnectionID=()=>!!this._getConnectionID(),this.setMessageComposerSetupFunction=e=>{this._messageComposerSetupState.partialNext({setupFunction:e})},this.connectUser=async(e,t)=>{if(!e.id)throw Error('The "id" field on the user is missing');if(this.userID===e.id&&this.setUserPromise)return console.warn("Consecutive calls to connectUser is detected, ideally you should only call this function once in your app."),this.setUserPromise;if(this.userID)throw Error("Use client.disconnect() before trying to connect as a different user. connectUser was called twice.");(this._isUsingServerAuth()||this.node)&&!this.options.allowServerSideConnect&&console.warn('Please do not use connectUser server side. connectUser impacts MAU and concurrent connection usage and thus your bill. If you have a valid use-case, add "allowServerSideConnect: true" to the client options to disable this warning.'),this.userID=e.id,this.anonymous=!1;let s=this._setToken(e,t);this._setUser(e);let i=this.openConnection();this.setUserPromise=Promise.all([s,i]).then(e=>e[1]);try{return await this.setUserPromise}catch(e){throw this.persistUserOnConnectionFailure?this.closeConnection():this.disconnectUser(),e}},this.setUser=this.connectUser,this._setToken=(e,t)=>this.tokenManager.setTokenOrProvider(t,e),this.closeConnection=async e=>(null!=this.cleaningIntervalRef&&(clearInterval(this.cleaningIntervalRef),this.cleaningIntervalRef=void 0),await Promise.all([this.wsConnection?.disconnect(e),this.wsFallback?.disconnect(e)]),this.offlineDb?.executeQuerySafely(async e=>{this.userID&&await e.upsertUserSyncStatus({userId:this.userID,lastSyncedAt:new Date().toString()})},{method:"upsertUserSyncStatus"}),Promise.resolve()),this.createChannelManager=({eventHandlerOverrides:e={},options:t={},queryChannelsOverride:s})=>new s1({client:this,eventHandlerOverrides:e,options:t,queryChannelsOverride:s}),this.openConnection=()=>
1{if(!this.userID)throw Error("User is not set on client, use client.connectUser or client.connectAnonymousUser instead");return this.wsConnection?.isConnecting&&this.wsPromise?(this.logger("info","client:openConnection() - connection already in progress",{tags:["connection","client"]}),this.wsPromise):(this.wsConnection?.isHealthy||this.wsFallback?.isHealthy())&&this._hasConnectionID()?void this.logger("info","client:openConnection() - openConnection called twice, healthy connection already exists",{tags:["connection","client"]}):(this.clientID=`${this.userID}--${O()}`,this.wsPromise=this.connect(),this._startCleaning(),this.wsPromise)},this._setupConnection=this.openConnection,this._normalizeDate=e=>{if(e instanceof Date&&(e=e.toISOString()),""===e)throw Error("Don't pass blank string for since, use null instead if resetting the token revoke");return e},this.disconnectUser=e=>{this.logger("info","client:disconnect() - Disconnecting the client",{tags:["connection","client"]}),delete this.user,delete this._user,delete this.userID,this.anonymous=!1;let t=this.closeConnection(e);for(let e of Object.values(this.activeChannels))e._disconnect();return this.activeChannels={},this.state=new sb({client:this}),this.threads.resetState(),this.uploadManager.reset(),this.messageComposerCache.clear(),t.finally(()=>{this.tokenManager.reset()}).catch(e=>console.error(e)),t},this.disconnect=this.disconnectUser,this.connectAnonymousUser=()=>{(this._isUsingServerAuth()||this.node)&&!this.options.allowServerSideConnect&&console.warn('Please do not use connectUser server side. connectUser impacts MAU and concurrent connection usage and thus your bill. If you have a valid use-case, add "allowServerSideConnect: true" to the client options to disable this warning.'),this.anonymous=!0,this.userID=O();let e={id:this.userID,anon:!0};return this._setToken(e,""),this._setUser(e),this._setupConnection()},this.setAnonymousUser=this.connectAnonymousUser,this.doAxiosRequest=async(e,t,s,i={})=>{await this.tokenManager.tokenReady();let a=this._enrichAxiosOptions(i);try{let i;switch(this._logApiRequest(e,t,s,a),e){case"get":i=await this.axiosInstance.get(t,a);break;case"delete":i=await this.axiosInstance.delete(t,a);break;case"post":i=await this.axiosInstance.post(t,s,a);break;case"postForm":i=await this.axiosInstance.postForm(t,s,a);break;case"put":i=await this.axiosInstance.put(t,s,a);break;case"patch":i=await this.axiosInstance.patch(t,s,a);break;case"options":i=await this.axiosInstance.options(t,a);break;default:throw Error("Invalid request type")}return this._logApiResponse(e,t,i),this.consecutiveFailures=0,this.handleResponse(i)}catch(n){if(n.client_request_id=a.headers?.["x-client-request-id"],this._logApiError(e,t,n),this.consecutiveFailures+=1,n.response){if(n.response.data.code===T.TOKEN_EXPIRED&&!this.tokenManager.isStatic())return this.consecutiveFailures>1&&await D(A(this.consecutiveFailures)),this.tokenManager.loadToken(),await this.doAxiosRequest(e,t,s,i);return this.handleResponse(n.response)}throw n}},this.dispatchEvent=e=>{e.received_at||(e.received_at=new Date);let t=this._handleClientEvent(e),s=e.cid,i=s?this.activeChannels[s]:void 0;i&&i._handleChannelEvent(e),this._callClientListeners(e),i&&i._callChannelListeners(e),t.forEach(e=>e()),this.offlineDb?.executeQuerySafely(t=>t.handleEvent({event:e}),{method:`handleEvent;${e.type}`})},this._updateMemberWatcherReferences=e=>{let t=this.state.userChannelReferences[e.id]||{};for(let s in t){let t=this.activeChannels[s];t?.state&&(t.state.members[e.id]&&(t.state.members[e.id].user=e),t.state.watchers[e.id]&&(t.state.watchers[e.id]=e),t.state.read[e.id]&&(t.state.read[e.id].user=e))}},this._updateUserReferences=this._updateMemberWatcherReferences,this._updateUserMessageReferences=e=>{let t=this.state.userChannelReferences[e.id]||{};for(let s in t){let t=this.activeChannels[s];if(!t)continue;let i=t.state;i?.updateUserMessages(e)}},this._deleteUserMessageReference=(e,t=!1,s)=>{let i=this.state.userChannelReferences[e.id]||{};for(let a in i){let i=this.activeChannels[a];if(i){let a=i.state;a?.deleteUserMessages(e,t,s)}}},this._handleUserEvent=e=>{if(e.user){if("user.presence.changed"===e.type||"user.updated"===e.type){if(e.user.id===this.userID){let t={...this.user},s={...this._user};for(let i in this.user)i in e.user||({channel_mutes:!0,devices:!0,mutes:!0,total_unread_count:!0,unread_channels:!0,unread_count:!0,unread_threads:!0,invisible:!0,privacy_settings:!0,roles:!0,push_preferences:!0,total_unread_count_by_team:!0})[i]||(delete t[i],delete s[i]);for(let t in s)t in e.user&&(s[t]=e.user[t]);this._user=s,this.user={...t,...e.user}}this.state.updateUser(e.user),this._updateMemberWatcherReferences(e.user)}"user.updated"===e.type&&this._updateUserMessageReferences(e.user),"user.deleted"===e.type&&e.user.deleted_at&&(e.mark_messages_deleted||e.hard_delete)&&this._deleteUserMessageReference(e.user,e.hard_delete,e.user.deleted_at?new Date(e.user.deleted_at):null)}},this._callClientListeners=e=>{let t=[];for(let s of(this.listeners.all&&t.push(...this.listeners.all),this.listeners[e.type]&&t.push(...this.listeners[e.type]),t))s(e)},this.recoverState=async()=>{this.logger("info",`client:recoverState() - Start of recoverState with connectionID ${this._getConnectionID()}`,{tags:["connection"]});let e=Object.keys(this.activeChannels);e.length&&this.recoverStateOnReconnect&&(this.logger("info",`client:recoverState() - Start the querying of ${e.length} channels`,{tags:["connection","client"]}),await this.queryChannels({cid:{$in:e}},{last_message_at:-1},{limit:30}),this.logger("info","client:recoverState() - Querying channels finished",{tags:["connection","client"]})),this.dispatchEvent({type:"connection.recovered"}),this.wsPromise=Promise.resolve(),this.setUserPromise=Promise.resolve()},this.getChannelByMembers=(e,t)=>{let s=(t.members??[]).map(e=>"string"==typeof e?e:e.user_id??""),i=s.sort().join(","),a=Y(e,s);if(!a)throw Error("Please specify atleast one member when creating unique conversation");for(let t in this.activeChannels){let s=this.activeChannels[t];if(!s.disconnected&&(t===a||0===t.indexOf(`${e}:!members-`)&&Object.keys(s.state.members).sort().join(",")===i))return s}let n=new s_(this,e,void 0,t);return this._cacheEnabled()&&(this.activeChannels[a]=n),n},this.getChannelById=(e,t,s)=>{if("string"==typeof t&&~t.indexOf(":"))throw Error(`Invalid channel id ${t}, can't contain the : character`);let i=`${e}:${t}`;if(i in this.activeChannels&&this.activeChannels[i]&&!this.activeChannels[i].disconnected){let e=this.activeChannels[i];return Object.keys(s).length>0&&(e.data={...e.data,...s},e._data={...e._data,...s}),e}let a=new s_(this,e,t,s);return this._cacheEnabled()&&(this.activeChannels[a.cid]=a),a},this.updateUsers=this.upsertUsers,this.updateUser=this.upsertUser,this._unblockMessage=this.unblockMessage,this.markAllRead=this.markChannelsRead,this.getUserAgent=()=>{if(this.userAgent)return this.userAgent;
1if(!this.cachedUserAgent){let e="9.50.2",{name:t,version:s}=this.sdkIdentifier??{},{name:i,version:a}=this.appIdentifier??{},{os:n,model:r}=this.deviceIdentifier??{},o=t?`stream-chat-${t}-v${s}-llc-v${e}`:`stream-chat-js-v${e}-${this.node?"node":"browser"}`;this.cachedUserAgent=[o,...Object.entries({app:i,app_version:a,os:n,device_model:r,client_bundle:"browser-esm"}).filter(([,e])=>e&&e.length>0).map(([e,t])=>`${e}=${t}`)].join("|")}return this.cachedUserAgent},this._isUsingServerAuth=()=>!!this.secret,this._cacheEnabled=()=>!this._isUsingServerAuth()||!this.options.disableCache,this._buildWSPayload=e=>JSON.stringify({user_id:this.userID,user_details:this._user,device:this.options.device,client_request_id:e}),this.key=e,this.listeners={},this.state=new sb({client:this}),this.mutedChannels=[],this.mutedUsers=[],this.blockedUsers=new ep({userIds:[]}),this.moderation=new sV(this),this.notifications=s?.notifications??new s3,this.uploadManager=new sU(this),t&&it(t)&&(this.secret=t);let i=s||(t&&!it(t)?t:{});this.browser=void 0!==i.browser?i.browser:"undefined"!=typeof window,this.node=!this.browser,this.options={timeout:3e3,withCredentials:!1,warmUp:!1,recoverStateOnReconnect:!0,disableCache:!1,isLocalUnreadCountEnabled:!1,wsUrlParams:new URLSearchParams({}),...i},this.node&&!this.options.httpsAgent&&(this.options.httpsAgent=new U.default.Agent({keepAlive:!0,keepAliveMsecs:3e3})),this.axiosInstance=a.A.create(this.options),this.setBaseURL(this.options.baseURL||"https://chat.stream-io-api.com"),void 0!==h&&"env"in h&&h.env.STREAM_LOCAL_TEST_RUN&&this.setBaseURL("http://localhost:3030"),void 0!==h&&"env"in h&&h.env.STREAM_LOCAL_TEST_HOST&&this.setBaseURL("http://"+h.env.STREAM_LOCAL_TEST_HOST),this.wsConnection=null,this.wsPromise=null,this.setUserPromise=null,this.activeChannels={},this.configs={},this.anonymous=!1,this.persistUserOnConnectionFailure=this.options?.persistUserOnConnectionFailure,this.tokenManager=new sF(this.secret),this.consecutiveFailures=0,this.insightMetrics=new sw,this.defaultWSTimeoutWithFallback=6e3,this.defaultWSTimeout=15e3,this.axiosInstance.defaults.paramsSerializer=q,this.logger=k(i.logger)?i.logger:()=>null,this.recoverStateOnReconnect=this.options.recoverStateOnReconnect,this.threads=new sQ({client:this}),this.polls=new sG({client:this}),this.reminders=new s7({client:this}),this.messageDeliveryReporter=new sd({client:this}),this.messageComposerCache=new ie(64)}static getInstance(t,s,i){return e._instance||("string"==typeof s?e._instance=new e(t,s,i):e._instance=new e(t,s)),e._instance}setOfflineDBApi(e){this.offlineDb||(this.offlineDb=e)}devToken(e){let t;return["eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9",(t=JSON.stringify({user_id:e}),(0,i.iI)(new Uint8Array(function(e,t){let s=[];if(C(e)&&t&&C(e)){for(let i=0,a=e.length;i<a;i++)if(e.charAt(i)){let a=t(e.charAt(i),i,e);s[i]=a}}else if(!C(e)&&!(t&&C(e))){for(let i=0,a=e.length;i<a;i++)if(i in e){let a=t(e[i],i,e);s[i]=a}}return s}(t,e=>e.charCodeAt(0))))),"devtoken"].join(".")}getAuthType(){return this.anonymous?"anonymous":"jwt"}setBaseURL(e){this.baseURL=e,this.wsBaseURL=this.baseURL.replace("http","ws").replace(":3030",":8800")}_setUser(e){this.user=e,this.userID=e.id,this._user={...e}}async updateAppSettings(e){let t=e.apn_config;return t?.p12_cert&&(e={...e,apn_config:{...t,p12_cert:l.from(t.p12_cert).toString("base64")}}),await this.patch(this.baseURL+"/app",e)}async revokeTokens(e){return await this.updateAppSettings({revoke_tokens_issued_before:this._normalizeDate(e)})}async revokeUserToken(e,t){return await this.revokeUsersToken([e],t)}async revokeUsersToken(e,t){t=void 0===t?new Date().toISOString():this._normalizeDate(t);let s=[];for(let i of e)s.push({id:i,set:{revoke_tokens_issued_before:t}});return await this.partialUpdateUsers(s)}async getAppSettings(){return this.appSettingsPromise=this.get(this.baseURL+"/app"),await this.appSettingsPromise}async testPushSettings(e,t={}){return await this.post(this.baseURL+"/check_push",{user_id:e,...t.messageID?{message_id:t.messageID}:{},...t.apnTemplate?{apn_template:t.apnTemplate}:{},...t.firebaseTemplate?{firebase_template:t.firebaseTemplate}:{},...t.firebaseDataTemplate?{firebase_data_template:t.firebaseDataTemplate}:{},...t.skipDevices?{skip_devices:!0}:{},...t.pushProviderName?{push_provider_name:t.pushProviderName}:{},...t.pushProviderType?{push_provider_type:t.pushProviderType}:{}})}async testSQSSettings(e={}){return await this.post(this.baseURL+"/check_sqs",e)}async testSNSSettings(e={}){return await this.post(this.baseURL+"/check_sns",e)}async setGuestUser(e){let t;this.anonymous=!0;try{t=await this.post(this.baseURL+"/guest",{user:e})}catch(e){throw this.anonymous=!1,e}this.anonymous=!1;let{created_at:s,updated_at:i,last_active:a,online:n,...r}=t.user;return await this.connectUser(r,t.access_token)}createToken(e,t,s){if(null==this.secret)throw Error("tokens can only be created server-side using the API Secret");let i={};return t&&(i.exp=t),s&&(i.iat=s),sI(this.secret,e,i,{})}on(e,t){let s=t?e:"all",i=t||e;return s in this.listeners||(this.listeners[s]=[]),this.logger("info",`Attaching listener for ${s} event`,{tags:["event","client"]}),this.listeners[s].push(i),{unsubscribe:()=>{this.logger("info",`Removing listener for ${s} event`,{tags:["event","client"]}),this.listeners[s]=this.listeners[s].filter(e=>e!==i)}}}off(e,t){let s=t?e:"all",i=t||e;s in this.listeners||(this.listeners[s]=[]),this.logger("info",`Removing listener for ${s} event`,{tags:["event","client"]}),this.listeners[s]=this.listeners[s].filter(e=>e!==i)}_logApiRequest(e,t,s,i){this.logger("info",`client: ${e} - Request - ${t}`,{tags:["api","api_request","client"],url:t,payload:s,config:i})}_logApiResponse(e,t,s){this.logger("info",`client:${e} - Response - url: ${t} > status ${s.status}`,{tags:["api","api_response","client"],url:t,response:s})}_logApiError(e,t,s){this.logger("error",`client:${e} - Error - url: ${t}`,{tags:["api","api_response","client"],url:t,error:s})}get(e,t){return this.doAxiosRequest("get",e,null,{params:t})}put(e,t){return this.doAxiosRequest("put",e,t)}post(e,t){return this.doAxiosRequest("post",e,t)}patch(e,t){return this.doAxiosRequest("patch",e,t)}delete(e,t){return this.doAxiosRequest("delete",e,null,{params:t})}sendFile(e,t,s,i,a,r){let o=function(e,t,s){let i=new n;return null!==e&&"object"==typeof e&&(e.readable||"function"==typeof e._read)||null!=e&&null!=e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)||"undefined"!=typeof window&&"File"in window&&e instanceof File||"undefined"!=typeof window&&"Blob"in window&&e instanceof Blob?t?i.append("file",e,t):i.append("file",e):i.append("file",{uri:e,name:t||e.split("/").reverse()[0],contentType:s||void 0,type:s||void 0}),i}(t,s,i||"multipart/form-data");return null!=a&&o.append("user",JSON.stringify(a)),this.doAxiosRequest("postForm",e,o,{headers:o.getHeaders?o.getHeaders():{},config:{timeout:0,maxContentLength:1/0,maxBodyLength:1/0,...r}})}errorFromResponse(e){return new t5(void 0!==e.data.code?`StreamChat error code ${e.data.code}: ${e.data.message}`:`StreamChat error HTTP code: ${e.status}`,{code:e.data.code??null,response:e,status:e.status})}handleResponse(e){let t=e.data;if(!e.status||e.status<200||300<=e.status)throw this.errorFromResponse(e);return t}_handleClientEvent(e){let t=[];if(this.logger("info",`client:_handleClientEvent - Received event of type { ${e.type} }`,{tags:["event","client"],event:e}),("user.presence.changed"===e.type||"user.updated"===e.type||"user.deleted"===e.type)&&this._handleUserEvent(e),"user.messages.deleted"===e.type&&!e.cid&&e.user&&this._deleteUserMessageReference(e.user,e.hard_delete,e.created_at?new Date(e.created_at):null),"health.check"===e.type&&e.me&&(this.user=e.me,this.state.updateUser(e.me),this.mutedChannels=e.me.channel_mutes,this.mutedUsers=e.me.mutes,this.blockedUsers.partialNext({userIds:e.me.blocked_user_ids??[]})),e.channel&&"notification.message_new"===e.type){let{channel:t}=e;this._addChannelConfig(t)}if("notification.channel_mutes_updated"===e.type&&e.me?.channel_mutes&&(this.mutedChannels=e.me.channel_mutes),"notification.mutes_updated"===e.type&&e.me?.mutes&&(this.mutedUsers=e.me.mutes),"notification.mark_read"===e.type&&0===e.unread_channels&&Object.keys(this.activeChannels).forEac
1h(e=>this.activeChannels[e].state.unreadCount=0),("channel.deleted"===e.type||"notification.channel_deleted"===e.type)&&e.cid){let{cid:s}=e;this.state.deleteAllChannelReference(s),this.activeChannels[e.cid]?._disconnect(),t.push(()=>{s&&delete this.activeChannels[s]})}if("notification.removed_from_channel"===e.type&&e.cid){let{cid:s}=e;this.activeChannels[s]?._disconnect(),t.push(()=>{delete this.activeChannels[s]})}return t}_muteStatus(e){let t;for(let s=0;s<this.mutedChannels.length;s++){let i=this.mutedChannels[s];if(i.channel?.cid===e){t={muted:!i.expires||new Date(i.expires).getTime()>new Date().getTime(),createdAt:i.created_at?new Date(i.created_at):new Date,expiresAt:i.expires?new Date(i.expires):null};break}}return t||{muted:!1,createdAt:null,expiresAt:null}}async connect(){if(!this.userID||!this._user)throw Error("Call connectUser or connectAnonymousUser before starting the connection");if(!this.wsBaseURL)throw Error("Websocket base url not set");if(!this.clientID)throw Error("clientID is not set");!this.wsConnection&&(this.options.warmUp||this.options.enableInsights)&&this._sayHi(),this.options.wsConnection&&this.node?(this.options.wsConnection.setClient(this),this.wsConnection=this.options.wsConnection):this.wsConnection=new sS({client:this});try{if(this.wsFallback)return await this.wsFallback.connect();return await this.wsConnection.connect(this.options.enableWSFallback?this.defaultWSTimeoutWithFallback:this.defaultWSTimeout)}catch(e){if(this.options.enableWSFallback&&function(e){if("boolean"==typeof e.isWSFailure)return e.isWSFailure;try{return JSON.parse(e.message).isWSFailure}catch(e){return!1}}(e)&&function(){let e="undefined"!=typeof navigator?navigator:"undefined"!=typeof window&&window.navigator?window.navigator:void 0;return e?"boolean"!=typeof e.onLine||e.onLine:(console.warn("isOnline failed to access window.navigator and assume browser is online"),!0)}())return this.logger("info","client:connect() - WS failed, fallback to longpoll",{tags:["connection","client"]}),this.dispatchEvent({type:"transport.changed",mode:"longpoll"}),this.wsConnection._destroyCurrentWSConnection(),this.wsConnection.disconnect().then(),this.wsFallback=new s$({client:this}),await this.wsFallback.connect();throw e}}_sayHi(){let e=O();this.doAxiosRequest("get",this.baseURL+"/hi",null,{headers:{"x-client-request-id":e}}).catch(t=>{this.options.enableInsights&&sv("http_hi_failed",{api_key:this.key,err:t,client_request_id:e})})}async queryUsers(e,t=[],s={}){let i={presence:!1};await this.wsPromise,this._hasConnectionID()||(i.presence=!1);let a=await this.get(this.baseURL+"/users",{payload:{filter_conditions:e,sort:E(t),...i,...s}});return this.state.updateUsers(a.users),a}async queryUserGroups(e={}){return await this.get(this.baseURL+"/usergroups",e)}async createUserGroup(e){return await this.post(this.baseURL+"/usergroups",e)}async getUserGroup(e,t={}){return await this.get(`${this.baseURL}/usergroups/${encodeURIComponent(e)}`,t)}async searchUserGroups(e){return await this.get(this.baseURL+"/usergroups/search",e)}async updateUserGroup(e,t){return await this.put(`${this.baseURL}/usergroups/${encodeURIComponent(e)}`,t)}async deleteUserGroup(e,t={}){return await this.delete(`${this.baseURL}/usergroups/${encodeURIComponent(e)}`,t)}async addUserGroupMembers(e,t){return await this.post(`${this.baseURL}/usergroups/${encodeURIComponent(e)}/members`,t)}async removeUserGroupMembers(e,t){return await this.post(`${this.baseURL}/usergroups/${encodeURIComponent(e)}/members/delete`,t)}async queryBannedUsers(e={},t=[],s={}){return await this.get(this.baseURL+"/query_banned_users",{payload:{filter_conditions:e,sort:E(t),...s}})}async queryFutureChannelBans(e={}){return await this.get(this.baseURL+"/query_future_channel_bans",{payload:e})}async queryMessageFlags(e={},t={}){return await this.get(this.baseURL+"/moderation/flags/message",{payload:{filter_conditions:e,...t}})}async queryChannelsRequestWithResponse(e,t=[],s={}){let i={state:!0,watch:!0,presence:!1};await this.wsPromise,this._hasConnectionID()||(i.watch=!1);let{predefined_filter:a,filter_values:n,sort_values:r,...o}=s,l=E(t),h=a?{predefined_filter:a,filter_values:n,sort_values:r,sort:l,...i,...o}:{filter_conditions:e,sort:l,...i,...o};return await this.post(this.baseURL+"/channels",h)}
1async queryChannelsRequest(e,t=[],s={}){return(await this.queryChannelsRequestWithResponse(e,t,s)).channels}async queryChannels(e,t=[],s={},i={}){let a=await this.queryChannelsRequestWithResponse(e,t,s),n=a.channels;this.dispatchEvent({type:"channels.queried",queriedChannels:{channels:n,isLatestMessageSet:!0}}),n?.length&&this.offlineDb?.upsertChannels&&await this.offlineDb.upsertChannels({channels:n,isLatestMessagesSet:!0});let r=this.hydrateActiveChannels(n,i,s);return i.withResponse?{...a,channels:r}:r}async queryReactions(e,t,s=[],i={}){let a={filter:t,sort:E(s),...i};if(this.offlineDb?.getReactions&&!i.next)try{let a=await this.offlineDb.getReactions({messageId:e,filters:t,sort:s,limit:i.limit});a&&this.dispatchEvent({type:"offline_reactions.queried",offlineReactions:a})}catch(e){this.logger("warn","An error has occurred while querying offline reactions",{error:e})}return await this.wsPromise,await this.post(this.baseURL+"/messages/"+encodeURIComponent(e)+"/reactions",a)}hydrateActiveChannels(e=[],t={},s){let{skipInitialization:i,offlineMode:a=!1}=t,n=[];for(let t of e){let e;this._addChannelConfig(t.channel);
1let r=this.channel(t.channel.type,t.channel.id);r.data=t.channel,r.offlineMode=a,r.initialized=!a,r.push_preferences=t.push_preferences;let o=[];if(void 0===i){let{messageSet:s,filteredMessageIds:i}=r._initializeState(t,"latest");o=i,e=s}else if(!i.includes(t.channel.id)){r.state.clearMessages();let{messageSet:s,filteredMessageIds:i}=r._initializeState(t,"latest");o=i,e=s}e&&(e.pagination={...e.pagination,...K({parentSet:e,requestedPageSize:s?.message_limit||25,returnedPage:t.messages,filteredReturnedPage:t.messages.filter(e=>!o.includes(e.id)),logger:this.logger})},this.polls.hydratePollCache(t.messages,!0),this.reminders.hydrateState(t.messages)),r.messageComposer.initStateFromChannelResponse(t),r.cooldownTimer.refresh(),n.push(r)}return this.syncDeliveredCandidates(n),n}async search(e,t,s={}){if(s.offset&&s.next)throw Error("Cannot specify offset with next");let i={filter_conditions:e,...s,sort:s.sort?E(s.sort):void 0};if("string"==typeof t)i.query=t;else if("object"==typeof t)i.message_filter_conditions=t;else throw Error(`Invalid type ${typeof t} for query parameter`);return await this.wsPromise,await this.get(this.baseURL+"/search",{payload:i})}setLocalDevice(e){if(this.wsConnection?.isConnecting&&this.wsPromise||(this.wsConnection?.isHealthy||this.wsFallback?.isHealthy())&&this._hasConnectionID())throw Error("you can only set device before opening a websocket connection");this.options.device=e}async addDevice(e,t,s,i){return await this.post(this.baseURL+"/devices",{id:e,push_provider:t,...null!=s?{user_id:s}:{},...null!=i?{push_provider_name:i}:{}})}async getDevices(e){return await this.get(this.baseURL+"/devices",e?{user_id:e}:{})}async getUnreadCount(e){return await this.get(this.baseURL+"/unread",e?{user_id:e}:{})}async getUnreadCountBatch(e){return await this.post(this.baseURL+"/unread_batch",{user_ids:e})}async setPushPreferences(e){return await this.post(this.baseURL+"/push_preferences",{preferences:e})}async removeDevice(e,t){return await this.delete(this.baseURL+"/devices",{id:e,...t?{user_id:t}:{}})}getRateLimits(e){let{serverSide:t,web:s,android:i,ios:a,endpoints:n}=e||{};return this.get(this.baseURL+"/rate_limits",{server_side:t,web:s,android:i,ios:a,endpoints:n?n.join(","):void 0})}async getHookEvents(e){let t=e&&e.length>0?{product:e.join(",")}:{};return await this.get(this.baseURL+"/hook/events",t)}_addChannelConfig({cid:e,config:t}){this._cacheEnabled()&&(this.configs[e]=t)}channel(e,t,s={}){if(!this.userID&&!this._isUsingServerAuth())throw Error("Call connectUser or connectAnonymousUser before creating a channel");if(~e.indexOf(":"))throw Error(`Invalid channel group ${e}, can't contain the : character`);return t&&"object"==typeof t?this.getChannelByMembers(e,t):!t&&"object"==typeof s&&s.members?.length?this.getChannelByMembers(e,s):t?this.getChannelById(e,t,s):new s_(this,e,void 0,s)}async partialUpdateUser(e){return await this.partialUpdateUsers([e])}async upsertUsers(e){let t={};for(let s of e){if(!s.id)throw Error("User ID is required when updating a user");t[s.id]=s}return await this.post(this.baseURL+"/users",{users:t})}upsertUser(e){return this.upsertUsers([e])}async partialUpdateUsers(e){for(let t of e)if(!t.id)throw Error("User ID is required when updating a user");return await this.patch(this.baseURL+"/users",{users:e})}async deleteUser(e,t){return await this.delete(this.baseURL+`/users/${encodeURIComponent(e)}`,t)}async restoreUsers(e){return await this.post(this.baseURL+"/users/restore",{user_ids:e})}async reactivateUser(e,t){return await this.post(this.baseURL+`/users/${encodeURIComponent(e)}/reactivate`,{...t})}async reactivateUsers(e,t){return await this.post(this.baseURL+"/users/reactivate",{user_ids:e,...t})}async deactivateUser(e,t){return await this.post(this.baseURL+`/users/${encodeURIComponent(e)}/deactivate`,{...t})}async deactivateUsers(e,t){return await this.post(this.baseURL+"/users/deactivate",{user_ids:e,...t})}async exportUser(e,t){return await this.get(this.baseURL+`/users/${encodeURIComponent(e)}/export`,{...t})}async banUser(e,t){return await this.post(this.baseURL+"/moderation/ban",{target_user_id:e,...t})}async unbanUser(e,t){return await this.delete(this.baseURL+"/moderation/ban",{target_user_id:e,...t})}async shadowBan(e,t){return await this.banUser(e,{shadow:!0,...t})}async removeShadowBan(e,t){return await this.unbanUser(e,{shadow:!0,...t})}async blockUser(e,t){let s=await this.post(this.baseURL+"/users/block",{blocked_user_id:e,...t?{user_id:t}:{}});return this._cacheEnabled()&&this.blockedUsers.next(({userIds:t})=>({userIds:t.concat(e)})),s}async getBlockedUsers(e){let t=await this.get(this.baseURL+"/users/block",{...e?{user_id:e}:{}});return this._cacheEnabled()&&this.blockedUsers.partialNext({userIds:t.blocks.map(({blocked_user_id:e})=>e)}
1),t}async unBlockUser(e,t){let s=await this.post(this.baseURL+"/users/unblock",{blocked_user_id:e,...t?{user_id:t}:{}});return this._cacheEnabled()&&this.blockedUsers.next(({userIds:t})=>({userIds:t.filter(t=>t!==e)})),s}async getSharedLocations(){return await this.get(this.baseURL+"/users/live_locations")}async muteUser(e,t,s={}){return await this.post(this.baseURL+"/moderation/mute",{target_id:e,...t?{user_id:t}:{},...s})}async unmuteUser(e,t){return await this.post(this.baseURL+"/moderation/unmute",{target_id:e,...t?{user_id:t}:{}})}userMuteStatus(e){if(!this.user||!this.wsPromise)throw Error("Make sure to await connectUser() first.");for(let t=0;t<this.mutedUsers.length;t+=1)if(this.mutedUsers[t].target.id===e)return!0;return!1}async flagMessage(e,t={}){return await this.post(this.baseURL+"/moderation/flag",{target_message_id:e,...t})}async flagUser(e,t={}){return await this.post(this.baseURL+"/moderation/flag",{target_user_id:e,...t})}async unflagMessage(e,t={}){return await this.post(this.baseURL+"/moderation/unflag",{target_message_id:e,...t})}async unflagUser(e,t={}){return await this.post(this.baseURL+"/moderation/unflag",{target_user_id:e,...t})}async _queryFlags(e={},t={}){return await this.post(this.baseURL+"/moderation/flags",{filter_conditions:e,...t})}async _queryFlagReports(e={},t={}){return await this.post(this.baseURL+"/moderation/reports",{filter_conditions:e,...t})}async _reviewFlagReport(e,t,s={}){return await this.patch(this.baseURL+`/moderation/reports/${encodeURIComponent(e)}`,{review_result:t,...s})}async unblockMessage(e,t={}){return await this.post(this.baseURL+"/moderation/unblock_message",{target_message_id:e,...t})}async markChannelsRead(e={}){await this.post(this.baseURL+"/channels/read",{...e})}createCommand(e){return this.post(this.baseURL+"/commands",e)}getCommand(e){return this.get(this.baseURL+`/commands/${encodeURIComponent(e)}`)}updateCommand(e,t){return this.put(this.baseURL+`/commands/${encodeURIComponent(e)}`,t)}deleteCommand(e){return this.delete(this.baseURL+`/commands/${encodeURIComponent(e)}`)}listCommands(){return this.get(this.baseURL+"/commands")}createChannelType(e){let t=Object.assign({},{commands:["all"]},e);return this.post(this.baseURL+"/channeltypes",t)}getChannelType(e){return this.get(this.baseURL+`/channeltypes/${encodeURIComponent(e)}`)}updateChannelType(e,t){return this.put(this.baseURL+`/channeltypes/${encodeURIComponent(e)}`,t)}deleteChannelType(e){return this.delete(this.baseURL+`/channeltypes/${encodeURIComponent(e)}`)}listChannelTypes(){return this.get(this.baseURL+"/channeltypes")}async translateMessage(e,t){return await this.post(this.baseURL+`/messages/${encodeURIComponent(e)}/translate`,{language:t})}async translate(e,t,s){return await this.post(this.baseURL+"/translate",{text:e,source_language:s,destination_language:t})}_normalizeExpiration(e){let t=null;if("number"==typeof e){let s=new Date;s.setSeconds(s.getSeconds()+e),t=s.toISOString()}else it(e)?t=e:e instanceof Date&&(t=e.toISOString());return t}_validateAndGetMessageId(e,t){let s;if("string"==typeof e)s=e;else{if(!e.id)throw Error(t);s=e.id}return s}pinMessage(e,t,s,i){let a=this._validateAndGetMessageId(e,"Please specify the message id when calling unpinMessage");return this.partialUpdateMessage(a,{set:{pinned:!0,pin_expires:this._normalizeExpiration(t),pinned_at:this._normalizeExpiration(i)}},s)}unpinMessage(e,t){let s=this._validateAndGetMessageId(e,"Please specify the message id when calling unpinMessage");return this.partialUpdateMessage(s,{set:{pinned:!1}},t)}async updateMessage(e,t,s){if(!e.id)throw Error("Please specify the message.id when calling updateMessage");let i=e.id;try{if(this.offlineDb)return await this.offlineDb.queueTask({task:{...(e=>{if(!e)return{};let t=e.indexOf(":");return t<=0||t===e.length-1?{}:{channelId:e.slice(t+1),channelType:e.slice(0,t)}})(e.cid),messageId:i,payload:[e,t,s],type:"update-message"}})}catch(e){this.logger("error","offlineDb:updateMessage",{tags:["channel","offlineDb"],error:e})}return await this._updateMessage(e,t,s)}async _updateMessage(e,t,s){if(!e.id)throw Error("Please specify the message.id when calling updateMessage");let i=Q(e);return"string"==typeof t?i.user_id=t:"string"==typeof t?.id&&(i.user_id=t.id),await this.post(this.baseURL+`/messages/${encodeURIComponent(e.id)}`,{message:i,...s})}async partialUpdateMessage(e,t,s,i){let a;if(!e)throw Error("Please specify the message.id when calling partialUpdateMessage");return"string"==typeof s?a={id:s}:"string"==typeof s?.id&&(a={id:s.id}),await this.put(this.baseURL+`/messages/${encodeURIComponent(e)}`,{...t,...i,user:a})}async ephemeralUpdateMessage(e,t,s,i){let a;if(!e)throw Error("messageId is required");return"string"==typeof s?a={id:s}:"string"==typeof s?.id&&(a={id:s.id}),await this.patch(`${this.baseURL}
1/messages/${encodeURIComponent(e)}/ephemeral`,{...t,...i,user:a})}async deleteMessage(e,t){let s={};"boolean"==typeof t?s=t?{hardDelete:!0}:{}:t?.deleteForMe?s={deleteForMe:!0}:t?.hardDelete&&(s={hardDelete:!0});try{if(this.offlineDb)return s.hardDelete?await this.offlineDb.hardDeleteMessage({id:e}):await this.offlineDb.softDeleteMessage({id:e,deleteForMe:s.deleteForMe}),await this.offlineDb.queueTask({task:{messageId:e,payload:[e,s],type:"delete-message"}})}catch(e){this.logger("error","offlineDb:deleteMessage",{tags:["channel","offlineDb"],error:e})}return this._deleteMessage(e,s)}async _deleteMessage(e,t){let{deleteForMe:s,hardDelete:i}="boolean"==typeof t?{hardDelete:t}:t??{},a={};i&&(a={hard:!0}),s&&(a={...a,delete_for_me:!0});let n=await this.delete(this.baseURL+`/messages/${encodeURIComponent(e)}`,a);return s&&(n.message.deleted_for_me=!0,n.message.type="deleted"),n}async undeleteMessage(e,t){return await this.post(this.baseURL+`/messages/${encodeURIComponent(e)}/undelete`,{undeleted_by:t})}async getMessage(e,t){return await this.get(this.baseURL+`/messages/${encodeURIComponent(e)}`,{...t})}async queryThreads(e={}){let t={limit:10,participant_limit:10,reply_limit:3,watch:!0,...e},s={...t};t.filter&&Object.keys(t.filter).length>0&&(s.filter=t.filter),t.sort&&(Array.isArray(t.sort)?t.sort.length>0:Object.keys(t.sort).length>0)&&(s.sort=E(t.sort));let i=await this.post(`${this.baseURL}/threads`,s),a=i.threads.map(e=>e.parent_message);return this.polls.hydratePollCache(a),{threads:i.threads.map(e=>new ss({client:this,threadData:e})),next:i.next}}async getThread(e,t={}){if(!e)throw Error("Please specify the messageId when calling getThread");let s={participant_limit:100,reply_limit:3,watch:!0,...t};return new ss({client:this,threadData:(await this.get(`${this.baseURL}/threads/${encodeURIComponent(e)}`,s)).thread})}async partialUpdateThread(e,t){if(!e)throw Error("Please specify the message id when calling partialUpdateThread");let s=["created_at","id","last_message_at","type","updated_at","user","reply_count","participants","channel","custom"];for(let e in{...t.set,...t.unset})if(s.includes(e))throw Error(`You cannot set ${e} field on Thread object. ${e} is reserved for server-side use. Please omit ${e} from your set object.`);return await this.patch(`${this.baseURL}/threads/${encodeURIComponent(e)}`,t)}setUserAgent(e){this.userAgent=e}_enrichAxiosOptions(e={params:{},headers:{},config:{}}){let t=this._getToken(),s=null;null!==this.nextRequestAbortController&&(s=this.nextRequestAbortController.signal,this.nextRequestAbortController=null),e.headers?.["x-client-request-id"]||(e.headers={...e.headers,"x-client-request-id":O()});let{params:i,headers:a,...n}=this.options.axiosRequestConfig||{};return{params:{user_id:this.userID,connection_id:this._getConnectionID(),api_key:this.key,...e.params,...i||{}},headers:{...t?{Authorization:t}:void 0,"stream-auth-type":this.getAuthType(),"X-Stream-Client":this.getUserAgent(),...e.headers,...a||{}},...s?{signal:s}:{},...e.config,...n||{}}}_getToken(){return!this.tokenManager||this.anonymous?null:this.tokenManager.getToken()}_startCleaning(){let e=this;null==this.cleaningIntervalRef&&(this.cleaningIntervalRef=setInterval(()=>{for(let t of Object.values(e.activeChannels))t.clean()},500))}verifyWebhook(e,t){return!!this.secret&&sk(e,t,this.secret)}verifyAndParseWebhook(e,t){if(!this.secret)throw new sE("cannot verify webhook signature without an API secret on the client");var s=e,i=t,a=this.secret,n=sA(s);if(!sk(n,i,a))throw new sE(sT.signatureMismatch);return sO(n)}parseSqs(e){return sO(sP(e))}parseSns(e){return sO(sP(function(e){let t,s=e.replace(/^[\s\uFEFF]+/,"");if(!s.startsWith("{"))return null;try{t=JSON.parse(s)}catch{return null}return null===t||"object"!=typeof t||Array.isArray(t)||"string"!=typeof t.Message?null:t.Message}(e)??e))}getPermission(e){return this.get(`${this.baseURL}/permissions/${encodeURIComponent(e)}`)}createPermission(e){return this.post(`${this.baseURL}/permissions`,{...e})}updatePermission(e,t){return this.put(`${this.baseURL}/permissions/${encodeURIComponent(e)}`,{...t})}deletePermission(e){return this.delete(`${this.baseURL}
1/permissions/${encodeURIComponent(e)}`)}listPermissions(){return this.get(`${this.baseURL}/permissions`)}createRole(e){return this.post(`${this.baseURL}/roles`,{name:e})}listRoles(){return this.get(`${this.baseURL}/roles`)}searchRoles(e){return this.get(`${this.baseURL}/roles/search`,e)}deleteRole(e){return this.delete(`${this.baseURL}/roles/${encodeURIComponent(e)}`)}sync(e,t,s={}){return this.post(`${this.baseURL}/sync`,{channel_cids:e,last_sync_at:t,...s})}async sendUserCustomEvent(e,t){return await this.post(`${this.baseURL}/users/${encodeURIComponent(e)}/event`,{event:t})}createBlockList(e){return this.post(`${this.baseURL}/blocklists`,e)}listBlockLists(e){return this.get(`${this.baseURL}/blocklists`,e)}getBlockList(e,t){return this.get(`${this.baseURL}/blocklists/${encodeURIComponent(e)}`,t)}updateBlockList(e,t){return this.put(`${this.baseURL}/blocklists/${encodeURIComponent(e)}`,t)}deleteBlockList(e,t){return this.delete(`${this.baseURL}/blocklists/${encodeURIComponent(e)}`,t)}exportChannels(e,t={}){let s={channels:e,...t};return this.post(`${this.baseURL}/export_channels`,s)}exportUsers(e){return this.post(`${this.baseURL}/export/users`,e)}exportChannel(e,t){return this.exportChannels([e],t)}getExportChannelStatus(e){return this.get(`${this.baseURL}/export_channels/${encodeURIComponent(e)}`)}campaign(e,t){return e&&"object"==typeof e?new S(this,null,e):new S(this,e,t)}channelBatchUpdater(){return new R(this)}segment(e,t,s){return"string"==typeof t?new sN(this,e,t,s):new sN(this,e,null,t)}validateServerSideAuth(){if(!this.secret)throw Error("This feature can be used server-side only. Please initialize the client with a secret to use this feature.")}createSegment(e,t,s){this.validateServerSideAuth();let i={id:t,type:e,...s};return this.post(this.baseURL+"/segments",i)}createUserSegment(e,t){return this.validateServerSideAuth(),this.createSegment("user",e,t)}createChannelSegment(e,t){return this.validateServerSideAuth(),this.createSegment("channel",e,t)}getSegment(e){return this.validateServerSideAuth(),this.get(this.baseURL+`/segments/${encodeURIComponent(e)}`)}updateSegment(e,t){return this.validateServerSideAuth(),this.put(this.baseURL+`/segments/${encodeURIComponent(e)}`,t)}addSegmentTargets(e,t){return this.validateServerSideAuth(),this.post(this.baseURL+`/segments/${encodeURIComponent(e)}/addtargets`,{target_ids:t})}querySegmentTargets(e,t={},s=[],i={}){return this.validateServerSideAuth(),this.post(this.baseURL+`/segments/${encodeURIComponent(e)}/targets/query`,{filter:t||{},sort:s||[],...i})}removeSegmentTargets(e,t){return this.validateServerSideAuth(),this.post(this.baseURL+`/segments/${encodeURIComponent(e)}/deletetargets`,{target_ids:t})}querySegments(e,t,s={}){return this.validateServerSideAuth(),this.post(this.baseURL+"/segments/query",{filter:e,sort:t,...s})}deleteSegment(e){return this.validateServerSideAuth(),this.delete(this.baseURL+`/segments/${encodeURIComponent(e)}`)}segmentTargetExists(e,t){return this.validateServerSideAuth(),this.get(this.baseURL+`/segments/${encodeURIComponent(e)}/target/${encodeURIComponent(t)}`)}createCampaign(e){return this.validateServerSideAuth(),this.post(this.baseURL+"/campaigns",{...e})}getCampaign(e,t){return this.validateServerSideAuth(),this.get(this.baseURL+`/campaigns/${encodeURIComponent(e)}`,{...t?.users})}startCampaign(e,t){return this.validateServerSideAuth(),this.post(this.baseURL+`/campaigns/${encodeURIComponent(e)}/start`,{scheduled_for:t?.scheduledFor,stop_at:t?.stopAt})}async queryCampaigns(e,t,s){return this.validateServerSideAuth(),await this.post(this.baseURL+"/campaigns/query",{filter:e,sort:t,...s||{}})}updateCampaign(e,t){return this.validateServerSideAuth(),this.put(this.baseURL+`/campaigns/${encodeURIComponent(e)}`,t)}deleteCampaign(e){return this.validateServerSideAuth(),this.delete(this.baseURL+`/campaigns/${encodeURIComponent(e)}`)}stopCampaign(e){return this.validateServerSideAuth(),this.post(this.baseURL+`/campaigns/${encodeURIComponent(e)}/stop`)}enrichURL(e){return this.get(this.baseURL+"/og",{url:e})}getTask(e){return this.get(`${this.baseURL}
1/tasks/${encodeURIComponent(e)}`)}async deleteChannels(e,t={}){return await this.post(this.baseURL+"/channels/delete",{cids:e,...t})}async deleteUsers(e,t={}){if(void 0!==t.user&&!["soft","hard","pruning"].includes(t.user))throw Error("Invalid delete user options. user must be one of [soft hard pruning]");if(void 0!==t.conversations&&!["soft","hard"].includes(t.conversations))throw Error("Invalid delete user options. conversations must be one of [soft hard]");if(void 0!==t.messages&&!["soft","hard","pruning"].includes(t.messages))throw Error("Invalid delete user options. messages must be one of [soft hard pruning]");return await this.post(this.baseURL+"/users/delete",{user_ids:e,...t})}async _createImportURL(e){return await this.post(this.baseURL+"/import_urls",{filename:e})}async _createImport(e,t={mode:"upsert"}){return await this.post(this.baseURL+"/imports",{path:e,...t})}async _getImport(e){return await this.get(this.baseURL+`/imports/${encodeURIComponent(e)}`)}async _listImports(e){return await this.get(this.baseURL+"/imports",e)}async upsertPushProvider(e){return await this.post(this.baseURL+"/push_providers",{push_provider:e})}async deletePushProvider({type:e,name:t}){return await this.delete(this.baseURL+`/push_providers/${encodeURIComponent(e)}/${encodeURIComponent(t)}`)}async listPushProviders(){return await this.get(this.baseURL+"/push_providers")}createAbortControllerForNextRequest(){return this.nextRequestAbortController=new AbortController}async commitMessage(e){return await this.post(this.baseURL+`/messages/${encodeURIComponent(e)}/commit`)}async createPoll(e,t){return await this.post(this.baseURL+"/polls",{...e,...t?{user_id:t}:{}})}async getPoll(e,t){return await this.get(this.baseURL+`/polls/${encodeURIComponent(e)}`,t?{user_id:t}:{})}async updatePoll(e,t){return await this.put(this.baseURL+"/polls",{...e,...t?{user_id:t}:{}})}async partialUpdatePoll(e,t,s){return await this.patch(this.baseURL+`/polls/${encodeURIComponent(e)}`,{...t,...s?{user_id:s}:{}})}async deletePoll(e,t){return await this.delete(this.baseURL+`/polls/${encodeURIComponent(e)}`,{...t?{user_id:t}:{}})}closePoll(e,t){return this.partialUpdatePoll(e,{set:{is_closed:!0}},t)}async createPollOption(e,t,s){return await this.post(this.baseURL+`/polls/${encodeURIComponent(e)}/options`,{...t,...s?{user_id:s}:{}})}async getPollOption(e,t,s){return await this.get(this.baseURL+`/polls/${encodeURIComponent(e)}/options/${encodeURIComponent(t)}`,s?{user_id:s}:{})}async updatePollOption(e,t,s){return await this.put(this.baseURL+`/polls/${encodeURIComponent(e)}/options`,{...t,...s?{user_id:s}:{}})}async deletePollOption(e,t,s){return await this.delete(this.baseURL+`/polls/${encodeURIComponent(e)}/options/${encodeURIComponent(t)}`,s?{user_id:s}:{})}async castPollVote(e,t,s,i){return await this.post(this.baseURL+`/messages/${encodeURIComponent(e)}/polls/${encodeURIComponent(t)}/vote`,{vote:s,...i?{user_id:i}:{}})}addPollAnswer(e,t,s,i){return this.castPollVote(e,t,{answer_text:s},i)}async removePollVote(e,t,s,i){return await this.delete(this.baseURL+`/messages/${encodeURIComponent(e)}/polls/${encodeURIComponent(t)}/vote/${encodeURIComponent(s)}`,{...i?{user_id:i}:{}})}async queryPolls(e={},t=[],s={},i){let a=i?`?user_id=${i}`:"";return await this.post(this.baseURL+`/polls/query${a}`,{filter:e,sort:E(t),...s})}async queryPollVotes(e,t={},s=[],i={},a){let n=a?`?user_id=${a}`:"";return await this.post(this.baseURL+`/polls/${encodeURIComponent(e)}/votes${n}`,{filter:t,sort:E(s),...i})}async queryPollAnswers(e,t={},s=[],i={},a){let n=a?`?user_id=${a}`:"";return await this.post(this.baseURL+`/polls/${encodeURIComponent(e)}/votes${n}`,{filter:{...t,is_answer:!0},sort:E(s),...i})}async queryMessageHistory(e={},t=[],s={}){return await this.post(this.baseURL+"/messages/history",{filter:e,sort:E(t),...s})}async updateFlags(e,t,s={}){return await this.post(this.baseURL+"/automod/v1/moderation/update_flags",{message_ids:e,reviewed_by:t,...s})}async queryDrafts(e={}){let t={...e,sort:e.sort?E(e.sort):void 0};return await this.post(this.baseURL+"/drafts/query",t)}async createReminder({messageId:e,...t}){return await this.post(`${this.baseURL}
1/messages/${e}/reminders`,t)}async updateReminder({messageId:e,...t}){return await this.patch(`${this.baseURL}/messages/${e}/reminders`,t)}async deleteReminder(e,t){return await this.delete(`${this.baseURL}/messages/${e}/reminders`,t?{user_id:t}:{})}async queryReminders({filter:e,sort:t,...s}={}){return await this.post(`${this.baseURL}/reminders/query`,{filter:e,sort:t&&E(t),...s})}async queryTeamUsageStats(e={}){return await this.post(`${this.baseURL}/stats/team_usage`,e)}async updateLocation(e){return await this.put(this.baseURL+"/users/live_locations",e)}uploadFile(e,t,s,i,a){return this.sendFile(`${this.baseURL}/uploads/file`,e,t,s,i,a)}uploadImage(e,t,s,i,a){return this.sendFile(`${this.baseURL}/uploads/image`,e,t,s,i,a)}deleteFile(e){return this.delete(`${this.baseURL}/uploads/file`,{url:e})}deleteImage(e){return this.delete(`${this.baseURL}/uploads/image`,{url:e})}async markChannelsDelivered(e){if(e?.latest_delivered_messages?.length)return await this.post(this.baseURL+"/channels/delivered",e)}syncDeliveredCandidates(e){this.messageDeliveryReporter.syncDeliveredCandidates(e)}async updateChannelsBatch(e){return await this.put(this.baseURL+"/channels/batch",e)}async createPredefinedFilter(e){return this.validateServerSideAuth(),await this.post(`${this.baseURL}/predefined_filters`,e)}async getPredefinedFilter(e){return this.validateServerSideAuth(),await this.get(`${this.baseURL}/predefined_filters/${encodeURIComponent(e)}`)}async updatePredefinedFilter(e,t){return this.validateServerSideAuth(),await this.put(`${this.baseURL}/predefined_filters/${encodeURIComponent(e)}`,t)}async deletePredefinedFilter(e){return this.validateServerSideAuth(),await this.delete(`${this.baseURL}/predefined_filters/${encodeURIComponent(e)}`)}async listPredefinedFilters(e={}){this.validateServerSideAuth();let{sort:t,...s}=e;return await this.get(`${this.baseURL}/predefined_filters`,{...s,...t?{sort:JSON.stringify(t)}:{}})}async setRetentionPolicy(e,t){return this.validateServerSideAuth(),await this.post(this.baseURL+"/retention_policy",{policy:e,max_age_hours:t})}async deleteRetentionPolicy(e){return this.validateServerSideAuth(),await this.post(this.baseURL+"/retention_policy/delete",{policy:e})}async getRetentionPolicy(){return this.validateServerSideAuth(),await this.get(this.baseURL+"/retention_policy")}async getRetentionPolicyRuns(e={}){return this.validateServerSideAuth(),await this.post(this.baseURL+"/retention_policy/runs",e)}},ii="Allow",ia=["*"],ir=["*"],io=class{constructor(e,t,s=ia,i=ir,a=!1,n=ii){this.name=e,this.action=n,this.owner=a,this.priority=t,this.resources=s,this.roles=i}};new io("Allow all",999,ia,ir,!1,ii),new io("Deny all",1,ia,ir,!1,"Deny");var il=e=>new Date(e.end_at).getTime()<Date.now();function ih(e){return!!e&&"deleted"!==e.type&&!!e.shared_location?.end_at&&!il(e.shared_location)}var id=class e extends ey{constructor({client:e,getDeviceId:t,watchLocation:s}){if(!e.userID)throw Error("Live-location sharing is reserved for client-side use only");super(),this.registerSubscriptions=()=>{this.incrementRefCount(),this.hasSubscriptions||(this.addUnsubscribeFunction(this.subscribeLiveLocationSharingUpdates()),this.addUnsubscribeFunction(this.subscribeTargetMessagesChange()))},this.unregisterSubscriptions=()=>super.unregisterSubscriptions(),this.client=e,this.state=new ep({messages:new Map,ready:!1}),this._deviceId=t(),this.getDeviceId=t,this.watchLocation=s}
1async init(){await this.assureStateInit(),this.registerSubscriptions()}get messages(){return this.state.getLatestValue().messages}get stateIsReady(){return this.state.getLatestValue().ready}get deviceId(){return this._deviceId||(this._deviceId=this.getDeviceId()),this._deviceId}async assureStateInit(){if(this.stateIsReady)return;let{active_live_locations:e}=await this.client.getSharedLocations();this.state.next({messages:new Map(e.filter(e=>!il(e)).map(e=>[e.message_id,{...e,stopSharingTimeout:setTimeout(()=>{this.unregisterMessages([e.message_id])},new Date(e.end_at).getTime()-Date.now())}])),ready:!0})}subscribeTargetMessagesChange(){let e=null,t=this.state.subscribeWithSelector(({messages:e})=>({messages:e}),({messages:t})=>{t.size?t.size&&!e&&(e=this.subscribeWatchLocation()):(e?.(),e=null)});return()=>{t(),e?.()}}subscribeWatchLocation(){let t=Date.now();return this.watchLocation(({latitude:s,longitude:i})=>{Date.now()<t||(t=Date.now()+3e3,eq(e.symbol,async()=>{let e=[];await this.assureStateInit();let t=[];for(let[a,n]of this.messages){if(il(n)){t.push(n.message_id);continue}if(n.latitude===s&&n.longitude===i)continue;let r=this.client.updateLocation({created_by_device_id:n.created_by_device_id,message_id:a,latitude:s,longitude:i});e.push(r)}this.unregisterMessages(t),e.length>0&&await Promise.allSettled(e)}))})}subscribeLiveLocationSharingUpdates(){let e=[...["live_location_sharing.started","message.updated","message.deleted"].map(e=>this.client.on(e,e=>{e.message&&("live_location_sharing.started"===e.type?this.registerMessage(e.message):"message.updated"===e.type?(this.messages.has(e.message.id)&&!ih(e.message)&&this.unregisterMessages([e.message.id]),this.registerMessage(e.message)):this.unregisterMessages([e.message.id]))})),this.client.on("live_location_sharing.stopped",e=>{e.live_location&&this.unregisterMessages([e.live_location?.message_id])})];return()=>e.forEach(e=>e.unsubscribe())}registerMessage(e){this.client.userID&&e?.user?.id===this.client.userID&&ih(e)&&this.state.next(t=>{let s=new Map(t.messages);return s.set(e.id,{...e.shared_location,stopSharingTimeout:setTimeout(()=>{this.unregisterMessages([e.id])},new Date(e.shared_location.end_at).getTime()-Date.now())}),{...t,messages:s}})}unregisterMessages(e){let t=this.messages,s=new Set(e),i=new Map(Array.from(t).filter(([e,t])=>(s.has(e)&&t.stopSharingTimeout&&(clearTimeout(t.stopSharingTimeout),t.stopSharingTimeout=null),!s.has(e))));i.size!==t.size&&this.state.partialNext({messages:i})}};id.symbol=Symbol(id.name)}}]);
2//# sourceMappingURL=da3c5f25-277b368138622fbe.js.map

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.