@budibase/pro 3.21.2 → 3.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,31 +1,31 @@
1
- "use strict";var xI=Object.create;var Dr=Object.defineProperty;var CI=Object.getOwnPropertyDescriptor;var OI=Object.getOwnPropertyNames;var LI=Object.getPrototypeOf,PI=Object.prototype.hasOwnProperty;var a=(e,t)=>Dr(e,"name",{value:t,configurable:!0});var p=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),x=(e,t)=>{for(var r in t)Dr(e,r,{get:t[r],enumerable:!0})},Yu=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of OI(t))!PI.call(e,o)&&o!==r&&Dr(e,o,{get:()=>t[o],enumerable:!(n=CI(t,o))||n.enumerable});return e};var F=(e,t,r)=>(r=e!=null?xI(LI(e)):{},Yu(t||!e||!e.__esModule?Dr(r,"default",{value:e,enumerable:!0}):r,e)),UI=e=>Yu(Dr({},"__esModule",{value:!0}),e);var fn=p((wG,qc)=>{"use strict";function OS(e,t){for(var r=-1,n=t.length,o=e.length;++r<n;)e[o+r]=t[r];return e}a(OS,"arrayPush");qc.exports=OS});var Qo=p((EG,Dc)=>{"use strict";var LS=typeof global=="object"&&global&&global.Object===Object&&global;Dc.exports=LS});var _e=p((vG,kc)=>{"use strict";var PS=Qo(),US=typeof self=="object"&&self&&self.Object===Object&&self,qS=PS||US||Function("return this")();kc.exports=qS});var Qt=p((RG,Mc)=>{"use strict";var DS=_e(),kS=DS.Symbol;Mc.exports=kS});var Fc=p((_G,Gc)=>{"use strict";var Nc=Qt(),Bc=Object.prototype,MS=Bc.hasOwnProperty,NS=Bc.toString,ca=Nc?Nc.toStringTag:void 0;function BS(e){var t=MS.call(e,ca),r=e[ca];try{e[ca]=void 0;var n=!0}catch{}var o=NS.call(e);return n&&(t?e[ca]=r:delete e[ca]),o}a(BS,"getRawTag");Gc.exports=BS});var $c=p((CG,Wc)=>{"use strict";var GS=Object.prototype,FS=GS.toString;function WS(e){return FS.call(e)}a(WS,"objectToString");Wc.exports=WS});var Pt=p((LG,Kc)=>{"use strict";var jc=Qt(),$S=Fc(),jS=$c(),QS="[object Null]",KS="[object Undefined]",Qc=jc?jc.toStringTag:void 0;function VS(e){return e==null?e===void 0?KS:QS:Qc&&Qc in Object(e)?$S(e):jS(e)}a(VS,"baseGetTag");Kc.exports=VS});var ke=p((UG,Vc)=>{"use strict";function HS(e){return e!=null&&typeof e=="object"}a(HS,"isObjectLike");Vc.exports=HS});var Yc=p((DG,Hc)=>{"use strict";var YS=Pt(),zS=ke(),JS="[object Arguments]";function XS(e){return zS(e)&&YS(e)==JS}a(XS,"baseIsArguments");Hc.exports=XS});var pa=p((MG,Xc)=>{"use strict";var zc=Yc(),ZS=ke(),Jc=Object.prototype,ew=Jc.hasOwnProperty,tw=Jc.propertyIsEnumerable,rw=zc(function(){return arguments}())?zc:function(e){return ZS(e)&&ew.call(e,"callee")&&!tw.call(e,"callee")};Xc.exports=rw});var Ee=p((NG,Zc)=>{"use strict";var aw=Array.isArray;Zc.exports=aw});var ap=p((BG,rp)=>{"use strict";var ep=Qt(),nw=pa(),ow=Ee(),tp=ep?ep.isConcatSpreadable:void 0;function sw(e){return ow(e)||nw(e)||!!(tp&&e&&e[tp])}a(sw,"isFlattenable");rp.exports=sw});var Ko=p((FG,op)=>{"use strict";var iw=fn(),uw=ap();function np(e,t,r,n,o){var s=-1,i=e.length;for(r||(r=uw),o||(o=[]);++s<i;){var u=e[s];t>0&&r(u)?t>1?np(u,t-1,r,n,o):iw(o,u):n||(o[o.length]=u)}return o}a(np,"baseFlatten");op.exports=np});var la=p(($G,sp)=>{"use strict";function cw(e){return e}a(cw,"identity");sp.exports=cw});var mn=p((QG,ip)=>{"use strict";function pw(e,t,r){switch(r.length){case 0:return e.call(t);case 1:return e.call(t,r[0]);case 2:return e.call(t,r[0],r[1]);case 3:return e.call(t,r[0],r[1],r[2])}return e.apply(t,r)}a(pw,"apply");ip.exports=pw});var Vo=p((VG,cp)=>{"use strict";var lw=mn(),up=Math.max;function dw(e,t,r){return t=up(t===void 0?e.length-1:t,0),function(){for(var n=arguments,o=-1,s=up(n.length-t,0),i=Array(s);++o<s;)i[o]=n[t+o];o=-1;for(var u=Array(t+1);++o<t;)u[o]=n[o];return u[t]=r(i),lw(e,this,u)}}a(dw,"overRest");cp.exports=dw});var lp=p((YG,pp)=>{"use strict";function fw(e){return function(){return e}}a(fw,"constant");pp.exports=fw});var je=p((JG,dp)=>{"use strict";function mw(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}a(mw,"isObject");dp.exports=mw});var da=p((ZG,fp)=>{"use strict";var gw=Pt(),hw=je(),yw="[object AsyncFunction]",Aw="[object Function]",bw="[object GeneratorFunction]",Iw="[object Proxy]";function Sw(e){if(!hw(e))return!1;var t=gw(e);return t==Aw||t==bw||t==yw||t==Iw}a(Sw,"isFunction");fp.exports=Sw});var gp=p((tF,mp)=>{"use strict";var ww=_e(),Tw=ww["__core-js_shared__"];mp.exports=Tw});var Ap=p((rF,yp)=>{"use strict";var Ho=gp(),hp=function(){var e=/[^.]+$/.exec(Ho&&Ho.keys&&Ho.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function Ew(e){return!!hp&&hp in e}a(Ew,"isMasked");yp.exports=Ew});var Yo=p((nF,bp)=>{"use strict";var vw=Function.prototype,Rw=vw.toString;function _w(e){if(e!=null){try{return Rw.call(e)}catch{}try{return e+""}catch{}}return""}a(_w,"toSource");bp.exports=_w});var Sp=p((sF,Ip)=>{"use strict";var xw=da(),Cw=Ap(),Ow=je(),Lw=Yo(),Pw=/[\\^$.*+?()[\]{}|]/g,Uw=/^\[object .+?Constructor\]$/,qw=Function.prototype,Dw=Object.prototype,kw=qw.toString,Mw=Dw.hasOwnProperty,Nw=RegExp("^"+kw.call(Mw).replace(Pw,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function Bw(e){if(!Ow(e)||Cw(e))return!1;var t=xw(e)?Nw:Uw;return t.test(Lw(e))}a(Bw,"baseIsNative");Ip.exports=Bw});var Tp=p((uF,wp)=>{"use strict";function Gw(e,t){return e?.[t]}a(Gw,"getValue");wp.exports=Gw});var Ut=p((pF,Ep)=>{"use strict";var Fw=Sp(),Ww=Tp();function $w(e,t){var r=Ww(e,t);return Fw(r)?r:void 0}a($w,"getNative");Ep.exports=$w});var zo=p((dF,vp)=>{"use strict";var jw=Ut(),Qw=function(){try{var e=jw(Object,"defineProperty");return e({},"",{}),e}catch{}}();vp.exports=Qw});var xp=p((fF,_p)=>{"use strict";var Kw=lp(),Rp=zo(),Vw=la(),Hw=Rp?function(e,t){return Rp(e,"toString",{configurable:!0,enumerable:!1,value:Kw(t),writable:!0})}:Vw;_p.exports=Hw});var Jo=p((mF,Cp)=>{"use strict";var Yw=800,zw=16,Jw=Date.now;function Xw(e){var t=0,r=0;return function(){var n=Jw(),o=zw-(n-r);if(r=n,o>0){if(++t>=Yw)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}a(Xw,"shortOut");Cp.exports=Xw});var gn=p((hF,Op)=>{"use strict";var Zw=xp(),eT=Jo(),tT=eT(Zw);Op.exports=tT});var Xo=p((yF,Lp)=>{"use strict";var rT=la(),aT=Vo(),nT=gn();function oT(e,t){return nT(aT(e,t,rT),e+"")}a(oT,"baseRest");Lp.exports=oT});var fa=p((bF,Pp)=>{"use strict";var sT=Ut(),iT=sT(Object,"create");Pp.exports=iT});var Dp=p((IF,qp)=>{"use strict";var Up=fa();function uT(){this.__data__=Up?Up(null):{},this.size=0}a(uT,"hashClear");qp.exports=uT});var Mp=p((wF,kp)=>{"use strict";function cT(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}a(cT,"hashDelete");kp.exports=cT});var Bp=p((EF,Np)=>{"use strict";var pT=fa(),lT="__lodash_hash_undefined__",dT=Object.prototype,fT=dT.hasOwnProperty;function mT(e){var t=this.__data__;if(pT){var r=t[e];return r===lT?void 0:r}return fT.call(t,e)?t[e]:void 0}a(mT,"hashGet");Np.exports=mT});var Fp=p((RF,Gp)=>{"use strict";var gT=fa(),hT=Object.prototype,yT=hT.hasOwnProperty;function AT(e){var t=this.__data__;return gT?t[e]!==void 0:yT.call(t,e)}a(AT,"hashHas");Gp.exports=AT});var $p=p((xF,Wp)=>{"use strict";var bT=fa(),IT="__lodash_hash_undefined__";function ST(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=bT&&t===void 0?IT:t,this}a(ST,"hashSet");Wp.exports=ST});var Qp=p((OF,jp)=>{"use strict";var wT=Dp(),TT=Mp(),ET=Bp(),vT=Fp(),RT=$p();function pr(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}a(pr,"Hash");pr.prototype.clear=wT;pr.prototype.delete=TT;pr.prototype.get=ET;pr.prototype.has=vT;pr.prototype.set=RT;jp.exports=pr});var Vp=p((PF,Kp)=>{"use strict";function _T(){this.__data__=[],this.size=0}a(_T,"listCacheClear");Kp.exports=_T});var lr=p((qF,Hp)=>{"use strict";function xT(e,t){return e===t||e!==e&&t!==t}a(xT,"eq");Hp.exports=xT});var ma=p((kF,Yp)=>{"use strict";var CT=lr();function OT(e,t){for(var r=e.length;r--;)if(CT(e[r][0],t))return r;return-1}a(OT,"assocIndexOf");Yp.exports=OT});var Jp=p((NF,zp)=>{"use strict";var LT=ma(),PT=Array.prototype,UT=PT.splice;function qT(e){var t=this.__data__,r=LT(t,e);if(r<0)return!1;var n=t.length-1;return r==n?t.pop():UT.call(t,r,1),--this.size,!0}a(qT,"listCacheDelete");zp.exports=qT});var Zp=p((GF,Xp)=>{"use strict";var DT=ma();function kT(e){var t=this.__data__,r=DT(t,e);return r<0?void 0:t[r][1]}a(kT,"listCacheGet");Xp.exports=kT});var tl=p((WF,el)=>{"use strict";var MT=ma();function NT(e){return MT(this.__data__,e)>-1}a(NT,"listCacheHas");el.exports=NT});var al=p((jF,rl)=>{"use strict";var BT=ma();function GT(e,t){var r=this.__data__,n=BT(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this}a(GT,"listCacheSet");rl.exports=GT});var ga=p((KF,nl)=>{"use strict";var FT=Vp(),WT=Jp(),$T=Zp(),jT=tl(),QT=al();function dr(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}a(dr,"ListCache");dr.prototype.clear=FT;dr.prototype.delete=WT;dr.prototype.get=$T;dr.prototype.has=jT;dr.prototype.set=QT;nl.exports=dr});var hn=p((HF,ol)=>{"use strict";var KT=Ut(),VT=_e(),HT=KT(VT,"Map");ol.exports=HT});var ul=p((YF,il)=>{"use strict";var sl=Qp(),YT=ga(),zT=hn();function JT(){this.size=0,this.__data__={hash:new sl,map:new(zT||YT),string:new sl}}a(JT,"mapCacheClear");il.exports=JT});var pl=p((JF,cl)=>{"use strict";function XT(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}a(XT,"isKeyable");cl.exports=XT});var ha=p((ZF,ll)=>{"use strict";var ZT=pl();function eE(e,t){var r=e.__data__;return ZT(t)?r[typeof t=="string"?"string":"hash"]:r.map}a(eE,"getMapData");ll.exports=eE});var fl=p((t1,dl)=>{"use strict";var tE=ha();function rE(e){var t=tE(this,e).delete(e);return this.size-=t?1:0,t}a(rE,"mapCacheDelete");dl.exports=rE});var gl=p((a1,ml)=>{"use strict";var aE=ha();function nE(e){return aE(this,e).get(e)}a(nE,"mapCacheGet");ml.exports=nE});var yl=p((o1,hl)=>{"use strict";var oE=ha();function sE(e){return oE(this,e).has(e)}a(sE,"mapCacheHas");hl.exports=sE});var bl=p((i1,Al)=>{"use strict";var iE=ha();function uE(e,t){var r=iE(this,e),n=r.size;return r.set(e,t),this.size+=r.size==n?0:1,this}a(uE,"mapCacheSet");Al.exports=uE});var yn=p((c1,Il)=>{"use strict";var cE=ul(),pE=fl(),lE=gl(),dE=yl(),fE=bl();function fr(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}a(fr,"MapCache");fr.prototype.clear=cE;fr.prototype.delete=pE;fr.prototype.get=lE;fr.prototype.has=dE;fr.prototype.set=fE;Il.exports=fr});var wl=p((l1,Sl)=>{"use strict";var mE="__lodash_hash_undefined__";function gE(e){return this.__data__.set(e,mE),this}a(gE,"setCacheAdd");Sl.exports=gE});var El=p((f1,Tl)=>{"use strict";function hE(e){return this.__data__.has(e)}a(hE,"setCacheHas");Tl.exports=hE});var Zo=p((g1,vl)=>{"use strict";var yE=yn(),AE=wl(),bE=El();function An(e){var t=-1,r=e==null?0:e.length;for(this.__data__=new yE;++t<r;)this.add(e[t])}a(An,"SetCache");An.prototype.add=An.prototype.push=AE;An.prototype.has=bE;vl.exports=An});var _l=p((y1,Rl)=>{"use strict";function IE(e,t,r,n){for(var o=e.length,s=r+(n?1:-1);n?s--:++s<o;)if(t(e[s],s,e))return s;return-1}a(IE,"baseFindIndex");Rl.exports=IE});var Cl=p((b1,xl)=>{"use strict";function SE(e){return e!==e}a(SE,"baseIsNaN");xl.exports=SE});var Ll=p((S1,Ol)=>{"use strict";function wE(e,t,r){for(var n=r-1,o=e.length;++n<o;)if(e[n]===t)return n;return-1}a(wE,"strictIndexOf");Ol.exports=wE});var Ul=p((T1,Pl)=>{"use strict";var TE=_l(),EE=Cl(),vE=Ll();function RE(e,t,r){return t===t?vE(e,t,r):TE(e,EE,r)}a(RE,"baseIndexOf");Pl.exports=RE});var es=p((v1,ql)=>{"use strict";var _E=Ul();function xE(e,t){var r=e==null?0:e.length;return!!r&&_E(e,t,0)>-1}a(xE,"arrayIncludes");ql.exports=xE});var kl=p((_1,Dl)=>{"use strict";function CE(e,t,r){for(var n=-1,o=e==null?0:e.length;++n<o;)if(r(t,e[n]))return!0;return!1}a(CE,"arrayIncludesWith");Dl.exports=CE});var ts=p((C1,Ml)=>{"use strict";function OE(e,t){return e.has(t)}a(OE,"cacheHas");Ml.exports=OE});var rs=p((L1,Nl)=>{"use strict";var LE=Ut(),PE=_e(),UE=LE(PE,"Set");Nl.exports=UE});var as=p((P1,Bl)=>{"use strict";function qE(){}a(qE,"noop");Bl.exports=qE});var bn=p((q1,Gl)=>{"use strict";function DE(e){var t=-1,r=Array(e.size);return e.forEach(function(n){r[++t]=n}),r}a(DE,"setToArray");Gl.exports=DE});var Wl=p((k1,Fl)=>{"use strict";var ns=rs(),kE=as(),ME=bn(),NE=1/0,BE=ns&&1/ME(new ns([,-0]))[1]==NE?function(e){return new ns(e)}:kE;Fl.exports=BE});var jl=p((M1,$l)=>{"use strict";var GE=Zo(),FE=es(),WE=kl(),$E=ts(),jE=Wl(),QE=bn(),KE=200;function VE(e,t,r){var n=-1,o=FE,s=e.length,i=!0,u=[],c=u;if(r)i=!1,o=WE;else if(s>=KE){var f=t?null:jE(e);if(f)return QE(f);i=!1,o=$E,c=new GE}else c=t?[]:u;e:for(;++n<s;){var g=e[n],h=t?t(g):g;if(g=r||g!==0?g:0,i&&h===h){for(var y=c.length;y--;)if(c[y]===h)continue e;t&&c.push(h),u.push(g)}else o(c,h,r)||(c!==u&&c.push(h),u.push(g))}return u}a(VE,"baseUniq");$l.exports=VE});var In=p((B1,Ql)=>{"use strict";var HE=9007199254740991;function YE(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=HE}a(YE,"isLength");Ql.exports=YE});var mr=p((F1,Kl)=>{"use strict";var zE=da(),JE=In();function XE(e){return e!=null&&JE(e.length)&&!zE(e)}a(XE,"isArrayLike");Kl.exports=XE});var os=p(($1,Vl)=>{"use strict";var ZE=mr(),ev=ke();function tv(e){return ev(e)&&ZE(e)}a(tv,"isArrayLikeObject");Vl.exports=tv});var Yl=p((Q1,Hl)=>{"use strict";var rv=Ko(),av=Xo(),nv=jl(),ov=os(),sv=av(function(e){return nv(rv(e,1,ov,!0))});Hl.exports=sv});var Jl=p((K1,zl)=>{"use strict";var iv=ga();function uv(){this.__data__=new iv,this.size=0}a(uv,"stackClear");zl.exports=uv});var Zl=p((H1,Xl)=>{"use strict";function cv(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r}a(cv,"stackDelete");Xl.exports=cv});var td=p((z1,ed)=>{"use strict";function pv(e){return this.__data__.get(e)}a(pv,"stackGet");ed.exports=pv});var ad=p((X1,rd)=>{"use strict";function lv(e){return this.__data__.has(e)}a(lv,"stackHas");rd.exports=lv});var od=p((eW,nd)=>{"use strict";var dv=ga(),fv=hn(),mv=yn(),gv=200;function hv(e,t){var r=this.__data__;if(r instanceof dv){var n=r.__data__;if(!fv||n.length<gv-1)return n.push([e,t]),this.size=++r.size,this;r=this.__data__=new mv(n)}return r.set(e,t),this.size=r.size,this}a(hv,"stackSet");nd.exports=hv});var ya=p((rW,sd)=>{"use strict";var yv=ga(),Av=Jl(),bv=Zl(),Iv=td(),Sv=ad(),wv=od();function gr(e){var t=this.__data__=new yv(e);this.size=t.size}a(gr,"Stack");gr.prototype.clear=Av;gr.prototype.delete=bv;gr.prototype.get=Iv;gr.prototype.has=Sv;gr.prototype.set=wv;sd.exports=gr});var Aa=p((nW,ud)=>{"use strict";var id=zo();function Tv(e,t,r){t=="__proto__"&&id?id(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}a(Tv,"baseAssignValue");ud.exports=Tv});var ss=p((sW,cd)=>{"use strict";var Ev=Aa(),vv=lr();function Rv(e,t,r){(r!==void 0&&!vv(e[t],r)||r===void 0&&!(t in e))&&Ev(e,t,r)}a(Rv,"assignMergeValue");cd.exports=Rv});var ld=p((uW,pd)=>{"use strict";function _v(e){return function(t,r,n){for(var o=-1,s=Object(t),i=n(t),u=i.length;u--;){var c=i[e?u:++o];if(r(s[c],c,s)===!1)break}return t}}a(_v,"createBaseFor");pd.exports=_v});var is=p((pW,dd)=>{"use strict";var xv=ld(),Cv=xv();dd.exports=Cv});var us=p((ba,hr)=>{"use strict";var Ov=_e(),hd=typeof ba=="object"&&ba&&!ba.nodeType&&ba,fd=hd&&typeof hr=="object"&&hr&&!hr.nodeType&&hr,Lv=fd&&fd.exports===hd,md=Lv?Ov.Buffer:void 0,gd=md?md.allocUnsafe:void 0;function Pv(e,t){if(t)return e.slice();var r=e.length,n=gd?gd(r):new e.constructor(r);return e.copy(n),n}a(Pv,"cloneBuffer");hr.exports=Pv});var cs=p((dW,yd)=>{"use strict";var Uv=_e(),qv=Uv.Uint8Array;yd.exports=qv});var Sn=p((fW,bd)=>{"use strict";var Ad=cs();function Dv(e){var t=new e.constructor(e.byteLength);return new Ad(t).set(new Ad(e)),t}a(Dv,"cloneArrayBuffer");bd.exports=Dv});var ps=p((gW,Id)=>{"use strict";var kv=Sn();function Mv(e,t){var r=t?kv(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.length)}a(Mv,"cloneTypedArray");Id.exports=Mv});var yr=p((yW,Sd)=>{"use strict";function Nv(e,t){var r=-1,n=e.length;for(t||(t=Array(n));++r<n;)t[r]=e[r];return t}a(Nv,"copyArray");Sd.exports=Nv});var Ia=p((bW,Td)=>{"use strict";var Bv=je(),wd=Object.create,Gv=function(){function e(){}return a(e,"object"),function(t){if(!Bv(t))return{};if(wd)return wd(t);e.prototype=t;var r=new e;return e.prototype=void 0,r}}();Td.exports=Gv});var ls=p((SW,Ed)=>{"use strict";function Fv(e,t){return function(r){return e(t(r))}}a(Fv,"overArg");Ed.exports=Fv});var wn=p((TW,vd)=>{"use strict";var Wv=ls(),$v=Wv(Object.getPrototypeOf,Object);vd.exports=$v});var Tn=p((EW,Rd)=>{"use strict";var jv=Object.prototype;function Qv(e){var t=e&&e.constructor,r=typeof t=="function"&&t.prototype||jv;return e===r}a(Qv,"isPrototype");Rd.exports=Qv});var ds=p((RW,_d)=>{"use strict";var Kv=Ia(),Vv=wn(),Hv=Tn();function Yv(e){return typeof e.constructor=="function"&&!Hv(e)?Kv(Vv(e)):{}}a(Yv,"initCloneObject");_d.exports=Yv});var Cd=p((xW,xd)=>{"use strict";function zv(){return!1}a(zv,"stubFalse");xd.exports=zv});var wa=p((Sa,Ar)=>{"use strict";var Jv=_e(),Xv=Cd(),Pd=typeof Sa=="object"&&Sa&&!Sa.nodeType&&Sa,Od=Pd&&typeof Ar=="object"&&Ar&&!Ar.nodeType&&Ar,Zv=Od&&Od.exports===Pd,Ld=Zv?Jv.Buffer:void 0,eR=Ld?Ld.isBuffer:void 0,tR=eR||Xv;Ar.exports=tR});var fs=p((OW,qd)=>{"use strict";var rR=Pt(),aR=wn(),nR=ke(),oR="[object Object]",sR=Function.prototype,iR=Object.prototype,Ud=sR.toString,uR=iR.hasOwnProperty,cR=Ud.call(Object);function pR(e){if(!nR(e)||rR(e)!=oR)return!1;var t=aR(e);if(t===null)return!0;var r=uR.call(t,"constructor")&&t.constructor;return typeof r=="function"&&r instanceof r&&Ud.call(r)==cR}a(pR,"isPlainObject");qd.exports=pR});var kd=p((PW,Dd)=>{"use strict";var lR=Pt(),dR=In(),fR=ke(),mR="[object Arguments]",gR="[object Array]",hR="[object Boolean]",yR="[object Date]",AR="[object Error]",bR="[object Function]",IR="[object Map]",SR="[object Number]",wR="[object Object]",TR="[object RegExp]",ER="[object Set]",vR="[object String]",RR="[object WeakMap]",_R="[object ArrayBuffer]",xR="[object DataView]",CR="[object Float32Array]",OR="[object Float64Array]",LR="[object Int8Array]",PR="[object Int16Array]",UR="[object Int32Array]",qR="[object Uint8Array]",DR="[object Uint8ClampedArray]",kR="[object Uint16Array]",MR="[object Uint32Array]",H={};H[CR]=H[OR]=H[LR]=H[PR]=H[UR]=H[qR]=H[DR]=H[kR]=H[MR]=!0;H[mR]=H[gR]=H[_R]=H[hR]=H[xR]=H[yR]=H[AR]=H[bR]=H[IR]=H[SR]=H[wR]=H[TR]=H[ER]=H[vR]=H[RR]=!1;function NR(e){return fR(e)&&dR(e.length)&&!!H[lR(e)]}a(NR,"baseIsTypedArray");Dd.exports=NR});var En=p((qW,Md)=>{"use strict";function BR(e){return function(t){return e(t)}}a(BR,"baseUnary");Md.exports=BR});var vn=p((Ta,br)=>{"use strict";var GR=Qo(),Nd=typeof Ta=="object"&&Ta&&!Ta.nodeType&&Ta,Ea=Nd&&typeof br=="object"&&br&&!br.nodeType&&br,FR=Ea&&Ea.exports===Nd,ms=FR&&GR.process,WR=function(){try{var e=Ea&&Ea.require&&Ea.require("util").types;return e||ms&&ms.binding&&ms.binding("util")}catch{}}();br.exports=WR});var Rn=p((kW,Fd)=>{"use strict";var $R=kd(),jR=En(),Bd=vn(),Gd=Bd&&Bd.isTypedArray,QR=Gd?jR(Gd):$R;Fd.exports=QR});var gs=p((MW,Wd)=>{"use strict";function KR(e,t){if(!(t==="constructor"&&typeof e[t]=="function")&&t!="__proto__")return e[t]}a(KR,"safeGet");Wd.exports=KR});var hs=p((BW,$d)=>{"use strict";var VR=Aa(),HR=lr(),YR=Object.prototype,zR=YR.hasOwnProperty;function JR(e,t,r){var n=e[t];(!(zR.call(e,t)&&HR(n,r))||r===void 0&&!(t in e))&&VR(e,t,r)}a(JR,"assignValue");$d.exports=JR});var Ir=p((FW,jd)=>{"use strict";var XR=hs(),ZR=Aa();function e_(e,t,r,n){var o=!r;r||(r={});for(var s=-1,i=t.length;++s<i;){var u=t[s],c=n?n(r[u],e[u],u,r,e):void 0;c===void 0&&(c=e[u]),o?ZR(r,u,c):XR(r,u,c)}return r}a(e_,"copyObject");jd.exports=e_});var Kd=p(($W,Qd)=>{"use strict";function t_(e,t){for(var r=-1,n=Array(e);++r<e;)n[r]=t(r);return n}a(t_,"baseTimes");Qd.exports=t_});var va=p((QW,Vd)=>{"use strict";var r_=9007199254740991,a_=/^(?:0|[1-9]\d*)$/;function n_(e,t){var r=typeof e;return t=t??r_,!!t&&(r=="number"||r!="symbol"&&a_.test(e))&&e>-1&&e%1==0&&e<t}a(n_,"isIndex");Vd.exports=n_});var ys=p((VW,Hd)=>{"use strict";var o_=Kd(),s_=pa(),i_=Ee(),u_=wa(),c_=va(),p_=Rn(),l_=Object.prototype,d_=l_.hasOwnProperty;function f_(e,t){var r=i_(e),n=!r&&s_(e),o=!r&&!n&&u_(e),s=!r&&!n&&!o&&p_(e),i=r||n||o||s,u=i?o_(e.length,String):[],c=u.length;for(var f in e)(t||d_.call(e,f))&&!(i&&(f=="length"||o&&(f=="offset"||f=="parent")||s&&(f=="buffer"||f=="byteLength"||f=="byteOffset")||c_(f,c)))&&u.push(f);return u}a(f_,"arrayLikeKeys");Hd.exports=f_});var zd=p((YW,Yd)=>{"use strict";function m_(e){var t=[];if(e!=null)for(var r in Object(e))t.push(r);return t}a(m_,"nativeKeysIn");Yd.exports=m_});var Xd=p((JW,Jd)=>{"use strict";var g_=je(),h_=Tn(),y_=zd(),A_=Object.prototype,b_=A_.hasOwnProperty;function I_(e){if(!g_(e))return y_(e);var t=h_(e),r=[];for(var n in e)n=="constructor"&&(t||!b_.call(e,n))||r.push(n);return r}a(I_,"baseKeysIn");Jd.exports=I_});var Sr=p((ZW,Zd)=>{"use strict";var S_=ys(),w_=Xd(),T_=mr();function E_(e){return T_(e)?S_(e,!0):w_(e)}a(E_,"keysIn");Zd.exports=E_});var tf=p((t$,ef)=>{"use strict";var v_=Ir(),R_=Sr();function __(e){return v_(e,R_(e))}a(__,"toPlainObject");ef.exports=__});var uf=p((a$,sf)=>{"use strict";var rf=ss(),x_=us(),C_=ps(),O_=yr(),L_=ds(),af=pa(),nf=Ee(),P_=os(),U_=wa(),q_=da(),D_=je(),k_=fs(),M_=Rn(),of=gs(),N_=tf();function B_(e,t,r,n,o,s,i){var u=of(e,r),c=of(t,r),f=i.get(c);if(f){rf(e,r,f);return}var g=s?s(u,c,r+"",e,t,i):void 0,h=g===void 0;if(h){var y=nf(c),E=!y&&U_(c),M=!y&&!E&&M_(c);g=c,y||E||M?nf(u)?g=u:P_(u)?g=O_(u):E?(h=!1,g=x_(c,!0)):M?(h=!1,g=C_(c,!0)):g=[]:k_(c)||af(c)?(g=u,af(u)?g=N_(u):(!D_(u)||q_(u))&&(g=L_(c))):h=!1}h&&(i.set(c,g),o(g,c,n,s,i),i.delete(c)),rf(e,r,g)}a(B_,"baseMergeDeep");sf.exports=B_});var lf=p((o$,pf)=>{"use strict";var G_=ya(),F_=ss(),W_=is(),$_=uf(),j_=je(),Q_=Sr(),K_=gs();function cf(e,t,r,n,o){e!==t&&W_(t,function(s,i){if(o||(o=new G_),j_(s))$_(e,t,i,r,cf,n,o);else{var u=n?n(K_(e,i),s,i+"",e,t,o):void 0;u===void 0&&(u=s),F_(e,i,u)}},Q_)}a(cf,"baseMerge");pf.exports=cf});var ff=p((i$,df)=>{"use strict";var V_=lr(),H_=mr(),Y_=va(),z_=je();function J_(e,t,r){if(!z_(r))return!1;var n=typeof t;return(n=="number"?H_(r)&&Y_(t,r.length):n=="string"&&t in r)?V_(r[t],e):!1}a(J_,"isIterateeCall");df.exports=J_});var gf=p((c$,mf)=>{"use strict";var X_=Xo(),Z_=ff();function ex(e){return X_(function(t,r){var n=-1,o=r.length,s=o>1?r[o-1]:void 0,i=o>2?r[2]:void 0;for(s=e.length>3&&typeof s=="function"?(o--,s):void 0,i&&Z_(r[0],r[1],i)&&(s=o<3?void 0:s,o=1),t=Object(t);++n<o;){var u=r[n];u&&e(t,u,n,s)}return t})}a(ex,"createAssigner");mf.exports=ex});var As=p((l$,hf)=>{"use strict";var tx=lf(),rx=gf(),ax=rx(function(e,t,r){tx(e,t,r)});hf.exports=ax});var bm=p(Ue=>{"use strict";Ue.aliasToReal={each:"forEach",eachRight:"forEachRight",entries:"toPairs",entriesIn:"toPairsIn",extend:"assignIn",extendAll:"assignInAll",extendAllWith:"assignInAllWith",extendWith:"assignInWith",first:"head",conforms:"conformsTo",matches:"isMatch",property:"get",__:"placeholder",F:"stubFalse",T:"stubTrue",all:"every",allPass:"overEvery",always:"constant",any:"some",anyPass:"overSome",apply:"spread",assoc:"set",assocPath:"set",complement:"negate",compose:"flowRight",contains:"includes",dissoc:"unset",dissocPath:"unset",dropLast:"dropRight",dropLastWhile:"dropRightWhile",equals:"isEqual",identical:"eq",indexBy:"keyBy",init:"initial",invertObj:"invert",juxt:"over",omitAll:"omit",nAry:"ary",path:"get",pathEq:"matchesProperty",pathOr:"getOr",paths:"at",pickAll:"pick",pipe:"flow",pluck:"map",prop:"get",propEq:"matchesProperty",propOr:"getOr",props:"at",symmetricDifference:"xor",symmetricDifferenceBy:"xorBy",symmetricDifferenceWith:"xorWith",takeLast:"takeRight",takeLastWhile:"takeRightWhile",unapply:"rest",unnest:"flatten",useWith:"overArgs",where:"conformsTo",whereEq:"isMatch",zipObj:"zipObject"};Ue.aryMethod={1:["assignAll","assignInAll","attempt","castArray","ceil","create","curry","curryRight","defaultsAll","defaultsDeepAll","floor","flow","flowRight","fromPairs","invert","iteratee","memoize","method","mergeAll","methodOf","mixin","nthArg","over","overEvery","overSome","rest","reverse","round","runInContext","spread","template","trim","trimEnd","trimStart","uniqueId","words","zipAll"],2:["add","after","ary","assign","assignAllWith","assignIn","assignInAllWith","at","before","bind","bindAll","bindKey","chunk","cloneDeepWith","cloneWith","concat","conformsTo","countBy","curryN","curryRightN","debounce","defaults","defaultsDeep","defaultTo","delay","difference","divide","drop","dropRight","dropRightWhile","dropWhile","endsWith","eq","every","filter","find","findIndex","findKey","findLast","findLastIndex","findLastKey","flatMap","flatMapDeep","flattenDepth","forEach","forEachRight","forIn","forInRight","forOwn","forOwnRight","get","groupBy","gt","gte","has","hasIn","includes","indexOf","intersection","invertBy","invoke","invokeMap","isEqual","isMatch","join","keyBy","lastIndexOf","lt","lte","map","mapKeys","mapValues","matchesProperty","maxBy","meanBy","merge","mergeAllWith","minBy","multiply","nth","omit","omitBy","overArgs","pad","padEnd","padStart","parseInt","partial","partialRight","partition","pick","pickBy","propertyOf","pull","pullAll","pullAt","random","range","rangeRight","rearg","reject","remove","repeat","restFrom","result","sampleSize","some","sortBy","sortedIndex","sortedIndexOf","sortedLastIndex","sortedLastIndexOf","sortedUniqBy","split","spreadFrom","startsWith","subtract","sumBy","take","takeRight","takeRightWhile","takeWhile","tap","throttle","thru","times","trimChars","trimCharsEnd","trimCharsStart","truncate","union","uniqBy","uniqWith","unset","unzipWith","without","wrap","xor","zip","zipObject","zipObjectDeep"],3:["assignInWith","assignWith","clamp","differenceBy","differenceWith","findFrom","findIndexFrom","findLastFrom","findLastIndexFrom","getOr","includesFrom","indexOfFrom","inRange","intersectionBy","intersectionWith","invokeArgs","invokeArgsMap","isEqualWith","isMatchWith","flatMapDepth","lastIndexOfFrom","mergeWith","orderBy","padChars","padCharsEnd","padCharsStart","pullAllBy","pullAllWith","rangeStep","rangeStepRight","reduce","reduceRight","replace","set","slice","sortedIndexBy","sortedLastIndexBy","transform","unionBy","unionWith","update","xorBy","xorWith","zipWith"],4:["fill","setWith","updateWith"]};Ue.aryRearg={2:[1,0],3:[2,0,1],4:[3,2,0,1]};Ue.iterateeAry={dropRightWhile:1,dropWhile:1,every:1,filter:1,find:1,findFrom:1,findIndex:1,findIndexFrom:1,findKey:1,findLast:1,findLastFrom:1,findLastIndex:1,findLastIndexFrom:1,findLastKey:1,flatMap:1,flatMapDeep:1,flatMapDepth:1,forEach:1,forEachRight:1,forIn:1,forInRight:1,forOwn:1,forOwnRight:1,map:1,mapKeys:1,mapValues:1,partition:1,reduce:2,reduceRight:2,reject:1,remove:1,some:1,takeRightWhile:1,takeWhile:1,times:1,transform:2};Ue.iterateeRearg={mapKeys:[1],reduceRight:[1,0]};Ue.methodRearg={assignInAllWith:[1,0],assignInWith:[1,2,0],assignAllWith:[1,0],assignWith:[1,2,0],differenceBy:[1,2,0],differenceWith:[1,2,0],getOr:[2,1,0],intersectionBy:[1,2,0],intersectionWith:[1,2,0],isEqualWith:[1,2,0],isMatchWith:[2,1,0],mergeAllWith:[1,0],mergeWith:[1,2,0],padChars:[2,1,0],padCharsEnd:[2,1,0],padCharsStart:[2,1,0],pullAllBy:[2,1,0],pullAllWith:[2,1,0],rangeStep:[1,2,0],rangeStepRight:[1,2,0],setWith:[3,1,2,0],sortedIndexBy:[2,1,0],sortedLastIndexBy:[2,1,0],unionBy:[1,2,0],unionWith:[1,2,0],updateWith:[3,1,2,0],xorBy:[1,2,0],xorWith:[1,2,0],zipWith:[1,2,0]};Ue.methodSpread={assignAll:{start:0},assignAllWith:{start:0},assignInAll:{start:0},assignInAllWith:{start:0},defaultsAll:{start:0},defaultsDeepAll:{start:0},invokeArgs:{start:2},invokeArgsMap:{start:2},mergeAll:{start:0},mergeAllWith:{start:0},partial:{start:1},partialRight:{start:1},without:{start:1},zipAll:{start:0}};Ue.mutate={array:{fill:!0,pull:!0,pullAll:!0,pullAllBy:!0,pullAllWith:!0,pullAt:!0,remove:!0,reverse:!0},object:{assign:!0,assignAll:!0,assignAllWith:!0,assignIn:!0,assignInAll:!0,assignInAllWith:!0,assignInWith:!0,assignWith:!0,defaults:!0,defaultsAll:!0,defaultsDeep:!0,defaultsDeepAll:!0,merge:!0,mergeAll:!0,mergeAllWith:!0,mergeWith:!0},set:{set:!0,setWith:!0,unset:!0,update:!0,updateWith:!0}};Ue.realToAlias=function(){var e=Object.prototype.hasOwnProperty,t=Ue.aliasToReal,r={};for(var n in t){var o=t[n];e.call(r,o)?r[o].push(n):r[o]=[n]}return r}();Ue.remap={assignAll:"assign",assignAllWith:"assignWith",assignInAll:"assignIn",assignInAllWith:"assignInWith",curryN:"curry",curryRightN:"curryRight",defaultsAll:"defaults",defaultsDeepAll:"defaultsDeep",findFrom:"find",findIndexFrom:"findIndex",findLastFrom:"findLast",findLastIndexFrom:"findLastIndex",getOr:"get",includesFrom:"includes",indexOfFrom:"indexOf",invokeArgs:"invoke",invokeArgsMap:"invokeMap",lastIndexOfFrom:"lastIndexOf",mergeAll:"merge",mergeAllWith:"mergeWith",padChars:"pad",padCharsEnd:"padEnd",padCharsStart:"padStart",propertyOf:"get",rangeStep:"range",rangeStepRight:"rangeRight",restFrom:"rest",spreadFrom:"spread",trimChars:"trim",trimCharsEnd:"trimEnd",trimCharsStart:"trimStart",zipAll:"zip"};Ue.skipFixed={castArray:!0,flow:!0,flowRight:!0,iteratee:!0,mixin:!0,rearg:!0,runInContext:!0};Ue.skipRearg={add:!0,assign:!0,assignIn:!0,bind:!0,bindKey:!0,concat:!0,difference:!0,divide:!0,eq:!0,gt:!0,gte:!0,isEqual:!0,lt:!0,lte:!0,matchesProperty:!0,merge:!0,multiply:!0,overArgs:!0,partial:!0,partialRight:!0,propertyOf:!0,random:!0,range:!0,rangeRight:!0,subtract:!0,zip:!0,zipObject:!0,zipObjectDeep:!0}});var fi=p((AK,Im)=>{"use strict";Im.exports={}});var Em=p((bK,Tm)=>{"use strict";var me=bm(),NC=fi(),Sm=Array.prototype.push;function BC(e,t){return t==2?function(r,n){return e.apply(void 0,arguments)}:function(r){return e.apply(void 0,arguments)}}a(BC,"baseArity");function mi(e,t){return t==2?function(r,n){return e(r,n)}:function(r){return e(r)}}a(mi,"baseAry");function wm(e){for(var t=e?e.length:0,r=Array(t);t--;)r[t]=e[t];return r}a(wm,"cloneArray");function GC(e){return function(t){return e({},t)}}a(GC,"createCloner");function FC(e,t){return function(){for(var r=arguments.length,n=r-1,o=Array(r);r--;)o[r]=arguments[r];var s=o[t],i=o.slice(0,t);return s&&Sm.apply(i,s),t!=n&&Sm.apply(i,o.slice(t+1)),e.apply(this,i)}}a(FC,"flatSpread");function gi(e,t){return function(){var r=arguments.length;if(r){for(var n=Array(r);r--;)n[r]=arguments[r];var o=n[0]=t.apply(void 0,n);return e.apply(void 0,n),o}}}a(gi,"wrapImmutable");function hi(e,t,r,n){var o=typeof t=="function",s=t===Object(t);if(s&&(n=r,r=t,t=void 0),r==null)throw new TypeError;n||(n={});var i={cap:"cap"in n?n.cap:!0,curry:"curry"in n?n.curry:!0,fixed:"fixed"in n?n.fixed:!0,immutable:"immutable"in n?n.immutable:!0,rearg:"rearg"in n?n.rearg:!0},u=o?r:NC,c="curry"in n&&n.curry,f="fixed"in n&&n.fixed,g="rearg"in n&&n.rearg,h=o?r.runInContext():void 0,y=o?r:{ary:e.ary,assign:e.assign,clone:e.clone,curry:e.curry,forEach:e.forEach,isArray:e.isArray,isError:e.isError,isFunction:e.isFunction,isWeakMap:e.isWeakMap,iteratee:e.iteratee,keys:e.keys,rearg:e.rearg,toInteger:e.toInteger,toPath:e.toPath},E=y.ary,M=y.assign,k=y.clone,D=y.curry,C=y.forEach,W=y.isArray,ye=y.isError,ie=y.isFunction,Ye=y.isWeakMap,nt=y.keys,ot=y.rearg,Y=y.toInteger,G=y.toPath,Gt=nt(me.aryMethod),Ya={castArray:function(v){return function(){var b=arguments[0];return W(b)?v(wm(b)):v.apply(void 0,arguments)}},iteratee:function(v){return function(){var b=arguments[0],I=arguments[1],R=v(b,I),q=R.length;return i.cap&&typeof I=="number"?(I=I>2?I-2:1,q&&q<=I?R:mi(R,I)):R}},mixin:function(v){return function(b){var I=this;if(!ie(I))return v(I,Object(b));var R=[];return C(nt(b),function(q){ie(b[q])&&R.push([q,I.prototype[q]])}),v(I,Object(b)),C(R,function(q){var oe=q[1];ie(oe)?I.prototype[q[0]]=oe:delete I.prototype[q[0]]}),I}},nthArg:function(v){return function(b){var I=b<0?1:Y(b)+1;return D(v(b),I)}},rearg:function(v){return function(b,I){var R=I?I.length:0;return D(v(b,I),R)}},runInContext:function(v){return function(b){return hi(e,v(b),n)}}};function O(v,b){if(i.cap){var I=me.iterateeRearg[v];if(I)return Z(b,I);var R=!o&&me.iterateeAry[v];if(R)return $(b,R)}return b}a(O,"castCap");function w(v,b,I){return c||i.curry&&I>1?D(b,I):b}a(w,"castCurry");function A(v,b,I){if(i.fixed&&(f||!me.skipFixed[v])){var R=me.methodSpread[v],q=R&&R.start;return q===void 0?E(b,I):FC(b,q)}return b}a(A,"castFixed");function _(v,b,I){return i.rearg&&I>1&&(g||!me.skipRearg[v])?ot(b,me.methodRearg[v]||me.aryRearg[I]):b}a(_,"castRearg");function S(v,b){b=G(b);for(var I=-1,R=b.length,q=R-1,oe=k(Object(v)),ve=oe;ve!=null&&++I<R;){var Fe=b[I],st=ve[Fe];st!=null&&!(ie(st)||ye(st)||Ye(st))&&(ve[Fe]=k(I==q?st:Object(st))),ve=ve[Fe]}return oe}a(S,"cloneByPath");function U(v){return K.runInContext.convert(v)(void 0)}a(U,"convertLib");function P(v,b){var I=me.aliasToReal[v]||v,R=me.remap[I]||I,q=n;return function(oe){var ve=o?h:y,Fe=o?h[R]:b,st=M(M({},q),oe);return hi(ve,I,Fe,st)}}a(P,"createConverter");function $(v,b){return ne(v,function(I){return typeof I=="function"?mi(I,b):I})}a($,"iterateeAry");function Z(v,b){return ne(v,function(I){var R=b.length;return BC(ot(mi(I,R),b),R)})}a(Z,"iterateeRearg");function ne(v,b){return function(){var I=arguments.length;if(!I)return v();for(var R=Array(I);I--;)R[I]=arguments[I];var q=i.rearg?0:I-1;return R[q]=b(R[q]),v.apply(void 0,R)}}a(ne,"overArg");function pe(v,b,I){var R,q=me.aliasToReal[v]||v,oe=b,ve=Ya[q];return ve?oe=ve(b):i.immutable&&(me.mutate.array[q]?oe=gi(b,wm):me.mutate.object[q]?oe=gi(b,GC(b)):me.mutate.set[q]&&(oe=gi(b,S))),C(Gt,function(Fe){return C(me.aryMethod[Fe],function(st){if(q==st){var Hu=me.methodSpread[q],_I=Hu&&Hu.afterRearg;return R=_I?A(q,_(q,oe,Fe),Fe):_(q,A(q,oe,Fe),Fe),R=O(q,R),R=w(q,R,Fe),!1}}),!R}),R||(R=oe),R==b&&(R=c?D(R,1):function(){return b.apply(this,arguments)}),R.convert=P(q,b),R.placeholder=b.placeholder=I,R}if(a(pe,"wrap"),!s)return pe(t,r,u);var K=r,Ge=[];return C(Gt,function(v){C(me.aryMethod[v],function(b){var I=K[me.remap[b]||b];I&&Ge.push([b,pe(b,I,K)])})}),C(nt(K),function(v){var b=K[v];if(typeof b=="function"){for(var I=Ge.length;I--;)if(Ge[I][0]==v)return;b.convert=P(v,b),Ge.push([v,b])}}),C(Ge,function(v){K[v[0]]=v[1]}),K.convert=U,K.placeholder=K,C(nt(K),function(v){C(me.realToAlias[v]||[],function(b){K[b]=K[v]})}),K}a(hi,"baseConvert");Tm.exports=hi});var yi=p((SK,vm)=>{"use strict";var WC=Ut(),$C=_e(),jC=WC($C,"WeakMap");vm.exports=jC});var Ai=p((wK,_m)=>{"use strict";var Rm=yi(),QC=Rm&&new Rm;_m.exports=QC});var bi=p((TK,Cm)=>{"use strict";var KC=la(),xm=Ai(),VC=xm?function(e,t){return xm.set(e,t),e}:KC;Cm.exports=VC});var Da=p((EK,Om)=>{"use strict";var HC=Ia(),YC=je();function zC(e){return function(){var t=arguments;switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3]);case 5:return new e(t[0],t[1],t[2],t[3],t[4]);case 6:return new e(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new e(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var r=HC(e.prototype),n=e.apply(r,t);return YC(n)?n:r}}a(zC,"createCtor");Om.exports=zC});var Pm=p((RK,Lm)=>{"use strict";var JC=Da(),XC=_e(),ZC=1;function eO(e,t,r){var n=t&ZC,o=JC(e);function s(){var i=this&&this!==XC&&this instanceof s?o:e;return i.apply(n?r:this,arguments)}return a(s,"wrapper"),s}a(eO,"createBind");Lm.exports=eO});var Ii=p((xK,Um)=>{"use strict";var tO=Math.max;function rO(e,t,r,n){for(var o=-1,s=e.length,i=r.length,u=-1,c=t.length,f=tO(s-i,0),g=Array(c+f),h=!n;++u<c;)g[u]=t[u];for(;++o<i;)(h||o<s)&&(g[r[o]]=e[o]);for(;f--;)g[u++]=e[o++];return g}a(rO,"composeArgs");Um.exports=rO});var Si=p((OK,qm)=>{"use strict";var aO=Math.max;function nO(e,t,r,n){for(var o=-1,s=e.length,i=-1,u=r.length,c=-1,f=t.length,g=aO(s-u,0),h=Array(g+f),y=!n;++o<g;)h[o]=e[o];for(var E=o;++c<f;)h[E+c]=t[c];for(;++i<u;)(y||o<s)&&(h[E+r[i]]=e[o++]);return h}a(nO,"composeArgsRight");qm.exports=nO});var km=p((PK,Dm)=>{"use strict";function oO(e,t){for(var r=e.length,n=0;r--;)e[r]===t&&++n;return n}a(oO,"countHolders");Dm.exports=oO});var zn=p((qK,Mm)=>{"use strict";function sO(){}a(sO,"baseLodash");Mm.exports=sO});var Xn=p((kK,Nm)=>{"use strict";var iO=Ia(),uO=zn(),cO=4294967295;function Jn(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=cO,this.__views__=[]}a(Jn,"LazyWrapper");Jn.prototype=iO(uO.prototype);Jn.prototype.constructor=Jn;Nm.exports=Jn});var wi=p((NK,Gm)=>{"use strict";var Bm=Ai(),pO=as(),lO=Bm?function(e){return Bm.get(e)}:pO;Gm.exports=lO});var Wm=p((BK,Fm)=>{"use strict";var dO={};Fm.exports=dO});var Qm=p((GK,jm)=>{"use strict";var $m=Wm(),fO=Object.prototype,mO=fO.hasOwnProperty;function gO(e){for(var t=e.name+"",r=$m[t],n=mO.call($m,t)?r.length:0;n--;){var o=r[n],s=o.func;if(s==null||s==e)return o.name}return t}a(gO,"getFuncName");jm.exports=gO});var Ti=p((WK,Km)=>{"use strict";var hO=Ia(),yO=zn();function Zn(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=void 0}a(Zn,"LodashWrapper");Zn.prototype=hO(yO.prototype);Zn.prototype.constructor=Zn;Km.exports=Zn});var Hm=p((jK,Vm)=>{"use strict";var AO=Xn(),bO=Ti(),IO=yr();function SO(e){if(e instanceof AO)return e.clone();var t=new bO(e.__wrapped__,e.__chain__);return t.__actions__=IO(e.__actions__),t.__index__=e.__index__,t.__values__=e.__values__,t}a(SO,"wrapperClone");Vm.exports=SO});var Jm=p((KK,zm)=>{"use strict";var wO=Xn(),Ym=Ti(),TO=zn(),EO=Ee(),vO=ke(),RO=Hm(),_O=Object.prototype,xO=_O.hasOwnProperty;function eo(e){if(vO(e)&&!EO(e)&&!(e instanceof wO)){if(e instanceof Ym)return e;if(xO.call(e,"__wrapped__"))return RO(e)}return new Ym(e)}a(eo,"lodash");eo.prototype=TO.prototype;eo.prototype.constructor=eo;zm.exports=eo});var Zm=p((HK,Xm)=>{"use strict";var CO=Xn(),OO=wi(),LO=Qm(),PO=Jm();function UO(e){var t=LO(e),r=PO[t];if(typeof r!="function"||!(t in CO.prototype))return!1;if(e===r)return!0;var n=OO(r);return!!n&&e===n[0]}a(UO,"isLaziable");Xm.exports=UO});var Ei=p((zK,eg)=>{"use strict";var qO=bi(),DO=Jo(),kO=DO(qO);eg.exports=kO});var rg=p((JK,tg)=>{"use strict";var MO=/\{\n\/\* \[wrapped with (.+)\] \*/,NO=/,? & /;function BO(e){var t=e.match(MO);return t?t[1].split(NO):[]}a(BO,"getWrapDetails");tg.exports=BO});var ng=p((ZK,ag)=>{"use strict";var GO=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/;function FO(e,t){var r=t.length;if(!r)return e;var n=r-1;return t[n]=(r>1?"& ":"")+t[n],t=t.join(r>2?", ":" "),e.replace(GO,`{
1
+ "use strict";var OI=Object.create;var Dr=Object.defineProperty;var LI=Object.getOwnPropertyDescriptor;var PI=Object.getOwnPropertyNames;var UI=Object.getPrototypeOf,qI=Object.prototype.hasOwnProperty;var a=(e,t)=>Dr(e,"name",{value:t,configurable:!0});var p=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),x=(e,t)=>{for(var r in t)Dr(e,r,{get:t[r],enumerable:!0})},zu=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of PI(t))!qI.call(e,o)&&o!==r&&Dr(e,o,{get:()=>t[o],enumerable:!(n=LI(t,o))||n.enumerable});return e};var F=(e,t,r)=>(r=e!=null?OI(UI(e)):{},zu(t||!e||!e.__esModule?Dr(r,"default",{value:e,enumerable:!0}):r,e)),DI=e=>zu(Dr({},"__esModule",{value:!0}),e);var mn=p((xG,kc)=>{"use strict";function US(e,t){for(var r=-1,n=t.length,o=e.length;++r<n;)e[o+r]=t[r];return e}a(US,"arrayPush");kc.exports=US});var Ko=p((OG,Mc)=>{"use strict";var qS=typeof global=="object"&&global&&global.Object===Object&&global;Mc.exports=qS});var _e=p((LG,Nc)=>{"use strict";var DS=Ko(),kS=typeof self=="object"&&self&&self.Object===Object&&self,MS=DS||kS||Function("return this")();Nc.exports=MS});var Qt=p((PG,Bc)=>{"use strict";var NS=_e(),BS=NS.Symbol;Bc.exports=BS});var $c=p((UG,Wc)=>{"use strict";var Gc=Qt(),Fc=Object.prototype,GS=Fc.hasOwnProperty,FS=Fc.toString,ca=Gc?Gc.toStringTag:void 0;function WS(e){var t=GS.call(e,ca),r=e[ca];try{e[ca]=void 0;var n=!0}catch{}var o=FS.call(e);return n&&(t?e[ca]=r:delete e[ca]),o}a(WS,"getRawTag");Wc.exports=WS});var Qc=p((DG,jc)=>{"use strict";var $S=Object.prototype,jS=$S.toString;function QS(e){return jS.call(e)}a(QS,"objectToString");jc.exports=QS});var Pt=p((MG,Hc)=>{"use strict";var Kc=Qt(),KS=$c(),VS=Qc(),HS="[object Null]",YS="[object Undefined]",Vc=Kc?Kc.toStringTag:void 0;function zS(e){return e==null?e===void 0?YS:HS:Vc&&Vc in Object(e)?KS(e):VS(e)}a(zS,"baseGetTag");Hc.exports=zS});var ke=p((BG,Yc)=>{"use strict";function JS(e){return e!=null&&typeof e=="object"}a(JS,"isObjectLike");Yc.exports=JS});var Jc=p((FG,zc)=>{"use strict";var XS=Pt(),ZS=ke(),ew="[object Arguments]";function tw(e){return ZS(e)&&XS(e)==ew}a(tw,"baseIsArguments");zc.exports=tw});var pa=p(($G,ep)=>{"use strict";var Xc=Jc(),rw=ke(),Zc=Object.prototype,aw=Zc.hasOwnProperty,nw=Zc.propertyIsEnumerable,ow=Xc(function(){return arguments}())?Xc:function(e){return rw(e)&&aw.call(e,"callee")&&!nw.call(e,"callee")};ep.exports=ow});var Ee=p((jG,tp)=>{"use strict";var sw=Array.isArray;tp.exports=sw});var op=p((QG,np)=>{"use strict";var rp=Qt(),iw=pa(),uw=Ee(),ap=rp?rp.isConcatSpreadable:void 0;function cw(e){return uw(e)||iw(e)||!!(ap&&e&&e[ap])}a(cw,"isFlattenable");np.exports=cw});var Vo=p((VG,ip)=>{"use strict";var pw=mn(),lw=op();function sp(e,t,r,n,o){var s=-1,i=e.length;for(r||(r=lw),o||(o=[]);++s<i;){var u=e[s];t>0&&r(u)?t>1?sp(u,t-1,r,n,o):pw(o,u):n||(o[o.length]=u)}return o}a(sp,"baseFlatten");ip.exports=sp});var la=p((YG,up)=>{"use strict";function dw(e){return e}a(dw,"identity");up.exports=dw});var gn=p((JG,cp)=>{"use strict";function fw(e,t,r){switch(r.length){case 0:return e.call(t);case 1:return e.call(t,r[0]);case 2:return e.call(t,r[0],r[1]);case 3:return e.call(t,r[0],r[1],r[2])}return e.apply(t,r)}a(fw,"apply");cp.exports=fw});var Ho=p((ZG,lp)=>{"use strict";var mw=gn(),pp=Math.max;function gw(e,t,r){return t=pp(t===void 0?e.length-1:t,0),function(){for(var n=arguments,o=-1,s=pp(n.length-t,0),i=Array(s);++o<s;)i[o]=n[t+o];o=-1;for(var u=Array(t+1);++o<t;)u[o]=n[o];return u[t]=r(i),mw(e,this,u)}}a(gw,"overRest");lp.exports=gw});var fp=p((tF,dp)=>{"use strict";function hw(e){return function(){return e}}a(hw,"constant");dp.exports=hw});var je=p((aF,mp)=>{"use strict";function yw(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}a(yw,"isObject");mp.exports=yw});var da=p((oF,gp)=>{"use strict";var Aw=Pt(),bw=je(),Iw="[object AsyncFunction]",Sw="[object Function]",ww="[object GeneratorFunction]",Tw="[object Proxy]";function Ew(e){if(!bw(e))return!1;var t=Aw(e);return t==Sw||t==ww||t==Iw||t==Tw}a(Ew,"isFunction");gp.exports=Ew});var yp=p((iF,hp)=>{"use strict";var Rw=_e(),vw=Rw["__core-js_shared__"];hp.exports=vw});var Ip=p((uF,bp)=>{"use strict";var Yo=yp(),Ap=function(){var e=/[^.]+$/.exec(Yo&&Yo.keys&&Yo.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function _w(e){return!!Ap&&Ap in e}a(_w,"isMasked");bp.exports=_w});var zo=p((pF,Sp)=>{"use strict";var xw=Function.prototype,Cw=xw.toString;function Ow(e){if(e!=null){try{return Cw.call(e)}catch{}try{return e+""}catch{}}return""}a(Ow,"toSource");Sp.exports=Ow});var Tp=p((dF,wp)=>{"use strict";var Lw=da(),Pw=Ip(),Uw=je(),qw=zo(),Dw=/[\\^$.*+?()[\]{}|]/g,kw=/^\[object .+?Constructor\]$/,Mw=Function.prototype,Nw=Object.prototype,Bw=Mw.toString,Gw=Nw.hasOwnProperty,Fw=RegExp("^"+Bw.call(Gw).replace(Dw,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function Ww(e){if(!Uw(e)||Pw(e))return!1;var t=Lw(e)?Fw:kw;return t.test(qw(e))}a(Ww,"baseIsNative");wp.exports=Ww});var Rp=p((mF,Ep)=>{"use strict";function $w(e,t){return e?.[t]}a($w,"getValue");Ep.exports=$w});var Ut=p((hF,vp)=>{"use strict";var jw=Tp(),Qw=Rp();function Kw(e,t){var r=Qw(e,t);return jw(r)?r:void 0}a(Kw,"getNative");vp.exports=Kw});var Jo=p((AF,_p)=>{"use strict";var Vw=Ut(),Hw=function(){try{var e=Vw(Object,"defineProperty");return e({},"",{}),e}catch{}}();_p.exports=Hw});var Op=p((bF,Cp)=>{"use strict";var Yw=fp(),xp=Jo(),zw=la(),Jw=xp?function(e,t){return xp(e,"toString",{configurable:!0,enumerable:!1,value:Yw(t),writable:!0})}:zw;Cp.exports=Jw});var Xo=p((IF,Lp)=>{"use strict";var Xw=800,Zw=16,eT=Date.now;function tT(e){var t=0,r=0;return function(){var n=eT(),o=Zw-(n-r);if(r=n,o>0){if(++t>=Xw)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}a(tT,"shortOut");Lp.exports=tT});var hn=p((wF,Pp)=>{"use strict";var rT=Op(),aT=Xo(),nT=aT(rT);Pp.exports=nT});var Zo=p((TF,Up)=>{"use strict";var oT=la(),sT=Ho(),iT=hn();function uT(e,t){return iT(sT(e,t,oT),e+"")}a(uT,"baseRest");Up.exports=uT});var fa=p((RF,qp)=>{"use strict";var cT=Ut(),pT=cT(Object,"create");qp.exports=pT});var Mp=p((vF,kp)=>{"use strict";var Dp=fa();function lT(){this.__data__=Dp?Dp(null):{},this.size=0}a(lT,"hashClear");kp.exports=lT});var Bp=p((xF,Np)=>{"use strict";function dT(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}a(dT,"hashDelete");Np.exports=dT});var Fp=p((OF,Gp)=>{"use strict";var fT=fa(),mT="__lodash_hash_undefined__",gT=Object.prototype,hT=gT.hasOwnProperty;function yT(e){var t=this.__data__;if(fT){var r=t[e];return r===mT?void 0:r}return hT.call(t,e)?t[e]:void 0}a(yT,"hashGet");Gp.exports=yT});var $p=p((PF,Wp)=>{"use strict";var AT=fa(),bT=Object.prototype,IT=bT.hasOwnProperty;function ST(e){var t=this.__data__;return AT?t[e]!==void 0:IT.call(t,e)}a(ST,"hashHas");Wp.exports=ST});var Qp=p((qF,jp)=>{"use strict";var wT=fa(),TT="__lodash_hash_undefined__";function ET(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=wT&&t===void 0?TT:t,this}a(ET,"hashSet");jp.exports=ET});var Vp=p((kF,Kp)=>{"use strict";var RT=Mp(),vT=Bp(),_T=Fp(),xT=$p(),CT=Qp();function pr(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}a(pr,"Hash");pr.prototype.clear=RT;pr.prototype.delete=vT;pr.prototype.get=_T;pr.prototype.has=xT;pr.prototype.set=CT;Kp.exports=pr});var Yp=p((NF,Hp)=>{"use strict";function OT(){this.__data__=[],this.size=0}a(OT,"listCacheClear");Hp.exports=OT});var lr=p((GF,zp)=>{"use strict";function LT(e,t){return e===t||e!==e&&t!==t}a(LT,"eq");zp.exports=LT});var ma=p((WF,Jp)=>{"use strict";var PT=lr();function UT(e,t){for(var r=e.length;r--;)if(PT(e[r][0],t))return r;return-1}a(UT,"assocIndexOf");Jp.exports=UT});var Zp=p((jF,Xp)=>{"use strict";var qT=ma(),DT=Array.prototype,kT=DT.splice;function MT(e){var t=this.__data__,r=qT(t,e);if(r<0)return!1;var n=t.length-1;return r==n?t.pop():kT.call(t,r,1),--this.size,!0}a(MT,"listCacheDelete");Xp.exports=MT});var tl=p((KF,el)=>{"use strict";var NT=ma();function BT(e){var t=this.__data__,r=NT(t,e);return r<0?void 0:t[r][1]}a(BT,"listCacheGet");el.exports=BT});var al=p((HF,rl)=>{"use strict";var GT=ma();function FT(e){return GT(this.__data__,e)>-1}a(FT,"listCacheHas");rl.exports=FT});var ol=p((zF,nl)=>{"use strict";var WT=ma();function $T(e,t){var r=this.__data__,n=WT(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this}a($T,"listCacheSet");nl.exports=$T});var ga=p((XF,sl)=>{"use strict";var jT=Yp(),QT=Zp(),KT=tl(),VT=al(),HT=ol();function dr(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}a(dr,"ListCache");dr.prototype.clear=jT;dr.prototype.delete=QT;dr.prototype.get=KT;dr.prototype.has=VT;dr.prototype.set=HT;sl.exports=dr});var yn=p((e1,il)=>{"use strict";var YT=Ut(),zT=_e(),JT=YT(zT,"Map");il.exports=JT});var pl=p((t1,cl)=>{"use strict";var ul=Vp(),XT=ga(),ZT=yn();function eE(){this.size=0,this.__data__={hash:new ul,map:new(ZT||XT),string:new ul}}a(eE,"mapCacheClear");cl.exports=eE});var dl=p((a1,ll)=>{"use strict";function tE(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}a(tE,"isKeyable");ll.exports=tE});var ha=p((o1,fl)=>{"use strict";var rE=dl();function aE(e,t){var r=e.__data__;return rE(t)?r[typeof t=="string"?"string":"hash"]:r.map}a(aE,"getMapData");fl.exports=aE});var gl=p((i1,ml)=>{"use strict";var nE=ha();function oE(e){var t=nE(this,e).delete(e);return this.size-=t?1:0,t}a(oE,"mapCacheDelete");ml.exports=oE});var yl=p((c1,hl)=>{"use strict";var sE=ha();function iE(e){return sE(this,e).get(e)}a(iE,"mapCacheGet");hl.exports=iE});var bl=p((l1,Al)=>{"use strict";var uE=ha();function cE(e){return uE(this,e).has(e)}a(cE,"mapCacheHas");Al.exports=cE});var Sl=p((f1,Il)=>{"use strict";var pE=ha();function lE(e,t){var r=pE(this,e),n=r.size;return r.set(e,t),this.size+=r.size==n?0:1,this}a(lE,"mapCacheSet");Il.exports=lE});var An=p((g1,wl)=>{"use strict";var dE=pl(),fE=gl(),mE=yl(),gE=bl(),hE=Sl();function fr(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}a(fr,"MapCache");fr.prototype.clear=dE;fr.prototype.delete=fE;fr.prototype.get=mE;fr.prototype.has=gE;fr.prototype.set=hE;wl.exports=fr});var El=p((y1,Tl)=>{"use strict";var yE="__lodash_hash_undefined__";function AE(e){return this.__data__.set(e,yE),this}a(AE,"setCacheAdd");Tl.exports=AE});var vl=p((b1,Rl)=>{"use strict";function bE(e){return this.__data__.has(e)}a(bE,"setCacheHas");Rl.exports=bE});var es=p((S1,_l)=>{"use strict";var IE=An(),SE=El(),wE=vl();function bn(e){var t=-1,r=e==null?0:e.length;for(this.__data__=new IE;++t<r;)this.add(e[t])}a(bn,"SetCache");bn.prototype.add=bn.prototype.push=SE;bn.prototype.has=wE;_l.exports=bn});var Cl=p((T1,xl)=>{"use strict";function TE(e,t,r,n){for(var o=e.length,s=r+(n?1:-1);n?s--:++s<o;)if(t(e[s],s,e))return s;return-1}a(TE,"baseFindIndex");xl.exports=TE});var Ll=p((R1,Ol)=>{"use strict";function EE(e){return e!==e}a(EE,"baseIsNaN");Ol.exports=EE});var Ul=p((_1,Pl)=>{"use strict";function RE(e,t,r){for(var n=r-1,o=e.length;++n<o;)if(e[n]===t)return n;return-1}a(RE,"strictIndexOf");Pl.exports=RE});var Dl=p((C1,ql)=>{"use strict";var vE=Cl(),_E=Ll(),xE=Ul();function CE(e,t,r){return t===t?xE(e,t,r):vE(e,_E,r)}a(CE,"baseIndexOf");ql.exports=CE});var ts=p((L1,kl)=>{"use strict";var OE=Dl();function LE(e,t){var r=e==null?0:e.length;return!!r&&OE(e,t,0)>-1}a(LE,"arrayIncludes");kl.exports=LE});var Nl=p((U1,Ml)=>{"use strict";function PE(e,t,r){for(var n=-1,o=e==null?0:e.length;++n<o;)if(r(t,e[n]))return!0;return!1}a(PE,"arrayIncludesWith");Ml.exports=PE});var rs=p((D1,Bl)=>{"use strict";function UE(e,t){return e.has(t)}a(UE,"cacheHas");Bl.exports=UE});var as=p((M1,Gl)=>{"use strict";var qE=Ut(),DE=_e(),kE=qE(DE,"Set");Gl.exports=kE});var ns=p((N1,Fl)=>{"use strict";function ME(){}a(ME,"noop");Fl.exports=ME});var In=p((G1,Wl)=>{"use strict";function NE(e){var t=-1,r=Array(e.size);return e.forEach(function(n){r[++t]=n}),r}a(NE,"setToArray");Wl.exports=NE});var jl=p((W1,$l)=>{"use strict";var os=as(),BE=ns(),GE=In(),FE=1/0,WE=os&&1/GE(new os([,-0]))[1]==FE?function(e){return new os(e)}:BE;$l.exports=WE});var Kl=p(($1,Ql)=>{"use strict";var $E=es(),jE=ts(),QE=Nl(),KE=rs(),VE=jl(),HE=In(),YE=200;function zE(e,t,r){var n=-1,o=jE,s=e.length,i=!0,u=[],c=u;if(r)i=!1,o=QE;else if(s>=YE){var f=t?null:VE(e);if(f)return HE(f);i=!1,o=KE,c=new $E}else c=t?[]:u;e:for(;++n<s;){var g=e[n],h=t?t(g):g;if(g=r||g!==0?g:0,i&&h===h){for(var y=c.length;y--;)if(c[y]===h)continue e;t&&c.push(h),u.push(g)}else o(c,h,r)||(c!==u&&c.push(h),u.push(g))}return u}a(zE,"baseUniq");Ql.exports=zE});var Sn=p((Q1,Vl)=>{"use strict";var JE=9007199254740991;function XE(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=JE}a(XE,"isLength");Vl.exports=XE});var mr=p((V1,Hl)=>{"use strict";var ZE=da(),eR=Sn();function tR(e){return e!=null&&eR(e.length)&&!ZE(e)}a(tR,"isArrayLike");Hl.exports=tR});var ss=p((Y1,Yl)=>{"use strict";var rR=mr(),aR=ke();function nR(e){return aR(e)&&rR(e)}a(nR,"isArrayLikeObject");Yl.exports=nR});var Jl=p((J1,zl)=>{"use strict";var oR=Vo(),sR=Zo(),iR=Kl(),uR=ss(),cR=sR(function(e){return iR(oR(e,1,uR,!0))});zl.exports=cR});var Zl=p((X1,Xl)=>{"use strict";var pR=ga();function lR(){this.__data__=new pR,this.size=0}a(lR,"stackClear");Xl.exports=lR});var td=p((eW,ed)=>{"use strict";function dR(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r}a(dR,"stackDelete");ed.exports=dR});var ad=p((rW,rd)=>{"use strict";function fR(e){return this.__data__.get(e)}a(fR,"stackGet");rd.exports=fR});var od=p((nW,nd)=>{"use strict";function mR(e){return this.__data__.has(e)}a(mR,"stackHas");nd.exports=mR});var id=p((sW,sd)=>{"use strict";var gR=ga(),hR=yn(),yR=An(),AR=200;function bR(e,t){var r=this.__data__;if(r instanceof gR){var n=r.__data__;if(!hR||n.length<AR-1)return n.push([e,t]),this.size=++r.size,this;r=this.__data__=new yR(n)}return r.set(e,t),this.size=r.size,this}a(bR,"stackSet");sd.exports=bR});var ya=p((uW,ud)=>{"use strict";var IR=ga(),SR=Zl(),wR=td(),TR=ad(),ER=od(),RR=id();function gr(e){var t=this.__data__=new IR(e);this.size=t.size}a(gr,"Stack");gr.prototype.clear=SR;gr.prototype.delete=wR;gr.prototype.get=TR;gr.prototype.has=ER;gr.prototype.set=RR;ud.exports=gr});var Aa=p((pW,pd)=>{"use strict";var cd=Jo();function vR(e,t,r){t=="__proto__"&&cd?cd(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}a(vR,"baseAssignValue");pd.exports=vR});var is=p((dW,ld)=>{"use strict";var _R=Aa(),xR=lr();function CR(e,t,r){(r!==void 0&&!xR(e[t],r)||r===void 0&&!(t in e))&&_R(e,t,r)}a(CR,"assignMergeValue");ld.exports=CR});var fd=p((mW,dd)=>{"use strict";function OR(e){return function(t,r,n){for(var o=-1,s=Object(t),i=n(t),u=i.length;u--;){var c=i[e?u:++o];if(r(s[c],c,s)===!1)break}return t}}a(OR,"createBaseFor");dd.exports=OR});var us=p((hW,md)=>{"use strict";var LR=fd(),PR=LR();md.exports=PR});var cs=p((ba,hr)=>{"use strict";var UR=_e(),Ad=typeof ba=="object"&&ba&&!ba.nodeType&&ba,gd=Ad&&typeof hr=="object"&&hr&&!hr.nodeType&&hr,qR=gd&&gd.exports===Ad,hd=qR?UR.Buffer:void 0,yd=hd?hd.allocUnsafe:void 0;function DR(e,t){if(t)return e.slice();var r=e.length,n=yd?yd(r):new e.constructor(r);return e.copy(n),n}a(DR,"cloneBuffer");hr.exports=DR});var ps=p((AW,bd)=>{"use strict";var kR=_e(),MR=kR.Uint8Array;bd.exports=MR});var wn=p((bW,Sd)=>{"use strict";var Id=ps();function NR(e){var t=new e.constructor(e.byteLength);return new Id(t).set(new Id(e)),t}a(NR,"cloneArrayBuffer");Sd.exports=NR});var ls=p((SW,wd)=>{"use strict";var BR=wn();function GR(e,t){var r=t?BR(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.length)}a(GR,"cloneTypedArray");wd.exports=GR});var yr=p((TW,Td)=>{"use strict";function FR(e,t){var r=-1,n=e.length;for(t||(t=Array(n));++r<n;)t[r]=e[r];return t}a(FR,"copyArray");Td.exports=FR});var Ia=p((RW,Rd)=>{"use strict";var WR=je(),Ed=Object.create,$R=function(){function e(){}return a(e,"object"),function(t){if(!WR(t))return{};if(Ed)return Ed(t);e.prototype=t;var r=new e;return e.prototype=void 0,r}}();Rd.exports=$R});var ds=p((_W,vd)=>{"use strict";function jR(e,t){return function(r){return e(t(r))}}a(jR,"overArg");vd.exports=jR});var Tn=p((CW,_d)=>{"use strict";var QR=ds(),KR=QR(Object.getPrototypeOf,Object);_d.exports=KR});var En=p((OW,xd)=>{"use strict";var VR=Object.prototype;function HR(e){var t=e&&e.constructor,r=typeof t=="function"&&t.prototype||VR;return e===r}a(HR,"isPrototype");xd.exports=HR});var fs=p((PW,Cd)=>{"use strict";var YR=Ia(),zR=Tn(),JR=En();function XR(e){return typeof e.constructor=="function"&&!JR(e)?YR(zR(e)):{}}a(XR,"initCloneObject");Cd.exports=XR});var Ld=p((qW,Od)=>{"use strict";function ZR(){return!1}a(ZR,"stubFalse");Od.exports=ZR});var wa=p((Sa,Ar)=>{"use strict";var ev=_e(),tv=Ld(),qd=typeof Sa=="object"&&Sa&&!Sa.nodeType&&Sa,Pd=qd&&typeof Ar=="object"&&Ar&&!Ar.nodeType&&Ar,rv=Pd&&Pd.exports===qd,Ud=rv?ev.Buffer:void 0,av=Ud?Ud.isBuffer:void 0,nv=av||tv;Ar.exports=nv});var ms=p((kW,kd)=>{"use strict";var ov=Pt(),sv=Tn(),iv=ke(),uv="[object Object]",cv=Function.prototype,pv=Object.prototype,Dd=cv.toString,lv=pv.hasOwnProperty,dv=Dd.call(Object);function fv(e){if(!iv(e)||ov(e)!=uv)return!1;var t=sv(e);if(t===null)return!0;var r=lv.call(t,"constructor")&&t.constructor;return typeof r=="function"&&r instanceof r&&Dd.call(r)==dv}a(fv,"isPlainObject");kd.exports=fv});var Nd=p((NW,Md)=>{"use strict";var mv=Pt(),gv=Sn(),hv=ke(),yv="[object Arguments]",Av="[object Array]",bv="[object Boolean]",Iv="[object Date]",Sv="[object Error]",wv="[object Function]",Tv="[object Map]",Ev="[object Number]",Rv="[object Object]",vv="[object RegExp]",_v="[object Set]",xv="[object String]",Cv="[object WeakMap]",Ov="[object ArrayBuffer]",Lv="[object DataView]",Pv="[object Float32Array]",Uv="[object Float64Array]",qv="[object Int8Array]",Dv="[object Int16Array]",kv="[object Int32Array]",Mv="[object Uint8Array]",Nv="[object Uint8ClampedArray]",Bv="[object Uint16Array]",Gv="[object Uint32Array]",H={};H[Pv]=H[Uv]=H[qv]=H[Dv]=H[kv]=H[Mv]=H[Nv]=H[Bv]=H[Gv]=!0;H[yv]=H[Av]=H[Ov]=H[bv]=H[Lv]=H[Iv]=H[Sv]=H[wv]=H[Tv]=H[Ev]=H[Rv]=H[vv]=H[_v]=H[xv]=H[Cv]=!1;function Fv(e){return hv(e)&&gv(e.length)&&!!H[mv(e)]}a(Fv,"baseIsTypedArray");Md.exports=Fv});var Rn=p((GW,Bd)=>{"use strict";function Wv(e){return function(t){return e(t)}}a(Wv,"baseUnary");Bd.exports=Wv});var vn=p((Ta,br)=>{"use strict";var $v=Ko(),Gd=typeof Ta=="object"&&Ta&&!Ta.nodeType&&Ta,Ea=Gd&&typeof br=="object"&&br&&!br.nodeType&&br,jv=Ea&&Ea.exports===Gd,gs=jv&&$v.process,Qv=function(){try{var e=Ea&&Ea.require&&Ea.require("util").types;return e||gs&&gs.binding&&gs.binding("util")}catch{}}();br.exports=Qv});var _n=p((WW,$d)=>{"use strict";var Kv=Nd(),Vv=Rn(),Fd=vn(),Wd=Fd&&Fd.isTypedArray,Hv=Wd?Vv(Wd):Kv;$d.exports=Hv});var hs=p(($W,jd)=>{"use strict";function Yv(e,t){if(!(t==="constructor"&&typeof e[t]=="function")&&t!="__proto__")return e[t]}a(Yv,"safeGet");jd.exports=Yv});var ys=p((QW,Qd)=>{"use strict";var zv=Aa(),Jv=lr(),Xv=Object.prototype,Zv=Xv.hasOwnProperty;function e_(e,t,r){var n=e[t];(!(Zv.call(e,t)&&Jv(n,r))||r===void 0&&!(t in e))&&zv(e,t,r)}a(e_,"assignValue");Qd.exports=e_});var Ir=p((VW,Kd)=>{"use strict";var t_=ys(),r_=Aa();function a_(e,t,r,n){var o=!r;r||(r={});for(var s=-1,i=t.length;++s<i;){var u=t[s],c=n?n(r[u],e[u],u,r,e):void 0;c===void 0&&(c=e[u]),o?r_(r,u,c):t_(r,u,c)}return r}a(a_,"copyObject");Kd.exports=a_});var Hd=p((YW,Vd)=>{"use strict";function n_(e,t){for(var r=-1,n=Array(e);++r<e;)n[r]=t(r);return n}a(n_,"baseTimes");Vd.exports=n_});var Ra=p((JW,Yd)=>{"use strict";var o_=9007199254740991,s_=/^(?:0|[1-9]\d*)$/;function i_(e,t){var r=typeof e;return t=t??o_,!!t&&(r=="number"||r!="symbol"&&s_.test(e))&&e>-1&&e%1==0&&e<t}a(i_,"isIndex");Yd.exports=i_});var As=p((ZW,zd)=>{"use strict";var u_=Hd(),c_=pa(),p_=Ee(),l_=wa(),d_=Ra(),f_=_n(),m_=Object.prototype,g_=m_.hasOwnProperty;function h_(e,t){var r=p_(e),n=!r&&c_(e),o=!r&&!n&&l_(e),s=!r&&!n&&!o&&f_(e),i=r||n||o||s,u=i?u_(e.length,String):[],c=u.length;for(var f in e)(t||g_.call(e,f))&&!(i&&(f=="length"||o&&(f=="offset"||f=="parent")||s&&(f=="buffer"||f=="byteLength"||f=="byteOffset")||d_(f,c)))&&u.push(f);return u}a(h_,"arrayLikeKeys");zd.exports=h_});var Xd=p((t$,Jd)=>{"use strict";function y_(e){var t=[];if(e!=null)for(var r in Object(e))t.push(r);return t}a(y_,"nativeKeysIn");Jd.exports=y_});var ef=p((a$,Zd)=>{"use strict";var A_=je(),b_=En(),I_=Xd(),S_=Object.prototype,w_=S_.hasOwnProperty;function T_(e){if(!A_(e))return I_(e);var t=b_(e),r=[];for(var n in e)n=="constructor"&&(t||!w_.call(e,n))||r.push(n);return r}a(T_,"baseKeysIn");Zd.exports=T_});var Sr=p((o$,tf)=>{"use strict";var E_=As(),R_=ef(),v_=mr();function __(e){return v_(e)?E_(e,!0):R_(e)}a(__,"keysIn");tf.exports=__});var af=p((i$,rf)=>{"use strict";var x_=Ir(),C_=Sr();function O_(e){return x_(e,C_(e))}a(O_,"toPlainObject");rf.exports=O_});var pf=p((c$,cf)=>{"use strict";var nf=is(),L_=cs(),P_=ls(),U_=yr(),q_=fs(),of=pa(),sf=Ee(),D_=ss(),k_=wa(),M_=da(),N_=je(),B_=ms(),G_=_n(),uf=hs(),F_=af();function W_(e,t,r,n,o,s,i){var u=uf(e,r),c=uf(t,r),f=i.get(c);if(f){nf(e,r,f);return}var g=s?s(u,c,r+"",e,t,i):void 0,h=g===void 0;if(h){var y=sf(c),E=!y&&k_(c),M=!y&&!E&&G_(c);g=c,y||E||M?sf(u)?g=u:D_(u)?g=U_(u):E?(h=!1,g=L_(c,!0)):M?(h=!1,g=P_(c,!0)):g=[]:B_(c)||of(c)?(g=u,of(u)?g=F_(u):(!N_(u)||M_(u))&&(g=q_(c))):h=!1}h&&(i.set(c,g),o(g,c,n,s,i),i.delete(c)),nf(e,r,g)}a(W_,"baseMergeDeep");cf.exports=W_});var ff=p((l$,df)=>{"use strict";var $_=ya(),j_=is(),Q_=us(),K_=pf(),V_=je(),H_=Sr(),Y_=hs();function lf(e,t,r,n,o){e!==t&&Q_(t,function(s,i){if(o||(o=new $_),V_(s))K_(e,t,i,r,lf,n,o);else{var u=n?n(Y_(e,i),s,i+"",e,t,o):void 0;u===void 0&&(u=s),j_(e,i,u)}},H_)}a(lf,"baseMerge");df.exports=lf});var gf=p((f$,mf)=>{"use strict";var z_=lr(),J_=mr(),X_=Ra(),Z_=je();function ex(e,t,r){if(!Z_(r))return!1;var n=typeof t;return(n=="number"?J_(r)&&X_(t,r.length):n=="string"&&t in r)?z_(r[t],e):!1}a(ex,"isIterateeCall");mf.exports=ex});var yf=p((g$,hf)=>{"use strict";var tx=Zo(),rx=gf();function ax(e){return tx(function(t,r){var n=-1,o=r.length,s=o>1?r[o-1]:void 0,i=o>2?r[2]:void 0;for(s=e.length>3&&typeof s=="function"?(o--,s):void 0,i&&rx(r[0],r[1],i)&&(s=o<3?void 0:s,o=1),t=Object(t);++n<o;){var u=r[n];u&&e(t,u,n,s)}return t})}a(ax,"createAssigner");hf.exports=ax});var bs=p((y$,Af)=>{"use strict";var nx=ff(),ox=yf(),sx=ox(function(e,t,r){nx(e,t,r)});Af.exports=sx});var Sm=p(Ue=>{"use strict";Ue.aliasToReal={each:"forEach",eachRight:"forEachRight",entries:"toPairs",entriesIn:"toPairsIn",extend:"assignIn",extendAll:"assignInAll",extendAllWith:"assignInAllWith",extendWith:"assignInWith",first:"head",conforms:"conformsTo",matches:"isMatch",property:"get",__:"placeholder",F:"stubFalse",T:"stubTrue",all:"every",allPass:"overEvery",always:"constant",any:"some",anyPass:"overSome",apply:"spread",assoc:"set",assocPath:"set",complement:"negate",compose:"flowRight",contains:"includes",dissoc:"unset",dissocPath:"unset",dropLast:"dropRight",dropLastWhile:"dropRightWhile",equals:"isEqual",identical:"eq",indexBy:"keyBy",init:"initial",invertObj:"invert",juxt:"over",omitAll:"omit",nAry:"ary",path:"get",pathEq:"matchesProperty",pathOr:"getOr",paths:"at",pickAll:"pick",pipe:"flow",pluck:"map",prop:"get",propEq:"matchesProperty",propOr:"getOr",props:"at",symmetricDifference:"xor",symmetricDifferenceBy:"xorBy",symmetricDifferenceWith:"xorWith",takeLast:"takeRight",takeLastWhile:"takeRightWhile",unapply:"rest",unnest:"flatten",useWith:"overArgs",where:"conformsTo",whereEq:"isMatch",zipObj:"zipObject"};Ue.aryMethod={1:["assignAll","assignInAll","attempt","castArray","ceil","create","curry","curryRight","defaultsAll","defaultsDeepAll","floor","flow","flowRight","fromPairs","invert","iteratee","memoize","method","mergeAll","methodOf","mixin","nthArg","over","overEvery","overSome","rest","reverse","round","runInContext","spread","template","trim","trimEnd","trimStart","uniqueId","words","zipAll"],2:["add","after","ary","assign","assignAllWith","assignIn","assignInAllWith","at","before","bind","bindAll","bindKey","chunk","cloneDeepWith","cloneWith","concat","conformsTo","countBy","curryN","curryRightN","debounce","defaults","defaultsDeep","defaultTo","delay","difference","divide","drop","dropRight","dropRightWhile","dropWhile","endsWith","eq","every","filter","find","findIndex","findKey","findLast","findLastIndex","findLastKey","flatMap","flatMapDeep","flattenDepth","forEach","forEachRight","forIn","forInRight","forOwn","forOwnRight","get","groupBy","gt","gte","has","hasIn","includes","indexOf","intersection","invertBy","invoke","invokeMap","isEqual","isMatch","join","keyBy","lastIndexOf","lt","lte","map","mapKeys","mapValues","matchesProperty","maxBy","meanBy","merge","mergeAllWith","minBy","multiply","nth","omit","omitBy","overArgs","pad","padEnd","padStart","parseInt","partial","partialRight","partition","pick","pickBy","propertyOf","pull","pullAll","pullAt","random","range","rangeRight","rearg","reject","remove","repeat","restFrom","result","sampleSize","some","sortBy","sortedIndex","sortedIndexOf","sortedLastIndex","sortedLastIndexOf","sortedUniqBy","split","spreadFrom","startsWith","subtract","sumBy","take","takeRight","takeRightWhile","takeWhile","tap","throttle","thru","times","trimChars","trimCharsEnd","trimCharsStart","truncate","union","uniqBy","uniqWith","unset","unzipWith","without","wrap","xor","zip","zipObject","zipObjectDeep"],3:["assignInWith","assignWith","clamp","differenceBy","differenceWith","findFrom","findIndexFrom","findLastFrom","findLastIndexFrom","getOr","includesFrom","indexOfFrom","inRange","intersectionBy","intersectionWith","invokeArgs","invokeArgsMap","isEqualWith","isMatchWith","flatMapDepth","lastIndexOfFrom","mergeWith","orderBy","padChars","padCharsEnd","padCharsStart","pullAllBy","pullAllWith","rangeStep","rangeStepRight","reduce","reduceRight","replace","set","slice","sortedIndexBy","sortedLastIndexBy","transform","unionBy","unionWith","update","xorBy","xorWith","zipWith"],4:["fill","setWith","updateWith"]};Ue.aryRearg={2:[1,0],3:[2,0,1],4:[3,2,0,1]};Ue.iterateeAry={dropRightWhile:1,dropWhile:1,every:1,filter:1,find:1,findFrom:1,findIndex:1,findIndexFrom:1,findKey:1,findLast:1,findLastFrom:1,findLastIndex:1,findLastIndexFrom:1,findLastKey:1,flatMap:1,flatMapDeep:1,flatMapDepth:1,forEach:1,forEachRight:1,forIn:1,forInRight:1,forOwn:1,forOwnRight:1,map:1,mapKeys:1,mapValues:1,partition:1,reduce:2,reduceRight:2,reject:1,remove:1,some:1,takeRightWhile:1,takeWhile:1,times:1,transform:2};Ue.iterateeRearg={mapKeys:[1],reduceRight:[1,0]};Ue.methodRearg={assignInAllWith:[1,0],assignInWith:[1,2,0],assignAllWith:[1,0],assignWith:[1,2,0],differenceBy:[1,2,0],differenceWith:[1,2,0],getOr:[2,1,0],intersectionBy:[1,2,0],intersectionWith:[1,2,0],isEqualWith:[1,2,0],isMatchWith:[2,1,0],mergeAllWith:[1,0],mergeWith:[1,2,0],padChars:[2,1,0],padCharsEnd:[2,1,0],padCharsStart:[2,1,0],pullAllBy:[2,1,0],pullAllWith:[2,1,0],rangeStep:[1,2,0],rangeStepRight:[1,2,0],setWith:[3,1,2,0],sortedIndexBy:[2,1,0],sortedLastIndexBy:[2,1,0],unionBy:[1,2,0],unionWith:[1,2,0],updateWith:[3,1,2,0],xorBy:[1,2,0],xorWith:[1,2,0],zipWith:[1,2,0]};Ue.methodSpread={assignAll:{start:0},assignAllWith:{start:0},assignInAll:{start:0},assignInAllWith:{start:0},defaultsAll:{start:0},defaultsDeepAll:{start:0},invokeArgs:{start:2},invokeArgsMap:{start:2},mergeAll:{start:0},mergeAllWith:{start:0},partial:{start:1},partialRight:{start:1},without:{start:1},zipAll:{start:0}};Ue.mutate={array:{fill:!0,pull:!0,pullAll:!0,pullAllBy:!0,pullAllWith:!0,pullAt:!0,remove:!0,reverse:!0},object:{assign:!0,assignAll:!0,assignAllWith:!0,assignIn:!0,assignInAll:!0,assignInAllWith:!0,assignInWith:!0,assignWith:!0,defaults:!0,defaultsAll:!0,defaultsDeep:!0,defaultsDeepAll:!0,merge:!0,mergeAll:!0,mergeAllWith:!0,mergeWith:!0},set:{set:!0,setWith:!0,unset:!0,update:!0,updateWith:!0}};Ue.realToAlias=function(){var e=Object.prototype.hasOwnProperty,t=Ue.aliasToReal,r={};for(var n in t){var o=t[n];e.call(r,o)?r[o].push(n):r[o]=[n]}return r}();Ue.remap={assignAll:"assign",assignAllWith:"assignWith",assignInAll:"assignIn",assignInAllWith:"assignInWith",curryN:"curry",curryRightN:"curryRight",defaultsAll:"defaults",defaultsDeepAll:"defaultsDeep",findFrom:"find",findIndexFrom:"findIndex",findLastFrom:"findLast",findLastIndexFrom:"findLastIndex",getOr:"get",includesFrom:"includes",indexOfFrom:"indexOf",invokeArgs:"invoke",invokeArgsMap:"invokeMap",lastIndexOfFrom:"lastIndexOf",mergeAll:"merge",mergeAllWith:"mergeWith",padChars:"pad",padCharsEnd:"padEnd",padCharsStart:"padStart",propertyOf:"get",rangeStep:"range",rangeStepRight:"rangeRight",restFrom:"rest",spreadFrom:"spread",trimChars:"trim",trimCharsEnd:"trimEnd",trimCharsStart:"trimStart",zipAll:"zip"};Ue.skipFixed={castArray:!0,flow:!0,flowRight:!0,iteratee:!0,mixin:!0,rearg:!0,runInContext:!0};Ue.skipRearg={add:!0,assign:!0,assignIn:!0,bind:!0,bindKey:!0,concat:!0,difference:!0,divide:!0,eq:!0,gt:!0,gte:!0,isEqual:!0,lt:!0,lte:!0,matchesProperty:!0,merge:!0,multiply:!0,overArgs:!0,partial:!0,partialRight:!0,propertyOf:!0,random:!0,range:!0,rangeRight:!0,subtract:!0,zip:!0,zipObject:!0,zipObjectDeep:!0}});var mi=p((EK,wm)=>{"use strict";wm.exports={}});var vm=p((RK,Rm)=>{"use strict";var me=Sm(),FC=mi(),Tm=Array.prototype.push;function WC(e,t){return t==2?function(r,n){return e.apply(void 0,arguments)}:function(r){return e.apply(void 0,arguments)}}a(WC,"baseArity");function gi(e,t){return t==2?function(r,n){return e(r,n)}:function(r){return e(r)}}a(gi,"baseAry");function Em(e){for(var t=e?e.length:0,r=Array(t);t--;)r[t]=e[t];return r}a(Em,"cloneArray");function $C(e){return function(t){return e({},t)}}a($C,"createCloner");function jC(e,t){return function(){for(var r=arguments.length,n=r-1,o=Array(r);r--;)o[r]=arguments[r];var s=o[t],i=o.slice(0,t);return s&&Tm.apply(i,s),t!=n&&Tm.apply(i,o.slice(t+1)),e.apply(this,i)}}a(jC,"flatSpread");function hi(e,t){return function(){var r=arguments.length;if(r){for(var n=Array(r);r--;)n[r]=arguments[r];var o=n[0]=t.apply(void 0,n);return e.apply(void 0,n),o}}}a(hi,"wrapImmutable");function yi(e,t,r,n){var o=typeof t=="function",s=t===Object(t);if(s&&(n=r,r=t,t=void 0),r==null)throw new TypeError;n||(n={});var i={cap:"cap"in n?n.cap:!0,curry:"curry"in n?n.curry:!0,fixed:"fixed"in n?n.fixed:!0,immutable:"immutable"in n?n.immutable:!0,rearg:"rearg"in n?n.rearg:!0},u=o?r:FC,c="curry"in n&&n.curry,f="fixed"in n&&n.fixed,g="rearg"in n&&n.rearg,h=o?r.runInContext():void 0,y=o?r:{ary:e.ary,assign:e.assign,clone:e.clone,curry:e.curry,forEach:e.forEach,isArray:e.isArray,isError:e.isError,isFunction:e.isFunction,isWeakMap:e.isWeakMap,iteratee:e.iteratee,keys:e.keys,rearg:e.rearg,toInteger:e.toInteger,toPath:e.toPath},E=y.ary,M=y.assign,k=y.clone,D=y.curry,C=y.forEach,W=y.isArray,ye=y.isError,ie=y.isFunction,Ye=y.isWeakMap,nt=y.keys,ot=y.rearg,Y=y.toInteger,G=y.toPath,Gt=nt(me.aryMethod),Ya={castArray:function(R){return function(){var b=arguments[0];return W(b)?R(Em(b)):R.apply(void 0,arguments)}},iteratee:function(R){return function(){var b=arguments[0],I=arguments[1],v=R(b,I),q=v.length;return i.cap&&typeof I=="number"?(I=I>2?I-2:1,q&&q<=I?v:gi(v,I)):v}},mixin:function(R){return function(b){var I=this;if(!ie(I))return R(I,Object(b));var v=[];return C(nt(b),function(q){ie(b[q])&&v.push([q,I.prototype[q]])}),R(I,Object(b)),C(v,function(q){var oe=q[1];ie(oe)?I.prototype[q[0]]=oe:delete I.prototype[q[0]]}),I}},nthArg:function(R){return function(b){var I=b<0?1:Y(b)+1;return D(R(b),I)}},rearg:function(R){return function(b,I){var v=I?I.length:0;return D(R(b,I),v)}},runInContext:function(R){return function(b){return yi(e,R(b),n)}}};function O(R,b){if(i.cap){var I=me.iterateeRearg[R];if(I)return Z(b,I);var v=!o&&me.iterateeAry[R];if(v)return $(b,v)}return b}a(O,"castCap");function w(R,b,I){return c||i.curry&&I>1?D(b,I):b}a(w,"castCurry");function A(R,b,I){if(i.fixed&&(f||!me.skipFixed[R])){var v=me.methodSpread[R],q=v&&v.start;return q===void 0?E(b,I):jC(b,q)}return b}a(A,"castFixed");function _(R,b,I){return i.rearg&&I>1&&(g||!me.skipRearg[R])?ot(b,me.methodRearg[R]||me.aryRearg[I]):b}a(_,"castRearg");function S(R,b){b=G(b);for(var I=-1,v=b.length,q=v-1,oe=k(Object(R)),Re=oe;Re!=null&&++I<v;){var Fe=b[I],st=Re[Fe];st!=null&&!(ie(st)||ye(st)||Ye(st))&&(Re[Fe]=k(I==q?st:Object(st))),Re=Re[Fe]}return oe}a(S,"cloneByPath");function U(R){return K.runInContext.convert(R)(void 0)}a(U,"convertLib");function P(R,b){var I=me.aliasToReal[R]||R,v=me.remap[I]||I,q=n;return function(oe){var Re=o?h:y,Fe=o?h[v]:b,st=M(M({},q),oe);return yi(Re,I,Fe,st)}}a(P,"createConverter");function $(R,b){return ne(R,function(I){return typeof I=="function"?gi(I,b):I})}a($,"iterateeAry");function Z(R,b){return ne(R,function(I){var v=b.length;return WC(ot(gi(I,v),b),v)})}a(Z,"iterateeRearg");function ne(R,b){return function(){var I=arguments.length;if(!I)return R();for(var v=Array(I);I--;)v[I]=arguments[I];var q=i.rearg?0:I-1;return v[q]=b(v[q]),R.apply(void 0,v)}}a(ne,"overArg");function pe(R,b,I){var v,q=me.aliasToReal[R]||R,oe=b,Re=Ya[q];return Re?oe=Re(b):i.immutable&&(me.mutate.array[q]?oe=hi(b,Em):me.mutate.object[q]?oe=hi(b,$C(b)):me.mutate.set[q]&&(oe=hi(b,S))),C(Gt,function(Fe){return C(me.aryMethod[Fe],function(st){if(q==st){var Yu=me.methodSpread[q],CI=Yu&&Yu.afterRearg;return v=CI?A(q,_(q,oe,Fe),Fe):_(q,A(q,oe,Fe),Fe),v=O(q,v),v=w(q,v,Fe),!1}}),!v}),v||(v=oe),v==b&&(v=c?D(v,1):function(){return b.apply(this,arguments)}),v.convert=P(q,b),v.placeholder=b.placeholder=I,v}if(a(pe,"wrap"),!s)return pe(t,r,u);var K=r,Ge=[];return C(Gt,function(R){C(me.aryMethod[R],function(b){var I=K[me.remap[b]||b];I&&Ge.push([b,pe(b,I,K)])})}),C(nt(K),function(R){var b=K[R];if(typeof b=="function"){for(var I=Ge.length;I--;)if(Ge[I][0]==R)return;b.convert=P(R,b),Ge.push([R,b])}}),C(Ge,function(R){K[R[0]]=R[1]}),K.convert=U,K.placeholder=K,C(nt(K),function(R){C(me.realToAlias[R]||[],function(b){K[b]=K[R]})}),K}a(yi,"baseConvert");Rm.exports=yi});var Ai=p((_K,_m)=>{"use strict";var QC=Ut(),KC=_e(),VC=QC(KC,"WeakMap");_m.exports=VC});var bi=p((xK,Cm)=>{"use strict";var xm=Ai(),HC=xm&&new xm;Cm.exports=HC});var Ii=p((CK,Lm)=>{"use strict";var YC=la(),Om=bi(),zC=Om?function(e,t){return Om.set(e,t),e}:YC;Lm.exports=zC});var Da=p((OK,Pm)=>{"use strict";var JC=Ia(),XC=je();function ZC(e){return function(){var t=arguments;switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3]);case 5:return new e(t[0],t[1],t[2],t[3],t[4]);case 6:return new e(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new e(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var r=JC(e.prototype),n=e.apply(r,t);return XC(n)?n:r}}a(ZC,"createCtor");Pm.exports=ZC});var qm=p((PK,Um)=>{"use strict";var eO=Da(),tO=_e(),rO=1;function aO(e,t,r){var n=t&rO,o=eO(e);function s(){var i=this&&this!==tO&&this instanceof s?o:e;return i.apply(n?r:this,arguments)}return a(s,"wrapper"),s}a(aO,"createBind");Um.exports=aO});var Si=p((qK,Dm)=>{"use strict";var nO=Math.max;function oO(e,t,r,n){for(var o=-1,s=e.length,i=r.length,u=-1,c=t.length,f=nO(s-i,0),g=Array(c+f),h=!n;++u<c;)g[u]=t[u];for(;++o<i;)(h||o<s)&&(g[r[o]]=e[o]);for(;f--;)g[u++]=e[o++];return g}a(oO,"composeArgs");Dm.exports=oO});var wi=p((kK,km)=>{"use strict";var sO=Math.max;function iO(e,t,r,n){for(var o=-1,s=e.length,i=-1,u=r.length,c=-1,f=t.length,g=sO(s-u,0),h=Array(g+f),y=!n;++o<g;)h[o]=e[o];for(var E=o;++c<f;)h[E+c]=t[c];for(;++i<u;)(y||o<s)&&(h[E+r[i]]=e[o++]);return h}a(iO,"composeArgsRight");km.exports=iO});var Nm=p((NK,Mm)=>{"use strict";function uO(e,t){for(var r=e.length,n=0;r--;)e[r]===t&&++n;return n}a(uO,"countHolders");Mm.exports=uO});var Jn=p((GK,Bm)=>{"use strict";function cO(){}a(cO,"baseLodash");Bm.exports=cO});var Zn=p((WK,Gm)=>{"use strict";var pO=Ia(),lO=Jn(),dO=4294967295;function Xn(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=dO,this.__views__=[]}a(Xn,"LazyWrapper");Xn.prototype=pO(lO.prototype);Xn.prototype.constructor=Xn;Gm.exports=Xn});var Ti=p((jK,Wm)=>{"use strict";var Fm=bi(),fO=ns(),mO=Fm?function(e){return Fm.get(e)}:fO;Wm.exports=mO});var jm=p((QK,$m)=>{"use strict";var gO={};$m.exports=gO});var Vm=p((KK,Km)=>{"use strict";var Qm=jm(),hO=Object.prototype,yO=hO.hasOwnProperty;function AO(e){for(var t=e.name+"",r=Qm[t],n=yO.call(Qm,t)?r.length:0;n--;){var o=r[n],s=o.func;if(s==null||s==e)return o.name}return t}a(AO,"getFuncName");Km.exports=AO});var Ei=p((HK,Hm)=>{"use strict";var bO=Ia(),IO=Jn();function eo(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=void 0}a(eo,"LodashWrapper");eo.prototype=bO(IO.prototype);eo.prototype.constructor=eo;Hm.exports=eo});var zm=p((zK,Ym)=>{"use strict";var SO=Zn(),wO=Ei(),TO=yr();function EO(e){if(e instanceof SO)return e.clone();var t=new wO(e.__wrapped__,e.__chain__);return t.__actions__=TO(e.__actions__),t.__index__=e.__index__,t.__values__=e.__values__,t}a(EO,"wrapperClone");Ym.exports=EO});var Zm=p((XK,Xm)=>{"use strict";var RO=Zn(),Jm=Ei(),vO=Jn(),_O=Ee(),xO=ke(),CO=zm(),OO=Object.prototype,LO=OO.hasOwnProperty;function to(e){if(xO(e)&&!_O(e)&&!(e instanceof RO)){if(e instanceof Jm)return e;if(LO.call(e,"__wrapped__"))return CO(e)}return new Jm(e)}a(to,"lodash");to.prototype=vO.prototype;to.prototype.constructor=to;Xm.exports=to});var tg=p((e2,eg)=>{"use strict";var PO=Zn(),UO=Ti(),qO=Vm(),DO=Zm();function kO(e){var t=qO(e),r=DO[t];if(typeof r!="function"||!(t in PO.prototype))return!1;if(e===r)return!0;var n=UO(r);return!!n&&e===n[0]}a(kO,"isLaziable");eg.exports=kO});var Ri=p((r2,rg)=>{"use strict";var MO=Ii(),NO=Xo(),BO=NO(MO);rg.exports=BO});var ng=p((a2,ag)=>{"use strict";var GO=/\{\n\/\* \[wrapped with (.+)\] \*/,FO=/,? & /;function WO(e){var t=e.match(GO);return t?t[1].split(FO):[]}a(WO,"getWrapDetails");ag.exports=WO});var sg=p((o2,og)=>{"use strict";var $O=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/;function jO(e,t){var r=t.length;if(!r)return e;var n=r-1;return t[n]=(r>1?"& ":"")+t[n],t=t.join(r>2?", ":" "),e.replace($O,`{
2
2
  /* [wrapped with `+t+`] */
3
- `)}a(FO,"insertWrapDetails");ag.exports=FO});var to=p((t2,og)=>{"use strict";function WO(e,t){for(var r=-1,n=e==null?0:e.length;++r<n&&t(e[r],r,e)!==!1;);return e}a(WO,"arrayEach");og.exports=WO});var ig=p((a2,sg)=>{"use strict";var $O=to(),jO=es(),QO=1,KO=2,VO=8,HO=16,YO=32,zO=64,JO=128,XO=256,ZO=512,eL=[["ary",JO],["bind",QO],["bindKey",KO],["curry",VO],["curryRight",HO],["flip",ZO],["partial",YO],["partialRight",zO],["rearg",XO]];function tL(e,t){return $O(eL,function(r){var n="_."+r[0];t&r[1]&&!jO(e,n)&&e.push(n)}),e.sort()}a(tL,"updateWrapDetails");sg.exports=tL});var vi=p((o2,ug)=>{"use strict";var rL=rg(),aL=ng(),nL=gn(),oL=ig();function sL(e,t,r){var n=t+"";return nL(e,aL(n,oL(rL(n),r)))}a(sL,"setWrapToString");ug.exports=sL});var Ri=p((i2,lg)=>{"use strict";var iL=Zm(),uL=Ei(),cL=vi(),pL=1,lL=2,dL=4,fL=8,cg=32,pg=64;function mL(e,t,r,n,o,s,i,u,c,f){var g=t&fL,h=g?i:void 0,y=g?void 0:i,E=g?s:void 0,M=g?void 0:s;t|=g?cg:pg,t&=~(g?pg:cg),t&dL||(t&=~(pL|lL));var k=[e,t,o,E,h,M,y,u,c,f],D=r.apply(void 0,k);return iL(e)&&uL(D,k),D.placeholder=n,cL(D,e,t)}a(mL,"createRecurry");lg.exports=mL});var _i=p((c2,dg)=>{"use strict";function gL(e){var t=e;return t.placeholder}a(gL,"getHolder");dg.exports=gL});var mg=p((l2,fg)=>{"use strict";var hL=yr(),yL=va(),AL=Math.min;function bL(e,t){for(var r=e.length,n=AL(t.length,r),o=hL(e);n--;){var s=t[n];e[n]=yL(s,r)?o[s]:void 0}return e}a(bL,"reorder");fg.exports=bL});var ro=p((f2,hg)=>{"use strict";var gg="__lodash_placeholder__";function IL(e,t){for(var r=-1,n=e.length,o=0,s=[];++r<n;){var i=e[r];(i===t||i===gg)&&(e[r]=gg,s[o++]=r)}return s}a(IL,"replaceHolders");hg.exports=IL});var xi=p((g2,bg)=>{"use strict";var SL=Ii(),wL=Si(),TL=km(),yg=Da(),EL=Ri(),vL=_i(),RL=mg(),_L=ro(),xL=_e(),CL=1,OL=2,LL=8,PL=16,UL=128,qL=512;function Ag(e,t,r,n,o,s,i,u,c,f){var g=t&UL,h=t&CL,y=t&OL,E=t&(LL|PL),M=t&qL,k=y?void 0:yg(e);function D(){for(var C=arguments.length,W=Array(C),ye=C;ye--;)W[ye]=arguments[ye];if(E)var ie=vL(D),Ye=TL(W,ie);if(n&&(W=SL(W,n,o,E)),s&&(W=wL(W,s,i,E)),C-=Ye,E&&C<f){var nt=_L(W,ie);return EL(e,t,Ag,D.placeholder,r,W,nt,u,c,f-C)}var ot=h?r:this,Y=y?ot[e]:e;return C=W.length,u?W=RL(W,u):M&&C>1&&W.reverse(),g&&c<C&&(W.length=c),this&&this!==xL&&this instanceof D&&(Y=k||yg(Y)),Y.apply(ot,W)}return a(D,"wrapper"),D}a(Ag,"createHybrid");bg.exports=Ag});var Sg=p((y2,Ig)=>{"use strict";var DL=mn(),kL=Da(),ML=xi(),NL=Ri(),BL=_i(),GL=ro(),FL=_e();function WL(e,t,r){var n=kL(e);function o(){for(var s=arguments.length,i=Array(s),u=s,c=BL(o);u--;)i[u]=arguments[u];var f=s<3&&i[0]!==c&&i[s-1]!==c?[]:GL(i,c);if(s-=f.length,s<r)return NL(e,t,ML,o.placeholder,void 0,i,f,void 0,void 0,r-s);var g=this&&this!==FL&&this instanceof o?n:e;return DL(g,this,i)}return a(o,"wrapper"),o}a(WL,"createCurry");Ig.exports=WL});var Tg=p((b2,wg)=>{"use strict";var $L=mn(),jL=Da(),QL=_e(),KL=1;function VL(e,t,r,n){var o=t&KL,s=jL(e);function i(){for(var u=-1,c=arguments.length,f=-1,g=n.length,h=Array(g+c),y=this&&this!==QL&&this instanceof i?s:e;++f<g;)h[f]=n[f];for(;c--;)h[f++]=arguments[++u];return $L(y,o?r:this,h)}return a(i,"wrapper"),i}a(VL,"createPartial");wg.exports=VL});var Cg=p((S2,xg)=>{"use strict";var HL=Ii(),YL=Si(),Eg=ro(),vg="__lodash_placeholder__",Ci=1,zL=2,JL=4,Rg=8,ka=128,_g=256,XL=Math.min;function ZL(e,t){var r=e[1],n=t[1],o=r|n,s=o<(Ci|zL|ka),i=n==ka&&r==Rg||n==ka&&r==_g&&e[7].length<=t[8]||n==(ka|_g)&&t[7].length<=t[8]&&r==Rg;if(!(s||i))return e;n&Ci&&(e[2]=t[2],o|=r&Ci?0:JL);var u=t[3];if(u){var c=e[3];e[3]=c?HL(c,u,t[4]):u,e[4]=c?Eg(e[3],vg):t[4]}return u=t[5],u&&(c=e[5],e[5]=c?YL(c,u,t[6]):u,e[6]=c?Eg(e[5],vg):t[6]),u=t[7],u&&(e[7]=u),n&ka&&(e[8]=e[8]==null?t[8]:XL(e[8],t[8])),e[9]==null&&(e[9]=t[9]),e[0]=t[0],e[1]=o,e}a(ZL,"mergeData");xg.exports=ZL});var Lg=p((T2,Og)=>{"use strict";var eP=/\s/;function tP(e){for(var t=e.length;t--&&eP.test(e.charAt(t)););return t}a(tP,"trimmedEndIndex");Og.exports=tP});var Ug=p((v2,Pg)=>{"use strict";var rP=Lg(),aP=/^\s+/;function nP(e){return e&&e.slice(0,rP(e)+1).replace(aP,"")}a(nP,"baseTrim");Pg.exports=nP});var Cr=p((_2,qg)=>{"use strict";var oP=Pt(),sP=ke(),iP="[object Symbol]";function uP(e){return typeof e=="symbol"||sP(e)&&oP(e)==iP}a(uP,"isSymbol");qg.exports=uP});var Ng=p((C2,Mg)=>{"use strict";var cP=Ug(),Dg=je(),pP=Cr(),kg=0/0,lP=/^[-+]0x[0-9a-f]+$/i,dP=/^0b[01]+$/i,fP=/^0o[0-7]+$/i,mP=parseInt;function gP(e){if(typeof e=="number")return e;if(pP(e))return kg;if(Dg(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=Dg(t)?t+"":t}if(typeof e!="string")return e===0?e:+e;e=cP(e);var r=dP.test(e);return r||fP.test(e)?mP(e.slice(2),r?2:8):lP.test(e)?kg:+e}a(gP,"toNumber");Mg.exports=gP});var Fg=p((L2,Gg)=>{"use strict";var hP=Ng(),Bg=1/0,yP=17976931348623157e292;function AP(e){if(!e)return e===0?e:0;if(e=hP(e),e===Bg||e===-Bg){var t=e<0?-1:1;return t*yP}return e===e?e:0}a(AP,"toFinite");Gg.exports=AP});var Oi=p((U2,Wg)=>{"use strict";var bP=Fg();function IP(e){var t=bP(e),r=t%1;return t===t?r?t-r:t:0}a(IP,"toInteger");Wg.exports=IP});var ao=p((D2,Vg)=>{"use strict";var SP=bi(),wP=Pm(),TP=Sg(),EP=xi(),vP=Tg(),RP=wi(),_P=Cg(),xP=Ei(),CP=vi(),$g=Oi(),OP="Expected a function",jg=1,LP=2,Li=8,Pi=16,Ui=32,Qg=64,Kg=Math.max;function PP(e,t,r,n,o,s,i,u){var c=t&LP;if(!c&&typeof e!="function")throw new TypeError(OP);var f=n?n.length:0;if(f||(t&=~(Ui|Qg),n=o=void 0),i=i===void 0?i:Kg($g(i),0),u=u===void 0?u:$g(u),f-=o?o.length:0,t&Qg){var g=n,h=o;n=o=void 0}var y=c?void 0:RP(e),E=[e,t,r,n,o,g,h,s,i,u];if(y&&_P(E,y),e=E[0],t=E[1],r=E[2],n=E[3],o=E[4],u=E[9]=E[9]===void 0?c?0:e.length:Kg(E[9]-f,0),!u&&t&(Li|Pi)&&(t&=~(Li|Pi)),!t||t==jg)var M=wP(e,t,r);else t==Li||t==Pi?M=TP(e,t,u):(t==Ui||t==(jg|Ui))&&!o.length?M=vP(e,t,r,n):M=EP.apply(void 0,E);var k=y?SP:xP;return CP(k(M,E),e,t)}a(PP,"createWrap");Vg.exports=PP});var Yg=p((M2,Hg)=>{"use strict";var UP=ao(),qP=128;function DP(e,t,r){return t=r?void 0:t,t=e&&t==null?e.length:t,UP(e,qP,void 0,void 0,void 0,void 0,t)}a(DP,"ary");Hg.exports=DP});var Jg=p((B2,zg)=>{"use strict";var kP=ls(),MP=kP(Object.keys,Object);zg.exports=MP});var qi=p((G2,Xg)=>{"use strict";var NP=Tn(),BP=Jg(),GP=Object.prototype,FP=GP.hasOwnProperty;function WP(e){if(!NP(e))return BP(e);var t=[];for(var r in Object(e))FP.call(e,r)&&r!="constructor"&&t.push(r);return t}a(WP,"baseKeys");Xg.exports=WP});var Or=p((W2,Zg)=>{"use strict";var $P=ys(),jP=qi(),QP=mr();function KP(e){return QP(e)?$P(e):jP(e)}a(KP,"keys");Zg.exports=KP});var Di=p((j2,eh)=>{"use strict";var VP=Ir(),HP=Or();function YP(e,t){return e&&VP(t,HP(t),e)}a(YP,"baseAssign");eh.exports=YP});var rh=p((K2,th)=>{"use strict";var zP=Ir(),JP=Sr();function XP(e,t){return e&&zP(t,JP(t),e)}a(XP,"baseAssignIn");th.exports=XP});var nh=p((H2,ah)=>{"use strict";function ZP(e,t){for(var r=-1,n=e==null?0:e.length,o=0,s=[];++r<n;){var i=e[r];t(i,r,e)&&(s[o++]=i)}return s}a(ZP,"arrayFilter");ah.exports=ZP});var ki=p((z2,oh)=>{"use strict";function eU(){return[]}a(eU,"stubArray");oh.exports=eU});var no=p((X2,ih)=>{"use strict";var tU=nh(),rU=ki(),aU=Object.prototype,nU=aU.propertyIsEnumerable,sh=Object.getOwnPropertySymbols,oU=sh?function(e){return e==null?[]:(e=Object(e),tU(sh(e),function(t){return nU.call(e,t)}))}:rU;ih.exports=oU});var ch=p((Z2,uh)=>{"use strict";var sU=Ir(),iU=no();function uU(e,t){return sU(e,iU(e),t)}a(uU,"copySymbols");uh.exports=uU});var Mi=p((tV,ph)=>{"use strict";var cU=fn(),pU=wn(),lU=no(),dU=ki(),fU=Object.getOwnPropertySymbols,mU=fU?function(e){for(var t=[];e;)cU(t,lU(e)),e=pU(e);return t}:dU;ph.exports=mU});var dh=p((rV,lh)=>{"use strict";var gU=Ir(),hU=Mi();function yU(e,t){return gU(e,hU(e),t)}a(yU,"copySymbolsIn");lh.exports=yU});var Ni=p((nV,fh)=>{"use strict";var AU=fn(),bU=Ee();function IU(e,t,r){var n=t(e);return bU(e)?n:AU(n,r(e))}a(IU,"baseGetAllKeys");fh.exports=IU});var Bi=p((sV,mh)=>{"use strict";var SU=Ni(),wU=no(),TU=Or();function EU(e){return SU(e,TU,wU)}a(EU,"getAllKeys");mh.exports=EU});var hh=p((uV,gh)=>{"use strict";var vU=Ni(),RU=Mi(),_U=Sr();function xU(e){return vU(e,_U,RU)}a(xU,"getAllKeysIn");gh.exports=xU});var Ah=p((pV,yh)=>{"use strict";var CU=Ut(),OU=_e(),LU=CU(OU,"DataView");yh.exports=LU});var Ih=p((lV,bh)=>{"use strict";var PU=Ut(),UU=_e(),qU=PU(UU,"Promise");bh.exports=qU});var Pr=p((dV,_h)=>{"use strict";var Gi=Ah(),Fi=hn(),Wi=Ih(),$i=rs(),ji=yi(),Rh=Pt(),Lr=Yo(),Sh="[object Map]",DU="[object Object]",wh="[object Promise]",Th="[object Set]",Eh="[object WeakMap]",vh="[object DataView]",kU=Lr(Gi),MU=Lr(Fi),NU=Lr(Wi),BU=Lr($i),GU=Lr(ji),Xt=Rh;(Gi&&Xt(new Gi(new ArrayBuffer(1)))!=vh||Fi&&Xt(new Fi)!=Sh||Wi&&Xt(Wi.resolve())!=wh||$i&&Xt(new $i)!=Th||ji&&Xt(new ji)!=Eh)&&(Xt=a(function(e){var t=Rh(e),r=t==DU?e.constructor:void 0,n=r?Lr(r):"";if(n)switch(n){case kU:return vh;case MU:return Sh;case NU:return wh;case BU:return Th;case GU:return Eh}return t},"getTag"));_h.exports=Xt});var Ch=p((mV,xh)=>{"use strict";var FU=Object.prototype,WU=FU.hasOwnProperty;function $U(e){var t=e.length,r=new e.constructor(t);return t&&typeof e[0]=="string"&&WU.call(e,"index")&&(r.index=e.index,r.input=e.input),r}a($U,"initCloneArray");xh.exports=$U});var Lh=p((hV,Oh)=>{"use strict";var jU=Sn();function QU(e,t){var r=t?jU(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.byteLength)}a(QU,"cloneDataView");Oh.exports=QU});var Uh=p((AV,Ph)=>{"use strict";var KU=/\w*$/;function VU(e){var t=new e.constructor(e.source,KU.exec(e));return t.lastIndex=e.lastIndex,t}a(VU,"cloneRegExp");Ph.exports=VU});var Nh=p((IV,Mh)=>{"use strict";var qh=Qt(),Dh=qh?qh.prototype:void 0,kh=Dh?Dh.valueOf:void 0;function HU(e){return kh?Object(kh.call(e)):{}}a(HU,"cloneSymbol");Mh.exports=HU});var Gh=p((wV,Bh)=>{"use strict";var YU=Sn(),zU=Lh(),JU=Uh(),XU=Nh(),ZU=ps(),eq="[object Boolean]",tq="[object Date]",rq="[object Map]",aq="[object Number]",nq="[object RegExp]",oq="[object Set]",sq="[object String]",iq="[object Symbol]",uq="[object ArrayBuffer]",cq="[object DataView]",pq="[object Float32Array]",lq="[object Float64Array]",dq="[object Int8Array]",fq="[object Int16Array]",mq="[object Int32Array]",gq="[object Uint8Array]",hq="[object Uint8ClampedArray]",yq="[object Uint16Array]",Aq="[object Uint32Array]";function bq(e,t,r){var n=e.constructor;switch(t){case uq:return YU(e);case eq:case tq:return new n(+e);case cq:return zU(e,r);case pq:case lq:case dq:case fq:case mq:case gq:case hq:case yq:case Aq:return ZU(e,r);case rq:return new n;case aq:case sq:return new n(e);case nq:return JU(e);case oq:return new n;case iq:return XU(e)}}a(bq,"initCloneByTag");Bh.exports=bq});var Wh=p((EV,Fh)=>{"use strict";var Iq=Pr(),Sq=ke(),wq="[object Map]";function Tq(e){return Sq(e)&&Iq(e)==wq}a(Tq,"baseIsMap");Fh.exports=Tq});var Kh=p((RV,Qh)=>{"use strict";var Eq=Wh(),vq=En(),$h=vn(),jh=$h&&$h.isMap,Rq=jh?vq(jh):Eq;Qh.exports=Rq});var Hh=p((_V,Vh)=>{"use strict";var _q=Pr(),xq=ke(),Cq="[object Set]";function Oq(e){return xq(e)&&_q(e)==Cq}a(Oq,"baseIsSet");Vh.exports=Oq});var Xh=p((CV,Jh)=>{"use strict";var Lq=Hh(),Pq=En(),Yh=vn(),zh=Yh&&Yh.isSet,Uq=zh?Pq(zh):Lq;Jh.exports=Uq});var Qi=p((OV,ry)=>{"use strict";var qq=ya(),Dq=to(),kq=hs(),Mq=Di(),Nq=rh(),Bq=us(),Gq=yr(),Fq=ch(),Wq=dh(),$q=Bi(),jq=hh(),Qq=Pr(),Kq=Ch(),Vq=Gh(),Hq=ds(),Yq=Ee(),zq=wa(),Jq=Kh(),Xq=je(),Zq=Xh(),eD=Or(),tD=Sr(),rD=1,aD=2,nD=4,Zh="[object Arguments]",oD="[object Array]",sD="[object Boolean]",iD="[object Date]",uD="[object Error]",ey="[object Function]",cD="[object GeneratorFunction]",pD="[object Map]",lD="[object Number]",ty="[object Object]",dD="[object RegExp]",fD="[object Set]",mD="[object String]",gD="[object Symbol]",hD="[object WeakMap]",yD="[object ArrayBuffer]",AD="[object DataView]",bD="[object Float32Array]",ID="[object Float64Array]",SD="[object Int8Array]",wD="[object Int16Array]",TD="[object Int32Array]",ED="[object Uint8Array]",vD="[object Uint8ClampedArray]",RD="[object Uint16Array]",_D="[object Uint32Array]",V={};V[Zh]=V[oD]=V[yD]=V[AD]=V[sD]=V[iD]=V[bD]=V[ID]=V[SD]=V[wD]=V[TD]=V[pD]=V[lD]=V[ty]=V[dD]=V[fD]=V[mD]=V[gD]=V[ED]=V[vD]=V[RD]=V[_D]=!0;V[uD]=V[ey]=V[hD]=!1;function oo(e,t,r,n,o,s){var i,u=t&rD,c=t&aD,f=t&nD;if(r&&(i=o?r(e,n,o,s):r(e)),i!==void 0)return i;if(!Xq(e))return e;var g=Yq(e);if(g){if(i=Kq(e),!u)return Gq(e,i)}else{var h=Qq(e),y=h==ey||h==cD;if(zq(e))return Bq(e,u);if(h==ty||h==Zh||y&&!o){if(i=c||y?{}:Hq(e),!u)return c?Wq(e,Nq(i,e)):Fq(e,Mq(i,e))}else{if(!V[h])return o?e:{};i=Vq(e,h,u)}}s||(s=new qq);var E=s.get(e);if(E)return E;s.set(e,i),Zq(e)?e.forEach(function(D){i.add(oo(D,t,r,D,e,s))}):Jq(e)&&e.forEach(function(D,C){i.set(C,oo(D,t,r,C,e,s))});var M=f?c?jq:$q:c?tD:eD,k=g?void 0:M(e);return Dq(k||e,function(D,C){k&&(C=D,D=e[C]),kq(i,C,oo(D,t,r,C,e,s))}),i}a(oo,"baseClone");ry.exports=oo});var ny=p((PV,ay)=>{"use strict";var xD=Qi(),CD=4;function OD(e){return xD(e,CD)}a(OD,"clone");ay.exports=OD});var sy=p((qV,oy)=>{"use strict";var LD=ao(),PD=8;function Ki(e,t,r){t=r?void 0:t;var n=LD(e,PD,void 0,void 0,void 0,void 0,void 0,t);return n.placeholder=Ki.placeholder,n}a(Ki,"curry");Ki.placeholder={};oy.exports=Ki});var uy=p((kV,iy)=>{"use strict";var UD=Pt(),qD=ke(),DD=fs(),kD="[object DOMException]",MD="[object Error]";function ND(e){if(!qD(e))return!1;var t=UD(e);return t==MD||t==kD||typeof e.message=="string"&&typeof e.name=="string"&&!DD(e)}a(ND,"isError");iy.exports=ND});var py=p((NV,cy)=>{"use strict";var BD=Pr(),GD=ke(),FD="[object WeakMap]";function WD(e){return GD(e)&&BD(e)==FD}a(WD,"isWeakMap");cy.exports=WD});var dy=p((GV,ly)=>{"use strict";function $D(e,t){for(var r=-1,n=e==null?0:e.length;++r<n;)if(t(e[r],r,e))return!0;return!1}a($D,"arraySome");ly.exports=$D});var Vi=p((WV,fy)=>{"use strict";var jD=Zo(),QD=dy(),KD=ts(),VD=1,HD=2;function YD(e,t,r,n,o,s){var i=r&VD,u=e.length,c=t.length;if(u!=c&&!(i&&c>u))return!1;var f=s.get(e),g=s.get(t);if(f&&g)return f==t&&g==e;var h=-1,y=!0,E=r&HD?new jD:void 0;for(s.set(e,t),s.set(t,e);++h<u;){var M=e[h],k=t[h];if(n)var D=i?n(k,M,h,t,e,s):n(M,k,h,e,t,s);if(D!==void 0){if(D)continue;y=!1;break}if(E){if(!QD(t,function(C,W){if(!KD(E,W)&&(M===C||o(M,C,r,n,s)))return E.push(W)})){y=!1;break}}else if(!(M===k||o(M,k,r,n,s))){y=!1;break}}return s.delete(e),s.delete(t),y}a(YD,"equalArrays");fy.exports=YD});var gy=p((jV,my)=>{"use strict";function zD(e){var t=-1,r=Array(e.size);return e.forEach(function(n,o){r[++t]=[o,n]}),r}a(zD,"mapToArray");my.exports=zD});var Iy=p((KV,by)=>{"use strict";var hy=Qt(),yy=cs(),JD=lr(),XD=Vi(),ZD=gy(),ek=bn(),tk=1,rk=2,ak="[object Boolean]",nk="[object Date]",ok="[object Error]",sk="[object Map]",ik="[object Number]",uk="[object RegExp]",ck="[object Set]",pk="[object String]",lk="[object Symbol]",dk="[object ArrayBuffer]",fk="[object DataView]",Ay=hy?hy.prototype:void 0,Hi=Ay?Ay.valueOf:void 0;function mk(e,t,r,n,o,s,i){switch(r){case fk:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case dk:return!(e.byteLength!=t.byteLength||!s(new yy(e),new yy(t)));case ak:case nk:case ik:return JD(+e,+t);case ok:return e.name==t.name&&e.message==t.message;case uk:case pk:return e==t+"";case sk:var u=ZD;case ck:var c=n&tk;if(u||(u=ek),e.size!=t.size&&!c)return!1;var f=i.get(e);if(f)return f==t;n|=rk,i.set(e,t);var g=XD(u(e),u(t),n,o,s,i);return i.delete(e),g;case lk:if(Hi)return Hi.call(e)==Hi.call(t)}return!1}a(mk,"equalByTag");by.exports=mk});var Ty=p((HV,wy)=>{"use strict";var Sy=Bi(),gk=1,hk=Object.prototype,yk=hk.hasOwnProperty;function Ak(e,t,r,n,o,s){var i=r&gk,u=Sy(e),c=u.length,f=Sy(t),g=f.length;if(c!=g&&!i)return!1;for(var h=c;h--;){var y=u[h];if(!(i?y in t:yk.call(t,y)))return!1}var E=s.get(e),M=s.get(t);if(E&&M)return E==t&&M==e;var k=!0;s.set(e,t),s.set(t,e);for(var D=i;++h<c;){y=u[h];var C=e[y],W=t[y];if(n)var ye=i?n(W,C,y,t,e,s):n(C,W,y,e,t,s);if(!(ye===void 0?C===W||o(C,W,r,n,s):ye)){k=!1;break}D||(D=y=="constructor")}if(k&&!D){var ie=e.constructor,Ye=t.constructor;ie!=Ye&&"constructor"in e&&"constructor"in t&&!(typeof ie=="function"&&ie instanceof ie&&typeof Ye=="function"&&Ye instanceof Ye)&&(k=!1)}return s.delete(e),s.delete(t),k}a(Ak,"equalObjects");wy.exports=Ak});var Ly=p((zV,Oy)=>{"use strict";var Yi=ya(),bk=Vi(),Ik=Iy(),Sk=Ty(),Ey=Pr(),vy=Ee(),Ry=wa(),wk=Rn(),Tk=1,_y="[object Arguments]",xy="[object Array]",so="[object Object]",Ek=Object.prototype,Cy=Ek.hasOwnProperty;function vk(e,t,r,n,o,s){var i=vy(e),u=vy(t),c=i?xy:Ey(e),f=u?xy:Ey(t);c=c==_y?so:c,f=f==_y?so:f;var g=c==so,h=f==so,y=c==f;if(y&&Ry(e)){if(!Ry(t))return!1;i=!0,g=!1}if(y&&!g)return s||(s=new Yi),i||wk(e)?bk(e,t,r,n,o,s):Ik(e,t,c,r,n,o,s);if(!(r&Tk)){var E=g&&Cy.call(e,"__wrapped__"),M=h&&Cy.call(t,"__wrapped__");if(E||M){var k=E?e.value():e,D=M?t.value():t;return s||(s=new Yi),o(k,D,r,n,s)}}return y?(s||(s=new Yi),Sk(e,t,r,n,o,s)):!1}a(vk,"baseIsEqualDeep");Oy.exports=vk});var zi=p((XV,qy)=>{"use strict";var Rk=Ly(),Py=ke();function Uy(e,t,r,n,o){return e===t?!0:e==null||t==null||!Py(e)&&!Py(t)?e!==e&&t!==t:Rk(e,t,r,n,Uy,o)}a(Uy,"baseIsEqual");qy.exports=Uy});var ky=p((eH,Dy)=>{"use strict";var _k=ya(),xk=zi(),Ck=1,Ok=2;function Lk(e,t,r,n){var o=r.length,s=o,i=!n;if(e==null)return!s;for(e=Object(e);o--;){var u=r[o];if(i&&u[2]?u[1]!==e[u[0]]:!(u[0]in e))return!1}for(;++o<s;){u=r[o];var c=u[0],f=e[c],g=u[1];if(i&&u[2]){if(f===void 0&&!(c in e))return!1}else{var h=new _k;if(n)var y=n(f,g,c,e,t,h);if(!(y===void 0?xk(g,f,Ck|Ok,n,h):y))return!1}}return!0}a(Lk,"baseIsMatch");Dy.exports=Lk});var Ji=p((rH,My)=>{"use strict";var Pk=je();function Uk(e){return e===e&&!Pk(e)}a(Uk,"isStrictComparable");My.exports=Uk});var By=p((nH,Ny)=>{"use strict";var qk=Ji(),Dk=Or();function kk(e){for(var t=Dk(e),r=t.length;r--;){var n=t[r],o=e[n];t[r]=[n,o,qk(o)]}return t}a(kk,"getMatchData");Ny.exports=kk});var Xi=p((sH,Gy)=>{"use strict";function Mk(e,t){return function(r){return r==null?!1:r[e]===t&&(t!==void 0||e in Object(r))}}a(Mk,"matchesStrictComparable");Gy.exports=Mk});var Wy=p((uH,Fy)=>{"use strict";var Nk=ky(),Bk=By(),Gk=Xi();function Fk(e){var t=Bk(e);return t.length==1&&t[0][2]?Gk(t[0][0],t[0][1]):function(r){return r===e||Nk(r,e,t)}}a(Fk,"baseMatches");Fy.exports=Fk});var io=p((pH,$y)=>{"use strict";var Wk=Ee(),$k=Cr(),jk=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Qk=/^\w*$/;function Kk(e,t){if(Wk(e))return!1;var r=typeof e;return r=="number"||r=="symbol"||r=="boolean"||e==null||$k(e)?!0:Qk.test(e)||!jk.test(e)||t!=null&&e in Object(t)}a(Kk,"isKey");$y.exports=Kk});var Ky=p((dH,Qy)=>{"use strict";var jy=yn(),Vk="Expected a function";function Zi(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(Vk);var r=a(function(){var n=arguments,o=t?t.apply(this,n):n[0],s=r.cache;if(s.has(o))return s.get(o);var i=e.apply(this,n);return r.cache=s.set(o,i)||s,i},"memoized");return r.cache=new(Zi.Cache||jy),r}a(Zi,"memoize");Zi.Cache=jy;Qy.exports=Zi});var Hy=p((mH,Vy)=>{"use strict";var Hk=Ky(),Yk=500;function zk(e){var t=Hk(e,function(n){return r.size===Yk&&r.clear(),n}),r=t.cache;return t}a(zk,"memoizeCapped");Vy.exports=zk});var eu=p((hH,Yy)=>{"use strict";var Jk=Hy(),Xk=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Zk=/\\(\\)?/g,eM=Jk(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(Xk,function(r,n,o,s){t.push(o?s.replace(Zk,"$1"):n||r)}),t});Yy.exports=eM});var tu=p((yH,zy)=>{"use strict";function tM(e,t){for(var r=-1,n=e==null?0:e.length,o=Array(n);++r<n;)o[r]=t(e[r],r,e);return o}a(tM,"arrayMap");zy.exports=tM});var rA=p((bH,tA)=>{"use strict";var Jy=Qt(),rM=tu(),aM=Ee(),nM=Cr(),oM=1/0,Xy=Jy?Jy.prototype:void 0,Zy=Xy?Xy.toString:void 0;function eA(e){if(typeof e=="string")return e;if(aM(e))return rM(e,eA)+"";if(nM(e))return Zy?Zy.call(e):"";var t=e+"";return t=="0"&&1/e==-oM?"-0":t}a(eA,"baseToString");tA.exports=eA});var ru=p((SH,aA)=>{"use strict";var sM=rA();function iM(e){return e==null?"":sM(e)}a(iM,"toString");aA.exports=iM});var au=p((TH,nA)=>{"use strict";var uM=Ee(),cM=io(),pM=eu(),lM=ru();function dM(e,t){return uM(e)?e:cM(e,t)?[e]:pM(lM(e))}a(dM,"castPath");nA.exports=dM});var Ur=p((vH,oA)=>{"use strict";var fM=Cr(),mM=1/0;function gM(e){if(typeof e=="string"||fM(e))return e;var t=e+"";return t=="0"&&1/e==-mM?"-0":t}a(gM,"toKey");oA.exports=gM});var nu=p((_H,sA)=>{"use strict";var hM=au(),yM=Ur();function AM(e,t){t=hM(t,e);for(var r=0,n=t.length;e!=null&&r<n;)e=e[yM(t[r++])];return r&&r==n?e:void 0}a(AM,"baseGet");sA.exports=AM});var uA=p((CH,iA)=>{"use strict";var bM=nu();function IM(e,t,r){var n=e==null?void 0:bM(e,t);return n===void 0?r:n}a(IM,"get");iA.exports=IM});var pA=p((LH,cA)=>{"use strict";function SM(e,t){return e!=null&&t in Object(e)}a(SM,"baseHasIn");cA.exports=SM});var dA=p((UH,lA)=>{"use strict";var wM=au(),TM=pa(),EM=Ee(),vM=va(),RM=In(),_M=Ur();function xM(e,t,r){t=wM(t,e);for(var n=-1,o=t.length,s=!1;++n<o;){var i=_M(t[n]);if(!(s=e!=null&&r(e,i)))break;e=e[i]}return s||++n!=o?s:(o=e==null?0:e.length,!!o&&RM(o)&&vM(i,o)&&(EM(e)||TM(e)))}a(xM,"hasPath");lA.exports=xM});var mA=p((DH,fA)=>{"use strict";var CM=pA(),OM=dA();function LM(e,t){return e!=null&&OM(e,t,CM)}a(LM,"hasIn");fA.exports=LM});var hA=p((MH,gA)=>{"use strict";var PM=zi(),UM=uA(),qM=mA(),DM=io(),kM=Ji(),MM=Xi(),NM=Ur(),BM=1,GM=2;function FM(e,t){return DM(e)&&kM(t)?MM(NM(e),t):function(r){var n=UM(r,e);return n===void 0&&n===t?qM(r,e):PM(t,n,BM|GM)}}a(FM,"baseMatchesProperty");gA.exports=FM});var AA=p((BH,yA)=>{"use strict";function WM(e){return function(t){return t?.[e]}}a(WM,"baseProperty");yA.exports=WM});var IA=p((FH,bA)=>{"use strict";var $M=nu();function jM(e){return function(t){return $M(t,e)}}a(jM,"basePropertyDeep");bA.exports=jM});var wA=p(($H,SA)=>{"use strict";var QM=AA(),KM=IA(),VM=io(),HM=Ur();function YM(e){return VM(e)?QM(HM(e)):KM(e)}a(YM,"property");SA.exports=YM});var ou=p((QH,TA)=>{"use strict";var zM=Wy(),JM=hA(),XM=la(),ZM=Ee(),eN=wA();function tN(e){return typeof e=="function"?e:e==null?XM:typeof e=="object"?ZM(e)?JM(e[0],e[1]):zM(e):eN(e)}a(tN,"baseIteratee");TA.exports=tN});var vA=p((VH,EA)=>{"use strict";var rN=Qi(),aN=ou(),nN=1;function oN(e){return aN(typeof e=="function"?e:rN(e,nN))}a(oN,"iteratee");EA.exports=oN});var _A=p((YH,RA)=>{"use strict";var sN=Ko();function iN(e){var t=e==null?0:e.length;return t?sN(e,1):[]}a(iN,"flatten");RA.exports=iN});var CA=p((JH,xA)=>{"use strict";var uN=_A(),cN=Vo(),pN=gn();function lN(e){return pN(cN(e,void 0,uN),e+"")}a(lN,"flatRest");xA.exports=lN});var LA=p((ZH,OA)=>{"use strict";var dN=ao(),fN=CA(),mN=256,gN=fN(function(e,t){return dN(e,mN,void 0,void 0,void 0,t)});OA.exports=gN});var UA=p((eY,PA)=>{"use strict";var hN=tu(),yN=yr(),AN=Ee(),bN=Cr(),IN=eu(),SN=Ur(),wN=ru();function TN(e){return AN(e)?hN(e,SN):bN(e)?[e]:yN(IN(wN(e)))}a(TN,"toPath");PA.exports=TN});var DA=p((rY,qA)=>{"use strict";qA.exports={ary:Yg(),assign:Di(),clone:ny(),curry:sy(),forEach:to(),isArray:Ee(),isError:uy(),isFunction:da(),isWeakMap:py(),iteratee:vA(),keys:qi(),rearg:LA(),toInteger:Oi(),toPath:UA()}});var MA=p((aY,kA)=>{"use strict";var EN=Em(),vN=DA();function RN(e,t,r){return EN(vN,e,t,r)}a(RN,"convert");kA.exports=RN});var su=p((oY,BA)=>{"use strict";var _N=MA(),NA=_N("merge",As());NA.placeholder=fi();BA.exports=NA});var jA=p((iu,uu)=>{"use strict";(function(e,t){typeof iu=="object"&&typeof uu<"u"?uu.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs=t()})(iu,function(){"use strict";var e=1e3,t=6e4,r=36e5,n="millisecond",o="second",s="minute",i="hour",u="day",c="week",f="month",g="quarter",h="year",y="date",E="Invalid Date",M=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,k=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,D={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(O){var w=["th","st","nd","rd"],A=O%100;return"["+O+(w[(A-20)%10]||w[A]||w[0])+"]"}},C=a(function(O,w,A){var _=String(O);return!_||_.length>=w?O:""+Array(w+1-_.length).join(A)+O},"m"),W={s:C,z:function(O){var w=-O.utcOffset(),A=Math.abs(w),_=Math.floor(A/60),S=A%60;return(w<=0?"+":"-")+C(_,2,"0")+":"+C(S,2,"0")},m:a(function O(w,A){if(w.date()<A.date())return-O(A,w);var _=12*(A.year()-w.year())+(A.month()-w.month()),S=w.clone().add(_,f),U=A-S<0,P=w.clone().add(_+(U?-1:1),f);return+(-(_+(A-S)/(U?S-P:P-S))||0)},"t"),a:function(O){return O<0?Math.ceil(O)||0:Math.floor(O)},p:function(O){return{M:f,y:h,w:c,d:u,D:y,h:i,m:s,s:o,ms:n,Q:g}[O]||String(O||"").toLowerCase().replace(/s$/,"")},u:function(O){return O===void 0}},ye="en",ie={};ie[ye]=D;var Ye="$isDayjsObject",nt=a(function(O){return O instanceof Gt||!(!O||!O[Ye])},"S"),ot=a(function O(w,A,_){var S;if(!w)return ye;if(typeof w=="string"){var U=w.toLowerCase();ie[U]&&(S=U),A&&(ie[U]=A,S=U);var P=w.split("-");if(!S&&P.length>1)return O(P[0])}else{var $=w.name;ie[$]=w,S=$}return!_&&S&&(ye=S),S||!_&&ye},"t"),Y=a(function(O,w){if(nt(O))return O.clone();var A=typeof w=="object"?w:{};return A.date=O,A.args=arguments,new Gt(A)},"O"),G=W;G.l=ot,G.i=nt,G.w=function(O,w){return Y(O,{locale:w.$L,utc:w.$u,x:w.$x,$offset:w.$offset})};var Gt=function(){function O(A){this.$L=ot(A.locale,null,!0),this.parse(A),this.$x=this.$x||A.x||{},this[Ye]=!0}a(O,"M");var w=O.prototype;return w.parse=function(A){this.$d=function(_){var S=_.date,U=_.utc;if(S===null)return new Date(NaN);if(G.u(S))return new Date;if(S instanceof Date)return new Date(S);if(typeof S=="string"&&!/Z$/i.test(S)){var P=S.match(M);if(P){var $=P[2]-1||0,Z=(P[7]||"0").substring(0,3);return U?new Date(Date.UTC(P[1],$,P[3]||1,P[4]||0,P[5]||0,P[6]||0,Z)):new Date(P[1],$,P[3]||1,P[4]||0,P[5]||0,P[6]||0,Z)}}return new Date(S)}(A),this.init()},w.init=function(){var A=this.$d;this.$y=A.getFullYear(),this.$M=A.getMonth(),this.$D=A.getDate(),this.$W=A.getDay(),this.$H=A.getHours(),this.$m=A.getMinutes(),this.$s=A.getSeconds(),this.$ms=A.getMilliseconds()},w.$utils=function(){return G},w.isValid=function(){return this.$d.toString()!==E},w.isSame=function(A,_){var S=Y(A);return this.startOf(_)<=S&&S<=this.endOf(_)},w.isAfter=function(A,_){return Y(A)<this.startOf(_)},w.isBefore=function(A,_){return this.endOf(_)<Y(A)},w.$g=function(A,_,S){return G.u(A)?this[_]:this.set(S,A)},w.unix=function(){return Math.floor(this.valueOf()/1e3)},w.valueOf=function(){return this.$d.getTime()},w.startOf=function(A,_){var S=this,U=!!G.u(_)||_,P=G.p(A),$=a(function(I,R){var q=G.w(S.$u?Date.UTC(S.$y,R,I):new Date(S.$y,R,I),S);return U?q:q.endOf(u)},"l"),Z=a(function(I,R){return G.w(S.toDate()[I].apply(S.toDate("s"),(U?[0,0,0,0]:[23,59,59,999]).slice(R)),S)},"$"),ne=this.$W,pe=this.$M,K=this.$D,Ge="set"+(this.$u?"UTC":"");switch(P){case h:return U?$(1,0):$(31,11);case f:return U?$(1,pe):$(0,pe+1);case c:var v=this.$locale().weekStart||0,b=(ne<v?ne+7:ne)-v;return $(U?K-b:K+(6-b),pe);case u:case y:return Z(Ge+"Hours",0);case i:return Z(Ge+"Minutes",1);case s:return Z(Ge+"Seconds",2);case o:return Z(Ge+"Milliseconds",3);default:return this.clone()}},w.endOf=function(A){return this.startOf(A,!1)},w.$set=function(A,_){var S,U=G.p(A),P="set"+(this.$u?"UTC":""),$=(S={},S[u]=P+"Date",S[y]=P+"Date",S[f]=P+"Month",S[h]=P+"FullYear",S[i]=P+"Hours",S[s]=P+"Minutes",S[o]=P+"Seconds",S[n]=P+"Milliseconds",S)[U],Z=U===u?this.$D+(_-this.$W):_;if(U===f||U===h){var ne=this.clone().set(y,1);ne.$d[$](Z),ne.init(),this.$d=ne.set(y,Math.min(this.$D,ne.daysInMonth())).$d}else $&&this.$d[$](Z);return this.init(),this},w.set=function(A,_){return this.clone().$set(A,_)},w.get=function(A){return this[G.p(A)]()},w.add=function(A,_){var S,U=this;A=Number(A);var P=G.p(_),$=a(function(pe){var K=Y(U);return G.w(K.date(K.date()+Math.round(pe*A)),U)},"y");if(P===f)return this.set(f,this.$M+A);if(P===h)return this.set(h,this.$y+A);if(P===u)return $(1);if(P===c)return $(7);var Z=(S={},S[s]=t,S[i]=r,S[o]=e,S)[P]||1,ne=this.$d.getTime()+A*Z;return G.w(ne,this)},w.subtract=function(A,_){return this.add(-1*A,_)},w.format=function(A){var _=this,S=this.$locale();if(!this.isValid())return S.invalidDate||E;var U=A||"YYYY-MM-DDTHH:mm:ssZ",P=G.z(this),$=this.$H,Z=this.$m,ne=this.$M,pe=S.weekdays,K=S.months,Ge=S.meridiem,v=a(function(R,q,oe,ve){return R&&(R[q]||R(_,U))||oe[q].slice(0,ve)},"h"),b=a(function(R){return G.s($%12||12,R,"0")},"d"),I=Ge||function(R,q,oe){var ve=R<12?"AM":"PM";return oe?ve.toLowerCase():ve};return U.replace(k,function(R,q){return q||function(oe){switch(oe){case"YY":return String(_.$y).slice(-2);case"YYYY":return G.s(_.$y,4,"0");case"M":return ne+1;case"MM":return G.s(ne+1,2,"0");case"MMM":return v(S.monthsShort,ne,K,3);case"MMMM":return v(K,ne);case"D":return _.$D;case"DD":return G.s(_.$D,2,"0");case"d":return String(_.$W);case"dd":return v(S.weekdaysMin,_.$W,pe,2);case"ddd":return v(S.weekdaysShort,_.$W,pe,3);case"dddd":return pe[_.$W];case"H":return String($);case"HH":return G.s($,2,"0");case"h":return b(1);case"hh":return b(2);case"a":return I($,Z,!0);case"A":return I($,Z,!1);case"m":return String(Z);case"mm":return G.s(Z,2,"0");case"s":return String(_.$s);case"ss":return G.s(_.$s,2,"0");case"SSS":return G.s(_.$ms,3,"0");case"Z":return P}return null}(R)||P.replace(":","")})},w.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},w.diff=function(A,_,S){var U,P=this,$=G.p(_),Z=Y(A),ne=(Z.utcOffset()-this.utcOffset())*t,pe=this-Z,K=a(function(){return G.m(P,Z)},"D");switch($){case h:U=K()/12;break;case f:U=K();break;case g:U=K()/3;break;case c:U=(pe-ne)/6048e5;break;case u:U=(pe-ne)/864e5;break;case i:U=pe/r;break;case s:U=pe/t;break;case o:U=pe/e;break;default:U=pe}return S?U:G.a(U)},w.daysInMonth=function(){return this.endOf(f).$D},w.$locale=function(){return ie[this.$L]},w.locale=function(A,_){if(!A)return this.$L;var S=this.clone(),U=ot(A,_,!0);return U&&(S.$L=U),S},w.clone=function(){return G.w(this.$d,this)},w.toDate=function(){return new Date(this.valueOf())},w.toJSON=function(){return this.isValid()?this.toISOString():null},w.toISOString=function(){return this.$d.toISOString()},w.toString=function(){return this.$d.toUTCString()},O}(),Ya=Gt.prototype;return Y.prototype=Ya,[["$ms",n],["$s",o],["$m",s],["$H",i],["$W",u],["$M",f],["$y",h],["$D",y]].forEach(function(O){Ya[O[1]]=function(w){return this.$g(w,O[0],O[1])}}),Y.extend=function(O,w){return O.$i||(O(w,Gt,Y),O.$i=!0),Y},Y.locale=ot,Y.isDayjs=nt,Y.unix=function(O){return Y(1e3*O)},Y.en=ie[ye],Y.Ls=ie,Y.p={},Y})});var Wb=p((w4,Fb)=>{"use strict";function YN(e,t,r,n){for(var o=-1,s=e==null?0:e.length;++o<s;){var i=e[o];t(n,i,r(i),e)}return n}a(YN,"arrayAggregator");Fb.exports=YN});var jb=p((E4,$b)=>{"use strict";var zN=is(),JN=Or();function XN(e,t){return e&&zN(e,t,JN)}a(XN,"baseForOwn");$b.exports=XN});var Kb=p((R4,Qb)=>{"use strict";var ZN=mr();function eB(e,t){return function(r,n){if(r==null)return r;if(!ZN(r))return e(r,n);for(var o=r.length,s=t?o:-1,i=Object(r);(t?s--:++s<o)&&n(i[s],s,i)!==!1;);return r}}a(eB,"createBaseEach");Qb.exports=eB});var Hb=p((x4,Vb)=>{"use strict";var tB=jb(),rB=Kb(),aB=rB(tB);Vb.exports=aB});var zb=p((C4,Yb)=>{"use strict";var nB=Hb();function oB(e,t,r,n){return nB(e,function(o,s,i){t(n,o,r(o),i)}),n}a(oB,"baseAggregator");Yb.exports=oB});var Xb=p((L4,Jb)=>{"use strict";var sB=Wb(),iB=zb(),uB=ou(),cB=Ee();function pB(e,t){return function(r,n){var o=cB(r)?sB:iB,s=t?t():{};return o(r,e,uB(n,2),s)}}a(pB,"createAggregator");Jb.exports=pB});var eI=p((U4,Zb)=>{"use strict";var lB=Aa(),dB=Xb(),fB=Object.prototype,mB=fB.hasOwnProperty,gB=dB(function(e,t,r){mB.call(e,r)?e[r].push(t):lB(e,r,[t])});Zb.exports=gB});var NB={};x(NB,{Method:()=>Eo,ai:()=>Vu,api:()=>Su,auditLogs:()=>kt,automations:()=>jn,backups:()=>Ne,branding:()=>Pn,constants:()=>aa,environmentVariables:()=>mt,features:()=>Ze,groups:()=>re,init:()=>Am,licensing:()=>ct,logger:()=>Zt,mappers:()=>ce,middleware:()=>gu,plugins:()=>Qn,publicApi:()=>Hn,quotas:()=>ft,scimGroups:()=>qr,scimUsers:()=>qe,sdk:()=>cu,users:()=>Fn,utils:()=>cr});module.exports=UI(NB);var Eo=(s=>(s.POST="POST",s.GET="GET",s.PATCH="PATCH",s.DELETE="DELETE",s.PUT="PUT",s))(Eo||{});var cu={};x(cu,{ai:()=>ks,auditLogs:()=>kt,automations:()=>jn,backups:()=>Ne,branding:()=>Pn,environmentVariables:()=>mt,features:()=>Ze,groups:()=>re,init:()=>Am,licensing:()=>ct,logger:()=>Zt,plugins:()=>Qn,publicApi:()=>Hn,quotas:()=>ft,scimGroups:()=>qr,scimUsers:()=>qe,users:()=>Fn,utils:()=>cr});var Pn={};x(Pn,{getBrandingConfig:()=>vx});var Ze={};x(Ze,{checkBackups:()=>xe,checkFeature:()=>On,checkFeatures:()=>Cs,checkSCIM:()=>qs,isAppBuildersEnabled:()=>Ps,isAuditLogsEnabled:()=>Ln,isBackupsEnabled:()=>Os,isBrandingEnabled:()=>Ls,isEnforceableSSO:()=>Lf,isExpandedPublicApiEnabled:()=>It,isPWAEnabled:()=>Ax,isPkceOidcEnabled:()=>Ix,isRecaptchaEnabled:()=>bx,isSSOEnforced:()=>Sx,isSyncAutomationsEnabled:()=>hx,isTriggerAutomationRunEnabled:()=>yx,isUserGroupsEnabled:()=>Us,isViewPermissionEnabled:()=>wx,isViewReadonlyColumnsEnabled:()=>Tx});var bt=require("@budibase/backend-core"),Ae=require("@budibase/types");var ct={};x(ct,{cache:()=>Je,client:()=>Lt,features:()=>ln,getFreeLicense:()=>Rs,getLicense:()=>Es,getLicenseFromKey:()=>vs,keys:()=>xs,offline:()=>_n,quotas:()=>dn});var Je={};x(Je,{getCachedLicense:()=>Cf,invalidate:()=>Of,refresh:()=>Kt});var za=require("@budibase/backend-core");var kr,qI=a(async()=>{kr=await za.RedisClient.init(za.redis.utils.Databases.LICENSES)},"init"),DI=a(async()=>{kr&&await kr.finish()},"shutdown");process.on("exit",async()=>{await DI()});var vo=a(async()=>(kr||await qI(),kr),"getClient");var Lt={};x(Lt,{activateLicenseKey:()=>Fo,getLicense:()=>ir,getLicenseFromKey:()=>Go,triggerQuota:()=>IS});var zu=F(require("node-fetch"));var Ju=require("@budibase/backend-core"),Ro=require("dd-trace"),Xu=require("dd-trace/ext/formats");var _o=class{constructor(t){this.apiCall=t=>async(r="",n={})=>await Ro.tracer.trace(`api.${t}`,async o=>{o.setTag("url",r);let s={...n.headers};s["Content-Type"]||(s["Content-Type"]="application/json",s.Accept="application/json");let i=s["Content-Type"]==="application/json";Ju.logging.correlation.setHeader(s),Ro.tracer.inject(o,Xu.HTTP_HEADERS,s);let u={method:t,body:i?JSON.stringify(n.body):n.body,headers:s,credentials:"include"};return(0,zu.default)(`${this.host}${r}`,u)});this.post=this.apiCall("POST");this.get=this.apiCall("GET");this.patch=this.apiCall("PATCH");this.del=this.apiCall("DELETE");this.put=this.apiCall("PUT");this.host=t}static{a(this,"API")}},xo=_o;var un=require("@budibase/types"),B=require("@budibase/backend-core");var it={};x(it,{bustCache:()=>Lo,getCurrentUsageValues:()=>sc,getQuotaUsage:()=>Ft,setAllUsage:()=>Uo,setAppUsageValue:()=>Po,setUsage:()=>ac,setUsagePerApp:()=>nc,utils:()=>Gr});var Le=require("@budibase/backend-core"),Re=require("@budibase/types");var Gr={};x(Gr,{generateBaseQuotaUsage:()=>Xa,generateNewMonthlyQuotas:()=>Br,generateNewQuotaUsage:()=>Oo,getBreakdownName:()=>en,getCurrentMonthString:()=>xt,getQuotaDocId:()=>Nr,setCurrentMonth:()=>Za,setQuotaReset:()=>Co});var Mr=require("@budibase/backend-core"),Ja=require("@budibase/shared-core"),le=require("@budibase/types");var Nr=a(()=>Mr.context.isSelfHostUsingCloud()?`quota_usage_${Mr.context.getTenantId()}`:Mr.db.StaticDatabases.GLOBAL.docs.usageQuota,"getQuotaDocId"),Zu=a(()=>{let e=new Date;return new Date(e.getFullYear(),e.getMonth()+1,1).toISOString()},"getNextQuotaReset"),Co=a(e=>{e.quotaReset=Zu()},"setQuotaReset"),xt=a(()=>{let e=new Date,t=e.getMonth()+1,r=e.getFullYear();return`${t}-${r}`},"getCurrentMonthString"),Xa=a(()=>({usageQuota:{[le.StaticQuotaName.WORKSPACES]:0,[le.StaticQuotaName.ROWS]:0,[le.StaticQuotaName.PLUGINS]:0,[le.StaticQuotaName.USERS]:0,[le.StaticQuotaName.CREATORS]:0,[le.StaticQuotaName.USER_GROUPS]:0,[le.StaticQuotaName.AI_CUSTOM_CONFIGS]:0,triggers:{}},monthly:{[xt()]:Br()}}),"generateBaseQuotaUsage"),Oo=a(()=>{let e={_id:Nr(),quotaReset:Zu(),...Xa(),apps:{}};return Za(e),e},"generateNewQuotaUsage"),Br=a(()=>({[le.MonthlyQuotaName.QUERIES]:0,[le.MonthlyQuotaName.AUTOMATIONS]:0,[le.MonthlyQuotaName.BUDIBASE_AI_CREDITS]:0,[le.MonthlyQuotaName.ACTIONS]:0,triggers:{}}),"generateNewMonthlyQuotas"),Za=a(e=>{let t=xt();e.monthly||(e.monthly={}),e.monthly[t]||(e.monthly[t]=Br()),e.monthly.current=e.monthly[t]},"setCurrentMonth"),en=a((e,t)=>{if(!(!t||!e))switch(e){case le.MonthlyQuotaName.AUTOMATIONS:return le.BreakdownQuotaName.AUTOMATIONS;case le.MonthlyQuotaName.QUERIES:return(0,Ja.isTableIdOrExternalTableId)(t)?le.BreakdownQuotaName.ROW_QUERIES:(0,Ja.isDatasourceOrDatasourcePlusId)(t)?le.BreakdownQuotaName.DATASOURCE_QUERIES:void 0}},"getBreakdownName");var ec=Le.Duration.fromSeconds(60).toMs(),{Writethrough:tc}=Le.cache.writethrough;function MI(e){return delete e.usageLimits,delete e.usageQuota.automationRuns,delete e.usageQuota.emails,delete e.usageQuota.storage,delete e.usageQuota.views,delete e.usageQuota.publishedApps,delete e.usageQuota.developers,e}a(MI,"clearDeprecated");var tn=a(()=>Le.tenancy.isSelfHostUsingCloud()?new tc(Le.tenancy.getSelfHostCloudDB(),ec):new tc(Le.tenancy.getGlobalDB(),ec),"getDB");async function Lo(e=0){let r=tn(),n=Nr(),o=await r.tryGet(n);o&&o._rev&&await r.remove(n,o._rev).catch(async s=>{if(e<1)return await Lo(e+1);throw s})}a(Lo,"bustCache");var Ft=a(async()=>{let e=tn(),t=await e.tryGet(Nr());if(!t){t=Oo();let{rev:r}=await e.put(t);t._rev=r}return Za(t),Co(t),MI(t)},"getQuotaUsage"),ac=a(async(e,t,r)=>Uo({name:t,type:r,values:{total:e}}),"setUsage"),nc=a(async(e,t,r)=>{let n=tn(),o=await Ft(),s=Object.values(e).reduce((u,c)=>u+c,0);for(let[u,c]of Object.entries(e))o=oc(o,t,r,{total:s,app:c},{appId:u});let i=await n.put(o);return o._rev=i.rev,o},"setUsagePerApp"),NI=a((e,t,r,n)=>{let o=en(t,r);if(!o||!n?.breakdown)return e;e.breakdown||(e.breakdown={}),e.breakdown[o]||(e.breakdown[o]={parent:t,values:{}});let s=e.breakdown[o];return s.values[r]=n.breakdown,e},"setBreakdown"),Po=a((e,t,r,n={},o)=>{let s;try{s=Le.db.getProdWorkspaceID(n?.appId||Le.context.getWorkspaceId())}catch{}if(!s||!o.app||!Re.APP_QUOTA_NAMES.includes(t))return e;e.apps?.[s]||(e.apps={...e.apps,[s]:Xa()});let i=e.apps[s];switch(r){case Re.QuotaUsageType.STATIC:i.usageQuota[t]=o.app;break;case Re.QuotaUsageType.MONTHLY:{let u=xt(),c=t,f=i.monthly[u];f||(i.monthly[u]=Br(),f=i.monthly[u]),f[c]=o.app,Re.BREAKDOWN_QUOTA_NAMES.includes(c)&&n?.id&&(f=NI(f,c,n.id,o));break}}return e},"setAppUsageValue"),rc=a((e,t,r,n)=>{if(!Re.APP_QUOTA_NAMES.includes(r))return{};let o;try{o=Le.db.getProdWorkspaceID(Le.context.getWorkspaceId())}catch{}if(!o||!e.apps||!e.apps[o])return{app:0};let s=e.apps[o];switch(t){case Re.QuotaUsageType.STATIC:if(s.usageQuota?.[r])return{app:s.usageQuota[r]};break;case Re.QuotaUsageType.MONTHLY:{let i=xt(),u=r;if(!s.monthly?.[i]?.[u])break;let c=s.monthly[i],f=c[u],g,h=en(u,n);return h&&n&&c.breakdown?.[h]&&(g=c.breakdown[h]?.values[n]),{app:f,breakdown:g||0}}}return{app:0}},"getAppUsageValue"),BI=a((e,t,r)=>{t.usageQuota.triggers||(t.usageQuota.triggers={}),r&&(t.usageQuota.triggers[e]=r)},"setStaticTriggers"),GI=a((e,t,r,n)=>{r.monthly[t].triggers||(r.monthly[t].triggers={}),n&&(r.monthly[t].triggers[e]=n)},"setMonthlyTriggers"),oc=a((e,t,r,n,o={})=>{if(r===Re.QuotaUsageType.STATIC)t=t,e.usageQuota[t]=n.total,BI(t,e,n.triggers);else if(r===Re.QuotaUsageType.MONTHLY){t=t;let s=xt();e.monthly[s][t]=n.total,GI(t,s,e,n.triggers)}else throw new Error(`Invalid usage type: ${r}`);return Po(e,t,r,o,n)},"coreUsageUpdate"),Uo=a(async e=>{let t=Array.isArray(e)?e:[e],r=tn(),n=await Ft();for(let s of t)n=oc(n,s.name,s.type,s.values,s.opts);let o=await r.put(n,0);return n._rev=o.rev,n},"setAllUsage"),sc=a(async(e,t,r)=>{let n=await Ft(),o=0,s={};switch(e){case Re.QuotaUsageType.STATIC:if(n.usageQuota[t]){let i=t;o=n.usageQuota[i],s=rc(n,e,t,r)}break;case Re.QuotaUsageType.MONTHLY:{let i=xt(),u=t;n.monthly[i][u]&&(o=n.monthly[i][u],s=rc(n,e,t,r));break}default:throw new Error(`Invalid usage type: ${e}`)}return Re.APP_QUOTA_NAMES.includes(t)&&!(s.app||s.breakdown)&&(s.app=s.app||0,s.breakdown=s.breakdown||0),{total:o,app:s.app,breakdown:s.breakdown}},"getCurrentUsageValues");var We={};x(We,{destroy:()=>$I,get:()=>qo,save:()=>WI});var Ct=require("@budibase/backend-core");var FI=a(()=>({_id:Ct.StaticDatabases.GLOBAL.docs.licenseInfo}),"newLicenseInfo"),WI=a(async e=>{let t=await qo();t={...t,...e};let n=await Ct.tenancy.getGlobalDB().put(t);return t._rev=n.rev,t},"save"),qo=a(async()=>{let e=Ct.tenancy.getGlobalDB();try{return await e.get(Ct.StaticDatabases.GLOBAL.docs.licenseInfo)}catch(t){if(t.status===404)return FI();throw t}},"get"),$I=a(async()=>{let e=Ct.tenancy.getGlobalDB(),t=await qo();t&&t._rev&&await e.remove(Ct.StaticDatabases.GLOBAL.docs.licenseInfo,t._rev)},"destroy");var z={};x(z,{bulkSave:()=>tS,destroy:()=>rS,fetch:()=>JI,generateUserGroupID:()=>YI,get:()=>XI,getBulk:()=>ZI,getByName:()=>Do,getGroupUsers:()=>an,getGroupUsersParams:()=>lc,getUserGroupsParams:()=>pc,save:()=>eS});var j=require("@budibase/backend-core");var ze=require("@budibase/types"),nr=require("@budibase/backend-core");async function ic(){let e=nr.sql.designDoc.base("type");e.sql.tables={[ze.AUDIT_LOG_TYPE]:{fields:{appId:ze.SQLiteType.TEXT,event:ze.SQLiteType.TEXT,userId:ze.SQLiteType.TEXT,timestamp:ze.SQLiteType.TEXT,metadata:ze.SQLiteType.TEXT,name:ze.SQLiteType.TEXT,type:ze.SQLiteType.TEXT,fallback:ze.SQLiteType.TEXT}}};let t=nr.context.getAuditLogsDB(),r;try{r=await t.get(nr.SQLITE_DESIGN_DOC_ID),r={...r,...e}}catch(n){if(n.status===404)r=e;else throw n}await t.put(r)}a(ic,"createAuditLogDesignDocSQL");var rn=require("@budibase/backend-core");var{ViewName:jI,SEPARATOR:QI,DocumentType:KI,createView:VI}=rn.db,HI=KI.USER+QI;async function uc(){let e=rn.tenancy.getGlobalDB(),t=`function(doc) {
4
- if (doc._id.startsWith("${HI}") && Array.isArray(doc.userGroups)) {
3
+ `)}a(jO,"insertWrapDetails");og.exports=jO});var ro=p((i2,ig)=>{"use strict";function QO(e,t){for(var r=-1,n=e==null?0:e.length;++r<n&&t(e[r],r,e)!==!1;);return e}a(QO,"arrayEach");ig.exports=QO});var cg=p((c2,ug)=>{"use strict";var KO=ro(),VO=ts(),HO=1,YO=2,zO=8,JO=16,XO=32,ZO=64,eL=128,tL=256,rL=512,aL=[["ary",eL],["bind",HO],["bindKey",YO],["curry",zO],["curryRight",JO],["flip",rL],["partial",XO],["partialRight",ZO],["rearg",tL]];function nL(e,t){return KO(aL,function(r){var n="_."+r[0];t&r[1]&&!VO(e,n)&&e.push(n)}),e.sort()}a(nL,"updateWrapDetails");ug.exports=nL});var vi=p((l2,pg)=>{"use strict";var oL=ng(),sL=sg(),iL=hn(),uL=cg();function cL(e,t,r){var n=t+"";return iL(e,sL(n,uL(oL(n),r)))}a(cL,"setWrapToString");pg.exports=cL});var _i=p((f2,fg)=>{"use strict";var pL=tg(),lL=Ri(),dL=vi(),fL=1,mL=2,gL=4,hL=8,lg=32,dg=64;function yL(e,t,r,n,o,s,i,u,c,f){var g=t&hL,h=g?i:void 0,y=g?void 0:i,E=g?s:void 0,M=g?void 0:s;t|=g?lg:dg,t&=~(g?dg:lg),t&gL||(t&=~(fL|mL));var k=[e,t,o,E,h,M,y,u,c,f],D=r.apply(void 0,k);return pL(e)&&lL(D,k),D.placeholder=n,dL(D,e,t)}a(yL,"createRecurry");fg.exports=yL});var xi=p((g2,mg)=>{"use strict";function AL(e){var t=e;return t.placeholder}a(AL,"getHolder");mg.exports=AL});var hg=p((y2,gg)=>{"use strict";var bL=yr(),IL=Ra(),SL=Math.min;function wL(e,t){for(var r=e.length,n=SL(t.length,r),o=bL(e);n--;){var s=t[n];e[n]=IL(s,r)?o[s]:void 0}return e}a(wL,"reorder");gg.exports=wL});var ao=p((b2,Ag)=>{"use strict";var yg="__lodash_placeholder__";function TL(e,t){for(var r=-1,n=e.length,o=0,s=[];++r<n;){var i=e[r];(i===t||i===yg)&&(e[r]=yg,s[o++]=r)}return s}a(TL,"replaceHolders");Ag.exports=TL});var Ci=p((S2,Sg)=>{"use strict";var EL=Si(),RL=wi(),vL=Nm(),bg=Da(),_L=_i(),xL=xi(),CL=hg(),OL=ao(),LL=_e(),PL=1,UL=2,qL=8,DL=16,kL=128,ML=512;function Ig(e,t,r,n,o,s,i,u,c,f){var g=t&kL,h=t&PL,y=t&UL,E=t&(qL|DL),M=t&ML,k=y?void 0:bg(e);function D(){for(var C=arguments.length,W=Array(C),ye=C;ye--;)W[ye]=arguments[ye];if(E)var ie=xL(D),Ye=vL(W,ie);if(n&&(W=EL(W,n,o,E)),s&&(W=RL(W,s,i,E)),C-=Ye,E&&C<f){var nt=OL(W,ie);return _L(e,t,Ig,D.placeholder,r,W,nt,u,c,f-C)}var ot=h?r:this,Y=y?ot[e]:e;return C=W.length,u?W=CL(W,u):M&&C>1&&W.reverse(),g&&c<C&&(W.length=c),this&&this!==LL&&this instanceof D&&(Y=k||bg(Y)),Y.apply(ot,W)}return a(D,"wrapper"),D}a(Ig,"createHybrid");Sg.exports=Ig});var Tg=p((T2,wg)=>{"use strict";var NL=gn(),BL=Da(),GL=Ci(),FL=_i(),WL=xi(),$L=ao(),jL=_e();function QL(e,t,r){var n=BL(e);function o(){for(var s=arguments.length,i=Array(s),u=s,c=WL(o);u--;)i[u]=arguments[u];var f=s<3&&i[0]!==c&&i[s-1]!==c?[]:$L(i,c);if(s-=f.length,s<r)return FL(e,t,GL,o.placeholder,void 0,i,f,void 0,void 0,r-s);var g=this&&this!==jL&&this instanceof o?n:e;return NL(g,this,i)}return a(o,"wrapper"),o}a(QL,"createCurry");wg.exports=QL});var Rg=p((R2,Eg)=>{"use strict";var KL=gn(),VL=Da(),HL=_e(),YL=1;function zL(e,t,r,n){var o=t&YL,s=VL(e);function i(){for(var u=-1,c=arguments.length,f=-1,g=n.length,h=Array(g+c),y=this&&this!==HL&&this instanceof i?s:e;++f<g;)h[f]=n[f];for(;c--;)h[f++]=arguments[++u];return KL(y,o?r:this,h)}return a(i,"wrapper"),i}a(zL,"createPartial");Eg.exports=zL});var Lg=p((_2,Og)=>{"use strict";var JL=Si(),XL=wi(),vg=ao(),_g="__lodash_placeholder__",Oi=1,ZL=2,eP=4,xg=8,ka=128,Cg=256,tP=Math.min;function rP(e,t){var r=e[1],n=t[1],o=r|n,s=o<(Oi|ZL|ka),i=n==ka&&r==xg||n==ka&&r==Cg&&e[7].length<=t[8]||n==(ka|Cg)&&t[7].length<=t[8]&&r==xg;if(!(s||i))return e;n&Oi&&(e[2]=t[2],o|=r&Oi?0:eP);var u=t[3];if(u){var c=e[3];e[3]=c?JL(c,u,t[4]):u,e[4]=c?vg(e[3],_g):t[4]}return u=t[5],u&&(c=e[5],e[5]=c?XL(c,u,t[6]):u,e[6]=c?vg(e[5],_g):t[6]),u=t[7],u&&(e[7]=u),n&ka&&(e[8]=e[8]==null?t[8]:tP(e[8],t[8])),e[9]==null&&(e[9]=t[9]),e[0]=t[0],e[1]=o,e}a(rP,"mergeData");Og.exports=rP});var Ug=p((C2,Pg)=>{"use strict";var aP=/\s/;function nP(e){for(var t=e.length;t--&&aP.test(e.charAt(t)););return t}a(nP,"trimmedEndIndex");Pg.exports=nP});var Dg=p((L2,qg)=>{"use strict";var oP=Ug(),sP=/^\s+/;function iP(e){return e&&e.slice(0,oP(e)+1).replace(sP,"")}a(iP,"baseTrim");qg.exports=iP});var Cr=p((U2,kg)=>{"use strict";var uP=Pt(),cP=ke(),pP="[object Symbol]";function lP(e){return typeof e=="symbol"||cP(e)&&uP(e)==pP}a(lP,"isSymbol");kg.exports=lP});var Gg=p((D2,Bg)=>{"use strict";var dP=Dg(),Mg=je(),fP=Cr(),Ng=0/0,mP=/^[-+]0x[0-9a-f]+$/i,gP=/^0b[01]+$/i,hP=/^0o[0-7]+$/i,yP=parseInt;function AP(e){if(typeof e=="number")return e;if(fP(e))return Ng;if(Mg(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=Mg(t)?t+"":t}if(typeof e!="string")return e===0?e:+e;e=dP(e);var r=gP.test(e);return r||hP.test(e)?yP(e.slice(2),r?2:8):mP.test(e)?Ng:+e}a(AP,"toNumber");Bg.exports=AP});var $g=p((M2,Wg)=>{"use strict";var bP=Gg(),Fg=1/0,IP=17976931348623157e292;function SP(e){if(!e)return e===0?e:0;if(e=bP(e),e===Fg||e===-Fg){var t=e<0?-1:1;return t*IP}return e===e?e:0}a(SP,"toFinite");Wg.exports=SP});var Li=p((B2,jg)=>{"use strict";var wP=$g();function TP(e){var t=wP(e),r=t%1;return t===t?r?t-r:t:0}a(TP,"toInteger");jg.exports=TP});var no=p((F2,Yg)=>{"use strict";var EP=Ii(),RP=qm(),vP=Tg(),_P=Ci(),xP=Rg(),CP=Ti(),OP=Lg(),LP=Ri(),PP=vi(),Qg=Li(),UP="Expected a function",Kg=1,qP=2,Pi=8,Ui=16,qi=32,Vg=64,Hg=Math.max;function DP(e,t,r,n,o,s,i,u){var c=t&qP;if(!c&&typeof e!="function")throw new TypeError(UP);var f=n?n.length:0;if(f||(t&=~(qi|Vg),n=o=void 0),i=i===void 0?i:Hg(Qg(i),0),u=u===void 0?u:Qg(u),f-=o?o.length:0,t&Vg){var g=n,h=o;n=o=void 0}var y=c?void 0:CP(e),E=[e,t,r,n,o,g,h,s,i,u];if(y&&OP(E,y),e=E[0],t=E[1],r=E[2],n=E[3],o=E[4],u=E[9]=E[9]===void 0?c?0:e.length:Hg(E[9]-f,0),!u&&t&(Pi|Ui)&&(t&=~(Pi|Ui)),!t||t==Kg)var M=RP(e,t,r);else t==Pi||t==Ui?M=vP(e,t,u):(t==qi||t==(Kg|qi))&&!o.length?M=xP(e,t,r,n):M=_P.apply(void 0,E);var k=y?EP:LP;return PP(k(M,E),e,t)}a(DP,"createWrap");Yg.exports=DP});var Jg=p(($2,zg)=>{"use strict";var kP=no(),MP=128;function NP(e,t,r){return t=r?void 0:t,t=e&&t==null?e.length:t,kP(e,MP,void 0,void 0,void 0,void 0,t)}a(NP,"ary");zg.exports=NP});var Zg=p((Q2,Xg)=>{"use strict";var BP=ds(),GP=BP(Object.keys,Object);Xg.exports=GP});var Di=p((K2,eh)=>{"use strict";var FP=En(),WP=Zg(),$P=Object.prototype,jP=$P.hasOwnProperty;function QP(e){if(!FP(e))return WP(e);var t=[];for(var r in Object(e))jP.call(e,r)&&r!="constructor"&&t.push(r);return t}a(QP,"baseKeys");eh.exports=QP});var Or=p((H2,th)=>{"use strict";var KP=As(),VP=Di(),HP=mr();function YP(e){return HP(e)?KP(e):VP(e)}a(YP,"keys");th.exports=YP});var ki=p((z2,rh)=>{"use strict";var zP=Ir(),JP=Or();function XP(e,t){return e&&zP(t,JP(t),e)}a(XP,"baseAssign");rh.exports=XP});var nh=p((X2,ah)=>{"use strict";var ZP=Ir(),eU=Sr();function tU(e,t){return e&&ZP(t,eU(t),e)}a(tU,"baseAssignIn");ah.exports=tU});var sh=p((eV,oh)=>{"use strict";function rU(e,t){for(var r=-1,n=e==null?0:e.length,o=0,s=[];++r<n;){var i=e[r];t(i,r,e)&&(s[o++]=i)}return s}a(rU,"arrayFilter");oh.exports=rU});var Mi=p((rV,ih)=>{"use strict";function aU(){return[]}a(aU,"stubArray");ih.exports=aU});var oo=p((nV,ch)=>{"use strict";var nU=sh(),oU=Mi(),sU=Object.prototype,iU=sU.propertyIsEnumerable,uh=Object.getOwnPropertySymbols,uU=uh?function(e){return e==null?[]:(e=Object(e),nU(uh(e),function(t){return iU.call(e,t)}))}:oU;ch.exports=uU});var lh=p((oV,ph)=>{"use strict";var cU=Ir(),pU=oo();function lU(e,t){return cU(e,pU(e),t)}a(lU,"copySymbols");ph.exports=lU});var Ni=p((iV,dh)=>{"use strict";var dU=mn(),fU=Tn(),mU=oo(),gU=Mi(),hU=Object.getOwnPropertySymbols,yU=hU?function(e){for(var t=[];e;)dU(t,mU(e)),e=fU(e);return t}:gU;dh.exports=yU});var mh=p((uV,fh)=>{"use strict";var AU=Ir(),bU=Ni();function IU(e,t){return AU(e,bU(e),t)}a(IU,"copySymbolsIn");fh.exports=IU});var Bi=p((pV,gh)=>{"use strict";var SU=mn(),wU=Ee();function TU(e,t,r){var n=t(e);return wU(e)?n:SU(n,r(e))}a(TU,"baseGetAllKeys");gh.exports=TU});var Gi=p((dV,hh)=>{"use strict";var EU=Bi(),RU=oo(),vU=Or();function _U(e){return EU(e,vU,RU)}a(_U,"getAllKeys");hh.exports=_U});var Ah=p((mV,yh)=>{"use strict";var xU=Bi(),CU=Ni(),OU=Sr();function LU(e){return xU(e,OU,CU)}a(LU,"getAllKeysIn");yh.exports=LU});var Ih=p((hV,bh)=>{"use strict";var PU=Ut(),UU=_e(),qU=PU(UU,"DataView");bh.exports=qU});var wh=p((yV,Sh)=>{"use strict";var DU=Ut(),kU=_e(),MU=DU(kU,"Promise");Sh.exports=MU});var Pr=p((AV,Ch)=>{"use strict";var Fi=Ih(),Wi=yn(),$i=wh(),ji=as(),Qi=Ai(),xh=Pt(),Lr=zo(),Th="[object Map]",NU="[object Object]",Eh="[object Promise]",Rh="[object Set]",vh="[object WeakMap]",_h="[object DataView]",BU=Lr(Fi),GU=Lr(Wi),FU=Lr($i),WU=Lr(ji),$U=Lr(Qi),Xt=xh;(Fi&&Xt(new Fi(new ArrayBuffer(1)))!=_h||Wi&&Xt(new Wi)!=Th||$i&&Xt($i.resolve())!=Eh||ji&&Xt(new ji)!=Rh||Qi&&Xt(new Qi)!=vh)&&(Xt=a(function(e){var t=xh(e),r=t==NU?e.constructor:void 0,n=r?Lr(r):"";if(n)switch(n){case BU:return _h;case GU:return Th;case FU:return Eh;case WU:return Rh;case $U:return vh}return t},"getTag"));Ch.exports=Xt});var Lh=p((IV,Oh)=>{"use strict";var jU=Object.prototype,QU=jU.hasOwnProperty;function KU(e){var t=e.length,r=new e.constructor(t);return t&&typeof e[0]=="string"&&QU.call(e,"index")&&(r.index=e.index,r.input=e.input),r}a(KU,"initCloneArray");Oh.exports=KU});var Uh=p((wV,Ph)=>{"use strict";var VU=wn();function HU(e,t){var r=t?VU(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.byteLength)}a(HU,"cloneDataView");Ph.exports=HU});var Dh=p((EV,qh)=>{"use strict";var YU=/\w*$/;function zU(e){var t=new e.constructor(e.source,YU.exec(e));return t.lastIndex=e.lastIndex,t}a(zU,"cloneRegExp");qh.exports=zU});var Gh=p((vV,Bh)=>{"use strict";var kh=Qt(),Mh=kh?kh.prototype:void 0,Nh=Mh?Mh.valueOf:void 0;function JU(e){return Nh?Object(Nh.call(e)):{}}a(JU,"cloneSymbol");Bh.exports=JU});var Wh=p((xV,Fh)=>{"use strict";var XU=wn(),ZU=Uh(),eq=Dh(),tq=Gh(),rq=ls(),aq="[object Boolean]",nq="[object Date]",oq="[object Map]",sq="[object Number]",iq="[object RegExp]",uq="[object Set]",cq="[object String]",pq="[object Symbol]",lq="[object ArrayBuffer]",dq="[object DataView]",fq="[object Float32Array]",mq="[object Float64Array]",gq="[object Int8Array]",hq="[object Int16Array]",yq="[object Int32Array]",Aq="[object Uint8Array]",bq="[object Uint8ClampedArray]",Iq="[object Uint16Array]",Sq="[object Uint32Array]";function wq(e,t,r){var n=e.constructor;switch(t){case lq:return XU(e);case aq:case nq:return new n(+e);case dq:return ZU(e,r);case fq:case mq:case gq:case hq:case yq:case Aq:case bq:case Iq:case Sq:return rq(e,r);case oq:return new n;case sq:case cq:return new n(e);case iq:return eq(e);case uq:return new n;case pq:return tq(e)}}a(wq,"initCloneByTag");Fh.exports=wq});var jh=p((OV,$h)=>{"use strict";var Tq=Pr(),Eq=ke(),Rq="[object Map]";function vq(e){return Eq(e)&&Tq(e)==Rq}a(vq,"baseIsMap");$h.exports=vq});var Hh=p((PV,Vh)=>{"use strict";var _q=jh(),xq=Rn(),Qh=vn(),Kh=Qh&&Qh.isMap,Cq=Kh?xq(Kh):_q;Vh.exports=Cq});var zh=p((UV,Yh)=>{"use strict";var Oq=Pr(),Lq=ke(),Pq="[object Set]";function Uq(e){return Lq(e)&&Oq(e)==Pq}a(Uq,"baseIsSet");Yh.exports=Uq});var ey=p((DV,Zh)=>{"use strict";var qq=zh(),Dq=Rn(),Jh=vn(),Xh=Jh&&Jh.isSet,kq=Xh?Dq(Xh):qq;Zh.exports=kq});var Ki=p((kV,ny)=>{"use strict";var Mq=ya(),Nq=ro(),Bq=ys(),Gq=ki(),Fq=nh(),Wq=cs(),$q=yr(),jq=lh(),Qq=mh(),Kq=Gi(),Vq=Ah(),Hq=Pr(),Yq=Lh(),zq=Wh(),Jq=fs(),Xq=Ee(),Zq=wa(),eD=Hh(),tD=je(),rD=ey(),aD=Or(),nD=Sr(),oD=1,sD=2,iD=4,ty="[object Arguments]",uD="[object Array]",cD="[object Boolean]",pD="[object Date]",lD="[object Error]",ry="[object Function]",dD="[object GeneratorFunction]",fD="[object Map]",mD="[object Number]",ay="[object Object]",gD="[object RegExp]",hD="[object Set]",yD="[object String]",AD="[object Symbol]",bD="[object WeakMap]",ID="[object ArrayBuffer]",SD="[object DataView]",wD="[object Float32Array]",TD="[object Float64Array]",ED="[object Int8Array]",RD="[object Int16Array]",vD="[object Int32Array]",_D="[object Uint8Array]",xD="[object Uint8ClampedArray]",CD="[object Uint16Array]",OD="[object Uint32Array]",V={};V[ty]=V[uD]=V[ID]=V[SD]=V[cD]=V[pD]=V[wD]=V[TD]=V[ED]=V[RD]=V[vD]=V[fD]=V[mD]=V[ay]=V[gD]=V[hD]=V[yD]=V[AD]=V[_D]=V[xD]=V[CD]=V[OD]=!0;V[lD]=V[ry]=V[bD]=!1;function so(e,t,r,n,o,s){var i,u=t&oD,c=t&sD,f=t&iD;if(r&&(i=o?r(e,n,o,s):r(e)),i!==void 0)return i;if(!tD(e))return e;var g=Xq(e);if(g){if(i=Yq(e),!u)return $q(e,i)}else{var h=Hq(e),y=h==ry||h==dD;if(Zq(e))return Wq(e,u);if(h==ay||h==ty||y&&!o){if(i=c||y?{}:Jq(e),!u)return c?Qq(e,Fq(i,e)):jq(e,Gq(i,e))}else{if(!V[h])return o?e:{};i=zq(e,h,u)}}s||(s=new Mq);var E=s.get(e);if(E)return E;s.set(e,i),rD(e)?e.forEach(function(D){i.add(so(D,t,r,D,e,s))}):eD(e)&&e.forEach(function(D,C){i.set(C,so(D,t,r,C,e,s))});var M=f?c?Vq:Kq:c?nD:aD,k=g?void 0:M(e);return Nq(k||e,function(D,C){k&&(C=D,D=e[C]),Bq(i,C,so(D,t,r,C,e,s))}),i}a(so,"baseClone");ny.exports=so});var sy=p((NV,oy)=>{"use strict";var LD=Ki(),PD=4;function UD(e){return LD(e,PD)}a(UD,"clone");oy.exports=UD});var uy=p((GV,iy)=>{"use strict";var qD=no(),DD=8;function Vi(e,t,r){t=r?void 0:t;var n=qD(e,DD,void 0,void 0,void 0,void 0,void 0,t);return n.placeholder=Vi.placeholder,n}a(Vi,"curry");Vi.placeholder={};iy.exports=Vi});var py=p((WV,cy)=>{"use strict";var kD=Pt(),MD=ke(),ND=ms(),BD="[object DOMException]",GD="[object Error]";function FD(e){if(!MD(e))return!1;var t=kD(e);return t==GD||t==BD||typeof e.message=="string"&&typeof e.name=="string"&&!ND(e)}a(FD,"isError");cy.exports=FD});var dy=p((jV,ly)=>{"use strict";var WD=Pr(),$D=ke(),jD="[object WeakMap]";function QD(e){return $D(e)&&WD(e)==jD}a(QD,"isWeakMap");ly.exports=QD});var my=p((KV,fy)=>{"use strict";function KD(e,t){for(var r=-1,n=e==null?0:e.length;++r<n;)if(t(e[r],r,e))return!0;return!1}a(KD,"arraySome");fy.exports=KD});var Hi=p((HV,gy)=>{"use strict";var VD=es(),HD=my(),YD=rs(),zD=1,JD=2;function XD(e,t,r,n,o,s){var i=r&zD,u=e.length,c=t.length;if(u!=c&&!(i&&c>u))return!1;var f=s.get(e),g=s.get(t);if(f&&g)return f==t&&g==e;var h=-1,y=!0,E=r&JD?new VD:void 0;for(s.set(e,t),s.set(t,e);++h<u;){var M=e[h],k=t[h];if(n)var D=i?n(k,M,h,t,e,s):n(M,k,h,e,t,s);if(D!==void 0){if(D)continue;y=!1;break}if(E){if(!HD(t,function(C,W){if(!YD(E,W)&&(M===C||o(M,C,r,n,s)))return E.push(W)})){y=!1;break}}else if(!(M===k||o(M,k,r,n,s))){y=!1;break}}return s.delete(e),s.delete(t),y}a(XD,"equalArrays");gy.exports=XD});var yy=p((zV,hy)=>{"use strict";function ZD(e){var t=-1,r=Array(e.size);return e.forEach(function(n,o){r[++t]=[o,n]}),r}a(ZD,"mapToArray");hy.exports=ZD});var wy=p((XV,Sy)=>{"use strict";var Ay=Qt(),by=ps(),ek=lr(),tk=Hi(),rk=yy(),ak=In(),nk=1,ok=2,sk="[object Boolean]",ik="[object Date]",uk="[object Error]",ck="[object Map]",pk="[object Number]",lk="[object RegExp]",dk="[object Set]",fk="[object String]",mk="[object Symbol]",gk="[object ArrayBuffer]",hk="[object DataView]",Iy=Ay?Ay.prototype:void 0,Yi=Iy?Iy.valueOf:void 0;function yk(e,t,r,n,o,s,i){switch(r){case hk:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case gk:return!(e.byteLength!=t.byteLength||!s(new by(e),new by(t)));case sk:case ik:case pk:return ek(+e,+t);case uk:return e.name==t.name&&e.message==t.message;case lk:case fk:return e==t+"";case ck:var u=rk;case dk:var c=n&nk;if(u||(u=ak),e.size!=t.size&&!c)return!1;var f=i.get(e);if(f)return f==t;n|=ok,i.set(e,t);var g=tk(u(e),u(t),n,o,s,i);return i.delete(e),g;case mk:if(Yi)return Yi.call(e)==Yi.call(t)}return!1}a(yk,"equalByTag");Sy.exports=yk});var Ry=p((eH,Ey)=>{"use strict";var Ty=Gi(),Ak=1,bk=Object.prototype,Ik=bk.hasOwnProperty;function Sk(e,t,r,n,o,s){var i=r&Ak,u=Ty(e),c=u.length,f=Ty(t),g=f.length;if(c!=g&&!i)return!1;for(var h=c;h--;){var y=u[h];if(!(i?y in t:Ik.call(t,y)))return!1}var E=s.get(e),M=s.get(t);if(E&&M)return E==t&&M==e;var k=!0;s.set(e,t),s.set(t,e);for(var D=i;++h<c;){y=u[h];var C=e[y],W=t[y];if(n)var ye=i?n(W,C,y,t,e,s):n(C,W,y,e,t,s);if(!(ye===void 0?C===W||o(C,W,r,n,s):ye)){k=!1;break}D||(D=y=="constructor")}if(k&&!D){var ie=e.constructor,Ye=t.constructor;ie!=Ye&&"constructor"in e&&"constructor"in t&&!(typeof ie=="function"&&ie instanceof ie&&typeof Ye=="function"&&Ye instanceof Ye)&&(k=!1)}return s.delete(e),s.delete(t),k}a(Sk,"equalObjects");Ey.exports=Sk});var Uy=p((rH,Py)=>{"use strict";var zi=ya(),wk=Hi(),Tk=wy(),Ek=Ry(),vy=Pr(),_y=Ee(),xy=wa(),Rk=_n(),vk=1,Cy="[object Arguments]",Oy="[object Array]",io="[object Object]",_k=Object.prototype,Ly=_k.hasOwnProperty;function xk(e,t,r,n,o,s){var i=_y(e),u=_y(t),c=i?Oy:vy(e),f=u?Oy:vy(t);c=c==Cy?io:c,f=f==Cy?io:f;var g=c==io,h=f==io,y=c==f;if(y&&xy(e)){if(!xy(t))return!1;i=!0,g=!1}if(y&&!g)return s||(s=new zi),i||Rk(e)?wk(e,t,r,n,o,s):Tk(e,t,c,r,n,o,s);if(!(r&vk)){var E=g&&Ly.call(e,"__wrapped__"),M=h&&Ly.call(t,"__wrapped__");if(E||M){var k=E?e.value():e,D=M?t.value():t;return s||(s=new zi),o(k,D,r,n,s)}}return y?(s||(s=new zi),Ek(e,t,r,n,o,s)):!1}a(xk,"baseIsEqualDeep");Py.exports=xk});var Ji=p((nH,ky)=>{"use strict";var Ck=Uy(),qy=ke();function Dy(e,t,r,n,o){return e===t?!0:e==null||t==null||!qy(e)&&!qy(t)?e!==e&&t!==t:Ck(e,t,r,n,Dy,o)}a(Dy,"baseIsEqual");ky.exports=Dy});var Ny=p((sH,My)=>{"use strict";var Ok=ya(),Lk=Ji(),Pk=1,Uk=2;function qk(e,t,r,n){var o=r.length,s=o,i=!n;if(e==null)return!s;for(e=Object(e);o--;){var u=r[o];if(i&&u[2]?u[1]!==e[u[0]]:!(u[0]in e))return!1}for(;++o<s;){u=r[o];var c=u[0],f=e[c],g=u[1];if(i&&u[2]){if(f===void 0&&!(c in e))return!1}else{var h=new Ok;if(n)var y=n(f,g,c,e,t,h);if(!(y===void 0?Lk(g,f,Pk|Uk,n,h):y))return!1}}return!0}a(qk,"baseIsMatch");My.exports=qk});var Xi=p((uH,By)=>{"use strict";var Dk=je();function kk(e){return e===e&&!Dk(e)}a(kk,"isStrictComparable");By.exports=kk});var Fy=p((pH,Gy)=>{"use strict";var Mk=Xi(),Nk=Or();function Bk(e){for(var t=Nk(e),r=t.length;r--;){var n=t[r],o=e[n];t[r]=[n,o,Mk(o)]}return t}a(Bk,"getMatchData");Gy.exports=Bk});var Zi=p((dH,Wy)=>{"use strict";function Gk(e,t){return function(r){return r==null?!1:r[e]===t&&(t!==void 0||e in Object(r))}}a(Gk,"matchesStrictComparable");Wy.exports=Gk});var jy=p((mH,$y)=>{"use strict";var Fk=Ny(),Wk=Fy(),$k=Zi();function jk(e){var t=Wk(e);return t.length==1&&t[0][2]?$k(t[0][0],t[0][1]):function(r){return r===e||Fk(r,e,t)}}a(jk,"baseMatches");$y.exports=jk});var uo=p((hH,Qy)=>{"use strict";var Qk=Ee(),Kk=Cr(),Vk=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Hk=/^\w*$/;function Yk(e,t){if(Qk(e))return!1;var r=typeof e;return r=="number"||r=="symbol"||r=="boolean"||e==null||Kk(e)?!0:Hk.test(e)||!Vk.test(e)||t!=null&&e in Object(t)}a(Yk,"isKey");Qy.exports=Yk});var Hy=p((AH,Vy)=>{"use strict";var Ky=An(),zk="Expected a function";function eu(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(zk);var r=a(function(){var n=arguments,o=t?t.apply(this,n):n[0],s=r.cache;if(s.has(o))return s.get(o);var i=e.apply(this,n);return r.cache=s.set(o,i)||s,i},"memoized");return r.cache=new(eu.Cache||Ky),r}a(eu,"memoize");eu.Cache=Ky;Vy.exports=eu});var zy=p((IH,Yy)=>{"use strict";var Jk=Hy(),Xk=500;function Zk(e){var t=Jk(e,function(n){return r.size===Xk&&r.clear(),n}),r=t.cache;return t}a(Zk,"memoizeCapped");Yy.exports=Zk});var tu=p((wH,Jy)=>{"use strict";var eM=zy(),tM=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,rM=/\\(\\)?/g,aM=eM(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(tM,function(r,n,o,s){t.push(o?s.replace(rM,"$1"):n||r)}),t});Jy.exports=aM});var ru=p((TH,Xy)=>{"use strict";function nM(e,t){for(var r=-1,n=e==null?0:e.length,o=Array(n);++r<n;)o[r]=t(e[r],r,e);return o}a(nM,"arrayMap");Xy.exports=nM});var nA=p((RH,aA)=>{"use strict";var Zy=Qt(),oM=ru(),sM=Ee(),iM=Cr(),uM=1/0,eA=Zy?Zy.prototype:void 0,tA=eA?eA.toString:void 0;function rA(e){if(typeof e=="string")return e;if(sM(e))return oM(e,rA)+"";if(iM(e))return tA?tA.call(e):"";var t=e+"";return t=="0"&&1/e==-uM?"-0":t}a(rA,"baseToString");aA.exports=rA});var au=p((_H,oA)=>{"use strict";var cM=nA();function pM(e){return e==null?"":cM(e)}a(pM,"toString");oA.exports=pM});var nu=p((CH,sA)=>{"use strict";var lM=Ee(),dM=uo(),fM=tu(),mM=au();function gM(e,t){return lM(e)?e:dM(e,t)?[e]:fM(mM(e))}a(gM,"castPath");sA.exports=gM});var Ur=p((LH,iA)=>{"use strict";var hM=Cr(),yM=1/0;function AM(e){if(typeof e=="string"||hM(e))return e;var t=e+"";return t=="0"&&1/e==-yM?"-0":t}a(AM,"toKey");iA.exports=AM});var ou=p((UH,uA)=>{"use strict";var bM=nu(),IM=Ur();function SM(e,t){t=bM(t,e);for(var r=0,n=t.length;e!=null&&r<n;)e=e[IM(t[r++])];return r&&r==n?e:void 0}a(SM,"baseGet");uA.exports=SM});var pA=p((DH,cA)=>{"use strict";var wM=ou();function TM(e,t,r){var n=e==null?void 0:wM(e,t);return n===void 0?r:n}a(TM,"get");cA.exports=TM});var dA=p((MH,lA)=>{"use strict";function EM(e,t){return e!=null&&t in Object(e)}a(EM,"baseHasIn");lA.exports=EM});var mA=p((BH,fA)=>{"use strict";var RM=nu(),vM=pa(),_M=Ee(),xM=Ra(),CM=Sn(),OM=Ur();function LM(e,t,r){t=RM(t,e);for(var n=-1,o=t.length,s=!1;++n<o;){var i=OM(t[n]);if(!(s=e!=null&&r(e,i)))break;e=e[i]}return s||++n!=o?s:(o=e==null?0:e.length,!!o&&CM(o)&&xM(i,o)&&(_M(e)||vM(e)))}a(LM,"hasPath");fA.exports=LM});var hA=p((FH,gA)=>{"use strict";var PM=dA(),UM=mA();function qM(e,t){return e!=null&&UM(e,t,PM)}a(qM,"hasIn");gA.exports=qM});var AA=p(($H,yA)=>{"use strict";var DM=Ji(),kM=pA(),MM=hA(),NM=uo(),BM=Xi(),GM=Zi(),FM=Ur(),WM=1,$M=2;function jM(e,t){return NM(e)&&BM(t)?GM(FM(e),t):function(r){var n=kM(r,e);return n===void 0&&n===t?MM(r,e):DM(t,n,WM|$M)}}a(jM,"baseMatchesProperty");yA.exports=jM});var IA=p((QH,bA)=>{"use strict";function QM(e){return function(t){return t?.[e]}}a(QM,"baseProperty");bA.exports=QM});var wA=p((VH,SA)=>{"use strict";var KM=ou();function VM(e){return function(t){return KM(t,e)}}a(VM,"basePropertyDeep");SA.exports=VM});var EA=p((YH,TA)=>{"use strict";var HM=IA(),YM=wA(),zM=uo(),JM=Ur();function XM(e){return zM(e)?HM(JM(e)):YM(e)}a(XM,"property");TA.exports=XM});var su=p((JH,RA)=>{"use strict";var ZM=jy(),eN=AA(),tN=la(),rN=Ee(),aN=EA();function nN(e){return typeof e=="function"?e:e==null?tN:typeof e=="object"?rN(e)?eN(e[0],e[1]):ZM(e):aN(e)}a(nN,"baseIteratee");RA.exports=nN});var _A=p((ZH,vA)=>{"use strict";var oN=Ki(),sN=su(),iN=1;function uN(e){return sN(typeof e=="function"?e:oN(e,iN))}a(uN,"iteratee");vA.exports=uN});var CA=p((tY,xA)=>{"use strict";var cN=Vo();function pN(e){var t=e==null?0:e.length;return t?cN(e,1):[]}a(pN,"flatten");xA.exports=pN});var LA=p((aY,OA)=>{"use strict";var lN=CA(),dN=Ho(),fN=hn();function mN(e){return fN(dN(e,void 0,lN),e+"")}a(mN,"flatRest");OA.exports=mN});var UA=p((oY,PA)=>{"use strict";var gN=no(),hN=LA(),yN=256,AN=hN(function(e,t){return gN(e,yN,void 0,void 0,void 0,t)});PA.exports=AN});var DA=p((sY,qA)=>{"use strict";var bN=ru(),IN=yr(),SN=Ee(),wN=Cr(),TN=tu(),EN=Ur(),RN=au();function vN(e){return SN(e)?bN(e,EN):wN(e)?[e]:IN(TN(RN(e)))}a(vN,"toPath");qA.exports=vN});var MA=p((uY,kA)=>{"use strict";kA.exports={ary:Jg(),assign:ki(),clone:sy(),curry:uy(),forEach:ro(),isArray:Ee(),isError:py(),isFunction:da(),isWeakMap:dy(),iteratee:_A(),keys:Di(),rearg:UA(),toInteger:Li(),toPath:DA()}});var BA=p((cY,NA)=>{"use strict";var _N=vm(),xN=MA();function CN(e,t,r){return _N(xN,e,t,r)}a(CN,"convert");NA.exports=CN});var iu=p((lY,FA)=>{"use strict";var ON=BA(),GA=ON("merge",bs());GA.placeholder=mi();FA.exports=GA});var KA=p((uu,cu)=>{"use strict";(function(e,t){typeof uu=="object"&&typeof cu<"u"?cu.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs=t()})(uu,function(){"use strict";var e=1e3,t=6e4,r=36e5,n="millisecond",o="second",s="minute",i="hour",u="day",c="week",f="month",g="quarter",h="year",y="date",E="Invalid Date",M=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,k=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,D={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(O){var w=["th","st","nd","rd"],A=O%100;return"["+O+(w[(A-20)%10]||w[A]||w[0])+"]"}},C=a(function(O,w,A){var _=String(O);return!_||_.length>=w?O:""+Array(w+1-_.length).join(A)+O},"m"),W={s:C,z:function(O){var w=-O.utcOffset(),A=Math.abs(w),_=Math.floor(A/60),S=A%60;return(w<=0?"+":"-")+C(_,2,"0")+":"+C(S,2,"0")},m:a(function O(w,A){if(w.date()<A.date())return-O(A,w);var _=12*(A.year()-w.year())+(A.month()-w.month()),S=w.clone().add(_,f),U=A-S<0,P=w.clone().add(_+(U?-1:1),f);return+(-(_+(A-S)/(U?S-P:P-S))||0)},"t"),a:function(O){return O<0?Math.ceil(O)||0:Math.floor(O)},p:function(O){return{M:f,y:h,w:c,d:u,D:y,h:i,m:s,s:o,ms:n,Q:g}[O]||String(O||"").toLowerCase().replace(/s$/,"")},u:function(O){return O===void 0}},ye="en",ie={};ie[ye]=D;var Ye="$isDayjsObject",nt=a(function(O){return O instanceof Gt||!(!O||!O[Ye])},"S"),ot=a(function O(w,A,_){var S;if(!w)return ye;if(typeof w=="string"){var U=w.toLowerCase();ie[U]&&(S=U),A&&(ie[U]=A,S=U);var P=w.split("-");if(!S&&P.length>1)return O(P[0])}else{var $=w.name;ie[$]=w,S=$}return!_&&S&&(ye=S),S||!_&&ye},"t"),Y=a(function(O,w){if(nt(O))return O.clone();var A=typeof w=="object"?w:{};return A.date=O,A.args=arguments,new Gt(A)},"O"),G=W;G.l=ot,G.i=nt,G.w=function(O,w){return Y(O,{locale:w.$L,utc:w.$u,x:w.$x,$offset:w.$offset})};var Gt=function(){function O(A){this.$L=ot(A.locale,null,!0),this.parse(A),this.$x=this.$x||A.x||{},this[Ye]=!0}a(O,"M");var w=O.prototype;return w.parse=function(A){this.$d=function(_){var S=_.date,U=_.utc;if(S===null)return new Date(NaN);if(G.u(S))return new Date;if(S instanceof Date)return new Date(S);if(typeof S=="string"&&!/Z$/i.test(S)){var P=S.match(M);if(P){var $=P[2]-1||0,Z=(P[7]||"0").substring(0,3);return U?new Date(Date.UTC(P[1],$,P[3]||1,P[4]||0,P[5]||0,P[6]||0,Z)):new Date(P[1],$,P[3]||1,P[4]||0,P[5]||0,P[6]||0,Z)}}return new Date(S)}(A),this.init()},w.init=function(){var A=this.$d;this.$y=A.getFullYear(),this.$M=A.getMonth(),this.$D=A.getDate(),this.$W=A.getDay(),this.$H=A.getHours(),this.$m=A.getMinutes(),this.$s=A.getSeconds(),this.$ms=A.getMilliseconds()},w.$utils=function(){return G},w.isValid=function(){return this.$d.toString()!==E},w.isSame=function(A,_){var S=Y(A);return this.startOf(_)<=S&&S<=this.endOf(_)},w.isAfter=function(A,_){return Y(A)<this.startOf(_)},w.isBefore=function(A,_){return this.endOf(_)<Y(A)},w.$g=function(A,_,S){return G.u(A)?this[_]:this.set(S,A)},w.unix=function(){return Math.floor(this.valueOf()/1e3)},w.valueOf=function(){return this.$d.getTime()},w.startOf=function(A,_){var S=this,U=!!G.u(_)||_,P=G.p(A),$=a(function(I,v){var q=G.w(S.$u?Date.UTC(S.$y,v,I):new Date(S.$y,v,I),S);return U?q:q.endOf(u)},"l"),Z=a(function(I,v){return G.w(S.toDate()[I].apply(S.toDate("s"),(U?[0,0,0,0]:[23,59,59,999]).slice(v)),S)},"$"),ne=this.$W,pe=this.$M,K=this.$D,Ge="set"+(this.$u?"UTC":"");switch(P){case h:return U?$(1,0):$(31,11);case f:return U?$(1,pe):$(0,pe+1);case c:var R=this.$locale().weekStart||0,b=(ne<R?ne+7:ne)-R;return $(U?K-b:K+(6-b),pe);case u:case y:return Z(Ge+"Hours",0);case i:return Z(Ge+"Minutes",1);case s:return Z(Ge+"Seconds",2);case o:return Z(Ge+"Milliseconds",3);default:return this.clone()}},w.endOf=function(A){return this.startOf(A,!1)},w.$set=function(A,_){var S,U=G.p(A),P="set"+(this.$u?"UTC":""),$=(S={},S[u]=P+"Date",S[y]=P+"Date",S[f]=P+"Month",S[h]=P+"FullYear",S[i]=P+"Hours",S[s]=P+"Minutes",S[o]=P+"Seconds",S[n]=P+"Milliseconds",S)[U],Z=U===u?this.$D+(_-this.$W):_;if(U===f||U===h){var ne=this.clone().set(y,1);ne.$d[$](Z),ne.init(),this.$d=ne.set(y,Math.min(this.$D,ne.daysInMonth())).$d}else $&&this.$d[$](Z);return this.init(),this},w.set=function(A,_){return this.clone().$set(A,_)},w.get=function(A){return this[G.p(A)]()},w.add=function(A,_){var S,U=this;A=Number(A);var P=G.p(_),$=a(function(pe){var K=Y(U);return G.w(K.date(K.date()+Math.round(pe*A)),U)},"y");if(P===f)return this.set(f,this.$M+A);if(P===h)return this.set(h,this.$y+A);if(P===u)return $(1);if(P===c)return $(7);var Z=(S={},S[s]=t,S[i]=r,S[o]=e,S)[P]||1,ne=this.$d.getTime()+A*Z;return G.w(ne,this)},w.subtract=function(A,_){return this.add(-1*A,_)},w.format=function(A){var _=this,S=this.$locale();if(!this.isValid())return S.invalidDate||E;var U=A||"YYYY-MM-DDTHH:mm:ssZ",P=G.z(this),$=this.$H,Z=this.$m,ne=this.$M,pe=S.weekdays,K=S.months,Ge=S.meridiem,R=a(function(v,q,oe,Re){return v&&(v[q]||v(_,U))||oe[q].slice(0,Re)},"h"),b=a(function(v){return G.s($%12||12,v,"0")},"d"),I=Ge||function(v,q,oe){var Re=v<12?"AM":"PM";return oe?Re.toLowerCase():Re};return U.replace(k,function(v,q){return q||function(oe){switch(oe){case"YY":return String(_.$y).slice(-2);case"YYYY":return G.s(_.$y,4,"0");case"M":return ne+1;case"MM":return G.s(ne+1,2,"0");case"MMM":return R(S.monthsShort,ne,K,3);case"MMMM":return R(K,ne);case"D":return _.$D;case"DD":return G.s(_.$D,2,"0");case"d":return String(_.$W);case"dd":return R(S.weekdaysMin,_.$W,pe,2);case"ddd":return R(S.weekdaysShort,_.$W,pe,3);case"dddd":return pe[_.$W];case"H":return String($);case"HH":return G.s($,2,"0");case"h":return b(1);case"hh":return b(2);case"a":return I($,Z,!0);case"A":return I($,Z,!1);case"m":return String(Z);case"mm":return G.s(Z,2,"0");case"s":return String(_.$s);case"ss":return G.s(_.$s,2,"0");case"SSS":return G.s(_.$ms,3,"0");case"Z":return P}return null}(v)||P.replace(":","")})},w.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},w.diff=function(A,_,S){var U,P=this,$=G.p(_),Z=Y(A),ne=(Z.utcOffset()-this.utcOffset())*t,pe=this-Z,K=a(function(){return G.m(P,Z)},"D");switch($){case h:U=K()/12;break;case f:U=K();break;case g:U=K()/3;break;case c:U=(pe-ne)/6048e5;break;case u:U=(pe-ne)/864e5;break;case i:U=pe/r;break;case s:U=pe/t;break;case o:U=pe/e;break;default:U=pe}return S?U:G.a(U)},w.daysInMonth=function(){return this.endOf(f).$D},w.$locale=function(){return ie[this.$L]},w.locale=function(A,_){if(!A)return this.$L;var S=this.clone(),U=ot(A,_,!0);return U&&(S.$L=U),S},w.clone=function(){return G.w(this.$d,this)},w.toDate=function(){return new Date(this.valueOf())},w.toJSON=function(){return this.isValid()?this.toISOString():null},w.toISOString=function(){return this.$d.toISOString()},w.toString=function(){return this.$d.toUTCString()},O}(),Ya=Gt.prototype;return Y.prototype=Ya,[["$ms",n],["$s",o],["$m",s],["$H",i],["$W",u],["$M",f],["$y",h],["$D",y]].forEach(function(O){Ya[O[1]]=function(w){return this.$g(w,O[0],O[1])}}),Y.extend=function(O,w){return O.$i||(O(w,Gt,Y),O.$i=!0),Y},Y.locale=ot,Y.isDayjs=nt,Y.unix=function(O){return Y(1e3*O)},Y.en=ie[ye],Y.Ls=ie,Y.p={},Y})});var jb=p((x4,$b)=>{"use strict";function XN(e,t,r,n){for(var o=-1,s=e==null?0:e.length;++o<s;){var i=e[o];t(n,i,r(i),e)}return n}a(XN,"arrayAggregator");$b.exports=XN});var Kb=p((O4,Qb)=>{"use strict";var ZN=us(),eB=Or();function tB(e,t){return e&&ZN(e,t,eB)}a(tB,"baseForOwn");Qb.exports=tB});var Hb=p((P4,Vb)=>{"use strict";var rB=mr();function aB(e,t){return function(r,n){if(r==null)return r;if(!rB(r))return e(r,n);for(var o=r.length,s=t?o:-1,i=Object(r);(t?s--:++s<o)&&n(i[s],s,i)!==!1;);return r}}a(aB,"createBaseEach");Vb.exports=aB});var zb=p((q4,Yb)=>{"use strict";var nB=Kb(),oB=Hb(),sB=oB(nB);Yb.exports=sB});var Xb=p((D4,Jb)=>{"use strict";var iB=zb();function uB(e,t,r,n){return iB(e,function(o,s,i){t(n,o,r(o),i)}),n}a(uB,"baseAggregator");Jb.exports=uB});var eI=p((M4,Zb)=>{"use strict";var cB=jb(),pB=Xb(),lB=su(),dB=Ee();function fB(e,t){return function(r,n){var o=dB(r)?cB:pB,s=t?t():{};return o(r,e,lB(n,2),s)}}a(fB,"createAggregator");Zb.exports=fB});var rI=p((B4,tI)=>{"use strict";var mB=Aa(),gB=eI(),hB=Object.prototype,yB=hB.hasOwnProperty,AB=gB(function(e,t,r){yB.call(e,r)?e[r].push(t):mB(e,r,[t])});tI.exports=AB});var FB={};x(FB,{Method:()=>Ro,ai:()=>Hu,api:()=>wu,auditLogs:()=>kt,automations:()=>Qn,backups:()=>Ne,branding:()=>Un,constants:()=>aa,environmentVariables:()=>mt,features:()=>Ze,groups:()=>re,init:()=>Im,licensing:()=>ct,logger:()=>Zt,mappers:()=>ce,middleware:()=>hu,plugins:()=>Kn,publicApi:()=>Yn,quotas:()=>ft,scimGroups:()=>qr,scimUsers:()=>qe,sdk:()=>pu,users:()=>Wn,utils:()=>cr});module.exports=DI(FB);var Ro=(s=>(s.POST="POST",s.GET="GET",s.PATCH="PATCH",s.DELETE="DELETE",s.PUT="PUT",s))(Ro||{});var pu={};x(pu,{ai:()=>Ms,auditLogs:()=>kt,automations:()=>Qn,backups:()=>Ne,branding:()=>Un,environmentVariables:()=>mt,features:()=>Ze,groups:()=>re,init:()=>Im,licensing:()=>ct,logger:()=>Zt,plugins:()=>Kn,publicApi:()=>Yn,quotas:()=>ft,scimGroups:()=>qr,scimUsers:()=>qe,users:()=>Wn,utils:()=>cr});var Un={};x(Un,{getBrandingConfig:()=>xx});var Ze={};x(Ze,{checkBackups:()=>xe,checkFeature:()=>Ln,checkFeatures:()=>Os,checkSCIM:()=>Ds,isAppBuildersEnabled:()=>Us,isAuditLogsEnabled:()=>Pn,isBackupsEnabled:()=>Ls,isBrandingEnabled:()=>Ps,isEnforceableSSO:()=>Uf,isExpandedPublicApiEnabled:()=>It,isPWAEnabled:()=>Sx,isPkceOidcEnabled:()=>Tx,isRecaptchaEnabled:()=>wx,isSSOEnforced:()=>Ex,isSyncAutomationsEnabled:()=>bx,isTriggerAutomationRunEnabled:()=>Ix,isUserGroupsEnabled:()=>qs,isViewPermissionEnabled:()=>Rx,isViewReadonlyColumnsEnabled:()=>vx});var bt=require("@budibase/backend-core"),Ae=require("@budibase/types");var ct={};x(ct,{cache:()=>Je,client:()=>Lt,features:()=>dn,getFreeLicense:()=>_s,getLicense:()=>Rs,getLicenseFromKey:()=>vs,keys:()=>Cs,offline:()=>xn,quotas:()=>fn});var Je={};x(Je,{getCachedLicense:()=>Lf,invalidate:()=>Pf,refresh:()=>Kt});var za=require("@budibase/backend-core");var kr,kI=a(async()=>{kr=await za.RedisClient.init(za.redis.utils.Databases.LICENSES)},"init"),MI=a(async()=>{kr&&await kr.finish()},"shutdown");process.on("exit",async()=>{await MI()});var vo=a(async()=>(kr||await kI(),kr),"getClient");var Lt={};x(Lt,{activateLicenseKey:()=>Wo,getLicense:()=>ir,getLicenseFromKey:()=>Fo,triggerQuota:()=>TS});var Ju=F(require("node-fetch"));var Xu=require("@budibase/backend-core"),_o=require("dd-trace"),Zu=require("dd-trace/ext/formats");var xo=class{constructor(t){this.apiCall=t=>async(r="",n={})=>await _o.tracer.trace(`api.${t}`,async o=>{o.setTag("url",r);let s={...n.headers};s["Content-Type"]||(s["Content-Type"]="application/json",s.Accept="application/json");let i=s["Content-Type"]==="application/json";Xu.logging.correlation.setHeader(s),_o.tracer.inject(o,Zu.HTTP_HEADERS,s);let u={method:t,body:i?JSON.stringify(n.body):n.body,headers:s,credentials:"include"};return(0,Ju.default)(`${this.host}${r}`,u)});this.post=this.apiCall("POST");this.get=this.apiCall("GET");this.patch=this.apiCall("PATCH");this.del=this.apiCall("DELETE");this.put=this.apiCall("PUT");this.host=t}static{a(this,"API")}},Co=xo;var ec=require("@budibase/backend-core");var{getProxyDispatcher:BI}=ec.utils;async function Ja(e,t,r){let n=BI({rejectUnauthorized:r?.rejectUnauthorized});return n?(console.log("[proxyFetch] Using proxy for request",{url:typeof e=="string"?e:e instanceof URL?e.href:e.url,hasDispatcher:!0,rejectUnauthorized:r?.rejectUnauthorized}),fetch(e,{...t,dispatcher:n})):(console.log("[proxyFetch] No proxy configured, using direct fetch",{url:typeof e=="string"?e:e instanceof URL?e.href:e.url}),fetch(e,t))}a(Ja,"proxyFetch");var cn=require("@budibase/types"),B=require("@budibase/backend-core");var it={};x(it,{bustCache:()=>Po,getCurrentUsageValues:()=>uc,getQuotaUsage:()=>Ft,setAllUsage:()=>qo,setAppUsageValue:()=>Uo,setUsage:()=>oc,setUsagePerApp:()=>sc,utils:()=>Gr});var Le=require("@budibase/backend-core"),ve=require("@budibase/types");var Gr={};x(Gr,{generateBaseQuotaUsage:()=>Za,generateNewMonthlyQuotas:()=>Br,generateNewQuotaUsage:()=>Lo,getBreakdownName:()=>tn,getCurrentMonthString:()=>xt,getQuotaDocId:()=>Nr,setCurrentMonth:()=>en,setQuotaReset:()=>Oo});var Mr=require("@budibase/backend-core"),Xa=require("@budibase/shared-core"),le=require("@budibase/types");var Nr=a(()=>Mr.context.isSelfHostUsingCloud()?`quota_usage_${Mr.context.getTenantId()}`:Mr.db.StaticDatabases.GLOBAL.docs.usageQuota,"getQuotaDocId"),tc=a(()=>{let e=new Date;return new Date(e.getFullYear(),e.getMonth()+1,1).toISOString()},"getNextQuotaReset"),Oo=a(e=>{e.quotaReset=tc()},"setQuotaReset"),xt=a(()=>{let e=new Date,t=e.getMonth()+1,r=e.getFullYear();return`${t}-${r}`},"getCurrentMonthString"),Za=a(()=>({usageQuota:{[le.StaticQuotaName.WORKSPACES]:0,[le.StaticQuotaName.ROWS]:0,[le.StaticQuotaName.PLUGINS]:0,[le.StaticQuotaName.USERS]:0,[le.StaticQuotaName.CREATORS]:0,[le.StaticQuotaName.USER_GROUPS]:0,[le.StaticQuotaName.AI_CUSTOM_CONFIGS]:0,triggers:{}},monthly:{[xt()]:Br()}}),"generateBaseQuotaUsage"),Lo=a(()=>{let e={_id:Nr(),quotaReset:tc(),...Za(),apps:{}};return en(e),e},"generateNewQuotaUsage"),Br=a(()=>({[le.MonthlyQuotaName.QUERIES]:0,[le.MonthlyQuotaName.AUTOMATIONS]:0,[le.MonthlyQuotaName.BUDIBASE_AI_CREDITS]:0,[le.MonthlyQuotaName.ACTIONS]:0,triggers:{}}),"generateNewMonthlyQuotas"),en=a(e=>{let t=xt();e.monthly||(e.monthly={}),e.monthly[t]||(e.monthly[t]=Br()),e.monthly.current=e.monthly[t]},"setCurrentMonth"),tn=a((e,t)=>{if(!(!t||!e))switch(e){case le.MonthlyQuotaName.AUTOMATIONS:return le.BreakdownQuotaName.AUTOMATIONS;case le.MonthlyQuotaName.QUERIES:return(0,Xa.isTableIdOrExternalTableId)(t)?le.BreakdownQuotaName.ROW_QUERIES:(0,Xa.isDatasourceOrDatasourcePlusId)(t)?le.BreakdownQuotaName.DATASOURCE_QUERIES:void 0}},"getBreakdownName");var rc=Le.Duration.fromSeconds(60).toMs(),{Writethrough:ac}=Le.cache.writethrough;function GI(e){return delete e.usageLimits,delete e.usageQuota.automationRuns,delete e.usageQuota.emails,delete e.usageQuota.storage,delete e.usageQuota.views,delete e.usageQuota.publishedApps,delete e.usageQuota.developers,e}a(GI,"clearDeprecated");var rn=a(()=>Le.tenancy.isSelfHostUsingCloud()?new ac(Le.tenancy.getSelfHostCloudDB(),rc):new ac(Le.tenancy.getGlobalDB(),rc),"getDB");async function Po(e=0){let r=rn(),n=Nr(),o=await r.tryGet(n);o&&o._rev&&await r.remove(n,o._rev).catch(async s=>{if(e<1)return await Po(e+1);throw s})}a(Po,"bustCache");var Ft=a(async()=>{let e=rn(),t=await e.tryGet(Nr());if(!t){t=Lo();let{rev:r}=await e.put(t);t._rev=r}return en(t),Oo(t),GI(t)},"getQuotaUsage"),oc=a(async(e,t,r)=>qo({name:t,type:r,values:{total:e}}),"setUsage"),sc=a(async(e,t,r)=>{let n=rn(),o=await Ft(),s=Object.values(e).reduce((u,c)=>u+c,0);for(let[u,c]of Object.entries(e))o=ic(o,t,r,{total:s,app:c},{appId:u});let i=await n.put(o);return o._rev=i.rev,o},"setUsagePerApp"),FI=a((e,t,r,n)=>{let o=tn(t,r);if(!o||!n?.breakdown)return e;e.breakdown||(e.breakdown={}),e.breakdown[o]||(e.breakdown[o]={parent:t,values:{}});let s=e.breakdown[o];return s.values[r]=n.breakdown,e},"setBreakdown"),Uo=a((e,t,r,n={},o)=>{let s;try{s=Le.db.getProdWorkspaceID(n?.appId||Le.context.getWorkspaceId())}catch{}if(!s||!o.app||!ve.APP_QUOTA_NAMES.includes(t))return e;e.apps?.[s]||(e.apps={...e.apps,[s]:Za()});let i=e.apps[s];switch(r){case ve.QuotaUsageType.STATIC:i.usageQuota[t]=o.app;break;case ve.QuotaUsageType.MONTHLY:{let u=xt(),c=t,f=i.monthly[u];f||(i.monthly[u]=Br(),f=i.monthly[u]),f[c]=o.app,ve.BREAKDOWN_QUOTA_NAMES.includes(c)&&n?.id&&(f=FI(f,c,n.id,o));break}}return e},"setAppUsageValue"),nc=a((e,t,r,n)=>{if(!ve.APP_QUOTA_NAMES.includes(r))return{};let o;try{o=Le.db.getProdWorkspaceID(Le.context.getWorkspaceId())}catch{}if(!o||!e.apps||!e.apps[o])return{app:0};let s=e.apps[o];switch(t){case ve.QuotaUsageType.STATIC:if(s.usageQuota?.[r])return{app:s.usageQuota[r]};break;case ve.QuotaUsageType.MONTHLY:{let i=xt(),u=r;if(!s.monthly?.[i]?.[u])break;let c=s.monthly[i],f=c[u],g,h=tn(u,n);return h&&n&&c.breakdown?.[h]&&(g=c.breakdown[h]?.values[n]),{app:f,breakdown:g||0}}}return{app:0}},"getAppUsageValue"),WI=a((e,t,r)=>{t.usageQuota.triggers||(t.usageQuota.triggers={}),r&&(t.usageQuota.triggers[e]=r)},"setStaticTriggers"),$I=a((e,t,r,n)=>{r.monthly[t].triggers||(r.monthly[t].triggers={}),n&&(r.monthly[t].triggers[e]=n)},"setMonthlyTriggers"),ic=a((e,t,r,n,o={})=>{if(r===ve.QuotaUsageType.STATIC)t=t,e.usageQuota[t]=n.total,WI(t,e,n.triggers);else if(r===ve.QuotaUsageType.MONTHLY){t=t;let s=xt();e.monthly[s][t]=n.total,$I(t,s,e,n.triggers)}else throw new Error(`Invalid usage type: ${r}`);return Uo(e,t,r,o,n)},"coreUsageUpdate"),qo=a(async e=>{let t=Array.isArray(e)?e:[e],r=rn(),n=await Ft();for(let s of t)n=ic(n,s.name,s.type,s.values,s.opts);let o=await r.put(n,0);return n._rev=o.rev,n},"setAllUsage"),uc=a(async(e,t,r)=>{let n=await Ft(),o=0,s={};switch(e){case ve.QuotaUsageType.STATIC:if(n.usageQuota[t]){let i=t;o=n.usageQuota[i],s=nc(n,e,t,r)}break;case ve.QuotaUsageType.MONTHLY:{let i=xt(),u=t;n.monthly[i][u]&&(o=n.monthly[i][u],s=nc(n,e,t,r));break}default:throw new Error(`Invalid usage type: ${e}`)}return ve.APP_QUOTA_NAMES.includes(t)&&!(s.app||s.breakdown)&&(s.app=s.app||0,s.breakdown=s.breakdown||0),{total:o,app:s.app,breakdown:s.breakdown}},"getCurrentUsageValues");var We={};x(We,{destroy:()=>KI,get:()=>Do,save:()=>QI});var Ct=require("@budibase/backend-core");var jI=a(()=>({_id:Ct.StaticDatabases.GLOBAL.docs.licenseInfo}),"newLicenseInfo"),QI=a(async e=>{let t=await Do();t={...t,...e};let n=await Ct.tenancy.getGlobalDB().put(t);return t._rev=n.rev,t},"save"),Do=a(async()=>{let e=Ct.tenancy.getGlobalDB();try{return await e.get(Ct.StaticDatabases.GLOBAL.docs.licenseInfo)}catch(t){if(t.status===404)return jI();throw t}},"get"),KI=a(async()=>{let e=Ct.tenancy.getGlobalDB(),t=await Do();t&&t._rev&&await e.remove(Ct.StaticDatabases.GLOBAL.docs.licenseInfo,t._rev)},"destroy");var z={};x(z,{bulkSave:()=>nS,destroy:()=>oS,fetch:()=>eS,generateUserGroupID:()=>XI,get:()=>tS,getBulk:()=>rS,getByName:()=>ko,getGroupUsers:()=>nn,getGroupUsersParams:()=>fc,getUserGroupsParams:()=>dc,save:()=>aS});var j=require("@budibase/backend-core");var ze=require("@budibase/types"),nr=require("@budibase/backend-core");async function cc(){let e=nr.sql.designDoc.base("type");e.sql.tables={[ze.AUDIT_LOG_TYPE]:{fields:{appId:ze.SQLiteType.TEXT,event:ze.SQLiteType.TEXT,userId:ze.SQLiteType.TEXT,timestamp:ze.SQLiteType.TEXT,metadata:ze.SQLiteType.TEXT,name:ze.SQLiteType.TEXT,type:ze.SQLiteType.TEXT,fallback:ze.SQLiteType.TEXT}}};let t=nr.context.getAuditLogsDB(),r;try{r=await t.get(nr.SQLITE_DESIGN_DOC_ID),r={...r,...e}}catch(n){if(n.status===404)r=e;else throw n}await t.put(r)}a(cc,"createAuditLogDesignDocSQL");var an=require("@budibase/backend-core");var{ViewName:VI,SEPARATOR:HI,DocumentType:YI,createView:zI}=an.db,JI=YI.USER+HI;async function pc(){let e=an.tenancy.getGlobalDB(),t=`function(doc) {
4
+ if (doc._id.startsWith("${JI}") && Array.isArray(doc.userGroups)) {
5
5
  for (let groupId of doc.userGroups) {
6
6
  emit("g_" + groupId, { email: doc.email, userId: doc._id })
7
7
  emit("e_" + groupId + doc.email, { email: doc.email, userId: doc._id })
8
8
  }
9
9
  }
10
- }`;await VI(e,t,jI.USER_BY_GROUP)}a(uc,"createGroupUserLookupView");var cc=`${j.DocumentType.GROUP}${j.SEPARATOR}`,Fr=a(async()=>(await j.db.getAllWorkspaces({dev:!0,efficient:!0,idsOnly:!0})).map(t=>j.db.getProdWorkspaceID(t)),"getAppIDs");function pc(e,t={}){e||(e="");let r=e?.startsWith(j.DocumentType.GROUP)?"":cc;return{...t,startkey:`${r}${e}`,endkey:`${r}${e}${j.UNICODE_MAX}`}}a(pc,"getUserGroupsParams");function lc(e,t={}){e||(e="");let{emailSearch:r,bookmark:n,...o}=t;return r?{...o,startkey:`e_${e}${n||r}`,endkey:`e_${e}${r}${j.UNICODE_MAX}`}:{...t,startkey:`g_${e}`,endkey:`g_${e}${j.UNICODE_MAX}`,startkey_docid:n}}a(lc,"getGroupUsersParams");function YI(){return`${cc}${j.utils.newid()}`}a(YI,"generateUserGroupID");async function an(e,t){let r=j.tenancy.getGlobalDB();return(await j.db.queryView(j.db.ViewName.USER_BY_GROUP,lc(e,t),r,uc,{arrayResponse:!0})).map(o=>({_id:o.userId,email:o.email}))||[]}a(an,"getGroupUsers");async function Wr(e,t){return e.users=await an(e._id),e.roles&&(e.roles=Object.fromEntries(Object.entries(e.roles).filter(([r])=>t.includes(r)))),e}a(Wr,"enrichGroup");async function zI(e){let r=(await Wr(e,await Fr())).users?.map(s=>s._id),n=await j.users.bulkGetGlobalUsersById(r),o=[];for(let s of n){if(!s.userGroups)continue;let i=s.userGroups.length;s.userGroups=s.userGroups.filter(u=>u!==e._id),s.userGroups.length!==i&&o.push(s)}o.length&&await j.users.bulkUpdateGlobalUsers(o)}a(zI,"cleanupUsers");async function dc(){return(await j.tenancy.getGlobalDB().allDocs(pc(null,{include_docs:!0}))).rows.map(t=>t.doc)}a(dc,"getAllGroupDocuments");async function JI(){let[e,t]=await Promise.all([dc(),Fr()]),r=[];for(let n of e)r.push(Wr(n,t));return await Promise.all(r)}a(JI,"fetch");async function XI(e){let t=j.tenancy.getGlobalDB(),[r,n]=await Promise.all([t.get(e),Fr()]);return await Wr(r,n)}a(XI,"get");async function ZI(e,t={enriched:!0}){let r=j.tenancy.getGlobalDB(),[n,o]=await Promise.all([r.getMultiple(e,{allowMissing:!0}),Fr()]);if(t?.enriched){let s=[];for(let i of n)s.push(Wr(i,o));return await Promise.all(s)}else return n}a(ZI,"getBulk");async function eS(e){return await j.tenancy.getGlobalDB().put(e)}a(eS,"save");async function tS(e){return await j.tenancy.getGlobalDB().bulkDocs(e)}a(tS,"bulkSave");async function rS(e,t){let r=j.tenancy.getGlobalDB(),n=await r.get(e),o=await r.remove(e,t);return await zI(n),o}a(rS,"destroy");async function Do(e){let t=e.toLowerCase(),[r,n]=await Promise.all([dc(),Fr()]),o=r.find(s=>s.name.toLowerCase()===t);if(o)return await Wr(o,n)}a(Do,"getByName");var $e={};x($e,{deleteAppBackupMetadata:()=>gS,fetchAppBackups:()=>dS,generateAppBackupID:()=>Rc,getAppBackupMetadata:()=>hS,oldestBackupDate:()=>Ec,storeAppBackupMetadata:()=>fS,updateAppBackupMetadata:()=>mS});var te=require("@budibase/backend-core"),Tc=require("@budibase/types");var aa={};x(aa,{GENERIC_PAGE_SIZE:()=>ut,auditLogs:()=>or,licenses:()=>De,quotas:()=>At,versions:()=>ra});var De={};x(De,{CLOUD_FREE_LICENSE:()=>nS,SELF_FREE_LICENSE:()=>ko,UNLIMITED:()=>ee,UNLIMITED_LICENSE:()=>oS});var Ot=require("@budibase/types");var At={};x(At,{UNLIMITED:()=>aS,actions:()=>Xr,appBackupRetentionDays:()=>ea,apps:()=>jr,automationLogRetentionDays:()=>Zr,automations:()=>zr,budibaseAICredits:()=>Jr,creators:()=>Kr,customAIConfigurations:()=>ta,plugins:()=>Hr,queries:()=>Yr,rows:()=>$r,userGroups:()=>Vr,users:()=>Qr});var Te=require("@budibase/types");var aS=-1,$r=a(e=>({[Te.StaticQuotaName.ROWS]:{name:"Rows",value:e,triggers:[90,100]}}),"rows"),jr=a(e=>({[Te.StaticQuotaName.WORKSPACES]:{name:"Workspaces",value:e,triggers:[100]}}),"apps"),Qr=a(e=>({[Te.StaticQuotaName.USERS]:{name:"Users",value:e,triggers:[80,100]}}),"users"),Kr=a(e=>({[Te.StaticQuotaName.CREATORS]:{name:"Creators",value:e,triggers:[]}}),"creators"),Vr=a(e=>({[Te.StaticQuotaName.USER_GROUPS]:{name:"User Groups",value:e,triggers:[80,100]}}),"userGroups"),Hr=a(e=>({[Te.StaticQuotaName.PLUGINS]:{name:"Plugins",value:e,triggers:[90,100]}}),"plugins"),Yr=a(e=>({[Te.MonthlyQuotaName.QUERIES]:{name:"Queries",value:e,triggers:[]}}),"queries"),zr=a(e=>({[Te.MonthlyQuotaName.AUTOMATIONS]:{name:"Automations",value:e,triggers:[80,90,100]}}),"automations"),Jr=a(e=>({[Te.MonthlyQuotaName.BUDIBASE_AI_CREDITS]:{name:"Budibase AI Credits",value:e,triggers:[80,90,100]}}),"budibaseAICredits"),Xr=a(e=>({[Te.MonthlyQuotaName.ACTIONS]:{name:"Actions",value:e,triggers:[80,90,100]}}),"actions"),Zr=a(e=>({[Te.ConstantQuotaName.AUTOMATION_LOG_RETENTION_DAYS]:{name:"Automation Logs",value:e,triggers:[]}}),"automationLogRetentionDays"),ea=a(e=>({[Te.ConstantQuotaName.APP_BACKUPS_RETENTION_DAYS]:{name:"App Backups",value:e,triggers:[]}}),"appBackupRetentionDays"),ta=a(e=>({[Te.StaticQuotaName.AI_CUSTOM_CONFIGS]:{name:"Custom AI Configuration",value:e,triggers:[]}}),"customAIConfigurations");var ee=-1,nS={features:[],quotas:{usage:{monthly:{...Yr(ee),...zr(200),...Jr(5e4),...Xr(ee)},static:{...jr(ee),...$r(2e3),...Qr(5),...Kr(5),...Vr(0),...Hr(10),...ta(0)}},constant:{...Zr(1),...ea(0)}},plan:{type:Ot.PlanType.FREE,usesInvoicing:!1,model:Ot.PlanModel.PER_USER}},ko={features:[],quotas:{usage:{monthly:{...Yr(ee),...zr(ee),...Jr(5e4),...Xr(ee)},static:{...$r(ee),...jr(ee),...Qr(20),...Kr(ee),...Vr(0),...Hr(10),...ta(0)}},constant:{...Zr(1),...ea(0)}},plan:{type:Ot.PlanType.FREE,usesInvoicing:!1,model:Ot.PlanModel.PER_USER}},oS={features:[],quotas:{usage:{monthly:{...Yr(ee),...zr(ee),...Jr(ee),...Xr(ee)},static:{...jr(ee),...$r(ee),...Qr(ee),...Kr(ee),...Vr(ee),...Hr(ee),...ta(ee)}},constant:{...Zr(ee),...ea(ee)}},plan:{type:Ot.PlanType.FREE,usesInvoicing:!1,model:Ot.PlanModel.PER_USER}};var ra={};x(ra,{getLicenseVersion:()=>sS,getProVersion:()=>mc});var Wt=require("@budibase/backend-core"),nn=F(require("fs")),fc=F(require("path"));var sS=a(()=>{if(Wt.env.isDev()){let e="dev-version.txt",t=fc.default.join(Wt.objectStore.budibaseTempDir(),e);if(nn.default.existsSync(t))return nn.default.readFileSync(t,"utf8");{let r=Wt.utils.newid();return nn.default.writeFileSync(t,r),r}}else return mc()},"getLicenseVersion"),mc=a(()=>{let e=Wt.env.VERSION;if(!e)throw new Error("No budibase pro version was specified");return e},"getProVersion");var or={};x(or,{searchTable:()=>iS});var $t=require("@budibase/types"),gc=require("@budibase/backend-core");function iS(){return{type:"table",sourceType:$t.TableSourceType.INTERNAL,name:$t.AUDIT_LOG_TYPE,sourceId:gc.SQS_DATASOURCE_INTERNAL,primary:["_id"],schema:{metadata:{name:"metadata",type:$t.FieldType.JSON},fallback:{name:"fallback",type:$t.FieldType.JSON}}}}a(iS,"searchTable");var ut=9;function na(e,t){let r=e.rows.map(o=>o.doc?o.doc:o);if(!t?.paginate)return{data:r,hasNextPage:!1};let n=r.length>t?.pageSize;return{data:r.slice(0,t?.pageSize),hasNextPage:n,nextPage:n?e.rows[t?.pageSize]?.key:void 0}}a(na,"pagination");var hc=require("@budibase/types");var uS=new Date(864e13).toISOString(),cS=1e3*60*60*24;async function on(e){let r=(await Je.getCachedLicense()).quotas?.[hc.QuotaType.CONSTANT]?.[e]?.value||0;return r===De.UNLIMITED?new Date(uS).toISOString():new Date(new Date().getTime()-cS*r).toISOString()}a(on,"getOldestRetentionDate");var sr=require("@budibase/backend-core");var{ViewName:Ac,AutomationViewMode:Mo,SEPARATOR:pt,DocumentType:bc,createView:Ic}=sr.db,pS=bc.AUTOMATION_LOG+pt,yc=bc.APP_BACKUP+pt;async function Sc(){let e=sr.context.getProdWorkspaceDB(),t=`function(doc) {
11
- if (doc._id.startsWith("${pS}")) {
10
+ }`;await zI(e,t,VI.USER_BY_GROUP)}a(pc,"createGroupUserLookupView");var lc=`${j.DocumentType.GROUP}${j.SEPARATOR}`,Fr=a(async()=>(await j.db.getAllWorkspaces({dev:!0,efficient:!0,idsOnly:!0})).map(t=>j.db.getProdWorkspaceID(t)),"getAppIDs");function dc(e,t={}){e||(e="");let r=e?.startsWith(j.DocumentType.GROUP)?"":lc;return{...t,startkey:`${r}${e}`,endkey:`${r}${e}${j.UNICODE_MAX}`}}a(dc,"getUserGroupsParams");function fc(e,t={}){e||(e="");let{emailSearch:r,bookmark:n,...o}=t;return r?{...o,startkey:`e_${e}${n||r}`,endkey:`e_${e}${r}${j.UNICODE_MAX}`}:{...t,startkey:`g_${e}`,endkey:`g_${e}${j.UNICODE_MAX}`,startkey_docid:n}}a(fc,"getGroupUsersParams");function XI(){return`${lc}${j.utils.newid()}`}a(XI,"generateUserGroupID");async function nn(e,t){let r=j.tenancy.getGlobalDB();return(await j.db.queryView(j.db.ViewName.USER_BY_GROUP,fc(e,t),r,pc,{arrayResponse:!0})).map(o=>({_id:o.userId,email:o.email}))||[]}a(nn,"getGroupUsers");async function Wr(e,t){return e.users=await nn(e._id),e.roles&&(e.roles=Object.fromEntries(Object.entries(e.roles).filter(([r])=>t.includes(r)))),e}a(Wr,"enrichGroup");async function ZI(e){let r=(await Wr(e,await Fr())).users?.map(s=>s._id),n=await j.users.bulkGetGlobalUsersById(r),o=[];for(let s of n){if(!s.userGroups)continue;let i=s.userGroups.length;s.userGroups=s.userGroups.filter(u=>u!==e._id),s.userGroups.length!==i&&o.push(s)}o.length&&await j.users.bulkUpdateGlobalUsers(o)}a(ZI,"cleanupUsers");async function mc(){return(await j.tenancy.getGlobalDB().allDocs(dc(null,{include_docs:!0}))).rows.map(t=>t.doc)}a(mc,"getAllGroupDocuments");async function eS(){let[e,t]=await Promise.all([mc(),Fr()]),r=[];for(let n of e)r.push(Wr(n,t));return await Promise.all(r)}a(eS,"fetch");async function tS(e){let t=j.tenancy.getGlobalDB(),[r,n]=await Promise.all([t.get(e),Fr()]);return await Wr(r,n)}a(tS,"get");async function rS(e,t={enriched:!0}){let r=j.tenancy.getGlobalDB(),[n,o]=await Promise.all([r.getMultiple(e,{allowMissing:!0}),Fr()]);if(t?.enriched){let s=[];for(let i of n)s.push(Wr(i,o));return await Promise.all(s)}else return n}a(rS,"getBulk");async function aS(e){return await j.tenancy.getGlobalDB().put(e)}a(aS,"save");async function nS(e){return await j.tenancy.getGlobalDB().bulkDocs(e)}a(nS,"bulkSave");async function oS(e,t){let r=j.tenancy.getGlobalDB(),n=await r.get(e),o=await r.remove(e,t);return await ZI(n),o}a(oS,"destroy");async function ko(e){let t=e.toLowerCase(),[r,n]=await Promise.all([mc(),Fr()]),o=r.find(s=>s.name.toLowerCase()===t);if(o)return await Wr(o,n)}a(ko,"getByName");var $e={};x($e,{deleteAppBackupMetadata:()=>AS,fetchAppBackups:()=>gS,generateAppBackupID:()=>xc,getAppBackupMetadata:()=>bS,oldestBackupDate:()=>vc,storeAppBackupMetadata:()=>hS,updateAppBackupMetadata:()=>yS});var te=require("@budibase/backend-core"),Rc=require("@budibase/types");var aa={};x(aa,{GENERIC_PAGE_SIZE:()=>ut,auditLogs:()=>or,licenses:()=>De,quotas:()=>At,versions:()=>ra});var De={};x(De,{CLOUD_FREE_LICENSE:()=>iS,SELF_FREE_LICENSE:()=>Mo,UNLIMITED:()=>ee,UNLIMITED_LICENSE:()=>uS});var Ot=require("@budibase/types");var At={};x(At,{UNLIMITED:()=>sS,actions:()=>Xr,appBackupRetentionDays:()=>ea,apps:()=>jr,automationLogRetentionDays:()=>Zr,automations:()=>zr,budibaseAICredits:()=>Jr,creators:()=>Kr,customAIConfigurations:()=>ta,plugins:()=>Hr,queries:()=>Yr,rows:()=>$r,userGroups:()=>Vr,users:()=>Qr});var Te=require("@budibase/types");var sS=-1,$r=a(e=>({[Te.StaticQuotaName.ROWS]:{name:"Rows",value:e,triggers:[90,100]}}),"rows"),jr=a(e=>({[Te.StaticQuotaName.WORKSPACES]:{name:"Workspaces",value:e,triggers:[100]}}),"apps"),Qr=a(e=>({[Te.StaticQuotaName.USERS]:{name:"Users",value:e,triggers:[80,100]}}),"users"),Kr=a(e=>({[Te.StaticQuotaName.CREATORS]:{name:"Creators",value:e,triggers:[]}}),"creators"),Vr=a(e=>({[Te.StaticQuotaName.USER_GROUPS]:{name:"User Groups",value:e,triggers:[80,100]}}),"userGroups"),Hr=a(e=>({[Te.StaticQuotaName.PLUGINS]:{name:"Plugins",value:e,triggers:[90,100]}}),"plugins"),Yr=a(e=>({[Te.MonthlyQuotaName.QUERIES]:{name:"Queries",value:e,triggers:[]}}),"queries"),zr=a(e=>({[Te.MonthlyQuotaName.AUTOMATIONS]:{name:"Automations",value:e,triggers:[80,90,100]}}),"automations"),Jr=a(e=>({[Te.MonthlyQuotaName.BUDIBASE_AI_CREDITS]:{name:"Budibase AI Credits",value:e,triggers:[80,90,100]}}),"budibaseAICredits"),Xr=a(e=>({[Te.MonthlyQuotaName.ACTIONS]:{name:"Actions",value:e,triggers:[80,90,100]}}),"actions"),Zr=a(e=>({[Te.ConstantQuotaName.AUTOMATION_LOG_RETENTION_DAYS]:{name:"Automation Logs",value:e,triggers:[]}}),"automationLogRetentionDays"),ea=a(e=>({[Te.ConstantQuotaName.APP_BACKUPS_RETENTION_DAYS]:{name:"App Backups",value:e,triggers:[]}}),"appBackupRetentionDays"),ta=a(e=>({[Te.StaticQuotaName.AI_CUSTOM_CONFIGS]:{name:"Custom AI Configuration",value:e,triggers:[]}}),"customAIConfigurations");var ee=-1,iS={features:[],quotas:{usage:{monthly:{...Yr(ee),...zr(200),...Jr(5e4),...Xr(ee)},static:{...jr(ee),...$r(2e3),...Qr(5),...Kr(5),...Vr(0),...Hr(10),...ta(0)}},constant:{...Zr(1),...ea(0)}},plan:{type:Ot.PlanType.FREE,usesInvoicing:!1,model:Ot.PlanModel.PER_USER}},Mo={features:[],quotas:{usage:{monthly:{...Yr(ee),...zr(ee),...Jr(5e4),...Xr(ee)},static:{...$r(ee),...jr(ee),...Qr(20),...Kr(ee),...Vr(0),...Hr(10),...ta(0)}},constant:{...Zr(1),...ea(0)}},plan:{type:Ot.PlanType.FREE,usesInvoicing:!1,model:Ot.PlanModel.PER_USER}},uS={features:[],quotas:{usage:{monthly:{...Yr(ee),...zr(ee),...Jr(ee),...Xr(ee)},static:{...jr(ee),...$r(ee),...Qr(ee),...Kr(ee),...Vr(ee),...Hr(ee),...ta(ee)}},constant:{...Zr(ee),...ea(ee)}},plan:{type:Ot.PlanType.FREE,usesInvoicing:!1,model:Ot.PlanModel.PER_USER}};var ra={};x(ra,{getLicenseVersion:()=>cS,getProVersion:()=>hc});var Wt=require("@budibase/backend-core"),on=F(require("fs")),gc=F(require("path"));var cS=a(()=>{if(Wt.env.isDev()){let e="dev-version.txt",t=gc.default.join(Wt.objectStore.budibaseTempDir(),e);if(on.default.existsSync(t))return on.default.readFileSync(t,"utf8");{let r=Wt.utils.newid();return on.default.writeFileSync(t,r),r}}else return hc()},"getLicenseVersion"),hc=a(()=>{let e=Wt.env.VERSION;if(!e)throw new Error("No budibase pro version was specified");return e},"getProVersion");var or={};x(or,{searchTable:()=>pS});var $t=require("@budibase/types"),yc=require("@budibase/backend-core");function pS(){return{type:"table",sourceType:$t.TableSourceType.INTERNAL,name:$t.AUDIT_LOG_TYPE,sourceId:yc.SQS_DATASOURCE_INTERNAL,primary:["_id"],schema:{metadata:{name:"metadata",type:$t.FieldType.JSON},fallback:{name:"fallback",type:$t.FieldType.JSON}}}}a(pS,"searchTable");var ut=9;function na(e,t){let r=e.rows.map(o=>o.doc?o.doc:o);if(!t?.paginate)return{data:r,hasNextPage:!1};let n=r.length>t?.pageSize;return{data:r.slice(0,t?.pageSize),hasNextPage:n,nextPage:n?e.rows[t?.pageSize]?.key:void 0}}a(na,"pagination");var Ac=require("@budibase/types");var lS=new Date(864e13).toISOString(),dS=1e3*60*60*24;async function sn(e){let r=(await Je.getCachedLicense()).quotas?.[Ac.QuotaType.CONSTANT]?.[e]?.value||0;return r===De.UNLIMITED?new Date(lS).toISOString():new Date(new Date().getTime()-dS*r).toISOString()}a(sn,"getOldestRetentionDate");var sr=require("@budibase/backend-core");var{ViewName:Ic,AutomationViewMode:No,SEPARATOR:pt,DocumentType:Sc,createView:wc}=sr.db,fS=Sc.AUTOMATION_LOG+pt,bc=Sc.APP_BACKUP+pt;async function Tc(){let e=sr.context.getProdWorkspaceDB(),t=`function(doc) {
11
+ if (doc._id.startsWith("${fS}")) {
12
12
  let autoId = doc.automationId + "${pt}"
13
13
  let status = doc.status + "${pt}"
14
- let autoKey = "${Mo.AUTOMATION}${pt}" + autoId + doc.createdAt
15
- let statusKey = "${Mo.STATUS}${pt}" + status + doc.createdAt
16
- let allKey = "${Mo.ALL}${pt}" + status + autoId + doc.createdAt
14
+ let autoKey = "${No.AUTOMATION}${pt}" + autoId + doc.createdAt
15
+ let statusKey = "${No.STATUS}${pt}" + status + doc.createdAt
16
+ let allKey = "${No.ALL}${pt}" + status + autoId + doc.createdAt
17
17
  emit(statusKey)
18
18
  emit(autoKey)
19
19
  emit(allKey)
20
20
  }
21
- }`;await Ic(e,t,Ac.AUTOMATION_LOGS)}a(Sc,"createLogByAutomationView");async function wc(){let e=sr.tenancy.getGlobalDB(),t=`function(doc) {
22
- if (doc._id.startsWith("${yc}") && doc.type && doc.trigger) {
21
+ }`;await wc(e,t,Ic.AUTOMATION_LOGS)}a(Tc,"createLogByAutomationView");async function Ec(){let e=sr.tenancy.getGlobalDB(),t=`function(doc) {
22
+ if (doc._id.startsWith("${bc}") && doc.type && doc.trigger) {
23
23
  let full = doc.appId + "${pt}"
24
24
  full += doc.trigger.toLowerCase() + "${pt}"
25
25
  full += doc.type.toLowerCase() + "${pt}"
26
- emit("${yc}" + full + doc.timestamp)
26
+ emit("${bc}" + full + doc.timestamp)
27
27
  }
28
- }`;await Ic(e,t,Ac.WORKSPACE_BACKUP_BY_TRIGGER)}a(wc,"createAppBackupTriggerView");async function Ec(){return on(Tc.ConstantQuotaName.APP_BACKUPS_RETENTION_DAYS)}a(Ec,"oldestBackupDate");var No=`${te.db.DocumentType.APP_BACKUP}${te.db.SEPARATOR}`;async function lS(e,t,r={}){let n=await Ec(),o=te.db.getProdWorkspaceID(e),s=o,i=o;if(t.trigger&&t.type){let u=`${te.db.SEPARATOR}${t.trigger}`;u+=`${te.db.SEPARATOR}${t.type}`,s+=u,i+=u}return(!t.startDate||t.startDate<n)&&(t.startDate=n),t.startDate&&(i+=`${te.db.SEPARATOR}${t.startDate}`),t.endDate&&(s+=`${te.db.SEPARATOR}${t.endDate}`),{...r,descending:!0,startkey:`${No}${s}${te.db.UNICODE_MAX}`,endkey:`${No}${i}`}}a(lS,"getAppBackupParams");async function vc(e,t){try{let r=te.db.getQueryIndex(te.db.ViewName.WORKSPACE_BACKUP_BY_TRIGGER);return await e.query(r,t)}catch(r){if(r!=null&&r.error==="not_found")return await wc(),vc(e,t);throw r}}a(vc,"getAppBackupsByTrigger");function Rc(e,t){return`${No}${e}${te.db.SEPARATOR}${t}`}a(Rc,"generateAppBackupID");async function dS(e,t={}){let r=te.tenancy.getGlobalDB(),n,o=t.limit||9,s=await lS(e,t,{include_docs:!0,limit:o+1});t.page&&(s.startkey=t.page),!t.trigger||!t.type?n=await r.allDocs(s):n=await vc(r,s);let i=na(n,{paginate:t.paginate,pageSize:o}),u=[...new Set(i.data.filter(f=>f.createdBy).map(f=>f.createdBy))],c=await te.users.bulkGetGlobalUsersById(u,{cleanup:!0});for(let f of c)for(let g of i.data)f?._id===g.createdBy&&(g.createdBy=f);return i}a(dS,"fetchAppBackups");async function fS(e,t={}){let r=te.tenancy.getGlobalDB(),n=te.db.getProdWorkspaceID(e.appId),o=Rc(n,e.timestamp),s={...e,_id:o,appId:n,name:e.name};return s._id=t.docId||s._id,s._rev=t.docRev||s._rev,t.filename&&(s.filename=t.filename),e.createdBy&&(s.createdBy=te.db.getGlobalIDFromUserMetadataID(e.createdBy)),await r.put(s)}a(fS,"storeAppBackupMetadata");async function mS(e,t){let r=te.tenancy.getGlobalDB(),n=await r.get(e);return n.name=t,await r.put(n)}a(mS,"updateAppBackupMetadata");async function gS(e){let t=te.tenancy.getGlobalDB(),r=await t.get(e);await t.remove(r._id,r._rev)}a(gS,"deleteAppBackupMetadata");async function hS(e){return await te.tenancy.getGlobalDB().get(e)}a(hS,"getAppBackupMetadata");var jt={};x(jt,{get:()=>AS,getCacheEnvVarID:()=>Cc,getEnvVarID:()=>sn,update:()=>bS});var Xe=require("@budibase/backend-core"),xc=F(require("lru-cache"));var yS=1e3,_c=new xc.default({max:yS});function sn(){return Xe.StaticDatabases.GLOBAL.docs.environmentVariables}a(sn,"getEnvVarID");function Cc(e){return`${Xe.tenancy.getTenantId()}/${sn()}/${e||""}`}a(Cc,"getCacheEnvVarID");async function AS(){let e=sn(),t=Xe.tenancy.getGlobalDB(),r,n=!1;try{r=await t.get(e)}catch(u){if(u.status==404)n=!0;else throw u}let o=Cc(r?._rev),s=_c.get(o);if(s)return s;let i;return!n&&r?i={...r,variables:JSON.parse(Xe.encryption.decrypt(r.variables,Xe.encryption.SecretOption.ENCRYPTION))}:i={_id:e,variables:{}},_c.set(o,i),i}a(AS,"get");async function bS(e){let t=sn();return await Xe.tenancy.getGlobalDB().put({_id:e._id||t,_rev:e._rev||void 0,variables:Xe.encryption.encrypt(JSON.stringify(e.variables),Xe.encryption.SecretOption.ENCRYPTION)})}a(bS,"update");var Bo=require("dd-trace");var cn=new xo(B.env.INTERNAL_ACCOUNT_PORTAL_URL),pn=a(async e=>{try{let t=await e.json();if(t.message)return t.message}catch{}try{let t=await e.text();if(t)return t}catch{}},"getResponseErrorMessage"),Oc=a(async e=>{let t,r;if(B.env.SELF_HOSTED){if(t=await We.get(),!t.licenseKey)return;r={[B.constants.Header.LICENSE_KEY]:t.licenseKey}}else{let n=B.tenancy.getTenantId();r={[B.constants.Header.API_KEY]:B.env.ACCOUNT_PORTAL_API_KEY,[B.constants.Header.TENANT_ID]:n}}return e(r)},"authAware"),Lc=a(async()=>await Bo.tracer.trace("_getLicense",async()=>await Oc(async e=>{let t=await it.getQuotaUsage();if(t.usageQuota.users==null){let u=await B.users.getUserCount();console.info(`Syncing user count quota to ${u}`),t.usageQuota.users=u,await it.setUsage(u,un.StaticQuotaName.USERS,un.QuotaUsageType.STATIC)}let r=await B.installation.getInstallFromDB(),n=B.tenancy.getTenantId(),o=await B.events.identification.getUniqueTenantId(n),s=ra.getProVersion(),i={quotaUsage:t,tenantId:n,install:{id:r.installId,tenantId:o,version:s}};try{let u=await cn.post("/api/license",{headers:{...e},body:i});if(u.status===404||u.status===403)return;if(u.status!==200){let c=await pn(u);throw new B.HTTPError(`Error getting license: ${c}`,u.status)}return u.json()}catch(u){if(B.env.DISABLE_ACCOUNT_PORTAL)return;throw u}})),"_getLicense");B.env.isJest()&&(Lc=jest.fn());var ir=Lc;async function Go(e){return await Bo.tracer.trace("getLicenseFromKey",async t=>{let r;if(!B.env.ACCOUNT_PORTAL_API_KEY)throw new Error("getLicenseFromKey requires ACCOUNT_PORTAL_API_KEY to be set");try{r=await cn.get(`/api/license/${e}`,{headers:{[B.constants.Header.API_KEY]:B.env.ACCOUNT_PORTAL_API_KEY}})}catch(n){if(B.env.DISABLE_ACCOUNT_PORTAL)return;throw n}if(r.status===404||r.status===403){t.addTags({licenseFound:!1});return}if(r.status!==200){let n=await pn(r);throw new B.HTTPError(`Error getting license: ${n}`,r.status)}return r.json()})}a(Go,"getLicenseFromKey");var IS=a(e=>Oc(async t=>{let r=await cn.post("/api/license/usage/triggered",{headers:{...t},body:e});if(r.status!==200){let n=await pn(r);B.logging.logAlert(`Error triggering quota usage: ${n}`)}}),"triggerQuota"),Fo=a(async e=>{let t=await B.installation.getInstall(),r={installVersion:t.version,installId:t.installId},n=await cn.post("/api/license/activate",{headers:{[B.constants.Header.LICENSE_KEY]:e},body:r});if(n.status===403)throw new B.HTTPError("Invalid license key",400);if(n.status===409)throw new B.HTTPError("License key has already been activated",409);if(n.status!==200){let o=await pn(n);throw new B.HTTPError(`Error activating license key: ${o}`,n.status)}return n.json()},"activateLicenseKey");var Ts=require("@budibase/backend-core");var _n={};x(_n,{activateOfflineLicenseToken:()=>nx,deleteOfflineLicenseToken:()=>ox,dev:()=>_a,enrichLicense:()=>Tf,getIdentifier:()=>bs,getIdentifierBase64:()=>sx,getIdentifierFromBase64:()=>ix,getOfflineLicense:()=>Is,getOfflineLicenseToken:()=>If,signing:()=>ia,verifyExpiry:()=>Sf,verifyInstallation:()=>wf});var ia={};x(ia,{sign:()=>wS,verifyLicenseToken:()=>sa});var Wo=F(require("jsonwebtoken"));var SS=`-----BEGIN PUBLIC KEY-----
28
+ }`;await wc(e,t,Ic.WORKSPACE_BACKUP_BY_TRIGGER)}a(Ec,"createAppBackupTriggerView");async function vc(){return sn(Rc.ConstantQuotaName.APP_BACKUPS_RETENTION_DAYS)}a(vc,"oldestBackupDate");var Bo=`${te.db.DocumentType.APP_BACKUP}${te.db.SEPARATOR}`;async function mS(e,t,r={}){let n=await vc(),o=te.db.getProdWorkspaceID(e),s=o,i=o;if(t.trigger&&t.type){let u=`${te.db.SEPARATOR}${t.trigger}`;u+=`${te.db.SEPARATOR}${t.type}`,s+=u,i+=u}return(!t.startDate||t.startDate<n)&&(t.startDate=n),t.startDate&&(i+=`${te.db.SEPARATOR}${t.startDate}`),t.endDate&&(s+=`${te.db.SEPARATOR}${t.endDate}`),{...r,descending:!0,startkey:`${Bo}${s}${te.db.UNICODE_MAX}`,endkey:`${Bo}${i}`}}a(mS,"getAppBackupParams");async function _c(e,t){try{let r=te.db.getQueryIndex(te.db.ViewName.WORKSPACE_BACKUP_BY_TRIGGER);return await e.query(r,t)}catch(r){if(r!=null&&r.error==="not_found")return await Ec(),_c(e,t);throw r}}a(_c,"getAppBackupsByTrigger");function xc(e,t){return`${Bo}${e}${te.db.SEPARATOR}${t}`}a(xc,"generateAppBackupID");async function gS(e,t={}){let r=te.tenancy.getGlobalDB(),n,o=t.limit||9,s=await mS(e,t,{include_docs:!0,limit:o+1});t.page&&(s.startkey=t.page),!t.trigger||!t.type?n=await r.allDocs(s):n=await _c(r,s);let i=na(n,{paginate:t.paginate,pageSize:o}),u=[...new Set(i.data.filter(f=>f.createdBy).map(f=>f.createdBy))],c=await te.users.bulkGetGlobalUsersById(u,{cleanup:!0});for(let f of c)for(let g of i.data)f?._id===g.createdBy&&(g.createdBy=f);return i}a(gS,"fetchAppBackups");async function hS(e,t={}){let r=te.tenancy.getGlobalDB(),n=te.db.getProdWorkspaceID(e.appId),o=xc(n,e.timestamp),s={...e,_id:o,appId:n,name:e.name};return s._id=t.docId||s._id,s._rev=t.docRev||s._rev,t.filename&&(s.filename=t.filename),e.createdBy&&(s.createdBy=te.db.getGlobalIDFromUserMetadataID(e.createdBy)),await r.put(s)}a(hS,"storeAppBackupMetadata");async function yS(e,t){let r=te.tenancy.getGlobalDB(),n=await r.get(e);return n.name=t,await r.put(n)}a(yS,"updateAppBackupMetadata");async function AS(e){let t=te.tenancy.getGlobalDB(),r=await t.get(e);await t.remove(r._id,r._rev)}a(AS,"deleteAppBackupMetadata");async function bS(e){return await te.tenancy.getGlobalDB().get(e)}a(bS,"getAppBackupMetadata");var jt={};x(jt,{get:()=>SS,getCacheEnvVarID:()=>Lc,getEnvVarID:()=>un,update:()=>wS});var Xe=require("@budibase/backend-core"),Oc=F(require("lru-cache"));var IS=1e3,Cc=new Oc.default({max:IS});function un(){return Xe.StaticDatabases.GLOBAL.docs.environmentVariables}a(un,"getEnvVarID");function Lc(e){return`${Xe.tenancy.getTenantId()}/${un()}/${e||""}`}a(Lc,"getCacheEnvVarID");async function SS(){let e=un(),t=Xe.tenancy.getGlobalDB(),r,n=!1;try{r=await t.get(e)}catch(u){if(u.status==404)n=!0;else throw u}let o=Lc(r?._rev),s=Cc.get(o);if(s)return s;let i;return!n&&r?i={...r,variables:JSON.parse(Xe.encryption.decrypt(r.variables,Xe.encryption.SecretOption.ENCRYPTION))}:i={_id:e,variables:{}},Cc.set(o,i),i}a(SS,"get");async function wS(e){let t=un();return await Xe.tenancy.getGlobalDB().put({_id:e._id||t,_rev:e._rev||void 0,variables:Xe.encryption.encrypt(JSON.stringify(e.variables),Xe.encryption.SecretOption.ENCRYPTION)})}a(wS,"update");var Go=require("dd-trace");var pn=new Co(B.env.INTERNAL_ACCOUNT_PORTAL_URL),ln=a(async e=>{try{let t=await e.json();if(t.message)return t.message}catch{}try{let t=await e.text();if(t)return t}catch{}},"getResponseErrorMessage"),Pc=a(async e=>{let t,r;if(B.env.SELF_HOSTED){if(t=await We.get(),!t.licenseKey)return;r={[B.constants.Header.LICENSE_KEY]:t.licenseKey}}else{let n=B.tenancy.getTenantId();r={[B.constants.Header.API_KEY]:B.env.ACCOUNT_PORTAL_API_KEY,[B.constants.Header.TENANT_ID]:n}}return e(r)},"authAware"),Uc=a(async()=>await Go.tracer.trace("_getLicense",async()=>await Pc(async e=>{let t=await it.getQuotaUsage();if(t.usageQuota.users==null){let u=await B.users.getUserCount();console.info(`Syncing user count quota to ${u}`),t.usageQuota.users=u,await it.setUsage(u,cn.StaticQuotaName.USERS,cn.QuotaUsageType.STATIC)}let r=await B.installation.getInstallFromDB(),n=B.tenancy.getTenantId(),o=await B.events.identification.getUniqueTenantId(n),s=ra.getProVersion(),i={quotaUsage:t,tenantId:n,install:{id:r.installId,tenantId:o,version:s}};try{let u=await pn.post("/api/license",{headers:{...e},body:i});if(u.status===404||u.status===403)return;if(u.status!==200){let c=await ln(u);throw new B.HTTPError(`Error getting license: ${c}`,u.status)}return u.json()}catch(u){if(B.env.DISABLE_ACCOUNT_PORTAL)return;throw u}})),"_getLicense");B.env.isJest()&&(Uc=jest.fn());var ir=Uc;async function Fo(e){return await Go.tracer.trace("getLicenseFromKey",async t=>{let r;if(!B.env.ACCOUNT_PORTAL_API_KEY)throw new Error("getLicenseFromKey requires ACCOUNT_PORTAL_API_KEY to be set");try{r=await pn.get(`/api/license/${e}`,{headers:{[B.constants.Header.API_KEY]:B.env.ACCOUNT_PORTAL_API_KEY}})}catch(n){if(B.env.DISABLE_ACCOUNT_PORTAL)return;throw n}if(r.status===404||r.status===403){t.addTags({licenseFound:!1});return}if(r.status!==200){let n=await ln(r);throw new B.HTTPError(`Error getting license: ${n}`,r.status)}return r.json()})}a(Fo,"getLicenseFromKey");var TS=a(e=>Pc(async t=>{let r=await pn.post("/api/license/usage/triggered",{headers:{...t},body:e});if(r.status!==200){let n=await ln(r);B.logging.logAlert(`Error triggering quota usage: ${n}`)}}),"triggerQuota"),Wo=a(async e=>{let t=await B.installation.getInstall(),r={installVersion:t.version,installId:t.installId},n=await pn.post("/api/license/activate",{headers:{[B.constants.Header.LICENSE_KEY]:e},body:r});if(n.status===403)throw new B.HTTPError("Invalid license key",400);if(n.status===409)throw new B.HTTPError("License key has already been activated",409);if(n.status!==200){let o=await ln(n);throw new B.HTTPError(`Error activating license key: ${o}`,n.status)}return n.json()},"activateLicenseKey");var Es=require("@budibase/backend-core");var xn={};x(xn,{activateOfflineLicenseToken:()=>ix,deleteOfflineLicenseToken:()=>ux,dev:()=>_a,enrichLicense:()=>Rf,getIdentifier:()=>Is,getIdentifierBase64:()=>cx,getIdentifierFromBase64:()=>px,getOfflineLicense:()=>Ss,getOfflineLicenseToken:()=>wf,signing:()=>ia,verifyExpiry:()=>Tf,verifyInstallation:()=>Ef});var ia={};x(ia,{sign:()=>RS,verifyLicenseToken:()=>sa});var $o=F(require("jsonwebtoken"));var ES=`-----BEGIN PUBLIC KEY-----
29
29
  MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvz3jePLCFBXZ19c8Dpkv
30
30
  XtSgOhKFOcvQdo/LV0KJRUzQWDPWuO4ILtBtnqhjtIzZH4CH0qCYBet5L6Qr4CM1
31
31
  l2HXiAD1Q2rlHNW9wDaYyKb1F5f+v4RyqCAyzlkwRdksmkLeECTboojNnmRCrE3C
@@ -34,22 +34,22 @@ l2HXiAD1Q2rlHNW9wDaYyKb1F5f+v4RyqCAyzlkwRdksmkLeECTboojNnmRCrE3C
34
34
  d/o3ZWE1TTj1zYwlCLN5qRKr3hU8nC3xEYNEbkB9SfTRaOq9Q7P8WmfLkoCPm3pR
35
35
  mwIDAQAB
36
36
  -----END PUBLIC KEY-----
37
- `;function sa(e){return Wo.default.verify(e,SS,{algorithms:["RS256"]})}a(sa,"verifyLicenseToken");function wS(e,t){return Wo.default.sign(t,e,{encoding:"utf-8",algorithm:"RS256"})}a(wS,"sign");var ln={};x(ln,{getFeatures:()=>$o});var l=require("@budibase/types");var TS={[l.PlanType.FREE]:[...De.SELF_FREE_LICENSE.features],[l.PlanType.PREMIUM]:[l.Feature.WORKSPACE_BACKUPS,l.Feature.BRANDING,l.Feature.APP_BUILDERS,l.Feature.VIEW_PERMISSIONS,l.Feature.PDF],[l.PlanType.PREMIUM_PLUS]:[l.Feature.WORKSPACE_BACKUPS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.PDF,l.Feature.BUDIBASE_AI],[l.PlanType.PREMIUM_PLUS_TRIAL]:[l.Feature.WORKSPACE_BACKUPS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.PDF,l.Feature.BUDIBASE_AI],[l.PlanType.PRO]:[l.Feature.USER_GROUPS,l.Feature.WORKSPACE_BACKUPS],[l.PlanType.TEAM]:[l.Feature.USER_GROUPS,l.Feature.WORKSPACE_BACKUPS],[l.PlanType.BUSINESS]:[l.Feature.USER_GROUPS,l.Feature.WORKSPACE_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.AUDIT_LOGS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.PDF,l.Feature.BUDIBASE_AI],[l.PlanType.ENTERPRISE_BASIC]:[l.Feature.USER_GROUPS,l.Feature.WORKSPACE_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.ENFORCEABLE_SSO,l.Feature.AUDIT_LOGS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.OFFLINE,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.SCIM,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.PWA,l.Feature.CUSTOM_APP_SCRIPTS,l.Feature.PDF,l.Feature.BUDIBASE_AI,l.Feature.RECAPTCHA,l.Feature.PKCE_OIDC],[l.PlanType.ENTERPRISE_BASIC_TRIAL]:[l.Feature.USER_GROUPS,l.Feature.WORKSPACE_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.ENFORCEABLE_SSO,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.SCIM,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.PWA,l.Feature.CUSTOM_APP_SCRIPTS,l.Feature.PDF,l.Feature.BUDIBASE_AI,l.Feature.RECAPTCHA,l.Feature.PKCE_OIDC],[l.PlanType.ENTERPRISE]:[l.Feature.USER_GROUPS,l.Feature.WORKSPACE_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.ENFORCEABLE_SSO,l.Feature.AUDIT_LOGS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.OFFLINE,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.SCIM,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.PWA,l.Feature.CUSTOM_APP_SCRIPTS,l.Feature.PDF,l.Feature.BUDIBASE_AI,l.Feature.RECAPTCHA,l.Feature.PKCE_OIDC]},ES={[l.PlanType.FREE]:[...De.CLOUD_FREE_LICENSE.features],[l.PlanType.PREMIUM]:[l.Feature.WORKSPACE_BACKUPS,l.Feature.BRANDING,l.Feature.APP_BUILDERS,l.Feature.VIEW_PERMISSIONS,l.Feature.PDF],[l.PlanType.PREMIUM_PLUS]:[l.Feature.WORKSPACE_BACKUPS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.BUDIBASE_AI,l.Feature.PDF],[l.PlanType.PREMIUM_PLUS_TRIAL]:[l.Feature.WORKSPACE_BACKUPS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.BUDIBASE_AI,l.Feature.PDF],[l.PlanType.PRO]:[l.Feature.USER_GROUPS,l.Feature.WORKSPACE_BACKUPS,l.Feature.BRANDING],[l.PlanType.TEAM]:[l.Feature.USER_GROUPS,l.Feature.WORKSPACE_BACKUPS,l.Feature.BRANDING],[l.PlanType.BUSINESS]:[l.Feature.USER_GROUPS,l.Feature.WORKSPACE_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.AUDIT_LOGS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.BUDIBASE_AI,l.Feature.PDF],[l.PlanType.ENTERPRISE_BASIC]:[l.Feature.USER_GROUPS,l.Feature.WORKSPACE_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.ENFORCEABLE_SSO,l.Feature.AUDIT_LOGS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.OFFLINE,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.SCIM,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.BUDIBASE_AI,l.Feature.PWA,l.Feature.CUSTOM_APP_SCRIPTS,l.Feature.PDF,l.Feature.RECAPTCHA,l.Feature.PKCE_OIDC],[l.PlanType.ENTERPRISE_BASIC_TRIAL]:[l.Feature.USER_GROUPS,l.Feature.WORKSPACE_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.ENFORCEABLE_SSO,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.SCIM,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.BUDIBASE_AI,l.Feature.PWA,l.Feature.CUSTOM_APP_SCRIPTS,l.Feature.PDF,l.Feature.RECAPTCHA,l.Feature.PKCE_OIDC],[l.PlanType.ENTERPRISE]:[l.Feature.USER_GROUPS,l.Feature.WORKSPACE_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.ENFORCEABLE_SSO,l.Feature.AUDIT_LOGS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.SCIM,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.BUDIBASE_AI,l.Feature.PWA,l.Feature.CUSTOM_APP_SCRIPTS,l.Feature.PDF,l.Feature.RECAPTCHA,l.Feature.PKCE_OIDC]};function $o(e,t){let r=[];function n(o){let s=o[t];if(!s)throw new Error(`Features do not exist for planType=${t} and hosting=${e}`);return s}switch(a(n,"readFeatures"),e){case l.Hosting.SELF:r=n(TS);break;case l.Hosting.CLOUD:r=n(ES);break}return r}a($o,"getFeatures");var dn={};x(dn,{UNLIMITED:()=>m,getQuotas:()=>jo});var J=require("@budibase/types");var d=At,Pc=De,m=-1,ua=a(e=>e*1e6,"millions"),vS={[J.PlanType.FREE]:{...Pc.CLOUD_FREE_LICENSE.quotas},[J.PlanType.PREMIUM]:{usage:{monthly:{...d.queries(m),...d.automations(1e3),...d.budibaseAICredits(0),...d.actions(m)},static:{...d.rows(1e4),...d.apps(m),...d.users(m),...d.creators(m),...d.userGroups(0),...d.plugins(m),...d.customAIConfigurations(0)}},constant:{...d.automationLogRetentionDays(7),...d.appBackupRetentionDays(7)}},[J.PlanType.PREMIUM_PLUS]:{usage:{monthly:{...d.queries(m),...d.automations(5e3),...d.budibaseAICredits(ua(2)),...d.actions(m)},static:{...d.rows(25e3),...d.apps(m),...d.users(m),...d.creators(m),...d.userGroups(0),...d.plugins(m),...d.customAIConfigurations(1)}},constant:{...d.automationLogRetentionDays(30),...d.appBackupRetentionDays(30)}},[J.PlanType.PREMIUM_PLUS_TRIAL]:{usage:{monthly:{...d.queries(m),...d.automations(5e3),...d.budibaseAICredits(ua(2)),...d.actions(m)},static:{...d.rows(25e3),...d.apps(m),...d.users(m),...d.creators(m),...d.userGroups(0),...d.plugins(m),...d.customAIConfigurations(1)}},constant:{...d.automationLogRetentionDays(30),...d.appBackupRetentionDays(30)}},[J.PlanType.PRO]:{usage:{monthly:{...d.queries(m),...d.automations(1e3),...d.budibaseAICredits(0),...d.actions(m)},static:{...d.rows(m),...d.apps(m),...d.users(m),...d.creators(m),...d.userGroups(5),...d.plugins(m),...d.customAIConfigurations(0)}},constant:{...d.automationLogRetentionDays(7),...d.appBackupRetentionDays(7)}},[J.PlanType.TEAM]:{usage:{monthly:{...d.queries(m),...d.automations(5e3),...d.budibaseAICredits(0),...d.actions(m)},static:{...d.rows(m),...d.apps(m),...d.users(m),...d.creators(m),...d.userGroups(10),...d.plugins(m),...d.customAIConfigurations(0)}},constant:{...d.automationLogRetentionDays(30),...d.appBackupRetentionDays(90)}},[J.PlanType.BUSINESS]:{usage:{monthly:{...d.queries(m),...d.automations(1e4),...d.budibaseAICredits(0),...d.actions(m)},static:{...d.rows(5e4),...d.apps(m),...d.users(m),...d.creators(m),...d.userGroups(50),...d.plugins(m),...d.customAIConfigurations(0)}},constant:{...d.automationLogRetentionDays(365),...d.appBackupRetentionDays(365)}},[J.PlanType.ENTERPRISE_BASIC]:{usage:{monthly:{...d.queries(m),...d.automations(m),...d.budibaseAICredits(ua(4)),...d.actions(m)},static:{...d.rows(m),...d.apps(m),...d.users(m),...d.creators(m),...d.userGroups(m),...d.plugins(m),...d.customAIConfigurations(m)}},constant:{...d.automationLogRetentionDays(m),...d.appBackupRetentionDays(m)}},[J.PlanType.ENTERPRISE_BASIC_TRIAL]:{usage:{monthly:{...d.queries(m),...d.automations(m),...d.budibaseAICredits(ua(4)),...d.actions(m)},static:{...d.rows(m),...d.apps(m),...d.users(m),...d.creators(m),...d.userGroups(m),...d.plugins(m),...d.customAIConfigurations(m)}},constant:{...d.automationLogRetentionDays(15),...d.appBackupRetentionDays(15)}},[J.PlanType.ENTERPRISE]:{usage:{monthly:{...d.queries(m),...d.automations(m),...d.budibaseAICredits(ua(4)),...d.actions(m)},static:{...d.rows(m),...d.apps(m),...d.users(m),...d.creators(m),...d.userGroups(m),...d.plugins(m),...d.customAIConfigurations(m)}},constant:{...d.automationLogRetentionDays(m),...d.appBackupRetentionDays(m)}}},RS={[J.PlanType.FREE]:{...Pc.SELF_FREE_LICENSE.quotas},[J.PlanType.PREMIUM]:void 0,[J.PlanType.PREMIUM_PLUS]:{usage:{monthly:{...d.queries(m),...d.automations(m),...d.budibaseAICredits(0),...d.actions(m)},static:{...d.rows(m),...d.apps(m),...d.users(m),...d.creators(m),...d.userGroups(0),...d.plugins(m),...d.customAIConfigurations(1)}},constant:{...d.automationLogRetentionDays(30),...d.appBackupRetentionDays(30)}},[J.PlanType.PREMIUM_PLUS_TRIAL]:{usage:{monthly:{...d.queries(m),...d.automations(m),...d.budibaseAICredits(0),...d.actions(m)},static:{...d.rows(m),...d.apps(m),...d.users(m),...d.creators(m),...d.userGroups(0),...d.plugins(m),...d.customAIConfigurations(1)}},constant:{...d.automationLogRetentionDays(30),...d.appBackupRetentionDays(30)}},[J.PlanType.PRO]:{usage:{monthly:{...d.queries(m),...d.automations(m),...d.budibaseAICredits(0),...d.actions(m)},static:{...d.rows(m),...d.apps(m),...d.users(m),...d.creators(m),...d.userGroups(5),...d.plugins(m),...d.customAIConfigurations(0)}},constant:{...d.automationLogRetentionDays(7),...d.appBackupRetentionDays(7)}},[J.PlanType.TEAM]:{usage:{monthly:{...d.queries(m),...d.automations(m),...d.budibaseAICredits(0),...d.actions(m)},static:{...d.rows(m),...d.apps(m),...d.users(m),...d.creators(m),...d.userGroups(10),...d.plugins(m),...d.customAIConfigurations(0)}},constant:{...d.automationLogRetentionDays(30),...d.appBackupRetentionDays(90)}},[J.PlanType.BUSINESS]:{usage:{monthly:{...d.queries(m),...d.automations(m),...d.budibaseAICredits(0),...d.actions(m)},static:{...d.rows(m),...d.apps(m),...d.users(m),...d.creators(m),...d.userGroups(50),...d.plugins(m),...d.customAIConfigurations(0)}},constant:{...d.automationLogRetentionDays(90),...d.appBackupRetentionDays(365)}},[J.PlanType.ENTERPRISE_BASIC]:{usage:{monthly:{...d.queries(m),...d.automations(m),...d.budibaseAICredits(0),...d.actions(m)},static:{...d.rows(m),...d.apps(m),...d.users(m),...d.creators(m),...d.userGroups(m),...d.plugins(m),...d.customAIConfigurations(m)}},constant:{...d.automationLogRetentionDays(m),...d.appBackupRetentionDays(m)}},[J.PlanType.ENTERPRISE_BASIC_TRIAL]:{usage:{monthly:{...d.queries(m),...d.automations(m),...d.budibaseAICredits(0),...d.actions(m)},static:{...d.rows(m),...d.apps(m),...d.users(m),...d.creators(m),...d.userGroups(m),...d.plugins(m),...d.customAIConfigurations(m)}},constant:{...d.automationLogRetentionDays(15),...d.appBackupRetentionDays(15)}},[J.PlanType.ENTERPRISE]:{usage:{monthly:{...d.queries(m),...d.automations(m),...d.budibaseAICredits(0),...d.actions(m)},static:{...d.rows(m),...d.apps(m),...d.users(m),...d.creators(m),...d.userGroups(m),...d.plugins(m),...d.customAIConfigurations(m)}},constant:{...d.automationLogRetentionDays(m),...d.appBackupRetentionDays(m)}}};function jo(e,t){let r;function n(o){let s=o[t];if(!s)throw new Error(`Quotas do not exist for planType=${t} and hosting=${e}`);return s}switch(a(n,"readQuotas"),e){case J.Hosting.SELF:r=n(RS);break;case J.Hosting.CLOUD:r=n(vS);break}return JSON.parse(JSON.stringify(r))}a(jo,"getQuotas");var cr={};x(cr,{encoding:()=>ur,workspaceExists:()=>_S});var Uc=require("@budibase/backend-core");async function _S(e){return(await Uc.db.getAllWorkspaces({all:!0,idsOnly:!0})).includes(e)}a(_S,"workspaceExists");var ur={};x(ur,{base64ToObject:()=>CS,objectToBase64:()=>xS});function xS(e){let t=JSON.stringify(e);return Buffer.from(t).toString("base64")}a(xS,"objectToBase64");function CS(e){let t=Buffer.from(e,"base64").toString();return JSON.parse(t)}a(CS,"base64ToObject");var yf=require("@budibase/types"),wr=require("@budibase/backend-core"),Af=F(Yl()),bf=F(As());async function nx(e){await We.save({offlineLicenseToken:e}),await Kt()}a(nx,"activateOfflineLicenseToken");async function ox(){await We.save({offlineLicenseToken:void 0}),await Kt()}a(ox,"deleteOfflineLicenseToken");async function If(){return(await We.get()).offlineLicenseToken}a(If,"getOfflineLicenseToken");async function bs(){let t=(await wr.installation.getInstall()).installId,r=wr.context.getTenantId(),n=await wr.events.identification.getUniqueTenantId(r);return{installId:t,tenantId:n}}a(bs,"getIdentifier");async function sx(){let e=await bs();return ur.objectToBase64(e)}a(sx,"getIdentifierBase64");function ix(e){return ur.base64ToObject(e)}a(ix,"getIdentifierFromBase64");function Sf(e){let t=Date.now(),r=new Date(e.expireAt).getTime();if(t>r)throw new Error(`Offline license has expired. expireAt=${e.expireAt}`)}a(Sf,"verifyExpiry");async function wf(e){let t=await bs();if(e.identifier.installId!==t.installId||e.identifier.tenantId!==t.tenantId)throw new Error("Invalid offline license")}a(wf,"verifyInstallation");function Tf(e){let t=e.plan.type,r=yf.Hosting.SELF,n=$o(r,t),o=jo(r,t);return e.features=(0,Af.default)(e.features,n),e.quotas=(0,bf.default)(e.quotas,o),e}a(Tf,"enrichLicense");async function Is(){try{let e=await If();if(e){let t=await sa(e);return Sf(t),await wf(t),Tf(t)}}catch(e){console.error("Error retrieving offline license",e)}}a(Is,"getOfflineLicense");var _a={};x(_a,{deleteDevLicense:()=>dx,getOfflineLicense:()=>px,writeDevLicenseToDisk:()=>lx});var Ef=require("@budibase/backend-core"),ws=require("path"),vf=require("os"),Vt=F(require("fs"));var ux=Ef.env.isTest()?".budibase-test":".budibase",Ss=(0,ws.join)((0,vf.tmpdir)(),ux),cx="dev_license.txt",Ra=(0,ws.join)(Ss,cx);if(!Vt.default.existsSync(Ss))try{Vt.default.mkdirSync(Ss)}catch{}function px(){try{if(Vt.default.existsSync(Ra)){let e=Vt.default.readFileSync(Ra,{encoding:"utf-8"});return sa(e)}}catch(e){console.error("Error retrieving offline license from disk",e)}}a(px,"getOfflineLicense");function lx(e){console.log(`Writing license to: ${Ra}`),Vt.default.writeFileSync(Ra,e,{encoding:"utf-8"})}a(lx,"writeDevLicenseToDisk");function dx(){Vt.default.rmSync(Ra,{force:!0})}a(dx,"deleteDevLicense");var Rf=require("dd-trace");var Es=a(async()=>await Rf.tracer.trace("getLicense",async e=>{if(Ts.env.OFFLINE_MODE)return e.addTags({offline:!0}),Is();let t=await ir();return t||(e.addTags({offlineFallback:!0}),t=_a.getOfflineLicense()),t}),"getLicense"),vs=a(e=>Go(e),"getLicenseFromKey"),Rs=a(()=>Ts.env.SELF_HOSTED?De.SELF_FREE_LICENSE:De.CLOUD_FREE_LICENSE,"getFreeLicense");var xs={};x(xs,{activateLicenseKey:()=>fx,deleteLicenseKey:()=>mx,getLicenseKey:()=>xn});var _s=F(require("dd-trace"));async function fx(e){await Fo(e),await We.save({licenseKey:e}),await Kt()}a(fx,"activateLicenseKey");async function xn(){return await _s.default.trace("getLicenseKey",async e=>{let t=await We.get();return e.addTags({licenseKey:t.licenseKey}),t.licenseKey})}a(xn,"getLicenseKey");async function mx(){return await _s.default.trace("deleteLicenseKey",async()=>{await We.save({licenseKey:void 0}),await Kt()})}a(mx,"deleteLicenseKey");var Ht=require("@budibase/backend-core"),Cn=F(require("dd-trace"));var _f=3600,Kt=a(async()=>{await Of(),await Cf()},"refresh"),xf=a(async(e,t)=>{let{populateLicense:r=Es,populateFreeLicense:n=Rs}=t||{};return await Cn.default.trace("getCachedLicense",async o=>{let s=Ht.context.getLicense();if(s)return o.addTags({foundInContext:!0,features:s.features,plan:s.plan,quotas:s.quotas}),s;let i=Ht.tenancy.getTenantId(),u=await vo(),c=await u.get(i);return o.addTags({tenantId:i,foundInCache:!!c}),c?(o.addTags({foundInCache:!0,refreshedAt:c.refreshedAt,features:c.features,plan:c.plan,quotas:c.quotas}),c):(c=await Cn.default.trace("populateLicense",async()=>await r(i)),o.addTags({populatedLicense:!!c}),c||(c=Cn.default.trace("populateFreeLicense",()=>n(e,i)),o.addTags({populatedFreeLicense:!!c})),c.refreshedAt=new Date().toISOString(),o.addTags({refreshedAt:c.refreshedAt,features:c.features,plan:c.plan,quotas:c.quotas,expirySeconds:_f}),await u.store(i,c,_f),c)})},"_getCachedLicense");Ht.env.isJest()&&(xf=jest.fn());var Cf=xf,Of=a(async()=>{let e=Ht.tenancy.getTenantId();await(await vo()).delete(e)},"invalidate");async function be(e,t){Array.isArray(e)||(e=[e]),t||(t=await Je.getCachedLicense());for(let r of e)if(!t?.features.includes(r))return!1;return!0}a(be,"areFeaturesEnabled");async function On(e,t){if(!await be(e,t))throw new bt.FeatureDisabledError(`${e} is not currently enabled`,e)}a(On,"checkFeature");async function Cs(e,t){if(!await be(e,t)){let r=e.join(", ");throw new bt.FeatureDisabledError(`${r} are not currently enabled`,r)}}a(Cs,"checkFeatures");function xe(e){return async(...t)=>(await On(Ae.Feature.WORKSPACE_BACKUPS),e(...t))}a(xe,"checkBackups");async function Os(){return be(Ae.Feature.WORKSPACE_BACKUPS)}a(Os,"isBackupsEnabled");async function Ls(){return be(Ae.Feature.BRANDING)}a(Ls,"isBrandingEnabled");async function Lf(){return be(Ae.Feature.ENFORCEABLE_SSO)}a(Lf,"isEnforceableSSO");async function hx(){return be(Ae.Feature.SYNC_AUTOMATIONS)}a(hx,"isSyncAutomationsEnabled");async function yx(){return be(Ae.Feature.TRIGGER_AUTOMATION_RUN)}a(yx,"isTriggerAutomationRunEnabled");async function Ps(){return be(Ae.Feature.APP_BUILDERS)}a(Ps,"isAppBuildersEnabled");async function Ln(){return be(Ae.Feature.AUDIT_LOGS)}a(Ln,"isAuditLogsEnabled");async function Us(){return be(Ae.Feature.USER_GROUPS)}a(Us,"isUserGroupsEnabled");function Ax(){return be(Ae.Feature.PWA)}a(Ax,"isPWAEnabled");function bx(){return be(Ae.Feature.RECAPTCHA)}a(bx,"isRecaptchaEnabled");var Ix=a(()=>be(Ae.Feature.PKCE_OIDC),"isPkceOidcEnabled");async function It(){return be(Ae.Feature.EXPANDED_PUBLIC_API)}a(It,"isExpandedPublicApiEnabled");async function Sx(e){if(bt.env.ENABLE_SSO_MAINTENANCE_MODE||!await Lf())return!1;let r;return e?.config?r=e.config:r=await bt.configs.getSettingsConfig(),!!r.isSSOEnforced}a(Sx,"isSSOEnforced");var qs=a(async()=>{let e=Ae.Feature.SCIM,t=await be(e),r=await bt.configs.getSCIMConfig();if(!t||!r?.enabled)throw new bt.FeatureDisabledError(`${e} is not currently enabled`,e);return!0},"checkSCIM");async function wx(){return be(Ae.Feature.VIEW_PERMISSIONS)}a(wx,"isViewPermissionEnabled");async function Tx(){return be(Ae.Feature.VIEW_READONLY_COLUMNS)}a(Tx,"isViewReadonlyColumnsEnabled");var Ex={faviconUrl:void 0,faviconUrlEtag:void 0,emailBrandingEnabled:!0,platformTitle:void 0,loginHeading:void 0,loginButton:void 0,metaDescription:void 0,metaImageUrl:void 0,metaTitle:void 0};async function vx(e){return await Ls()?{faviconUrl:e.faviconUrl,faviconUrlEtag:e.faviconUrlEtag,emailBrandingEnabled:e.emailBrandingEnabled,platformTitle:e.platformTitle,loginHeading:e.loginHeading,loginButton:e.loginButton,metaDescription:e.metaDescription,metaImageUrl:e.metaImageUrl,metaTitle:e.metaTitle}:Ex}a(vx,"getBrandingConfig");var ks={};x(ks,{enrichAIConfig:()=>Ds});var Pf=require("@budibase/backend-core");var Rx="budibase_ai";async function Ds(e){if(Pf.env.SELF_HOSTED)return e;for(let t of Object.values(e.config))if(t.provider==="BudibaseAI")return e;return e.config[Rx]={provider:"BudibaseAI",active:!0,isDefault:Object.keys(e.config).every(t=>!e.config[t].isDefault),defaultModel:process.env.BUDIBASE_AI_DEFAULT_MODEL||"gpt-5-mini",name:"Budibase AI"},e}a(Ds,"enrichAIConfig");var ft={};x(ft,{addAction:()=>Lx,addApp:()=>Px,addAutomation:()=>Nx,addGroup:()=>Ns,addPlugin:()=>Gs,addRow:()=>qx,addRows:()=>kx,addUsers:()=>Dn,bustCache:()=>Lo,decrement:()=>St,decrementMany:()=>xa,getCurrentUsageValues:()=>sc,getLicensedQuota:()=>qf,getQuotaUsage:()=>Ft,increment:()=>Me,incrementBudibaseAICredits:()=>Mn,incrementMany:()=>zt,removeApp:()=>Ux,removeGroup:()=>Bs,removePlugin:()=>Fs,removeRow:()=>Dx,removeRows:()=>Mx,removeUsers:()=>Rr,set:()=>Ms,setAllUsage:()=>Uo,setAppUsageValue:()=>Po,setUsage:()=>ac,setUsagePerApp:()=>nc,updatePluginCount:()=>Ws,updateUsage:()=>Tr,usageLimitIsExceeded:()=>Ox,utils:()=>Gr});var Un=require("@budibase/types");var et=require("@budibase/backend-core"),de=require("@budibase/types"),Yt=require("dd-trace");var Me=a(async(e,t,r)=>await Yt.tracer.trace("quotas.increment",async n=>(n.addTags({name:e,type:t}),await Uf({change:1,name:e,type:t,opts:r}))),"increment"),zt=a(e=>Yt.tracer.trace("quotas.incrementMany",async()=>Uf(e)),"incrementMany"),Uf=a(async e=>await Yt.tracer.trace("quotas.tryIncrement",async t=>{let r=Array.isArray(e)?e:[e];t.addTags({numActions:r.length}),await Tr(r.map(o=>({usageChange:o.change,name:o.name,type:o.type,opts:{dryRun:!0,suppressErrorLog:o.opts?.suppressErrorLog,id:o.opts?.id}})));let n=[];for(let o of r)await Yt.tracer.trace("quotas.incrementMany.fn",async s=>{s.addTags({actionName:o.name,actionType:o.type,actionChange:o.change});let i=o.opts?.fn;i&&n.push(await i())});return await Tr(r.map(o=>({usageChange:o.change,name:o.name,type:o.type,opts:{dryRun:!1,valueFn:o.opts?.valueFn,suppressErrorLog:o.opts?.suppressErrorLog,id:o.opts?.id}}))),n[0]}),"tryIncrement"),St=a((e,t,r={})=>Tr({usageChange:-1,name:e,type:t,opts:r}),"decrement"),xa=a(e=>{let t=Array.isArray(e)?e:[e];return Tr(t.map(r=>({usageChange:-r.change,name:r.name,type:r.type,opts:r.opts})))},"decrementMany"),Ms=a(async(e,t,r)=>it.setUsage(r,e,t),"set"),_x=a((e,t,r)=>{if(e==de.QuotaUsageType.STATIC){let n=r.usageQuota.triggers;return n?n[t]||{}:{}}else{let n=it.utils.getCurrentMonthString(),o=r.monthly[n].triggers;return o?o[t]||{}:{}}},"getExistingTriggers"),xx=a(async(e,t,r,n)=>{try{await et.locks.doWithLock({type:de.LockType.TRY_ONCE,name:de.LockName.TRIGGER_QUOTA,resource:e,ttl:1e4},async()=>{let o={percentage:r,name:t.name};n&&(o.resetDate=n),await Lt.triggerQuota(o)})}catch(o){et.logging.logAlert("Error triggering quota",o)}},"triggerQuota"),Cx=a(async(e,t,r,n)=>{let o=await Ft(),s=e===de.QuotaUsageType.MONTHLY?o.quotaReset:void 0,i=await _x(e,t,o),u=n.triggers,c=r/n.value*100;c>100&&(c=100);for(let[f,g]of u.entries())if(c>=g&&n.value!==At.UNLIMITED){if(!i[g]){i[g]=new Date().toISOString();let y=u[f+1]||100;(!(c>=y)||c===g)&&await xx(t,n,c,s)}}else i[g]=void 0;return i},"checkTriggers"),Tr=a(async e=>{await Yt.tracer.trace("quotas.updateUsage",async t=>{let r=et.tenancy.getTenantId(),n=Array.isArray(e)?e:[e];t.addTags({numActions:n.length,tenantId:r});let o,s,i=[],u={},c={},f={},g={};for(let y of n)await Yt.tracer.trace("quotas.updateUsage.action",async E=>{E.addTags({actionName:y.name,actionType:y.type,actionUsageChange:y.usageChange});try{o=et.context.getWorkspaceId()}catch{}if(de.APP_QUOTA_NAMES.includes(y.name)&&!o)throw new Error("App context required for quota update");try{s=await qf(de.QuotaType.USAGE,y.name,y.type),i.push(s);let{total:k,app:D,breakdown:C}=await it.getCurrentUsageValues(y.type,y.name,y.opts?.id);k+=y.usageChange,D!=null&&(D+=y.usageChange),C!=null&&(C+=y.usageChange);let W={};if(y.opts?.dryRun||(W=await Cx(y.type,y.name,k,s),g={...g,[y.name]:W}),s.value!==At.UNLIMITED&&k>s.value&&y.usageChange>0)throw new et.UsageLimitError(`Licensed ${s.name} of ${s.value} has been exceeded`,s.name);if(k=Math.max(0,k),D&&(D=Math.max(0,D)),C&&(C=Math.max(0,C),f={...f,[y.name]:C}),!y.opts?.dryRun){let ye=y.opts?.valueFn;ye&&(k=await ye(),D=k),u={...u,[y.name]:k},c={...c,[y.name]:D}}}catch(k){throw y.opts?.suppressErrorLog||console.error(`Error updating usage quotas for ${y.name}`,k),k}});let h=n.filter(y=>!y.opts?.dryRun).map(y=>({name:y.name,type:y.type,values:{total:u[y.name],app:c[y.name],breakdown:f[y.name],triggers:g[y.name]},opts:{...y.opts,tenantId:r}}));h.length>0&&await it.setAllUsage(h)})},"updateUsage"),qf=a(async(e,t,r)=>{let n=await Je.getCachedLicense();if(!n){let o=et.tenancy.getTenantId();throw new Error("License not found for tenant id "+o)}if(r&&(0,de.isStaticQuota)(e,r,t))return n.quotas[e][r][t];if(r&&(0,de.isMonthlyQuota)(e,r,t))return n.quotas[e][r][t];if((0,de.isConstantQuota)(e,t))return n.quotas[e][t];throw new Error("Invalid quota type")},"getLicensedQuota"),Ox=a(async({name:e,type:t,usageChange:r})=>{try{return await Tr({usageChange:r,name:e,type:t,opts:{dryRun:!0}}),!1}catch(n){if(n.code===de.ErrorCode.USAGE_LIMIT_EXCEEDED)return!0;throw n}},"usageLimitIsExceeded");var Lx=a(async e=>Me(Un.MonthlyQuotaName.ACTIONS,Un.QuotaUsageType.MONTHLY,{fn:e}),"addAction");var Df=require("@budibase/backend-core"),Er=require("@budibase/types");var kf=a(async()=>{let e=await Df.db.getAllWorkspaces({dev:!0});return e?e.length:0},"getDevAppsCount"),Px=a(async(e,{appId:t}={})=>Me(Er.StaticQuotaName.WORKSPACES,Er.QuotaUsageType.STATIC,{fn:e,valueFn:kf,id:t}),"addApp"),Ux=a(async({appId:e}={})=>St(Er.StaticQuotaName.WORKSPACES,Er.QuotaUsageType.STATIC,{valueFn:kf,id:e}),"removeApp");var lt=require("@budibase/types");var qx=a(async(e,{tableId:t}={})=>Me(lt.StaticQuotaName.ROWS,lt.QuotaUsageType.STATIC,{fn:e,id:t}),"addRow"),Dx=a(async({tableId:e}={})=>St(lt.StaticQuotaName.ROWS,lt.QuotaUsageType.STATIC,{id:e}),"removeRow"),kx=a(async(e,t,{tableId:r}={})=>zt({change:e,name:lt.StaticQuotaName.ROWS,type:lt.QuotaUsageType.STATIC,opts:{fn:t,id:r}}),"addRows"),Mx=a(async(e,{tableId:t}={})=>xa({change:e,name:lt.StaticQuotaName.ROWS,type:lt.QuotaUsageType.STATIC,opts:{id:t}}),"removeRows");var qn=require("@budibase/types");var Nx=a(async(e,{automationId:t}={})=>Me(qn.MonthlyQuotaName.AUTOMATIONS,qn.QuotaUsageType.MONTHLY,{fn:e,id:t}),"addAutomation");var vr=require("@budibase/types");var Ns=a(async e=>Me(vr.StaticQuotaName.USER_GROUPS,vr.QuotaUsageType.STATIC,{fn:e}),"addGroup"),Bs=a(async()=>St(vr.StaticQuotaName.USER_GROUPS,vr.QuotaUsageType.STATIC),"removeGroup");var Dt=require("@budibase/types");var Gs=a(async e=>Me(Dt.StaticQuotaName.PLUGINS,Dt.QuotaUsageType.STATIC,{fn:e}),"addPlugin"),Fs=a(async()=>St(Dt.StaticQuotaName.PLUGINS,Dt.QuotaUsageType.STATIC),"removePlugin"),Ws=a(async e=>Ms(Dt.StaticQuotaName.PLUGINS,Dt.QuotaUsageType.STATIC,e),"updatePluginCount");var dt=require("@budibase/types"),Ca=require("@budibase/backend-core");var Dn=a(async(e,t,r)=>{let n=[{change:e,name:dt.StaticQuotaName.USERS,type:dt.QuotaUsageType.STATIC,opts:{fn:r,valueFn:Ca.users.getUserCount}}];t>0&&n.push({change:t,name:dt.StaticQuotaName.CREATORS,type:dt.QuotaUsageType.STATIC,opts:{valueFn:Ca.users.getCreatorCount}});let o=await zt(n);return await ir(),o},"addUsers"),Rr=a(async(e,t)=>{let r=[{change:e,name:dt.StaticQuotaName.USERS,type:dt.QuotaUsageType.STATIC,opts:{valueFn:Ca.users.getUserCount}}];t>0&&r.push({change:t,name:dt.StaticQuotaName.CREATORS,type:dt.QuotaUsageType.STATIC,opts:{valueFn:Ca.users.getCreatorCount}}),await xa(r),await ir()},"removeUsers");var kn=require("@budibase/types");var Mn=a(async e=>zt({change:e,name:kn.MonthlyQuotaName.BUDIBASE_AI_CREDITS,type:kn.QuotaUsageType.MONTHLY}),"incrementBudibaseAICredits");var Fn={};x(Fn,{db:()=>Qe});var Vs=require("@budibase/backend-core");var re={};x(re,{addUsers:()=>Gn,adjustGroupCreatorsQuotas:()=>Wx,cleanupApp:()=>Fx,enrichUserRolesFromGroups:()=>Gx,fetch:()=>Oa,get:()=>_r,getBulk:()=>$f,getGroupBuilderAppIds:()=>Wf,getGroupRoleId:()=>Bx,remove:()=>$s,removeUsers:()=>Qs,save:()=>Bn,updateGroupApps:()=>Ks});var N=require("@budibase/backend-core");var Mf=require("@budibase/backend-core");var Nn=class extends Mf.HTTPError{static{a(this,"GroupNameUnavailableError")}constructor(t){super(`Group name "${t}" is unavailable`,409)}};async function Gf(e,t){try{let r=[];for(let u of e)if(u.roles){let c=u.roles[N.db.getProdWorkspaceID(t)];c&&r.push(c)}let n=await Promise.all(r.map(async u=>({[u]:await N.roles.roleToNumber(u)}))),o,s,i={};n.forEach(u=>{let[c,f]=Object.entries(u)[0];i[c]={roleId:c,roleNum:f}});for(let{roleId:u,roleNum:c}of Object.values(i))(s===void 0||c>s)&&(s=c,o=u);return o}catch(r){throw N.logging.logAlert(`Error finding higest role for ${e.length} on app ${t}`,r),r}}a(Gf,"findHighestRole");async function Ff(e,t){return t?t=t.filter(r=>e.includes(r._id)):t=await z.getBulk(e,{enriched:!1}),t}a(Ff,"groupList");async function Wf(e,t){if(!e.userGroups)return[];let r=await Ff(e.userGroups,t?.groups),n=t?.appId?N.db.getProdWorkspaceID(t?.appId):null,o=[];for(let s of r){let i=s.builder?.apps;n&&i?.includes(n)?o.push(n):n||(o=o.concat(i||[]))}return[...new Set(o)]}a(Wf,"getGroupBuilderAppIds");async function Bx(e,t,r){if(!e.userGroups)return null;let n=await Ff(e.userGroups,r?.groups),o=N.db.getProdWorkspaceID(t);return e.roles?.[o]?e.roles[o]:(n=n.filter(s=>s?.roles?Object.keys(s.roles).includes(o):!1),await Gf(n,t))}a(Bx,"getGroupRoleId");async function Gx(e){if(!e||!e.userGroups)return e;let t=await $f(e.userGroups,{enriched:!1}),r=[];for(let o of t)o?.roles&&(r=r.concat(Object.keys(o.roles)));r=[...new Set(r)];for(let o of r)await N.context.doInWorkspaceContext(o,async()=>{if(e.roles[o])return;let s=await Gf(t,o);s&&(e.roles[o]=s)});let n=await Wf(e,{groups:t});if(n.length&&!e.builder?.global){let o=e.builder?.apps||[];e.builder={apps:o.concat(n)}}return e}a(Gx,"enrichUserRolesFromGroups");async function Oa(){return await z.fetch()}a(Oa,"fetch");async function _r(e){return await z.get(e)}a(_r,"get");async function $f(e,t={enriched:!0}){return await z.getBulk(e,t)}a($f,"getBulk");async function Nf(e){if(await z.getByName(e))throw new Nn(e)}a(Nf,"guardNameAvailability");async function Bf(e){let t=await z.getGroupUsers(e._id);if(!t.length)return 0;let n=await N.tenancy.getGlobalDB().getMultiple(t.map(s=>s._id));return(await N.userUtils.creatorsInList(n)).filter(s=>s).length}a(Bf,"getCreatorsCountInGroup");async function Bn(e){let t=[],r=!e._id,n=0;if(delete e.users,!e._id)e._id=z.generateUserGroupID(),await Nf(e.name),t.push(N.events.group.created(e));else{let s=await z.get(e._id);if(s.name!==e.name&&await Nf(e.name),t.push(N.events.group.updated(e)),JSON.stringify(s.roles)!==JSON.stringify(e.roles)){let i=s.users?.length||0,u=0;i>0&&(u=await Bf(s)),Object.values(e.roles).includes("CREATOR")?n=i-u:n=-i,t.push(N.events.group.permissionsEdited(e))}}await Promise.all(t);let o=a(()=>z.save(e),"saveGroup");if(r)return await Ns(o);{let s=await o();if(n>0)await Dn(0,n);else if(n<0){let i=await Bf(e),u=Math.abs(n)-i;u>0&&await Rr(0,u)}return s}}a(Bn,"save");async function $s(e,t){let r;try{r=await z.get(e)}catch{throw new Error("Group not found")}let n=Object.values(r.roles||{}).includes("CREATOR"),o=a(()=>{},"recalculateCreatorsQuotasFn");if(n){let i=N.tenancy.getGlobalDB(),u=await z.getGroupUsers(e),f=(await Promise.all(u.map(E=>i.get(E._id)))).map(E=>({...E,userGroups:E.userGroups.filter(M=>M!==e)})),h=(await N.userUtils.creatorsInList(f)).filter(E=>E).length,y=u.length-h;y&&(o=a(()=>Rr(0,y),"recalculateCreatorsQuotasFn"))}let s=await z.destroy(e,t);return await N.events.group.deleted(r),await Bs(),await o(),s}a($s,"remove");async function Gn(e,t){let r=await z.get(e),n=await N.users.bulkGetGlobalUsersById(t),o=[];for(let c of n)c.userGroups||(c.userGroups=[]),c.userGroups.includes(e)||o.push(c);if(!o.length)return o;let s=o.map(c=>({...c,userGroups:[...c?.userGroups||[],e]}));if(await N.users.bulkUpdateGlobalUsers(s),Object.values(r.roles||{}).includes("CREATOR")){let f=(await N.userUtils.creatorsInList(o)).filter(h=>h).length,g=o.length-f;g&&await Dn(0,g)}let u=[];for(let c of t)u.push(N.cache.user.invalidateUser(c));return await Promise.all(u),await N.events.group.usersAdded(s.length,r,t),s}a(Gn,"addUsers");async function Qs(e,t){let r=await z.get(e),n=await N.users.bulkGetGlobalUsersById(t),o=[];for(let u of n){if(!u.userGroups||!u.userGroups.includes(e))continue;let c=u.userGroups.indexOf(e);u.userGroups.splice(c,1),o.push(u)}if(await N.users.bulkUpdateGlobalUsers(o),Object.values(r.roles||{}).includes("CREATOR")){let c=(await N.userUtils.creatorsInList(o)).filter(g=>g).length,f=o.length-c;f&&await Rr(0,f)}let i=[];for(let u of t)i.push(N.cache.user.invalidateUser(u));return await Promise.all(i),o.length&&await N.events.group.usersDeleted(o.length,r,t),o}a(Qs,"removeUsers");async function Ks(e,t){let r=await _r(e);if(r.roles||(r.roles={}),t.appsToAdd)for(let n of t.appsToAdd)r.roles[n.appId]=n.roleId;if(t.appsToRemove)for(let n of t.appsToRemove)delete r.roles[n.appId];if(r.builder={apps:Object.entries(r.roles).filter(([n,o])=>o==="CREATOR").map(([n])=>n)},r.builder.apps.length&&!Ps())throw new N.HTTPError("Feature not enabled, please check license",400);return await Bn(r)}a(Ks,"updateGroupApps");async function Fx(e){let t=await Oa(),r=[];for(let n of t)!n.roles||!n.roles[e]||(delete n.roles[e],r.push(n));return await z.bulkSave(r)}a(Fx,"cleanupApp");async function Wx(){if(!await Us()){let e=N.tenancy.getGlobalDB(),r=(await Oa()||[]).filter(n=>Object.values(n?.roles||{}).includes("CREATOR"));for(let n of r){let o=await z.getGroupUsers(n._id),i=(await Promise.all(o.map(g=>e.get(g._id)))).map(g=>({...g,userGroups:g.userGroups.filter(h=>h!==n._id)})),c=(await N.userUtils.creatorsInList(i)).filter(g=>g).length,f=o.length-c;await z.save({...n,roles:{}}),f&&await Rr(0,f)}}}a(Wx,"adjustGroupCreatorsQuotas");Vs.users.UserDB.init(ft,re,Ze);var Qe=Vs.users.UserDB;var jn={};x(jn,{logs:()=>ei});var ei={};x(ei,{logSearch:()=>Jx,oldestLogDate:()=>zf,storeLog:()=>Xx});var $n=require("@budibase/backend-core"),Yf=require("@budibase/types");var ge=require("@budibase/backend-core"),Wn=require("@budibase/types");var jf=require("@budibase/backend-core");async function Qf(e,t){let r,n=5,o=!1,s,i=!0;for(;n>0;n--)try{i?s=await e():s=await exports.randomDelay(e),o=!0;break}catch(u){r=u}return o||jf.logging.logWarn(`Failed to backoff: ${t}`,r),s}a(Qf,"backOff");var{SEPARATOR:wt,UNICODE_MAX:$x,DocumentType:Kf,AutomationViewMode:Hs,ViewName:jx,getQueryIndex:Qx}=ge.db,Kx=new Date(0).toISOString(),Vx=100,Ys=a(async()=>on(Wn.ConstantQuotaName.AUTOMATION_LOG_RETENTION_DAYS),"oldestLogDate");function Vf(e,t,{status:r,automationId:n}={},o={}){let s=n?`${n}${wt}`:"",i=r?`${r}${wt}`:"",u;return r&&n?u=`${Hs.ALL}${wt}${i}${s}`:r?u=`${Hs.STATUS}${wt}${i}`:n?u=`${Hs.AUTOMATION}${wt}${s}`:u=`${Kf.AUTOMATION_LOG}${wt}`,{...o,descending:!0,startkey:`${u}${t}${$x}`,endkey:`${u}${e}`}}a(Vf,"getAutomationLogParams");function Hx(e,t,r){return`${Kf.AUTOMATION_LOG}${wt}${e}${wt}${r}${wt}${t}`}a(Hx,"generateAutomationLogID");async function zs(e,t,r={docs:!0}){let n=ge.context.getProdWorkspaceDB();await n.exists()||(n=ge.context.getDevWorkspaceDB());let o={status:r.status},s=r?.limit?r.limit:r?.paginate?9+1:void 0,i=Vf(e,t,o,{include_docs:r.docs,limit:s});r?.page&&(i.startkey=r.page);let u=await n.allDocs(i);return na(u,{paginate:r?.paginate,pageSize:9})}a(zs,"getAllLogs");async function Js(e,t,r={}){let n=ge.context.getProdWorkspaceDB();await n.exists()||(n=ge.context.getDevWorkspaceDB());let o;try{let s={automationId:r?.automationId,status:r?.status},i=Vf(e,t,s,{include_docs:!0,limit:9+1});r?.page&&(i.startkey=r.page),o=await n.query(Qx(jx.AUTOMATION_LOGS),i)}catch(s){if(s!=null&&(s.name==="not_found"||s.error==="not_found"))return await Sc(),Js(e,t,r);throw s}return na(o,{paginate:!0,pageSize:9})}a(Js,"getLogsByView");async function Hf(e,t){let r=ge.context.getProdWorkspaceDB(),n=e._id,o=e.name,s=new Date().toISOString(),i=Hx(s,t.status,n),u={...t,automationId:n,status:t.status,automationName:o,createdAt:s,_id:i};return await r.put(u),i}a(Hf,"writeLog");async function Xs(e,{clearing:t}={clearing:!1}){let r=ge.context.getProdWorkspaceDB();await Qf(async()=>{let n=await r.get(ge.db.DocumentType.WORKSPACE_METADATA);for(let o of e){let s=o.split(ge.db.SEPARATOR),i=`${s[s.length-3]}${ge.db.SEPARATOR}${s[s.length-2]}`,u={};n.automationErrors&&(u=n.automationErrors),Array.isArray(u[i])||(u[i]=[]);let c=u[i].indexOf(o);t&&c!==-1?u[i].splice(c,1):u[i].push(o),u[i].length===0&&delete u[i],n.automationErrors=u}await r.put(n),await ge.cache.workspace.invalidateWorkspaceMetadata(n.appId,n)},"Failed to update app metadata with automation log error")}a(Xs,"updateAppMetadataWithErrors");async function Yx(){let e=await Ys();try{return await zs(Kx,e,{docs:!1,paginate:!1,limit:Vx})}catch{return{data:[],hasNextPage:!1}}}a(Yx,"getExpiredLogs");async function Zs(){let e=ge.context.getProdWorkspaceDB();try{let t=await Yx();if(!t.data||t.data.length===0)return;let r=t.data.map(o=>({_id:o.id,_rev:o.value.rev,_deleted:!0})),n=t.data.filter(o=>{let s=o.id.split(ge.db.SEPARATOR);return s[s.length-1]===Wn.AutomationStatus.ERROR}).map(o=>o.id);await e.bulkDocs(r),n.length&&await Xs(n,{clearing:!0})}catch(t){ge.logging.logAlert(`Failed to cleanup automation log history - Database "${e.name}"`,t)}}a(Zs,"clearOldHistory");var zf=Ys;async function zx(e,t,r,n){let o,s=new Date().toISOString(),i=await zf();return(!e||e<i)&&(e=i),r||t?o=await Js(e,s,{automationId:r,status:t,page:n}):o=await zs(e,s,{status:t,page:n,docs:!0,paginate:!0}),o}a(zx,"getLogs");async function Jx(e){return await Zs(),await zx(e.startDate,e.status,e.automationId,e.page)}a(Jx,"logSearch");async function Xx(e,t){if(!$n.db.isProdWorkspaceID($n.context.getWorkspaceId()))return;let r=await Hf(e,t);t.status===Yf.AutomationStatus.ERROR&&await Xs([r]),await Zs()}a(Xx,"storeLog");var Qn={};x(Qn,{checkPluginQuotas:()=>tC,deletePlugin:()=>eC,storePlugin:()=>Zx});var em=require("@budibase/types"),fe=require("@budibase/backend-core");var Jf=F(require("fs")),Xf=require("path");function Zf(e,t){return Jf.default.readFileSync((0,Xf.join)(e,t),"utf8")}a(Zf,"loadJSFile");async function Zx(metadata,directory,source){let db=fe.tenancy.getGlobalDB(),version=metadata.package.version,name=metadata.package.name,description=metadata.package.description,hash=metadata.schema.hash,bucketPath=fe.objectStore.getPluginS3Dir(name),files=await fe.objectStore.uploadDirectory(fe.objectStore.ObjectStoreBuckets.PLUGINS,directory,bucketPath),jsFile=files.find(e=>e.name.endsWith(".js")),iconFile=files.find(e=>e.name.endsWith(".svg"));if(!jsFile)throw new Error("Plugin missing .js file.");if(metadata.schema.type===em.PluginType.DATASOURCE){let js=Zf(directory,jsFile.name);try{eval(js)}catch(e){let t=e?.message?e.message:JSON.stringify(e);throw new Error(`JS invalid: ${t}`)}}let iconFileName=iconFile?iconFile.name:null,pluginId=fe.db.generatePluginID(name),rev;try{rev=(await db.get(pluginId))._rev}catch(e){rev=void 0}let doc={_id:pluginId,_rev:rev,...metadata,name,version,hash,description,source};iconFileName&&(doc.iconFileName=iconFileName),source&&(doc={...doc,source});let write=a(async()=>{let e=await db.put(doc);return await fe.events.plugin.imported(doc),{...doc,_rev:e.rev}},"write");return rev?await write():await Gs(write)}a(Zx,"storePlugin");async function eC(e){let t=fe.tenancy.getGlobalDB();try{let r=await t.get(e),n=fe.objectStore.getPluginS3Dir(r.name);await fe.objectStore.deleteFolder(fe.objectStore.ObjectStoreBuckets.PLUGINS,n),await t.remove(e,r._rev),await fe.events.plugin.deleted(r),await Fs()}catch(r){let n=r?.message?r?.message:r;throw new Error(`Failed to delete plugin: ${n}`)}}a(eC,"deletePlugin");async function tC(){let e=fe.tenancy.getGlobalDB();try{let r=(await e.allDocs(fe.db.getPluginParams())).rows.length;console.log(`Syncing plugin count: ${r}`),await Ws(r)}catch(t){fe.logging.logAlert("Unable to retrieve plugins for quota check",t)}}a(tC,"checkPluginQuotas");var mt={};x(mt,{fetch:()=>aC,fetchValues:()=>nC,isEncryptionKeyAvailable:()=>rC,isValid:()=>am,remove:()=>sC,update:()=>oC});var tm=require("@budibase/backend-core"),La=require("@budibase/types");function rC(){return!!tm.env.ENCRYPTION_KEY}a(rC,"isEncryptionKeyAvailable");async function aC(){let e=await jt.get();return Object.keys(e.variables)}a(aC,"fetch");async function nC(e){let r=(await jt.get()).variables,n={};for(let[o,s]of Object.entries(r))switch(e){case La.Environment.DEVELOPMENT:n[o]=s.development;break;case La.Environment.PRODUCTION:default:n[o]=s.production;break}return n}a(nC,"fetchValues");async function rm(e){if(!(await ct.cache.getCachedLicense()).features.includes(La.Feature.ENVIRONMENT_VARIABLES))throw new Error("User does not have access to environment variables feature.");let r=await jt.get();r.variables=e(r.variables),await jt.update(r)}a(rm,"changeValues");async function oC(e,t){if(am(e))await rm(n=>(n[e]=t,n));else throw new Error("Variable name has characters that are not allowed")}a(oC,"update");async function sC(e){await rm(t=>(delete t[e],t))}a(sC,"remove");function am(e){return/^[a-zA-Z0-9-_]+$/.test(e)}a(am,"isValid");var kt={};x(kt,{definitions:()=>yC,download:()=>hC,fetch:()=>gC,write:()=>fC});var Pe=require("@budibase/backend-core"),Vn=require("@budibase/types");var ue=require("@budibase/backend-core"),tt=require("@budibase/types");var nm=require("memorystream"),om=new ue.sql.Sql(tt.SqlClient.SQL_LITE);async function iC(e,t,r){let n={operation:tt.Operation.READ,table:or.searchTable(),tables:{},paginate:{limit:r||9,page:t},filters:e,resource:{fields:[]},sort:{timestamp:{direction:tt.SortOrder.DESCENDING,type:tt.SortType.STRING}}},o=om._query(n);if(Array.isArray(o))throw new Error("Cannot execute multiple queries for audit log search");return{sql:o.sql,bindings:o.bindings}}a(iC,"getAuditLogSqlQuery");function uC(e){return`${ue.DocumentType.AUDIT_LOG}${ue.SEPARATOR}${e}${ue.SEPARATOR}${ue.utils.newid()}`}a(uC,"generateAuditLogID");async function sm(e){e._id||(e._id=uC(e.timestamp)),e.type||(e.type=tt.AUDIT_LOG_TYPE);try{let r=await ue.context.getAuditLogsDB().put(e);return{...e,_rev:r.rev}}catch(t){ue.logging.logAlert("Failed to write audit log",t)}}a(sm,"save");async function ti(e,t,r){t||(t=1);let n=ue.context.getAuditLogsDB();try{let o=9+1,s=await iC(e,t,o),i=or.searchTable(),u=om.convertJsonStringColumns(i,await n.sql(s.sql,s.bindings)),c;u.length>o&&(c=u.pop());let f={rows:u,hasNextPage:!!c};return f.hasNextPage&&(f.bookmark=t+1),f}catch(o){if(o.status===404&&!r?.isRetry)return await cC(),await ic(),await ti(e,t,{isRetry:!0});throw o}}a(ti,"searchSQL");async function cC(){let e=ue.context.getAuditLogsDB(),r=(await e.allDocs(ue.db.getDocParams(ue.DocumentType.AUDIT_LOG,null,{include_docs:!0}))).rows.map(n=>n.doc).filter(n=>n&&!n.type).map(n=>({...n,type:tt.AUDIT_LOG_TYPE}));await e.bulkDocs(r)}a(cC,"migrate");function im(e){let t=ue.context.getAuditLogsDB(),r=new nm,n=t.dump(r,{filter:s=>{let i=s;if(!i._id?.startsWith(ue.DocumentType.AUDIT_LOG))return!1;let u=!0,c=a((f,g)=>{!f||f.length===0||(u=!!(u&&g&&f.includes(g)))},"matcher");if(c(e.userIds,i.userId),c(e.appIds,i.appId),c(e.events,i.event),(e.startDate||e.endDate)&&(u=u&&i.timestamp>=e.startDate&&i.timestamp<=e.endDate),e.fullSearch){let f=JSON.stringify(s);u=u&&f.includes(e.fullSearch)}return u}}),o=new nm;return r.on("data",s=>{let i=JSON.parse(Buffer.from(s).toString());if(Array.isArray(i.docs)){let u="";for(let c of i.docs)u+=JSON.stringify(c)+`
38
- `;o.write(u)}}),r.on("end",()=>{o.end()}),{promise:n,stream:o}}a(im,"dump");var Pa=require("@budibase/backend-core"),Ua=require("@budibase/string-templates"),Kn=require("@budibase/types");var lC=Pa.constants.MIN_VALID_DATE.toISOString(),dC=Pa.constants.MAX_VALID_DATE.toISOString();function ri(e){return(e.startDate||e.endDate)&&(e.startDate=e.startDate||lC,e.endDate=e.endDate||dC),e}a(ri,"fillDates");async function um(e){Array.isArray(e.appIds)&&(e.appIds=e.appIds.map(n=>Pa.db.getProdWorkspaceID(n)));let t={};function r(n,o){o?.length&&(t.oneOf={...t.oneOf,[n]:o})}return a(r,"addStringParams"),r("userId",e.userIds),r("appId",e.appIds),r("event",e.events),e.fullSearch&&(t.fuzzyOr=!0,t.fuzzy={name:e.fullSearch,fallback:e.fullSearch}),(e.startDate||e.endDate)&&(e=ri(e),t.range={timestamp:{high:e.endDate,low:e.startDate}}),Object.keys(t).length===0&&(t.notEmpty={event:!0}),t}a(um,"getSearchFilters");function ai(e,t,r){let n={_id:e,status:Kn.AuditLogResourceStatus.DELETED};switch(t){case"app":n.name=r?.appName;break;case"user":n.email=r?.email;break}return n}a(ai,"deleted");function ni(e){let t=(0,Ua.findHBSBlocks)(e);for(let r of t){let n=` "${r}"`;e=e.replace(e.includes(n)?n:` ${r}`,""),e=(0,Ua.processStringSync)(e,{})}return e}a(ni,"removeTemplateStrings");function cm(e,t){let r=Kn.AuditedEventFriendlyName[e];if(!r)throw new Error("No friendly name found.");let n=(0,Ua.processStringSync)(r,t);return n.includes('""')&&(n=ni(r)),n}a(cm,"getEventFriendlyName");async function fC(e,t,r){if(!await Ln()||!Pe.utils.isAudited(e))return;let n=cm(e,t),o=new Date;r?.timestamp&&(o=new Date(r.timestamp));let s={timestamp:o.toISOString(),event:e,name:n,userId:r?.userId||Vn.AuditLogSystemUser,metadata:{...t,...r?.hostInfo}},i={};try{if(r?.appId){s.appId=Pe.db.getProdWorkspaceID(r.appId);let u=await Pe.cache.workspace.getWorkspaceMetadata(r.appId);"name"in u&&(i.appName=u.name)}if(r?.userId){let u=await Pe.users.getById(r?.userId);i.email=u.email}}catch(u){Pe.logging.logAlert("Failed to retrieve fallback information for audit log",u)}return s.fallback=i,await sm(s)}a(fC,"write");async function mC(e){let t=e.map(u=>u.userId),n=e.filter(u=>u.appId).map(u=>Pe.db.getDevWorkspaceID(u.appId)),o=await Pe.users.bulkGetGlobalUsersById([...new Set(t)],{cleanup:!0}),s=await Pe.db.getWorkspacesByIDs([...new Set(n)]),i=[];for(let u of e){let c=o.find(h=>h?._id===u.userId),f=s.find(h=>Pe.db.isSameWorkspaceID(h?.appId,u.appId)),g={event:u.event,timestamp:u.timestamp,name:u.name,metadata:u.metadata,user:c||ai(u.userId,"user",u.fallback)};u.appId&&(g.app=f||ai(u.appId,"app",u.fallback)),i.push(g)}return i}a(mC,"enrich");async function gC(e){if(!await Ln())throw new Error("Audit logs not available - license required.");let t=await um(e);if(typeof e.bookmark=="string")throw new Error("String based bookmark not supported.");let r=await ti(t,e.bookmark);return{hasNextPage:r.hasNextPage,bookmark:r.bookmark,data:await mC(r.rows)}}a(gC,"fetch");function hC(e){return e=ri(e),im(e)}a(hC,"download");function yC(){let e=Object.entries(Vn.AuditedEventFriendlyName).filter(r=>r[1]!=null),t={};for(let r of e)t[r[0]]=ni(r[1]);return t}a(yC,"definitions");var Hn={};x(Hn,{applications:()=>ui,roles:()=>si,users:()=>oi});var oi={};x(oi,{roleCheck:()=>bC});function AC(e,t){let r=e.request.body;return r.builder&&(r.builder=t?.builder||void 0),r.admin&&(r.admin=t?.admin||void 0),r.roles&&(r.roles=t?.roles||{}),e.request.body=r,e}a(AC,"removeRoles");async function bC(e,t){return await It()||AC(e,t),e}a(bC,"roleCheck");var si={};x(si,{assign:()=>IC,unAssign:()=>SC});var qa=require("@budibase/backend-core");async function IC(e,t){if(!await It())throw new Error("Unable to assign roles - license required.");let r=await Qe.bulkGet(e);for(let n of r){if(t.role&&t.role.roleId){let o=qa.db.getProdWorkspaceID(t.role.appId);n.roles[o]=t.role.roleId}if(t.appBuilder){let o=qa.db.getProdWorkspaceID(t.appBuilder.appId),s=n.builder?.apps||[];n.builder={apps:s.concat([o])}}t.builder&&(n.builder={global:!0}),t.admin&&(n.admin={global:!0}),n.roles}await Qe.bulkUpdate(r)}a(IC,"assign");async function SC(e,t){if(!await It())throw new Error("Unable to un-assign roles - license required.");let r=await Qe.bulkGet(e);for(let n of r){if(t.role){let o=qa.db.getProdWorkspaceID(t.role?.appId);n.roles[o]===t.role.roleId&&delete n.roles[o]}if(t.appBuilder&&n.builder?.apps){let o=qa.db.getProdWorkspaceID(t.appBuilder.appId);n.builder.apps=n.builder.apps.filter(s=>s!==o)}t.builder&&n.builder&&delete n.builder,t.admin&&n.admin&&delete n.admin}}a(SC,"unAssign");var ui={};x(ui,{buildExportFn:()=>TC,buildImportFn:()=>wC});var ii=require("@budibase/backend-core");function wC(e){return async(t,r)=>{await It()||t.throw(403,"Endpoint unavailable, license required."),t.request.files?.appExport||t.throw(400,"Must provide app export file for import."),await ii.context.doInWorkspaceContext(t.params.appId,async()=>{await e(t),t.body=void 0,t.status=204,await r()})}}a(wC,"buildImportFn");function TC(e){return async(t,r)=>{await It()||t.throw(403,"Endpoint unavailable, license required.");let{encryptPassword:n,excludeRows:o}=t.request.body;await ii.context.doInWorkspaceContext(t.params.appId,async()=>{t.request.body={encryptPassword:n,excludeRows:o},t.query.appId=t.params.appId,await e(t),await r()})}}a(TC,"buildExportFn");var Se=require("@budibase/backend-core"),Ie=require("@budibase/types"),dm=F(require("fs")),fm=require("path");var ci=require("@budibase/backend-core");var pm;function lm(){pm=new ci.queue.BudibaseQueue(ci.queue.JobQueue.APP_BACKUP,{maxStalledCount:3,jobOptions:{attempts:3,removeOnFail:!0,removeOnComplete:!0}})}a(lm,"init");function Jt(){return pm}a(Jt,"getBackupQueue");async function pi(e,t={}){return $e.storeAppBackupMetadata(e,t)}a(pi,"storeAppBackupMetadata");function mm(e){let t=new Date().toISOString();switch(e){case Ie.BackupStatus.COMPLETE:case Ie.BackupStatus.FAILED:return{timestamp:t,finishedAt:t};case Ie.BackupStatus.STARTED:return{timestamp:t,startedAt:t};case Ie.BackupStatus.PENDING:return{timestamp:t,createdAt:t}}}a(mm,"getTimestamps");async function EC(e,t,r,n){let o=await Yn(e);return await $e.storeAppBackupMetadata({...o,...mm(t),contents:r,status:t,type:Ie.BackupType.BACKUP},{filename:n,docId:e})}a(EC,"updateBackupStatus");async function vC(e,t,r){let n=await Yn(e);return await $e.storeAppBackupMetadata({...n,...mm(r),status:r,type:Ie.BackupType.RESTORE,trigger:Ie.BackupTrigger.MANUAL},{docId:e,docRev:t})}a(vC,"updateRestoreStatus");async function Yn(e){return $e.getAppBackupMetadata(e)}a(Yn,"getAppBackup");async function RC(e,t){return $e.updateAppBackupMetadata(e,t)}a(RC,"updateAppBackup");async function gm(e){let t=await $e.getAppBackupMetadata(e);return t.filename&&await Se.objectStore.deleteFile(Se.objectStore.ObjectStoreBuckets.BACKUPS,t.filename),$e.deleteAppBackupMetadata(e)}a(gm,"deleteAppBackup");async function _C(e){let t=[];for(let r of e)try{await gm(r),t.push({backupId:r,success:!0})}catch(n){t.push({backupId:r,success:!1,error:n instanceof Error?n.message:"Unknown error"})}return t}a(_C,"deleteAppBackups");async function xC(e,t){return $e.fetchAppBackups(e,t)}a(xC,"fetchAppBackups");async function hm(e){let t=await $e.getAppBackupMetadata(e);if(!t.filename)throw new Error("Backup incomplete - cannot download.");let{stream:r}=await Se.objectStore.getReadStream(Se.objectStore.ObjectStoreBuckets.BACKUPS,t.filename);return{metadata:t,stream:r}}a(hm,"getBackupDownloadStream");async function CC(e){let{stream:t}=await hm(e),r=(0,fm.join)(Se.objectStore.budibaseTempDir(),Se.utils.newid()),n=dm.default.createWriteStream(r);return new Promise((o,s)=>{t.on("error",s),n.on("error",s),t.pipe(n).on("close",()=>o(r))})}a(CC,"downloadAppBackup");async function OC(e,t,r={}){let n;try{n=await pi({appId:e,trigger:t,timestamp:new Date().toISOString(),status:Ie.BackupStatus.PENDING,type:Ie.BackupType.BACKUP,...r})}catch(o){if(o.status===409)return;throw o}return await Jt().add({docId:n.id,docRev:n.rev,appId:e,export:{trigger:t,...r}}),await Se.events.backup.appBackupTriggered(e,n.id,Ie.BackupType.BACKUP,t,r?.name),n.id}a(OC,"triggerAppBackup");async function LC(e,t,r,n){let o=await Yn(t),s;try{s=await pi({appId:e,timestamp:new Date().toISOString(),status:Ie.BackupStatus.PENDING,type:Ie.BackupType.RESTORE,createdBy:n})}catch(i){if(i?.status===409)return;throw i}return await Jt().add({appId:e,docId:s.id,docRev:s.rev,import:{nameForBackup:r,backupId:t,createdBy:n}}),{restoreId:s.id,metadata:o}}a(LC,"triggerAppRestore");async function PC(e,t,r){let n=Se.db.getProdWorkspaceID(e);await Se.context.doInWorkspaceContext(n,async()=>{let o=Se.context.getProdWorkspaceDB();if(!await o.exists())return;let i=await o.tryGet(Ie.DocumentType.WORKSPACE_METADATA);i&&(i.backupErrors||(i.backupErrors={}),i.backupErrors[t]||(i.backupErrors[t]=[]),i.backupErrors[t].push(r),await o.put(i),await Se.cache.workspace.invalidateWorkspaceMetadata(i.appId,i))})}a(PC,"trackBackupError");var UC={isEnabled:Os,triggerAppRestore:xe(LC),triggerAppBackup:xe(OC),getBackupDownloadStream:xe(hm),downloadAppBackup:xe(CC),fetchAppBackups:xe(xC),storeAppBackupMetadata:xe(pi),updateBackupStatus:xe(EC),updateRestoreStatus:xe(vC),getAppBackup:xe(Yn),updateAppBackup:xe(RC),deleteAppBackup:xe(gm),deleteAppBackups:xe(_C),trackBackupError:xe(PC)},Ke=UC;var di={};x(di,{init:()=>li});var ae=require("@budibase/backend-core"),rt=require("@budibase/types"),xr=F(require("fs"));async function li(e){Jt().process(async t=>{let r=t.data;try{if(r.export)return console.log("Exporting app backup:",r.appId,r.export.trigger),kC(t,e);if(r.import)return console.log("Importing app backup:",r.appId,r.import.backupId),DC(t,e)}catch(n){ae.logging.logAlert(`Failed to perform backup for app ID: ${r.appId}`,n)}})}a(li,"init");async function qC(e){await ae.db.getDB(e,{skip_setup:!0}).destroy()}a(qC,"removeExistingApp");async function ym(e,t,r,n){let o=ae.db.getDevWorkspaceID(r),s=ae.db.getProdWorkspaceID(r),i=new Date().toISOString(),u=a(async(c,f)=>{n?.doc?await Ke.updateBackupStatus(n.doc.id,c,f?.contents,f?.filename):await Ke.storeAppBackupMetadata({appId:s,timestamp:i,trigger:e,status:c,name:n?.name,type:rt.BackupType.BACKUP,contents:f?.contents,createdBy:n?.createdBy},{filename:f?.filename})},"updateMetadata");try{let c=await n.processing.exportAppFn(o,{tar:!0}),f=await n.processing.statsFn(o),g=`${s}/backup-${i}.tar.gz`,h=ae.objectStore.ObjectStoreBuckets.BACKUPS,y=xr.default.createReadStream(c);await ae.objectStore.streamUpload({bucket:h,filename:g,stream:y,extra:{type:"application/gzip",metadata:{name:n?.name,trigger:e,timestamp:i,appId:s}}}),await u(rt.BackupStatus.COMPLETE,{filename:g,contents:f}),xr.default.existsSync(c)&&xr.default.rmSync(c)}catch(c){ae.logging.logAlert("App backup error",c),await u(rt.BackupStatus.FAILED);let f=n?.doc?.id||`backup-${i}`,g=c instanceof Error?c.message:String(c);await Ke.trackBackupError(s,f,`Backup export failed: ${g}`)}}a(ym,"runBackup");async function DC(e,t){let r=e.data,n=r.appId,o=r.import.backupId,s=r.import.nameForBackup,i=r.import.createdBy,u=ae.tenancy.getTenantIDFromWorkspaceID(n);return ae.tenancy.doInTenant(u,async()=>{let c=ae.db.getDevWorkspaceID(n),f=`${c}_temp_${Date.now()}`,{rev:g}=await Ke.updateRestoreStatus(r.docId,r.docRev,rt.BackupStatus.STARTED);await ym(rt.BackupTrigger.RESTORING,u,n,{processing:t,createdBy:i,name:s});let h=await Ke.downloadAppBackup(o),y=rt.BackupStatus.COMPLETE;try{await t.importAppFn(f,ae.db.getDB(f),{file:{type:"application/gzip",path:h},key:h}),await qC(c),await new ae.db.Replication({source:f,target:c}).replicate()}catch(E){ae.logging.logAlert("App restore error",E),y=rt.BackupStatus.FAILED;let M=E instanceof Error?E.message:String(E);await Ke.trackBackupError(n,o,`Backup restore failed: ${M}`)}finally{try{await ae.db.getDB(f,{skip_setup:!0}).destroy()}catch{}}await Ke.updateRestoreStatus(r.docId,g,y),xr.default.existsSync(h)&&xr.default.rmSync(h,{force:!0})})}a(DC,"importProcessor");async function kC(e,t){let r=e.data,n=r.appId,o=r.export.trigger,s=r.export.name,i=ae.tenancy.getTenantIDFromWorkspaceID(n);await ae.tenancy.doInTenant(i,async()=>{try{let{rev:u}=await Ke.updateBackupStatus(r.docId,rt.BackupStatus.STARTED);return ym(o,i,n,{processing:t,doc:{id:r.docId,rev:u},name:s})}catch(u){ae.logging.logAlert("App backup error",u);let c=u instanceof Error?u.message:String(u);await Ke.trackBackupError(n,r.docId,`Backup export failed: ${c}`)}})}a(kC,"exportProcessor");var MC=a(async e=>{lm(),await li(e.processing)},"init"),Ne={...Ke,processing:di,init:MC,getBackupQueue:Jt};var Am=a(async e=>{e.backups&&await Ne.init(e.backups)},"init");var qe={};x(qe,{create:()=>ON,find:()=>CN,get:()=>xN,remove:()=>PN,update:()=>LN});var GA=F(su()),Tt=require("@budibase/backend-core");var FA=require("@budibase/types");async function xN(e){let t=Tt.tenancy.getGlobalDB(),r=new Tt.db.QueryBuilder(t.name,FA.SearchIndex.USER);r.setIndexBuilder(Tt.db.searchIndexes.createUserIndex),r.setLimit(e.pageSize),r.addEqual("scimInfo.isSync",!0);for(let[o,s]of Object.entries(e.filters?.equal??{}))r.addEqual(o,s);r.setSort("_id"),r.setSkip(e.skip);let n=await r.run();return{users:n.rows,total:n.totalRows}}a(xN,"get");async function CN(e){return await Tt.users.getById(e)}a(CN,"find");async function ON(e){let t=await Qe.getUserByEmail(e.email);if(t){if(t.scimInfo?.isSync)throw new Tt.HTTPError("User is already synched",409);e={...t,scimInfo:(0,GA.default)(t.scimInfo,e.scimInfo),password:void 0,firstName:e.firstName,lastName:e.lastName,updatedAt:e.updatedAt}}return await Qe.save(e,{requirePassword:!1})}a(ON,"create");async function LN(e,t){return await Qe.save(e,{requirePassword:!1,allowChangingEmail:t?.allowChangingEmail})}a(LN,"update");async function PN(e){return await Qe.destroy(e)}a(PN,"remove");var qr={};x(qr,{create:()=>UN});var WA=F(su());var $A=require("@budibase/backend-core");async function UN(e){let t=await Do(e.name),r;if(!t)r=(await re.save(e)).id;else{if(t.scimInfo?.isSync)throw new $A.HTTPError("Group is already synched",409);r=t._id,t.users&&(await re.removeUsers(r,t.users.map(o=>o._id)),delete t.users),t.scimInfo=(0,WA.default)(t.scimInfo,e.scimInfo),await re.save(t)}return await re.get(r)}a(UN,"create");var Zt={};x(Zt,{logRequest:()=>kN,logResponse:()=>MN});var at=require("@budibase/backend-core"),QA=F(jA());var{DocWritethrough:qN}=at.cache.docWritethrough;function DN(){return`${at.db.DocumentType.SCIM_LOG}${at.db.SEPARATOR}${(0,QA.default)().format("YYYYMMDD")}`}a(DN,"getLogDocId");var KA=a(()=>{let e=at.context.getScimDBName();return new qN(at.db.getDB(e),DN())},"getDB");async function kN(e){at.logging.logWarn("SCIM request log",e);let t=Date.now().toString();return await KA().patch({[`${t}_request`]:{ts:new Date().toISOString(),...e}}),t}a(kN,"logRequest");async function MN(e,t){at.logging.logWarn("SCIM response",t),await KA().patch({[`${e}_response`]:{ts:new Date().toISOString(),...t}})}a(MN,"logResponse");var gu={};x(gu,{doInScimContext:()=>pu,feature:()=>we,internalGroupOnly:()=>Ba,licenseAuth:()=>mu,licensing:()=>VA,requireSCIM:()=>lu,scimGroupOnly:()=>Na,scimUserOnly:()=>Ma});var Mt=require("@budibase/backend-core");var uo=require("@budibase/types");var NN=a((e={checkUsersLimit:!0})=>async(t,r)=>{if((e.licensingCheck?e.licensingCheck:()=>!!t.user)(t)){if(Mt.env.SELF_HOSTED&&Mt.env.DEFAULT_LICENSE)return t.user.license=ko,r();t.user.license=await ct.cache.getCachedLicense(t,{populateLicense:e.populateLicense,populateFreeLicense:e.populateFreeLicense}),e.checkUsersLimit&&(Mt.utils.isServingApp(t)||Mt.utils.isServingBuilder(t)||Mt.utils.isServingBuilderPreview(t)||Mt.utils.isPublicApiRequest(t))&&await ft.usageLimitIsExceeded({name:uo.StaticQuotaName.USERS,type:uo.QuotaUsageType.STATIC,usageChange:0})}return r()},"licensing"),VA=NN;var we={};x(we,{requireFeature:()=>BN,requireFeatures:()=>GN});var BN=a(e=>async(t,r)=>{await On(e),await r()},"requireFeature"),GN=a((...e)=>async(t,r)=>{await Cs(e),await r()},"requireFeatures");var co=require("@budibase/backend-core");var pu=a(async(e,t)=>{let r;return co.env.ENABLE_SCIM_LOGGER&&(r=await Zt.logRequest({...e.request.toJSON(),body:e.request.body})),await co.context.doInScimContext(async()=>{let n=await t();return r&&await Zt.logResponse(r,{...e.response.toJSON(),body:e.response.body}),n})},"doInScimContext");var lu=a(async(e,t)=>{await qs(),await t()},"requireSCIM");var HA=require("@budibase/backend-core");var Ma=a(e=>du(HA.users.getById,e,!0),"scimUserOnly"),Na=a(e=>du(z.get,e,!0),"scimGroupOnly"),Ba=a(e=>du(z.get,e,!1),"internalGroupOnly");function du(e,t,r){return async(n,o)=>{let s=n.params[t];return typeof s!="string"&&n.throw(404),!!(await e(s)).scimInfo?.isSync!==r&&n.throw(404),o()}}a(du,"scimSyncChecks");var Ga=require("@budibase/backend-core");var fu=require("dd-trace");async function mu(e,t){await fu.tracer.trace("licenseAuth",async r=>{let n=e.request.headers[Ga.constants.Header.LICENSE_KEY];Array.isArray(n)&&(n=n[0]),r.addTags({licenseKey:n}),n||e.throw(403,"License key not provided");let o=await vs(n);o||(r.addTags({licenseFound:!1}),e.throw(403,"License not found or invalid")),o.tenantId||e.throw(403,"License does not have a tenant ID"),fu.tracer.setUser({id:"anonymous",tenantId:o.tenantId}),await Ga.context.doInSelfHostTenantUsingCloud(o.tenantId,async()=>{await Ga.context.doInLicenseContext(o,async()=>{await t()})})})}a(mu,"default");var Su={};x(Su,{appBackups:()=>nb,auditLogs:()=>fb,environmentVariables:()=>wb,groups:()=>qb,scim:()=>pI});var Et=require("@budibase/backend-core"),lo=require("@budibase/types"),rb=F(require("@koa/router")),tr=F(require("joi"));var po=require("@budibase/backend-core"),hu=require("@budibase/types");async function er(e,t){t||e.throw(400,"App ID missing"),await cr.workspaceExists(t)||e.throw(400,`Provided app ID: ${t} - is invalid.`)}a(er,"checkAppID");async function YA(e){let t=e.params.appId;await er(e,t);let{body:r}=e.request,n=e.user?._id,o=await Ne.triggerAppBackup(t,hu.BackupTrigger.MANUAL,{name:r.name,createdBy:n});o||e.throw(500,"Unable to start backup."),e.body={backupId:o,message:"Backup triggered - process starting."}}a(YA,"manualBackup");async function zA(e){let t=e.params.appId;await er(e,t);let r=e.params.backupId,n=e.request.body.name,o=await Ne.triggerAppRestore(t,r,n,e.user?._id);o||e.throw(500,"Unable to start restore."),await po.events.backup.appBackupRestored(o.metadata),e.body={restoreId:o?.restoreId,message:"Restore triggered - process starting."}}a(zA,"importBackup");async function JA(e){let t=e.params.appId;await er(e,t);let r=e.params.backupId;await Ne.deleteAppBackup(r),e.body={message:"Backup deleted successfully."}}a(JA,"deleteBackup");async function XA(e){let t=po.context.getWorkspaceId();await er(e,t);let{backupIds:r}=e.request.body;(!Array.isArray(r)||r.length===0)&&e.throw(400,"backupIds must be a non-empty array");let n=await Ne.deleteAppBackups(r),o=n.filter(i=>i.success).length,s=n.length-o;e.body={message:`${o} backups deleted successfully${s>0?`, ${s} failed`:""}.`,results:n,successCount:o,failureCount:s}}a(XA,"deleteBackups");async function ZA(e){let t=e.params.appId;await er(e,t);let r=e.request.body;r?.trigger&&(r.trigger=r.trigger.toLowerCase(),Object.values(hu.BackupTrigger).includes(r.trigger)||e.throw(400,"Provided trigger is not a valid option.")),e.body=await Ne.fetchAppBackups(t,{paginate:!0,...r})}a(ZA,"fetchBackups");async function eb(e){let t=e.params.appId;await er(e,t);let r=e.params.backupId,n=e.request.body;e.body=await Ne.updateAppBackup(r,n.name)}a(eb,"updateBackup");async function tb(e){let t=e.params.appId;await er(e,t);let r=e.params.backupId,{metadata:n,stream:o}=await Ne.getBackupDownloadStream(r);e.attachment(`backup-${n.timestamp}.tar.gz`),e.body=o}a(tb,"downloadBackup");var ab=new rb.default;function WN(){return Et.auth.joiValidator.body(tr.default.object({trigger:tr.default.string().valid(...Object.values(lo.BackupTrigger)),type:tr.default.string().valid(...Object.values(lo.BackupType)),startDate:tr.default.date(),endDate:tr.default.date(),page:tr.default.string()}))}a(WN,"validateBackupSearch");ab.post("/api/apps/:appId/backups",Et.auth.builderOrAdmin,YA).post("/api/apps/:appId/backups/search",Et.auth.builderOrAdmin,WN(),ZA).get("/api/apps/:appId/backups/:backupId/file",Et.auth.builderOrAdmin,tb).patch("/api/apps/:appId/backups/:backupId",Et.auth.builderOrAdmin,eb).delete("/api/apps/:appId/backups/:backupId",Et.auth.builderOrAdmin,JA).delete("/api/apps/:appId/backups",Et.auth.builderOrAdmin,XA).post("/api/apps/:appId/backups/:backupId/import",Et.auth.builderOrAdmin,zA);var nb=ab;var yu=require("@budibase/backend-core");async function ob(e){let t=e.request.body,r=await kt.fetch(t);await yu.events.auditLog.filtered(t),e.body=r}a(ob,"search");async function sb(e){let t=e.request.body,{stream:r}=kt.download(t);await yu.events.auditLog.downloaded(t),e.attachment(`audit-logs-${Date.now()}.log`),e.body=r}a(sb,"download");async function ib(e){e.body={events:kt.definitions()}}a(ib,"definitions");var cb=require("@budibase/types"),rr=require("@budibase/backend-core"),pb=F(require("@koa/router")),Ve=F(require("joi"));function ub(){return rr.auth.joiValidator.body(Ve.default.object({userIds:Ve.default.array().items(Ve.default.string()).optional(),appIds:Ve.default.array().items(Ve.default.string()).optional(),events:Ve.default.array().items(Ve.default.string().valid(...Object.values(cb.Event))).optional(),startDate:Ve.default.string().optional().allow(""),endDate:Ve.default.string().optional().allow(""),fullSearch:Ve.default.string().optional().allow(""),bookmark:Ve.default.number()}))}a(ub,"buildAuditLogSearchValidator");var lb=new pb.default;lb.post("/api/global/auditlogs/search",rr.auth.adminOnly,ub(),ob).get("/api/global/auditlogs/download",rr.auth.adminOnly,rr.middleware.querystringToBody,ub(),sb).get("/api/global/auditlogs/definitions",rr.auth.adminOnly,ib);var fb=lb;var bu=require("@budibase/backend-core"),Au=require("@budibase/types");async function mb(e){e.body={encryptionKeyAvailable:mt.isEncryptionKeyAvailable()}}a(mb,"status");async function gb(e){e.body={variables:await mt.fetch()}}a(gb,"fetch");async function hb(e){let{name:t,production:r,development:n}=e.request.body;await mt.update(t,{production:r,development:n});let o=[Au.Environment.PRODUCTION];r!==n&&o.push(Au.Environment.DEVELOPMENT),await bu.events.environmentVariable.created(t,o),e.body={message:`Environment variable "${t}" created.`}}a(hb,"create");async function yb(e){let{production:t,development:r}=e.request.body,n=e.params.varName;await mt.update(n,{production:t,development:r}),e.body={message:`Environment variable "${n}" updated.`}}a(yb,"update");async function Ab(e){let t=e.params.varName;await mt.remove(t),await bu.events.environmentVariable.deleted(t),e.body={message:`Environment variable "${t}" deleted.`}}a(Ab,"destroy");var ar=require("@budibase/backend-core"),Ib=F(require("@koa/router")),Fa=F(require("joi"));var Sb=new Ib.default;function bb(){return ar.auth.joiValidator.body(Fa.default.object({name:Fa.default.string().optional(),production:Fa.default.string().required(),development:Fa.default.string().required()}))}a(bb,"buildEnvVarUpdateValidator");Sb.get("/api/env/variables/status",ar.auth.builderOrAdmin,mb).get("/api/env/variables",ar.auth.builderOrAdmin,gb).post("/api/env/variables",ar.auth.builderOrAdmin,bb(),hb).patch("/api/env/variables/:varName",ar.auth.builderOrAdmin,bb(),yb).delete("/api/env/variables/:varName",ar.auth.builderOrAdmin,Ab);var wb=Sb;var gt=require("@budibase/backend-core"),vt=require("@budibase/types"),Pb=F(require("@koa/router")),Ce=F(require("joi"));var Tb=require("@budibase/backend-core");async function Eb(e){let t=e.request.body;if(t.name=t.name.trim(),delete t.roles,t._id){let n=await _r(t._id);t.roles=n.roles,t.scimInfo=n.scimInfo}let r=await Bn(t);e.body={_id:r.id,_rev:r.rev}}a(Eb,"save");async function vb(e){let t=e.params.groupId,r=e.request.body.add,n=e.request.body.remove;(r&&!Array.isArray(r)||n&&!Array.isArray(n))&&e.throw(400,"Must supply a list of users to add or to remove");let o,s;r&&(o=await Gn(t,r)),n&&(s=await Qs(t,n)),e.body={added:o,removed:s}}a(vb,"updateGroupUsers");async function Rb(e){let t=e.params.groupId,r=e.request.body.add,n=e.request.body.remove;(r&&!Array.isArray(r)||n&&!Array.isArray(n))&&e.throw(400,"Must supply a list of objects, with appId and roleId to add or remove"),e.body=await Ks(t,{appsToAdd:r,appsToRemove:n})}a(Rb,"updateGroupApps");async function _b(e){e.body={data:await Oa()}}a(_b,"fetch");async function xb(e){let{groupId:t,rev:r}=e.params;try{await $s(t,r),e.body={message:"Group deleted successfully"}}catch(n){e.throw(n.status,n)}}a(xb,"destroy");async function Cb(e){try{e.body=await _r(e.params.groupId)}catch(t){e.throw(t.status,t)}}a(Cb,"find");async function Ob(e){let{pageSize:t=10,bookmark:r,emailSearch:n}=e.request.query,o=e.params.groupId,s={limit:t+1},i=await an(o,{...s,emailSearch:n,bookmark:r}),u=n?i[t]?.email:i[t]?._id,c=!!u;e.body={users:i.slice(0,t),bookmark:u,hasNextPage:c}}a(Ob,"searchUsers");async function Lb(e){let{groupId:t}=e.params,{csvContent:r}=e.request.body;(r===void 0||r.trim().length===0)&&e.throw(400,"CSV is empty");let n=await Tb.csv.jsonFromCsvString(r,{allowSingleColumn:!0});(!n||n.length===0)&&e.throw(400,"CSV file is invalid");let s=Object.keys(n[0]).find(h=>/^(email|e-mail|email address|mail|e_mail)$/i.test(h.trim()));s||e.throw(400,"CSV file must contain an email column");let i=Array.from(new Set(n.map(h=>h[s]).filter(h=>h&&typeof h=="string"&&h.trim().length>0).map(h=>h.trim())));i.length===0&&e.throw(400,"No valid email addresses found in CSV");try{await _r(t)}catch(h){if(h.status===404)e.throw(404,"Group not found");else throw h}let u=[],c=[],f=[],g=await Promise.all(i.map(h=>Qe.getUserByEmail(h)));for(let h of i){let y=g.find(E=>E?.email===h);y?(u.push({_id:y._id,email:y.email}),f.push(y._id)):c.push({email:h,reason:"User not found"})}f.length>0&&await Gn(t,f),e.body={added:u,skipped:c}}a(Lb,"bulkAddUsersFromCsv");var Ub=new Pb.default;function KN(){return gt.auth.joiValidator.body(Ce.default.object({_id:Ce.default.string().optional(),_rev:Ce.default.string().optional(),color:Ce.default.string().required(),icon:Ce.default.string().required(),name:Ce.default.string().trim().required().max(50),role:Ce.default.string().optional(),users:Ce.default.array().optional(),apps:Ce.default.array().optional(),roles:Ce.default.object().optional(),createdAt:Ce.default.string().optional(),updatedAt:Ce.default.string().optional()}).required())}a(KN,"buildGroupSaveValidation");Ub.post("/api/global/groups",gt.auth.adminOnly,we.requireFeature(vt.Feature.USER_GROUPS),KN(),Eb).get("/api/global/groups",we.requireFeature(vt.Feature.USER_GROUPS),_b).delete("/api/global/groups/:groupId/:rev",we.requireFeature(vt.Feature.USER_GROUPS),gt.auth.adminOnly,Ba("groupId"),xb).get("/api/global/groups/:groupId",we.requireFeature(vt.Feature.USER_GROUPS),gt.auth.builderOrAdmin,Cb).get("/api/global/groups/:groupId/users",we.requireFeature(vt.Feature.USER_GROUPS),gt.auth.builderOrAdmin,Ob).post("/api/global/groups/:groupId/users",gt.auth.adminOnly,we.requireFeature(vt.Feature.USER_GROUPS),Ba("groupId"),vb).post("/api/global/groups/:groupId/users/bulk",gt.auth.adminOnly,we.requireFeature(vt.Feature.USER_GROUPS),Ba("groupId"),gt.auth.joiValidator.body(Ce.default.object({csvContent:Ce.default.string().required()}).required()),Lb).post("/api/global/groups/:groupId/apps",gt.auth.builderOrAdmin,we.requireFeature(vt.Feature.USER_GROUPS),Rb);var qb=Ub;var cI=F(require("@koa/router"));var fo=require("scim-patch");var kb=require("@budibase/backend-core");function Db(e,t){let r=e.request.query[t];if(r!==void 0)return+r}a(Db,"tryGetQueryAsNumber");var Mb=a(async e=>{let t=Db(e,"pageSize")??20,r=Db(e,"startIndex"),n;e.request.query.filter&&(n=ce.user.userFilters(e.request.query.filter));let o=await qe.get({pageSize:t,skip:r,filters:n});e.body={schemas:["urn:ietf:params:scim:api:messages:2.0:ListResponse"],totalResults:o.total,Resources:o.users.map(ce.user.toScimUserResponse),startIndex:(r||0)+1,itemsPerPage:t}},"get"),Nb=a(async e=>{let{id:t}=e.params;typeof t!="string"&&e.throw(404);let r=await qe.find(t);e.body=ce.user.toScimUserResponse(r)},"find"),Bb=a(async e=>{let t=ce.user.fromScimUser(e.request.body);try{let r=await qe.create(t);e.body=ce.user.toScimUserResponse(r)}catch(r){throw r instanceof kb.EmailUnavailableError&&e.throw(409,"Email already in use"),r}},"create");function VN(e){let t=e.Operations.find(r=>(r.op==="Replace"||r.op==="replace")&&r.path==="active");return t?t.value===!1||t.value?.toLowerCase?.()==="false":!1}a(VN,"isDeactivation");var Gb=a(async e=>{let t=await qe.find(e.params.id);t||e.throw(404);let r=ce.user.toScimUserResponse(t),n=e.request.body;try{(0,fo.patchBodyValidation)(n)}catch{}if(VN(n))return Iu(e);let o;try{o=(0,fo.scimPatch)(r,n.Operations)}catch{}o||e.throw(500);let s=ce.user.fromScimUser(o);await qe.update(s,{allowChangingEmail:!0}),e.body=ce.user.toScimUserResponse(s)},"update"),Iu=a(async e=>{let{id:t}=e.params;typeof t!="string"&&e.throw(404),await qe.remove(t),e.status=204},"remove");var tI=F(eI()),rI=require("@budibase/shared-core"),mo=require("scim-patch");var go=require("scim2-parse-filter");function aI(e,t){for(let r of t.split(","))delete e[r]}a(aI,"cleanResponse");var nI=a(async e=>{let r=(await re.fetch()).filter(s=>s.scimInfo?.isSync).map(ce.group.toScimGroupResponse),{filter:n,excludedAttributes:o}=e.request.query;if(n){let s=(0,go.filter)((0,go.parse)(n));r=r.filter(s)}o&&r.forEach(s=>{aI(s,o)}),e.body={schemas:["urn:ietf:params:scim:api:messages:2.0:ListResponse"],totalResults:r.length,Resources:r,startIndex:1,itemsPerPage:r.length}},"get"),oI=a(async e=>{let t=ce.group.fromScimGroup(e.request.body),r=await qr.create(t);e.body=ce.group.toScimGroupResponse(r)},"create"),sI=a(async e=>{let{id:t}=e.params,r=await re.get(t),n=ce.group.toScimGroupResponse(r),{excludedAttributes:o}=e.request.query;o&&aI(n,o),e.body=n},"find"),iI=a(async e=>{let{id:t}=e.params,r=await re.get(t);await re.remove(t,r._rev),e.status=204},"remove"),uI=a(async e=>{let{id:t}=e.params,r=await re.get(t),n=ce.group.toScimGroupResponse(r),o=e.request.body;try{(0,mo.patchBodyValidation)(o)}catch{e.throw(400)}let{true:s,false:i}=(0,tI.default)(o.Operations,u=>u.path==="members");if(i?.length){let u=(0,mo.scimPatch)(n,i);u||e.throw(500);let c={...ce.group.fromScimGroup(u),_rev:r._rev};await re.save(c)}if(s?.length){let u=[],c=[];for(let{op:f,value:g}of s)switch(f){case"add":case"Add":for(let h of g)u.push(await qe.find(h.value));break;case"remove":case"Remove":for(let h of g)try{c.push(await qe.find(h.value))}catch(y){if(y.status!==404)throw y}break;case"replace":case"Replace":throw new Error("Replacing members is not allowed");default:rI.utils.unreachable(f)}u.length&&await re.addUsers(t,u.map(f=>f._id)),c.length&&await re.removeUsers(t,c.map(f=>f._id))}e.body=ce.group.toScimGroupResponse(await re.get(t))},"update");var Wa=require("@budibase/types"),Be=new cI.default({prefix:"/api/global/scim/v2"});Be.use(lu);Be.use(pu);Be.get("/users",Mb);Be.get("/users/:id",Ma("id"),Nb);Be.post("/users",Bb);Be.patch("/users/:id",Ma("id"),Gb);Be.delete("/users/:id",Ma("id"),Iu);Be.get("/groups",nI);Be.post("/groups",we.requireFeature(Wa.Feature.USER_GROUPS),oI);Be.get("/groups/:id",we.requireFeature(Wa.Feature.USER_GROUPS),Na("id"),sI);Be.delete("/groups/:id",we.requireFeature(Wa.Feature.USER_GROUPS),Na("id"),iI);Be.patch("/groups/:id",we.requireFeature(Wa.Feature.USER_GROUPS),Na("id"),uI);var pI=Be;var ce={};x(ce,{group:()=>Tu,user:()=>wu});var wu={};x(wu,{fromScimUser:()=>SB,toScimUserResponse:()=>AB,userFilters:()=>wB});var lI=require("@budibase/backend-core"),dI=require("@budibase/shared-core"),ho=require("@budibase/types"),fI=require("scim2-parse-filter");var{unreachable:yB}=dI.utils,AB=a(e=>{let{isSync:t,roles:r,...n}=e.scimInfo||{},o={...n,schemas:["urn:ietf:params:scim:schemas:core:2.0:User"],id:e._id,meta:{resourceType:"User",created:new Date(e.createdAt),lastModified:new Date(e.updatedAt)},active:e.status===ho.UserStatus.ACTIVE};(e.firstName||e.lastName)&&(o.name={formatted:[e.firstName,e.lastName].filter(i=>i).join(" "),familyName:e.lastName,givenName:e.firstName});let s="urn:ietf:params:scim:schemas:extension:enterprise:2.0:User";if(o[s]?.manager){let i=o[s].manager;typeof i=="string"&&(o[s].manager={value:i})}return o},"toScimUserResponse"),bB=a(e=>!!e?.id,"isScimUserResponse");function IB(e){if(lI.utils.validEmail(e.userName))return e.userName;if(e.emails)return e.emails.find(t=>t.primary)?.value||e.emails[0]?.value}a(IB,"tryGetEmail");var SB=a(e=>{let t=bB(e)?e:void 0,r=IB(e);if(!r)throw new Error("Email is required");let n;switch(e.active){case"True":case"true":case!0:n=!0;break;case"False":case"false":case!1:n=!1;break;default:yB(e.active)}let o,s;return e.name?.givenName?(o=e.name?.givenName,s=e.name?.familyName):o=e.displayName,{tenantId:"",_id:t?.id,userId:t?.id,email:r,firstName:o,lastName:s,scimInfo:{...e,isSync:!0},roles:{},status:n?ho.UserStatus.ACTIVE:ho.UserStatus.INACTIVE,createdAt:t?.meta.created.getTime(),updatedAt:t?.meta.lastModified.toISOString()}},"fromScimUser"),wB=a(e=>{let t={equal:{}},r=(0,fI.parse)(e);function n(o){switch(o.op){case"eq":{let s=o.attrPath,i;switch(s){case"emails.value":i="email";break;default:i=`scimInfo.${s}`}t.equal[i]=o.compValue;break}case"and":for(let s of o.filters)n(s);break;default:console.warn("Filter not handled",{filter:o})}}return a(n,"parseFilters"),n(r),t},"userFilters");var Tu={};x(Tu,{fromScimGroup:()=>vB,toScimGroupResponse:()=>TB});var TB=a(e=>({schemas:["urn:ietf:params:scim:schemas:core:2.0:Group"],id:e._id,externalId:e.scimInfo.externalId,meta:{resourceType:"Group",created:new Date(e.createdAt),lastModified:new Date(e.updatedAt)},displayName:e.name,members:e.users?.map(t=>({value:t._id}))}),"toScimGroupResponse"),EB=a(e=>!!e?.id,"isScimGroup"),vB=a(e=>{let t=EB(e)?e:void 0;return{_id:t?.id,name:e.displayName,scimInfo:{externalId:e.externalId,isSync:!0},icon:"UserGroup",color:"var(--spectrum-global-color-blue-600)",createdAt:t?.meta.created.getTime(),updatedAt:t?.meta.lastModified.toISOString()}},"fromScimGroup");var Vu={};x(Vu,{LLM:()=>ht,LLMRequest:()=>se,TableGeneration:()=>Ku,agentHistoryTitleSystemPrompt:()=>kB,agentSystemPrompt:()=>DB,aiColumnSchemas:()=>ju,aiTableResponseToTableSchema:()=>Gu,appendAIColumns:()=>Fu,classifyText:()=>Ru,cleanData:()=>_u,extractFileData:()=>LB,generateAIColumns:()=>Nu,generateCode:()=>qB,generateCronExpression:()=>xu,generateData:()=>Bu,generateJs:()=>Pu,generateSQL:()=>UB,generateTables:()=>Mu,generationStructure:()=>$u,getLLM:()=>Ka,getLLMConfig:()=>ku,getLLMOrThrow:()=>TI,normalizeContentType:()=>Eu,parseResponseFormat:()=>Ao,sanitiseToolName:()=>RB,searchWeb:()=>Lu,sentimentAnalysis:()=>Ou,summarizeText:()=>yo,tableDataStructuredOutput:()=>Qu,translate:()=>Cu});var $a=require("@budibase/types");function RB(e){if(e.length>64)throw new Error("Tool name must be under 64 characters long");return e.replace(/[^a-zA-Z0-9_-]/g,"_")}a(RB,"sanitiseToolName");function Eu(e){return e?e.includes("/")?e:{[$a.SupportedFileType.PDF]:"application/pdf",[$a.SupportedFileType.JPG]:"image/jpeg",[$a.SupportedFileType.JPEG]:"image/jpeg",[$a.SupportedFileType.PNG]:"image/png"}[e.toLowerCase()]||"application/octet-stream":"application/octet-stream"}a(Eu,"normalizeContentType");var To=require("@budibase/types");var yt=require("@budibase/backend-core"),bI=require("@budibase/types");var bo=F(require("openai"));var Nt=require("@budibase/types");var mI=require("@budibase/shared-core");var Bt=F(require("dd-trace"));function vu(e,t){return t.map(r=>e[r]).join(" ")}a(vu,"extractTextFromColumns");var ht=class{static{a(this,"LLM")}constructor({model:t,apiKey:r,maxTokens:n}){this._model=t,this._apiKey=r,this._maxTokens=n??parseInt(process.env.BUDIBASE_AI_MAX_PROMPT_TOKENS||"1000")}get model(){return this._model}get apiKey(){return this._apiKey}get maxTokens(){return this._maxTokens}async prompt(t){return await Bt.default.trace("prompt",async()=>{let r=typeof t=="string"?new se().addUserMessage(t):t,{messages:n,tokensUsed:o}=await Bt.default.trace("chatCompletion",()=>this.chatCompletion(r));return!n||n.length===0?{message:"",tokensUsed:o}:{message:n[n.length-1].content||"",tokensUsed:o}})}async chat(t){return await Bt.default.trace("chat",async()=>await this.chatCompletion(t))}async*chatStream(t){yield*this.chatCompletionStream(t)}async summarizeText(t){return Bt.default.trace("summarizeText",()=>this.prompt(yo(t)))}async generateCronExpression(t){return Bt.default.trace("generateCronExpression",()=>this.prompt(xu(t)))}async operation(t,r){return Bt.default.trace("operation",n=>{n.addTags({operation:t.operation,rowId:r.id});let o=this.promptForOperation(t,r);return this.prompt(o)})}promptForOperation(t,r){let{operation:n,column:o,columns:s,language:i,categories:u,prompt:c}=t;switch(n){case Nt.AIOperationEnum.SUMMARISE_TEXT:return yo(vu(r,s));case Nt.AIOperationEnum.CLEAN_DATA:return _u(r[o]);case Nt.AIOperationEnum.TRANSLATE:return Cu(r[o],i);case Nt.AIOperationEnum.CATEGORISE_TEXT:if(!u)throw Error("No categories provided for categorise text operation. Please provide categories.");return Ru(vu(r,s),u.split(","));case Nt.AIOperationEnum.SENTIMENT_ANALYSIS:return Ou(r[o]);case Nt.AIOperationEnum.PROMPT:return c;case Nt.AIOperationEnum.SEARCH_WEB:return Lu(vu(r,s));default:throw mI.utils.unreachable(n)}}async generateJs(t,r){return await Bt.default.trace("generateJs",async()=>{let{bindings:n=[],snippets:o=[]}=r||{};return await this.prompt(Pu(n,o).addUserMessage(t))})}};var hI=require("@budibase/types"),Uu=require("openai/helpers/zod");var ja=(n=>(n.GPT_5_MINI="gpt-5-mini",n.GPT_5="gpt-5",n.GPT_5_NANO="gpt-5-nano",n))(ja||{});function Ao(e){if(e)return e==="text"?{type:"text"}:e==="json"?{type:"json_object"}:e}a(Ao,"parseResponseFormat");function gI(e){if(!e)return 0;let t=e.prompt_tokens;return e.completion_tokens*3+t}a(gI,"calculateBudibaseAICredits");var He=class extends ht{constructor(r){super(r);this.client=this.getClient(r)}static{a(this,"OpenAI")}getVerbosityForModel(){if(Object.values(ja).includes(this.model))return"low"}getClient(r){if(!r.apiKey)throw new Error("No OpenAI API key found");return new bo.default({apiKey:r.apiKey})}async uploadFile(r,n,o){let s=Eu(o);if(hI.ImageContentTypes.includes(s.toLowerCase())){let c;if(Buffer.isBuffer(r))c=r;else{let g=[];for await(let h of r)g.push(new Uint8Array(h));c=Buffer.concat(g)}let f=c.toString("base64");return`data:${s};base64,${f}`}let i=await(0,bo.toFile)(r,n);return(await this.client.files.create({file:i,purpose:"assistants"})).id}async chatCompletion(r){let n={model:this.model,messages:r.messages,max_completion_tokens:this._maxTokens,response_format:Ao(r.format)};if(Object.values(ja).includes(this.model)){let i=this.getVerbosityForModel();i&&(n.verbosity=i),n.reasoning_effort="minimal"}r.tools&&r.tools.length>0&&(n.tool_choice="auto",n.tools=r.tools.map(Uu.zodFunction));let o=await this.client.chat.completions.create(n),s=o?.choices?.[0]?.message;if(s?.tool_calls){r.addMessage(s);let i=[];for(let u of s.tool_calls){if(u.type!=="function"||!u.function){console.warn(`[OPENAI TOOL WARN] Unsupported tool call type: ${u.type}`);continue}let c=u.function.name,f=r.findTool(c);if(!f)throw new Error(`Tool ${c} not found in prompt tools`);let g=JSON.parse(u.function.arguments);i.push(f.handler(g).then(h=>({role:"tool",tool_call_id:u.id,content:h})).catch(h=>(console.error(`[OPENAI TOOL ERROR] Tool ${c} failed in OpenAI handler:`,h),{role:"tool",tool_call_id:u.id,content:`Error: ${h.message}`})))}return r.addMessages(await Promise.all(i)),this.chatCompletion(r)}else{if(s?.content)return{messages:[...r.messages,{role:s.role,content:s.content}],tokensUsed:gI(o.usage)};throw new Error("No response found")}}async*chatCompletionStream(r){let n={model:this.model,messages:r.messages,max_tokens:this.maxTokens,response_format:Ao(r.format),stream:!0};r.tools&&r.tools.length>0&&(n.tool_choice="auto",n.tools=r.tools.map(Uu.zodFunction));try{let o=await this.client.chat.completions.create(n),s=null,i="",u=null;for await(let f of o){let g=f?.choices?.[0]?.delta;if(g){if(g.content&&(i+=g.content,yield{type:"content",content:g.content}),g.tool_calls&&g.tool_calls.length>0){let h=g.tool_calls[0];h.id?(s={id:h.id,name:h.function?.name||"",arguments:h.function?.arguments||""},yield{type:"tool_call_start",toolCall:{id:s.id,name:s.name,arguments:s.arguments}}):s&&h.function?.arguments&&(s.arguments+=h.function.arguments,yield{type:"tool_call_start",toolCall:{id:s.id,name:s.name,arguments:s.arguments}})}f.usage&&(u=f.usage)}}let c=u?gI(u):0;if(s){r.addMessage({role:"assistant",content:"",tool_calls:[{id:s.id,type:"function",function:{name:s.name,arguments:s.arguments}}]});let f=r.findTool(s.name);if(f)try{let g=JSON.parse(s.arguments),h=await f.handler(g);yield{type:"tool_call_result",toolResult:{id:s.id,result:h}},r.addMessage({role:"tool",tool_call_id:s.id,content:h}),yield*this.chatCompletionStream(r);return}catch(g){yield{type:"tool_call_result",toolResult:{id:s.id,result:`Error: ${g.message}`,error:g.message}},r.addMessage({role:"tool",tool_call_id:s.id,content:`Error: ${g.message}`}),yield*this.chatCompletionStream(r);return}else{let g=`Tool '${s.name}' not found`;yield{type:"tool_call_result",toolResult:{id:s.id,result:g,error:g}},r.addMessage({role:"tool",tool_call_id:s.id,content:g}),yield*this.chatCompletionStream(r);return}}i&&r.addMessage({role:"assistant",content:i}),yield{type:"done",messages:r.messages,tokensUsed:c}}catch(o){yield{type:"error",content:o.message}}}};var he=require("@budibase/backend-core"),yI=require("@budibase/types");var qu=require("dd-trace");var Io=class extends ht{static{a(this,"BudibaseAI")}async prompt(t){let r=await super.prompt(t);return r.tokensUsed&&await Mn(r.tokensUsed),r}async chat(t){let r=await super.chat(t);return r.tokensUsed&&await Mn(r.tokensUsed),r}async uploadFile(t,r,n){return he.env.SELF_HOSTED?this.uploadFileSelfHost(t,r,n):this.uploadFileCloud(t,r,n)}async uploadFileCloud(t,r,n){return new He({apiKey:he.env.OPENAI_API_KEY,model:this.model,max_completion_tokens:this.maxTokens}).uploadFile(t,r,n)}async uploadFileSelfHost(t,r,n){let o;if(Buffer.isBuffer(t))o=t;else{let g=[];for await(let h of t)g.push(new Uint8Array(h));o=Buffer.concat(g)}let s=o.toString("base64");if(n&&yI.ImageContentTypes.includes(n.toLowerCase()))return`data:image/jpeg;base64,${s}`;if(!he.env.BUDICLOUD_URL)throw new Error("No Budibase URL found");if(!this._apiKey){let g=await xn();if(!g)throw new Error("No license key found");this._apiKey=g}let i=`${he.env.BUDICLOUD_URL}/api/ai/upload-file`,u={method:"POST",headers:{"Content-Type":"application/json",[he.constants.Header.LICENSE_KEY]:this._apiKey},body:JSON.stringify({data:s,filename:r,contentType:n})};console.debug("[BudibaseAI] uploadFileSelfHost - Making network call",{url:i,method:u.method,headers:u.headers,bodyKeys:["data","filename","contentType"],filename:r,contentType:n});let c=await fetch(i,u);if(console.debug("[BudibaseAI] uploadFileSelfHost - Network response",{url:i,status:c.status,statusText:c.statusText,ok:c.ok}),!c.ok)throw await he.HTTPError.fromResponse(c);return(await c.json()).fileId}async chatCompletion(t){return he.env.SELF_HOSTED?this.chatCompletionSelfHost(t):this.chatCompletionCloud(t)}async chatCompletionCloud(t){return await qu.tracer.trace("chatCompletionCloud",async()=>await new He({apiKey:he.env.OPENAI_API_KEY,model:this.model,max_completion_tokens:this.maxTokens}).chatCompletion(t))}async chatCompletionSelfHost(t){return await qu.tracer.trace("chatCompletionSelfHost",async r=>{if(!he.env.BUDICLOUD_URL)throw new Error("No Budibase URL found");if(r.addTags({budicloudUrl:he.env.BUDICLOUD_URL}),!this._apiKey){let c=await xn();if(!c)throw new Error("No license key found");this._apiKey=c,r.addTags({licenseKey:this._apiKey})}let n={messages:t.messages,format:t.format,useTools:t.tools.length>0},o=`${he.env.BUDICLOUD_URL}/api/ai/chat`,s={method:"POST",headers:{"Content-Type":"application/json",[he.constants.Header.LICENSE_KEY]:this._apiKey},body:JSON.stringify(n)};console.debug("[BudibaseAI] chatCompletionSelfHost - Making network call",{url:o,method:s.method,headers:s.headers,bodyKeys:Object.keys(n),messagesCount:t.messages.length,useTools:n.useTools,format:n.format});let i=await fetch(o,s);if(console.debug("[BudibaseAI] chatCompletionSelfHost - Network response",{url:o,status:i.status,statusText:i.statusText,ok:i.ok}),!i.ok)throw await he.HTTPError.fromResponse(i);let u=await i.json();return console.debug("[BudibaseAI] chatCompletionSelfHost - Response data",{url:o,tokensUsed:u.tokensUsed,messagesCount:u.messages?.length}),u})}async*chatCompletionStream(t){he.env.SELF_HOSTED?yield*this.chatCompletionStreamSelfHost(t):yield*this.chatCompletionStreamCloud(t)}async*chatCompletionStreamCloud(t){yield*new He({apiKey:he.env.OPENAI_API_KEY,model:this.model,max_completion_tokens:this.maxTokens}).chatCompletionStream(t)}async*chatCompletionStreamSelfHost(t){console.debug("[BudibaseAI] chatCompletionStreamSelfHost - Starting streaming (fallback to non-streaming)",{messagesCount:t.messages.length,toolsCount:t.tools.length});try{let r=await this.chatCompletionSelfHost(t);if(console.debug("[BudibaseAI] chatCompletionStreamSelfHost - Yielding response chunks",{responseMessagesCount:r.messages.length,tokensUsed:r.tokensUsed}),r.messages.length>0){let n=r.messages[r.messages.length-1];n.content&&(yield{type:"content",content:n.content})}yield{type:"done",messages:r.messages,tokensUsed:r.tokensUsed}}catch(r){console.debug("[BudibaseAI] chatCompletionStreamSelfHost - Error occurred",{error:r.message}),yield{type:"error",content:r.message}}}};var Qa=require("dd-trace");var Du=F(require("@anthropic-ai/sdk"));function _B(e){if(!e)return 0;let t=e.input_tokens;return e.output_tokens*3+t}a(_B,"calculateBudibaseAICredits");var So=class extends ht{constructor(r){super(r);this.client=new Du.default({apiKey:r.apiKey})}static{a(this,"Anthropic")}firstTextBlock(r){for(let n of r.content)if(n.type==="text")return n.text}async uploadFile(r,n,o){throw new Error("File upload not supported for this LLM provider")}async chatCompletion(r){try{let n=await this.client.messages.create({model:this.model,messages:r.messages.map(({content:s})=>{if(s==null)return{role:"user",content:""};if(typeof s=="string")return{role:"user",content:s};let i="";for(let u of s)u.type==="text"?i+=u.text:["image_url","input_audio","file"].includes(u.type);return{role:"user",content:i}}),max_tokens:this.maxTokens}),o=this.firstTextBlock(n)||"";return{messages:[...r.messages,{role:"assistant",content:o}],tokensUsed:_B(n.usage)}}catch(n){throw n instanceof Du.default.APIError&&console.error(`Anthropic Prompt failed with error ${n.name} and status: ${n.status}`),n}}async*chatCompletionStream(r){try{let n=await this.chatCompletion(r);if(n.messages.length>0){let o=n.messages[n.messages.length-1];o.content&&(yield{type:"content",content:o.content})}yield{type:"done",messages:n.messages,tokensUsed:n.tokensUsed}}catch(n){yield{type:"error",content:n.message}}}};var II=require("zod"),SI=require("openai/helpers/zod");var AI=require("openai");var wo=class extends He{static{a(this,"AzureOpenAI")}getClient(t){if(!t.apiKey)throw new Error("No Azure OpenAI API key found");if(!t.model)throw new Error("No Azure OpenAI model specified");return new AI.AzureOpenAI({apiKey:t.apiKey,apiVersion:"2024-10-01-preview",baseURL:t.baseUrl})}getVerbosityForModel(){return Object.values(ja).includes(this.model)?"medium":void 0}};var wI={OpenAI:"gpt-5-mini",TogetherAI:"gpt-5-mini",AzureOpenAI:"gpt-4.1",Custom:"gpt-5-mini",Anthropic:"claude-3-5-sonnet-20240620",BudibaseAI:"gpt-5-mini"},xB={OpenAI:He,TogetherAI:He,AzureOpenAI:wo,Custom:He,Anthropic:So,BudibaseAI:Io};async function CB(){return await Qa.tracer.trace("getAIConfig",async e=>{let t={type:bI.ConfigType.AI,config:{}};if(!yt.context.isSelfHostUsingCloud()){let n=await yt.configs.getAIConfig();n&&(t=n)}await Ds(t);let r=Object.values(t.config).find(n=>n.active&&n.isDefault);if(!r){e.addTags({enabled:!1,reason:"no provider found"});return}return e.addTags({enabled:!0}),{provider:r.provider,model:r.defaultModel||wI[r.provider],apiKey:r.apiKey,baseUrl:r.baseUrl}})}a(CB,"getAIConfig");async function OB(){return Qa.tracer.trace("getSelfHostOpenAIKeyConfig",e=>{if(!yt.env.SELF_HOSTED){e.addTags({enabled:!1,reason:"not self host"});return}if(!yt.env.OPENAI_API_KEY){e.addTags({enabled:!1,reason:"no OPENAI_API_KEY"});return}return e.addTags({enabled:!0}),{provider:"OpenAI",model:wI.OpenAI,apiKey:yt.env.OPENAI_API_KEY}})}a(OB,"getSelfHostOpenAIKeyConfig");async function ku(){return Qa.tracer.trace("getLLMConfig",async()=>await CB()||await OB())}a(ku,"getLLMConfig");async function Ka(e){return await Qa.tracer.trace("getLLM",async t=>{let{model:r,maxTokens:n}=e||{},o=await ku();if(!o){t.addTags({enabled:!1,reason:"no config found"});return}r&&(o.model=r),n&&(o.maxTokens=n);let s=xB[o.provider];if(!s){t.addTags({enabled:!1,reason:"no provider found",provider:o.provider});return}return new s(o)})}a(Ka,"getLLM");async function TI(){let e=await Ka();if(!e)throw new yt.HTTPError("No available LLM configurations",500);return e}a(TI,"getLLMOrThrow");var se=class e{constructor(){this.messages=[];this.tools=[]}static{a(this,"LLMRequest")}addTool(t){return this.tools.push(t),this}addTools(t){return this.tools.push(...t),this}findTool(t){return this.tools.find(r=>r.name===t)}withFormat(t){return t instanceof II.z.ZodType?this.format=(0,SI.zodResponseFormat)(t,"key"):this.format=t,this}addMessage(t){return this.messages.push(t),this}addMessages(t){return this.messages.push(...t),this}addUserMessage(t){return this.messages.push({role:"user",content:t}),this}addSystemMessage(t){return this.messages.push({role:"system",content:t}),this}static fromRequest(t){let r=new e;return t.messages&&r.addMessages(t.messages),t.format&&r.withFormat(t.format),r}};var Rt=require("zod");function yo(e,t){let r=`Summarize this text:
39
- ${e}`,n="";if(t)switch(t){case To.SummariseLength.SHORT:n="In 1-2 concise sentences, ";break;case To.SummariseLength.MEDIUM:n="In 2-3 paragraphs, ";break;case To.SummariseLength.LONG:n="In multiple detailed paragraphs, ";break}return new se().addUserMessage(`${n}${r}.
40
- Only return the summary.`)}a(yo,"summarizeText");function LB(e,t){let r=["You are a data extraction assistant.","Extract data from the attached document/image that matches the provided schema.","The schema defines the structure where values like 'string', 'number', 'boolean' indicate the expected data types.","Extract all items that match the schema from the document.","Return the data in json format","If no matching data is found, return an empty data array."].join(`
37
+ `;function sa(e){return $o.default.verify(e,ES,{algorithms:["RS256"]})}a(sa,"verifyLicenseToken");function RS(e,t){return $o.default.sign(t,e,{encoding:"utf-8",algorithm:"RS256"})}a(RS,"sign");var dn={};x(dn,{getFeatures:()=>jo});var l=require("@budibase/types");var vS={[l.PlanType.FREE]:[...De.SELF_FREE_LICENSE.features],[l.PlanType.PREMIUM]:[l.Feature.WORKSPACE_BACKUPS,l.Feature.BRANDING,l.Feature.APP_BUILDERS,l.Feature.VIEW_PERMISSIONS,l.Feature.PDF],[l.PlanType.PREMIUM_PLUS]:[l.Feature.WORKSPACE_BACKUPS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.PDF,l.Feature.BUDIBASE_AI],[l.PlanType.PREMIUM_PLUS_TRIAL]:[l.Feature.WORKSPACE_BACKUPS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.PDF,l.Feature.BUDIBASE_AI],[l.PlanType.PRO]:[l.Feature.USER_GROUPS,l.Feature.WORKSPACE_BACKUPS],[l.PlanType.TEAM]:[l.Feature.USER_GROUPS,l.Feature.WORKSPACE_BACKUPS],[l.PlanType.BUSINESS]:[l.Feature.USER_GROUPS,l.Feature.WORKSPACE_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.AUDIT_LOGS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.PDF,l.Feature.BUDIBASE_AI],[l.PlanType.ENTERPRISE_BASIC]:[l.Feature.USER_GROUPS,l.Feature.WORKSPACE_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.ENFORCEABLE_SSO,l.Feature.AUDIT_LOGS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.OFFLINE,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.SCIM,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.PWA,l.Feature.CUSTOM_APP_SCRIPTS,l.Feature.PDF,l.Feature.BUDIBASE_AI,l.Feature.RECAPTCHA,l.Feature.PKCE_OIDC],[l.PlanType.ENTERPRISE_BASIC_TRIAL]:[l.Feature.USER_GROUPS,l.Feature.WORKSPACE_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.ENFORCEABLE_SSO,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.SCIM,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.PWA,l.Feature.CUSTOM_APP_SCRIPTS,l.Feature.PDF,l.Feature.BUDIBASE_AI,l.Feature.RECAPTCHA,l.Feature.PKCE_OIDC],[l.PlanType.ENTERPRISE]:[l.Feature.USER_GROUPS,l.Feature.WORKSPACE_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.ENFORCEABLE_SSO,l.Feature.AUDIT_LOGS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.OFFLINE,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.SCIM,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.PWA,l.Feature.CUSTOM_APP_SCRIPTS,l.Feature.PDF,l.Feature.BUDIBASE_AI,l.Feature.RECAPTCHA,l.Feature.PKCE_OIDC]},_S={[l.PlanType.FREE]:[...De.CLOUD_FREE_LICENSE.features],[l.PlanType.PREMIUM]:[l.Feature.WORKSPACE_BACKUPS,l.Feature.BRANDING,l.Feature.APP_BUILDERS,l.Feature.VIEW_PERMISSIONS,l.Feature.PDF],[l.PlanType.PREMIUM_PLUS]:[l.Feature.WORKSPACE_BACKUPS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.BUDIBASE_AI,l.Feature.PDF],[l.PlanType.PREMIUM_PLUS_TRIAL]:[l.Feature.WORKSPACE_BACKUPS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.BUDIBASE_AI,l.Feature.PDF],[l.PlanType.PRO]:[l.Feature.USER_GROUPS,l.Feature.WORKSPACE_BACKUPS,l.Feature.BRANDING],[l.PlanType.TEAM]:[l.Feature.USER_GROUPS,l.Feature.WORKSPACE_BACKUPS,l.Feature.BRANDING],[l.PlanType.BUSINESS]:[l.Feature.USER_GROUPS,l.Feature.WORKSPACE_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.AUDIT_LOGS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.BUDIBASE_AI,l.Feature.PDF],[l.PlanType.ENTERPRISE_BASIC]:[l.Feature.USER_GROUPS,l.Feature.WORKSPACE_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.ENFORCEABLE_SSO,l.Feature.AUDIT_LOGS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.OFFLINE,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.SCIM,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.BUDIBASE_AI,l.Feature.PWA,l.Feature.CUSTOM_APP_SCRIPTS,l.Feature.PDF,l.Feature.RECAPTCHA,l.Feature.PKCE_OIDC],[l.PlanType.ENTERPRISE_BASIC_TRIAL]:[l.Feature.USER_GROUPS,l.Feature.WORKSPACE_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.ENFORCEABLE_SSO,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.SCIM,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.BUDIBASE_AI,l.Feature.PWA,l.Feature.CUSTOM_APP_SCRIPTS,l.Feature.PDF,l.Feature.RECAPTCHA,l.Feature.PKCE_OIDC],[l.PlanType.ENTERPRISE]:[l.Feature.USER_GROUPS,l.Feature.WORKSPACE_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.ENFORCEABLE_SSO,l.Feature.AUDIT_LOGS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.SCIM,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.BUDIBASE_AI,l.Feature.PWA,l.Feature.CUSTOM_APP_SCRIPTS,l.Feature.PDF,l.Feature.RECAPTCHA,l.Feature.PKCE_OIDC]};function jo(e,t){let r=[];function n(o){let s=o[t];if(!s)throw new Error(`Features do not exist for planType=${t} and hosting=${e}`);return s}switch(a(n,"readFeatures"),e){case l.Hosting.SELF:r=n(vS);break;case l.Hosting.CLOUD:r=n(_S);break}return r}a(jo,"getFeatures");var fn={};x(fn,{UNLIMITED:()=>m,getQuotas:()=>Qo});var J=require("@budibase/types");var d=At,qc=De,m=-1,ua=a(e=>e*1e6,"millions"),xS={[J.PlanType.FREE]:{...qc.CLOUD_FREE_LICENSE.quotas},[J.PlanType.PREMIUM]:{usage:{monthly:{...d.queries(m),...d.automations(1e3),...d.budibaseAICredits(0),...d.actions(m)},static:{...d.rows(1e4),...d.apps(m),...d.users(m),...d.creators(m),...d.userGroups(0),...d.plugins(m),...d.customAIConfigurations(0)}},constant:{...d.automationLogRetentionDays(7),...d.appBackupRetentionDays(7)}},[J.PlanType.PREMIUM_PLUS]:{usage:{monthly:{...d.queries(m),...d.automations(5e3),...d.budibaseAICredits(ua(2)),...d.actions(m)},static:{...d.rows(25e3),...d.apps(m),...d.users(m),...d.creators(m),...d.userGroups(0),...d.plugins(m),...d.customAIConfigurations(1)}},constant:{...d.automationLogRetentionDays(30),...d.appBackupRetentionDays(30)}},[J.PlanType.PREMIUM_PLUS_TRIAL]:{usage:{monthly:{...d.queries(m),...d.automations(5e3),...d.budibaseAICredits(ua(2)),...d.actions(m)},static:{...d.rows(25e3),...d.apps(m),...d.users(m),...d.creators(m),...d.userGroups(0),...d.plugins(m),...d.customAIConfigurations(1)}},constant:{...d.automationLogRetentionDays(30),...d.appBackupRetentionDays(30)}},[J.PlanType.PRO]:{usage:{monthly:{...d.queries(m),...d.automations(1e3),...d.budibaseAICredits(0),...d.actions(m)},static:{...d.rows(m),...d.apps(m),...d.users(m),...d.creators(m),...d.userGroups(5),...d.plugins(m),...d.customAIConfigurations(0)}},constant:{...d.automationLogRetentionDays(7),...d.appBackupRetentionDays(7)}},[J.PlanType.TEAM]:{usage:{monthly:{...d.queries(m),...d.automations(5e3),...d.budibaseAICredits(0),...d.actions(m)},static:{...d.rows(m),...d.apps(m),...d.users(m),...d.creators(m),...d.userGroups(10),...d.plugins(m),...d.customAIConfigurations(0)}},constant:{...d.automationLogRetentionDays(30),...d.appBackupRetentionDays(90)}},[J.PlanType.BUSINESS]:{usage:{monthly:{...d.queries(m),...d.automations(1e4),...d.budibaseAICredits(0),...d.actions(m)},static:{...d.rows(5e4),...d.apps(m),...d.users(m),...d.creators(m),...d.userGroups(50),...d.plugins(m),...d.customAIConfigurations(0)}},constant:{...d.automationLogRetentionDays(365),...d.appBackupRetentionDays(365)}},[J.PlanType.ENTERPRISE_BASIC]:{usage:{monthly:{...d.queries(m),...d.automations(m),...d.budibaseAICredits(ua(4)),...d.actions(m)},static:{...d.rows(m),...d.apps(m),...d.users(m),...d.creators(m),...d.userGroups(m),...d.plugins(m),...d.customAIConfigurations(m)}},constant:{...d.automationLogRetentionDays(m),...d.appBackupRetentionDays(m)}},[J.PlanType.ENTERPRISE_BASIC_TRIAL]:{usage:{monthly:{...d.queries(m),...d.automations(m),...d.budibaseAICredits(ua(4)),...d.actions(m)},static:{...d.rows(m),...d.apps(m),...d.users(m),...d.creators(m),...d.userGroups(m),...d.plugins(m),...d.customAIConfigurations(m)}},constant:{...d.automationLogRetentionDays(15),...d.appBackupRetentionDays(15)}},[J.PlanType.ENTERPRISE]:{usage:{monthly:{...d.queries(m),...d.automations(m),...d.budibaseAICredits(ua(4)),...d.actions(m)},static:{...d.rows(m),...d.apps(m),...d.users(m),...d.creators(m),...d.userGroups(m),...d.plugins(m),...d.customAIConfigurations(m)}},constant:{...d.automationLogRetentionDays(m),...d.appBackupRetentionDays(m)}}},CS={[J.PlanType.FREE]:{...qc.SELF_FREE_LICENSE.quotas},[J.PlanType.PREMIUM]:void 0,[J.PlanType.PREMIUM_PLUS]:{usage:{monthly:{...d.queries(m),...d.automations(m),...d.budibaseAICredits(0),...d.actions(m)},static:{...d.rows(m),...d.apps(m),...d.users(m),...d.creators(m),...d.userGroups(0),...d.plugins(m),...d.customAIConfigurations(1)}},constant:{...d.automationLogRetentionDays(30),...d.appBackupRetentionDays(30)}},[J.PlanType.PREMIUM_PLUS_TRIAL]:{usage:{monthly:{...d.queries(m),...d.automations(m),...d.budibaseAICredits(0),...d.actions(m)},static:{...d.rows(m),...d.apps(m),...d.users(m),...d.creators(m),...d.userGroups(0),...d.plugins(m),...d.customAIConfigurations(1)}},constant:{...d.automationLogRetentionDays(30),...d.appBackupRetentionDays(30)}},[J.PlanType.PRO]:{usage:{monthly:{...d.queries(m),...d.automations(m),...d.budibaseAICredits(0),...d.actions(m)},static:{...d.rows(m),...d.apps(m),...d.users(m),...d.creators(m),...d.userGroups(5),...d.plugins(m),...d.customAIConfigurations(0)}},constant:{...d.automationLogRetentionDays(7),...d.appBackupRetentionDays(7)}},[J.PlanType.TEAM]:{usage:{monthly:{...d.queries(m),...d.automations(m),...d.budibaseAICredits(0),...d.actions(m)},static:{...d.rows(m),...d.apps(m),...d.users(m),...d.creators(m),...d.userGroups(10),...d.plugins(m),...d.customAIConfigurations(0)}},constant:{...d.automationLogRetentionDays(30),...d.appBackupRetentionDays(90)}},[J.PlanType.BUSINESS]:{usage:{monthly:{...d.queries(m),...d.automations(m),...d.budibaseAICredits(0),...d.actions(m)},static:{...d.rows(m),...d.apps(m),...d.users(m),...d.creators(m),...d.userGroups(50),...d.plugins(m),...d.customAIConfigurations(0)}},constant:{...d.automationLogRetentionDays(90),...d.appBackupRetentionDays(365)}},[J.PlanType.ENTERPRISE_BASIC]:{usage:{monthly:{...d.queries(m),...d.automations(m),...d.budibaseAICredits(0),...d.actions(m)},static:{...d.rows(m),...d.apps(m),...d.users(m),...d.creators(m),...d.userGroups(m),...d.plugins(m),...d.customAIConfigurations(m)}},constant:{...d.automationLogRetentionDays(m),...d.appBackupRetentionDays(m)}},[J.PlanType.ENTERPRISE_BASIC_TRIAL]:{usage:{monthly:{...d.queries(m),...d.automations(m),...d.budibaseAICredits(0),...d.actions(m)},static:{...d.rows(m),...d.apps(m),...d.users(m),...d.creators(m),...d.userGroups(m),...d.plugins(m),...d.customAIConfigurations(m)}},constant:{...d.automationLogRetentionDays(15),...d.appBackupRetentionDays(15)}},[J.PlanType.ENTERPRISE]:{usage:{monthly:{...d.queries(m),...d.automations(m),...d.budibaseAICredits(0),...d.actions(m)},static:{...d.rows(m),...d.apps(m),...d.users(m),...d.creators(m),...d.userGroups(m),...d.plugins(m),...d.customAIConfigurations(m)}},constant:{...d.automationLogRetentionDays(m),...d.appBackupRetentionDays(m)}}};function Qo(e,t){let r;function n(o){let s=o[t];if(!s)throw new Error(`Quotas do not exist for planType=${t} and hosting=${e}`);return s}switch(a(n,"readQuotas"),e){case J.Hosting.SELF:r=n(CS);break;case J.Hosting.CLOUD:r=n(xS);break}return JSON.parse(JSON.stringify(r))}a(Qo,"getQuotas");var cr={};x(cr,{encoding:()=>ur,workspaceExists:()=>OS});var Dc=require("@budibase/backend-core");async function OS(e){return(await Dc.db.getAllWorkspaces({all:!0,idsOnly:!0})).includes(e)}a(OS,"workspaceExists");var ur={};x(ur,{base64ToObject:()=>PS,objectToBase64:()=>LS});function LS(e){let t=JSON.stringify(e);return Buffer.from(t).toString("base64")}a(LS,"objectToBase64");function PS(e){let t=Buffer.from(e,"base64").toString();return JSON.parse(t)}a(PS,"base64ToObject");var bf=require("@budibase/types"),wr=require("@budibase/backend-core"),If=F(Jl()),Sf=F(bs());async function ix(e){await We.save({offlineLicenseToken:e}),await Kt()}a(ix,"activateOfflineLicenseToken");async function ux(){await We.save({offlineLicenseToken:void 0}),await Kt()}a(ux,"deleteOfflineLicenseToken");async function wf(){return(await We.get()).offlineLicenseToken}a(wf,"getOfflineLicenseToken");async function Is(){let t=(await wr.installation.getInstall()).installId,r=wr.context.getTenantId(),n=await wr.events.identification.getUniqueTenantId(r);return{installId:t,tenantId:n}}a(Is,"getIdentifier");async function cx(){let e=await Is();return ur.objectToBase64(e)}a(cx,"getIdentifierBase64");function px(e){return ur.base64ToObject(e)}a(px,"getIdentifierFromBase64");function Tf(e){let t=Date.now(),r=new Date(e.expireAt).getTime();if(t>r)throw new Error(`Offline license has expired. expireAt=${e.expireAt}`)}a(Tf,"verifyExpiry");async function Ef(e){let t=await Is();if(e.identifier.installId!==t.installId||e.identifier.tenantId!==t.tenantId)throw new Error("Invalid offline license")}a(Ef,"verifyInstallation");function Rf(e){let t=e.plan.type,r=bf.Hosting.SELF,n=jo(r,t),o=Qo(r,t);return e.features=(0,If.default)(e.features,n),e.quotas=(0,Sf.default)(e.quotas,o),e}a(Rf,"enrichLicense");async function Ss(){try{let e=await wf();if(e){let t=await sa(e);return Tf(t),await Ef(t),Rf(t)}}catch(e){console.error("Error retrieving offline license",e)}}a(Ss,"getOfflineLicense");var _a={};x(_a,{deleteDevLicense:()=>gx,getOfflineLicense:()=>fx,writeDevLicenseToDisk:()=>mx});var vf=require("@budibase/backend-core"),Ts=require("path"),_f=require("os"),Vt=F(require("fs"));var lx=vf.env.isTest()?".budibase-test":".budibase",ws=(0,Ts.join)((0,_f.tmpdir)(),lx),dx="dev_license.txt",va=(0,Ts.join)(ws,dx);if(!Vt.default.existsSync(ws))try{Vt.default.mkdirSync(ws)}catch{}function fx(){try{if(Vt.default.existsSync(va)){let e=Vt.default.readFileSync(va,{encoding:"utf-8"});return sa(e)}}catch(e){console.error("Error retrieving offline license from disk",e)}}a(fx,"getOfflineLicense");function mx(e){console.log(`Writing license to: ${va}`),Vt.default.writeFileSync(va,e,{encoding:"utf-8"})}a(mx,"writeDevLicenseToDisk");function gx(){Vt.default.rmSync(va,{force:!0})}a(gx,"deleteDevLicense");var xf=require("dd-trace");var Rs=a(async()=>await xf.tracer.trace("getLicense",async e=>{if(Es.env.OFFLINE_MODE)return e.addTags({offline:!0}),Ss();let t=await ir();return t||(e.addTags({offlineFallback:!0}),t=_a.getOfflineLicense()),t}),"getLicense"),vs=a(e=>Fo(e),"getLicenseFromKey"),_s=a(()=>Es.env.SELF_HOSTED?De.SELF_FREE_LICENSE:De.CLOUD_FREE_LICENSE,"getFreeLicense");var Cs={};x(Cs,{activateLicenseKey:()=>hx,deleteLicenseKey:()=>yx,getLicenseKey:()=>Cn});var xs=F(require("dd-trace"));async function hx(e){await Wo(e),await We.save({licenseKey:e}),await Kt()}a(hx,"activateLicenseKey");async function Cn(){return await xs.default.trace("getLicenseKey",async e=>{let t=await We.get();return e.addTags({licenseKey:t.licenseKey}),t.licenseKey})}a(Cn,"getLicenseKey");async function yx(){return await xs.default.trace("deleteLicenseKey",async()=>{await We.save({licenseKey:void 0}),await Kt()})}a(yx,"deleteLicenseKey");var Ht=require("@budibase/backend-core"),On=F(require("dd-trace"));var Cf=3600,Kt=a(async()=>{await Pf(),await Lf()},"refresh"),Of=a(async(e,t)=>{let{populateLicense:r=Rs,populateFreeLicense:n=_s}=t||{};return await On.default.trace("getCachedLicense",async o=>{let s=Ht.context.getLicense();if(s)return o.addTags({foundInContext:!0,features:s.features,plan:s.plan,quotas:s.quotas}),s;let i=Ht.tenancy.getTenantId(),u=await vo(),c=await u.get(i);return o.addTags({tenantId:i,foundInCache:!!c}),c?(o.addTags({foundInCache:!0,refreshedAt:c.refreshedAt,features:c.features,plan:c.plan,quotas:c.quotas}),c):(c=await On.default.trace("populateLicense",async()=>await r(i)),o.addTags({populatedLicense:!!c}),c||(c=On.default.trace("populateFreeLicense",()=>n(e,i)),o.addTags({populatedFreeLicense:!!c})),c.refreshedAt=new Date().toISOString(),o.addTags({refreshedAt:c.refreshedAt,features:c.features,plan:c.plan,quotas:c.quotas,expirySeconds:Cf}),await u.store(i,c,Cf),c)})},"_getCachedLicense");Ht.env.isJest()&&(Of=jest.fn());var Lf=Of,Pf=a(async()=>{let e=Ht.tenancy.getTenantId();await(await vo()).delete(e)},"invalidate");async function be(e,t){Array.isArray(e)||(e=[e]),t||(t=await Je.getCachedLicense());for(let r of e)if(!t?.features.includes(r))return!1;return!0}a(be,"areFeaturesEnabled");async function Ln(e,t){if(!await be(e,t))throw new bt.FeatureDisabledError(`${e} is not currently enabled`,e)}a(Ln,"checkFeature");async function Os(e,t){if(!await be(e,t)){let r=e.join(", ");throw new bt.FeatureDisabledError(`${r} are not currently enabled`,r)}}a(Os,"checkFeatures");function xe(e){return async(...t)=>(await Ln(Ae.Feature.WORKSPACE_BACKUPS),e(...t))}a(xe,"checkBackups");async function Ls(){return be(Ae.Feature.WORKSPACE_BACKUPS)}a(Ls,"isBackupsEnabled");async function Ps(){return be(Ae.Feature.BRANDING)}a(Ps,"isBrandingEnabled");async function Uf(){return be(Ae.Feature.ENFORCEABLE_SSO)}a(Uf,"isEnforceableSSO");async function bx(){return be(Ae.Feature.SYNC_AUTOMATIONS)}a(bx,"isSyncAutomationsEnabled");async function Ix(){return be(Ae.Feature.TRIGGER_AUTOMATION_RUN)}a(Ix,"isTriggerAutomationRunEnabled");async function Us(){return be(Ae.Feature.APP_BUILDERS)}a(Us,"isAppBuildersEnabled");async function Pn(){return be(Ae.Feature.AUDIT_LOGS)}a(Pn,"isAuditLogsEnabled");async function qs(){return be(Ae.Feature.USER_GROUPS)}a(qs,"isUserGroupsEnabled");function Sx(){return be(Ae.Feature.PWA)}a(Sx,"isPWAEnabled");function wx(){return be(Ae.Feature.RECAPTCHA)}a(wx,"isRecaptchaEnabled");var Tx=a(()=>be(Ae.Feature.PKCE_OIDC),"isPkceOidcEnabled");async function It(){return be(Ae.Feature.EXPANDED_PUBLIC_API)}a(It,"isExpandedPublicApiEnabled");async function Ex(e){if(bt.env.ENABLE_SSO_MAINTENANCE_MODE||!await Uf())return!1;let r;return e?.config?r=e.config:r=await bt.configs.getSettingsConfig(),!!r.isSSOEnforced}a(Ex,"isSSOEnforced");var Ds=a(async()=>{let e=Ae.Feature.SCIM,t=await be(e),r=await bt.configs.getSCIMConfig();if(!t||!r?.enabled)throw new bt.FeatureDisabledError(`${e} is not currently enabled`,e);return!0},"checkSCIM");async function Rx(){return be(Ae.Feature.VIEW_PERMISSIONS)}a(Rx,"isViewPermissionEnabled");async function vx(){return be(Ae.Feature.VIEW_READONLY_COLUMNS)}a(vx,"isViewReadonlyColumnsEnabled");var _x={faviconUrl:void 0,faviconUrlEtag:void 0,emailBrandingEnabled:!0,platformTitle:void 0,loginHeading:void 0,loginButton:void 0,metaDescription:void 0,metaImageUrl:void 0,metaTitle:void 0};async function xx(e){return await Ps()?{faviconUrl:e.faviconUrl,faviconUrlEtag:e.faviconUrlEtag,emailBrandingEnabled:e.emailBrandingEnabled,platformTitle:e.platformTitle,loginHeading:e.loginHeading,loginButton:e.loginButton,metaDescription:e.metaDescription,metaImageUrl:e.metaImageUrl,metaTitle:e.metaTitle}:_x}a(xx,"getBrandingConfig");var Ms={};x(Ms,{enrichAIConfig:()=>ks});var qf=require("@budibase/backend-core");var Cx="budibase_ai";async function ks(e){if(qf.env.SELF_HOSTED)return e;for(let t of Object.values(e.config))if(t.provider==="BudibaseAI")return e;return e.config[Cx]={provider:"BudibaseAI",active:!0,isDefault:Object.keys(e.config).every(t=>!e.config[t].isDefault),defaultModel:process.env.BUDIBASE_AI_DEFAULT_MODEL||"gpt-5-mini",name:"Budibase AI"},e}a(ks,"enrichAIConfig");var ft={};x(ft,{addAction:()=>qx,addApp:()=>Dx,addAutomation:()=>Fx,addGroup:()=>Bs,addPlugin:()=>Fs,addRow:()=>Mx,addRows:()=>Bx,addUsers:()=>kn,bustCache:()=>Po,decrement:()=>St,decrementMany:()=>xa,getCurrentUsageValues:()=>uc,getLicensedQuota:()=>kf,getQuotaUsage:()=>Ft,increment:()=>Me,incrementBudibaseAICredits:()=>Nn,incrementMany:()=>zt,removeApp:()=>kx,removeGroup:()=>Gs,removePlugin:()=>Ws,removeRow:()=>Nx,removeRows:()=>Gx,removeUsers:()=>vr,set:()=>Ns,setAllUsage:()=>qo,setAppUsageValue:()=>Uo,setUsage:()=>oc,setUsagePerApp:()=>sc,updatePluginCount:()=>$s,updateUsage:()=>Tr,usageLimitIsExceeded:()=>Ux,utils:()=>Gr});var qn=require("@budibase/types");var et=require("@budibase/backend-core"),de=require("@budibase/types"),Yt=require("dd-trace");var Me=a(async(e,t,r)=>await Yt.tracer.trace("quotas.increment",async n=>(n.addTags({name:e,type:t}),await Df({change:1,name:e,type:t,opts:r}))),"increment"),zt=a(e=>Yt.tracer.trace("quotas.incrementMany",async()=>Df(e)),"incrementMany"),Df=a(async e=>await Yt.tracer.trace("quotas.tryIncrement",async t=>{let r=Array.isArray(e)?e:[e];t.addTags({numActions:r.length}),await Tr(r.map(o=>({usageChange:o.change,name:o.name,type:o.type,opts:{dryRun:!0,suppressErrorLog:o.opts?.suppressErrorLog,id:o.opts?.id}})));let n=[];for(let o of r)await Yt.tracer.trace("quotas.incrementMany.fn",async s=>{s.addTags({actionName:o.name,actionType:o.type,actionChange:o.change});let i=o.opts?.fn;i&&n.push(await i())});return await Tr(r.map(o=>({usageChange:o.change,name:o.name,type:o.type,opts:{dryRun:!1,valueFn:o.opts?.valueFn,suppressErrorLog:o.opts?.suppressErrorLog,id:o.opts?.id}}))),n[0]}),"tryIncrement"),St=a((e,t,r={})=>Tr({usageChange:-1,name:e,type:t,opts:r}),"decrement"),xa=a(e=>{let t=Array.isArray(e)?e:[e];return Tr(t.map(r=>({usageChange:-r.change,name:r.name,type:r.type,opts:r.opts})))},"decrementMany"),Ns=a(async(e,t,r)=>it.setUsage(r,e,t),"set"),Ox=a((e,t,r)=>{if(e==de.QuotaUsageType.STATIC){let n=r.usageQuota.triggers;return n?n[t]||{}:{}}else{let n=it.utils.getCurrentMonthString(),o=r.monthly[n].triggers;return o?o[t]||{}:{}}},"getExistingTriggers"),Lx=a(async(e,t,r,n)=>{try{await et.locks.doWithLock({type:de.LockType.TRY_ONCE,name:de.LockName.TRIGGER_QUOTA,resource:e,ttl:1e4},async()=>{let o={percentage:r,name:t.name};n&&(o.resetDate=n),await Lt.triggerQuota(o)})}catch(o){et.logging.logAlert("Error triggering quota",o)}},"triggerQuota"),Px=a(async(e,t,r,n)=>{let o=await Ft(),s=e===de.QuotaUsageType.MONTHLY?o.quotaReset:void 0,i=await Ox(e,t,o),u=n.triggers,c=r/n.value*100;c>100&&(c=100);for(let[f,g]of u.entries())if(c>=g&&n.value!==At.UNLIMITED){if(!i[g]){i[g]=new Date().toISOString();let y=u[f+1]||100;(!(c>=y)||c===g)&&await Lx(t,n,c,s)}}else i[g]=void 0;return i},"checkTriggers"),Tr=a(async e=>{await Yt.tracer.trace("quotas.updateUsage",async t=>{let r=et.tenancy.getTenantId(),n=Array.isArray(e)?e:[e];t.addTags({numActions:n.length,tenantId:r});let o,s,i=[],u={},c={},f={},g={};for(let y of n)await Yt.tracer.trace("quotas.updateUsage.action",async E=>{E.addTags({actionName:y.name,actionType:y.type,actionUsageChange:y.usageChange});try{o=et.context.getWorkspaceId()}catch{}if(de.APP_QUOTA_NAMES.includes(y.name)&&!o)throw new Error("App context required for quota update");try{s=await kf(de.QuotaType.USAGE,y.name,y.type),i.push(s);let{total:k,app:D,breakdown:C}=await it.getCurrentUsageValues(y.type,y.name,y.opts?.id);k+=y.usageChange,D!=null&&(D+=y.usageChange),C!=null&&(C+=y.usageChange);let W={};if(y.opts?.dryRun||(W=await Px(y.type,y.name,k,s),g={...g,[y.name]:W}),s.value!==At.UNLIMITED&&k>s.value&&y.usageChange>0)throw new et.UsageLimitError(`Licensed ${s.name} of ${s.value} has been exceeded`,s.name);if(k=Math.max(0,k),D&&(D=Math.max(0,D)),C&&(C=Math.max(0,C),f={...f,[y.name]:C}),!y.opts?.dryRun){let ye=y.opts?.valueFn;ye&&(k=await ye(),D=k),u={...u,[y.name]:k},c={...c,[y.name]:D}}}catch(k){throw y.opts?.suppressErrorLog||console.error(`Error updating usage quotas for ${y.name}`,k),k}});let h=n.filter(y=>!y.opts?.dryRun).map(y=>({name:y.name,type:y.type,values:{total:u[y.name],app:c[y.name],breakdown:f[y.name],triggers:g[y.name]},opts:{...y.opts,tenantId:r}}));h.length>0&&await it.setAllUsage(h)})},"updateUsage"),kf=a(async(e,t,r)=>{let n=await Je.getCachedLicense();if(!n){let o=et.tenancy.getTenantId();throw new Error("License not found for tenant id "+o)}if(r&&(0,de.isStaticQuota)(e,r,t))return n.quotas[e][r][t];if(r&&(0,de.isMonthlyQuota)(e,r,t))return n.quotas[e][r][t];if((0,de.isConstantQuota)(e,t))return n.quotas[e][t];throw new Error("Invalid quota type")},"getLicensedQuota"),Ux=a(async({name:e,type:t,usageChange:r})=>{try{return await Tr({usageChange:r,name:e,type:t,opts:{dryRun:!0}}),!1}catch(n){if(n.code===de.ErrorCode.USAGE_LIMIT_EXCEEDED)return!0;throw n}},"usageLimitIsExceeded");var qx=a(async e=>Me(qn.MonthlyQuotaName.ACTIONS,qn.QuotaUsageType.MONTHLY,{fn:e}),"addAction");var Mf=require("@budibase/backend-core"),Er=require("@budibase/types");var Nf=a(async()=>{let e=await Mf.db.getAllWorkspaces({dev:!0});return e?e.length:0},"getDevAppsCount"),Dx=a(async(e,{appId:t}={})=>Me(Er.StaticQuotaName.WORKSPACES,Er.QuotaUsageType.STATIC,{fn:e,valueFn:Nf,id:t}),"addApp"),kx=a(async({appId:e}={})=>St(Er.StaticQuotaName.WORKSPACES,Er.QuotaUsageType.STATIC,{valueFn:Nf,id:e}),"removeApp");var lt=require("@budibase/types");var Mx=a(async(e,{tableId:t}={})=>Me(lt.StaticQuotaName.ROWS,lt.QuotaUsageType.STATIC,{fn:e,id:t}),"addRow"),Nx=a(async({tableId:e}={})=>St(lt.StaticQuotaName.ROWS,lt.QuotaUsageType.STATIC,{id:e}),"removeRow"),Bx=a(async(e,t,{tableId:r}={})=>zt({change:e,name:lt.StaticQuotaName.ROWS,type:lt.QuotaUsageType.STATIC,opts:{fn:t,id:r}}),"addRows"),Gx=a(async(e,{tableId:t}={})=>xa({change:e,name:lt.StaticQuotaName.ROWS,type:lt.QuotaUsageType.STATIC,opts:{id:t}}),"removeRows");var Dn=require("@budibase/types");var Fx=a(async(e,{automationId:t}={})=>Me(Dn.MonthlyQuotaName.AUTOMATIONS,Dn.QuotaUsageType.MONTHLY,{fn:e,id:t}),"addAutomation");var Rr=require("@budibase/types");var Bs=a(async e=>Me(Rr.StaticQuotaName.USER_GROUPS,Rr.QuotaUsageType.STATIC,{fn:e}),"addGroup"),Gs=a(async()=>St(Rr.StaticQuotaName.USER_GROUPS,Rr.QuotaUsageType.STATIC),"removeGroup");var Dt=require("@budibase/types");var Fs=a(async e=>Me(Dt.StaticQuotaName.PLUGINS,Dt.QuotaUsageType.STATIC,{fn:e}),"addPlugin"),Ws=a(async()=>St(Dt.StaticQuotaName.PLUGINS,Dt.QuotaUsageType.STATIC),"removePlugin"),$s=a(async e=>Ns(Dt.StaticQuotaName.PLUGINS,Dt.QuotaUsageType.STATIC,e),"updatePluginCount");var dt=require("@budibase/types"),Ca=require("@budibase/backend-core");var kn=a(async(e,t,r)=>{let n=[{change:e,name:dt.StaticQuotaName.USERS,type:dt.QuotaUsageType.STATIC,opts:{fn:r,valueFn:Ca.users.getUserCount}}];t>0&&n.push({change:t,name:dt.StaticQuotaName.CREATORS,type:dt.QuotaUsageType.STATIC,opts:{valueFn:Ca.users.getCreatorCount}});let o=await zt(n);return await ir(),o},"addUsers"),vr=a(async(e,t)=>{let r=[{change:e,name:dt.StaticQuotaName.USERS,type:dt.QuotaUsageType.STATIC,opts:{valueFn:Ca.users.getUserCount}}];t>0&&r.push({change:t,name:dt.StaticQuotaName.CREATORS,type:dt.QuotaUsageType.STATIC,opts:{valueFn:Ca.users.getCreatorCount}}),await xa(r),await ir()},"removeUsers");var Mn=require("@budibase/types");var Nn=a(async e=>zt({change:e,name:Mn.MonthlyQuotaName.BUDIBASE_AI_CREDITS,type:Mn.QuotaUsageType.MONTHLY}),"incrementBudibaseAICredits");var Wn={};x(Wn,{db:()=>Qe});var Hs=require("@budibase/backend-core");var re={};x(re,{addUsers:()=>Fn,adjustGroupCreatorsQuotas:()=>Qx,cleanupApp:()=>jx,enrichUserRolesFromGroups:()=>$x,fetch:()=>Oa,get:()=>_r,getBulk:()=>Qf,getGroupBuilderAppIds:()=>jf,getGroupRoleId:()=>Wx,remove:()=>Qs,removeUsers:()=>Ks,save:()=>Gn,updateGroupApps:()=>Vs});var N=require("@budibase/backend-core");var Bf=require("@budibase/backend-core");var Bn=class extends Bf.HTTPError{static{a(this,"GroupNameUnavailableError")}constructor(t){super(`Group name "${t}" is unavailable`,409)}};async function Wf(e,t){try{let r=[];for(let u of e)if(u.roles){let c=u.roles[N.db.getProdWorkspaceID(t)];c&&r.push(c)}let n=await Promise.all(r.map(async u=>({[u]:await N.roles.roleToNumber(u)}))),o,s,i={};n.forEach(u=>{let[c,f]=Object.entries(u)[0];i[c]={roleId:c,roleNum:f}});for(let{roleId:u,roleNum:c}of Object.values(i))(s===void 0||c>s)&&(s=c,o=u);return o}catch(r){throw N.logging.logAlert(`Error finding higest role for ${e.length} on app ${t}`,r),r}}a(Wf,"findHighestRole");async function $f(e,t){return t?t=t.filter(r=>e.includes(r._id)):t=await z.getBulk(e,{enriched:!1}),t}a($f,"groupList");async function jf(e,t){if(!e.userGroups)return[];let r=await $f(e.userGroups,t?.groups),n=t?.appId?N.db.getProdWorkspaceID(t?.appId):null,o=[];for(let s of r){let i=s.builder?.apps;n&&i?.includes(n)?o.push(n):n||(o=o.concat(i||[]))}return[...new Set(o)]}a(jf,"getGroupBuilderAppIds");async function Wx(e,t,r){if(!e.userGroups)return null;let n=await $f(e.userGroups,r?.groups),o=N.db.getProdWorkspaceID(t);return e.roles?.[o]?e.roles[o]:(n=n.filter(s=>s?.roles?Object.keys(s.roles).includes(o):!1),await Wf(n,t))}a(Wx,"getGroupRoleId");async function $x(e){if(!e||!e.userGroups)return e;let t=await Qf(e.userGroups,{enriched:!1}),r=[];for(let o of t)o?.roles&&(r=r.concat(Object.keys(o.roles)));r=[...new Set(r)];for(let o of r)await N.context.doInWorkspaceContext(o,async()=>{if(e.roles[o])return;let s=await Wf(t,o);s&&(e.roles[o]=s)});let n=await jf(e,{groups:t});if(n.length&&!e.builder?.global){let o=e.builder?.apps||[];e.builder={apps:o.concat(n)}}return e}a($x,"enrichUserRolesFromGroups");async function Oa(){return await z.fetch()}a(Oa,"fetch");async function _r(e){return await z.get(e)}a(_r,"get");async function Qf(e,t={enriched:!0}){return await z.getBulk(e,t)}a(Qf,"getBulk");async function Gf(e){if(await z.getByName(e))throw new Bn(e)}a(Gf,"guardNameAvailability");async function Ff(e){let t=await z.getGroupUsers(e._id);if(!t.length)return 0;let n=await N.tenancy.getGlobalDB().getMultiple(t.map(s=>s._id));return(await N.userUtils.creatorsInList(n)).filter(s=>s).length}a(Ff,"getCreatorsCountInGroup");async function Gn(e){let t=[],r=!e._id,n=0;if(delete e.users,!e._id)e._id=z.generateUserGroupID(),await Gf(e.name),t.push(N.events.group.created(e));else{let s=await z.get(e._id);if(s.name!==e.name&&await Gf(e.name),t.push(N.events.group.updated(e)),JSON.stringify(s.roles)!==JSON.stringify(e.roles)){let i=s.users?.length||0,u=0;i>0&&(u=await Ff(s)),Object.values(e.roles).includes("CREATOR")?n=i-u:n=-i,t.push(N.events.group.permissionsEdited(e))}}await Promise.all(t);let o=a(()=>z.save(e),"saveGroup");if(r)return await Bs(o);{let s=await o();if(n>0)await kn(0,n);else if(n<0){let i=await Ff(e),u=Math.abs(n)-i;u>0&&await vr(0,u)}return s}}a(Gn,"save");async function Qs(e,t){let r;try{r=await z.get(e)}catch{throw new Error("Group not found")}let n=Object.values(r.roles||{}).includes("CREATOR"),o=a(()=>{},"recalculateCreatorsQuotasFn");if(n){let i=N.tenancy.getGlobalDB(),u=await z.getGroupUsers(e),f=(await Promise.all(u.map(E=>i.get(E._id)))).map(E=>({...E,userGroups:E.userGroups.filter(M=>M!==e)})),h=(await N.userUtils.creatorsInList(f)).filter(E=>E).length,y=u.length-h;y&&(o=a(()=>vr(0,y),"recalculateCreatorsQuotasFn"))}let s=await z.destroy(e,t);return await N.events.group.deleted(r),await Gs(),await o(),s}a(Qs,"remove");async function Fn(e,t){let r=await z.get(e),n=await N.users.bulkGetGlobalUsersById(t),o=[];for(let c of n)c.userGroups||(c.userGroups=[]),c.userGroups.includes(e)||o.push(c);if(!o.length)return o;let s=o.map(c=>({...c,userGroups:[...c?.userGroups||[],e]}));if(await N.users.bulkUpdateGlobalUsers(s),Object.values(r.roles||{}).includes("CREATOR")){let f=(await N.userUtils.creatorsInList(o)).filter(h=>h).length,g=o.length-f;g&&await kn(0,g)}let u=[];for(let c of t)u.push(N.cache.user.invalidateUser(c));return await Promise.all(u),await N.events.group.usersAdded(s.length,r,t),s}a(Fn,"addUsers");async function Ks(e,t){let r=await z.get(e),n=await N.users.bulkGetGlobalUsersById(t),o=[];for(let u of n){if(!u.userGroups||!u.userGroups.includes(e))continue;let c=u.userGroups.indexOf(e);u.userGroups.splice(c,1),o.push(u)}if(await N.users.bulkUpdateGlobalUsers(o),Object.values(r.roles||{}).includes("CREATOR")){let c=(await N.userUtils.creatorsInList(o)).filter(g=>g).length,f=o.length-c;f&&await vr(0,f)}let i=[];for(let u of t)i.push(N.cache.user.invalidateUser(u));return await Promise.all(i),o.length&&await N.events.group.usersDeleted(o.length,r,t),o}a(Ks,"removeUsers");async function Vs(e,t){let r=await _r(e);if(r.roles||(r.roles={}),t.appsToAdd)for(let n of t.appsToAdd)r.roles[n.appId]=n.roleId;if(t.appsToRemove)for(let n of t.appsToRemove)delete r.roles[n.appId];if(r.builder={apps:Object.entries(r.roles).filter(([n,o])=>o==="CREATOR").map(([n])=>n)},r.builder.apps.length&&!Us())throw new N.HTTPError("Feature not enabled, please check license",400);return await Gn(r)}a(Vs,"updateGroupApps");async function jx(e){let t=await Oa(),r=[];for(let n of t)!n.roles||!n.roles[e]||(delete n.roles[e],r.push(n));return await z.bulkSave(r)}a(jx,"cleanupApp");async function Qx(){if(!await qs()){let e=N.tenancy.getGlobalDB(),r=(await Oa()||[]).filter(n=>Object.values(n?.roles||{}).includes("CREATOR"));for(let n of r){let o=await z.getGroupUsers(n._id),i=(await Promise.all(o.map(g=>e.get(g._id)))).map(g=>({...g,userGroups:g.userGroups.filter(h=>h!==n._id)})),c=(await N.userUtils.creatorsInList(i)).filter(g=>g).length,f=o.length-c;await z.save({...n,roles:{}}),f&&await vr(0,f)}}}a(Qx,"adjustGroupCreatorsQuotas");Hs.users.UserDB.init(ft,re,Ze);var Qe=Hs.users.UserDB;var Qn={};x(Qn,{logs:()=>ti});var ti={};x(ti,{logSearch:()=>eC,oldestLogDate:()=>Xf,storeLog:()=>tC});var jn=require("@budibase/backend-core"),Jf=require("@budibase/types");var ge=require("@budibase/backend-core"),$n=require("@budibase/types");var Kf=require("@budibase/backend-core");async function Vf(e,t){let r,n=5,o=!1,s,i=!0;for(;n>0;n--)try{i?s=await e():s=await exports.randomDelay(e),o=!0;break}catch(u){r=u}return o||Kf.logging.logWarn(`Failed to backoff: ${t}`,r),s}a(Vf,"backOff");var{SEPARATOR:wt,UNICODE_MAX:Kx,DocumentType:Hf,AutomationViewMode:Ys,ViewName:Vx,getQueryIndex:Hx}=ge.db,Yx=new Date(0).toISOString(),zx=100,zs=a(async()=>sn($n.ConstantQuotaName.AUTOMATION_LOG_RETENTION_DAYS),"oldestLogDate");function Yf(e,t,{status:r,automationId:n}={},o={}){let s=n?`${n}${wt}`:"",i=r?`${r}${wt}`:"",u;return r&&n?u=`${Ys.ALL}${wt}${i}${s}`:r?u=`${Ys.STATUS}${wt}${i}`:n?u=`${Ys.AUTOMATION}${wt}${s}`:u=`${Hf.AUTOMATION_LOG}${wt}`,{...o,descending:!0,startkey:`${u}${t}${Kx}`,endkey:`${u}${e}`}}a(Yf,"getAutomationLogParams");function Jx(e,t,r){return`${Hf.AUTOMATION_LOG}${wt}${e}${wt}${r}${wt}${t}`}a(Jx,"generateAutomationLogID");async function Js(e,t,r={docs:!0}){let n=ge.context.getProdWorkspaceDB();await n.exists()||(n=ge.context.getDevWorkspaceDB());let o={status:r.status},s=r?.limit?r.limit:r?.paginate?9+1:void 0,i=Yf(e,t,o,{include_docs:r.docs,limit:s});r?.page&&(i.startkey=r.page);let u=await n.allDocs(i);return na(u,{paginate:r?.paginate,pageSize:9})}a(Js,"getAllLogs");async function Xs(e,t,r={}){let n=ge.context.getProdWorkspaceDB();await n.exists()||(n=ge.context.getDevWorkspaceDB());let o;try{let s={automationId:r?.automationId,status:r?.status},i=Yf(e,t,s,{include_docs:!0,limit:9+1});r?.page&&(i.startkey=r.page),o=await n.query(Hx(Vx.AUTOMATION_LOGS),i)}catch(s){if(s!=null&&(s.name==="not_found"||s.error==="not_found"))return await Tc(),Xs(e,t,r);throw s}return na(o,{paginate:!0,pageSize:9})}a(Xs,"getLogsByView");async function zf(e,t){let r=ge.context.getProdWorkspaceDB(),n=e._id,o=e.name,s=new Date().toISOString(),i=Jx(s,t.status,n),u={...t,automationId:n,status:t.status,automationName:o,createdAt:s,_id:i};return await r.put(u),i}a(zf,"writeLog");async function Zs(e,{clearing:t}={clearing:!1}){let r=ge.context.getProdWorkspaceDB();await Vf(async()=>{let n=await r.get(ge.db.DocumentType.WORKSPACE_METADATA);for(let o of e){let s=o.split(ge.db.SEPARATOR),i=`${s[s.length-3]}${ge.db.SEPARATOR}${s[s.length-2]}`,u={};n.automationErrors&&(u=n.automationErrors),Array.isArray(u[i])||(u[i]=[]);let c=u[i].indexOf(o);t&&c!==-1?u[i].splice(c,1):u[i].push(o),u[i].length===0&&delete u[i],n.automationErrors=u}await r.put(n),await ge.cache.workspace.invalidateWorkspaceMetadata(n.appId,n)},"Failed to update app metadata with automation log error")}a(Zs,"updateAppMetadataWithErrors");async function Xx(){let e=await zs();try{return await Js(Yx,e,{docs:!1,paginate:!1,limit:zx})}catch{return{data:[],hasNextPage:!1}}}a(Xx,"getExpiredLogs");async function ei(){let e=ge.context.getProdWorkspaceDB();try{let t=await Xx();if(!t.data||t.data.length===0)return;let r=t.data.map(o=>({_id:o.id,_rev:o.value.rev,_deleted:!0})),n=t.data.filter(o=>{let s=o.id.split(ge.db.SEPARATOR);return s[s.length-1]===$n.AutomationStatus.ERROR}).map(o=>o.id);await e.bulkDocs(r),n.length&&await Zs(n,{clearing:!0})}catch(t){ge.logging.logAlert(`Failed to cleanup automation log history - Database "${e.name}"`,t)}}a(ei,"clearOldHistory");var Xf=zs;async function Zx(e,t,r,n){let o,s=new Date().toISOString(),i=await Xf();return(!e||e<i)&&(e=i),r||t?o=await Xs(e,s,{automationId:r,status:t,page:n}):o=await Js(e,s,{status:t,page:n,docs:!0,paginate:!0}),o}a(Zx,"getLogs");async function eC(e){return await ei(),await Zx(e.startDate,e.status,e.automationId,e.page)}a(eC,"logSearch");async function tC(e,t){if(!jn.db.isProdWorkspaceID(jn.context.getWorkspaceId()))return;let r=await zf(e,t);t.status===Jf.AutomationStatus.ERROR&&await Zs([r]),await ei()}a(tC,"storeLog");var Kn={};x(Kn,{checkPluginQuotas:()=>nC,deletePlugin:()=>aC,storePlugin:()=>rC});var rm=require("@budibase/types"),fe=require("@budibase/backend-core");var Zf=F(require("fs")),em=require("path");function tm(e,t){return Zf.default.readFileSync((0,em.join)(e,t),"utf8")}a(tm,"loadJSFile");async function rC(metadata,directory,source){let db=fe.tenancy.getGlobalDB(),version=metadata.package.version,name=metadata.package.name,description=metadata.package.description,hash=metadata.schema.hash,bucketPath=fe.objectStore.getPluginS3Dir(name),files=await fe.objectStore.uploadDirectory(fe.objectStore.ObjectStoreBuckets.PLUGINS,directory,bucketPath),jsFile=files.find(e=>e.name.endsWith(".js")),iconFile=files.find(e=>e.name.endsWith(".svg"));if(!jsFile)throw new Error("Plugin missing .js file.");if(metadata.schema.type===rm.PluginType.DATASOURCE){let js=tm(directory,jsFile.name);try{eval(js)}catch(e){let t=e?.message?e.message:JSON.stringify(e);throw new Error(`JS invalid: ${t}`)}}let iconFileName=iconFile?iconFile.name:null,pluginId=fe.db.generatePluginID(name),rev;try{rev=(await db.get(pluginId))._rev}catch(e){rev=void 0}let doc={_id:pluginId,_rev:rev,...metadata,name,version,hash,description,source};iconFileName&&(doc.iconFileName=iconFileName),source&&(doc={...doc,source});let write=a(async()=>{let e=await db.put(doc);return await fe.events.plugin.imported(doc),{...doc,_rev:e.rev}},"write");return rev?await write():await Fs(write)}a(rC,"storePlugin");async function aC(e){let t=fe.tenancy.getGlobalDB();try{let r=await t.get(e),n=fe.objectStore.getPluginS3Dir(r.name);await fe.objectStore.deleteFolder(fe.objectStore.ObjectStoreBuckets.PLUGINS,n),await t.remove(e,r._rev),await fe.events.plugin.deleted(r),await Ws()}catch(r){let n=r?.message?r?.message:r;throw new Error(`Failed to delete plugin: ${n}`)}}a(aC,"deletePlugin");async function nC(){let e=fe.tenancy.getGlobalDB();try{let r=(await e.allDocs(fe.db.getPluginParams())).rows.length;console.log(`Syncing plugin count: ${r}`),await $s(r)}catch(t){fe.logging.logAlert("Unable to retrieve plugins for quota check",t)}}a(nC,"checkPluginQuotas");var mt={};x(mt,{fetch:()=>sC,fetchValues:()=>iC,isEncryptionKeyAvailable:()=>oC,isValid:()=>om,remove:()=>cC,update:()=>uC});var am=require("@budibase/backend-core"),La=require("@budibase/types");function oC(){return!!am.env.ENCRYPTION_KEY}a(oC,"isEncryptionKeyAvailable");async function sC(){let e=await jt.get();return Object.keys(e.variables)}a(sC,"fetch");async function iC(e){let r=(await jt.get()).variables,n={};for(let[o,s]of Object.entries(r))switch(e){case La.Environment.DEVELOPMENT:n[o]=s.development;break;case La.Environment.PRODUCTION:default:n[o]=s.production;break}return n}a(iC,"fetchValues");async function nm(e){if(!(await ct.cache.getCachedLicense()).features.includes(La.Feature.ENVIRONMENT_VARIABLES))throw new Error("User does not have access to environment variables feature.");let r=await jt.get();r.variables=e(r.variables),await jt.update(r)}a(nm,"changeValues");async function uC(e,t){if(om(e))await nm(n=>(n[e]=t,n));else throw new Error("Variable name has characters that are not allowed")}a(uC,"update");async function cC(e){await nm(t=>(delete t[e],t))}a(cC,"remove");function om(e){return/^[a-zA-Z0-9-_]+$/.test(e)}a(om,"isValid");var kt={};x(kt,{definitions:()=>IC,download:()=>bC,fetch:()=>AC,write:()=>hC});var Pe=require("@budibase/backend-core"),Hn=require("@budibase/types");var ue=require("@budibase/backend-core"),tt=require("@budibase/types");var sm=require("memorystream"),im=new ue.sql.Sql(tt.SqlClient.SQL_LITE);async function pC(e,t,r){let n={operation:tt.Operation.READ,table:or.searchTable(),tables:{},paginate:{limit:r||9,page:t},filters:e,resource:{fields:[]},sort:{timestamp:{direction:tt.SortOrder.DESCENDING,type:tt.SortType.STRING}}},o=im._query(n);if(Array.isArray(o))throw new Error("Cannot execute multiple queries for audit log search");return{sql:o.sql,bindings:o.bindings}}a(pC,"getAuditLogSqlQuery");function lC(e){return`${ue.DocumentType.AUDIT_LOG}${ue.SEPARATOR}${e}${ue.SEPARATOR}${ue.utils.newid()}`}a(lC,"generateAuditLogID");async function um(e){e._id||(e._id=lC(e.timestamp)),e.type||(e.type=tt.AUDIT_LOG_TYPE);try{let r=await ue.context.getAuditLogsDB().put(e);return{...e,_rev:r.rev}}catch(t){ue.logging.logAlert("Failed to write audit log",t)}}a(um,"save");async function ri(e,t,r){t||(t=1);let n=ue.context.getAuditLogsDB();try{let o=9+1,s=await pC(e,t,o),i=or.searchTable(),u=im.convertJsonStringColumns(i,await n.sql(s.sql,s.bindings)),c;u.length>o&&(c=u.pop());let f={rows:u,hasNextPage:!!c};return f.hasNextPage&&(f.bookmark=t+1),f}catch(o){if(o.status===404&&!r?.isRetry)return await dC(),await cc(),await ri(e,t,{isRetry:!0});throw o}}a(ri,"searchSQL");async function dC(){let e=ue.context.getAuditLogsDB(),r=(await e.allDocs(ue.db.getDocParams(ue.DocumentType.AUDIT_LOG,null,{include_docs:!0}))).rows.map(n=>n.doc).filter(n=>n&&!n.type).map(n=>({...n,type:tt.AUDIT_LOG_TYPE}));await e.bulkDocs(r)}a(dC,"migrate");function cm(e){let t=ue.context.getAuditLogsDB(),r=new sm,n=t.dump(r,{filter:s=>{let i=s;if(!i._id?.startsWith(ue.DocumentType.AUDIT_LOG))return!1;let u=!0,c=a((f,g)=>{!f||f.length===0||(u=!!(u&&g&&f.includes(g)))},"matcher");if(c(e.userIds,i.userId),c(e.appIds,i.appId),c(e.events,i.event),(e.startDate||e.endDate)&&(u=u&&i.timestamp>=e.startDate&&i.timestamp<=e.endDate),e.fullSearch){let f=JSON.stringify(s);u=u&&f.includes(e.fullSearch)}return u}}),o=new sm;return r.on("data",s=>{let i=JSON.parse(Buffer.from(s).toString());if(Array.isArray(i.docs)){let u="";for(let c of i.docs)u+=JSON.stringify(c)+`
38
+ `;o.write(u)}}),r.on("end",()=>{o.end()}),{promise:n,stream:o}}a(cm,"dump");var Pa=require("@budibase/backend-core"),Ua=require("@budibase/string-templates"),Vn=require("@budibase/types");var mC=Pa.constants.MIN_VALID_DATE.toISOString(),gC=Pa.constants.MAX_VALID_DATE.toISOString();function ai(e){return(e.startDate||e.endDate)&&(e.startDate=e.startDate||mC,e.endDate=e.endDate||gC),e}a(ai,"fillDates");async function pm(e){Array.isArray(e.appIds)&&(e.appIds=e.appIds.map(n=>Pa.db.getProdWorkspaceID(n)));let t={};function r(n,o){o?.length&&(t.oneOf={...t.oneOf,[n]:o})}return a(r,"addStringParams"),r("userId",e.userIds),r("appId",e.appIds),r("event",e.events),e.fullSearch&&(t.fuzzyOr=!0,t.fuzzy={name:e.fullSearch,fallback:e.fullSearch}),(e.startDate||e.endDate)&&(e=ai(e),t.range={timestamp:{high:e.endDate,low:e.startDate}}),Object.keys(t).length===0&&(t.notEmpty={event:!0}),t}a(pm,"getSearchFilters");function ni(e,t,r){let n={_id:e,status:Vn.AuditLogResourceStatus.DELETED};switch(t){case"app":n.name=r?.appName;break;case"user":n.email=r?.email;break}return n}a(ni,"deleted");function oi(e){let t=(0,Ua.findHBSBlocks)(e);for(let r of t){let n=` "${r}"`;e=e.replace(e.includes(n)?n:` ${r}`,""),e=(0,Ua.processStringSync)(e,{})}return e}a(oi,"removeTemplateStrings");function lm(e,t){let r=Vn.AuditedEventFriendlyName[e];if(!r)throw new Error("No friendly name found.");let n=(0,Ua.processStringSync)(r,t);return n.includes('""')&&(n=oi(r)),n}a(lm,"getEventFriendlyName");async function hC(e,t,r){if(!await Pn()||!Pe.utils.isAudited(e))return;let n=lm(e,t),o=new Date;r?.timestamp&&(o=new Date(r.timestamp));let s={timestamp:o.toISOString(),event:e,name:n,userId:r?.userId||Hn.AuditLogSystemUser,metadata:{...t,...r?.hostInfo}},i={};try{if(r?.appId){s.appId=Pe.db.getProdWorkspaceID(r.appId);let u=await Pe.cache.workspace.getWorkspaceMetadata(r.appId);"name"in u&&(i.appName=u.name)}if(r?.userId){let u=await Pe.users.getById(r?.userId);i.email=u.email}}catch(u){Pe.logging.logAlert("Failed to retrieve fallback information for audit log",u)}return s.fallback=i,await um(s)}a(hC,"write");async function yC(e){let t=e.map(u=>u.userId),n=e.filter(u=>u.appId).map(u=>Pe.db.getDevWorkspaceID(u.appId)),o=await Pe.users.bulkGetGlobalUsersById([...new Set(t)],{cleanup:!0}),s=await Pe.db.getWorkspacesByIDs([...new Set(n)]),i=[];for(let u of e){let c=o.find(h=>h?._id===u.userId),f=s.find(h=>Pe.db.isSameWorkspaceID(h?.appId,u.appId)),g={event:u.event,timestamp:u.timestamp,name:u.name,metadata:u.metadata,user:c||ni(u.userId,"user",u.fallback)};u.appId&&(g.app=f||ni(u.appId,"app",u.fallback)),i.push(g)}return i}a(yC,"enrich");async function AC(e){if(!await Pn())throw new Error("Audit logs not available - license required.");let t=await pm(e);if(typeof e.bookmark=="string")throw new Error("String based bookmark not supported.");let r=await ri(t,e.bookmark);return{hasNextPage:r.hasNextPage,bookmark:r.bookmark,data:await yC(r.rows)}}a(AC,"fetch");function bC(e){return e=ai(e),cm(e)}a(bC,"download");function IC(){let e=Object.entries(Hn.AuditedEventFriendlyName).filter(r=>r[1]!=null),t={};for(let r of e)t[r[0]]=oi(r[1]);return t}a(IC,"definitions");var Yn={};x(Yn,{applications:()=>ci,roles:()=>ii,users:()=>si});var si={};x(si,{roleCheck:()=>wC});function SC(e,t){let r=e.request.body;return r.builder&&(r.builder=t?.builder||void 0),r.admin&&(r.admin=t?.admin||void 0),r.roles&&(r.roles=t?.roles||{}),e.request.body=r,e}a(SC,"removeRoles");async function wC(e,t){return await It()||SC(e,t),e}a(wC,"roleCheck");var ii={};x(ii,{assign:()=>TC,unAssign:()=>EC});var qa=require("@budibase/backend-core");async function TC(e,t){if(!await It())throw new Error("Unable to assign roles - license required.");let r=await Qe.bulkGet(e);for(let n of r){if(t.role&&t.role.roleId){let o=qa.db.getProdWorkspaceID(t.role.appId);n.roles[o]=t.role.roleId}if(t.appBuilder){let o=qa.db.getProdWorkspaceID(t.appBuilder.appId),s=n.builder?.apps||[];n.builder={apps:s.concat([o])}}t.builder&&(n.builder={global:!0}),t.admin&&(n.admin={global:!0}),n.roles}await Qe.bulkUpdate(r)}a(TC,"assign");async function EC(e,t){if(!await It())throw new Error("Unable to un-assign roles - license required.");let r=await Qe.bulkGet(e);for(let n of r){if(t.role){let o=qa.db.getProdWorkspaceID(t.role?.appId);n.roles[o]===t.role.roleId&&delete n.roles[o]}if(t.appBuilder&&n.builder?.apps){let o=qa.db.getProdWorkspaceID(t.appBuilder.appId);n.builder.apps=n.builder.apps.filter(s=>s!==o)}t.builder&&n.builder&&delete n.builder,t.admin&&n.admin&&delete n.admin}}a(EC,"unAssign");var ci={};x(ci,{buildExportFn:()=>vC,buildImportFn:()=>RC});var ui=require("@budibase/backend-core");function RC(e){return async(t,r)=>{await It()||t.throw(403,"Endpoint unavailable, license required."),t.request.files?.appExport||t.throw(400,"Must provide app export file for import."),await ui.context.doInWorkspaceContext(t.params.appId,async()=>{await e(t),t.body=void 0,t.status=204,await r()})}}a(RC,"buildImportFn");function vC(e){return async(t,r)=>{await It()||t.throw(403,"Endpoint unavailable, license required.");let{encryptPassword:n,excludeRows:o}=t.request.body;await ui.context.doInWorkspaceContext(t.params.appId,async()=>{t.request.body={encryptPassword:n,excludeRows:o},t.query.appId=t.params.appId,await e(t),await r()})}}a(vC,"buildExportFn");var Se=require("@budibase/backend-core"),Ie=require("@budibase/types"),mm=F(require("fs")),gm=require("path");var pi=require("@budibase/backend-core");var dm;function fm(){dm=new pi.queue.BudibaseQueue(pi.queue.JobQueue.APP_BACKUP,{maxStalledCount:3,jobOptions:{attempts:3,removeOnFail:!0,removeOnComplete:!0}})}a(fm,"init");function Jt(){return dm}a(Jt,"getBackupQueue");async function li(e,t={}){return $e.storeAppBackupMetadata(e,t)}a(li,"storeAppBackupMetadata");function hm(e){let t=new Date().toISOString();switch(e){case Ie.BackupStatus.COMPLETE:case Ie.BackupStatus.FAILED:return{timestamp:t,finishedAt:t};case Ie.BackupStatus.STARTED:return{timestamp:t,startedAt:t};case Ie.BackupStatus.PENDING:return{timestamp:t,createdAt:t}}}a(hm,"getTimestamps");async function _C(e,t,r,n){let o=await zn(e);return await $e.storeAppBackupMetadata({...o,...hm(t),contents:r,status:t,type:Ie.BackupType.BACKUP},{filename:n,docId:e})}a(_C,"updateBackupStatus");async function xC(e,t,r){let n=await zn(e);return await $e.storeAppBackupMetadata({...n,...hm(r),status:r,type:Ie.BackupType.RESTORE,trigger:Ie.BackupTrigger.MANUAL},{docId:e,docRev:t})}a(xC,"updateRestoreStatus");async function zn(e){return $e.getAppBackupMetadata(e)}a(zn,"getAppBackup");async function CC(e,t){return $e.updateAppBackupMetadata(e,t)}a(CC,"updateAppBackup");async function ym(e){let t=await $e.getAppBackupMetadata(e);return t.filename&&await Se.objectStore.deleteFile(Se.objectStore.ObjectStoreBuckets.BACKUPS,t.filename),$e.deleteAppBackupMetadata(e)}a(ym,"deleteAppBackup");async function OC(e){let t=[];for(let r of e)try{await ym(r),t.push({backupId:r,success:!0})}catch(n){t.push({backupId:r,success:!1,error:n instanceof Error?n.message:"Unknown error"})}return t}a(OC,"deleteAppBackups");async function LC(e,t){return $e.fetchAppBackups(e,t)}a(LC,"fetchAppBackups");async function Am(e){let t=await $e.getAppBackupMetadata(e);if(!t.filename)throw new Error("Backup incomplete - cannot download.");let{stream:r}=await Se.objectStore.getReadStream(Se.objectStore.ObjectStoreBuckets.BACKUPS,t.filename);return{metadata:t,stream:r}}a(Am,"getBackupDownloadStream");async function PC(e){let{stream:t}=await Am(e),r=(0,gm.join)(Se.objectStore.budibaseTempDir(),Se.utils.newid()),n=mm.default.createWriteStream(r);return new Promise((o,s)=>{t.on("error",s),n.on("error",s),t.pipe(n).on("close",()=>o(r))})}a(PC,"downloadAppBackup");async function UC(e,t,r={}){let n;try{n=await li({appId:e,trigger:t,timestamp:new Date().toISOString(),status:Ie.BackupStatus.PENDING,type:Ie.BackupType.BACKUP,...r})}catch(o){if(o.status===409)return;throw o}return await Jt().add({docId:n.id,docRev:n.rev,appId:e,export:{trigger:t,...r}}),await Se.events.backup.appBackupTriggered(e,n.id,Ie.BackupType.BACKUP,t,r?.name),n.id}a(UC,"triggerAppBackup");async function qC(e,t,r,n){let o=await zn(t),s;try{s=await li({appId:e,timestamp:new Date().toISOString(),status:Ie.BackupStatus.PENDING,type:Ie.BackupType.RESTORE,createdBy:n})}catch(i){if(i?.status===409)return;throw i}return await Jt().add({appId:e,docId:s.id,docRev:s.rev,import:{nameForBackup:r,backupId:t,createdBy:n}}),{restoreId:s.id,metadata:o}}a(qC,"triggerAppRestore");async function DC(e,t,r){let n=Se.db.getProdWorkspaceID(e);await Se.context.doInWorkspaceContext(n,async()=>{let o=Se.context.getProdWorkspaceDB();if(!await o.exists())return;let i=await o.tryGet(Ie.DocumentType.WORKSPACE_METADATA);i&&(i.backupErrors||(i.backupErrors={}),i.backupErrors[t]||(i.backupErrors[t]=[]),i.backupErrors[t].push(r),await o.put(i),await Se.cache.workspace.invalidateWorkspaceMetadata(i.appId,i))})}a(DC,"trackBackupError");var kC={isEnabled:Ls,triggerAppRestore:xe(qC),triggerAppBackup:xe(UC),getBackupDownloadStream:xe(Am),downloadAppBackup:xe(PC),fetchAppBackups:xe(LC),storeAppBackupMetadata:xe(li),updateBackupStatus:xe(_C),updateRestoreStatus:xe(xC),getAppBackup:xe(zn),updateAppBackup:xe(CC),deleteAppBackup:xe(ym),deleteAppBackups:xe(OC),trackBackupError:xe(DC)},Ke=kC;var fi={};x(fi,{init:()=>di});var ae=require("@budibase/backend-core"),rt=require("@budibase/types"),xr=F(require("fs"));async function di(e){Jt().process(async t=>{let r=t.data;try{if(r.export)return console.log("Exporting app backup:",r.appId,r.export.trigger),BC(t,e);if(r.import)return console.log("Importing app backup:",r.appId,r.import.backupId),NC(t,e)}catch(n){ae.logging.logAlert(`Failed to perform backup for app ID: ${r.appId}`,n)}})}a(di,"init");async function MC(e){await ae.db.getDB(e,{skip_setup:!0}).destroy()}a(MC,"removeExistingApp");async function bm(e,t,r,n){let o=ae.db.getDevWorkspaceID(r),s=ae.db.getProdWorkspaceID(r),i=new Date().toISOString(),u=a(async(c,f)=>{n?.doc?await Ke.updateBackupStatus(n.doc.id,c,f?.contents,f?.filename):await Ke.storeAppBackupMetadata({appId:s,timestamp:i,trigger:e,status:c,name:n?.name,type:rt.BackupType.BACKUP,contents:f?.contents,createdBy:n?.createdBy},{filename:f?.filename})},"updateMetadata");try{let c=await n.processing.exportAppFn(o,{tar:!0}),f=await n.processing.statsFn(o),g=`${s}/backup-${i}.tar.gz`,h=ae.objectStore.ObjectStoreBuckets.BACKUPS,y=xr.default.createReadStream(c);await ae.objectStore.streamUpload({bucket:h,filename:g,stream:y,extra:{type:"application/gzip",metadata:{name:n?.name,trigger:e,timestamp:i,appId:s}}}),await u(rt.BackupStatus.COMPLETE,{filename:g,contents:f}),xr.default.existsSync(c)&&xr.default.rmSync(c)}catch(c){ae.logging.logAlert("App backup error",c),await u(rt.BackupStatus.FAILED);let f=n?.doc?.id||`backup-${i}`,g=c instanceof Error?c.message:String(c);await Ke.trackBackupError(s,f,`Backup export failed: ${g}`)}}a(bm,"runBackup");async function NC(e,t){let r=e.data,n=r.appId,o=r.import.backupId,s=r.import.nameForBackup,i=r.import.createdBy,u=ae.tenancy.getTenantIDFromWorkspaceID(n);return ae.tenancy.doInTenant(u,async()=>{let c=ae.db.getDevWorkspaceID(n),f=`${c}_temp_${Date.now()}`,{rev:g}=await Ke.updateRestoreStatus(r.docId,r.docRev,rt.BackupStatus.STARTED);await bm(rt.BackupTrigger.RESTORING,u,n,{processing:t,createdBy:i,name:s});let h=await Ke.downloadAppBackup(o),y=rt.BackupStatus.COMPLETE;try{await t.importAppFn(f,ae.db.getDB(f),{file:{type:"application/gzip",path:h},key:h}),await MC(c),await new ae.db.Replication({source:f,target:c}).replicate()}catch(E){ae.logging.logAlert("App restore error",E),y=rt.BackupStatus.FAILED;let M=E instanceof Error?E.message:String(E);await Ke.trackBackupError(n,o,`Backup restore failed: ${M}`)}finally{try{await ae.db.getDB(f,{skip_setup:!0}).destroy()}catch{}}await Ke.updateRestoreStatus(r.docId,g,y),xr.default.existsSync(h)&&xr.default.rmSync(h,{force:!0})})}a(NC,"importProcessor");async function BC(e,t){let r=e.data,n=r.appId,o=r.export.trigger,s=r.export.name,i=ae.tenancy.getTenantIDFromWorkspaceID(n);await ae.tenancy.doInTenant(i,async()=>{try{let{rev:u}=await Ke.updateBackupStatus(r.docId,rt.BackupStatus.STARTED);return bm(o,i,n,{processing:t,doc:{id:r.docId,rev:u},name:s})}catch(u){ae.logging.logAlert("App backup error",u);let c=u instanceof Error?u.message:String(u);await Ke.trackBackupError(n,r.docId,`Backup export failed: ${c}`)}})}a(BC,"exportProcessor");var GC=a(async e=>{fm(),await di(e.processing)},"init"),Ne={...Ke,processing:fi,init:GC,getBackupQueue:Jt};var Im=a(async e=>{e.backups&&await Ne.init(e.backups)},"init");var qe={};x(qe,{create:()=>UN,find:()=>PN,get:()=>LN,remove:()=>DN,update:()=>qN});var WA=F(iu()),Tt=require("@budibase/backend-core");var $A=require("@budibase/types");async function LN(e){let t=Tt.tenancy.getGlobalDB(),r=new Tt.db.QueryBuilder(t.name,$A.SearchIndex.USER);r.setIndexBuilder(Tt.db.searchIndexes.createUserIndex),r.setLimit(e.pageSize),r.addEqual("scimInfo.isSync",!0);for(let[o,s]of Object.entries(e.filters?.equal??{}))r.addEqual(o,s);r.setSort("_id"),r.setSkip(e.skip);let n=await r.run();return{users:n.rows,total:n.totalRows}}a(LN,"get");async function PN(e){return await Tt.users.getById(e)}a(PN,"find");async function UN(e){let t=await Qe.getUserByEmail(e.email);if(t){if(t.scimInfo?.isSync)throw new Tt.HTTPError("User is already synched",409);e={...t,scimInfo:(0,WA.default)(t.scimInfo,e.scimInfo),password:void 0,firstName:e.firstName,lastName:e.lastName,updatedAt:e.updatedAt}}return await Qe.save(e,{requirePassword:!1})}a(UN,"create");async function qN(e,t){return await Qe.save(e,{requirePassword:!1,allowChangingEmail:t?.allowChangingEmail})}a(qN,"update");async function DN(e){return await Qe.destroy(e)}a(DN,"remove");var qr={};x(qr,{create:()=>kN});var jA=F(iu());var QA=require("@budibase/backend-core");async function kN(e){let t=await ko(e.name),r;if(!t)r=(await re.save(e)).id;else{if(t.scimInfo?.isSync)throw new QA.HTTPError("Group is already synched",409);r=t._id,t.users&&(await re.removeUsers(r,t.users.map(o=>o._id)),delete t.users),t.scimInfo=(0,jA.default)(t.scimInfo,e.scimInfo),await re.save(t)}return await re.get(r)}a(kN,"create");var Zt={};x(Zt,{logRequest:()=>BN,logResponse:()=>GN});var at=require("@budibase/backend-core"),VA=F(KA());var{DocWritethrough:MN}=at.cache.docWritethrough;function NN(){return`${at.db.DocumentType.SCIM_LOG}${at.db.SEPARATOR}${(0,VA.default)().format("YYYYMMDD")}`}a(NN,"getLogDocId");var HA=a(()=>{let e=at.context.getScimDBName();return new MN(at.db.getDB(e),NN())},"getDB");async function BN(e){at.logging.logWarn("SCIM request log",e);let t=Date.now().toString();return await HA().patch({[`${t}_request`]:{ts:new Date().toISOString(),...e}}),t}a(BN,"logRequest");async function GN(e,t){at.logging.logWarn("SCIM response",t),await HA().patch({[`${e}_response`]:{ts:new Date().toISOString(),...t}})}a(GN,"logResponse");var hu={};x(hu,{doInScimContext:()=>lu,feature:()=>we,internalGroupOnly:()=>Ba,licenseAuth:()=>gu,licensing:()=>YA,requireSCIM:()=>du,scimGroupOnly:()=>Na,scimUserOnly:()=>Ma});var Mt=require("@budibase/backend-core");var co=require("@budibase/types");var FN=a((e={checkUsersLimit:!0})=>async(t,r)=>{if((e.licensingCheck?e.licensingCheck:()=>!!t.user)(t)){if(Mt.env.SELF_HOSTED&&Mt.env.DEFAULT_LICENSE)return t.user.license=Mo,r();t.user.license=await ct.cache.getCachedLicense(t,{populateLicense:e.populateLicense,populateFreeLicense:e.populateFreeLicense}),e.checkUsersLimit&&(Mt.utils.isServingApp(t)||Mt.utils.isServingBuilder(t)||Mt.utils.isServingBuilderPreview(t)||Mt.utils.isPublicApiRequest(t))&&await ft.usageLimitIsExceeded({name:co.StaticQuotaName.USERS,type:co.QuotaUsageType.STATIC,usageChange:0})}return r()},"licensing"),YA=FN;var we={};x(we,{requireFeature:()=>WN,requireFeatures:()=>$N});var WN=a(e=>async(t,r)=>{await Ln(e),await r()},"requireFeature"),$N=a((...e)=>async(t,r)=>{await Os(e),await r()},"requireFeatures");var po=require("@budibase/backend-core");var lu=a(async(e,t)=>{let r;return po.env.ENABLE_SCIM_LOGGER&&(r=await Zt.logRequest({...e.request.toJSON(),body:e.request.body})),await po.context.doInScimContext(async()=>{let n=await t();return r&&await Zt.logResponse(r,{...e.response.toJSON(),body:e.response.body}),n})},"doInScimContext");var du=a(async(e,t)=>{await Ds(),await t()},"requireSCIM");var zA=require("@budibase/backend-core");var Ma=a(e=>fu(zA.users.getById,e,!0),"scimUserOnly"),Na=a(e=>fu(z.get,e,!0),"scimGroupOnly"),Ba=a(e=>fu(z.get,e,!1),"internalGroupOnly");function fu(e,t,r){return async(n,o)=>{let s=n.params[t];return typeof s!="string"&&n.throw(404),!!(await e(s)).scimInfo?.isSync!==r&&n.throw(404),o()}}a(fu,"scimSyncChecks");var Ga=require("@budibase/backend-core");var mu=require("dd-trace");async function gu(e,t){await mu.tracer.trace("licenseAuth",async r=>{let n=e.request.headers[Ga.constants.Header.LICENSE_KEY];Array.isArray(n)&&(n=n[0]),r.addTags({licenseKey:n}),n||e.throw(403,"License key not provided");let o=await vs(n);o||(r.addTags({licenseFound:!1}),e.throw(403,"License not found or invalid")),o.tenantId||e.throw(403,"License does not have a tenant ID"),mu.tracer.setUser({id:"anonymous",tenantId:o.tenantId}),await Ga.context.doInSelfHostTenantUsingCloud(o.tenantId,async()=>{await Ga.context.doInLicenseContext(o,async()=>{await t()})})})}a(gu,"default");var wu={};x(wu,{appBackups:()=>sb,auditLogs:()=>gb,environmentVariables:()=>Eb,groups:()=>kb,scim:()=>dI});var Et=require("@budibase/backend-core"),fo=require("@budibase/types"),nb=F(require("@koa/router")),tr=F(require("joi"));var lo=require("@budibase/backend-core"),yu=require("@budibase/types");async function er(e,t){t||e.throw(400,"App ID missing"),await cr.workspaceExists(t)||e.throw(400,`Provided app ID: ${t} - is invalid.`)}a(er,"checkAppID");async function JA(e){let t=e.params.appId;await er(e,t);let{body:r}=e.request,n=e.user?._id,o=await Ne.triggerAppBackup(t,yu.BackupTrigger.MANUAL,{name:r.name,createdBy:n});o||e.throw(500,"Unable to start backup."),e.body={backupId:o,message:"Backup triggered - process starting."}}a(JA,"manualBackup");async function XA(e){let t=e.params.appId;await er(e,t);let r=e.params.backupId,n=e.request.body.name,o=await Ne.triggerAppRestore(t,r,n,e.user?._id);o||e.throw(500,"Unable to start restore."),await lo.events.backup.appBackupRestored(o.metadata),e.body={restoreId:o?.restoreId,message:"Restore triggered - process starting."}}a(XA,"importBackup");async function ZA(e){let t=e.params.appId;await er(e,t);let r=e.params.backupId;await Ne.deleteAppBackup(r),e.body={message:"Backup deleted successfully."}}a(ZA,"deleteBackup");async function eb(e){let t=lo.context.getWorkspaceId();await er(e,t);let{backupIds:r}=e.request.body;(!Array.isArray(r)||r.length===0)&&e.throw(400,"backupIds must be a non-empty array");let n=await Ne.deleteAppBackups(r),o=n.filter(i=>i.success).length,s=n.length-o;e.body={message:`${o} backups deleted successfully${s>0?`, ${s} failed`:""}.`,results:n,successCount:o,failureCount:s}}a(eb,"deleteBackups");async function tb(e){let t=e.params.appId;await er(e,t);let r=e.request.body;r?.trigger&&(r.trigger=r.trigger.toLowerCase(),Object.values(yu.BackupTrigger).includes(r.trigger)||e.throw(400,"Provided trigger is not a valid option.")),e.body=await Ne.fetchAppBackups(t,{paginate:!0,...r})}a(tb,"fetchBackups");async function rb(e){let t=e.params.appId;await er(e,t);let r=e.params.backupId,n=e.request.body;e.body=await Ne.updateAppBackup(r,n.name)}a(rb,"updateBackup");async function ab(e){let t=e.params.appId;await er(e,t);let r=e.params.backupId,{metadata:n,stream:o}=await Ne.getBackupDownloadStream(r);e.attachment(`backup-${n.timestamp}.tar.gz`),e.body=o}a(ab,"downloadBackup");var ob=new nb.default;function QN(){return Et.auth.joiValidator.body(tr.default.object({trigger:tr.default.string().valid(...Object.values(fo.BackupTrigger)),type:tr.default.string().valid(...Object.values(fo.BackupType)),startDate:tr.default.date(),endDate:tr.default.date(),page:tr.default.string()}))}a(QN,"validateBackupSearch");ob.post("/api/apps/:appId/backups",Et.auth.builderOrAdmin,JA).post("/api/apps/:appId/backups/search",Et.auth.builderOrAdmin,QN(),tb).get("/api/apps/:appId/backups/:backupId/file",Et.auth.builderOrAdmin,ab).patch("/api/apps/:appId/backups/:backupId",Et.auth.builderOrAdmin,rb).delete("/api/apps/:appId/backups/:backupId",Et.auth.builderOrAdmin,ZA).delete("/api/apps/:appId/backups",Et.auth.builderOrAdmin,eb).post("/api/apps/:appId/backups/:backupId/import",Et.auth.builderOrAdmin,XA);var sb=ob;var Au=require("@budibase/backend-core");async function ib(e){let t=e.request.body,r=await kt.fetch(t);await Au.events.auditLog.filtered(t),e.body=r}a(ib,"search");async function ub(e){let t=e.request.body,{stream:r}=kt.download(t);await Au.events.auditLog.downloaded(t),e.attachment(`audit-logs-${Date.now()}.log`),e.body=r}a(ub,"download");async function cb(e){e.body={events:kt.definitions()}}a(cb,"definitions");var lb=require("@budibase/types"),rr=require("@budibase/backend-core"),fb=F(require("@koa/router")),Ve=F(require("joi"));function pb(){return rr.auth.joiValidator.body(Ve.default.object({userIds:Ve.default.array().items(Ve.default.string()).optional(),appIds:Ve.default.array().items(Ve.default.string()).optional(),events:Ve.default.array().items(Ve.default.string().valid(...Object.values(lb.Event))).optional(),startDate:Ve.default.string().optional().allow(""),endDate:Ve.default.string().optional().allow(""),fullSearch:Ve.default.string().optional().allow(""),bookmark:Ve.default.number()}))}a(pb,"buildAuditLogSearchValidator");var mb=new fb.default;mb.post("/api/global/auditlogs/search",rr.auth.adminOnly,pb(),ib).get("/api/global/auditlogs/download",rr.auth.adminOnly,rr.middleware.querystringToBody,pb(),ub).get("/api/global/auditlogs/definitions",rr.auth.adminOnly,cb);var gb=mb;var Iu=require("@budibase/backend-core"),bu=require("@budibase/types");async function hb(e){e.body={encryptionKeyAvailable:mt.isEncryptionKeyAvailable()}}a(hb,"status");async function yb(e){e.body={variables:await mt.fetch()}}a(yb,"fetch");async function Ab(e){let{name:t,production:r,development:n}=e.request.body;await mt.update(t,{production:r,development:n});let o=[bu.Environment.PRODUCTION];r!==n&&o.push(bu.Environment.DEVELOPMENT),await Iu.events.environmentVariable.created(t,o),e.body={message:`Environment variable "${t}" created.`}}a(Ab,"create");async function bb(e){let{production:t,development:r}=e.request.body,n=e.params.varName;await mt.update(n,{production:t,development:r}),e.body={message:`Environment variable "${n}" updated.`}}a(bb,"update");async function Ib(e){let t=e.params.varName;await mt.remove(t),await Iu.events.environmentVariable.deleted(t),e.body={message:`Environment variable "${t}" deleted.`}}a(Ib,"destroy");var ar=require("@budibase/backend-core"),wb=F(require("@koa/router")),Fa=F(require("joi"));var Tb=new wb.default;function Sb(){return ar.auth.joiValidator.body(Fa.default.object({name:Fa.default.string().optional(),production:Fa.default.string().required(),development:Fa.default.string().required()}))}a(Sb,"buildEnvVarUpdateValidator");Tb.get("/api/env/variables/status",ar.auth.builderOrAdmin,hb).get("/api/env/variables",ar.auth.builderOrAdmin,yb).post("/api/env/variables",ar.auth.builderOrAdmin,Sb(),Ab).patch("/api/env/variables/:varName",ar.auth.builderOrAdmin,Sb(),bb).delete("/api/env/variables/:varName",ar.auth.builderOrAdmin,Ib);var Eb=Tb;var gt=require("@budibase/backend-core"),Rt=require("@budibase/types"),qb=F(require("@koa/router")),Ce=F(require("joi"));var Rb=require("@budibase/backend-core");async function vb(e){let t=e.request.body;if(t.name=t.name.trim(),delete t.roles,t._id){let n=await _r(t._id);t.roles=n.roles,t.scimInfo=n.scimInfo}let r=await Gn(t);e.body={_id:r.id,_rev:r.rev}}a(vb,"save");async function _b(e){let t=e.params.groupId,r=e.request.body.add,n=e.request.body.remove;(r&&!Array.isArray(r)||n&&!Array.isArray(n))&&e.throw(400,"Must supply a list of users to add or to remove");let o,s;r&&(o=await Fn(t,r)),n&&(s=await Ks(t,n)),e.body={added:o,removed:s}}a(_b,"updateGroupUsers");async function xb(e){let t=e.params.groupId,r=e.request.body.add,n=e.request.body.remove;(r&&!Array.isArray(r)||n&&!Array.isArray(n))&&e.throw(400,"Must supply a list of objects, with appId and roleId to add or remove"),e.body=await Vs(t,{appsToAdd:r,appsToRemove:n})}a(xb,"updateGroupApps");async function Cb(e){e.body={data:await Oa()}}a(Cb,"fetch");async function Ob(e){let{groupId:t,rev:r}=e.params;try{await Qs(t,r),e.body={message:"Group deleted successfully"}}catch(n){e.throw(n.status,n)}}a(Ob,"destroy");async function Lb(e){try{e.body=await _r(e.params.groupId)}catch(t){e.throw(t.status,t)}}a(Lb,"find");async function Pb(e){let{pageSize:t=10,bookmark:r,emailSearch:n}=e.request.query,o=e.params.groupId,s={limit:t+1},i=await nn(o,{...s,emailSearch:n,bookmark:r}),u=n?i[t]?.email:i[t]?._id,c=!!u;e.body={users:i.slice(0,t),bookmark:u,hasNextPage:c}}a(Pb,"searchUsers");async function Ub(e){let{groupId:t}=e.params,{csvContent:r}=e.request.body;(r===void 0||r.trim().length===0)&&e.throw(400,"CSV is empty");let n=await Rb.csv.jsonFromCsvString(r,{allowSingleColumn:!0});(!n||n.length===0)&&e.throw(400,"CSV file is invalid");let s=Object.keys(n[0]).find(h=>/^(email|e-mail|email address|mail|e_mail)$/i.test(h.trim()));s||e.throw(400,"CSV file must contain an email column");let i=Array.from(new Set(n.map(h=>h[s]).filter(h=>h&&typeof h=="string"&&h.trim().length>0).map(h=>h.trim())));i.length===0&&e.throw(400,"No valid email addresses found in CSV");try{await _r(t)}catch(h){if(h.status===404)e.throw(404,"Group not found");else throw h}let u=[],c=[],f=[],g=await Promise.all(i.map(h=>Qe.getUserByEmail(h)));for(let h of i){let y=g.find(E=>E?.email===h);y?(u.push({_id:y._id,email:y.email}),f.push(y._id)):c.push({email:h,reason:"User not found"})}f.length>0&&await Fn(t,f),e.body={added:u,skipped:c}}a(Ub,"bulkAddUsersFromCsv");var Db=new qb.default;function YN(){return gt.auth.joiValidator.body(Ce.default.object({_id:Ce.default.string().optional(),_rev:Ce.default.string().optional(),color:Ce.default.string().required(),icon:Ce.default.string().required(),name:Ce.default.string().trim().required().max(50),role:Ce.default.string().optional(),users:Ce.default.array().optional(),apps:Ce.default.array().optional(),roles:Ce.default.object().optional(),createdAt:Ce.default.string().optional(),updatedAt:Ce.default.string().optional()}).required())}a(YN,"buildGroupSaveValidation");Db.post("/api/global/groups",gt.auth.adminOnly,we.requireFeature(Rt.Feature.USER_GROUPS),YN(),vb).get("/api/global/groups",we.requireFeature(Rt.Feature.USER_GROUPS),Cb).delete("/api/global/groups/:groupId/:rev",we.requireFeature(Rt.Feature.USER_GROUPS),gt.auth.adminOnly,Ba("groupId"),Ob).get("/api/global/groups/:groupId",we.requireFeature(Rt.Feature.USER_GROUPS),gt.auth.builderOrAdmin,Lb).get("/api/global/groups/:groupId/users",we.requireFeature(Rt.Feature.USER_GROUPS),gt.auth.builderOrAdmin,Pb).post("/api/global/groups/:groupId/users",gt.auth.adminOnly,we.requireFeature(Rt.Feature.USER_GROUPS),Ba("groupId"),_b).post("/api/global/groups/:groupId/users/bulk",gt.auth.adminOnly,we.requireFeature(Rt.Feature.USER_GROUPS),Ba("groupId"),gt.auth.joiValidator.body(Ce.default.object({csvContent:Ce.default.string().required()}).required()),Ub).post("/api/global/groups/:groupId/apps",gt.auth.builderOrAdmin,we.requireFeature(Rt.Feature.USER_GROUPS),xb);var kb=Db;var lI=F(require("@koa/router"));var mo=require("scim-patch");var Nb=require("@budibase/backend-core");function Mb(e,t){let r=e.request.query[t];if(r!==void 0)return+r}a(Mb,"tryGetQueryAsNumber");var Bb=a(async e=>{let t=Mb(e,"pageSize")??20,r=Mb(e,"startIndex"),n;e.request.query.filter&&(n=ce.user.userFilters(e.request.query.filter));let o=await qe.get({pageSize:t,skip:r,filters:n});e.body={schemas:["urn:ietf:params:scim:api:messages:2.0:ListResponse"],totalResults:o.total,Resources:o.users.map(ce.user.toScimUserResponse),startIndex:(r||0)+1,itemsPerPage:t}},"get"),Gb=a(async e=>{let{id:t}=e.params;typeof t!="string"&&e.throw(404);let r=await qe.find(t);e.body=ce.user.toScimUserResponse(r)},"find"),Fb=a(async e=>{let t=ce.user.fromScimUser(e.request.body);try{let r=await qe.create(t);e.body=ce.user.toScimUserResponse(r)}catch(r){throw r instanceof Nb.EmailUnavailableError&&e.throw(409,"Email already in use"),r}},"create");function zN(e){let t=e.Operations.find(r=>(r.op==="Replace"||r.op==="replace")&&r.path==="active");return t?t.value===!1||t.value?.toLowerCase?.()==="false":!1}a(zN,"isDeactivation");var Wb=a(async e=>{let t=await qe.find(e.params.id);t||e.throw(404);let r=ce.user.toScimUserResponse(t),n=e.request.body;try{(0,mo.patchBodyValidation)(n)}catch{}if(zN(n))return Su(e);let o;try{o=(0,mo.scimPatch)(r,n.Operations)}catch{}o||e.throw(500);let s=ce.user.fromScimUser(o);await qe.update(s,{allowChangingEmail:!0}),e.body=ce.user.toScimUserResponse(s)},"update"),Su=a(async e=>{let{id:t}=e.params;typeof t!="string"&&e.throw(404),await qe.remove(t),e.status=204},"remove");var aI=F(rI()),nI=require("@budibase/shared-core"),go=require("scim-patch");var ho=require("scim2-parse-filter");function oI(e,t){for(let r of t.split(","))delete e[r]}a(oI,"cleanResponse");var sI=a(async e=>{let r=(await re.fetch()).filter(s=>s.scimInfo?.isSync).map(ce.group.toScimGroupResponse),{filter:n,excludedAttributes:o}=e.request.query;if(n){let s=(0,ho.filter)((0,ho.parse)(n));r=r.filter(s)}o&&r.forEach(s=>{oI(s,o)}),e.body={schemas:["urn:ietf:params:scim:api:messages:2.0:ListResponse"],totalResults:r.length,Resources:r,startIndex:1,itemsPerPage:r.length}},"get"),iI=a(async e=>{let t=ce.group.fromScimGroup(e.request.body),r=await qr.create(t);e.body=ce.group.toScimGroupResponse(r)},"create"),uI=a(async e=>{let{id:t}=e.params,r=await re.get(t),n=ce.group.toScimGroupResponse(r),{excludedAttributes:o}=e.request.query;o&&oI(n,o),e.body=n},"find"),cI=a(async e=>{let{id:t}=e.params,r=await re.get(t);await re.remove(t,r._rev),e.status=204},"remove"),pI=a(async e=>{let{id:t}=e.params,r=await re.get(t),n=ce.group.toScimGroupResponse(r),o=e.request.body;try{(0,go.patchBodyValidation)(o)}catch{e.throw(400)}let{true:s,false:i}=(0,aI.default)(o.Operations,u=>u.path==="members");if(i?.length){let u=(0,go.scimPatch)(n,i);u||e.throw(500);let c={...ce.group.fromScimGroup(u),_rev:r._rev};await re.save(c)}if(s?.length){let u=[],c=[];for(let{op:f,value:g}of s)switch(f){case"add":case"Add":for(let h of g)u.push(await qe.find(h.value));break;case"remove":case"Remove":for(let h of g)try{c.push(await qe.find(h.value))}catch(y){if(y.status!==404)throw y}break;case"replace":case"Replace":throw new Error("Replacing members is not allowed");default:nI.utils.unreachable(f)}u.length&&await re.addUsers(t,u.map(f=>f._id)),c.length&&await re.removeUsers(t,c.map(f=>f._id))}e.body=ce.group.toScimGroupResponse(await re.get(t))},"update");var Wa=require("@budibase/types"),Be=new lI.default({prefix:"/api/global/scim/v2"});Be.use(du);Be.use(lu);Be.get("/users",Bb);Be.get("/users/:id",Ma("id"),Gb);Be.post("/users",Fb);Be.patch("/users/:id",Ma("id"),Wb);Be.delete("/users/:id",Ma("id"),Su);Be.get("/groups",sI);Be.post("/groups",we.requireFeature(Wa.Feature.USER_GROUPS),iI);Be.get("/groups/:id",we.requireFeature(Wa.Feature.USER_GROUPS),Na("id"),uI);Be.delete("/groups/:id",we.requireFeature(Wa.Feature.USER_GROUPS),Na("id"),cI);Be.patch("/groups/:id",we.requireFeature(Wa.Feature.USER_GROUPS),Na("id"),pI);var dI=Be;var ce={};x(ce,{group:()=>Eu,user:()=>Tu});var Tu={};x(Tu,{fromScimUser:()=>EB,toScimUserResponse:()=>SB,userFilters:()=>RB});var fI=require("@budibase/backend-core"),mI=require("@budibase/shared-core"),yo=require("@budibase/types"),gI=require("scim2-parse-filter");var{unreachable:IB}=mI.utils,SB=a(e=>{let{isSync:t,roles:r,...n}=e.scimInfo||{},o={...n,schemas:["urn:ietf:params:scim:schemas:core:2.0:User"],id:e._id,meta:{resourceType:"User",created:new Date(e.createdAt),lastModified:new Date(e.updatedAt)},active:e.status===yo.UserStatus.ACTIVE};(e.firstName||e.lastName)&&(o.name={formatted:[e.firstName,e.lastName].filter(i=>i).join(" "),familyName:e.lastName,givenName:e.firstName});let s="urn:ietf:params:scim:schemas:extension:enterprise:2.0:User";if(o[s]?.manager){let i=o[s].manager;typeof i=="string"&&(o[s].manager={value:i})}return o},"toScimUserResponse"),wB=a(e=>!!e?.id,"isScimUserResponse");function TB(e){if(fI.utils.validEmail(e.userName))return e.userName;if(e.emails)return e.emails.find(t=>t.primary)?.value||e.emails[0]?.value}a(TB,"tryGetEmail");var EB=a(e=>{let t=wB(e)?e:void 0,r=TB(e);if(!r)throw new Error("Email is required");let n;switch(e.active){case"True":case"true":case!0:n=!0;break;case"False":case"false":case!1:n=!1;break;default:IB(e.active)}let o,s;return e.name?.givenName?(o=e.name?.givenName,s=e.name?.familyName):o=e.displayName,{tenantId:"",_id:t?.id,userId:t?.id,email:r,firstName:o,lastName:s,scimInfo:{...e,isSync:!0},roles:{},status:n?yo.UserStatus.ACTIVE:yo.UserStatus.INACTIVE,createdAt:t?.meta.created.getTime(),updatedAt:t?.meta.lastModified.toISOString()}},"fromScimUser"),RB=a(e=>{let t={equal:{}},r=(0,gI.parse)(e);function n(o){switch(o.op){case"eq":{let s=o.attrPath,i;switch(s){case"emails.value":i="email";break;default:i=`scimInfo.${s}`}t.equal[i]=o.compValue;break}case"and":for(let s of o.filters)n(s);break;default:console.warn("Filter not handled",{filter:o})}}return a(n,"parseFilters"),n(r),t},"userFilters");var Eu={};x(Eu,{fromScimGroup:()=>xB,toScimGroupResponse:()=>vB});var vB=a(e=>({schemas:["urn:ietf:params:scim:schemas:core:2.0:Group"],id:e._id,externalId:e.scimInfo.externalId,meta:{resourceType:"Group",created:new Date(e.createdAt),lastModified:new Date(e.updatedAt)},displayName:e.name,members:e.users?.map(t=>({value:t._id}))}),"toScimGroupResponse"),_B=a(e=>!!e?.id,"isScimGroup"),xB=a(e=>{let t=_B(e)?e:void 0;return{_id:t?.id,name:e.displayName,scimInfo:{externalId:e.externalId,isSync:!0},icon:"UserGroup",color:"var(--spectrum-global-color-blue-600)",createdAt:t?.meta.created.getTime(),updatedAt:t?.meta.lastModified.toISOString()}},"fromScimGroup");var Hu={};x(Hu,{LLM:()=>ht,LLMRequest:()=>se,TableGeneration:()=>Vu,agentHistoryTitleSystemPrompt:()=>BB,agentSystemPrompt:()=>NB,aiColumnSchemas:()=>Qu,aiTableResponseToTableSchema:()=>Fu,appendAIColumns:()=>Wu,classifyText:()=>_u,cleanData:()=>xu,extractFileData:()=>qB,generateAIColumns:()=>Bu,generateCode:()=>MB,generateCronExpression:()=>Cu,generateData:()=>Gu,generateJs:()=>Uu,generateSQL:()=>kB,generateTables:()=>Nu,generationStructure:()=>ju,getLLM:()=>Ka,getLLMConfig:()=>Mu,getLLMOrThrow:()=>RI,normalizeContentType:()=>Ru,parseResponseFormat:()=>bo,sanitiseToolName:()=>CB,searchWeb:()=>Pu,sentimentAnalysis:()=>Lu,summarizeText:()=>Ao,tableDataStructuredOutput:()=>Ku,translate:()=>Ou});var $a=require("@budibase/types");function CB(e){if(e.length>64)throw new Error("Tool name must be under 64 characters long");return e.replace(/[^a-zA-Z0-9_-]/g,"_")}a(CB,"sanitiseToolName");function Ru(e){return e?e.includes("/")?e:{[$a.SupportedFileType.PDF]:"application/pdf",[$a.SupportedFileType.JPG]:"image/jpeg",[$a.SupportedFileType.JPEG]:"image/jpeg",[$a.SupportedFileType.PNG]:"image/png"}[e.toLowerCase()]||"application/octet-stream":"application/octet-stream"}a(Ru,"normalizeContentType");var Eo=require("@budibase/types");var yt=require("@budibase/backend-core"),SI=require("@budibase/types");var Io=F(require("openai"));var Nt=require("@budibase/types");var hI=require("@budibase/shared-core");var Bt=F(require("dd-trace"));function vu(e,t){return t.map(r=>e[r]).join(" ")}a(vu,"extractTextFromColumns");var ht=class{static{a(this,"LLM")}constructor({model:t,apiKey:r,maxTokens:n}){this._model=t,this._apiKey=r,this._maxTokens=n??parseInt(process.env.BUDIBASE_AI_MAX_PROMPT_TOKENS||"1000")}get model(){return this._model}get apiKey(){return this._apiKey}get maxTokens(){return this._maxTokens}async prompt(t){return await Bt.default.trace("prompt",async()=>{let r=typeof t=="string"?new se().addUserMessage(t):t,{messages:n,tokensUsed:o}=await Bt.default.trace("chatCompletion",()=>this.chatCompletion(r));return!n||n.length===0?{message:"",tokensUsed:o}:{message:n[n.length-1].content||"",tokensUsed:o}})}async chat(t){return await Bt.default.trace("chat",async()=>await this.chatCompletion(t))}async*chatStream(t){yield*this.chatCompletionStream(t)}async summarizeText(t){return Bt.default.trace("summarizeText",()=>this.prompt(Ao(t)))}async generateCronExpression(t){return Bt.default.trace("generateCronExpression",()=>this.prompt(Cu(t)))}async operation(t,r){return Bt.default.trace("operation",n=>{n.addTags({operation:t.operation,rowId:r.id});let o=this.promptForOperation(t,r);return this.prompt(o)})}promptForOperation(t,r){let{operation:n,column:o,columns:s,language:i,categories:u,prompt:c}=t;switch(n){case Nt.AIOperationEnum.SUMMARISE_TEXT:return Ao(vu(r,s));case Nt.AIOperationEnum.CLEAN_DATA:return xu(r[o]);case Nt.AIOperationEnum.TRANSLATE:return Ou(r[o],i);case Nt.AIOperationEnum.CATEGORISE_TEXT:if(!u)throw Error("No categories provided for categorise text operation. Please provide categories.");return _u(vu(r,s),u.split(","));case Nt.AIOperationEnum.SENTIMENT_ANALYSIS:return Lu(r[o]);case Nt.AIOperationEnum.PROMPT:return c;case Nt.AIOperationEnum.SEARCH_WEB:return Pu(vu(r,s));default:throw hI.utils.unreachable(n)}}async generateJs(t,r){return await Bt.default.trace("generateJs",async()=>{let{bindings:n=[],snippets:o=[]}=r||{};return await this.prompt(Uu(n,o).addUserMessage(t))})}};var AI=require("@budibase/types"),qu=require("openai/helpers/zod");var ja=(n=>(n.GPT_5_MINI="gpt-5-mini",n.GPT_5="gpt-5",n.GPT_5_NANO="gpt-5-nano",n))(ja||{});function bo(e){if(e)return e==="text"?{type:"text"}:e==="json"?{type:"json_object"}:e}a(bo,"parseResponseFormat");function yI(e){if(!e)return 0;let t=e.prompt_tokens;return e.completion_tokens*3+t}a(yI,"calculateBudibaseAICredits");var He=class extends ht{constructor(r){super(r);this.client=this.getClient(r)}static{a(this,"OpenAI")}getVerbosityForModel(){if(Object.values(ja).includes(this.model))return"low"}getClient(r){if(!r.apiKey)throw new Error("No OpenAI API key found");return new Io.default({apiKey:r.apiKey})}async uploadFile(r,n,o){let s=Ru(o);if(AI.ImageContentTypes.includes(s.toLowerCase())){let c;if(Buffer.isBuffer(r))c=r;else{let g=[];for await(let h of r)g.push(new Uint8Array(h));c=Buffer.concat(g)}let f=c.toString("base64");return`data:${s};base64,${f}`}let i=await(0,Io.toFile)(r,n);return(await this.client.files.create({file:i,purpose:"assistants"})).id}async chatCompletion(r){let n={model:this.model,messages:r.messages,max_completion_tokens:this._maxTokens,response_format:bo(r.format)};if(Object.values(ja).includes(this.model)){let i=this.getVerbosityForModel();i&&(n.verbosity=i),n.reasoning_effort="minimal"}r.tools&&r.tools.length>0&&(n.tool_choice="auto",n.tools=r.tools.map(qu.zodFunction));let o=await this.client.chat.completions.create(n),s=o?.choices?.[0]?.message;if(s?.tool_calls){r.addMessage(s);let i=[];for(let u of s.tool_calls){if(u.type!=="function"||!u.function){console.warn(`[OPENAI TOOL WARN] Unsupported tool call type: ${u.type}`);continue}let c=u.function.name,f=r.findTool(c);if(!f)throw new Error(`Tool ${c} not found in prompt tools`);let g=JSON.parse(u.function.arguments);i.push(f.handler(g).then(h=>({role:"tool",tool_call_id:u.id,content:h})).catch(h=>(console.error(`[OPENAI TOOL ERROR] Tool ${c} failed in OpenAI handler:`,h),{role:"tool",tool_call_id:u.id,content:`Error: ${h.message}`})))}return r.addMessages(await Promise.all(i)),this.chatCompletion(r)}else{if(s?.content)return{messages:[...r.messages,{role:s.role,content:s.content}],tokensUsed:yI(o.usage)};throw new Error("No response found")}}async*chatCompletionStream(r){let n={model:this.model,messages:r.messages,max_tokens:this.maxTokens,response_format:bo(r.format),stream:!0};r.tools&&r.tools.length>0&&(n.tool_choice="auto",n.tools=r.tools.map(qu.zodFunction));try{let o=await this.client.chat.completions.create(n),s=null,i="",u=null;for await(let f of o){let g=f?.choices?.[0]?.delta;if(g){if(g.content&&(i+=g.content,yield{type:"content",content:g.content}),g.tool_calls&&g.tool_calls.length>0){let h=g.tool_calls[0];h.id?(s={id:h.id,name:h.function?.name||"",arguments:h.function?.arguments||""},yield{type:"tool_call_start",toolCall:{id:s.id,name:s.name,arguments:s.arguments}}):s&&h.function?.arguments&&(s.arguments+=h.function.arguments,yield{type:"tool_call_start",toolCall:{id:s.id,name:s.name,arguments:s.arguments}})}f.usage&&(u=f.usage)}}let c=u?yI(u):0;if(s){r.addMessage({role:"assistant",content:"",tool_calls:[{id:s.id,type:"function",function:{name:s.name,arguments:s.arguments}}]});let f=r.findTool(s.name);if(f)try{let g=JSON.parse(s.arguments),h=await f.handler(g);yield{type:"tool_call_result",toolResult:{id:s.id,result:h}},r.addMessage({role:"tool",tool_call_id:s.id,content:h}),yield*this.chatCompletionStream(r);return}catch(g){yield{type:"tool_call_result",toolResult:{id:s.id,result:`Error: ${g.message}`,error:g.message}},r.addMessage({role:"tool",tool_call_id:s.id,content:`Error: ${g.message}`}),yield*this.chatCompletionStream(r);return}else{let g=`Tool '${s.name}' not found`;yield{type:"tool_call_result",toolResult:{id:s.id,result:g,error:g}},r.addMessage({role:"tool",tool_call_id:s.id,content:g}),yield*this.chatCompletionStream(r);return}}i&&r.addMessage({role:"assistant",content:i}),yield{type:"done",messages:r.messages,tokensUsed:c}}catch(o){yield{type:"error",content:o.message}}}};var he=require("@budibase/backend-core"),bI=require("@budibase/types");var Du=require("dd-trace");var So=class extends ht{static{a(this,"BudibaseAI")}async prompt(t){let r=await super.prompt(t);return r.tokensUsed&&await Nn(r.tokensUsed),r}async chat(t){let r=await super.chat(t);return r.tokensUsed&&await Nn(r.tokensUsed),r}async uploadFile(t,r,n){return he.env.SELF_HOSTED?this.uploadFileSelfHost(t,r,n):this.uploadFileCloud(t,r,n)}async uploadFileCloud(t,r,n){return new He({apiKey:he.env.OPENAI_API_KEY,model:this.model,max_completion_tokens:this.maxTokens}).uploadFile(t,r,n)}async uploadFileSelfHost(t,r,n){let o;if(Buffer.isBuffer(t))o=t;else{let g=[];for await(let h of t)g.push(new Uint8Array(h));o=Buffer.concat(g)}let s=o.toString("base64");if(n&&bI.ImageContentTypes.includes(n.toLowerCase()))return`data:image/jpeg;base64,${s}`;if(!he.env.BUDICLOUD_URL)throw new Error("No Budibase URL found");if(!this._apiKey){let g=await Cn();if(!g)throw new Error("No license key found");this._apiKey=g}let i=`${he.env.BUDICLOUD_URL}/api/ai/upload-file`,u={method:"POST",headers:{"Content-Type":"application/json",[he.constants.Header.LICENSE_KEY]:this._apiKey},body:JSON.stringify({data:s,filename:r,contentType:n})};console.debug("[BudibaseAI] uploadFileSelfHost - Making network call",{url:i,method:u.method,headers:u.headers,bodyKeys:["data","filename","contentType"],filename:r,contentType:n});let c=await Ja(i,u);if(console.debug("[BudibaseAI] uploadFileSelfHost - Network response",{url:i,status:c.status,statusText:c.statusText,ok:c.ok}),!c.ok)throw await he.HTTPError.fromResponse(c);return(await c.json()).fileId}async chatCompletion(t){return he.env.SELF_HOSTED?this.chatCompletionSelfHost(t):this.chatCompletionCloud(t)}async chatCompletionCloud(t){return await Du.tracer.trace("chatCompletionCloud",async()=>await new He({apiKey:he.env.OPENAI_API_KEY,model:this.model,max_completion_tokens:this.maxTokens}).chatCompletion(t))}async chatCompletionSelfHost(t){return await Du.tracer.trace("chatCompletionSelfHost",async r=>{if(!he.env.BUDICLOUD_URL)throw new Error("No Budibase URL found");if(r.addTags({budicloudUrl:he.env.BUDICLOUD_URL}),!this._apiKey){let c=await Cn();if(!c)throw new Error("No license key found");this._apiKey=c,r.addTags({licenseKey:this._apiKey})}let n={messages:t.messages,format:t.format,useTools:t.tools.length>0},o=`${he.env.BUDICLOUD_URL}/api/ai/chat`,s={method:"POST",headers:{"Content-Type":"application/json",[he.constants.Header.LICENSE_KEY]:this._apiKey},body:JSON.stringify(n)};console.debug("[BudibaseAI] chatCompletionSelfHost - Making network call",{url:o,method:s.method,headers:s.headers,bodyKeys:Object.keys(n),messagesCount:t.messages.length,useTools:n.useTools,format:n.format});let i=await Ja(o,s);if(console.debug("[BudibaseAI] chatCompletionSelfHost - Network response",{url:o,status:i.status,statusText:i.statusText,ok:i.ok}),!i.ok)throw await he.HTTPError.fromResponse(i);let u=await i.json();return console.debug("[BudibaseAI] chatCompletionSelfHost - Response data",{url:o,tokensUsed:u.tokensUsed,messagesCount:u.messages?.length}),u})}async*chatCompletionStream(t){he.env.SELF_HOSTED?yield*this.chatCompletionStreamSelfHost(t):yield*this.chatCompletionStreamCloud(t)}async*chatCompletionStreamCloud(t){yield*new He({apiKey:he.env.OPENAI_API_KEY,model:this.model,max_completion_tokens:this.maxTokens}).chatCompletionStream(t)}async*chatCompletionStreamSelfHost(t){console.debug("[BudibaseAI] chatCompletionStreamSelfHost - Starting streaming (fallback to non-streaming)",{messagesCount:t.messages.length,toolsCount:t.tools.length});try{let r=await this.chatCompletionSelfHost(t);if(console.debug("[BudibaseAI] chatCompletionStreamSelfHost - Yielding response chunks",{responseMessagesCount:r.messages.length,tokensUsed:r.tokensUsed}),r.messages.length>0){let n=r.messages[r.messages.length-1];n.content&&(yield{type:"content",content:n.content})}yield{type:"done",messages:r.messages,tokensUsed:r.tokensUsed}}catch(r){console.debug("[BudibaseAI] chatCompletionStreamSelfHost - Error occurred",{error:r.message}),yield{type:"error",content:r.message}}}};var Qa=require("dd-trace");var ku=F(require("@anthropic-ai/sdk"));function OB(e){if(!e)return 0;let t=e.input_tokens;return e.output_tokens*3+t}a(OB,"calculateBudibaseAICredits");var wo=class extends ht{constructor(r){super(r);this.client=new ku.default({apiKey:r.apiKey})}static{a(this,"Anthropic")}firstTextBlock(r){for(let n of r.content)if(n.type==="text")return n.text}async uploadFile(r,n,o){throw new Error("File upload not supported for this LLM provider")}async chatCompletion(r){try{let n=await this.client.messages.create({model:this.model,messages:r.messages.map(({content:s})=>{if(s==null)return{role:"user",content:""};if(typeof s=="string")return{role:"user",content:s};let i="";for(let u of s)u.type==="text"?i+=u.text:["image_url","input_audio","file"].includes(u.type);return{role:"user",content:i}}),max_tokens:this.maxTokens}),o=this.firstTextBlock(n)||"";return{messages:[...r.messages,{role:"assistant",content:o}],tokensUsed:OB(n.usage)}}catch(n){throw n instanceof ku.default.APIError&&console.error(`Anthropic Prompt failed with error ${n.name} and status: ${n.status}`),n}}async*chatCompletionStream(r){try{let n=await this.chatCompletion(r);if(n.messages.length>0){let o=n.messages[n.messages.length-1];o.content&&(yield{type:"content",content:o.content})}yield{type:"done",messages:n.messages,tokensUsed:n.tokensUsed}}catch(n){yield{type:"error",content:n.message}}}};var wI=require("zod"),TI=require("openai/helpers/zod");var II=require("openai");var To=class extends He{static{a(this,"AzureOpenAI")}getClient(t){if(!t.apiKey)throw new Error("No Azure OpenAI API key found");if(!t.model)throw new Error("No Azure OpenAI model specified");return new II.AzureOpenAI({apiKey:t.apiKey,apiVersion:"2024-10-01-preview",baseURL:t.baseUrl})}getVerbosityForModel(){return Object.values(ja).includes(this.model)?"medium":void 0}};var EI={OpenAI:"gpt-5-mini",TogetherAI:"gpt-5-mini",AzureOpenAI:"gpt-4.1",Custom:"gpt-5-mini",Anthropic:"claude-3-5-sonnet-20240620",BudibaseAI:"gpt-5-mini"},LB={OpenAI:He,TogetherAI:He,AzureOpenAI:To,Custom:He,Anthropic:wo,BudibaseAI:So};async function PB(){return await Qa.tracer.trace("getAIConfig",async e=>{let t={type:SI.ConfigType.AI,config:{}};if(!yt.context.isSelfHostUsingCloud()){let n=await yt.configs.getAIConfig();n&&(t=n)}await ks(t);let r=Object.values(t.config).find(n=>n.active&&n.isDefault);if(!r){e.addTags({enabled:!1,reason:"no provider found"});return}return e.addTags({enabled:!0}),{provider:r.provider,model:r.defaultModel||EI[r.provider],apiKey:r.apiKey,baseUrl:r.baseUrl}})}a(PB,"getAIConfig");async function UB(){return Qa.tracer.trace("getSelfHostOpenAIKeyConfig",e=>{if(!yt.env.SELF_HOSTED){e.addTags({enabled:!1,reason:"not self host"});return}if(!yt.env.OPENAI_API_KEY){e.addTags({enabled:!1,reason:"no OPENAI_API_KEY"});return}return e.addTags({enabled:!0}),{provider:"OpenAI",model:EI.OpenAI,apiKey:yt.env.OPENAI_API_KEY}})}a(UB,"getSelfHostOpenAIKeyConfig");async function Mu(){return Qa.tracer.trace("getLLMConfig",async()=>await PB()||await UB())}a(Mu,"getLLMConfig");async function Ka(e){return await Qa.tracer.trace("getLLM",async t=>{let{model:r,maxTokens:n}=e||{},o=await Mu();if(!o){t.addTags({enabled:!1,reason:"no config found"});return}r&&(o.model=r),n&&(o.maxTokens=n);let s=LB[o.provider];if(!s){t.addTags({enabled:!1,reason:"no provider found",provider:o.provider});return}return new s(o)})}a(Ka,"getLLM");async function RI(){let e=await Ka();if(!e)throw new yt.HTTPError("No available LLM configurations",500);return e}a(RI,"getLLMOrThrow");var se=class e{constructor(){this.messages=[];this.tools=[]}static{a(this,"LLMRequest")}addTool(t){return this.tools.push(t),this}addTools(t){return this.tools.push(...t),this}findTool(t){return this.tools.find(r=>r.name===t)}withFormat(t){return t instanceof wI.z.ZodType?this.format=(0,TI.zodResponseFormat)(t,"key"):this.format=t,this}addMessage(t){return this.messages.push(t),this}addMessages(t){return this.messages.push(...t),this}addUserMessage(t){return this.messages.push({role:"user",content:t}),this}addSystemMessage(t){return this.messages.push({role:"system",content:t}),this}static fromRequest(t){let r=new e;return t.messages&&r.addMessages(t.messages),t.format&&r.withFormat(t.format),r}};var vt=require("zod");function Ao(e,t){let r=`Summarize this text:
39
+ ${e}`,n="";if(t)switch(t){case Eo.SummariseLength.SHORT:n="In 1-2 concise sentences, ";break;case Eo.SummariseLength.MEDIUM:n="In 2-3 paragraphs, ";break;case Eo.SummariseLength.LONG:n="In multiple detailed paragraphs, ";break}return new se().addUserMessage(`${n}${r}.
40
+ Only return the summary.`)}a(Ao,"summarizeText");function qB(e,t){let r=["You are a data extraction assistant.","Extract data from the attached document/image that matches the provided schema.","The schema defines the structure where values like 'string', 'number', 'boolean' indicate the expected data types.","Extract all items that match the schema from the document.","Return the data in json format","If no matching data is found, return an empty data array."].join(`
41
41
 
42
42
  `),o=t.startsWith("data:")?[{type:"image_url",image_url:{url:t}},{type:"text",text:r}]:[{type:"text",text:`${r}
43
43
 
44
- File ID: ${t}`}],s=PB(e),i=Rt.z.object({data:Rt.z.array(s)});return new se().addMessages([{role:"user",content:o}]).withFormat(i)}a(LB,"extractFileData");function PB(e){let t={};for(let[r,n]of Object.entries(e))if(typeof n=="string")switch(n.toLowerCase()){case"string":t[r]=Rt.z.string();break;case"number":t[r]=Rt.z.number();break;case"boolean":t[r]=Rt.z.boolean();break;default:t[r]=Rt.z.string()}else t[r]=Rt.z.string();return Rt.z.object(t)}a(PB,"createZodSchemaFromRecord");function Ru(e,t){return new se().addUserMessage(`Return the category of this text: "${e}". Based on these categories: ${t.join(", ")}. Only return the category. Do not add any extra punctuation or fix spelling mistakes. It should exactly match one of the categories. `)}a(Ru,"classifyText");function _u(e){return new se().addUserMessage(`Clean the following string: "${e}". Remove any spelling mistakes or data issues. Only return the cleaned string itself and nothing else.`)}a(_u,"cleanData");function UB(e,t){return new se().addUserMessage(`Given the table schema:
44
+ File ID: ${t}`}],s=DB(e),i=vt.z.object({data:vt.z.array(s)});return new se().addMessages([{role:"user",content:o}]).withFormat(i)}a(qB,"extractFileData");function DB(e){let t={};for(let[r,n]of Object.entries(e))if(typeof n=="string")switch(n.toLowerCase()){case"string":t[r]=vt.z.string();break;case"number":t[r]=vt.z.number();break;case"boolean":t[r]=vt.z.boolean();break;default:t[r]=vt.z.string()}else t[r]=vt.z.string();return vt.z.object(t)}a(DB,"createZodSchemaFromRecord");function _u(e,t){return new se().addUserMessage(`Return the category of this text: "${e}". Based on these categories: ${t.join(", ")}. Only return the category. Do not add any extra punctuation or fix spelling mistakes. It should exactly match one of the categories. `)}a(_u,"classifyText");function xu(e){return new se().addUserMessage(`Clean the following string: "${e}". Remove any spelling mistakes or data issues. Only return the cleaned string itself and nothing else.`)}a(xu,"cleanData");function kB(e,t){return new se().addUserMessage(`Given the table schema:
45
45
  ${t}
46
46
 
47
47
  Generate a SQL query for the following request:
48
48
  ${e}.
49
- Only provide the SQL.`)}a(UB,"generateSQL");function qB(e){return new se().addUserMessage(`Generate JavaScript code for the following request:
49
+ Only provide the SQL.`)}a(kB,"generateSQL");function MB(e){return new se().addUserMessage(`Generate JavaScript code for the following request:
50
50
  ${e}.
51
- Only provide the JS and nothing else.`)}a(qB,"generateCode");function xu(e){return new se().addUserMessage(`Generate a node-cron compatible expression based on the following prompt. Return only the cron expression (without backticks), and if not possible return only 'Error generating cron' with a short explanation:
52
- ${e}`)}a(xu,"generateCronExpression");function Cu(e,t){return new se().addUserMessage(`Translate the following text: "${e}" into ${t}. Only return the translation.`)}a(Cu,"translate");function Ou(e){return new se().addUserMessage(`Return the sentiment of this text: "${e}". Only return the sentiment.`)}a(Ou,"sentimentAnalysis");function Lu(e){return new se().addUserMessage(`Search the web for the following: "${e}". Only return the top results.`)}a(Lu,"searchWeb");function Pu(e,t){let r="You do not have access to any bindings in this request.";e&&e.length>0&&(r=`The bindings you have access to are:
51
+ Only provide the JS and nothing else.`)}a(MB,"generateCode");function Cu(e){return new se().addUserMessage(`Generate a node-cron compatible expression based on the following prompt. Return only the cron expression (without backticks), and if not possible return only 'Error generating cron' with a short explanation:
52
+ ${e}`)}a(Cu,"generateCronExpression");function Ou(e,t){return new se().addUserMessage(`Translate the following text: "${e}" into ${t}. Only return the translation.`)}a(Ou,"translate");function Lu(e){return new se().addUserMessage(`Return the sentiment of this text: "${e}". Only return the sentiment.`)}a(Lu,"sentimentAnalysis");function Pu(e){return new se().addUserMessage(`Search the web for the following: "${e}". Only return the top results.`)}a(Pu,"searchWeb");function Uu(e,t){let r="You do not have access to any bindings in this request.";e&&e.length>0&&(r=`The bindings you have access to are:
53
53
 
54
54
  ${e.map(({readableBinding:o})=>`- $("${o}")`).join(`
55
55
  `)}`);let n="You do not have access to any snippets in this request.";return t.length>0&&(n=`The snippets you have access to are:
@@ -144,7 +144,7 @@ a variable, it will be provided to you as a binding.
144
144
 
145
145
  ${n}
146
146
 
147
- ${r}`)}a(Pu,"generateJs");function Mu(){let e=`
147
+ ${r}`)}a(Uu,"generateJs");function Nu(){let e=`
148
148
  You are generating Budibase table schemas from user prompts.
149
149
  Always return at least 2 tables, and define only one side of relationships using a link field.
150
150
  Exclude id, created_at, and updated_at (Budibase adds them).
@@ -152,10 +152,10 @@ Include a variety of column types: text, dropdown, date, number.
152
152
  Add at least one formula column, one attachment, and one multi-attachment column across the tables.
153
153
  Budibase handles reverse relationships and many-to-many links \u2014 never define join tables or reverse fields.
154
154
  You may specify foreignColumnName, but do not create that field manually.
155
- `;return new se().addSystemMessage(e)}a(Mu,"generateTables");function Nu(){let e='Given the generated schema, add only one field of type "AI" to relevant tables to add value to the Budibase user.';return new se().addSystemMessage(e)}a(Nu,"generateAIColumns");function Bu(){let e=`
155
+ `;return new se().addSystemMessage(e)}a(Nu,"generateTables");function Bu(){let e='Given the generated schema, add only one field of type "AI" to relevant tables to add value to the Budibase user.';return new se().addSystemMessage(e)}a(Bu,"generateAIColumns");function Gu(){let e=`
156
156
  For each table, populate the data field with realistic-looking sample records.
157
157
  Avoid placeholder values like "foo" or "bar". Use real names, emails, etc., and ensure values are unique across rows.
158
- `;return new se().addSystemMessage(e)}a(Bu,"generateData");function DB(e){return`You are a helpful support agent who uses workflows to resolve user issues efficiently.
158
+ `;return new se().addSystemMessage(e)}a(Gu,"generateData");function NB(e){return`You are a helpful support agent who uses workflows to resolve user issues efficiently.
159
159
 
160
160
  - The user will ask support queries.
161
161
  - Your replies MUST be short, concise, and directly answer the user's question as quickly and clearly as possible.
@@ -170,15 +170,15 @@ Avoid placeholder values like "foo" or "bar". Use real names, emails, etc., and
170
170
 
171
171
  \`\`\`
172
172
  ${JSON.stringify(e)}
173
- \`\`\``}a(DB,"agentSystemPrompt");function kB(){return`You will be provided with a set of history, a conversation between a user and an AI. Using this
173
+ \`\`\``}a(NB,"agentSystemPrompt");function BB(){return`You will be provided with a set of history, a conversation between a user and an AI. Using this
174
174
  information generate a title for the conversation, this should start with a capital letter and MUST be
175
- less than five words.`}a(kB,"agentHistoryTitleSystemPrompt");var Va=require("@budibase/backend-core"),RI=require("@budibase/shared-core");var _t=require("@budibase/types"),EI=require("@budibase/backend-core");function Gu(e){let t=[],r=[];for(let n of e.tables){let o=n.schema.reduce((s,i)=>{if(i.type===_t.FieldType.LINK){if(!r.includes(i.relationshipId)){let u={[_t.RelationshipType.MANY_TO_ONE]:_t.RelationshipType.ONE_TO_MANY,[_t.RelationshipType.ONE_TO_MANY]:_t.RelationshipType.MANY_TO_ONE,[_t.RelationshipType.MANY_TO_MANY]:_t.RelationshipType.MANY_TO_MANY},{reverseFieldName:c,relationshipId:f,...g}=i;s[i.name]={...g,fieldName:c,relationshipType:u[i.relationshipType]},r.push(f)}}else s[i.name]=i;return s},{});t.push({_id:EI.docIds.generateTableID(),name:n.name,primaryDisplay:n.primaryDisplay,schema:o})}return t}a(Gu,"aiTableResponseToTableSchema");function Fu(e,t){let r=[];for(let n of e)r.push({...n,schema:{...n.schema,...t[n.name]?.reduce((o,s)=>(o[s.name]=s,o),{})}});return r}a(Fu,"appendAIColumns");var L=require("@budibase/types"),T=require("zod");var Oe=T.z.object({name:T.z.string().describe("A human readable name for the field. It MUST be alpha-numeric and capitalised.")}),Wu=Oe.extend({type:T.z.literal(L.FieldType.LINK),tableId:T.z.string().describe("This must match one of the generated table names"),reverseFieldName:T.z.string().describe("Only the *name* of the field that will appear in the foreign table. Budibase creates this automatically. Do not define the column yourself."),relationshipId:T.z.string().describe("The ID of the relationship. It must be used in pairs, paring many-to-ones and one-to-manys, or many-to-manys with each other.")}),MB=T.z.array(T.z.union([Oe.extend({type:T.z.enum([L.FieldType.STRING,L.FieldType.NUMBER,L.FieldType.BOOLEAN,L.FieldType.LONGFORM]),constraints:T.z.object({presence:T.z.boolean()}).optional().nullable()}),Wu.extend({relationshipType:T.z.enum([L.RelationshipType.MANY_TO_ONE])}).describe("Many-to-one relationship, where the current table is the 'many' side. Defines the initiating side of the relationship. Only this side should be defined. The reverse column will be created automatically."),Wu.extend({relationshipType:T.z.enum([L.RelationshipType.ONE_TO_MANY])}).describe("One-to-many relationship, where the current table is the 'one' side. Defines the initiating side of the relationship. Only this side should be defined. The reverse column will be created automatically."),Wu.extend({relationshipType:T.z.enum([L.RelationshipType.MANY_TO_MANY])}).describe("Many to many relationship. Defines the initiating side of the relationship. Only this side should be defined. The reverse column will be created automatically."),Oe.extend({type:T.z.literal(L.FieldType.OPTIONS),constraints:T.z.object({inclusion:T.z.array(T.z.string()).describe("The options for the field"),presence:T.z.boolean()})}).describe("A single option from closed set of options"),Oe.extend({type:T.z.literal(L.FieldType.ARRAY),constraints:T.z.object({inclusion:T.z.array(T.z.string()).describe("The options for the field"),presence:T.z.boolean(),type:T.z.literal(L.JsonFieldSubType.ARRAY)}).describe("Multiple selected options from closed set of options")}),Oe.extend({type:T.z.literal(L.FieldType.FORMULA),formula:T.z.string().describe(`
175
+ less than five words.`}a(BB,"agentHistoryTitleSystemPrompt");var Va=require("@budibase/backend-core"),xI=require("@budibase/shared-core");var _t=require("@budibase/types"),vI=require("@budibase/backend-core");function Fu(e){let t=[],r=[];for(let n of e.tables){let o=n.schema.reduce((s,i)=>{if(i.type===_t.FieldType.LINK){if(!r.includes(i.relationshipId)){let u={[_t.RelationshipType.MANY_TO_ONE]:_t.RelationshipType.ONE_TO_MANY,[_t.RelationshipType.ONE_TO_MANY]:_t.RelationshipType.MANY_TO_ONE,[_t.RelationshipType.MANY_TO_MANY]:_t.RelationshipType.MANY_TO_MANY},{reverseFieldName:c,relationshipId:f,...g}=i;s[i.name]={...g,fieldName:c,relationshipType:u[i.relationshipType]},r.push(f)}}else s[i.name]=i;return s},{});t.push({_id:vI.docIds.generateTableID(),name:n.name,primaryDisplay:n.primaryDisplay,schema:o})}return t}a(Fu,"aiTableResponseToTableSchema");function Wu(e,t){let r=[];for(let n of e)r.push({...n,schema:{...n.schema,...t[n.name]?.reduce((o,s)=>(o[s.name]=s,o),{})}});return r}a(Wu,"appendAIColumns");var L=require("@budibase/types"),T=require("zod");var Oe=T.z.object({name:T.z.string().describe("A human readable name for the field. It MUST be alpha-numeric and capitalised.")}),$u=Oe.extend({type:T.z.literal(L.FieldType.LINK),tableId:T.z.string().describe("This must match one of the generated table names"),reverseFieldName:T.z.string().describe("Only the *name* of the field that will appear in the foreign table. Budibase creates this automatically. Do not define the column yourself."),relationshipId:T.z.string().describe("The ID of the relationship. It must be used in pairs, paring many-to-ones and one-to-manys, or many-to-manys with each other.")}),GB=T.z.array(T.z.union([Oe.extend({type:T.z.enum([L.FieldType.STRING,L.FieldType.NUMBER,L.FieldType.BOOLEAN,L.FieldType.LONGFORM]),constraints:T.z.object({presence:T.z.boolean()}).optional().nullable()}),$u.extend({relationshipType:T.z.enum([L.RelationshipType.MANY_TO_ONE])}).describe("Many-to-one relationship, where the current table is the 'many' side. Defines the initiating side of the relationship. Only this side should be defined. The reverse column will be created automatically."),$u.extend({relationshipType:T.z.enum([L.RelationshipType.ONE_TO_MANY])}).describe("One-to-many relationship, where the current table is the 'one' side. Defines the initiating side of the relationship. Only this side should be defined. The reverse column will be created automatically."),$u.extend({relationshipType:T.z.enum([L.RelationshipType.MANY_TO_MANY])}).describe("Many to many relationship. Defines the initiating side of the relationship. Only this side should be defined. The reverse column will be created automatically."),Oe.extend({type:T.z.literal(L.FieldType.OPTIONS),constraints:T.z.object({inclusion:T.z.array(T.z.string()).describe("The options for the field"),presence:T.z.boolean()})}).describe("A single option from closed set of options"),Oe.extend({type:T.z.literal(L.FieldType.ARRAY),constraints:T.z.object({inclusion:T.z.array(T.z.string()).describe("The options for the field"),presence:T.z.boolean(),type:T.z.literal(L.JsonFieldSubType.ARRAY)}).describe("Multiple selected options from closed set of options")}),Oe.extend({type:T.z.literal(L.FieldType.FORMULA),formula:T.z.string().describe(`
176
176
  A JavaScript expression using only previously defined fields.
177
177
  Reference fields using $("Field name"). Must end with: return ...
178
178
  Example: return $("Score") + $("Weight")
179
- `),responseType:T.z.enum([L.FieldType.STRING,L.FieldType.NUMBER,L.FieldType.BOOLEAN,L.FieldType.DATETIME])}).describe("Define these types after the other types"),Oe.extend({type:T.z.literal(L.FieldType.DATETIME),ignoreTimezones:T.z.boolean()}).describe("A datetime field, storing date and time"),Oe.extend({type:T.z.literal(L.FieldType.DATETIME),ignoreTimezones:T.z.boolean(),timeOnly:T.z.literal(!0)}).describe("A time only field"),Oe.extend({type:T.z.literal(L.FieldType.DATETIME),ignoreTimezones:T.z.boolean(),dateOnly:T.z.literal(!0)}).describe("A date only field"),Oe.extend({type:T.z.literal(L.FieldType.ATTACHMENT_SINGLE),subtype:T.z.literal(L.AttachmentSubType.IMAGE)}).describe("Single image column"),Oe.extend({type:T.z.literal(L.FieldType.ATTACHMENT_SINGLE)}).describe("Single attachment column. It stores a single document: pdf, word, etc. Use an appropriate name for the column, like 'Invoice', 'Document', etc."),Oe.extend({type:T.z.literal(L.FieldType.ATTACHMENTS),subtype:T.z.literal(L.AttachmentSubType.IMAGE)}).describe("Multiple images column. Use an appropiate name for the columns, like 'Gallery', 'Photos', etc."),Oe.extend({type:T.z.literal(L.FieldType.ATTACHMENTS)}).describe("Multiple attachments column. It might hold different kind of documents mixed up: pdf, txt, etc. Use an appropiate name for the columns, like 'Invoices', 'Documents', 'Attachments', etc.")])),$u=T.z.object({tables:T.z.array(T.z.object({name:T.z.string(),schema:MB,primaryDisplay:T.z.string().describe("The column will be used as display, so pick the clearer option. This must match EXACTLY one of the created fields names in the schema.")}))});function ju(e){let t=T.z.object({});for(let r of e){let n=Object.values(r.schema),o=[Oe.extend({type:T.z.literal(L.FieldType.AI),operation:T.z.literal(L.AIOperationEnum.TRANSLATE),column:T.z.enum(n.filter(s=>[L.FieldType.STRING,L.FieldType.LONGFORM].includes(s.type)).map(s=>s.name)).describe("The columns to translate"),language:T.z.string()}).describe("This column will be autogenerated via AI to translate one column. Use it for reasonable cases, like translating descriptions or similar."),Oe.extend({type:T.z.literal(L.FieldType.AI),operation:T.z.literal(L.AIOperationEnum.CATEGORISE_TEXT),columns:T.z.array(T.z.enum(n.filter(s=>[L.FieldType.STRING,L.FieldType.LONGFORM,L.FieldType.BOOLEAN,L.FieldType.NUMBER,L.FieldType.DATETIME].includes(s.type)).map(s=>s.name))).describe("The columns to be used as context"),categories:T.z.string().describe("CSV list of categories")}).describe("This column will be autogenerated via AI to categorise a row based on one or many columns.")];n.some(s=>s.type===L.FieldType.LONGFORM)&&o.push(Oe.extend({type:T.z.literal(L.FieldType.AI),operation:T.z.literal(L.AIOperationEnum.SUMMARISE_TEXT),columns:T.z.array(T.z.enum(n.filter(s=>[L.FieldType.STRING,L.FieldType.LONGFORM].includes(s.type)).map(s=>s.name))).describe("Columns, from the current table, to be passed in the context. Use at least one.")}).describe("This column will be autogenerated via AI to summarise one or many columns.")),t=t.extend({[r.name]:T.z.array(T.z.union(o))})}return t}a(ju,"aiColumnSchemas");var X=require("zod"),vI=require("@budibase/shared-core"),Q=require("@budibase/types");function Qu(e){let t=X.z.object({});for(let r of e){let n={_id:X.z.string().describe("Unique ID for the row")},o=X.z.union([X.z.literal("https://picsum.photos/600/600").describe("For profile pictures and similar"),X.z.literal("https://picsum.photos/1920/1080").describe("For anything else")]),s=X.z.object({fileName:X.z.string(),extension:X.z.enum([".pdf",".txt"]),content:X.z.string().describe("Random content for the file")});for(let i of Object.values(r.schema)){let{type:u}=i;switch(u){case Q.FieldType.STRING:case Q.FieldType.LONGFORM:n[i.name]=X.z.string();break;case Q.FieldType.NUMBER:case Q.FieldType.BIGINT:n[i.name]=X.z.number();break;case Q.FieldType.BOOLEAN:n[i.name]=X.z.boolean();break;case Q.FieldType.DATETIME:n[i.name]=X.z.string().describe(`ISO datetime. Use realistic dates, based on today's date, ${new Date().toISOString()}`);break;case Q.FieldType.ATTACHMENT_SINGLE:i.subtype===Q.AttachmentSubType.IMAGE?n[i.name]=o:n[i.name]=s;break;case Q.FieldType.ATTACHMENTS:i.subtype===Q.AttachmentSubType.IMAGE?n[i.name]=X.z.array(o):n[i.name]=X.z.array(s),n[i.name]=n[i.name].describe("Between 2 and 5 items.");break;case Q.FieldType.OPTIONS:n[i.name]=X.z.enum(i.constraints.inclusion);break;case Q.FieldType.LINK:{let c=X.z.string().describe(`Match one of the _ids created for table "${i.tableId}"`);i.relationshipType===Q.RelationshipType.ONE_TO_MANY?n[i.name]=X.z.array(c).describe("Array with a single item"):i.relationshipType===Q.RelationshipType.MANY_TO_MANY&&(n[i.name]=X.z.array(c).describe("Array with a one or many items. You can repeat the same ids between rows"))}break;case Q.FieldType.ARRAY:n[i.name]=X.z.array(X.z.enum(i.constraints.inclusion));break;case Q.FieldType.AI:case Q.FieldType.AUTO:case Q.FieldType.SIGNATURE_SINGLE:case Q.FieldType.BB_REFERENCE:case Q.FieldType.JSON:case Q.FieldType.FORMULA:case Q.FieldType.INTERNAL:case Q.FieldType.BARCODEQR:case Q.FieldType.BB_REFERENCE_SINGLE:break;default:throw vI.utils.unreachable(u)}}t=t.extend({[r.name]:X.z.array(X.z.object(n))}).describe(`Each table should include at least a few items (min 3, max 18). The number of items should not be evenly distributed. Instead, follow natural relationships and usage patterns based on the tables nature. For example:
179
+ `),responseType:T.z.enum([L.FieldType.STRING,L.FieldType.NUMBER,L.FieldType.BOOLEAN,L.FieldType.DATETIME])}).describe("Define these types after the other types"),Oe.extend({type:T.z.literal(L.FieldType.DATETIME),ignoreTimezones:T.z.boolean()}).describe("A datetime field, storing date and time"),Oe.extend({type:T.z.literal(L.FieldType.DATETIME),ignoreTimezones:T.z.boolean(),timeOnly:T.z.literal(!0)}).describe("A time only field"),Oe.extend({type:T.z.literal(L.FieldType.DATETIME),ignoreTimezones:T.z.boolean(),dateOnly:T.z.literal(!0)}).describe("A date only field"),Oe.extend({type:T.z.literal(L.FieldType.ATTACHMENT_SINGLE),subtype:T.z.literal(L.AttachmentSubType.IMAGE)}).describe("Single image column"),Oe.extend({type:T.z.literal(L.FieldType.ATTACHMENT_SINGLE)}).describe("Single attachment column. It stores a single document: pdf, word, etc. Use an appropriate name for the column, like 'Invoice', 'Document', etc."),Oe.extend({type:T.z.literal(L.FieldType.ATTACHMENTS),subtype:T.z.literal(L.AttachmentSubType.IMAGE)}).describe("Multiple images column. Use an appropiate name for the columns, like 'Gallery', 'Photos', etc."),Oe.extend({type:T.z.literal(L.FieldType.ATTACHMENTS)}).describe("Multiple attachments column. It might hold different kind of documents mixed up: pdf, txt, etc. Use an appropiate name for the columns, like 'Invoices', 'Documents', 'Attachments', etc.")])),ju=T.z.object({tables:T.z.array(T.z.object({name:T.z.string(),schema:GB,primaryDisplay:T.z.string().describe("The column will be used as display, so pick the clearer option. This must match EXACTLY one of the created fields names in the schema.")}))});function Qu(e){let t=T.z.object({});for(let r of e){let n=Object.values(r.schema),o=[Oe.extend({type:T.z.literal(L.FieldType.AI),operation:T.z.literal(L.AIOperationEnum.TRANSLATE),column:T.z.enum(n.filter(s=>[L.FieldType.STRING,L.FieldType.LONGFORM].includes(s.type)).map(s=>s.name)).describe("The columns to translate"),language:T.z.string()}).describe("This column will be autogenerated via AI to translate one column. Use it for reasonable cases, like translating descriptions or similar."),Oe.extend({type:T.z.literal(L.FieldType.AI),operation:T.z.literal(L.AIOperationEnum.CATEGORISE_TEXT),columns:T.z.array(T.z.enum(n.filter(s=>[L.FieldType.STRING,L.FieldType.LONGFORM,L.FieldType.BOOLEAN,L.FieldType.NUMBER,L.FieldType.DATETIME].includes(s.type)).map(s=>s.name))).describe("The columns to be used as context"),categories:T.z.string().describe("CSV list of categories")}).describe("This column will be autogenerated via AI to categorise a row based on one or many columns.")];n.some(s=>s.type===L.FieldType.LONGFORM)&&o.push(Oe.extend({type:T.z.literal(L.FieldType.AI),operation:T.z.literal(L.AIOperationEnum.SUMMARISE_TEXT),columns:T.z.array(T.z.enum(n.filter(s=>[L.FieldType.STRING,L.FieldType.LONGFORM].includes(s.type)).map(s=>s.name))).describe("Columns, from the current table, to be passed in the context. Use at least one.")}).describe("This column will be autogenerated via AI to summarise one or many columns.")),t=t.extend({[r.name]:T.z.array(T.z.union(o))})}return t}a(Qu,"aiColumnSchemas");var X=require("zod"),_I=require("@budibase/shared-core"),Q=require("@budibase/types");function Ku(e){let t=X.z.object({});for(let r of e){let n={_id:X.z.string().describe("Unique ID for the row")},o=X.z.union([X.z.literal("https://picsum.photos/600/600").describe("For profile pictures and similar"),X.z.literal("https://picsum.photos/1920/1080").describe("For anything else")]),s=X.z.object({fileName:X.z.string(),extension:X.z.enum([".pdf",".txt"]),content:X.z.string().describe("Random content for the file")});for(let i of Object.values(r.schema)){let{type:u}=i;switch(u){case Q.FieldType.STRING:case Q.FieldType.LONGFORM:n[i.name]=X.z.string();break;case Q.FieldType.NUMBER:case Q.FieldType.BIGINT:n[i.name]=X.z.number();break;case Q.FieldType.BOOLEAN:n[i.name]=X.z.boolean();break;case Q.FieldType.DATETIME:n[i.name]=X.z.string().describe(`ISO datetime. Use realistic dates, based on today's date, ${new Date().toISOString()}`);break;case Q.FieldType.ATTACHMENT_SINGLE:i.subtype===Q.AttachmentSubType.IMAGE?n[i.name]=o:n[i.name]=s;break;case Q.FieldType.ATTACHMENTS:i.subtype===Q.AttachmentSubType.IMAGE?n[i.name]=X.z.array(o):n[i.name]=X.z.array(s),n[i.name]=n[i.name].describe("Between 2 and 5 items.");break;case Q.FieldType.OPTIONS:n[i.name]=X.z.enum(i.constraints.inclusion);break;case Q.FieldType.LINK:{let c=X.z.string().describe(`Match one of the _ids created for table "${i.tableId}"`);i.relationshipType===Q.RelationshipType.ONE_TO_MANY?n[i.name]=X.z.array(c).describe("Array with a single item"):i.relationshipType===Q.RelationshipType.MANY_TO_MANY&&(n[i.name]=X.z.array(c).describe("Array with a one or many items. You can repeat the same ids between rows"))}break;case Q.FieldType.ARRAY:n[i.name]=X.z.array(X.z.enum(i.constraints.inclusion));break;case Q.FieldType.AI:case Q.FieldType.AUTO:case Q.FieldType.SIGNATURE_SINGLE:case Q.FieldType.BB_REFERENCE:case Q.FieldType.JSON:case Q.FieldType.FORMULA:case Q.FieldType.INTERNAL:case Q.FieldType.BARCODEQR:case Q.FieldType.BB_REFERENCE_SINGLE:break;default:throw _I.utils.unreachable(u)}}t=t.extend({[r.name]:X.z.array(X.z.object(n))}).describe(`Each table should include at least a few items (min 3, max 18). The number of items should not be evenly distributed. Instead, follow natural relationships and usage patterns based on the tables nature. For example:
180
180
  1. If we have posts and comments, there should be more posts than users, and more comments than posts.
181
181
  2. If it's a ticketing system, there may be more tickets than users, and some users may have submitted several tickets.
182
182
  3. In a CRM, there are fewer users than customers, and customers may have many deals.
183
- 4. In a project management tool, projects might have many tasks, and tasks might have multiple comments.`)}return t}a(Qu,"tableDataStructuredOutput");var Ha=F(require("dd-trace"));var Ku=class e{constructor(t,r){this.llmFunctions={getTableStructure:async t=>Ha.default.trace("llm.getTableStructure",async()=>{let r=await this.llm.prompt(Mu().addUserMessage(t).withFormat($u));try{let n=JSON.parse(r.message);return Gu(n)}catch{throw new Va.HTTPError("Error generating tables",500)}}),generateAIColumns:(t,r)=>Ha.default.trace("llm.generateAIColumns",async()=>this.generateAIColumns(t,r)),generateData:async(t,r)=>Ha.default.trace("llm.generateData",async()=>{let n=await this.llm.prompt(Bu().addUserMessage(t).withFormat(Qu(r)));try{return JSON.parse(n.message)}catch{throw new Va.HTTPError("Error generating data",500)}})};this.llm=t,this.delegates=r}static{a(this,"TableGeneration")}static async init(t){let r=await Ka({model:"gpt-5-mini",maxTokens:5e3});if(!r)throw new Va.HTTPError("LLM not available",422);return new e(r,t)}async generate(t,r){return Ha.default.trace("tableGeneration.generate",async n=>{let o=await this.generateTables(t,r);return n.addTags({table_count:o.length}),o})}async generateTables(t,r){let n=await this.llmFunctions.getTableStructure(t),o=this.llmFunctions.generateAIColumns(t,n).then(u=>this.delegates.generateTablesDelegate(Fu(n,u))),s=await this.llmFunctions.generateData(t,n),i=await o;return await this.delegates.generateDataDelegate(s,r,RI.utils.toMap("name",n)),i}async generateAIColumns(t,r){let n=await this.llm.prompt(Nu().addUserMessage(`This is the initial user prompt that generated the given schema:
184
- "${t}"`).withFormat(ju(r)));try{return JSON.parse(n.message)}catch{throw new Va.HTTPError("Error generating columns",500)}}};0&&(module.exports={Method,ai,api,auditLogs,automations,backups,branding,constants,environmentVariables,features,groups,init,licensing,logger,mappers,middleware,plugins,publicApi,quotas,scimGroups,scimUsers,sdk,users,utils});
183
+ 4. In a project management tool, projects might have many tasks, and tasks might have multiple comments.`)}return t}a(Ku,"tableDataStructuredOutput");var Ha=F(require("dd-trace"));var Vu=class e{constructor(t,r){this.llmFunctions={getTableStructure:async t=>Ha.default.trace("llm.getTableStructure",async()=>{let r=await this.llm.prompt(Nu().addUserMessage(t).withFormat(ju));try{let n=JSON.parse(r.message);return Fu(n)}catch{throw new Va.HTTPError("Error generating tables",500)}}),generateAIColumns:(t,r)=>Ha.default.trace("llm.generateAIColumns",async()=>this.generateAIColumns(t,r)),generateData:async(t,r)=>Ha.default.trace("llm.generateData",async()=>{let n=await this.llm.prompt(Gu().addUserMessage(t).withFormat(Ku(r)));try{return JSON.parse(n.message)}catch{throw new Va.HTTPError("Error generating data",500)}})};this.llm=t,this.delegates=r}static{a(this,"TableGeneration")}static async init(t){let r=await Ka({model:"gpt-5-mini",maxTokens:5e3});if(!r)throw new Va.HTTPError("LLM not available",422);return new e(r,t)}async generate(t,r){return Ha.default.trace("tableGeneration.generate",async n=>{let o=await this.generateTables(t,r);return n.addTags({table_count:o.length}),o})}async generateTables(t,r){let n=await this.llmFunctions.getTableStructure(t),o=this.llmFunctions.generateAIColumns(t,n).then(u=>this.delegates.generateTablesDelegate(Wu(n,u))),s=await this.llmFunctions.generateData(t,n),i=await o;return await this.delegates.generateDataDelegate(s,r,xI.utils.toMap("name",n)),i}async generateAIColumns(t,r){let n=await this.llm.prompt(Bu().addUserMessage(`This is the initial user prompt that generated the given schema:
184
+ "${t}"`).withFormat(Qu(r)));try{return JSON.parse(n.message)}catch{throw new Va.HTTPError("Error generating columns",500)}}};0&&(module.exports={Method,ai,api,auditLogs,automations,backups,branding,constants,environmentVariables,features,groups,init,licensing,logger,mappers,middleware,plugins,publicApi,quotas,scimGroups,scimUsers,sdk,users,utils});