PageSourceSearch

https://www.pets4homes.co.uk/_next/static/chunks/02dtx67_-4evw.js

js pets4homes.co.uk collected 2026-10-02 02:50:55 UTC 291,315 bytes, 1 lines download raw bytes

1(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,97570,(e,t,s)=>{"use strict";s.byteLength=function(e){var t=h(e),s=t[0],i=t[1];return(s+i)*3/4-i},s.toByteArray=function(e){var t,s,i=h(e),r=i[0],o=i[1],l=new n((r+o)*3/4-o),d=0,c=o>0?r-4:r;for(s=0;s<c;s+=4)t=a[e.charCodeAt(s)]<<18|a[e.charCodeAt(s+1)]<<12|a[e.charCodeAt(s+2)]<<6|a[e.charCodeAt(s+3)],l[d++]=t>>16&255,l[d++]=t>>8&255,l[d++]=255&t;return 2===o&&(t=a[e.charCodeAt(s)]<<2|a[e.charCodeAt(s+1)]>>4,l[d++]=255&t),1===o&&(t=a[e.charCodeAt(s)]<<10|a[e.charCodeAt(s+1)]<<4|a[e.charCodeAt(s+2)]>>2,l[d++]=t>>8&255,l[d++]=255&t),l},s.fromByteArray=function(e){for(var t,s=e.length,a=s%3,n=[],r=0,o=s-a;r<o;r+=16383)n.push(function(e,t,s){for(var a,n=[],r=t;r<s;r+=3)a=(e[r]<<16&0xff0000)+(e[r+1]<<8&65280)+(255&e[r+2]),n.push(i[a>>18&63]+i[a>>12&63]+i[a>>6&63]+i[63&a]);return n.join("")}(e,r,r+16383>o?o:r+16383));return 1===a?n.push(i[(t=e[s-1])>>2]+i[t<<4&63]+"=="):2===a&&n.push(i[(t=(e[s-2]<<8)+e[s-1])>>10]+i[t>>4&63]+i[t<<2&63]+"="),n.join("")};for(var i=[],a=[],n="u">typeof Uint8Array?Uint8Array:Array,r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",o=0,l=r.length;o<l;++o)i[o]=r[o],a[r.charCodeAt(o)]=o;function h(e){var t=e.length;if(t%4>0)throw Error("Invalid string. Length must be a multiple of 4");var s=e.indexOf("=");-1===s&&(s=t);var i=s===t?0:4-s%4;return[s,i]}a[45]=62,a[95]=63},805986,(e,t,s)=>{"use strict";t.exports="object"==typeof self?self.FormData:window.FormData},763609,961027,e=>{"use strict";var t,s,i,a=e.i(221168),n=e.i(350461),r=e.i(97570),o=e.i(430559),l=e.i(805986);let h="numeric",d="ascii",c="alpha",u="asciinumeric",g="alphanumeric",p="domain",m="emoji",f="whitespace";function y(e,t,s){for(let i in t[h]&&(t[u]=!0,t[g]=!0),t[d]&&(t[u]=!0,t[c]=!0),t[u]&&(t[g]=!0),t[c]&&(t[g]=!0),t[g]&&(t[p]=!0),t[m]&&(t[p]=!0),t){let t=(i in s||(s[i]=[]),s[i]);0>t.indexOf(e)&&t.push(e)}}function _(e=null){this.j={},this.jr=[],this.jd=null,this.t=e}_.groups={},_.prototype={accepts(){return!!this.t},go(e){let t=this.j[e];if(t)return t;for(let t=0;t<this.jr.length;t++){let s=this.jr[t][0],i=this.jr[t][1];if(i&&s.test(e))return i}return this.jd},has(e,t=!1){return t?e in this.j:!!this.go(e)},ta(e,t,s,i){for(let a=0;a<e.length;a++)this.tt(e[a],t,s,i)},tr(e,t,s,i){let a;return i=i||_.groups,t&&t.j?a=t:(a=new _(t),s&&i&&y(t,s,i)),this.jr.push([e,a]),a},ts(e,t,s,i){let a=this,n=e.length;if(!n)return a;for(let t=0;t<n-1;t++)a=a.tt(e[t]);return a.tt(e[n-1],t,s,i)},tt(e,t,s,i){if(i=i||_.groups,t&&t.j)return this.j[e]=t,t;let a,n=this.go(e);return n?(Object.assign((a=new _).j,n.j),a.jr.push.apply(a.jr,n.jr),a.jd=n.jd,a.t=n.t):a=new _,t&&(i&&(a.t&&"string"==typeof a.t?y(t,Object.assign(function(e,t){let s={};for(let i in t)t[i].indexOf(e)>=0&&(s[i]=!0);return s}(a.t,i),s),i):s&&y(t,s,i)),a.t=t),this.j[e]=a,a}};let b=(e,t,s,i,a)=>e.ta(t,s,i,a),w=(e,t,s,i,a)=>e.tr(t,s,i,a),v=(e,t,s,i,a)=>e.ts(t,s,i,a),C=(e,t,s,i,a)=>e.tt(t,s,i,a),S="WORD",R="UWORD",U="ASCIINUMERICAL",M="ALPHANUMERICAL",x="LOCALHOST",L="UTLD",I="SCHEME",D="SLASH_SCHEME",k="OPENBRACE",T="CLOSEBRACE",E="OPENBRACKET",A="CLOSEBRACKET",P="OPENPAREN",O="CLOSEPAREN",F="OPENANGLEBRACKET",N="CLOSEANGLEBRACKET",$="FULLWIDTHLEFTPAREN",q="FULLWIDTHRIGHTPAREN",V="LEFTCORNERBRACKET",j="RIGHTCORNERBRACKET",B="LEFTWHITECORNERBRACKET",Q="RIGHTWHITECORNERBRACKET",H="FULLWIDTHLESSTHAN",W="FULLWIDTHGREATERTHAN",z="AMPERSAND",G="APOSTROPHE",K="ASTERISK",J="BACKSLASH",Y="BACKTICK",X="CARET",Z="COLON",ee="COMMA",et="DOLLAR",es="EQUALS",ei="EXCLAMATION",ea="HYPHEN",en="PERCENT",er="PIPE",eo="PLUS",el="POUND",eh="QUERY",ed="QUOTE",ec="FULLWIDTHMIDDLEDOT",eu="SEMI",eg="SLASH",ep="TILDE",em="UNDERSCORE",ef="EMOJI";var ey=Object.freeze({__proto__:null,ALPHANUMERICAL:M,AMPERSAND:z,APOSTROPHE:G,ASCIINUMERICAL:U,ASTERISK:K,AT:"AT",BACKSLASH:J,BACKTICK:Y,CARET:X,CLOSEANGLEBRACKET:N,CLOSEBRACE:T,CLOSEBRACKET:A,CLOSEPAREN:O,COLON:Z,COMMA:ee,DOLLAR:et,DOT:"DOT",EMOJI:ef,EQUALS:es,EXCLAMATION:ei,FULLWIDTHGREATERTHAN:W,FULLWIDTHLEFTPAREN:$,FULLWIDTHLESSTHAN:H,FULLWIDTHMIDDLEDOT:ec,FULLWIDTHRIGHTPAREN:q,HYPHEN:ea,LEFTCORNERBRACKET:V,LEFTWHITECORNERBRACKET:B,LOCALHOST:x,NL:"NL",NUM:"NUM",OPENANGLEBRACKET:F,OPENBRACE:k,OP
1ENBRACKET:E,OPENPAREN:P,PERCENT:en,PIPE:er,PLUS:eo,POUND:el,QUERY:eh,QUOTE:ed,RIGHTCORNERBRACKET:j,RIGHTWHITECORNERBRACKET:Q,SCHEME:I,SEMI:eu,SLASH:eg,SLASH_SCHEME:D,SYM:"SYM",TILDE:ep,TLD:"TLD",UNDERSCORE:em,UTLD:L,UWORD:R,WORD:S,WS:"WS"});let e_=/[a-z]/,eb=/\p{L}/u,ew=/\p{Emoji}/u,ev=/\d/,eC=/\s/,eS=null,eR=null;function eU(e,t){let s=function(e){let t=[],s=e.length,i=0;for(;i<s;){let a,n=e.charCodeAt(i),r=n<55296||n>56319||i+1===s||(a=e.charCodeAt(i+1))<56320||a>57343?e[i]:e.slice(i,i+2);t.push(r),i+=r.length}return t}(t.replace(/[A-Z]/g,e=>e.toLowerCase())),i=s.length,a=[],n=0,r=0;for(;r<i;){let o=e,l=null,h=0,d=null,c=-1,u=-1;for(;r<i&&(l=o.go(s[r]));)(o=l).accepts()?(c=0,u=0,d=o):c>=0&&(c+=s[r].length,u++),h+=s[r].length,n+=s[r].length,r++;n-=c,r-=u,h-=c,a.push({t:d.t,v:t.slice(n-h,n),s:n-h,e:n})}return a}function eM(e,t,s,i,a){let n,r=t.length;for(let s=0;s<r-1;s++){let r=t[s];e.j[r]?n=e.j[r]:((n=new _(i)).jr=a.slice(),e.j[r]=n),e=n}return(n=new _(s)).jr=a.slice(),e.j[t[r-1]]=n,n}function ex(e){let t=[],s=[],i=0;for(;i<e.length;){let a=0;for(;"0123456789".indexOf(e[i+a])>=0;)a++;if(a>0){t.push(s.join(""));for(let t=parseInt(e.substring(i,i+a),10);t>0;t--)s.pop();i+=a}else s.push(e[i]),i++}return t}let eL={defaultProtocol:"http",events:null,format:eD,formatHref:eD,nl2br:!1,tagName:"a",target:null,rel:null,validate:!0,truncate:1/0,className:null,attributes:null,ignoreTags:[],render:null};function eI(e,t=null){let s=Object.assign({},eL);e&&(s=Object.assign(s,e instanceof eI?e.o:e));let i=s.ignoreTags,a=[];for(let e=0;e<i.length;e++)a.push(i[e].toUpperCase());this.o=s,t&&(this.defaultRender=t),this.ignoreTags=a}function eD(e){return e}function ek(e,t){this.t="token",this.v=e,this.tk=t}function eT(e,t){class s extends ek{constructor(t,s){super(t,s),this.t=e}}for(let e in t)s.prototype[e]=t[e];return s.t=e,s}eI.prototype={o:eL,ignoreTags:[],defaultRender:e=>e,check(e){return this.get("validate",e.toString(),e)},get(e,t,s){let i=null!=t,a=this.o[e];return a&&("object"==typeof a?"function"==typeof(a=s.t in a?a[s.t]:eL[e])&&i&&(a=a(t,s)):"function"==typeof a&&i&&(a=a(t,s.t,s))),a},getObj(e,t,s){let i=this.o[e];return"function"==typeof i&&null!=t&&(i=i(t,s.t,s)),i},render(e){let t=e.render(this);return(this.get("render",null,e)||this.defaultRender)(t,e.t,e)}},ek.prototype={isLink:!1,toString(){return this.v},toHref(e){return this.toString()},toFormattedString(e){let t=this.toString(),s=e.get("truncate",t,this),i=e.get("format",t,this);return s&&i.length>s?i.substring(0,s)+"…":i},toFormattedHref(e){return e.get("formatHref",this.toHref(e.get("defaultProtocol")),this)},startIndex(){return this.tk[0].s},endIndex(){return this.tk[this.tk.length-1].e},toObject(e=eL.defaultProtocol){return{type:this.t,value:this.toString(),isLink:this.isLink,href:this.toHref(e),start:this.startIndex(),end:this.endIndex()}},toFormattedObject(e){return{type:this.t,value:this.toFormattedString(e),isLink:this.isLink,href:this.toFormattedHref(e),start:this.startIndex(),end:this.endIndex()}},validate(e){return e.get("validate",this.toString(),this)},render(e){let t=this.toHref(e.get("defaultProtocol")),s=e.get("formatHref",t,this),i=e.get("tagName",t,this),a=this.toFormattedString(e),n={},r=e.get("className",t,this),o=e.get("target",t,this),l=e.get("rel",t,this),h=e.getObj("attributes",t,this),d=e.getObj("events",t,this);return n.href=s,r&&(n.class=r),o&&(n.target=o),l&&(n.rel=l),h&&Object.assign(n,h),{tagName:i,attributes:n,content:a,eventListeners:d}}};let eE=eT("email",{isLink:!0,toHref(){return"mailto:"+this.toString()}}),eA=eT("text"),eP=eT("nl"),eO=eT("url",{isLink:!0,toHref(e=eL.defaultProtocol){return this.hasProtocol()?this.v:`${e}://${this.v}`},hasProtocol(){let e=this.tk;return e.length>=2&&e[0].t!==x&&e[1].t===Z}}),eF=e=>new _(e);function eN(e,t,s){let i=s[0].s,a=s[s.length-1].e;return new e(t.slice(i,a),s)}let e$={scanner:null,parser:null,tokenQueue:[],pluginQueue:[],customSchemes:[],initialized:!1};function eq(e){return e$.initialized||function(){e$.scanner=function(e=[]){let t={};_.groups=t;let s=new _;null==eS&&(eS=ex("aaa1rp3bb0ott3vie4c1le2ogado5udhabi7c0ademy5centure6ountant0s9o1tor4d0s1ult4e0g1ro2tna4f0l1rica5g0akhan5ency5i0g1rbus3force5tel5kdn3l0ibaba4pay4lfinanz6state5y2sace3tom5m0azon4ericanexpress7family11x2fam3ica3sterdam8nalytics7droid5quan4z2o0l2partments8p0le4q0uarelle8r0ab1mco4chi3my2pa2t0e3s0da2ia2sociates9t0hleta5torney7u0ction5di0ble3o3spost5thor3o0s4w0s2x0a2z0ure5ba0by2idu3namex4d1k2r0celona5laycard4s5efoot5gains6seball5ketball8uhaus5yern5b0c1t1va3cg1n2d1e0ats2uty4er2rlin4st0buy5t2f1g1h0arti5i0ble3d1ke2ng0o3o1z2j1lack0friday9ockbuster8g1omberg7ue3m0s1w2n0pparibas9o0ats3ehringer8fa2m1nd2o0k0ing5sch2tik2on4t1utique6x2r0adesco6idgestone9oadway5ker3ther5ussels7s1t1uild0ers6siness6y1zz3v1w1y1z0h3ca0b1fe2l0l1vinklein9m0era3p2non3petown5ital0one8r0avan4ds2e0er0s4s2sa1e1h1ino4t0ering5holic7ba1n1re3c1d1enter4o1rn3f0a1d2g1h0anel2nel4rity4se2t2eap3intai5ristmas6ome4urch5i0priani6rcle4sco3tadel4i0c2y3k1l0aims4eaning6ick2nic1que6othing5ud3ub0med6m1n1o0ach3des3ffee4llege4ogne5m0mbank4unity6pany2re3uter5sec4ndos3struction8ulting7tact3ractors9oking4l1p2rsica5untry4pon0s4rses6pa2r0edit0card4union9icket5own3s1uise0s6u0isinella9v1w1x1y0mru3ou3z2dad1nce3ta1e1ing3sun4y2clk3ds2e0al0er2s3gree4livery5l1oitte5ta3mocrat6ntal2ist5si0gn4v2hl2iamonds6et2gital5rect0ory7scount3ver5h2y2j1k1m1np2o0cs1tor4g1mains5t1wnload7rive4tv2ubai3pont4rban5vag2r2z2earth3t2c0o2deka3u0cation8e1g1mail3erck5nergy4gineer0ing9terprises10pson4quipment8r0icsson6ni3s0q1tate5t1u0rovision8s2vents5xchange6pert3osed4ress5traspace10fage2il1rwinds6th3mily4n0s2rm0ers5shion4t3edex3edback6rrari3ero6i0delity5o2lm2nal1nce1ial7re0stone6mdale6sh0ing5t0ness6j1k1lickr3ghts4r2orist4wers5y2m1o0o0d1tball6rd1ex2sale4um3undation8x2r0ee1senius7l1ogans4ntier7tr2ujitsu5n0d2rniture7tbol5yi3ga0l0lery3o1up4me0s3p1rden4y2b0iz3d0n2e0a1nt0ing5orge5f1g0ee3h1i0ft0s3ves2ing5l0ass3e1obal2o4m0ail3bh2o1x2n1odaddy5ld0point6f2odyear5g0le4p1t1v2p1q1r0ainger5phics5tis4een3ipe3ocery4up4s1t1u0cci3ge2ide2tars5ru3w1y2hair2mburg5ngout5us3bo2dfc0bank7ealth0care8lp1sinki6re1mes5iphop4samitsu7tachi5v2k0t2m1n1ockey4ldings5iday5medepot5goods5s0ense7nda3rse3spital5t0ing5t0els3mail5use3w2r1sbc3t1u0ghes5yatt3undai7ibm2cbc2e1u2d1e0ee3fm2kano4l1m0amat4db2mo0bilien9n0c1dustries8finiti5o2g1k1stitute6urance4e4t0ernational10uit4vestments10o1piranga7q1r0ish4s0maili5t0anbul7t0au2v3jaguar4va3cb2e0ep2tzt3welry6io2ll2m0p2nj2o0bs1urg4t1y2p0morgan6rs3uegos4niper7kaufen5ddi3e0rryhotels6properties14fh2g1h1i0a1ds2m1ndle4tchen5wi3m1n1oeln3matsu5sher5p0mg2n2r0d1ed3uokgroup8w1y0oto4z2la0caixa5mborghini8er3nd0rover6xess5salle5t0ino3robe5w0yer5b1c1ds2ease3clerc5frak4gal2o2xus4gbt3i0dl2fe0insurance9style7ghting6ke2lly3mited4o2ncoln4k2ve1ing5k1lc1p2oan0s3cker3us3l1ndon4tte1o3ve3pl0financial11r1s1t0d0a3u0ndbeck6xe1ury5v1y2ma0drid4if1son4keup4n0agement7go3p1rket0ing3s4riott5shalls7ttel5ba2c0kinsey7d1e0d0ia3et2lbourne7me1orial6n0u2rck0msd7g1h1iami3crosoft7l1ni1t2t0subishi9k1l0b1s2m0a2n1o0bi0le4da2e1i1m1nash3ey2ster5rmon3tgage6scow4to0rcycles9v0ie4p1q1r1s0d2t0n1r2u0seum3ic4v1w1x1y1z2na0b1goya4me2vy3ba2c1e0c1t0bank4flix4work5ustar5w0s2xt0direct7us4f0l2g0o2hk2i0co2ke1on3nja3ssan1y5l1o0kia3rton4w0ruz3tv4p1r0a1w2tt2u1yc2z2obi1server7ffice5kinawa6layan0group9lo3m0ega4ne1g1l0ine5oo2pen3racle3nge4g0anic5igins6saka4tsuka4t2vh3pa0ge2nasonic7ris2s1tners4s1y3y2
1ccw3e0t2f0izer5g1h0armacy6d1ilips5one2to0graphy6s4ysio5ics1tet2ures6d1n0g1k2oneer5zza4k1l0ace2y0station9umbing5s3m1n0c2ohl2ker3litie5rn2st3r0axi3ess3ime3o0d0uctions8f1gressive8mo2perties3y5tection8u0dential9s1t1ub2w0c2y2qa1pon3uebec3st5racing4dio4e0ad1lestate6tor2y4cipes5d0umbrella9hab3ise0n3t2liance6n0t0als5pair3ort3ublican8st0aurant8view0s5xroth6ich0ardli6oh3l1o1p2o0cks3deo3gers4om3s0vp3u0gby3hr2n2w0e2yukyu6sa0arland6fe0ty4kura4le1on3msclub4ung5ndvik0coromant12ofi4p1rl2s1ve2xo3b0i1s2c0b1haeffler7midt4olarships8ol3ule3warz5ience5ot3d1e0arch3t2cure1ity6ek2lect4ner3rvices6ven3w1x0y3fr2g1h0angrila6rp3ell3ia1ksha5oes2p0ping5uji3w3i0lk2na1gles5te3j1k0i0n2y0pe4l0ing4m0art3ile4n0cf3o0ccer3ial4ftbank4ware6hu2lar2utions7ng1y2y2pa0ce3ort2t3r0l2s1t0ada2ples4r1tebank4farm7c0group6ockholm6rage3e3ream4udio2y3yle4u0cks3pplies3y2ort5rf1gery5zuki5v1watch4iss4x1y0dney4stems6z2tab1ipei4lk2obao4rget4tamotors6r2too4x0i3c0i2d0k2eam2ch0nology8l1masek5nnis4va3f1g1h0d1eater2re6iaa2ckets5enda4ps2res2ol4j0maxx4x2k0maxx5l1m0all4n1o0day3kyo3ols3p1ray3shiba5tal3urs3wn2yota3s3r0ade1ing4ining5vel0ers0insurance16ust3v2t1ube2i1nes3shu4v0s2w1z2ua1bank3s2g1k1nicom3versity8o2ol2ps2s1y1z2va0cations7na1guard7c1e0gas3ntures6risign5mögensberater2ung14sicherung10t2g1i0ajes4deo3g1king4llas4n1p1rgin4sa1ion4va1o3laanderen9n1odka3lvo3te1ing3o2yage5u2wales2mart4ter4ng0gou5tch0es6eather0channel12bcam3er2site5d0ding5ibo2r3f1hoswho6ien2ki2lliamhill9n0dows4e1ners6me2oodside6rk0s2ld3w2s1tc1f3xbox3erox4ihuan4n2xx2yz3yachts4hoo3maxun5ndex5e1odobashi7ga2kohama6u0tube6t1un3za0ppos4ra3ero3ip2m1one3uerich6w2")),null==eR&&(eR=ex("ελ1υ2бг1ел3дети4ею2католик6ом3мÐ
1ºÐ´2он1сква6онлайн5рг3рус2ф2сайт3рб3укр3қаз3Õ°Õ¡Õµ3ישראל5קום3ابوظبي5رامكو5لاردن4بحرين5جزائر5سعودية6عليان5مغرب5مارات5یران5بارت2زار4يتك3ھارت5تونس4سودان3رية5شبكة4عراق2ب2مان4فلسطين6قطر3كاثوليك6وم3مصر2ليسيا5وريتانيا7قع4همراه5پاکستان7ڀارت4कॉम3नेट3भारत0म्3ोत5संगठन5বাংলা5ভারত2ৰত4ਭਾਰਤ4ભારત4ଭାରତ4இந்தியா6லங்கை6சிங்கப்பூர்11భారత్5ಭಾರತ4ഭാരതം5ලංකා4คอม3ไทย3ລາວ3გე2みんな3アマゾン4クラウド4グーグル4コム2ストア3セール3ファッション6ポイント4世界2中信1国1國1文网3亚马逊3企业2佛山2信息2健康2八卦2公司1益2台湾1灣2商城1店1标2嘉里0大酒店5在线2大拿2天主教3娱乐2家電2广东2微博2慈善2我爱你3手机2招聘2政务1府2新加坡2闻2时尚2書籍2机构2淡马锡3游戏2澳門2点看2移动2组织机构4网址1店1站1络2联通2谷歌2购物2通販2集团2電訊盈科4飞利浦3食品2餐厅2香格里拉3港2닷넷1ì»´2삼성2한국2")),C(s,"'",G),C(s,"{",k),C(s,"}",T),C(s,"[",E),C(s,"]",A),C(s,"(",P),C(s,")",O),C(s,"<",F),C(s,">",N),C(s,"(",$),C(s,")",q),C(s,"「",V),C(s,"」",j),C(s,"『",B),C(s,"』",Q),C(s,"<",H),C(s,">",W),C(s,"&",z),C(s,"*",K),C(s,"@","AT"),C(s,"`",Y),C(s,"^",X),C(s,":",Z),C(s,",",ee),C(s,"$",et),C(s,".","DOT"),C(s,"=",es),C(s,"!",ei),C(s,"-",ea),C(s,"%",en),C(s,"|",er),C(s,"+",eo),C(s,"#",el),C(s,"?",eh),C(s,'"',ed),C(s,"/",eg),C(s,";",eu),C(s,"~",ep),C(s,"_",em),C(s,"\\",J),C(s,"・",ec);let i=w(s,ev,"NUM",{[h]:!0});w(i,ev,i);let a=w(i,e_,U,{[u]:!0}),n=w(i,eb,M,{[g]:!0}),r=w(s,e_,S,{[d]:!0});w(r,ev,a),w(r,e_,r),w(a,ev,a),w(a,e_,a);let o=w(s,eb,R,{[c]:!0});w(o,e_),w(o,ev,n),w(o,eb,o),w(n,ev,n),w(n,e_),w(n,eb,n);let l=C(s,"\n","NL",{[f]:!0}),b=C(s,"\r","WS",{[f]:!0}),eU=w(s,eC,"WS",{[f]:!0});C(s,"",eU),C(b,"\n",l),C(b,"",eU),w(b,eC,eU),C(eU,"\r"),C(eU,"\n"),w(eU,eC,eU),C(eU,"",eU);let eL=w(s,ew,ef,{[m]:!0});C(eL,"#"),w(eL,ew,eL),C(eL,"️",eL);let eI=C(eL,"‍");C(eI,"#"),w(eI,ew,eL);let eD=[[e_,r],[ev,a]],ek=[[e_,null],[eb,o],[ev,n]];for(let e=0;e<eS.length;e++)eM(s,eS[e],"TLD",S,eD);for(let e=0;e<eR.length;e++)eM(s,eR[e],L,R,ek);y("TLD",{tld:!0,ascii:!0},t),y(L,{utld:!0,alpha:!0},t),eM(s,"file",I,S,eD),eM(s,"mailto",I,S,eD),eM(s,"http",D,S,eD),eM(s,"https",D,S,eD),eM(s,"ftp",D,S,eD),eM(s,"ftps",D,S,eD),y(I,{scheme:!0,ascii:!0},t),y(D,{slashscheme:!0,ascii:!0},t),e=e.sort((e,t)=>e[0]>t[0]?1:-1);for(let t=0;t<e.length;t++){let i=e[t][0],a=e[t][1]?{scheme:!0}:{slashscheme:!0};i.indexOf("-")>=0?a[p]=!0:e_.test(i)?ev.test(i)?a[u]=!0:a[d]=!0:a[h]=!0,v(s,i,i,a)}return v(s,"localhost",x,{ascii:!0}),s.jd=new _("SYM"),{start:s,tokens:Object.assign({groups:t},ey)}}(e$.customSchemes);for(let e=0;e<e$.tokenQueue.length;e++)e$.tokenQueue[e][1]({scanner:e$.scanner});e$.parser=function({groups:e}){let t=e.domain.concat([z,K,"AT",J,Y,X,et,es,ea,"NUM",en,er,eo,el,eg,"SYM",ep,em]),s=[G,Z,ee,"DOT",ei,en,eh,ed,eu,F,N,k,T,A,E,P,O,$,q,V,j,B,Q,H,W],i=[z,G,K,J,Y,X,et,es,ea,k,T,en,er,eo,el,eh,eg,"SYM",ep,em],a=eF(),n=C(a,ep);b(n,i,n),b(n,e.domain,n);let r=eF(),o=eF(),l=eF();b(a,e.domain,r),b(a,e.scheme,o),b(a,e.slashscheme,l),b(r,i,n),b(r,e.domain,r);let h=C(r,"AT");C(n,"AT",h),C(o,"AT",h),C(l,"AT",h);let d=C(n,"DOT");b(d,i,n),b(d,e.domain,n);let c=eF();b(h,e.domain,c),b(c,e.domain,c);let u=C(c,"DOT");b(u,e.domain,c);let g=eF(eE);b(u,e.tld,g),b(u,e.utld,g),C(h,x,g);let p=C(c,ea);C(p,ea,p),b(p,e.domain,c),b(g,e.domain,c),C(g,"DOT",u),C(g,ea,p);let m=C(r,ea),f=C(r,"DOT");C(m,ea,m),b(m,e.domain,r),b(f,i,n),b(f,e.domain,r);let y=eF(eO);b(f,e.tld,y),b(f,e.utld,y),b(y,e.domain,r),b(y,i,n),C(y,"DOT",f),C(y,ea,m),C(y,"AT",h);let _=C(y,Z),w=eF(eO);b(_,e.numeric,w);let v=eF(eO),S=eF();b(v,t,v),b(v,s,S),b(S,t,v),b(S,s,S),C(y,eg,v),C(w,eg,v);let R=C(o,Z),U=C(l,Z),M=C(U,eg),L=C(M,eg);b(o,e.domain,r),C(o,"DOT",f),C(o,ea,m),b(l,e.domain,r),C(l,"DOT",f),C(l,ea,m),b(R,e.domain,v),C(R,eg,v),C(R,eh,v),b(L,e.domain,v),b(L,t,v),C(L,eg,v);let I=[[k,T],[E,A],[P,O],[F,N],[$,q],[V,j],[B,Q],[H,W]];for(let e=0;e<I.length;e++){let[i,a]=I[e],n=C(v,i);C(S,i,n);let r=eF(eO);b(n,t,r);let o=eF();b(n,s,o),C(n,a,v),b(r,t,r),b(r,s,o),b(o,t,r),b(o,s,o),C(r,a,v),C(o,a,v)}return C(a,x,y),C(a,"NL",eP),{start:a,tokens:ey}}(e$.scanner.tokens);for(let e=0;e<e$.pluginQueue.length;e++)e$.pluginQueue[e][1]({scanner:e$.scanner,parser:e$.parser});e$.initialized=!0}(),function(e,t,s){let i=s.length,a=0,n=[],r=[];for(;a<i;){let o=e,l=null,h=null,d=0,c=null,u=-1;for(;a<i&&!(l=o.go(s[a].t));)r.push(s[a++]);for(;a<i&&(h=l||o.go(s[a].t));)l=null,(o=h).accepts()?(u=0,c=o):u>=0&&u++,a++,d++;if(u<0)(a-=d)<i&&(r.push(s[a]),a++);else{r.length>0&&(n.push(eN(eA,t,r)),r=[]),a-=u,d-=u;let e=c.t,i=s.slice(a-d,a);n.push(eN(e,t,i))}}return r.length>0&&n.push(eN(eA,t,r)),n}(e$.parser.start,e,eU(e$.scanner.start,e))}function eV(e,t=null,s=null){if(t&&"object"==typeof t){if(s)throw Error(`linkifyjs: Invalid link type ${t}; must be a string`);s=t,t=null}let i=new eI(s),a=eq(e),n=[];for(let e=0;e<a.length;e++){let s=a[e];s.isLink&&(!t||s.t===t)&&i.check(s)&&n.push(s.toFormattedObject(i))}return n}
1eq.scan=eU,e.s(["find",0,eV,"test",0,function(e,t=null){let s=eq(e);return 1===s.length&&s[0].isLink&&(!t||s[0].t===t)}],961027);var ej=null;let eB=ej="u">typeof WebSocket?WebSocket:"u">typeof MozWebSocket?MozWebSocket:e.g.WebSocket||e.g.MozWebSocket,{Axios:eQ,AxiosError:eH,CanceledError:eW,isCancel:ez,CancelToken:eG,VERSION:eK,all:eJ,Cancel:eY,isAxiosError:eX,spread:eZ,toFormData:e0,AxiosHeaders:e1,HttpStatusCode:e2,formToJSON:e3,getAdapter:e5,mergeConfig:e4,create:e6}=o.default;var e8=Object.create,e7=Object.defineProperty,e9=Object.getOwnPropertyDescriptor,te=Object.getOwnPropertyNames,tt=Object.getPrototypeOf,ts=Object.prototype.hasOwnProperty,ti=(e,t)=>function(){try{return t||(0,e[te(e)[0]])((t={exports:{}}).exports,t),t.exports}catch(e){throw t=0,e}},ta=(e,t,s)=>(s=null!=e?e8(tt(e)):{},((e,t,s)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let i of te(t))ts.call(e,i)||void 0===i||e7(e,i,{get:()=>t[i],enumerable:!(s=e9(t,i))||s.enumerable});return e})(!t&&e&&e.__esModule?s:e7(s,"default",{value:e,enumerable:!0}),e)),tn=ti({"(disabled):https"(){}}),tr=ti({"(disabled):node_modules/jsonwebtoken/index.js"(){}}),to=ti({"(disabled):crypto"(){}}),tl=ti({"(disabled):zlib"(){}});function th(e){return"string"==typeof e}var td=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)}},tc=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){let{data:s,custom_set:i,custom_unset:a}="data"in t||"custom_set"in t||"custom_unset"in t?t:{data:t};return await this.client.updateChannelsBatch({operation:"updateData",filter:e,...s&&{data:s},...i&&{custom_set:i},...a&&{custom_unset:a}})}},tu=ta(tn()),tg=Object.freeze({hasNext:!1,hasPrev:!1}),tp=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}),tm=Object.freeze({error:!0});function tf(e,t){e.then().catch(e=>{console.warn(`failed to do ${t}, ran into error: `,e)})}var ty=()=>null,t_=(e,t,s)=>{let i="Unhandled error in event listener";e("error",i,{error:t,event:s}),e===ty&&console.error(i,t,s)},tb=(e,t,s)=>{try{let i=e(t);i&&"function"==typeof i.then&&Promise.resolve(i).catch(e=>t_(s,e,t))}catch(e){t_(s,e,t)}},tw=e=>new Promise(t=>setTimeout(t,e));function tv(e){return"function"==typeof e||e instanceof Function||"[object Function]"===Object.prototype.toString.call(e)}var tC=e=>{let t=e?.data?.own_capabilities;return!(Array.isArray(t)&&!t.includes("read-events"))};function tS(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 tR(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 tU(e){let t="";for(let s=0;s<e.length;s++)t+=e[s].toString(16).padStart(2,"0");return t}function tM(){let e,t=(tx(e=new Uint8Array(16)),e);return t[6]=15&t[6]|64,t[8]=191&t[8]|128,tU(t.subarray(0,4))+"-"+tU(t.subarray(4,6))+"-"+tU(t.subarray(6,8))+"-"+tU(t.subarray(8,10))+"-"+tU(t.subarray(10,16))}var tx="u">typeof crypto&&void 0!==crypto?.getRandomValues?crypto.getRandomValues.bind(crypto):"u">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 tL(e){"u">typeof window&&window.addEventListener&&(window.addEventListener("offline",e),window.addEventListener("online",e))}function tI(e){"u">typeof window&&window.removeEventListener&&(window.removeEventListener("offline",e),window.removeEventListener("online",e))}var tD=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 tk(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 tT=e=>!!e&&/^https?:\/\//i.test(e.trim()),tE=({client:e,message:t})=>{let s=t.attachments;if(!s?.length)return t;let i=[],a=!1,n=s.reduce((e,t)=>{let{localMetadata:s,...n}=t;return s?(a=!0,tT(n.asset_url)||tT(n.image_url)||tT(n.og_scrape_url)||tT(n.title_link)?e.push(n):i.push(n)):e.push(t),e},[]);if(i.length){let s=`Dropped ${i.length} attachment(s) whose upload never completed. Composing with pending uploads requires awaiting them before sending.`,a={attachments:i,message:t,tags:["attachments"]};e.logger("warn",s,a),console.warn(s,a)}return a?{...t,attachments:n}:t},tA=e=>{let t={...tp,...tm};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)}},tP=({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},tO=({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:tP({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:tP({message:e[a].quoted_message,hardDelete:s,deletedAt:i}))}},tF=({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 tN(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=tF({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 t$=(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},"function"==typeof t?t(...o):t),a);return o.cancel=()=>{n&&clearTimeout(n)},o.flush=()=>(n&&(clearTimeout(n),n=null,r&&(a=e(...r))),a),o},tq=(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)}},tV=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),tj={},tB=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?tQ(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=tj[o];if(l)await l;else try{tj[o]=r.watch(a),await tj[o]}finally{delete tj[o]}return r},tQ=(e,t)=>{if(!t)return;let s=[...t].sort().join(",");if(s)return`${e}:!members-${s}`},tH=e=>{if(!e)return!1;let t=e.state.membership;return!!t?.pinned_at},tW=e=>{if(!e)return!1;let t=e.state.membership;return!!t?.archived_at},tz=e=>!!e&&"boolean"==typeof e.archived,tG=({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},tK=e=>{let t=tJ({sort:e});return"number"==typeof t&&1===Math.abs(t)},tJ=({sort:e})=>tG({atIndex:0,sort:e,targetKey:"pinned_at"}),tY=({channels:e})=>{let t=null;for(let s of e){if(!tH(s))break;"number"==typeof t?t++:t=0}return t},tX=({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=tK(i),l=tH(t);if(r||o&&l)return e;let h=[...e];n&&h.splice(a,1);let d=null;return o&&(d=tY({channels:h})),h.splice("number"==typeof d?d+1:0,0,t),h},tZ=e=>"error"===e.type&&(e.moderation_details?.action==="MESSAGE_RESPONSE_ACTION_REMOVE"||e.moderation?.action==="remove"),t0=(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)}),t1=(e,t)=>{let{newestMessageA:s,newestMessageB:i,oldestMessageA:a,oldestMessageB:n}=t0(e,t);return s>=i&&n>=a},t2=(e,t)=>{let{newestMessageA:s,newestMessageB:i,oldestMessageA:a,oldestMessageB:n}=t0(e,t);return a<n&&n<s&&s<i},t3=class{constructor(e){this.messageSets=[],this.formatMessage=e=>tk(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})}};
1for(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})=>tO({messages:i,user:e,hardDelete:t,deletedAt:s??null})),this.threads)tO({messages:this.threads[i],user:e,hardDelete:t,deletedAt:s??null});tO({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||tg}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 tN(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(tZ))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:{...tg}}]}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 t1(s=this.messageSets[t].messages,i=e.map(tk))||t1(i,s)||t2(s,i)||t2(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:{...tg}}),i=this.messageSets.length-1;else{let e=0===t;this.messageSets.splice(t,0,{messages:[],isCurrent:!1,isLatest:e,pagination:{...tg}}),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}}},t5=()=>{},t4=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 t6({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)}}},t6=class e extends t4{constructor({original:t,merged:s}){const 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`),t5}},t8=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}};t8.symbol=Symbol(t8.name);var t7=t8,t9=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}},se=class extends t7{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(t9(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 t4({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=t9(a.created_at);if(n&&((!t||n.getTime()>t.getTime())&&(t=n),t.getTime()>n.getTime()))break}return t}}},st=e=>!!e?.og_scrape_url||!!e?.title_link,ss=e=>!!e?.localMetadata?.id,si=e=>!!e?.localMetadata?.uploadState,sa=["pending","uploading"],sn=e=>si(e)&&sa.includes(e.localMetadata.uploadState),sr=e=>si(e)&&"finished"===e.localMetadata.uploadState,so=(e,t=[])=>"file"===e.type||!!(e.mime_type&&-1===t.indexOf(e.mime_type)&&"video"!==e.type),sl=e=>"image"===e.type&&!st(e),sh=e=>sl(e)&&ss(e),sd=e=>"audio"===e.type,sc=e=>"voiceRecording"===e.type,su=(e,t=[])=>"video"===e.type||!!(e.mime_type&&-1!==t.indexOf(e.mime_type)),sg=e=>!!e.lastModified&&!("uri"in e),sp=e=>null!==e&&"object"==typeof e&&!sg(e)&&!(e instanceof Blob&&!(e instanceof File))&&"string"==typeof e.name&&"string"==typeof e.uri&&"number"==typeof e.size&&"string"==typeof e.type,sm=({blobsArray:e,fileName:t,mimeType:s})=>{let i=new Blob(e,{type:s});return new File([i],t,{type:i.type})},sf=e=>{let t,s=(t=e.match(/\/([^/;]+)/),t?.[1]);return`file_${new Date().toISOString()}${s?"."+s:""}`},sy=e=>{let t=e.type;return t.startsWith("image/")&&!t.endsWith(".photoshop")},s_=e=>{if(!e)return null;if(ss(e))return e;let{localMetadata:t,...s}=e;return{localMetadata:{...t??{},id:t?.id||tM()},...s}},sb=sC(function(e,t){let s=!1;return{cb:()=>t().finally(()=>{s||sv.delete(e)}),onContinued:()=>s=!0}
1}),sw=sC(function(e,t){let s=new AbortController;return{cb:()=>s.signal.aborted?Promise.resolve("canceled"):t(s.signal).finally(()=>{s.signal.aborted||sv.delete(e)}),onContinued:()=>s.abort()}}),sv=new Map;function sC(e){return function(t,s){let{cb:i,onContinued:a}=e(t,s),n=sv.get(t);n?.onContinued();let r=n?n.promise.then(i,i):i();return sv.set(t,{promise:r,onContinued:a}),r}}var sS=class{constructor(){this.middleware=[],this.id=tM()}get installedMiddleware(){return this.middleware}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 sw(`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})}},sR=e=>o.default.isCancel(e)||e instanceof Error&&"AbortError"===e.name,sU=()=>({uploads:{}}),sM=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(sU())},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({uploadConfirmationPending:!1,id:e,uploadProgress:r?0:void 0});let t=r?t=>{this.updateUpload({id:e,uploadProgress:t,..."number"==typeof t?{uploadConfirmationPending:t>=100}:{}})}: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=>{let t;this.state.partialNext({uploads:(t=this.uploads,{...t,[e.id]:{...t[e.id],...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 t4(sU())}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}},sx=class extends sS{constructor({composer:e}){super(),this.use([(e=>({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();if(sR(n))return i();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()}}}))(e),(e=>({id:"stream-io/attachment-manager-middleware/post-upload-enrichment",handlers:{postProcess:({state:t,discard:s,forward:i,next:a})=>{let{attachment:n,error:r,response:o}=t;if(r)return i();if(!n||!o)return s();let l={...n},{id:h,previewUri:d}=n.localMetadata,c=!e||!!e.attachmentManager.attachmentsById[h];return d&&c&&(d.startsWith("blob:")&&URL.revokeObjectURL?.(d),delete l.localMetadata.previewUri),sh(n)?l.image_url=o.file:l.asset_url=o.file,o.thumb_url&&(l.thumb_url=o.thumb_url),a({...t,attachment:l})}}}))(e)])}},sL=class extends sS{constructor({composer:e}){super(),this.use([(e=>({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})}}}))(e),(e=>({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())}}))(e)])}},sI=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},sD=(e,t,s=new Set,i=new WeakSet,a=new WeakSet)=>{if(e===t)return!0;
1if(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(sI(e)||sI(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;s.add(n);for(let r=0;r<e.length;r++)if(!sD(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(!sD(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 sk(e={}){let{trackDiff:t=!1}=e;return function({target:e,source:s,customizer:i}){let a,n=Array.isArray(s)?s:[s],r=t?structuredClone(e):void 0;function o(e,t,s,a){for(let n of[...Object.keys(t),...Object.getOwnPropertySymbols(t)])!function(e,t,s,a,n){let r,o=t[s],l=e[s];if(void 0===(r=i?.(l,o,s,e,t,a))||(Object.defineProperty(e,s,{value:r,enumerable:!0,writable:!0,configurable:!0}),0))if(o&&"object"==typeof o){if(!a.has(o)){let t=function(e,t){if(null==e||!Array.isArray(e)&&"object"!=typeof e)return t;if(e&&"object"==typeof e){let s=sI(e),i=sI(t);return s||i?i?t:e:Array.isArray(e)?[...e]:{...e}}return Array.isArray(t)?[]:{}}(l,o);if(Object.defineProperty(e,s,{value:t,enumerable:!0,writable:!0,configurable:!0}),sI(t))return;n.push({target:t,source:o,sourceKey:s,parentTarget:e})}}else void 0!==o&&(e[s]=o)}(e,t,n,s,a)}let l=n.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),o(a,s,i,n);n.length;)!function({target:e,source:s,sourceKey:i,parentTarget:a},n,r){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),o(e,s,n,r),n.delete(s),n.delete(e))}(n.pop(),i,n);return i.delete(s),i.delete(a),a})(e,s),{...e}),h=t&&r?(function e(t,s,i,a,n=new Set,r=new Set){if(sD(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)||sI(t)||sI(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)}(r,l,a={children:{}}),sT(a)):null;return{result:l,diff:h}}}function sT(e){let t={},s=!1;for(let i in e.children){let a=sT(e.children[i]);a&&(t[i]=a,s=!0)}return e.type||s?{...e,children:t}:null}function sE(e,t,s){return sk()({target:e,source:t,customizer:s}).result}function sA(e,t,s){let{result:i,diff:a}=sk({trackDiff:!0})({target:e,source:t,customizer:s});return{result:i,diff:sT(a??{children:{}})||{children:{}}}}var sP=({message:e})=>({attachments:(e?.attachments??[])?.filter(({og_scrape_url:e})=>!e).map(e=>{let t=sd(e)||so(e)||sl(e)||su(e)||sc(e)?{id:tM(),uploadState:"finished"}:{id:tM()};return{...e,localMetadata:t}})}),sO=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,uploadConfirmationPending:!1,uploadProgress:void 0,uploadState:"failed"}}),this.initState=({message:e}={})=>{this.state.next(sP({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=sA(t[i],e);if(a.diff&&Object.keys(a.diff.children).length){let e=s_(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=s_(e);i&&(t.push(i),s=!0)}else i!==this.attachments&&(t=i,s=!0)}),s&&this.state.partialNext({attachments:t})},this.revokePreviewUri=e=>{let t=e.localMetadata?.previewUri;t?.startsWith("blob:")&&URL.revokeObjectURL?.(t)},this.removeAttachments=e=>{if(!e.length)return;let t=this.attachments.filter(t=>e.includes(t.localMetadata?.id));for(let t of(this.state.partialNext({attachments:this.attachments.filter(t=>!e.includes(t.localMetadata?.id))}),e))this.client.uploadManager.deleteUploadRecord(t);t.forEach(this.revokePreviewUri)},this.getUploadConfigCheck=async e=>{let t,s=this.channel.getClient();t=s.appSettingsPromise?await s.appSettingsPromise:await s.getAppSettings();let i=sy(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(sg(e)||sp(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(sp(e))return this.channel[sy(e)?"sendImage":"sendFile"](e.uri,e.name,e.type,void 0,i);let a=sg(e)?e:sm({blobsArray:[e],fileName:sf(e.type),mimeType:e.type}),{duration:n,...r}=await this.channel[sy(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,uploadConfirmationPending:!1}};return sR(i)||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,uploadConfirmationPending:!1}},a=i.localMetadata.previewUri;return a&&(a.startsWith("blob:")&&URL.revokeObjectURL(a),delete i.localMetadata.previewUri),sh(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,uploadConfirmationPending:!1}},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=null!=e&&"object"==typeof e&&("u">typeof FileList&&e instanceof FileList||"item"in e&&"length"in e&&!Array.isArray(e))?Array.from(e):e;return await Promise.all(t.slice(0,this.availableUploadSlots).map(this.uploadFile))},this.composer=t,this.state=new t4(sP({message:s})),this.attachmentsByIdGetterCache={attachmentsById:{},attachments:[]},this.preUploadMiddlewareExecutor=new sL({composer:t}),this.postUploadMiddlewareExecutor=new sx({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,uploadConfirmationPending:!1}}]);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,uploadConfirmationPending:t.uploadConfirmationPending}})});return this.client.uploadManager.upload({id:t,channelCid:this.channel.cid,file:e.localMetadata.file}).finally(()=>{s()})}};sO.toLocalUploadAttachment=e=>{var t;let s=sp(e)||sg(e)?e:sm({blobsArray:[e],fileName:sf(e.type),mimeType:e.type}
1),i={file_size:s.size,mime_type:s.type,localMetadata:{file:s,id:tM(),uploadState:"pending"},type:(t=s.type).startsWith("image/")&&!t.endsWith(".photoshop")?"image":t.includes("video/")?"video":t.includes("audio/")?"audio":"file"};return i[sy(s)?"fallback":"title"]=s.name,i.localMetadata.previewUri=sp(e)?e.uri:URL.createObjectURL?.(e),sp(e)&&e.height&&e.width&&sy(s)&&(i.original_height=e.height,i.original_width=e.width),sp(e)&&e.thumb_url&&(i.thumb_url=e.thumb_url),sp(e)&&e.duration&&(i.duration=e.duration),i};var sF=e=>{let{localMetadata:t,...s}=e;return s},sN=e=>"user"===e.mentionType,s$=e=>({...e,mentionType:"user"}),sq=e=>{let{mentionType:t,...s}=e;return s},sV=e=>{let{mentionType:t,tokenizedDisplayName:s,...i}=e;return i},sj=e=>{let t=e.trim();return""===t||">"===t||"``````"===t||"``"===t||"**"===t||"____"===t||"__"===t||"****"===t},sB=({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}}},sQ=class{constructor({composer:e,message:t}){this.initState=({message:e}={})=>{this.state.next(sB({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=>t.id===e.id&&t.mentionType===e.mentionType);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=>{e?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.clearCommand()},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&&tf(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 t4(sB({composer:e,message:t})),this.middlewareExecutor=new ix({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(s$)}get selection(){return this.state.getLatestValue().selection}get suggestions(){return this.state.getLatestValue().suggestions}get text(){return this.state.getLatestValue().text}get textIsEmpty(){return sj(this.text)}setMentionedUsers(e){let t=this.mentions.filter(e=>!sN(e));this.state.partialNext({mentionedUsers:e,mentions:[...t,...e.map(s$)]})}setMentions(e){this.state.partialNext({mentionedUsers:e.filter(sN).map(sq),mentions:e})}clearCommand(){this.command&&this.commitState({...this.state.getLatestValue(),command:null,effects:[{type:"command.clear"}]})}},sH={"-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 sW(e){return void 0!==e.code}function sz(e){if(!e.code)return!1;let t=sH[`${e.code}`];return!!t&&t.retryable}var sG={pageSize:10,allowEmptySearchString:!1,resetOnNewSearchQuery:!0},sK=class{constructor(e){this.setDebounceOptions=(e={})=>{let t=(({debounceMs:e,shortQueryDebounceMs:t,longQueryDebounceMs:s,shortQueryMaxLength:i})=>({shortQueryDebounceMs:t??e??500,longQueryDebounceMs:s??e??300,shortQueryMaxLength:i??2}))(e);this.shortQueryDebounceMs=t.shortQueryDebounceMs,this.longQueryDebounceMs=t.longQueryDebounceMs,this.shortQueryMaxLength=t.shortQueryMaxLength,this.searchDebounced=t$(this.executeQuery.bind(this),e=>this.getDebounceMs(e))},this.getDebounceMs=e=>{let{length:t}=e??this.searchQuery;return t<=this.shortQueryMaxLength?this.shortQueryDebounceMs:this.longQueryDebounceMs},this.search=e=>this.searchDebounced(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.canDispatchQuery(void 0!==e)&&(this.allowEmptySearchString||t))};const{pageSize:t,allowEmptySearchString:s,resetOnNewSearchQuery:i}={...sG,...e};this.pageSize=t,this.allowEmptySearchString=s,this.resetOnNewSearchQuery=i,this.state=new t4(this.initialState),this.setDebounceOptions(e??{})}canDispatchQuery(e){return e||!this.isLoading&&this.hasNext}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()}},sJ=class extends sK{constructor(){super(...arguments),this.queryAbortController=null}abortInFlightQuery(){return!!this.queryAbortController&&(this.queryAbortController.abort(),this.queryAbortController=null,!0)}resetState(){this.abortInFlightQuery(),super.resetState()}async executeQuery(e){if(!this.canExecuteQuery(e))return;this.abortInFlightQuery();let{signal:t}=this.queryAbortController=new AbortController,{hasNewSearchQuery:s,searchString:i}=this.prepareStateForQuery(e),a={};try{let e=await this.query(i,{signal:t});if(!e)return;let{items:s}=e;(a=this.updatePaginationStateFromQuery(e)).items=await this.filterQueryResults(s)}catch(e){a.lastQueryError=e,sW(e)&&!sz(e)&&(a.hasNext=!1)}finally{t.aborted||this.state.next(this.getStateAfterQuery(a,s))}}cancelScheduledQuery(){this.searchDebounced.cancel(),this.abortInFlightQuery()&&this.isLoading&&this.state.partialNext({isLoading:!1})}},sY=class extends sK{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,sW(e)&&!sz(e)&&(i.hasNext=!1)}finally{this.state.next(this.getStateAfterQuery(i,t))}}cancelScheduledQuery(){this.searchDebounced.cancel()}},sX={debounceMs:300,pageSize:10},sZ=class{constructor(e){this._isCursorPagination=!1,this.setDebounceOptions=({debounceMs:e})=>{this._executeQueryDebounced=t$(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"})};const{debounceMs:t,pageSize:s}={...sX,...e};this.pageSize=s,this.state=new t4(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)}},s0=class{constructor(e){this.context=new t4(e?.initialContext??{}),this.filterConfig=new t4(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}},s1=class extends sZ{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()}},s2=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 t4({isActive:!1,searchQuery:"",sources:t??[]}),this._internalState=new t4({}),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)}},s3=class extends sJ{constructor(e,t,s={}){const{filters:i,sort:a,searchOptions:n,...r}=t||{};super(r),this.type="users",this.client=e,this.filters=i,this.sort=a,this.searchOptions=n,this.filterBuilder=new s0({initialFilterConfig:{$or:{enabled:!0,generate:({searchQuery:e})=>e?{$or:[{id:{$autocomplete:e}},{name:{$autocomplete:e}}]}:null}},...s})}async query(e,t={}){let s,i=this.filterBuilder.buildFilters({baseFilters:this.filters,context:{searchQuery:e}});s=Array.isArray(this.sort)?this.sort.some(e=>"id"in e)?this.sort:[...this.sort,{id:1}]:{id:1,...this.sort};let a={...this.searchOptions,limit:this.pageSize,offset:this.offset},{users:n}=await this.client.queryUsers(i,s,a,t);return{items:n}}filterQueryResults(e){return e.filter(e=>e.id!==this.client.user?.id)}},s5=class extends sJ{constructor(e,t,s={}){const{filters:i,sort:a,searchOptions:n,...r}=t||{};super(r),this.type="channels",this.client=e,this.filters=i,this.sort=a,this.searchOptions=n,this.filterBuilder=new s0({...s,initialFilterConfig:{name:{enabled:!0,generate:({searchQuery:e})=>e?{name:{$autocomplete:e}}:null},...s.initialFilterConfig}})}async query(e,t={}){let s=this.filterBuilder.buildFilters({baseFilters:{...this.client.userID?{members:{$in:[this.client.userID]}}:{},...this.filters},context:{searchQuery:e}}),i=this.sort??{},a={...this.searchOptions,limit:this.pageSize,offset:this.offset};return{items:await this.client.queryChannels(s,i,a,t)}}filterQueryResults(e){return e}},s4=class extends sJ{constructor(e,t,s){const{messageSearchChannelFilters:i,messageSearchFilters:a,messageSearchSort:n,channelQueryFilters:r,channelQuerySort:o,channelQueryOptions:l,...h}=t||{};super(h),this.type="messages",this.client=e,this.messageSearchChannelFilters=i,this.messageSearchFilters=a,this.messageSearchSort=n,this.channelQueryFilters=r,this.channelQuerySort=o,this.channelQueryOptions=l,this.messageSearchChannelFilterBuilder=new s0(s?.messageSearchChannel),this.messageSearchFilterBuilder=new s0({...s?.messageSearch,initialFilterConfig:{text:{enabled:!0,generate:({searchQuery:e})=>e?{text:e}:null},...s?.messageSearch?.initialFilterConfig}}),this.channelQueryFilterBuilder=new s0({...s?.channelQuery,initialFilterConfig:{cid:{enabled:!0,generate:({cids:e})=>e?{cid:{$in:e}}:null},...s?.channelQuery?.initialFilterConfig}})}async query(e,t={}){if(!this.client.userID||null===this.next)return{items:[]};let s=this.messageSearchChannelFilterBuilder.buildFilters({baseFilters:{...this.client.userID?{members:{$in:[this.client.userID]}}:{},...this.messageSearchChannelFilters},context:{searchQuery:e}}),i=this.messageSearchFilterBuilder.buildFilters({baseFilters:{type:"regular",...this.messageSearchFilters},context:{searchQuery:e}}),a={created_at:-1,...this.messageSearchSort},n={limit:this.pageSize,next:this.next,sort:a},{next:r,results:o}=await this.client.search(s,i,n,t),l=o.map(({message:e})=>e);if(t.signal?.aborted)return{items:l,next:r};let h=Array.from(l.reduce((e,t)=>
1(t.cid&&!this.client.activeChannels[t.cid]&&e.add(t.cid),e),new Set));if(h.length>0){let e=this.channelQueryFilterBuilder.buildFilters({baseFilters:this.channelQueryFilters,context:{cids:h}});await this.client.queryChannels(e,{last_message_at:-1,...this.channelQuerySort},this.channelQueryOptions,t)}return{items:l,next:r}}filterQueryResults(e){return e}};function s6(e){return e.replace(/[-[\]{}()*+?.,/\\^$|#]/g,"\\$&")}var s8=e=>e?.match(/^\/(\S+)(?:\s.*)?$/)?.[1],s7=(e,t)=>Array.from(new Set(t.filter(({id:t,name:s})=>e.includes(`@${t}`)||!!s&&e.includes(`@${s}`)))),s9=(e,t)=>{if(!t)return;let s=t.toLowerCase();return e.query(s).items.find(e=>e.name?.toLowerCase()===s)},ie=(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},it=({trigger:e,text:t,isCommand:s=!1,acceptTrailingSpaces:i=!0})=>{let a=s6(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()},is=({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}}},ii=({displayName:e,searchToken:t})=>({tokenizedDisplayName:{token:t,parts:t?e.split(RegExp(`(${s6(t)})`,"gi")).filter(Boolean):[e]}}),ia=class extends sY{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}},ir={minChars:1,trigger:"/"},io=e=>void 0!==e,il=({mentions:e,text:t})=>{var s,i;let a;return(s=e.filter(e=>{let s;return!(s="channel"===e.mentionType?["channel"]:"here"===e.mentionType?["here"]:"user"===e.mentionType?[e.id,e.name].filter(io):"role"===e.mentionType||"user_group"===e.mentionType&&e.name?[e.name,e.id].filter(io):[]).length||s.some(e=>t.includes(`@${e}`))}),i=e=>`${e.mentionType}:${e.id}
1`,a=new Map,s.forEach(e=>{a.set(i(e),e)}),[...a.values()]).reduce((e,t)=>("user"===t.mentionType?e.mentioned_users.push(sq(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:[]})},ih={attachments:[],mentioned_users:[],parent_id:void 0,quoted_message:void 0,text:""},id=class extends sS{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,...ih,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}=il({mentions:a,text:n});return n||r||l||0!==o.length||0!==h.length||0!==d.length?s({...t,localMessage:{...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(sF));return r.length?s({...t,localMessage:{...t.localMessage,attachments:r},message:{...t.message,attachments:r}}):a()}}}))(e),(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=>iO.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),(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),(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),(e=>{let t=(void 0)??new ia(e.channel);return{id:"stream-io/message-composer-middleware/data-validation",handlers:{compose:async({state:s,discard:i,forward:a})=>{let{maxLengthOnSend:n}=e.config.text??{},r=s.message.text??"",o=((e,t,s)=>{let i=s9(t,s8(s));if(i&&e.isCommandDisabled(i))return i})(e,t,r);if(o)return ie(e,o),await i();let l=e.textComposer.command??s9(t,s8(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?tA(e.editedMessage):void 0;return s({...t,localMessage:tk({...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)])}get installedMiddleware(){return super.installedMiddleware}},ic=class extends sS{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}=il({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),(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(sF)):void 0;return s({...t,draft:{...t.draft,attachments:r}})}}}))(e),(e=>({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=>iO.getPreviewData(e));return n.length?s({...t,draft:{...t.draft,attachments:(t.draft.attachments??[]).concat(n)}}):i()}}}))(e),(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),(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()}}}))(e),(e=>({id:"stream-io/message-composer-middleware/draft-data-validation",handlers:{compose:async({state:t,discard:s,forward:i})=>{let a=!sj(t.draft.text??"")||t.draft.attachments?.length||t.draft.poll_id||t.draft.quoted_message_id;return e.lastChangeOriginIsLocal&&a?await i():await s()}}}))(e)])}},iu=/^([2-9]|10)$/,ig={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(iu)?{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}}},ip={name:({currentError:e,value:t})=>t&&e?{name:void 0}:{name:"string"==typeof e?e:void 0}},im={max_votes_allowed:({value:e})=>e&&!e.match(iu)?{max_votes_allowed:"Type a number from 2 to 10"}:{max_votes_allowed:void 0},name:({value:e})=>e.trim()?{name:void 0}:{name:"Question is required"},options:e=>{let t=ig.options?.(e),s=t?.options??{};return e.value.forEach((t,i)=>{let a=i===e.value.length-1;t.text.trim()||a||(s[t.id]="Option is empty")}),Object.keys(s).length>0?{options:s}:{options:void 0}}},iy={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:tM(),text:""}),{options:l}}},i_=class extends sS{constructor({composer:e}){super(),this.use([(e=>({id:"stream-io/poll-composer-composition",handlers:{compose:({discard:t,forward:s})=>e.pollComposer.canCreatePoll?s():t()}}))(e)])}},ib=class extends sS{constructor(){super(),this.use([(({processors:e,validators:t}={})=>{let s=({state:e,validators:t,processors:s})=>{let i,a,{previousState:n,targetFields:r}=e;if(s||Array.isArray(a=r.options)||"number"!=typeof a?.index||"string"!=typeof a?.text)i=s?Object.entries(r).reduce((e,[t,i])=>{let a=s[t];return{...e,...a?a({data:n.data,value:i}):{[t]:i}}},{}):r;else{let e=[...n.data.options],t=n.data.options[r.options.index];t&&(t.text=r.options.text,e.splice(r.options.index,1,t)),i={...r,options:e}}let o=Object.keys(r).reduce((e,s)=>{let a=t[s];if(a){let t=a({currentError:n.errors[s],data:n.data,value:i[s]});e={...e,...t}}return e},{});return{newData:i,newErrors:o}};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:{...iy,...e?.handleFieldChange},state:i,validators:{...ig,...ip,...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:{...ig,...im,...t?.handleFieldBlur}});return a({...i,nextState:{...r,data:{...r.data,...o},errors:{...r.errors,...l,...i.injectedFieldErrors}}})}}}})()])}},iw={selection:{start:0,end:0},text:""},iv={a:"á|à|ã|â|À|Á|Ã|Â",c:"ç|Ç",e:"é|è|ê|É|È|Ê",i:"í|ì|î|Í|Ì|Î",n:"ñ|Ñ",o:"ó|ò|ô|ő|õ|Ó|Ò|Ô|Õ",u:"ú|ù|û|ü|Ú|Ù|Û|Ü"},iC=e=>e?Object.keys(iv).reduce((e,t)=>e.replace(RegExp(iv[t],"g"),t),e):"",iS=(e,t)=>e?.includes(t)??!1,iR={channel:(e,{searchToken:t})=>{let s=String(e);return{id:s,mentionType:"channel",name:"channel",...ii({displayName:s,searchToken:t})}},here:(e,{searchToken:t})=>{let s=String(e);return{id:s,mentionType:"here",name:"here",...ii({displayName:s,searchToken:t})}},role:(e,{searchToken:t})=>{let s=String(e);return{id:s,mentionType:"role",name:s,...ii({displayName:s,searchToken:t})}},user:(e,{searchToken:t})=>({...e,mentionType:"user",...ii({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,...ii({displayName:e.name||e.id,searchToken:t})})},iU=class extends sJ{constructor(e,t){const{mentionAllAppUsers:s,memberFilters:i,memberSort:a,searchOptions:n,suggestionFactoryMappers:r,textComposerText:o,transliterate:l,trigger:h,userFilters:d,userSort:c,...u}=t||{};super({...u,allowEmptySearchString:!0}),this.type="mentions",this.normalizeSearchValue=e=>this.transliterate(iC(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=>{let t;return({channel:iS(t=this.channel.data?.own_capabilities,"notify-channel"),here:iS(t,"notify-here"),role:iS(t,"notify-role"),user:!0,user_group:iS(t,"notify-group")})[e]},this.mapMentionSuggestion=(e,t,s=this.searchQuery)=>(this.config.suggestionFactoryMappers?.[e]??iR[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.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,t={})=>{if(!this.isMentionTypeAllowed("role")||!e)return[];let{roles:s}=await this.client.searchRoles({query:e},t);return[...s?.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(iC(s.id)).toLowerCase(),a=this.transliterate(iC(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,s={})=>{let{filters:i,sort:a,options:n}=this.prepareQueryUsersParams(e,t),{users:r}=await this.client.queryUsers(i,a,n,s);return r},this.queryMembers=async(e,t=0,s={})=>{let{filters:i,sort:a,options:n}=this.prepareQueryMembersParams(e,t);return(await this.channel.queryMembers(i,a,n,s)).members.map(e=>e.user)},this.getUserSuggestionsPage=async(e,t=0,s={})=>{let i;if(!this.isMentionTypeAllowed("user"))return{items:[],nextOffset:void 0};let a=this.allMembersLoadedWithInitialChannelQuery||!e;if(this.config.mentionAllAppUsers)i=await this.queryUsers(e,t,s);else if(a){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 i=await this.queryMembers(e,t,s);return{items:i.map(t=>this.toUserSuggestion(t,e)),nextOffset:i.length===this.pageSize?t+i.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,s={})=>{if(!this.isMentionTypeAllowed("user_group")||!e)return{items:[],next:void 0};let i=this.getChannelTeam(),a=(e=>{if(e)try{return JSON.parse(e)}catch{return}})(t),n={query:e,limit:this.pageSize,...i?{team_id:i}:{},...a?.id_gt?{id_gt:a.id_gt}:{},...a?.name_gt?{name_gt:a.name_gt}:{}},{user_groups:r}=await this.client.searchUserGroups(n,s);return{items:r.map(t=>this.toUserGroupMentionSuggestion(t,e)),next:this.buildUserGroupSearchCursor(r)}},this.client=e.getClient(),this.channel=e,this.userFilters=d,this.userSort=c,this.memberFilters=i,this.memberSort=a,this.searchOptions=n,this.config={mentionAllAppUsers:s,suggestionFactoryMappers:r,textComposerText:o,trigger:h},l&&(this.transliterate=l)}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,t={}){let s=this.offset??0,i=0===s&&void 0===this.userGroupCursor,a=this.latestUserPaginationState,n=this.userGroupCursor,[r,o,l]=await Promise.allSettled([this.getUserSuggestionsPage(e,s,t),this.getUserGroupSuggestionsPage(e,n,t),i?this.getRoleMentionSuggestions(e,t):Promise.resolve([])]);if(t.signal?.aborted)return{items:[]};let h="fulfilled"===r.status?r.value:{items:[],nextOffset:i?void 0:a?.nextOffset},d="fulfilled"===o.status?o.value:{items:[],next:i?void 0:n},c="fulfilled"===l.status?l.value:[],u=[...i?this.getBuiltinMentionSuggestions(e):[],...c,...d.items,...h.items];return this.latestUserPaginationState={itemCount:h.items.length,nextOffset:h.nextOffset},this.userGroupCursor=d.next,{items:u}}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()}},iM={minChars:1,trigger:"@"},ix=class extends sS{constructor({composer:e}){super(),this.use([(e=>({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),(e=>{let t,s,i=sE(iM,(void 0)??{});return(t=new iU(e,{trigger:i.trigger})).activate(),{id:"stream-io/text-composer/mentions-middleware",handlers:{onChange:({state:e,next:a,complete:n,forward:r})=>{if(!e.selection)return r();let o=void 0!==s&&e.selection.end===s;s=void 0;let l=e.command||e.text.trimStart().startsWith("/")?e.mentionedUsers:s7(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=it({trigger:i.trigger,text:d});c&&c.length===i.minChars&&t.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<i.minChars||u){let e=h.suggestions?.trigger===i.trigger,t={...h};return e&&delete t.suggestions,a(t)}return t.config.textComposerText=h.text,n({...h,suggestions:{query:c.slice(1),searchSource:t,trigger:i.trigger}})},onSuggestionItemSelect:({state:e,complete:a,forward:n})=>{let{selectedSuggestion:r}=e.change??{};if(!r||e.suggestions?.trigger!==i.trigger)return n();t.resetStateAndActivate();let o=(e=>{if("user"===e.mentionType)return s$(sV(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(s$),o),h=is({insertText:`@${r.name||r.id} `,selection:e.selection,text:e.text,trigger:i.trigger});return s=h.selection.end,a({...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,sV(r)):e.mentionedUsers,mentions:l,suggestions:void 0})}}}})(e.channel),((e,t)=>{let s=sE(ir,t??{}),i=new ia(e);return t?.searchSource&&(i=t.searchSource).resetState(),i.activate(),{id:"stream-io/text-composer/commands-m
1iddleware",handlers:{onChange:({state:e,next:a,complete:n,forward:r})=>{let o;if(!e.selection)return r();let l=e.text.slice(0,e.selection.end),h=(o=l.match(/^\/(\S+)\s+.*/))&&o[1];if(h){let s=s9(i,h),n=t?.composer;if(s&&!n?.isCommandDisabled(s))return a({...e,command:s,suggestions:void 0})}let d=it({trigger:s.trigger,text:l,acceptTrailingSpaces:!1,isCommand:!0});if(d&&d.length===s.minChars&&i.resetStateAndActivate(),!d||d.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:d.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&&ie(o,r)?n():(i.resetStateAndActivate(),a({...e,...is({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:iw,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}},iL=new Set(["mute","unmute","unban"]),iI=(e,t)=>{let s=t?.commands?.sendValidator;return void 0===s?e:{...e,commands:{...e.commands,sendValidator:s}}},iD={attachments:{acceptedFiles:[],fileUploadFilter:()=>!0,maxNumberOfFilesPerMessage:10,trackUploadProgress:!0},commands:{sendValidator:({command:e,commandArgsText:t,mentionedUsersInText:s})=>"ban"===e.name||iL.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=>eV(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:()=>tM()},text:{enabled:!0,publishTypingEvents:!0}},ik=e=>({message:{},custom:{}}),iT=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(ik({composer:this.composer,message:e}))},this.getSnapshot=()=>this.state.getLatestValue(),this.restoreSnapshot=e=>{this.state.next(e)},this.composer=e,this.state=new t4(ik({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}})}},iE=((t=iE||{}).DISMISSED="dismissed",t.FAILED="failed",t.LOADED="loaded",t.LOADING="loading",t.PENDING="pending",t),iA=({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},iP=class e{constructor({composer:t,message:s}){this.shouldDiscardEnrichQueries=!1,this.initState=({message:e}={})=>{this.cancelURLEnrichment(),this.state.next(iA({message:this.enabled?e:void 0}))},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=sA(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 t4(iA({message:this.enabled?s:void 0})),this.findAndEnrichUrls=t$(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=t$(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}})}};iP.previewIsLoading=e=>"loading"===e.status,iP.previewIsLoaded=e=>"loaded"===e.status,iP.previewIsDismissed=e=>"dismissed"===e.status,iP.previewIsFailed=e=>"failed"===e.status,iP.previewIsPending=e=>"pending"===e.status,iP.getPreviewData=e=>{let{status:t,...s}=e;return s};var iO=iP,iF=({message:e})=>({location:e?.shared_location??null}),iN=class{constructor({composer:e,message:t}){this.initState=({message:e}={})=>{this.state.next(iF({message:e}))}
1,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 t4(iF({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}},i$=(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()},iq=(e,t)=>{let s=t.popSnapshot();s&&t.restoreSnapshot(s)},iV=class{constructor(e){this.options=e,this.handlers=new Map,this.registerDefaultHandlers=()=>{this.registerEffectHandler("command.activate",i$),this.registerEffectHandler("command.clear",iq)},this.registerEffectHandler=(e,t)=>{this.handlers.set(e,t)},this.applyEffects=(e=[])=>{e.forEach(e=>this.applyEffect(e))},this.applyEffect=e=>{let t=this.handlers.get(e.type);t?.(e,this.options.composer)},this.registerDefaultHandlers()}},ij=((s=ij||{}).Chat="chat",s.Video="video",s.Moderation="moderation",s.Feeds="feeds",s),iB=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}}},iQ=((i=iQ||{}).anonymous="anonymous",i.public="public",i),iH=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 t4(this.initialState),this.compositionMiddlewareExecutor=new i_({composer:e}),this.stateMiddlewareExecutor=new ib}get initialState(){return{data:{allow_answers:!1,allow_user_suggested_options:!1,description:"",enforce_unique_vote:!0,id:tM(),max_votes_allowed:"",name:"",options:[{id:tM(),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}
1get 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(iu)?.[0]||""),n=""===e.max_votes_allowed||!!a&&(2<=a||a<=10);return s&&i&&n&&0===Object.values(t).filter(e=>!!e).length}},iW=50,iz=[{created_at:-1}],iG={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},iK=e=>{let t={};for(let s in e)iG[s]||(t[s]=e[s]);return t},iJ=class extends t7{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:iK(t)})}).unsubscribe,this.subscribeMarkActiveThreadRead=()=>this.state.subscribeWithSelector(e=>({active:e.active,unreadMessageCount:iZ(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()=>
1e.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=tF({needle:tk(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=tk(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:tN(e.replies,s,t)}))},this.updateParentMessageLocally=({message:e})=>{if(e.id!==this.id)throw Error("Message does not belong to this thread");this.state.next(t=>{let s=tk(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=tq(()=>this.markAsRead(),1e3,{trailing:!0}),this.queryReplies=({limit:e=iW,sort:t=iz,...s}={})=>this.channel.getReplies(this.id,{limit:e,...s},t),this.loadNextPage=({limit:e=iW}={})=>this.loadPage(e),this.loadPrevPage=({limit:e=iW}={})=>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(tk),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}}))}};
1const s=e.channel(t.channel.type,t.channel.id,{name:t.channel.name});s._hydrateMembers({members:t.channel.members??[],overrideCurrentState:!1});const i=e.userID?[{user:{id:e.userID},unread_messages:0,last_read:new Date().toISOString()}]:[];this.state=new t4({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:iX(t),parentMessage:tk(t.parent_message),participants:t.thread_participants,read:iY(t.read&&0!==t.read.length?t.read:i),replies:t.latest_replies.map(tk),replyCount:t.reply_count??0,updatedAt:t.updated_at?new Date(t.updated_at):null,title:t.title,custom:iK(t)}),this.id=t.parent_message_id,this.client=e,this.messageComposer=new i3({client:e,composition:t.draft,compositionContext:this})}get channel(){return this.state.getLatestValue().channel}get hasStaleState(){return this.state.getLatestValue().isStateStale}get ownUnreadCount(){return iZ(this.client.userID)(this.state.getLatestValue())}},iY=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),{}),iX=e=>({nextCursor:null,prevCursor:e.latest_replies.length===e.reply_count?null:e.latest_replies.at(0)?.id??null,isLoadingNext:!1,isLoadingPrev:!1}),iZ=e=>t=>e&&t.read[e]?.unreadMessageCount||0,i0=e=>!!e?.message,i1=e=>{let t;if(!e)return{draftId:null,id:i3.generateId(),pollId:null,quotedMessage:null,showReplyInChannel:!1,editedMessage:null};let s=e.quoted_message,i=i0(e)?null:tk(e),a=null,n=i3.generateId();return i0(e)?(t=e.message,a=e.message.id):(t=e,n=e.id),{draftId:a,id:n,pollId:t.poll_id??null,quotedMessage:s?tk(s):null,showReplyInChannel:!1,editedMessage:i}},i2=class e extends t7{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=s7(t,this.textComposer.mentionedUsers),a={command:e,commandArgsText:e.name?(s=e.name,t.replace(RegExp(`^${s6(`/${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:i0(e)?e.message:tk(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(i1(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=>{let t,s;return t=null,s=new Date().getTime(),i0(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}}},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(tk(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)=>{void 0===t||((this.logStateUpdateTimestamp(),this.compositionIsEmpty)?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;e?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{var s;let e,i={channel_cid:this.channel.cid,created_at:new Date().toISOString(),message:t,parent_id:t.parent_id,quoted_message:this.quotedMessage?(s=this.quotedMessage,{...(e=e=>{if(!e)return null;let t=new Date().toISOString();return{...e,created_at:s.created_at?s.created_at.toISOString():t,deleted_at:s.deleted_at?s.deleted_at.toISOString():void 0,pinned_at:s.pinned_at?s.pinned_at.toISOString():void 0,updated_at:s.updated_at?s.updated_at.toISOString():t}})(s),quoted_message:e(s.quoted_message)}):void 0};await this.client.offlineDb.upsertDraft({draft:i})}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 as)this.channel=i;else if(i instanceof iJ)this.channel=i.channel;else if(i.cid){const[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 t4(iI(sE(sE(iD,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)),i0(t)?n=t.message:t&&(n=tk(t)),this.attachmentManager=new sO({composer:this,message:n}),this.linkPreviewsManager=new iO({composer:this,message:n}),this.locationComposer=new iN({composer:this,message:n}),this.textComposer=new sQ({composer:this,message:n}),this.pollComposer=new iH({composer:this}),this.customDataManager=new iT({composer:this,message:n}),this.editingAuditState=new t4(this.initEditingAuditState(t)),this.state=new t4(i1(t)),this.compositionMiddlewareExecutor=new id({composer:this}),this.draftCompositionMiddlewareExecutor=new ic({composer:this}),this.effectHandlers=new iV({composer:this})}static evaluateContextType(e){return e instanceof as?"channel":e instanceof iJ?"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 as?null:this.compositionContext instanceof iJ?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 allowsPendingUploads(){return this.compositionMiddlewareExecutor.installedMiddleware.some(e=>e.allowsPendingUploads)}get hasSendableData(){if(!this.isCommandSendable)return!1;if(this.allowsPendingUploads){let e=this.attachmentManager.attachments.some(e=>sr(e)||sn(e));return!!(!this.textComposer.textIsEmpty||e||this.pollId||this.locationComposer.validLocation)}return!!(!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(iI(sE(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}})}};i2.generateId=tM;var i3=i2,i5=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 as){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 iJ))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,sW(e)&&sz(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=null;return e instanceof as?s=await e.markAsReadRequest(t):e instanceof iJ&&(s=await e.channel.markAsReadRequest({...t,thread_id:e.id})),s&&this.removeCandidateFor(e),s},this.throttledMarkRead=tq(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 as?!!e.getConfig()?.delivery_events:e instanceof iJ?!!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 as?e.cid:e instanceof iJ?`${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()}}},i4={timestampMs:-1/0,msgId:""},i6=(e,t)=>e.timestampMs!==t.timestampMs?e.timestampMs-t.timestampMs:0,i8=(e,t,s)=>{let i=0,a=e.length;for(;i<a;){let n=i+a>>>1;i6(s(e[n]),t)>=0?a=n:i=n+1}return i},i7=(e,t,s)=>{let i=0,a=e.length;for(;i<a;){let n=i+a>>>1;i6(s(e[n]),t)>0?a=n:i=n+1}return i},i9=(e,t,s)=>e.splice(i7(e,s(t),s),0,t),ae=(e,t,s,i)=>{let a=i8(e,s,i);for(;a<e.length&&0===i6(i(e[a]),s);){if(e[a].user.id===t.user.id)return void e.splice(a,1);a++}},at=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)??i4:i4,a=s?this.locateMessage(s)??i4:i4;0>i6(a,i)&&(a=i);let n={user:t.user,lastReadRef:i,lastDeliveredRef:a};this.byUser.set(t.user.id,n),this.readSorted.splice(i8(this.readSorted,i,e=>e.lastReadRef),0,n),this.deliveredSorted.splice(i8(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>i6(a,n.lastReadRef)?n.lastReadRef:a;0>=i6(r,n.lastDeliveredRef)||(ae(this.deliveredSorted,n,n.lastDeliveredRef,e=>e.lastDeliveredRef),n.lastDeliveredRef=r,i9(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>=i6(a,n.lastReadRef))&&(ae(this.readSorted,n,n.lastReadRef,e=>e.lastReadRef),n.lastReadRef=a,i9(this.readSorted,n,e=>e.lastReadRef),0>i6(n.lastDeliveredRef,n.lastReadRef)&&(ae(this.deliveredSorted,n,n.lastDeliveredRef,e=>e.lastDeliveredRef),n.lastDeliveredRef=n.lastReadRef,i9(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??""}:{...i4};(0!==i6(a,i.lastReadRef)||a.msgId!==i.lastReadRef.msgId)&&(ae(this.readSorted,i,i.lastReadRef,e=>e.lastReadRef),i.lastReadRef=a,i9(this.readSorted,i,e=>e.lastReadRef),0>i6(i.lastDeliveredRef,i.lastReadRef)&&(ae(this.deliveredSorted,i,i.lastDeliveredRef,e=>e.lastDeliveredRef),i.lastDeliveredRef=i.lastReadRef,i9(this.deliveredSorted,i,e=>e.lastDeliveredRef)))}readersForMessage(e){let t=i8(this.readSorted,e,({lastReadRef:e})=>e);return this.readSorted.slice(t).map(e=>e.user)}deliveredForMessage(e){let t=i8(this.deliveredSorted,e,({lastDeliveredRef:e})=>e);return this.deliveredSorted.slice(t).map(e=>e.user)}deliveredNotReadForMessage(e){let t=i8(this.deliveredSorted,e,({lastDeliveredRef:e})=>e),s=[];for(let i=t;i<this.deliveredSorted.length;i++){let t=this.deliveredSorted[i];0>i6(t.lastReadRef,e)&&s.push(t.user)}return s}usersWhoseLastReadIs(e){if(!e.msgId)return[];let t=i8(this.readSorted,e,e=>e.lastReadRef),s=i7(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=i8(this.deliveredSorted,e,e=>e.lastDeliveredRef),s=i7(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&&i6(s.lastReadRef,e)>=0}hasUserDelivered(e,t){let s=this.byUser.get(t);return!!s&&i6(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:i4,lastDeliveredRef:i4},this.byUser.set(e.id,t),i9(this.readSorted,t,e=>e.lastReadRef),i9(this.deliveredSorted,t,e=>e.lastDeliveredRef)),t}},as=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=[...this.listeners.all??[],...this.listeners[e.type]??[]],{logger:s}=this._client;for(let i of t)"string"!=typeof i&&tb(i,e,s)},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 t3(this),this.initialized=!1,this.offlineMode=!1,this.lastTypingEvent=null,this.isTyping=!1,this.disconnected=!1,this.messageComposer=new i3({client:this._client,compositionContext:this}),this.messageReceiptsTracker=new at({locateMessage:e=>{let t=this.state.findMessageByTimestamp(e);return t&&{timestampMs:e,msgId:t.id}}}),this.cooldownTimer=new se({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){let s=this.getClient(),i=tE({client:s,message:e});return await s.post(this._channelURL()+"/message",{message:i,...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?tS(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={},i={}){let a,n,r=this.type;return this.id?a=this.id:this.data?.members&&Array.isArray(this.data.members)&&(n=this.data.members),await this.getClient().get(this.getClient().baseURL+"/members",{payload:{type:r,id:a,members:n,sort:tS(t),filter_conditions:e,...s}},i)}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.getClient()._isUsingServerAuth()||this.getConfig()?.read_events&&tC(this))?await this.getClient().post(this._channelURL()+"/read",{...e}):null}async markUnread(e){return(this._checkInitialized(),this.getClient()._isUsingServerAuth()||this.getConfig()?.read_events&&tC(this))?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&&tf(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?tS(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:tS(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||!!tC(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=tQ(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,...tV({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.thread)break;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)}},ai=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]}},aa=class{constructor(){this.connectionStartTimestamp=null,this.wsTotalFailures=0,this.wsConsecutiveFailures=0,this.instanceClientId=tM()}},an=async(e,t)=>{for(let s=0;s<3;s++){try{await o.default.post(`https://chat-insights.getstream.io/insights/${e}`,t)}catch(e){await tw((s+1)*3e3);continue}break}};function ar(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:"u">typeof navigator?navigator?.onLine:null,user_agent:"u">typeof navigator?navigator?.userAgent:null,instance_client_id:t.insightMetrics.instanceClientId}}var ao=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}),1e3===t.code){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,tL(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,40!==e.code||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 tw(50)}})(),(async()=>{throw await tw(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),tI(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(1e3,"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=tM(),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 eB(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&&(an("ws_success_after_failure",ar(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),...ar(this)};an?.("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=tR(this.consecutiveFailures)),await tw(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,40===e.code&&!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){}}},al=ta(tr()),ah=ta(to()),ad=ta(tl());function ac(e,t,s={},i={}){if("string"!=typeof t)throw TypeError("userId should be a string");let a={user_id:t,...s};if(null==al.default||null==al.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),al.default.sign(a,e,n)}function au(e,t={}){let s=Object.assign({algorithm:"HS256",noTimestamp:!0},t);return al.default.sign({server:!0},e,s)}function ag(e,t,s){let i=a.Buffer.from(s,"utf8"),n=ah.default.createHmac("sha256",i).update(e).digest("hex");try{return ah.default.timingSafeEqual(a.Buffer.from(n),a.Buffer.from(t))}catch{return!1}}var ap="signature mismatch",am="invalid base64 encoding",af=class extends Error{constructor(e=ap){super(e),this.name="InvalidWebhookError"}};function ay(e){let t=a.Buffer.from([31,139]),s=a.Buffer.isBuffer(e)?e:a.Buffer.from(e);if(s.length>=2&&s.subarray(0,2).equals(t))try{return ad.default.gunzipSync(s)}catch{throw new af("gzip decompression failed")}return s}function a_(e){if(!/^[A-Za-z0-9+/]*={0,2}$/.test(e)||e.length%4!=0)throw new af(am);let t=a.Buffer.from(e,"base64");if(t.toString("base64").length!==e.length)throw new af(am);return ay(t)}function ab(e){let t=a.Buffer.isBuffer(e)?e.toString("utf8"):e;try{return JSON.parse(t)}catch{throw new af("invalid JSON payload")}}var aw=class{constructor(e){this.setTokenOrProvider=async(e,t)=>{this.validateToken(e,t),this.user=t,tv(e)&&(this.tokenProvider=e,this.type="provider"),"string"==typeof e&&(this.token=e,this.type="static"),!e&&this.user&&this.secret&&(this.token=ac(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&&!tv(e))throw Error("user token should either be a string or a function");if("string"==typeof e){let s;if(t.anon&&""===e)return;let i=3!==(s=e.split(".")).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})(s[1])).user_id;if(null!=e&&(null==i||""===i||i!==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 au(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=au(this.secret))}},av=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=o.default.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&&sz(i))return this._log("_req() - Retryable error, retrying request"),await tw(tR(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(o.default.isCancel(e))return void this._log("_poll() - axios canceled request");
1if(46===e.code){this._log("_poll() - ConnectionID error, connecting without ID..."),this._setState("DISCONNECTED"),this.connect(!0);return}if(sW(e)&&!sz(e))return void this._setState("CLOSED");await tw(tR(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.recoverState(),t}catch(e){throw this._setState("CLOSED"),e}},this.isHealthy=()=>!!this.connectionID&&"CONNECTED"===this.state,this.disconnect=async(e=2e3)=>{tI(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,tL(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}},aC=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)}},aS="stream:chat:v1:message",aR=class{constructor(e){this.client=e}flagUser(e,t,s={}){return this.flag("stream:user",e,"",t,s)}flagMessage(e,t,s={}){return this.flag(aS,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:tS(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("stream:v1:u
1ser_profile",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(aS,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)}},aU={active:!1,wasActivatedAtLeastOnce:!1,isThreadOrderStale:!1,threads:[],unreadThreadCount:0,unseenThreadIds:[],lastConnectionDropAt:null,pagination:{isLoading:!1,isLoadingNext:!1,nextCursor:null},ready:!1},aM=class extends t7{constructor({client:e}){super(),this.resetState=()=>{this.state.next(aU)},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()=>t.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=>
1e.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=tq(()=>{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 t4(aU),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}},ax=e=>!!e?.answer_text,aL=class{constructor({client:e,poll:t}){this.getInitialStateFromPollResponse=e=>{var t;let{own_votes:s,id:i,...a}=e,{ownAnswer:n,ownVotes:r}=s?.reduce((e,t)=>(ax(t)?e.ownAnswer=t:e.ownVotes.push(t),e),{ownVotes:[]})??{ownVotes:[]};return{...a,lastActivityAt:new Date,maxVotedOptionIds:aI(a.vote_counts_by_option),ownAnswer:n,ownVotesByOptionId:(t=r)?t.reduce((e,t)=>(ax(t)||!t.option_id||(e[t.option_id]=t),e),{}):{}}},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=>{var t;if(e.poll?.id&&e.poll.id!==this.id||"poll.updated"!==e.type)return;let{id:s,...i}={allow_answers:(t=e.poll).allow_answers,allow_user_suggested_options:t.allow_user_suggested_options,description:t.description,enforce_unique_vote:t.enforce_unique_vote,id:t.id,is_closed:t.is_closed,max_votes_allowed:t.max_votes_allowed,name:t.name,options:t.options,voting_visibility:t.voting_visibility};this.state.partialNext({...i,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&&(ax(e.poll_vote)?a=e.poll_vote:e.poll_vote.option_id&&(n[e.poll_vote.option_id]=e.poll_vote)),ax(e.poll_vote)?i=[e.poll_vote,...i]:r=aI(e.poll.vote_counts_by_option);let o=aD(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?ax(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=aI(e.poll.vote_counts_by_option)):ax(e.poll_vote)?i=[e.poll_vote,...i]:r=aI(e.poll.vote_counts_by_option);let o=aD(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;ax(e.poll_vote)?(i=i.filter(t=>t.id!==e.poll_vote.id),s&&(a=void 0)):(r=aI(e.poll.vote_counts_by_option),s&&e.poll_vote.option_id&&delete n[e.poll_vote.option_id]);let o=aD(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 t4(this.getInitialStateFromPollResponse(t))}get data(){return this.state.getLatestValue()}};function aI(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 aD(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 ak=class extends t7{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 aL({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=tk(t);this.hydratePollCache([e])}}).unsubscribe,this.client=e}get data(){return this.pollCache}},aT={"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"},aE={abortInFlightQuery:!1,allowNotLoadedChannelPromotionForEvent:{"channel.visible":!0,"message.new":!0,"notification.added_to_channel":!0,"notification.message_new":!0},lockChannelOrder:!1},aA={offset:0},aP=e=>({filters:e.responseFilters??e.filters,sort:e.responseSort??e.sort}),aO=e=>{let t={...e};return delete t.responseFilters,delete t.responseSort,t},aF=class extends t7{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={...aE,...e}},this.executeChannelsQuery=async(e,t=0)=>{let{filters:s,sort:i,options:a,stateOptions:n}=e,{offset:r,limit:o}={...aA,...a};try{let e=await this.queryChannelsRequest(s,i,a,{...n,withResponse:!0}),t=Array.isArray(e)?e:e.channels,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:Array.isArray(e)?void 0:e,sort:i}),u=aO(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 tw(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;
1let o={filters:e,sort:t,options:s,stateOptions:i};try{if(this.stateOptions=i,this.state.next(i=>({...i,pagination:{...aO(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}={...aA,...a};this.state.partialNext({pagination:{...e,isLoading:!1,isLoadingNext:!0}});let r=await this.queryChannelsRequest(s,i,a,this.stateOptions),o=Array.isArray(r)?r:r.channels,{channels:l}=this.state.getLatestValue(),h=t+(o?.length??0),d={...a,offset:h};this.state.partialNext({channels:(e=>{if(!Array.isArray(e))return[];let t=new Set;return e.filter(e=>{let s="cid".split(".").reduce((e,t)=>{if(e&&"object"==typeof e&&t in e)return e[t]},e);return!t.has(s)&&(t.add(s),!0)})})([...l||[],...o]),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 tB({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}=aP(n);this.setChannels(tX({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}=aP(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>=0,d=tH(o),c=tW(o),u=tz(i),g=tK(a);(!u||!c||i.archived)&&(!u||c||!i.archived)&&(!g||!d)&&!this.options.lockChannelOrder&&(h||this.options.allowNotLoadedChannelPromotionForEvent?.["message.new"])&&this.setChannels(tX({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 tB({client:this.client,id:t,type:s}),{channels:a,pagination:n}=this.state.getLatestValue(),{filters:r,sort:o}=aP(n),l=tz(r),h=tW(i);a&&(!l||!h||r.archived)&&(!l||h||!r.archived)&&this.options.allowNotLoadedChannelPromotionForEvent?.["notification.message_new"]&&this.setChannels(tX({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 tB({client:this.client,id:e.channel_id,type:e.channel_type}),{channels:a,pagination:n}=this.state.getLatestValue(),{filters:r,sort:o}=aP(n),l=tz(r),h=tW(i);a&&(!l||!h||r.archived)&&(!l||h||!r.archived)&&this.options.allowNotLoadedChannelPromotionForEvent?.["channel.visible"]&&this.setChannels(tX({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}=aP(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=tK(a),l=tz(i),h=tG({atIndex:0,sort:
1a,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=tH(d),p=tW(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=tY({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=aT[e.type],s=this.eventHandlers.get(t),i=this.eventHandlerOverrides.get(t);i&&"function"==typeof i?i(this.setChannels,e):s&&"function"==typeof s&&s(e)},this.registerSubscriptions=()=>{if(!this.hasSubscriptions)for(let e of Object.keys(aT))this.addUnsubscribeFunction(this.client.on(e,this.subscriptionOrOverride).unsubscribe)},this.id=`channel-manager-${tM()}`,this.client=e,this.state=new t4({channels:[],pagination:{isLoading:!1,isLoadingNext:!1,hasNext:!1,filters:{},sort:{},options:aA},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}))}},aN={durations:{error:3e3,info:3e3,success:3e3,warning:3e3}},a$=class{constructor(e={}){this.timeouts=new Map,this.store=new t4({notifications:[]}),this.config=sE(aN,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=tM(),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=>t.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:[]})}},aq=6e4,aV=36e5,aj=864e5,aB=class{constructor({reminder:e,config:t}){this.timeout=null,this.stopRefreshBoundaryMs=12096e5,this.getRefreshIntervalLength=()=>{if(!this.reminder.remindAt)return null;let e=Math.abs(aQ(this.reminder.remindAt.getTime()));return 0===e?6e4:e<aq?e:e<=aV?6e4:e<=aj?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)}
1,this.reminder=e,"number"==typeof t?.stopRefreshBoundaryMs&&(this.stopRefreshBoundaryMs=t.stopRefreshBoundaryMs)}},aQ=e=>e-new Date().getTime(),aH=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=aQ(i.remind_at.getTime())),i}),t.remind_at?this.initTimer():t.remind_at||this.clearTimer()},this.refreshTimeLeft=()=>{this.remindAt&&this.state.partialNext({timeLeftMs:aQ(this.remindAt.getTime())})},this.initTimer=()=>{this.timer.init()},this.clearTimer=()=>{this.timer.clear()},this.state=new t4(e.toStateValue(t)),this.timer=new aB({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}};aH.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?aQ(new Date(e.remind_at).getTime()):null,updated_at:new Date(e.updated_at),user:e.user||null});var aW={scheduledOffsetsMs:[12e4,18e5,36e5,72e5,288e5,864e5],stopTimerRefreshBoundaryMs:12096e5},az=class e extends t7{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 aH({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.forEach(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 t4({scheduledOffsetsMs:s?.scheduledOffsetsMs??aW.scheduledOffsetsMs,stopTimerRefreshBoundaryMs:s?.stopTimerRefreshBoundaryMs??aW.stopTimerRefreshBoundaryMs}),this.state=new t4({reminders:new Map}),this.paginator=new s1(t)}updateConfig(e){"number"==typeof e.stopTimerRefreshBoundaryMs&&e.stopTimerRefreshBoundaryMs!==this.stopTimerRefreshBoundaryMs&&this.reminders.forEac
1h(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)}};az.isReminderWsEventPayload=e=>!!e.reminder&&(e.type.startsWith("reminder.")||"notification.reminder_due"===e.type);var aG=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 aK(e){return"string"==typeof e||e instanceof String}var aJ=class e{constructor(e,t,s){this.preventThreadCleanup=!1,this._wsPromiseSettled=!0,this._wsConnectId=0,this.nextRequestAbortController=null,this._messageComposerSetupState=new t4({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=Promise.all([s,this.openConnection()]).then(e=>e[1]);this.setUserPromise=i;try{return await i}catch(t){throw this.setUserPromise===i&&this.userID===e.id&&(this.persistUserOnConnectionFailure?this.closeConnection():this.disconnectUser()),t}},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 aF({client:this,eventHandlerOverrides:e,options:t,queryChannelsOverride:s}),this.openConnection=()=>{if(!this.userID)throw Error("User is not set on client, use client.connectUser or client.connectAnonymousUser instead");if(this.wsConnection?.isConnecting&&this.wsPromise)return this.logger("info","client:openConnection() - connection already in progress",{tags:["connection","client"]}),this.wsPromise;if((this.wsConnection?.isHealthy||this.wsFallback?.isHealthy())&&this._hasConnectionID())return void this.logger("info","client:openConnection() - openConnection called twice, healthy connection already exists",{tags:["connection","client"]});this.clientID=`${this.userID}--${tM()}`;let e=this._bindWsPromise(this.connect());return this._startCleaning(),e},this._rejectPendingWsPromise=e=>{this._wsPromiseSettled||(this._wsConnectId+=1,this._wsPromiseSettled=!0,this.wsPromise?.catch(()=>{}),this._rejectWsPromise?.(e))},this._bindWsPromise=e=>{let t=++this._wsConnectId,s=this.wsPromise;return(this._wsPromiseSettled||!s)&&(this._wsPromiseSettled=!1,s=new Promise((e,t)=>
1{this._resolveWsPromise=e,this._rejectWsPromise=t}),this.wsPromise=s),e.then(e=>{t===this._wsConnectId&&(this._wsPromiseSettled=!0,this._resolveWsPromise?.(e))},e=>{t===this._wsConnectId&&(this._wsPromiseSettled=!0,this._rejectWsPromise?.(e))}),s},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,this._rejectPendingWsPromise(Error("Connection was closed because disconnectUser() was called")),this.wsPromise=null;let t=this.closeConnection(e);for(let e of Object.values(this.activeChannels))e._disconnect();return this.activeChannels={},this.state=new ai({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=tM();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"],o.default.isCancel(n))throw n;if(this._logApiError(e,t,n),this.consecutiveFailures+=1,n.response){if(40===n.response.data.code&&!this.tokenManager.isStatic())return this.consecutiveFailures>1&&await tw(tR(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=>{for(let t of[...this.listeners.all??[],...this.listeners[e.type]??[]])tb(t,e,this.logger)},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._wsPromiseSettled&&(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=tQ(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 as(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 as(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.53.0",{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 ai({client:this}),this.mutedChannels=[],this.mutedUsers=[],this.blockedUsers=new t4({userIds:[]}),this.moderation=new aR(this),this.notifications=s?.notifications??new a$,this.uploadManager=new sM(this),t&&aK(t)&&(this.secret=t);const i=s||(t&&!aK(t)?t:{});this.browser=void 0!==i.browser?i.browser:"u">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 tu.default.Agent({keepAlive:!0,keepAliveMsecs:3e3})),this.axiosInstance=o.default.create(this.options),this.setBaseURL(this.options.baseURL||"https://chat.stream-io-api.com"),void 0!==n.default&&"env"in n.default&&n.default.env.STREAM_LOCAL_TEST_RUN&&this.setBaseURL("http://localhost:3030"),void 0!==n.default&&"env"in n.default&&n.default.env.STREAM_LOCAL_TEST_HOST&&this.setBaseURL("http://"+n.default.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 aw(this.secret),this.consecutiveFailures=0,this.insightMetrics=new aa,this.defaultWSTimeoutWithFallback=6e3,this.defaultWSTimeout=15e3,this.axiosInstance.defaults.paramsSerializer=tD,this.logger=tv(i.logger)?i.logger:ty,this.recoverStateOnReconnect=this.options.recoverStateOnReconnect,this.threads=new aM({client:this}),this.polls=new ak({client:this}),this.reminders=new az({client:this}),this.messageDeliveryReporter=new i5({client:this}),this.messageComposerCache=new aG(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,r.fromByteArray)(new Uint8Array(function(e,t){let s=[];if(th(e)&&t&&th(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(!th(e)&&!(t&&th(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:a.Buffer.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),ac(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,s){return this.doAxiosRequest("get",e,null,{params:t,config:s})}put(e,t){return this.doAxiosRequest("put",e,t)}
1post(e,t,s){return this.doAxiosRequest("post",e,t,{config:s})}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,n){let r=function(e,t,s){let i=new l.default;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)||"u">typeof window&&"File"in window&&e instanceof File||"u">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&&r.append("user",JSON.stringify(a)),this.doAxiosRequest("postForm",e,r,{headers:r.getHeaders?r.getHeaders():{},config:{timeout:0,maxContentLength:1/0,maxBodyLength:1/0,...n}})}errorFromResponse(e){return new iB(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).forEach(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 ao({client:this});try{if(this.wsFallback)return await this.wsFallback.connect();return await this.wsConnection.connect(this.options.enableWSFallback?this.defaultWSTimeoutWithFallback:this.defaultWSTimeout)}catch(t){let 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}}(t)&&((e="u">typeof navigator?navigator:"u">typeof window&&window.navigator?window.navigator:void 0)?"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 av({client:this}),await this.wsFallback.connect();throw t}}_sayHi(){let e=tM();this.doAxiosRequest("get",this.baseURL+"/hi",null,{headers:{"x-client-request-id":e}}).catch(t=>{this.options.enableInsights&&an("http_hi_failed",{api_key:this.key,err:t,client_request_id:e})})}async queryUsers(e,t=[],s={},i={}){let a={presence:!1};await this.wsPromise,this._hasConnectionID()||(a.presence=!1);let n=await this.get(this.baseURL+"/users",{payload:{filter_conditions:e,sort:tS(t),...a,...s}},i);return this.state.updateUsers(n.users),n}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}
1/usergroups/${encodeURIComponent(e)}`,t)}async searchUserGroups(e,t={}){return await this.get(this.baseURL+"/usergroups/search",e,t)}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:tS(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={},i={}){let a={state:!0,watch:!0,presence:!1};await this.wsPromise,this._hasConnectionID()||(a.watch=!1);let{predefined_filter:n,filter_values:r,sort_values:o,...l}=s,h=tS(t),d=n?{predefined_filter:n,filter_values:r,sort_values:o,sort:h,...a,...l}:{filter_conditions:e,sort:h,...a,...l};return await this.post(this.baseURL+"/channels",d,i)}async 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,{signal:i.signal}),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:tS(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,...tV({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={},i={}){if(s.offset&&s.next)throw Error("Cannot specify offset with next");let a={filter_conditions:e,...s,sort:s.sort?tS(s.sort):void 0};if("string"==typeof t)a.query=t;else if("object"==typeof t)a.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:a},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 as(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 aK(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=tE({client:this,message:tA(e)}
1);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}/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=tS(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 iJ({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 iJ({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":tM()});let{params:i,headers:a,...n}=this.options.axiosRequestConfig||{},r=e.config?.signal??n.signal??s;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||{}},...e.config,...n,...r?{signal:r}:{}}}_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&&ag(e,t,this.secret)}verifyAndParseWebhook(e,t){if(!this.secret)throw new af("cannot verify webhook signature without an API secret on the client");var s=e,i=t,a=this.secret,n=ay(s);if(!ag(n,i,a))throw new af(ap);return ab(n)}parseSqs(e){return ab(a_(e))}parseSns(e){return ab(a_(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}
1/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}/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,t={}){return this.get(`${this.baseURL}/roles/search`,e,t)}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 td(this,null,e):new td(this,e,t)}channelBatchUpdater(){return new tc(this)}segment(e,t,s){return"string"==typeof t?new aC(this,e,t,s):new aC(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:tS(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:tS(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:tS(s),...i})}async queryMessageHistory(e={},t=[],s={}){return await this.post(this.baseURL+"/messages/history",{filter:e,sort:tS(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?tS(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&&tS(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)}},aY="Allow",aX=["*"],aZ=["*"],a0=class{constructor(e,t,s=aX,i=aZ,a=!1,n=aY){this.name=e,this.action=n,this.owner=a,this.priority=t,this.resources=s,this.roles=i}};new a0("Allow all",999,aX,aZ,!1,aY),new a0("Deny all",1,aX,aZ,!1,"Deny");var a1=e=>new Date(e.end_at).getTime()<Date.now();function a2(e){return!!e&&"deleted"!==e.type&&!!e.shared_location?.end_at&&!a1(e.shared_location)}var a3=class e extends t7{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 t4({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=>!a1(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,sw(e.symbol,async()=>{let e=[];await this.assureStateInit();let t=[];for(let[a,n]of this.messages){if(a1(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)&&!a2(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&&a2(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})}};a3.symbol=Symbol(a3.name),e.s(["ChannelSearchSource",0,s5,"ErrorFromResponse",0,iB,"FixedSizeQueueCache",0,aG,"LinkPreviewsManager",0,iO,"MessageComposer",0,i3,"MessageSearchSource",0,s4,"SearchController",0,s2,"StateStore",0,t4,"StreamChat",0,aJ,"UserSearchSource",0,s3,"VotingVisibility",0,iQ,"createSendWithPendingUploadsAttachmentsMiddleware",0,e=>({allowsPendingUploads:!0,id:"stream-io/message-composer-middleware/attachments",handlers:{compose:({state:t,next:s,forward:i})=>{let{attachmentManager:a}=e;return a?s((({composer:e,state:t})=>{let s=!!e.pollId,i=e.attachmentManager.attachments.filter(e=>sr(e)||!s&&sn(e)),a=(t.localMessage.attachments??[]).concat(i.map(e=>sn(e)?e:sF(e))),n=(t.message.attachments??[]).concat(i.filter(sr).map(sF));return a.length||n.length?{...t,localMessage:a.length?{...t.localMessage,attachments:a}:t.localMessage,message:n.length?{...t.message,attachments:n}:t.message}:t})({composer:e,state:t})):i()}}}),"formatMessage",0,tk,"isAudioAttachment",0,sd,"isFileAttachment",0,so,"isGiphyAttachment",0,e=>"giphy"===e.type,"isImageAttachment",0,sl,"isLocalAttachment",0,ss,"isLocalAudioAttachment",0,e=>sd(e)&&ss(e),"isLocalFileAttachment",0,e=>so(e)&&ss(e),"isLocalImageAttachment",0,sh,"isLocalUploadAttachment",0,si,"isLocalVideoAttachment",0,e=>su(e)&&ss(e),"isLocalVoiceRecordingAttachment",0,e=>sc(e)&&ss(e),"isPendingUpload",0,sn,"isScrapedContent",0,st,"isSharedLocationResponse",0,e=>!!e.latitude&&!!e.longitude&&!!e.channel_cid,"isVideoAttachment",0,su,"isVoiceRecordingAttachment",0,sc,"isVoteAnswer",0,ax,"localMessageToNewMessagePayload",0,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)}},"withoutConcurrency",0,sb],763609)}]);

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.