@budibase/pro 3.18.14 → 3.18.15

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.
Files changed (2) hide show
  1. package/dist/index.js +22 -22
  2. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -1,31 +1,31 @@
1
- "use strict";var DI=Object.create;var Tr=Object.defineProperty;var kI=Object.getOwnPropertyDescriptor;var NI=Object.getOwnPropertyNames;var BI=Object.getPrototypeOf,MI=Object.prototype.hasOwnProperty;var a=(e,t)=>Tr(e,"name",{value:t,configurable:!0});var c=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),E=(e,t)=>{for(var r in t)Tr(e,r,{get:t[r],enumerable:!0})},ju=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of NI(t))!MI.call(e,o)&&o!==r&&Tr(e,o,{get:()=>t[o],enumerable:!(n=kI(t,o))||n.enumerable});return e};var U=(e,t,r)=>(r=e!=null?DI(BI(e)):{},ju(t||!e||!e.__esModule?Tr(r,"default",{value:e,enumerable:!0}):r,e)),GI=e=>ju(Tr({},"__esModule",{value:!0}),e);var en=c((O0,xc)=>{"use strict";function NS(e,t){for(var r=-1,n=t.length,o=e.length;++r<n;)e[o+r]=t[r];return e}a(NS,"arrayPush");xc.exports=NS});var Lo=c((P0,Cc)=>{"use strict";var BS=typeof global=="object"&&global&&global.Object===Object&&global;Cc.exports=BS});var pe=c((U0,Oc)=>{"use strict";var MS=Lo(),GS=typeof self=="object"&&self&&self.Object===Object&&self,FS=MS||GS||Function("return this")();Oc.exports=FS});var Ct=c((q0,Lc)=>{"use strict";var WS=pe(),jS=WS.Symbol;Lc.exports=jS});var Dc=c((D0,qc)=>{"use strict";var Pc=Ct(),Uc=Object.prototype,QS=Uc.hasOwnProperty,$S=Uc.toString,Xr=Pc?Pc.toStringTag:void 0;function KS(e){var t=QS.call(e,Xr),r=e[Xr];try{e[Xr]=void 0;var n=!0}catch{}var o=$S.call(e);return n&&(t?e[Xr]=r:delete e[Xr]),o}a(KS,"getRawTag");qc.exports=KS});var Nc=c((N0,kc)=>{"use strict";var VS=Object.prototype,YS=VS.toString;function HS(e){return YS.call(e)}a(HS,"objectToString");kc.exports=HS});var yt=c((M0,Gc)=>{"use strict";var Bc=Ct(),zS=Dc(),JS=Nc(),XS="[object Null]",ZS="[object Undefined]",Mc=Bc?Bc.toStringTag:void 0;function ew(e){return e==null?e===void 0?ZS:XS:Mc&&Mc in Object(e)?zS(e):JS(e)}a(ew,"baseGetTag");Gc.exports=ew});var Ie=c((F0,Fc)=>{"use strict";function tw(e){return e!=null&&typeof e=="object"}a(tw,"isObjectLike");Fc.exports=tw});var jc=c((j0,Wc)=>{"use strict";var rw=yt(),aw=Ie(),nw="[object Arguments]";function ow(e){return aw(e)&&rw(e)==nw}a(ow,"baseIsArguments");Wc.exports=ow});var Zr=c(($0,Kc)=>{"use strict";var Qc=jc(),sw=Ie(),$c=Object.prototype,iw=$c.hasOwnProperty,uw=$c.propertyIsEnumerable,cw=Qc(function(){return arguments}())?Qc:function(e){return sw(e)&&iw.call(e,"callee")&&!uw.call(e,"callee")};Kc.exports=cw});var ie=c((K0,Vc)=>{"use strict";var pw=Array.isArray;Vc.exports=pw});var Jc=c((V0,zc)=>{"use strict";var Yc=Ct(),lw=Zr(),dw=ie(),Hc=Yc?Yc.isConcatSpreadable:void 0;function fw(e){return dw(e)||lw(e)||!!(Hc&&e&&e[Hc])}a(fw,"isFlattenable");zc.exports=fw});var Po=c((H0,Zc)=>{"use strict";var mw=en(),gw=Jc();function Xc(e,t,r,n,o){var s=-1,i=e.length;for(r||(r=gw),o||(o=[]);++s<i;){var u=e[s];t>0&&r(u)?t>1?Xc(u,t-1,r,n,o):mw(o,u):n||(o[o.length]=u)}return o}a(Xc,"baseFlatten");Zc.exports=Xc});var ea=c((J0,ep)=>{"use strict";function yw(e){return e}a(yw,"identity");ep.exports=yw});var tn=c((Z0,tp)=>{"use strict";function hw(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(hw,"apply");tp.exports=hw});var Uo=c((tF,ap)=>{"use strict";var Aw=tn(),rp=Math.max;function bw(e,t,r){return t=rp(t===void 0?e.length-1:t,0),function(){for(var n=arguments,o=-1,s=rp(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),Aw(e,this,u)}}a(bw,"overRest");ap.exports=bw});var op=c((aF,np)=>{"use strict";function Iw(e){return function(){return e}}a(Iw,"constant");np.exports=Iw});var Ce=c((oF,sp)=>{"use strict";function Sw(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}a(Sw,"isObject");sp.exports=Sw});var ta=c((iF,ip)=>{"use strict";var ww=yt(),Ew=Ce(),Tw="[object AsyncFunction]",Rw="[object Function]",vw="[object GeneratorFunction]",_w="[object Proxy]";function xw(e){if(!Ew(e))return!1;var t=ww(e);return t==Rw||t==vw||t==Tw||t==_w}a(xw,"isFunction");ip.exports=xw});var cp=c((cF,up)=>{"use strict";var Cw=pe(),Ow=Cw["__core-js_shared__"];up.exports=Ow});var dp=c((pF,lp)=>{"use strict";var qo=cp(),pp=function(){var e=/[^.]+$/.exec(qo&&qo.keys&&qo.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function Lw(e){return!!pp&&pp in e}a(Lw,"isMasked");lp.exports=Lw});var Do=c((dF,fp)=>{"use strict";var Pw=Function.prototype,Uw=Pw.toString;function qw(e){if(e!=null){try{return Uw.call(e)}catch{}try{return e+""}catch{}}return""}a(qw,"toSource");fp.exports=qw});var gp=c((mF,mp)=>{"use strict";var Dw=ta(),kw=dp(),Nw=Ce(),Bw=Do(),Mw=/[\\^$.*+?()[\]{}|]/g,Gw=/^\[object .+?Constructor\]$/,Fw=Function.prototype,Ww=Object.prototype,jw=Fw.toString,Qw=Ww.hasOwnProperty,$w=RegExp("^"+jw.call(Qw).replace(Mw,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function Kw(e){if(!Nw(e)||kw(e))return!1;var t=Dw(e)?$w:Gw;return t.test(Bw(e))}a(Kw,"baseIsNative");mp.exports=Kw});var hp=c((yF,yp)=>{"use strict";function Vw(e,t){return e?.[t]}a(Vw,"getValue");yp.exports=Vw});var ht=c((AF,Ap)=>{"use strict";var Yw=gp(),Hw=hp();function zw(e,t){var r=Hw(e,t);return Yw(r)?r:void 0}a(zw,"getNative");Ap.exports=zw});var ko=c((IF,bp)=>{"use strict";var Jw=ht(),Xw=function(){try{var e=Jw(Object,"defineProperty");return e({},"",{}),e}catch{}}();bp.exports=Xw});var wp=c((SF,Sp)=>{"use strict";var Zw=op(),Ip=ko(),eE=ea(),tE=Ip?function(e,t){return Ip(e,"toString",{configurable:!0,enumerable:!1,value:Zw(t),writable:!0})}:eE;Sp.exports=tE});var No=c((wF,Ep)=>{"use strict";var rE=800,aE=16,nE=Date.now;function oE(e){var t=0,r=0;return function(){var n=nE(),o=aE-(n-r);if(r=n,o>0){if(++t>=rE)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}a(oE,"shortOut");Ep.exports=oE});var rn=c((TF,Tp)=>{"use strict";var sE=wp(),iE=No(),uE=iE(sE);Tp.exports=uE});var Bo=c((RF,Rp)=>{"use strict";var cE=ea(),pE=Uo(),lE=rn();function dE(e,t){return lE(pE(e,t,cE),e+"")}a(dE,"baseRest");Rp.exports=dE});var ra=c((_F,vp)=>{"use strict";var fE=ht(),mE=fE(Object,"create");vp.exports=mE});var Cp=c((xF,xp)=>{"use strict";var _p=ra();function gE(){this.__data__=_p?_p(null):{},this.size=0}a(gE,"hashClear");xp.exports=gE});var Lp=c((OF,Op)=>{"use strict";function yE(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}a(yE,"hashDelete");Op.exports=yE});var Up=c((PF,Pp)=>{"use strict";var hE=ra(),AE="__lodash_hash_undefined__",bE=Object.prototype,IE=bE.hasOwnProperty;function SE(e){var t=this.__data__;if(hE){var r=t[e];return r===AE?void 0:r}return IE.call(t,e)?t[e]:void 0}a(SE,"hashGet");Pp.exports=SE});var Dp=c((qF,qp)=>{"use strict";var wE=ra(),EE=Object.prototype,TE=EE.hasOwnProperty;function RE(e){var t=this.__data__;return wE?t[e]!==void 0:TE.call(t,e)}a(RE,"hashHas");qp.exports=RE});var Np=c((kF,kp)=>{"use strict";var vE=ra(),_E="__lodash_hash_undefined__";function xE(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=vE&&t===void 0?_E:t,this}a(xE,"hashSet");kp.exports=xE});var Mp=c((BF,Bp)=>{"use strict";var CE=Cp(),OE=Lp(),LE=Up(),PE=Dp(),UE=Np();function zt(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(zt,"Hash");zt.prototype.clear=CE;zt.prototype.delete=OE;zt.prototype.get=LE;zt.prototype.has=PE;zt.prototype.set=UE;Bp.exports=zt});var Fp=c((GF,Gp)=>{"use strict";function qE(){this.__data__=[],this.size=0}a(qE,"listCacheClear");Gp.exports=qE});var Jt=c((WF,Wp)=>{"use strict";function DE(e,t){return e===t||e!==e&&t!==t}a(DE,"eq");Wp.exports=DE});var aa=c((QF,jp)=>{"use strict";var kE=Jt();function NE(e,t){for(var r=e.length;r--;)if(kE(e[r][0],t))return r;return-1}a(NE,"assocIndexOf");jp.exports=NE});var $p=c((KF,Qp)=>{"use strict";var BE=aa(),ME=Array.prototype,GE=ME.splice;function FE(e){var t=this.__data__,r=BE(t,e);if(r<0)return!1;var n=t.length-1;return r==n?t.pop():GE.call(t,r,1),--this.size,!0}a(FE,"listCacheDelete");Qp.exports=FE});var Vp=c((YF,Kp)=>{"use strict";var WE=aa();function jE(e){var t=this.__data__,r=WE(t,e);return r<0?void 0:t[r][1]}a(jE,"listCacheGet");Kp.exports=jE});var Hp=c((zF,Yp)=>{"use strict";var QE=aa();function $E(e){return QE(this.__data__,e)>-1}a($E,"listCacheHas");Yp.exports=$E});var Jp=c((XF,zp)=>{"use strict";var KE=aa();function VE(e,t){var r=this.__data__,n=KE(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this}a(VE,"listCacheSet");zp.exports=VE});var na=c((eW,Xp)=>{"use strict";var YE=Fp(),HE=$p(),zE=Vp(),JE=Hp(),XE=Jp();function Xt(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(Xt,"ListCache");Xt.prototype.clear=YE;Xt.prototype.delete=HE;Xt.prototype.get=zE;Xt.prototype.has=JE;Xt.prototype.set=XE;Xp.exports=Xt});var an=c((rW,Zp)=>{"use strict";var ZE=ht(),eT=pe(),tT=ZE(eT,"Map");Zp.exports=tT});var rl=c((aW,tl)=>{"use strict";var el=Mp(),rT=na(),aT=an();function nT(){this.size=0,this.__data__={hash:new el,map:new(aT||rT),string:new el}}a(nT,"mapCacheClear");tl.exports=nT});var nl=c((oW,al)=>{"use strict";function oT(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}a(oT,"isKeyable");al.exports=oT});var oa=c((iW,ol)=>{"use strict";var sT=nl();function iT(e,t){var r=e.__data__;return sT(t)?r[typeof t=="string"?"string":"hash"]:r.map}a(iT,"getMapData");ol.exports=iT});var il=c((cW,sl)=>{"use strict";var uT=oa();function cT(e){var t=uT(this,e).delete(e);return this.size-=t?1:0,t}a(cT,"mapCacheDelete");sl.exports=cT});var cl=c((lW,ul)=>{"use strict";var pT=oa();function lT(e){return pT(this,e).get(e)}a(lT,"mapCacheGet");ul.exports=lT});var ll=c((fW,pl)=>{"use strict";var dT=oa();function fT(e){return dT(this,e).has(e)}a(fT,"mapCacheHas");pl.exports=fT});var fl=c((gW,dl)=>{"use strict";var mT=oa();function gT(e,t){var r=mT(this,e),n=r.size;return r.set(e,t),this.size+=r.size==n?0:1,this}a(gT,"mapCacheSet");dl.exports=gT});var nn=c((hW,ml)=>{"use strict";var yT=rl(),hT=il(),AT=cl(),bT=ll(),IT=fl();function Zt(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(Zt,"MapCache");Zt.prototype.clear=yT;Zt.prototype.delete=hT;Zt.prototype.get=AT;Zt.prototype.has=bT;Zt.prototype.set=IT;ml.exports=Zt});var yl=c((bW,gl)=>{"use strict";var ST="__lodash_hash_undefined__";function wT(e){return this.__data__.set(e,ST),this}a(wT,"setCacheAdd");gl.exports=wT});var Al=c((SW,hl)=>{"use strict";function ET(e){return this.__data__.has(e)}a(ET,"setCacheHas");hl.exports=ET});var Mo=c((EW,bl)=>{"use strict";var TT=nn(),RT=yl(),vT=Al();function on(e){var t=-1,r=e==null?0:e.length;for(this.__data__=new TT;++t<r;)this.add(e[t])}a(on,"SetCache");on.prototype.add=on.prototype.push=RT;on.prototype.has=vT;bl.exports=on});var Sl=c((RW,Il)=>{"use strict";function _T(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(_T,"baseFindIndex");Il.exports=_T});var El=c((_W,wl)=>{"use strict";function xT(e){return e!==e}a(xT,"baseIsNaN");wl.exports=xT});var Rl=c((CW,Tl)=>{"use strict";function CT(e,t,r){for(var n=r-1,o=e.length;++n<o;)if(e[n]===t)return n;return-1}a(CT,"strictIndexOf");Tl.exports=CT});var _l=c((LW,vl)=>{"use strict";var OT=Sl(),LT=El(),PT=Rl();function UT(e,t,r){return t===t?PT(e,t,r):OT(e,LT,r)}a(UT,"baseIndexOf");vl.exports=UT});var Go=c((UW,xl)=>{"use strict";var qT=_l();function DT(e,t){var r=e==null?0:e.length;return!!r&&qT(e,t,0)>-1}a(DT,"arrayIncludes");xl.exports=DT});var Ol=c((DW,Cl)=>{"use strict";function kT(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(kT,"arrayIncludesWith");Cl.exports=kT});var Fo=c((NW,Ll)=>{"use strict";function NT(e,t){return e.has(t)}a(NT,"cacheHas");Ll.exports=NT});var Wo=c((MW,Pl)=>{"use strict";var BT=ht(),MT=pe(),GT=BT(MT,"Set");Pl.exports=GT});var jo=c((GW,Ul)=>{"use strict";function FT(){}a(FT,"noop");Ul.exports=FT});var sn=c((WW,ql)=>{"use strict";function WT(e){var t=-1,r=Array(e.size);return e.forEach(function(n){r[++t]=n}),r}a(WT,"setToArray");ql.exports=WT});var kl=c((QW,Dl)=>{"use strict";var Qo=Wo(),jT=jo(),QT=sn(),$T=1/0,KT=Qo&&1/QT(new Qo([,-0]))[1]==$T?function(e){return new Qo(e)}:jT;Dl.exports=KT});var Bl=c(($W,Nl)=>{"use strict";var VT=Mo(),YT=Go(),HT=Ol(),zT=Fo(),JT=kl(),XT=sn(),ZT=200;function eR(e,t,r){var n=-1,o=YT,s=e.length,i=!0,u=[],p=u;if(r)i=!1,o=HT;else if(s>=ZT){var m=t?null:JT(e);if(m)return XT(m);i=!1,o=zT,p=new VT}else p=t?[]:u;e:for(;++n<s;){var g=e[n],y=t?t(g):g;if(g=r||g!==0?g:0,i&&y===y){for(var h=p.length;h--;)if(p[h]===y)continue e;t&&p.push(y),u.push(g)}else o(p,y,r)||(p!==u&&p.push(y),u.push(g))}return u}a(eR,"baseUniq");Nl.exports=eR});var un=c((VW,Ml)=>{"use strict";var tR=9007199254740991;function rR(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=tR}a(rR,"isLength");Ml.exports=rR});var er=c((HW,Gl)=>{"use strict";var aR=ta(),nR=un();function oR(e){return e!=null&&nR(e.length)&&!aR(e)}a(oR,"isArrayLike");Gl.exports=oR});var $o=c((JW,Fl)=>{"use strict";var sR=er(),iR=Ie();function uR(e){return iR(e)&&sR(e)}a(uR,"isArrayLikeObject");Fl.exports=uR});var jl=c((ZW,Wl)=>{"use strict";var cR=Po(),pR=Bo(),lR=Bl(),dR=$o(),fR=pR(function(e){return lR(cR(e,1,dR,!0))});Wl.exports=fR});var $l=c((e1,Ql)=>{"use strict";var mR=na();function gR(){this.__data__=new mR,this.size=0}a(gR,"stackClear");Ql.exports=gR});var Vl=c((r1,Kl)=>{"use strict";function yR(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r}a(yR,"stackDelete");Kl.exports=yR});var Hl=c((n1,Yl)=>{"use strict";function hR(e){return this.__data__.get(e)}a(hR,"stackGet");Yl.exports=hR});var Jl=c((s1,zl)=>{"use strict";function AR(e){return this.__data__.has(e)}a(AR,"stackHas");zl.exports=AR});var Zl=c((u1,Xl)=>{"use strict";var bR=na(),IR=an(),SR=nn(),wR=200;function ER(e,t){var r=this.__data__;if(r instanceof bR){var n=r.__data__;if(!IR||n.length<wR-1)return n.push([e,t]),this.size=++r.size,this;r=this.__data__=new SR(n)}return r.set(e,t),this.size=r.size,this}a(ER,"stackSet");Xl.exports=ER});var sa=c((p1,ed)=>{"use strict";var TR=na(),RR=$l(),vR=Vl(),_R=Hl(),xR=Jl(),CR=Zl();function tr(e){var t=this.__data__=new TR(e);this.size=t.size}a(tr,"Stack");tr.prototype.clear=RR;tr.prototype.delete=vR;tr.prototype.get=_R;tr.prototype.has=xR;tr.prototype.set=CR;ed.exports=tr});var ia=c((d1,rd)=>{"use strict";var td=ko();function OR(e,t,r){t=="__proto__"&&td?td(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}a(OR,"baseAssignValue");rd.exports=OR});var Ko=c((m1,ad)=>{"use strict";var LR=ia(),PR=Jt();function UR(e,t,r){(r!==void 0&&!PR(e[t],r)||r===void 0&&!(t in e))&&LR(e,t,r)}a(UR,"assignMergeValue");ad.exports=UR});var od=c((y1,nd)=>{"use strict";function qR(e){return function(t,r,n){for(var o=-1,s=Object(t),i=n(t),u=i.length;u--;){var p=i[e?u:++o];if(r(s[p],p,s)===!1)break}return t}}a(qR,"createBaseFor");nd.exports=qR});var Vo=c((A1,sd)=>{"use strict";var DR=od(),kR=DR();sd.exports=kR});var Yo=c((ua,rr)=>{"use strict";var NR=pe(),pd=typeof ua=="object"&&ua&&!ua.nodeType&&ua,id=pd&&typeof rr=="object"&&rr&&!rr.nodeType&&rr,BR=id&&id.exports===pd,ud=BR?NR.Buffer:void 0,cd=ud?ud.allocUnsafe:void 0;function MR(e,t){if(t)return e.slice();var r=e.length,n=cd?cd(r):new e.constructor(r);return e.copy(n),n}a(MR,"cloneBuffer");rr.exports=MR});var Ho=c((I1,ld)=>{"use strict";var GR=pe(),FR=GR.Uint8Array;ld.exports=FR});var cn=c((S1,fd)=>{"use strict";var dd=Ho();function WR(e){var t=new e.constructor(e.byteLength);return new dd(t).set(new dd(e)),t}a(WR,"cloneArrayBuffer");fd.exports=WR});var zo=c((E1,md)=>{"use strict";var jR=cn();function QR(e,t){var r=t?jR(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.length)}a(QR,"cloneTypedArray");md.exports=QR});var ar=c((R1,gd)=>{"use strict";function $R(e,t){var r=-1,n=e.length;for(t||(t=Array(n));++r<n;)t[r]=e[r];return t}a($R,"copyArray");gd.exports=$R});var ca=c((_1,hd)=>{"use strict";var KR=Ce(),yd=Object.create,VR=function(){function e(){}return a(e,"object"),function(t){if(!KR(t))return{};if(yd)return yd(t);e.prototype=t;var r=new e;return e.prototype=void 0,r}}();hd.exports=VR});var Jo=c((C1,Ad)=>{"use strict";function YR(e,t){return function(r){return e(t(r))}}a(YR,"overArg");Ad.exports=YR});var pn=c((L1,bd)=>{"use strict";var HR=Jo(),zR=HR(Object.getPrototypeOf,Object);bd.exports=zR});var ln=c((P1,Id)=>{"use strict";var JR=Object.prototype;function XR(e){var t=e&&e.constructor,r=typeof t=="function"&&t.prototype||JR;return e===r}a(XR,"isPrototype");Id.exports=XR});var Xo=c((q1,Sd)=>{"use strict";var ZR=ca(),ev=pn(),tv=ln();function rv(e){return typeof e.constructor=="function"&&!tv(e)?ZR(ev(e)):{}}a(rv,"initCloneObject");Sd.exports=rv});var Ed=c((k1,wd)=>{"use strict";function av(){return!1}a(av,"stubFalse");wd.exports=av});var la=c((pa,nr)=>{"use strict";var nv=pe(),ov=Ed(),vd=typeof pa=="object"&&pa&&!pa.nodeType&&pa,Td=vd&&typeof nr=="object"&&nr&&!nr.nodeType&&nr,sv=Td&&Td.exports===vd,Rd=sv?nv.Buffer:void 0,iv=Rd?Rd.isBuffer:void 0,uv=iv||ov;nr.exports=uv});var Zo=c((B1,xd)=>{"use strict";var cv=yt(),pv=pn(),lv=Ie(),dv="[object Object]",fv=Function.prototype,mv=Object.prototype,_d=fv.toString,gv=mv.hasOwnProperty,yv=_d.call(Object);function hv(e){if(!lv(e)||cv(e)!=dv)return!1;var t=pv(e);if(t===null)return!0;var r=gv.call(t,"constructor")&&t.constructor;return typeof r=="function"&&r instanceof r&&_d.call(r)==yv}a(hv,"isPlainObject");xd.exports=hv});var Od=c((G1,Cd)=>{"use strict";var Av=yt(),bv=un(),Iv=Ie(),Sv="[object Arguments]",wv="[object Array]",Ev="[object Boolean]",Tv="[object Date]",Rv="[object Error]",vv="[object Function]",_v="[object Map]",xv="[object Number]",Cv="[object Object]",Ov="[object RegExp]",Lv="[object Set]",Pv="[object String]",Uv="[object WeakMap]",qv="[object ArrayBuffer]",Dv="[object DataView]",kv="[object Float32Array]",Nv="[object Float64Array]",Bv="[object Int8Array]",Mv="[object Int16Array]",Gv="[object Int32Array]",Fv="[object Uint8Array]",Wv="[object Uint8ClampedArray]",jv="[object Uint16Array]",Qv="[object Uint32Array]",B={};B[kv]=B[Nv]=B[Bv]=B[Mv]=B[Gv]=B[Fv]=B[Wv]=B[jv]=B[Qv]=!0;B[Sv]=B[wv]=B[qv]=B[Ev]=B[Dv]=B[Tv]=B[Rv]=B[vv]=B[_v]=B[xv]=B[Cv]=B[Ov]=B[Lv]=B[Pv]=B[Uv]=!1;function $v(e){return Iv(e)&&bv(e.length)&&!!B[Av(e)]}a($v,"baseIsTypedArray");Cd.exports=$v});var dn=c((W1,Ld)=>{"use strict";function Kv(e){return function(t){return e(t)}}a(Kv,"baseUnary");Ld.exports=Kv});var fn=c((da,or)=>{"use strict";var Vv=Lo(),Pd=typeof da=="object"&&da&&!da.nodeType&&da,fa=Pd&&typeof or=="object"&&or&&!or.nodeType&&or,Yv=fa&&fa.exports===Pd,es=Yv&&Vv.process,Hv=function(){try{var e=fa&&fa.require&&fa.require("util").types;return e||es&&es.binding&&es.binding("util")}catch{}}();or.exports=Hv});var mn=c((Q1,Dd)=>{"use strict";var zv=Od(),Jv=dn(),Ud=fn(),qd=Ud&&Ud.isTypedArray,Xv=qd?Jv(qd):zv;Dd.exports=Xv});var ts=c(($1,kd)=>{"use strict";function Zv(e,t){if(!(t==="constructor"&&typeof e[t]=="function")&&t!="__proto__")return e[t]}a(Zv,"safeGet");kd.exports=Zv});var rs=c((V1,Nd)=>{"use strict";var e_=ia(),t_=Jt(),r_=Object.prototype,a_=r_.hasOwnProperty;function n_(e,t,r){var n=e[t];(!(a_.call(e,t)&&t_(n,r))||r===void 0&&!(t in e))&&e_(e,t,r)}a(n_,"assignValue");Nd.exports=n_});var sr=c((H1,Bd)=>{"use strict";var o_=rs(),s_=ia();function i_(e,t,r,n){var o=!r;r||(r={});for(var s=-1,i=t.length;++s<i;){var u=t[s],p=n?n(r[u],e[u],u,r,e):void 0;p===void 0&&(p=e[u]),o?s_(r,u,p):o_(r,u,p)}return r}a(i_,"copyObject");Bd.exports=i_});var Gd=c((J1,Md)=>{"use strict";function u_(e,t){for(var r=-1,n=Array(e);++r<e;)n[r]=t(r);return n}a(u_,"baseTimes");Md.exports=u_});var ma=c((Z1,Fd)=>{"use strict";var c_=9007199254740991,p_=/^(?:0|[1-9]\d*)$/;function l_(e,t){var r=typeof e;return t=t??c_,!!t&&(r=="number"||r!="symbol"&&p_.test(e))&&e>-1&&e%1==0&&e<t}a(l_,"isIndex");Fd.exports=l_});var as=c((tj,Wd)=>{"use strict";var d_=Gd(),f_=Zr(),m_=ie(),g_=la(),y_=ma(),h_=mn(),A_=Object.prototype,b_=A_.hasOwnProperty;function I_(e,t){var r=m_(e),n=!r&&f_(e),o=!r&&!n&&g_(e),s=!r&&!n&&!o&&h_(e),i=r||n||o||s,u=i?d_(e.length,String):[],p=u.length;for(var m in e)(t||b_.call(e,m))&&!(i&&(m=="length"||o&&(m=="offset"||m=="parent")||s&&(m=="buffer"||m=="byteLength"||m=="byteOffset")||y_(m,p)))&&u.push(m);return u}a(I_,"arrayLikeKeys");Wd.exports=I_});var Qd=c((aj,jd)=>{"use strict";function S_(e){var t=[];if(e!=null)for(var r in Object(e))t.push(r);return t}a(S_,"nativeKeysIn");jd.exports=S_});var Kd=c((oj,$d)=>{"use strict";var w_=Ce(),E_=ln(),T_=Qd(),R_=Object.prototype,v_=R_.hasOwnProperty;function __(e){if(!w_(e))return T_(e);var t=E_(e),r=[];for(var n in e)n=="constructor"&&(t||!v_.call(e,n))||r.push(n);return r}a(__,"baseKeysIn");$d.exports=__});var ir=c((ij,Vd)=>{"use strict";var x_=as(),C_=Kd(),O_=er();function L_(e){return O_(e)?x_(e,!0):C_(e)}a(L_,"keysIn");Vd.exports=L_});var Hd=c((cj,Yd)=>{"use strict";var P_=sr(),U_=ir();function q_(e){return P_(e,U_(e))}a(q_,"toPlainObject");Yd.exports=q_});var tf=c((lj,ef)=>{"use strict";var zd=Ko(),D_=Yo(),k_=zo(),N_=ar(),B_=Xo(),Jd=Zr(),Xd=ie(),M_=$o(),G_=la(),F_=ta(),W_=Ce(),j_=Zo(),Q_=mn(),Zd=ts(),$_=Hd();function K_(e,t,r,n,o,s,i){var u=Zd(e,r),p=Zd(t,r),m=i.get(p);if(m){zd(e,r,m);return}var g=s?s(u,p,r+"",e,t,i):void 0,y=g===void 0;if(y){var h=Xd(p),S=!h&&G_(p),O=!h&&!S&&Q_(p);g=p,h||S||O?Xd(u)?g=u:M_(u)?g=N_(u):S?(y=!1,g=D_(p,!0)):O?(y=!1,g=k_(p,!0)):g=[]:j_(p)||Jd(p)?(g=u,Jd(u)?g=$_(u):(!W_(u)||F_(u))&&(g=B_(p))):y=!1}y&&(i.set(p,g),o(g,p,n,s,i),i.delete(p)),zd(e,r,g)}a(K_,"baseMergeDeep");ef.exports=K_});var nf=c((fj,af)=>{"use strict";var V_=sa(),Y_=Ko(),H_=Vo(),z_=tf(),J_=Ce(),X_=ir(),Z_=ts();function rf(e,t,r,n,o){e!==t&&H_(t,function(s,i){if(o||(o=new V_),J_(s))z_(e,t,i,r,rf,n,o);else{var u=n?n(Z_(e,i),s,i+"",e,t,o):void 0;u===void 0&&(u=s),Y_(e,i,u)}},X_)}a(rf,"baseMerge");af.exports=rf});var sf=c((gj,of)=>{"use strict";var ex=Jt(),tx=er(),rx=ma(),ax=Ce();function nx(e,t,r){if(!ax(r))return!1;var n=typeof t;return(n=="number"?tx(r)&&rx(t,r.length):n=="string"&&t in r)?ex(r[t],e):!1}a(nx,"isIterateeCall");of.exports=nx});var cf=c((hj,uf)=>{"use strict";var ox=Bo(),sx=sf();function ix(e){return ox(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&&sx(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(ix,"createAssigner");uf.exports=ix});var ns=c((bj,pf)=>{"use strict";var ux=nf(),cx=cf(),px=cx(function(e,t,r){ux(e,t,r)});pf.exports=px});var fm=c(ye=>{"use strict";ye.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"};ye.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"]};ye.aryRearg={2:[1,0],3:[2,0,1],4:[3,2,0,1]};ye.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};ye.iterateeRearg={mapKeys:[1],reduceRight:[1,0]};ye.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]};ye.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}};ye.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}};ye.realToAlias=function(){var e=Object.prototype.hasOwnProperty,t=ye.aliasToReal,r={};for(var n in t){var o=t[n];e.call(r,o)?r[o].push(n):r[o]=[n]}return r}();ye.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"};ye.skipFixed={castArray:!0,flow:!0,flowRight:!0,iteratee:!0,mixin:!0,rearg:!0,runInContext:!0};ye.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 Zs=c((_K,mm)=>{"use strict";mm.exports={}});var Am=c((xK,hm)=>{"use strict";var Z=fm(),VC=Zs(),gm=Array.prototype.push;function YC(e,t){return t==2?function(r,n){return e.apply(void 0,arguments)}:function(r){return e.apply(void 0,arguments)}}a(YC,"baseArity");function ei(e,t){return t==2?function(r,n){return e(r,n)}:function(r){return e(r)}}a(ei,"baseAry");function ym(e){for(var t=e?e.length:0,r=Array(t);t--;)r[t]=e[t];return r}a(ym,"cloneArray");function HC(e){return function(t){return e({},t)}}a(HC,"createCloner");function zC(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&&gm.apply(i,s),t!=n&&gm.apply(i,o.slice(t+1)),e.apply(this,i)}}a(zC,"flatSpread");function ti(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(ti,"wrapImmutable");function ri(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:VC,p="curry"in n&&n.curry,m="fixed"in n&&n.fixed,g="rearg"in n&&n.rearg,y=o?r.runInContext():void 0,h=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},S=h.ary,O=h.assign,x=h.clone,_=h.curry,v=h.forEach,q=h.isArray,De=h.isError,Re=h.isFunction,lt=h.isWeakMap,jt=h.keys,Sr=h.rearg,wr=h.toInteger,vI=h.toPath,ku=jt(Z.aryMethod),_I={castArray:function(w){return function(){var A=arguments[0];return q(A)?w(ym(A)):w.apply(void 0,arguments)}},iteratee:function(w){return function(){var A=arguments[0],I=arguments[1],R=w(A,I),L=R.length;return i.cap&&typeof I=="number"?(I=I>2?I-2:1,L&&L<=I?R:ei(R,I)):R}},mixin:function(w){return function(A){var I=this;if(!Re(I))return w(I,Object(A));var R=[];return v(jt(A),function(L){Re(A[L])&&R.push([L,I.prototype[L]])}),w(I,Object(A)),v(R,function(L){var ue=L[1];Re(ue)?I.prototype[L[0]]=ue:delete I.prototype[L[0]]}),I}},nthArg:function(w){return function(A){var I=A<0?1:wr(A)+1;return _(w(A),I)}},rearg:function(w){return function(A,I){var R=I?I.length:0;return _(w(A,I),R)}},runInContext:function(w){return function(A){return ri(e,w(A),n)}}};function xI(w,A){if(i.cap){var I=Z.iterateeRearg[w];if(I)return UI(A,I);var R=!o&&Z.iterateeAry[w];if(R)return PI(A,R)}return A}a(xI,"castCap");function CI(w,A,I){return p||i.curry&&I>1?_(A,I):A}a(CI,"castCurry");function Nu(w,A,I){if(i.fixed&&(m||!Z.skipFixed[w])){var R=Z.methodSpread[w],L=R&&R.start;return L===void 0?S(A,I):zC(A,L)}return A}a(Nu,"castFixed");function Bu(w,A,I){return i.rearg&&I>1&&(g||!Z.skipRearg[w])?Sr(A,Z.methodRearg[w]||Z.aryRearg[I]):A}a(Bu,"castRearg");function OI(w,A){A=vI(A);for(var I=-1,R=A.length,L=R-1,ue=x(Object(w)),je=ue;je!=null&&++I<R;){var ve=A[I],Qe=je[ve];Qe!=null&&!(Re(Qe)||De(Qe)||lt(Qe))&&(je[ve]=x(I==L?Qe:Object(Qe))),je=je[ve]}return ue}a(OI,"cloneByPath");function LI(w){return Ae.runInContext.convert(w)(void 0)}a(LI,"convertLib");function Mu(w,A){var I=Z.aliasToReal[w]||w,R=Z.remap[I]||I,L=n;return function(ue){var je=o?y:h,ve=o?y[R]:A,Qe=O(O({},L),ue);return ri(je,I,ve,Qe)}}a(Mu,"createConverter");function PI(w,A){return Gu(w,function(I){return typeof I=="function"?ei(I,A):I})}a(PI,"iterateeAry");function UI(w,A){return Gu(w,function(I){var R=A.length;return YC(Sr(ei(I,R),A),R)})}a(UI,"iterateeRearg");function Gu(w,A){return function(){var I=arguments.length;if(!I)return w();for(var R=Array(I);I--;)R[I]=arguments[I];var L=i.rearg?0:I-1;return R[L]=A(R[L]),w.apply(void 0,R)}}a(Gu,"overArg");function Fu(w,A,I){var R,L=Z.aliasToReal[w]||w,ue=A,je=_I[L];return je?ue=je(A):i.immutable&&(Z.mutate.array[L]?ue=ti(A,ym):Z.mutate.object[L]?ue=ti(A,HC(A)):Z.mutate.set[L]&&(ue=ti(A,OI))),v(ku,function(ve){return v(Z.aryMethod[ve],function(Qe){if(L==Qe){var Wu=Z.methodSpread[L],qI=Wu&&Wu.afterRearg;return R=qI?Nu(L,Bu(L,ue,ve),ve):Bu(L,Nu(L,ue,ve),ve),R=xI(L,R),R=CI(L,R,ve),!1}}),!R}),R||(R=ue),R==A&&(R=p?_(R,1):function(){return A.apply(this,arguments)}),R.convert=Mu(L,A),R.placeholder=A.placeholder=I,R}if(a(Fu,"wrap"),!s)return Fu(t,r,u);var Ae=r,Er=[];return v(ku,function(w){v(Z.aryMethod[w],function(A){var I=Ae[Z.remap[A]||A];I&&Er.push([A,Fu(A,I,Ae)])})}),v(jt(Ae),function(w){var A=Ae[w];if(typeof A=="function"){for(var I=Er.length;I--;)if(Er[I][0]==w)return;A.convert=Mu(w,A),Er.push([w,A])}}),v(Er,function(w){Ae[w[0]]=w[1]}),Ae.convert=LI,Ae.placeholder=Ae,v(jt(Ae),function(w){v(Z.realToAlias[w]||[],function(A){Ae[A]=Ae[w]})}),Ae}a(ri,"baseConvert");hm.exports=ri});var ai=c((OK,bm)=>{"use strict";var JC=ht(),XC=pe(),ZC=JC(XC,"WeakMap");bm.exports=ZC});var ni=c((LK,Sm)=>{"use strict";var Im=ai(),eO=Im&&new Im;Sm.exports=eO});var oi=c((PK,Em)=>{"use strict";var tO=ea(),wm=ni(),rO=wm?function(e,t){return wm.set(e,t),e}:tO;Em.exports=rO});var Ra=c((UK,Tm)=>{"use strict";var aO=ca(),nO=Ce();function oO(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=aO(e.prototype),n=e.apply(r,t);return nO(n)?n:r}}a(oO,"createCtor");Tm.exports=oO});var vm=c((DK,Rm)=>{"use strict";var sO=Ra(),iO=pe(),uO=1;function cO(e,t,r){var n=t&uO,o=sO(e);function s(){var i=this&&this!==iO&&this instanceof s?o:e;return i.apply(n?r:this,arguments)}return a(s,"wrapper"),s}a(cO,"createBind");Rm.exports=cO});var si=c((NK,_m)=>{"use strict";var pO=Math.max;function lO(e,t,r,n){for(var o=-1,s=e.length,i=r.length,u=-1,p=t.length,m=pO(s-i,0),g=Array(p+m),y=!n;++u<p;)g[u]=t[u];for(;++o<i;)(y||o<s)&&(g[r[o]]=e[o]);for(;m--;)g[u++]=e[o++];return g}a(lO,"composeArgs");_m.exports=lO});var ii=c((MK,xm)=>{"use strict";var dO=Math.max;function fO(e,t,r,n){for(var o=-1,s=e.length,i=-1,u=r.length,p=-1,m=t.length,g=dO(s-u,0),y=Array(g+m),h=!n;++o<g;)y[o]=e[o];for(var S=o;++p<m;)y[S+p]=t[p];for(;++i<u;)(h||o<s)&&(y[S+r[i]]=e[o++]);return y}a(fO,"composeArgsRight");xm.exports=fO});var Om=c((FK,Cm)=>{"use strict";function mO(e,t){for(var r=e.length,n=0;r--;)e[r]===t&&++n;return n}a(mO,"countHolders");Cm.exports=mO});var kn=c((jK,Lm)=>{"use strict";function gO(){}a(gO,"baseLodash");Lm.exports=gO});var Bn=c(($K,Pm)=>{"use strict";var yO=ca(),hO=kn(),AO=4294967295;function Nn(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=AO,this.__views__=[]}a(Nn,"LazyWrapper");Nn.prototype=yO(hO.prototype);Nn.prototype.constructor=Nn;Pm.exports=Nn});var ui=c((VK,qm)=>{"use strict";var Um=ni(),bO=jo(),IO=Um?function(e){return Um.get(e)}:bO;qm.exports=IO});var km=c((YK,Dm)=>{"use strict";var SO={};Dm.exports=SO});var Mm=c((HK,Bm)=>{"use strict";var Nm=km(),wO=Object.prototype,EO=wO.hasOwnProperty;function TO(e){for(var t=e.name+"",r=Nm[t],n=EO.call(Nm,t)?r.length:0;n--;){var o=r[n],s=o.func;if(s==null||s==e)return o.name}return t}a(TO,"getFuncName");Bm.exports=TO});var ci=c((JK,Gm)=>{"use strict";var RO=ca(),vO=kn();function Mn(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=void 0}a(Mn,"LodashWrapper");Mn.prototype=RO(vO.prototype);Mn.prototype.constructor=Mn;Gm.exports=Mn});var Wm=c((ZK,Fm)=>{"use strict";var _O=Bn(),xO=ci(),CO=ar();function OO(e){if(e instanceof _O)return e.clone();var t=new xO(e.__wrapped__,e.__chain__);return t.__actions__=CO(e.__actions__),t.__index__=e.__index__,t.__values__=e.__values__,t}a(OO,"wrapperClone");Fm.exports=OO});var $m=c((tV,Qm)=>{"use strict";var LO=Bn(),jm=ci(),PO=kn(),UO=ie(),qO=Ie(),DO=Wm(),kO=Object.prototype,NO=kO.hasOwnProperty;function Gn(e){if(qO(e)&&!UO(e)&&!(e instanceof LO)){if(e instanceof jm)return e;if(NO.call(e,"__wrapped__"))return DO(e)}return new jm(e)}a(Gn,"lodash");Gn.prototype=PO.prototype;Gn.prototype.constructor=Gn;Qm.exports=Gn});var Vm=c((aV,Km)=>{"use strict";var BO=Bn(),MO=ui(),GO=Mm(),FO=$m();function WO(e){var t=GO(e),r=FO[t];if(typeof r!="function"||!(t in BO.prototype))return!1;if(e===r)return!0;var n=MO(r);return!!n&&e===n[0]}a(WO,"isLaziable");Km.exports=WO});var pi=c((oV,Ym)=>{"use strict";var jO=oi(),QO=No(),$O=QO(jO);Ym.exports=$O});var zm=c((sV,Hm)=>{"use strict";var KO=/\{\n\/\* \[wrapped with (.+)\] \*/,VO=/,? & /;function YO(e){var t=e.match(KO);return t?t[1].split(VO):[]}a(YO,"getWrapDetails");Hm.exports=YO});var Xm=c((uV,Jm)=>{"use strict";var HO=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/;function zO(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(HO,`{
1
+ "use strict";var kI=Object.create;var Tr=Object.defineProperty;var DI=Object.getOwnPropertyDescriptor;var BI=Object.getOwnPropertyNames;var NI=Object.getPrototypeOf,MI=Object.prototype.hasOwnProperty;var a=(e,t)=>Tr(e,"name",{value:t,configurable:!0});var p=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),E=(e,t)=>{for(var r in t)Tr(e,r,{get:t[r],enumerable:!0})},ju=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of BI(t))!MI.call(e,o)&&o!==r&&Tr(e,o,{get:()=>t[o],enumerable:!(n=DI(t,o))||n.enumerable});return e};var U=(e,t,r)=>(r=e!=null?kI(NI(e)):{},ju(t||!e||!e.__esModule?Tr(r,"default",{value:e,enumerable:!0}):r,e)),GI=e=>ju(Tr({},"__esModule",{value:!0}),e);var en=p((O0,xc)=>{"use strict";function BS(e,t){for(var r=-1,n=t.length,o=e.length;++r<n;)e[o+r]=t[r];return e}a(BS,"arrayPush");xc.exports=BS});var Lo=p((P0,Cc)=>{"use strict";var NS=typeof global=="object"&&global&&global.Object===Object&&global;Cc.exports=NS});var pe=p((U0,Oc)=>{"use strict";var MS=Lo(),GS=typeof self=="object"&&self&&self.Object===Object&&self,FS=MS||GS||Function("return this")();Oc.exports=FS});var Ct=p((q0,Lc)=>{"use strict";var WS=pe(),jS=WS.Symbol;Lc.exports=jS});var kc=p((k0,qc)=>{"use strict";var Pc=Ct(),Uc=Object.prototype,QS=Uc.hasOwnProperty,$S=Uc.toString,Xr=Pc?Pc.toStringTag:void 0;function KS(e){var t=QS.call(e,Xr),r=e[Xr];try{e[Xr]=void 0;var n=!0}catch{}var o=$S.call(e);return n&&(t?e[Xr]=r:delete e[Xr]),o}a(KS,"getRawTag");qc.exports=KS});var Bc=p((B0,Dc)=>{"use strict";var VS=Object.prototype,HS=VS.toString;function YS(e){return HS.call(e)}a(YS,"objectToString");Dc.exports=YS});var ht=p((M0,Gc)=>{"use strict";var Nc=Ct(),zS=kc(),JS=Bc(),XS="[object Null]",ZS="[object Undefined]",Mc=Nc?Nc.toStringTag:void 0;function ew(e){return e==null?e===void 0?ZS:XS:Mc&&Mc in Object(e)?zS(e):JS(e)}a(ew,"baseGetTag");Gc.exports=ew});var Ie=p((F0,Fc)=>{"use strict";function tw(e){return e!=null&&typeof e=="object"}a(tw,"isObjectLike");Fc.exports=tw});var jc=p((j0,Wc)=>{"use strict";var rw=ht(),aw=Ie(),nw="[object Arguments]";function ow(e){return aw(e)&&rw(e)==nw}a(ow,"baseIsArguments");Wc.exports=ow});var Zr=p(($0,Kc)=>{"use strict";var Qc=jc(),sw=Ie(),$c=Object.prototype,iw=$c.hasOwnProperty,uw=$c.propertyIsEnumerable,cw=Qc(function(){return arguments}())?Qc:function(e){return sw(e)&&iw.call(e,"callee")&&!uw.call(e,"callee")};Kc.exports=cw});var ie=p((K0,Vc)=>{"use strict";var pw=Array.isArray;Vc.exports=pw});var Jc=p((V0,zc)=>{"use strict";var Hc=Ct(),lw=Zr(),dw=ie(),Yc=Hc?Hc.isConcatSpreadable:void 0;function fw(e){return dw(e)||lw(e)||!!(Yc&&e&&e[Yc])}a(fw,"isFlattenable");zc.exports=fw});var Po=p((Y0,Zc)=>{"use strict";var mw=en(),gw=Jc();function Xc(e,t,r,n,o){var s=-1,i=e.length;for(r||(r=gw),o||(o=[]);++s<i;){var u=e[s];t>0&&r(u)?t>1?Xc(u,t-1,r,n,o):mw(o,u):n||(o[o.length]=u)}return o}a(Xc,"baseFlatten");Zc.exports=Xc});var ea=p((J0,ep)=>{"use strict";function hw(e){return e}a(hw,"identity");ep.exports=hw});var tn=p((Z0,tp)=>{"use strict";function yw(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(yw,"apply");tp.exports=yw});var Uo=p((tF,ap)=>{"use strict";var Aw=tn(),rp=Math.max;function bw(e,t,r){return t=rp(t===void 0?e.length-1:t,0),function(){for(var n=arguments,o=-1,s=rp(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),Aw(e,this,u)}}a(bw,"overRest");ap.exports=bw});var op=p((aF,np)=>{"use strict";function Iw(e){return function(){return e}}a(Iw,"constant");np.exports=Iw});var Ce=p((oF,sp)=>{"use strict";function Sw(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}a(Sw,"isObject");sp.exports=Sw});var ta=p((iF,ip)=>{"use strict";var ww=ht(),Ew=Ce(),Tw="[object AsyncFunction]",Rw="[object Function]",vw="[object GeneratorFunction]",_w="[object Proxy]";function xw(e){if(!Ew(e))return!1;var t=ww(e);return t==Rw||t==vw||t==Tw||t==_w}a(xw,"isFunction");ip.exports=xw});var cp=p((cF,up)=>{"use strict";var Cw=pe(),Ow=Cw["__core-js_shared__"];up.exports=Ow});var dp=p((pF,lp)=>{"use strict";var qo=cp(),pp=function(){var e=/[^.]+$/.exec(qo&&qo.keys&&qo.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function Lw(e){return!!pp&&pp in e}a(Lw,"isMasked");lp.exports=Lw});var ko=p((dF,fp)=>{"use strict";var Pw=Function.prototype,Uw=Pw.toString;function qw(e){if(e!=null){try{return Uw.call(e)}catch{}try{return e+""}catch{}}return""}a(qw,"toSource");fp.exports=qw});var gp=p((mF,mp)=>{"use strict";var kw=ta(),Dw=dp(),Bw=Ce(),Nw=ko(),Mw=/[\\^$.*+?()[\]{}|]/g,Gw=/^\[object .+?Constructor\]$/,Fw=Function.prototype,Ww=Object.prototype,jw=Fw.toString,Qw=Ww.hasOwnProperty,$w=RegExp("^"+jw.call(Qw).replace(Mw,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function Kw(e){if(!Bw(e)||Dw(e))return!1;var t=kw(e)?$w:Gw;return t.test(Nw(e))}a(Kw,"baseIsNative");mp.exports=Kw});var yp=p((hF,hp)=>{"use strict";function Vw(e,t){return e?.[t]}a(Vw,"getValue");hp.exports=Vw});var yt=p((AF,Ap)=>{"use strict";var Hw=gp(),Yw=yp();function zw(e,t){var r=Yw(e,t);return Hw(r)?r:void 0}a(zw,"getNative");Ap.exports=zw});var Do=p((IF,bp)=>{"use strict";var Jw=yt(),Xw=function(){try{var e=Jw(Object,"defineProperty");return e({},"",{}),e}catch{}}();bp.exports=Xw});var wp=p((SF,Sp)=>{"use strict";var Zw=op(),Ip=Do(),eE=ea(),tE=Ip?function(e,t){return Ip(e,"toString",{configurable:!0,enumerable:!1,value:Zw(t),writable:!0})}:eE;Sp.exports=tE});var Bo=p((wF,Ep)=>{"use strict";var rE=800,aE=16,nE=Date.now;function oE(e){var t=0,r=0;return function(){var n=nE(),o=aE-(n-r);if(r=n,o>0){if(++t>=rE)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}a(oE,"shortOut");Ep.exports=oE});var rn=p((TF,Tp)=>{"use strict";var sE=wp(),iE=Bo(),uE=iE(sE);Tp.exports=uE});var No=p((RF,Rp)=>{"use strict";var cE=ea(),pE=Uo(),lE=rn();function dE(e,t){return lE(pE(e,t,cE),e+"")}a(dE,"baseRest");Rp.exports=dE});var ra=p((_F,vp)=>{"use strict";var fE=yt(),mE=fE(Object,"create");vp.exports=mE});var Cp=p((xF,xp)=>{"use strict";var _p=ra();function gE(){this.__data__=_p?_p(null):{},this.size=0}a(gE,"hashClear");xp.exports=gE});var Lp=p((OF,Op)=>{"use strict";function hE(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}a(hE,"hashDelete");Op.exports=hE});var Up=p((PF,Pp)=>{"use strict";var yE=ra(),AE="__lodash_hash_undefined__",bE=Object.prototype,IE=bE.hasOwnProperty;function SE(e){var t=this.__data__;if(yE){var r=t[e];return r===AE?void 0:r}return IE.call(t,e)?t[e]:void 0}a(SE,"hashGet");Pp.exports=SE});var kp=p((qF,qp)=>{"use strict";var wE=ra(),EE=Object.prototype,TE=EE.hasOwnProperty;function RE(e){var t=this.__data__;return wE?t[e]!==void 0:TE.call(t,e)}a(RE,"hashHas");qp.exports=RE});var Bp=p((DF,Dp)=>{"use strict";var vE=ra(),_E="__lodash_hash_undefined__";function xE(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=vE&&t===void 0?_E:t,this}a(xE,"hashSet");Dp.exports=xE});var Mp=p((NF,Np)=>{"use strict";var CE=Cp(),OE=Lp(),LE=Up(),PE=kp(),UE=Bp();function zt(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(zt,"Hash");zt.prototype.clear=CE;zt.prototype.delete=OE;zt.prototype.get=LE;zt.prototype.has=PE;zt.prototype.set=UE;Np.exports=zt});var Fp=p((GF,Gp)=>{"use strict";function qE(){this.__data__=[],this.size=0}a(qE,"listCacheClear");Gp.exports=qE});var Jt=p((WF,Wp)=>{"use strict";function kE(e,t){return e===t||e!==e&&t!==t}a(kE,"eq");Wp.exports=kE});var aa=p((QF,jp)=>{"use strict";var DE=Jt();function BE(e,t){for(var r=e.length;r--;)if(DE(e[r][0],t))return r;return-1}a(BE,"assocIndexOf");jp.exports=BE});var $p=p((KF,Qp)=>{"use strict";var NE=aa(),ME=Array.prototype,GE=ME.splice;function FE(e){var t=this.__data__,r=NE(t,e);if(r<0)return!1;var n=t.length-1;return r==n?t.pop():GE.call(t,r,1),--this.size,!0}a(FE,"listCacheDelete");Qp.exports=FE});var Vp=p((HF,Kp)=>{"use strict";var WE=aa();function jE(e){var t=this.__data__,r=WE(t,e);return r<0?void 0:t[r][1]}a(jE,"listCacheGet");Kp.exports=jE});var Yp=p((zF,Hp)=>{"use strict";var QE=aa();function $E(e){return QE(this.__data__,e)>-1}a($E,"listCacheHas");Hp.exports=$E});var Jp=p((XF,zp)=>{"use strict";var KE=aa();function VE(e,t){var r=this.__data__,n=KE(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this}a(VE,"listCacheSet");zp.exports=VE});var na=p((eW,Xp)=>{"use strict";var HE=Fp(),YE=$p(),zE=Vp(),JE=Yp(),XE=Jp();function Xt(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(Xt,"ListCache");Xt.prototype.clear=HE;Xt.prototype.delete=YE;Xt.prototype.get=zE;Xt.prototype.has=JE;Xt.prototype.set=XE;Xp.exports=Xt});var an=p((rW,Zp)=>{"use strict";var ZE=yt(),eT=pe(),tT=ZE(eT,"Map");Zp.exports=tT});var rl=p((aW,tl)=>{"use strict";var el=Mp(),rT=na(),aT=an();function nT(){this.size=0,this.__data__={hash:new el,map:new(aT||rT),string:new el}}a(nT,"mapCacheClear");tl.exports=nT});var nl=p((oW,al)=>{"use strict";function oT(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}a(oT,"isKeyable");al.exports=oT});var oa=p((iW,ol)=>{"use strict";var sT=nl();function iT(e,t){var r=e.__data__;return sT(t)?r[typeof t=="string"?"string":"hash"]:r.map}a(iT,"getMapData");ol.exports=iT});var il=p((cW,sl)=>{"use strict";var uT=oa();function cT(e){var t=uT(this,e).delete(e);return this.size-=t?1:0,t}a(cT,"mapCacheDelete");sl.exports=cT});var cl=p((lW,ul)=>{"use strict";var pT=oa();function lT(e){return pT(this,e).get(e)}a(lT,"mapCacheGet");ul.exports=lT});var ll=p((fW,pl)=>{"use strict";var dT=oa();function fT(e){return dT(this,e).has(e)}a(fT,"mapCacheHas");pl.exports=fT});var fl=p((gW,dl)=>{"use strict";var mT=oa();function gT(e,t){var r=mT(this,e),n=r.size;return r.set(e,t),this.size+=r.size==n?0:1,this}a(gT,"mapCacheSet");dl.exports=gT});var nn=p((yW,ml)=>{"use strict";var hT=rl(),yT=il(),AT=cl(),bT=ll(),IT=fl();function Zt(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(Zt,"MapCache");Zt.prototype.clear=hT;Zt.prototype.delete=yT;Zt.prototype.get=AT;Zt.prototype.has=bT;Zt.prototype.set=IT;ml.exports=Zt});var hl=p((bW,gl)=>{"use strict";var ST="__lodash_hash_undefined__";function wT(e){return this.__data__.set(e,ST),this}a(wT,"setCacheAdd");gl.exports=wT});var Al=p((SW,yl)=>{"use strict";function ET(e){return this.__data__.has(e)}a(ET,"setCacheHas");yl.exports=ET});var Mo=p((EW,bl)=>{"use strict";var TT=nn(),RT=hl(),vT=Al();function on(e){var t=-1,r=e==null?0:e.length;for(this.__data__=new TT;++t<r;)this.add(e[t])}a(on,"SetCache");on.prototype.add=on.prototype.push=RT;on.prototype.has=vT;bl.exports=on});var Sl=p((RW,Il)=>{"use strict";function _T(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(_T,"baseFindIndex");Il.exports=_T});var El=p((_W,wl)=>{"use strict";function xT(e){return e!==e}a(xT,"baseIsNaN");wl.exports=xT});var Rl=p((CW,Tl)=>{"use strict";function CT(e,t,r){for(var n=r-1,o=e.length;++n<o;)if(e[n]===t)return n;return-1}a(CT,"strictIndexOf");Tl.exports=CT});var _l=p((LW,vl)=>{"use strict";var OT=Sl(),LT=El(),PT=Rl();function UT(e,t,r){return t===t?PT(e,t,r):OT(e,LT,r)}a(UT,"baseIndexOf");vl.exports=UT});var Go=p((UW,xl)=>{"use strict";var qT=_l();function kT(e,t){var r=e==null?0:e.length;return!!r&&qT(e,t,0)>-1}a(kT,"arrayIncludes");xl.exports=kT});var Ol=p((kW,Cl)=>{"use strict";function DT(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(DT,"arrayIncludesWith");Cl.exports=DT});var Fo=p((BW,Ll)=>{"use strict";function BT(e,t){return e.has(t)}a(BT,"cacheHas");Ll.exports=BT});var Wo=p((MW,Pl)=>{"use strict";var NT=yt(),MT=pe(),GT=NT(MT,"Set");Pl.exports=GT});var jo=p((GW,Ul)=>{"use strict";function FT(){}a(FT,"noop");Ul.exports=FT});var sn=p((WW,ql)=>{"use strict";function WT(e){var t=-1,r=Array(e.size);return e.forEach(function(n){r[++t]=n}),r}a(WT,"setToArray");ql.exports=WT});var Dl=p((QW,kl)=>{"use strict";var Qo=Wo(),jT=jo(),QT=sn(),$T=1/0,KT=Qo&&1/QT(new Qo([,-0]))[1]==$T?function(e){return new Qo(e)}:jT;kl.exports=KT});var Nl=p(($W,Bl)=>{"use strict";var VT=Mo(),HT=Go(),YT=Ol(),zT=Fo(),JT=Dl(),XT=sn(),ZT=200;function eR(e,t,r){var n=-1,o=HT,s=e.length,i=!0,u=[],c=u;if(r)i=!1,o=YT;else if(s>=ZT){var m=t?null:JT(e);if(m)return XT(m);i=!1,o=zT,c=new VT}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(eR,"baseUniq");Bl.exports=eR});var un=p((VW,Ml)=>{"use strict";var tR=9007199254740991;function rR(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=tR}a(rR,"isLength");Ml.exports=rR});var er=p((YW,Gl)=>{"use strict";var aR=ta(),nR=un();function oR(e){return e!=null&&nR(e.length)&&!aR(e)}a(oR,"isArrayLike");Gl.exports=oR});var $o=p((JW,Fl)=>{"use strict";var sR=er(),iR=Ie();function uR(e){return iR(e)&&sR(e)}a(uR,"isArrayLikeObject");Fl.exports=uR});var jl=p((ZW,Wl)=>{"use strict";var cR=Po(),pR=No(),lR=Nl(),dR=$o(),fR=pR(function(e){return lR(cR(e,1,dR,!0))});Wl.exports=fR});var $l=p((e1,Ql)=>{"use strict";var mR=na();function gR(){this.__data__=new mR,this.size=0}a(gR,"stackClear");Ql.exports=gR});var Vl=p((r1,Kl)=>{"use strict";function hR(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r}a(hR,"stackDelete");Kl.exports=hR});var Yl=p((n1,Hl)=>{"use strict";function yR(e){return this.__data__.get(e)}a(yR,"stackGet");Hl.exports=yR});var Jl=p((s1,zl)=>{"use strict";function AR(e){return this.__data__.has(e)}a(AR,"stackHas");zl.exports=AR});var Zl=p((u1,Xl)=>{"use strict";var bR=na(),IR=an(),SR=nn(),wR=200;function ER(e,t){var r=this.__data__;if(r instanceof bR){var n=r.__data__;if(!IR||n.length<wR-1)return n.push([e,t]),this.size=++r.size,this;r=this.__data__=new SR(n)}return r.set(e,t),this.size=r.size,this}a(ER,"stackSet");Xl.exports=ER});var sa=p((p1,ed)=>{"use strict";var TR=na(),RR=$l(),vR=Vl(),_R=Yl(),xR=Jl(),CR=Zl();function tr(e){var t=this.__data__=new TR(e);this.size=t.size}a(tr,"Stack");tr.prototype.clear=RR;tr.prototype.delete=vR;tr.prototype.get=_R;tr.prototype.has=xR;tr.prototype.set=CR;ed.exports=tr});var ia=p((d1,rd)=>{"use strict";var td=Do();function OR(e,t,r){t=="__proto__"&&td?td(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}a(OR,"baseAssignValue");rd.exports=OR});var Ko=p((m1,ad)=>{"use strict";var LR=ia(),PR=Jt();function UR(e,t,r){(r!==void 0&&!PR(e[t],r)||r===void 0&&!(t in e))&&LR(e,t,r)}a(UR,"assignMergeValue");ad.exports=UR});var od=p((h1,nd)=>{"use strict";function qR(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(qR,"createBaseFor");nd.exports=qR});var Vo=p((A1,sd)=>{"use strict";var kR=od(),DR=kR();sd.exports=DR});var Ho=p((ua,rr)=>{"use strict";var BR=pe(),pd=typeof ua=="object"&&ua&&!ua.nodeType&&ua,id=pd&&typeof rr=="object"&&rr&&!rr.nodeType&&rr,NR=id&&id.exports===pd,ud=NR?BR.Buffer:void 0,cd=ud?ud.allocUnsafe:void 0;function MR(e,t){if(t)return e.slice();var r=e.length,n=cd?cd(r):new e.constructor(r);return e.copy(n),n}a(MR,"cloneBuffer");rr.exports=MR});var Yo=p((I1,ld)=>{"use strict";var GR=pe(),FR=GR.Uint8Array;ld.exports=FR});var cn=p((S1,fd)=>{"use strict";var dd=Yo();function WR(e){var t=new e.constructor(e.byteLength);return new dd(t).set(new dd(e)),t}a(WR,"cloneArrayBuffer");fd.exports=WR});var zo=p((E1,md)=>{"use strict";var jR=cn();function QR(e,t){var r=t?jR(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.length)}a(QR,"cloneTypedArray");md.exports=QR});var ar=p((R1,gd)=>{"use strict";function $R(e,t){var r=-1,n=e.length;for(t||(t=Array(n));++r<n;)t[r]=e[r];return t}a($R,"copyArray");gd.exports=$R});var ca=p((_1,yd)=>{"use strict";var KR=Ce(),hd=Object.create,VR=function(){function e(){}return a(e,"object"),function(t){if(!KR(t))return{};if(hd)return hd(t);e.prototype=t;var r=new e;return e.prototype=void 0,r}}();yd.exports=VR});var Jo=p((C1,Ad)=>{"use strict";function HR(e,t){return function(r){return e(t(r))}}a(HR,"overArg");Ad.exports=HR});var pn=p((L1,bd)=>{"use strict";var YR=Jo(),zR=YR(Object.getPrototypeOf,Object);bd.exports=zR});var ln=p((P1,Id)=>{"use strict";var JR=Object.prototype;function XR(e){var t=e&&e.constructor,r=typeof t=="function"&&t.prototype||JR;return e===r}a(XR,"isPrototype");Id.exports=XR});var Xo=p((q1,Sd)=>{"use strict";var ZR=ca(),ev=pn(),tv=ln();function rv(e){return typeof e.constructor=="function"&&!tv(e)?ZR(ev(e)):{}}a(rv,"initCloneObject");Sd.exports=rv});var Ed=p((D1,wd)=>{"use strict";function av(){return!1}a(av,"stubFalse");wd.exports=av});var la=p((pa,nr)=>{"use strict";var nv=pe(),ov=Ed(),vd=typeof pa=="object"&&pa&&!pa.nodeType&&pa,Td=vd&&typeof nr=="object"&&nr&&!nr.nodeType&&nr,sv=Td&&Td.exports===vd,Rd=sv?nv.Buffer:void 0,iv=Rd?Rd.isBuffer:void 0,uv=iv||ov;nr.exports=uv});var Zo=p((N1,xd)=>{"use strict";var cv=ht(),pv=pn(),lv=Ie(),dv="[object Object]",fv=Function.prototype,mv=Object.prototype,_d=fv.toString,gv=mv.hasOwnProperty,hv=_d.call(Object);function yv(e){if(!lv(e)||cv(e)!=dv)return!1;var t=pv(e);if(t===null)return!0;var r=gv.call(t,"constructor")&&t.constructor;return typeof r=="function"&&r instanceof r&&_d.call(r)==hv}a(yv,"isPlainObject");xd.exports=yv});var Od=p((G1,Cd)=>{"use strict";var Av=ht(),bv=un(),Iv=Ie(),Sv="[object Arguments]",wv="[object Array]",Ev="[object Boolean]",Tv="[object Date]",Rv="[object Error]",vv="[object Function]",_v="[object Map]",xv="[object Number]",Cv="[object Object]",Ov="[object RegExp]",Lv="[object Set]",Pv="[object String]",Uv="[object WeakMap]",qv="[object ArrayBuffer]",kv="[object DataView]",Dv="[object Float32Array]",Bv="[object Float64Array]",Nv="[object Int8Array]",Mv="[object Int16Array]",Gv="[object Int32Array]",Fv="[object Uint8Array]",Wv="[object Uint8ClampedArray]",jv="[object Uint16Array]",Qv="[object Uint32Array]",N={};N[Dv]=N[Bv]=N[Nv]=N[Mv]=N[Gv]=N[Fv]=N[Wv]=N[jv]=N[Qv]=!0;N[Sv]=N[wv]=N[qv]=N[Ev]=N[kv]=N[Tv]=N[Rv]=N[vv]=N[_v]=N[xv]=N[Cv]=N[Ov]=N[Lv]=N[Pv]=N[Uv]=!1;function $v(e){return Iv(e)&&bv(e.length)&&!!N[Av(e)]}a($v,"baseIsTypedArray");Cd.exports=$v});var dn=p((W1,Ld)=>{"use strict";function Kv(e){return function(t){return e(t)}}a(Kv,"baseUnary");Ld.exports=Kv});var fn=p((da,or)=>{"use strict";var Vv=Lo(),Pd=typeof da=="object"&&da&&!da.nodeType&&da,fa=Pd&&typeof or=="object"&&or&&!or.nodeType&&or,Hv=fa&&fa.exports===Pd,es=Hv&&Vv.process,Yv=function(){try{var e=fa&&fa.require&&fa.require("util").types;return e||es&&es.binding&&es.binding("util")}catch{}}();or.exports=Yv});var mn=p((Q1,kd)=>{"use strict";var zv=Od(),Jv=dn(),Ud=fn(),qd=Ud&&Ud.isTypedArray,Xv=qd?Jv(qd):zv;kd.exports=Xv});var ts=p(($1,Dd)=>{"use strict";function Zv(e,t){if(!(t==="constructor"&&typeof e[t]=="function")&&t!="__proto__")return e[t]}a(Zv,"safeGet");Dd.exports=Zv});var rs=p((V1,Bd)=>{"use strict";var e_=ia(),t_=Jt(),r_=Object.prototype,a_=r_.hasOwnProperty;function n_(e,t,r){var n=e[t];(!(a_.call(e,t)&&t_(n,r))||r===void 0&&!(t in e))&&e_(e,t,r)}a(n_,"assignValue");Bd.exports=n_});var sr=p((Y1,Nd)=>{"use strict";var o_=rs(),s_=ia();function i_(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?s_(r,u,c):o_(r,u,c)}return r}a(i_,"copyObject");Nd.exports=i_});var Gd=p((J1,Md)=>{"use strict";function u_(e,t){for(var r=-1,n=Array(e);++r<e;)n[r]=t(r);return n}a(u_,"baseTimes");Md.exports=u_});var ma=p((Z1,Fd)=>{"use strict";var c_=9007199254740991,p_=/^(?:0|[1-9]\d*)$/;function l_(e,t){var r=typeof e;return t=t??c_,!!t&&(r=="number"||r!="symbol"&&p_.test(e))&&e>-1&&e%1==0&&e<t}a(l_,"isIndex");Fd.exports=l_});var as=p((tj,Wd)=>{"use strict";var d_=Gd(),f_=Zr(),m_=ie(),g_=la(),h_=ma(),y_=mn(),A_=Object.prototype,b_=A_.hasOwnProperty;function I_(e,t){var r=m_(e),n=!r&&f_(e),o=!r&&!n&&g_(e),s=!r&&!n&&!o&&y_(e),i=r||n||o||s,u=i?d_(e.length,String):[],c=u.length;for(var m in e)(t||b_.call(e,m))&&!(i&&(m=="length"||o&&(m=="offset"||m=="parent")||s&&(m=="buffer"||m=="byteLength"||m=="byteOffset")||h_(m,c)))&&u.push(m);return u}a(I_,"arrayLikeKeys");Wd.exports=I_});var Qd=p((aj,jd)=>{"use strict";function S_(e){var t=[];if(e!=null)for(var r in Object(e))t.push(r);return t}a(S_,"nativeKeysIn");jd.exports=S_});var Kd=p((oj,$d)=>{"use strict";var w_=Ce(),E_=ln(),T_=Qd(),R_=Object.prototype,v_=R_.hasOwnProperty;function __(e){if(!w_(e))return T_(e);var t=E_(e),r=[];for(var n in e)n=="constructor"&&(t||!v_.call(e,n))||r.push(n);return r}a(__,"baseKeysIn");$d.exports=__});var ir=p((ij,Vd)=>{"use strict";var x_=as(),C_=Kd(),O_=er();function L_(e){return O_(e)?x_(e,!0):C_(e)}a(L_,"keysIn");Vd.exports=L_});var Yd=p((cj,Hd)=>{"use strict";var P_=sr(),U_=ir();function q_(e){return P_(e,U_(e))}a(q_,"toPlainObject");Hd.exports=q_});var tf=p((lj,ef)=>{"use strict";var zd=Ko(),k_=Ho(),D_=zo(),B_=ar(),N_=Xo(),Jd=Zr(),Xd=ie(),M_=$o(),G_=la(),F_=ta(),W_=Ce(),j_=Zo(),Q_=mn(),Zd=ts(),$_=Yd();function K_(e,t,r,n,o,s,i){var u=Zd(e,r),c=Zd(t,r),m=i.get(c);if(m){zd(e,r,m);return}var g=s?s(u,c,r+"",e,t,i):void 0,h=g===void 0;if(h){var y=Xd(c),S=!y&&G_(c),O=!y&&!S&&Q_(c);g=c,y||S||O?Xd(u)?g=u:M_(u)?g=B_(u):S?(h=!1,g=k_(c,!0)):O?(h=!1,g=D_(c,!0)):g=[]:j_(c)||Jd(c)?(g=u,Jd(u)?g=$_(u):(!W_(u)||F_(u))&&(g=N_(c))):h=!1}h&&(i.set(c,g),o(g,c,n,s,i),i.delete(c)),zd(e,r,g)}a(K_,"baseMergeDeep");ef.exports=K_});var nf=p((fj,af)=>{"use strict";var V_=sa(),H_=Ko(),Y_=Vo(),z_=tf(),J_=Ce(),X_=ir(),Z_=ts();function rf(e,t,r,n,o){e!==t&&Y_(t,function(s,i){if(o||(o=new V_),J_(s))z_(e,t,i,r,rf,n,o);else{var u=n?n(Z_(e,i),s,i+"",e,t,o):void 0;u===void 0&&(u=s),H_(e,i,u)}},X_)}a(rf,"baseMerge");af.exports=rf});var sf=p((gj,of)=>{"use strict";var ex=Jt(),tx=er(),rx=ma(),ax=Ce();function nx(e,t,r){if(!ax(r))return!1;var n=typeof t;return(n=="number"?tx(r)&&rx(t,r.length):n=="string"&&t in r)?ex(r[t],e):!1}a(nx,"isIterateeCall");of.exports=nx});var cf=p((yj,uf)=>{"use strict";var ox=No(),sx=sf();function ix(e){return ox(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&&sx(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(ix,"createAssigner");uf.exports=ix});var ns=p((bj,pf)=>{"use strict";var ux=nf(),cx=cf(),px=cx(function(e,t,r){ux(e,t,r)});pf.exports=px});var fm=p(he=>{"use strict";he.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"};he.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"]};he.aryRearg={2:[1,0],3:[2,0,1],4:[3,2,0,1]};he.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};he.iterateeRearg={mapKeys:[1],reduceRight:[1,0]};he.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]};he.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}};he.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}};he.realToAlias=function(){var e=Object.prototype.hasOwnProperty,t=he.aliasToReal,r={};for(var n in t){var o=t[n];e.call(r,o)?r[o].push(n):r[o]=[n]}return r}();he.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"};he.skipFixed={castArray:!0,flow:!0,flowRight:!0,iteratee:!0,mixin:!0,rearg:!0,runInContext:!0};he.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 Zs=p((_K,mm)=>{"use strict";mm.exports={}});var Am=p((xK,ym)=>{"use strict";var Z=fm(),VC=Zs(),gm=Array.prototype.push;function HC(e,t){return t==2?function(r,n){return e.apply(void 0,arguments)}:function(r){return e.apply(void 0,arguments)}}a(HC,"baseArity");function ei(e,t){return t==2?function(r,n){return e(r,n)}:function(r){return e(r)}}a(ei,"baseAry");function hm(e){for(var t=e?e.length:0,r=Array(t);t--;)r[t]=e[t];return r}a(hm,"cloneArray");function YC(e){return function(t){return e({},t)}}a(YC,"createCloner");function zC(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&&gm.apply(i,s),t!=n&&gm.apply(i,o.slice(t+1)),e.apply(this,i)}}a(zC,"flatSpread");function ti(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(ti,"wrapImmutable");function ri(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:VC,c="curry"in n&&n.curry,m="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},S=y.ary,O=y.assign,x=y.clone,_=y.curry,v=y.forEach,q=y.isArray,ke=y.isError,Re=y.isFunction,lt=y.isWeakMap,jt=y.keys,Sr=y.rearg,wr=y.toInteger,vI=y.toPath,Du=jt(Z.aryMethod),_I={castArray:function(w){return function(){var A=arguments[0];return q(A)?w(hm(A)):w.apply(void 0,arguments)}},iteratee:function(w){return function(){var A=arguments[0],I=arguments[1],R=w(A,I),L=R.length;return i.cap&&typeof I=="number"?(I=I>2?I-2:1,L&&L<=I?R:ei(R,I)):R}},mixin:function(w){return function(A){var I=this;if(!Re(I))return w(I,Object(A));var R=[];return v(jt(A),function(L){Re(A[L])&&R.push([L,I.prototype[L]])}),w(I,Object(A)),v(R,function(L){var ue=L[1];Re(ue)?I.prototype[L[0]]=ue:delete I.prototype[L[0]]}),I}},nthArg:function(w){return function(A){var I=A<0?1:wr(A)+1;return _(w(A),I)}},rearg:function(w){return function(A,I){var R=I?I.length:0;return _(w(A,I),R)}},runInContext:function(w){return function(A){return ri(e,w(A),n)}}};function xI(w,A){if(i.cap){var I=Z.iterateeRearg[w];if(I)return UI(A,I);var R=!o&&Z.iterateeAry[w];if(R)return PI(A,R)}return A}a(xI,"castCap");function CI(w,A,I){return c||i.curry&&I>1?_(A,I):A}a(CI,"castCurry");function Bu(w,A,I){if(i.fixed&&(m||!Z.skipFixed[w])){var R=Z.methodSpread[w],L=R&&R.start;return L===void 0?S(A,I):zC(A,L)}return A}a(Bu,"castFixed");function Nu(w,A,I){return i.rearg&&I>1&&(g||!Z.skipRearg[w])?Sr(A,Z.methodRearg[w]||Z.aryRearg[I]):A}a(Nu,"castRearg");function OI(w,A){A=vI(A);for(var I=-1,R=A.length,L=R-1,ue=x(Object(w)),je=ue;je!=null&&++I<R;){var ve=A[I],Qe=je[ve];Qe!=null&&!(Re(Qe)||ke(Qe)||lt(Qe))&&(je[ve]=x(I==L?Qe:Object(Qe))),je=je[ve]}return ue}a(OI,"cloneByPath");function LI(w){return Ae.runInContext.convert(w)(void 0)}a(LI,"convertLib");function Mu(w,A){var I=Z.aliasToReal[w]||w,R=Z.remap[I]||I,L=n;return function(ue){var je=o?h:y,ve=o?h[R]:A,Qe=O(O({},L),ue);return ri(je,I,ve,Qe)}}a(Mu,"createConverter");function PI(w,A){return Gu(w,function(I){return typeof I=="function"?ei(I,A):I})}a(PI,"iterateeAry");function UI(w,A){return Gu(w,function(I){var R=A.length;return HC(Sr(ei(I,R),A),R)})}a(UI,"iterateeRearg");function Gu(w,A){return function(){var I=arguments.length;if(!I)return w();for(var R=Array(I);I--;)R[I]=arguments[I];var L=i.rearg?0:I-1;return R[L]=A(R[L]),w.apply(void 0,R)}}a(Gu,"overArg");function Fu(w,A,I){var R,L=Z.aliasToReal[w]||w,ue=A,je=_I[L];return je?ue=je(A):i.immutable&&(Z.mutate.array[L]?ue=ti(A,hm):Z.mutate.object[L]?ue=ti(A,YC(A)):Z.mutate.set[L]&&(ue=ti(A,OI))),v(Du,function(ve){return v(Z.aryMethod[ve],function(Qe){if(L==Qe){var Wu=Z.methodSpread[L],qI=Wu&&Wu.afterRearg;return R=qI?Bu(L,Nu(L,ue,ve),ve):Nu(L,Bu(L,ue,ve),ve),R=xI(L,R),R=CI(L,R,ve),!1}}),!R}),R||(R=ue),R==A&&(R=c?_(R,1):function(){return A.apply(this,arguments)}),R.convert=Mu(L,A),R.placeholder=A.placeholder=I,R}if(a(Fu,"wrap"),!s)return Fu(t,r,u);var Ae=r,Er=[];return v(Du,function(w){v(Z.aryMethod[w],function(A){var I=Ae[Z.remap[A]||A];I&&Er.push([A,Fu(A,I,Ae)])})}),v(jt(Ae),function(w){var A=Ae[w];if(typeof A=="function"){for(var I=Er.length;I--;)if(Er[I][0]==w)return;A.convert=Mu(w,A),Er.push([w,A])}}),v(Er,function(w){Ae[w[0]]=w[1]}),Ae.convert=LI,Ae.placeholder=Ae,v(jt(Ae),function(w){v(Z.realToAlias[w]||[],function(A){Ae[A]=Ae[w]})}),Ae}a(ri,"baseConvert");ym.exports=ri});var ai=p((OK,bm)=>{"use strict";var JC=yt(),XC=pe(),ZC=JC(XC,"WeakMap");bm.exports=ZC});var ni=p((LK,Sm)=>{"use strict";var Im=ai(),eO=Im&&new Im;Sm.exports=eO});var oi=p((PK,Em)=>{"use strict";var tO=ea(),wm=ni(),rO=wm?function(e,t){return wm.set(e,t),e}:tO;Em.exports=rO});var Ra=p((UK,Tm)=>{"use strict";var aO=ca(),nO=Ce();function oO(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=aO(e.prototype),n=e.apply(r,t);return nO(n)?n:r}}a(oO,"createCtor");Tm.exports=oO});var vm=p((kK,Rm)=>{"use strict";var sO=Ra(),iO=pe(),uO=1;function cO(e,t,r){var n=t&uO,o=sO(e);function s(){var i=this&&this!==iO&&this instanceof s?o:e;return i.apply(n?r:this,arguments)}return a(s,"wrapper"),s}a(cO,"createBind");Rm.exports=cO});var si=p((BK,_m)=>{"use strict";var pO=Math.max;function lO(e,t,r,n){for(var o=-1,s=e.length,i=r.length,u=-1,c=t.length,m=pO(s-i,0),g=Array(c+m),h=!n;++u<c;)g[u]=t[u];for(;++o<i;)(h||o<s)&&(g[r[o]]=e[o]);for(;m--;)g[u++]=e[o++];return g}a(lO,"composeArgs");_m.exports=lO});var ii=p((MK,xm)=>{"use strict";var dO=Math.max;function fO(e,t,r,n){for(var o=-1,s=e.length,i=-1,u=r.length,c=-1,m=t.length,g=dO(s-u,0),h=Array(g+m),y=!n;++o<g;)h[o]=e[o];for(var S=o;++c<m;)h[S+c]=t[c];for(;++i<u;)(y||o<s)&&(h[S+r[i]]=e[o++]);return h}a(fO,"composeArgsRight");xm.exports=fO});var Om=p((FK,Cm)=>{"use strict";function mO(e,t){for(var r=e.length,n=0;r--;)e[r]===t&&++n;return n}a(mO,"countHolders");Cm.exports=mO});var Dn=p((jK,Lm)=>{"use strict";function gO(){}a(gO,"baseLodash");Lm.exports=gO});var Nn=p(($K,Pm)=>{"use strict";var hO=ca(),yO=Dn(),AO=4294967295;function Bn(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=AO,this.__views__=[]}a(Bn,"LazyWrapper");Bn.prototype=hO(yO.prototype);Bn.prototype.constructor=Bn;Pm.exports=Bn});var ui=p((VK,qm)=>{"use strict";var Um=ni(),bO=jo(),IO=Um?function(e){return Um.get(e)}:bO;qm.exports=IO});var Dm=p((HK,km)=>{"use strict";var SO={};km.exports=SO});var Mm=p((YK,Nm)=>{"use strict";var Bm=Dm(),wO=Object.prototype,EO=wO.hasOwnProperty;function TO(e){for(var t=e.name+"",r=Bm[t],n=EO.call(Bm,t)?r.length:0;n--;){var o=r[n],s=o.func;if(s==null||s==e)return o.name}return t}a(TO,"getFuncName");Nm.exports=TO});var ci=p((JK,Gm)=>{"use strict";var RO=ca(),vO=Dn();function Mn(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=void 0}a(Mn,"LodashWrapper");Mn.prototype=RO(vO.prototype);Mn.prototype.constructor=Mn;Gm.exports=Mn});var Wm=p((ZK,Fm)=>{"use strict";var _O=Nn(),xO=ci(),CO=ar();function OO(e){if(e instanceof _O)return e.clone();var t=new xO(e.__wrapped__,e.__chain__);return t.__actions__=CO(e.__actions__),t.__index__=e.__index__,t.__values__=e.__values__,t}a(OO,"wrapperClone");Fm.exports=OO});var $m=p((tV,Qm)=>{"use strict";var LO=Nn(),jm=ci(),PO=Dn(),UO=ie(),qO=Ie(),kO=Wm(),DO=Object.prototype,BO=DO.hasOwnProperty;function Gn(e){if(qO(e)&&!UO(e)&&!(e instanceof LO)){if(e instanceof jm)return e;if(BO.call(e,"__wrapped__"))return kO(e)}return new jm(e)}a(Gn,"lodash");Gn.prototype=PO.prototype;Gn.prototype.constructor=Gn;Qm.exports=Gn});var Vm=p((aV,Km)=>{"use strict";var NO=Nn(),MO=ui(),GO=Mm(),FO=$m();function WO(e){var t=GO(e),r=FO[t];if(typeof r!="function"||!(t in NO.prototype))return!1;if(e===r)return!0;var n=MO(r);return!!n&&e===n[0]}a(WO,"isLaziable");Km.exports=WO});var pi=p((oV,Hm)=>{"use strict";var jO=oi(),QO=Bo(),$O=QO(jO);Hm.exports=$O});var zm=p((sV,Ym)=>{"use strict";var KO=/\{\n\/\* \[wrapped with (.+)\] \*/,VO=/,? & /;function HO(e){var t=e.match(KO);return t?t[1].split(VO):[]}a(HO,"getWrapDetails");Ym.exports=HO});var Xm=p((uV,Jm)=>{"use strict";var YO=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/;function zO(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(YO,`{
2
2
  /* [wrapped with `+t+`] */
3
- `)}a(zO,"insertWrapDetails");Jm.exports=zO});var Fn=c((pV,Zm)=>{"use strict";function JO(e,t){for(var r=-1,n=e==null?0:e.length;++r<n&&t(e[r],r,e)!==!1;);return e}a(JO,"arrayEach");Zm.exports=JO});var tg=c((dV,eg)=>{"use strict";var XO=Fn(),ZO=Go(),eL=1,tL=2,rL=8,aL=16,nL=32,oL=64,sL=128,iL=256,uL=512,cL=[["ary",sL],["bind",eL],["bindKey",tL],["curry",rL],["curryRight",aL],["flip",uL],["partial",nL],["partialRight",oL],["rearg",iL]];function pL(e,t){return XO(cL,function(r){var n="_."+r[0];t&r[1]&&!ZO(e,n)&&e.push(n)}),e.sort()}a(pL,"updateWrapDetails");eg.exports=pL});var li=c((mV,rg)=>{"use strict";var lL=zm(),dL=Xm(),fL=rn(),mL=tg();function gL(e,t,r){var n=t+"";return fL(e,dL(n,mL(lL(n),r)))}a(gL,"setWrapToString");rg.exports=gL});var di=c((yV,og)=>{"use strict";var yL=Vm(),hL=pi(),AL=li(),bL=1,IL=2,SL=4,wL=8,ag=32,ng=64;function EL(e,t,r,n,o,s,i,u,p,m){var g=t&wL,y=g?i:void 0,h=g?void 0:i,S=g?s:void 0,O=g?void 0:s;t|=g?ag:ng,t&=~(g?ng:ag),t&SL||(t&=~(bL|IL));var x=[e,t,o,S,y,O,h,u,p,m],_=r.apply(void 0,x);return yL(e)&&hL(_,x),_.placeholder=n,AL(_,e,t)}a(EL,"createRecurry");og.exports=EL});var fi=c((AV,sg)=>{"use strict";function TL(e){var t=e;return t.placeholder}a(TL,"getHolder");sg.exports=TL});var ug=c((IV,ig)=>{"use strict";var RL=ar(),vL=ma(),_L=Math.min;function xL(e,t){for(var r=e.length,n=_L(t.length,r),o=RL(e);n--;){var s=t[n];e[n]=vL(s,r)?o[s]:void 0}return e}a(xL,"reorder");ig.exports=xL});var Wn=c((wV,pg)=>{"use strict";var cg="__lodash_placeholder__";function CL(e,t){for(var r=-1,n=e.length,o=0,s=[];++r<n;){var i=e[r];(i===t||i===cg)&&(e[r]=cg,s[o++]=r)}return s}a(CL,"replaceHolders");pg.exports=CL});var mi=c((TV,fg)=>{"use strict";var OL=si(),LL=ii(),PL=Om(),lg=Ra(),UL=di(),qL=fi(),DL=ug(),kL=Wn(),NL=pe(),BL=1,ML=2,GL=8,FL=16,WL=128,jL=512;function dg(e,t,r,n,o,s,i,u,p,m){var g=t&WL,y=t&BL,h=t&ML,S=t&(GL|FL),O=t&jL,x=h?void 0:lg(e);function _(){for(var v=arguments.length,q=Array(v),De=v;De--;)q[De]=arguments[De];if(S)var Re=qL(_),lt=PL(q,Re);if(n&&(q=OL(q,n,o,S)),s&&(q=LL(q,s,i,S)),v-=lt,S&&v<m){var jt=kL(q,Re);return UL(e,t,dg,_.placeholder,r,q,jt,u,p,m-v)}var Sr=y?r:this,wr=h?Sr[e]:e;return v=q.length,u?q=DL(q,u):O&&v>1&&q.reverse(),g&&p<v&&(q.length=p),this&&this!==NL&&this instanceof _&&(wr=x||lg(wr)),wr.apply(Sr,q)}return a(_,"wrapper"),_}a(dg,"createHybrid");fg.exports=dg});var gg=c((vV,mg)=>{"use strict";var QL=tn(),$L=Ra(),KL=mi(),VL=di(),YL=fi(),HL=Wn(),zL=pe();function JL(e,t,r){var n=$L(e);function o(){for(var s=arguments.length,i=Array(s),u=s,p=YL(o);u--;)i[u]=arguments[u];var m=s<3&&i[0]!==p&&i[s-1]!==p?[]:HL(i,p);if(s-=m.length,s<r)return VL(e,t,KL,o.placeholder,void 0,i,m,void 0,void 0,r-s);var g=this&&this!==zL&&this instanceof o?n:e;return QL(g,this,i)}return a(o,"wrapper"),o}a(JL,"createCurry");mg.exports=JL});var hg=c((xV,yg)=>{"use strict";var XL=tn(),ZL=Ra(),eP=pe(),tP=1;function rP(e,t,r,n){var o=t&tP,s=ZL(e);function i(){for(var u=-1,p=arguments.length,m=-1,g=n.length,y=Array(g+p),h=this&&this!==eP&&this instanceof i?s:e;++m<g;)y[m]=n[m];for(;p--;)y[m++]=arguments[++u];return XL(h,o?r:this,y)}return a(i,"wrapper"),i}a(rP,"createPartial");yg.exports=rP});var Eg=c((OV,wg)=>{"use strict";var aP=si(),nP=ii(),Ag=Wn(),bg="__lodash_placeholder__",gi=1,oP=2,sP=4,Ig=8,va=128,Sg=256,iP=Math.min;function uP(e,t){var r=e[1],n=t[1],o=r|n,s=o<(gi|oP|va),i=n==va&&r==Ig||n==va&&r==Sg&&e[7].length<=t[8]||n==(va|Sg)&&t[7].length<=t[8]&&r==Ig;if(!(s||i))return e;n&gi&&(e[2]=t[2],o|=r&gi?0:sP);var u=t[3];if(u){var p=e[3];e[3]=p?aP(p,u,t[4]):u,e[4]=p?Ag(e[3],bg):t[4]}return u=t[5],u&&(p=e[5],e[5]=p?nP(p,u,t[6]):u,e[6]=p?Ag(e[5],bg):t[6]),u=t[7],u&&(e[7]=u),n&va&&(e[8]=e[8]==null?t[8]:iP(e[8],t[8])),e[9]==null&&(e[9]=t[9]),e[0]=t[0],e[1]=o,e}a(uP,"mergeData");wg.exports=uP});var Rg=c((PV,Tg)=>{"use strict";var cP=/\s/;function pP(e){for(var t=e.length;t--&&cP.test(e.charAt(t)););return t}a(pP,"trimmedEndIndex");Tg.exports=pP});var _g=c((qV,vg)=>{"use strict";var lP=Rg(),dP=/^\s+/;function fP(e){return e&&e.slice(0,lP(e)+1).replace(dP,"")}a(fP,"baseTrim");vg.exports=fP});var gr=c((kV,xg)=>{"use strict";var mP=yt(),gP=Ie(),yP="[object Symbol]";function hP(e){return typeof e=="symbol"||gP(e)&&mP(e)==yP}a(hP,"isSymbol");xg.exports=hP});var Pg=c((BV,Lg)=>{"use strict";var AP=_g(),Cg=Ce(),bP=gr(),Og=0/0,IP=/^[-+]0x[0-9a-f]+$/i,SP=/^0b[01]+$/i,wP=/^0o[0-7]+$/i,EP=parseInt;function TP(e){if(typeof e=="number")return e;if(bP(e))return Og;if(Cg(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=Cg(t)?t+"":t}if(typeof e!="string")return e===0?e:+e;e=AP(e);var r=SP.test(e);return r||wP.test(e)?EP(e.slice(2),r?2:8):IP.test(e)?Og:+e}a(TP,"toNumber");Lg.exports=TP});var Dg=c((GV,qg)=>{"use strict";var RP=Pg(),Ug=1/0,vP=17976931348623157e292;function _P(e){if(!e)return e===0?e:0;if(e=RP(e),e===Ug||e===-Ug){var t=e<0?-1:1;return t*vP}return e===e?e:0}a(_P,"toFinite");qg.exports=_P});var yi=c((WV,kg)=>{"use strict";var xP=Dg();function CP(e){var t=xP(e),r=t%1;return t===t?r?t-r:t:0}a(CP,"toInteger");kg.exports=CP});var jn=c((QV,Fg)=>{"use strict";var OP=oi(),LP=vm(),PP=gg(),UP=mi(),qP=hg(),DP=ui(),kP=Eg(),NP=pi(),BP=li(),Ng=yi(),MP="Expected a function",Bg=1,GP=2,hi=8,Ai=16,bi=32,Mg=64,Gg=Math.max;function FP(e,t,r,n,o,s,i,u){var p=t&GP;if(!p&&typeof e!="function")throw new TypeError(MP);var m=n?n.length:0;if(m||(t&=~(bi|Mg),n=o=void 0),i=i===void 0?i:Gg(Ng(i),0),u=u===void 0?u:Ng(u),m-=o?o.length:0,t&Mg){var g=n,y=o;n=o=void 0}var h=p?void 0:DP(e),S=[e,t,r,n,o,g,y,s,i,u];if(h&&kP(S,h),e=S[0],t=S[1],r=S[2],n=S[3],o=S[4],u=S[9]=S[9]===void 0?p?0:e.length:Gg(S[9]-m,0),!u&&t&(hi|Ai)&&(t&=~(hi|Ai)),!t||t==Bg)var O=LP(e,t,r);else t==hi||t==Ai?O=PP(e,t,u):(t==bi||t==(Bg|bi))&&!o.length?O=qP(e,t,r,n):O=UP.apply(void 0,S);var x=h?OP:NP;return BP(x(O,S),e,t)}a(FP,"createWrap");Fg.exports=FP});var jg=c((KV,Wg)=>{"use strict";var WP=jn(),jP=128;function QP(e,t,r){return t=r?void 0:t,t=e&&t==null?e.length:t,WP(e,jP,void 0,void 0,void 0,void 0,t)}a(QP,"ary");Wg.exports=QP});var $g=c((YV,Qg)=>{"use strict";var $P=Jo(),KP=$P(Object.keys,Object);Qg.exports=KP});var Ii=c((HV,Kg)=>{"use strict";var VP=ln(),YP=$g(),HP=Object.prototype,zP=HP.hasOwnProperty;function JP(e){if(!VP(e))return YP(e);var t=[];for(var r in Object(e))zP.call(e,r)&&r!="constructor"&&t.push(r);return t}a(JP,"baseKeys");Kg.exports=JP});var yr=c((JV,Vg)=>{"use strict";var XP=as(),ZP=Ii(),eU=er();function tU(e){return eU(e)?XP(e):ZP(e)}a(tU,"keys");Vg.exports=tU});var Si=c((ZV,Yg)=>{"use strict";var rU=sr(),aU=yr();function nU(e,t){return e&&rU(t,aU(t),e)}a(nU,"baseAssign");Yg.exports=nU});var zg=c((t2,Hg)=>{"use strict";var oU=sr(),sU=ir();function iU(e,t){return e&&oU(t,sU(t),e)}a(iU,"baseAssignIn");Hg.exports=iU});var Xg=c((a2,Jg)=>{"use strict";function uU(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(uU,"arrayFilter");Jg.exports=uU});var wi=c((o2,Zg)=>{"use strict";function cU(){return[]}a(cU,"stubArray");Zg.exports=cU});var Qn=c((i2,ty)=>{"use strict";var pU=Xg(),lU=wi(),dU=Object.prototype,fU=dU.propertyIsEnumerable,ey=Object.getOwnPropertySymbols,mU=ey?function(e){return e==null?[]:(e=Object(e),pU(ey(e),function(t){return fU.call(e,t)}))}:lU;ty.exports=mU});var ay=c((u2,ry)=>{"use strict";var gU=sr(),yU=Qn();function hU(e,t){return gU(e,yU(e),t)}a(hU,"copySymbols");ry.exports=hU});var Ei=c((p2,ny)=>{"use strict";var AU=en(),bU=pn(),IU=Qn(),SU=wi(),wU=Object.getOwnPropertySymbols,EU=wU?function(e){for(var t=[];e;)AU(t,IU(e)),e=bU(e);return t}:SU;ny.exports=EU});var sy=c((l2,oy)=>{"use strict";var TU=sr(),RU=Ei();function vU(e,t){return TU(e,RU(e),t)}a(vU,"copySymbolsIn");oy.exports=vU});var Ti=c((f2,iy)=>{"use strict";var _U=en(),xU=ie();function CU(e,t,r){var n=t(e);return xU(e)?n:_U(n,r(e))}a(CU,"baseGetAllKeys");iy.exports=CU});var Ri=c((g2,uy)=>{"use strict";var OU=Ti(),LU=Qn(),PU=yr();function UU(e){return OU(e,PU,LU)}a(UU,"getAllKeys");uy.exports=UU});var py=c((h2,cy)=>{"use strict";var qU=Ti(),DU=Ei(),kU=ir();function NU(e){return qU(e,kU,DU)}a(NU,"getAllKeysIn");cy.exports=NU});var dy=c((b2,ly)=>{"use strict";var BU=ht(),MU=pe(),GU=BU(MU,"DataView");ly.exports=GU});var my=c((I2,fy)=>{"use strict";var FU=ht(),WU=pe(),jU=FU(WU,"Promise");fy.exports=jU});var Ar=c((S2,Sy)=>{"use strict";var vi=dy(),_i=an(),xi=my(),Ci=Wo(),Oi=ai(),Iy=yt(),hr=Do(),gy="[object Map]",QU="[object Object]",yy="[object Promise]",hy="[object Set]",Ay="[object WeakMap]",by="[object DataView]",$U=hr(vi),KU=hr(_i),VU=hr(xi),YU=hr(Ci),HU=hr(Oi),Nt=Iy;(vi&&Nt(new vi(new ArrayBuffer(1)))!=by||_i&&Nt(new _i)!=gy||xi&&Nt(xi.resolve())!=yy||Ci&&Nt(new Ci)!=hy||Oi&&Nt(new Oi)!=Ay)&&(Nt=a(function(e){var t=Iy(e),r=t==QU?e.constructor:void 0,n=r?hr(r):"";if(n)switch(n){case $U:return by;case KU:return gy;case VU:return yy;case YU:return hy;case HU:return Ay}return t},"getTag"));Sy.exports=Nt});var Ey=c((E2,wy)=>{"use strict";var zU=Object.prototype,JU=zU.hasOwnProperty;function XU(e){var t=e.length,r=new e.constructor(t);return t&&typeof e[0]=="string"&&JU.call(e,"index")&&(r.index=e.index,r.input=e.input),r}a(XU,"initCloneArray");wy.exports=XU});var Ry=c((R2,Ty)=>{"use strict";var ZU=cn();function eq(e,t){var r=t?ZU(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.byteLength)}a(eq,"cloneDataView");Ty.exports=eq});var _y=c((_2,vy)=>{"use strict";var tq=/\w*$/;function rq(e){var t=new e.constructor(e.source,tq.exec(e));return t.lastIndex=e.lastIndex,t}a(rq,"cloneRegExp");vy.exports=rq});var Py=c((C2,Ly)=>{"use strict";var xy=Ct(),Cy=xy?xy.prototype:void 0,Oy=Cy?Cy.valueOf:void 0;function aq(e){return Oy?Object(Oy.call(e)):{}}a(aq,"cloneSymbol");Ly.exports=aq});var qy=c((L2,Uy)=>{"use strict";var nq=cn(),oq=Ry(),sq=_y(),iq=Py(),uq=zo(),cq="[object Boolean]",pq="[object Date]",lq="[object Map]",dq="[object Number]",fq="[object RegExp]",mq="[object Set]",gq="[object String]",yq="[object Symbol]",hq="[object ArrayBuffer]",Aq="[object DataView]",bq="[object Float32Array]",Iq="[object Float64Array]",Sq="[object Int8Array]",wq="[object Int16Array]",Eq="[object Int32Array]",Tq="[object Uint8Array]",Rq="[object Uint8ClampedArray]",vq="[object Uint16Array]",_q="[object Uint32Array]";function xq(e,t,r){var n=e.constructor;switch(t){case hq:return nq(e);case cq:case pq:return new n(+e);case Aq:return oq(e,r);case bq:case Iq:case Sq:case wq:case Eq:case Tq:case Rq:case vq:case _q:return uq(e,r);case lq:return new n;case dq:case gq:return new n(e);case fq:return sq(e);case mq:return new n;case yq:return iq(e)}}a(xq,"initCloneByTag");Uy.exports=xq});var ky=c((U2,Dy)=>{"use strict";var Cq=Ar(),Oq=Ie(),Lq="[object Map]";function Pq(e){return Oq(e)&&Cq(e)==Lq}a(Pq,"baseIsMap");Dy.exports=Pq});var Gy=c((D2,My)=>{"use strict";var Uq=ky(),qq=dn(),Ny=fn(),By=Ny&&Ny.isMap,Dq=By?qq(By):Uq;My.exports=Dq});var Wy=c((k2,Fy)=>{"use strict";var kq=Ar(),Nq=Ie(),Bq="[object Set]";function Mq(e){return Nq(e)&&kq(e)==Bq}a(Mq,"baseIsSet");Fy.exports=Mq});var Ky=c((B2,$y)=>{"use strict";var Gq=Wy(),Fq=dn(),jy=fn(),Qy=jy&&jy.isSet,Wq=Qy?Fq(Qy):Gq;$y.exports=Wq});var Li=c((M2,zy)=>{"use strict";var jq=sa(),Qq=Fn(),$q=rs(),Kq=Si(),Vq=zg(),Yq=Yo(),Hq=ar(),zq=ay(),Jq=sy(),Xq=Ri(),Zq=py(),eD=Ar(),tD=Ey(),rD=qy(),aD=Xo(),nD=ie(),oD=la(),sD=Gy(),iD=Ce(),uD=Ky(),cD=yr(),pD=ir(),lD=1,dD=2,fD=4,Vy="[object Arguments]",mD="[object Array]",gD="[object Boolean]",yD="[object Date]",hD="[object Error]",Yy="[object Function]",AD="[object GeneratorFunction]",bD="[object Map]",ID="[object Number]",Hy="[object Object]",SD="[object RegExp]",wD="[object Set]",ED="[object String]",TD="[object Symbol]",RD="[object WeakMap]",vD="[object ArrayBuffer]",_D="[object DataView]",xD="[object Float32Array]",CD="[object Float64Array]",OD="[object Int8Array]",LD="[object Int16Array]",PD="[object Int32Array]",UD="[object Uint8Array]",qD="[object Uint8ClampedArray]",DD="[object Uint16Array]",kD="[object Uint32Array]",N={};N[Vy]=N[mD]=N[vD]=N[_D]=N[gD]=N[yD]=N[xD]=N[CD]=N[OD]=N[LD]=N[PD]=N[bD]=N[ID]=N[Hy]=N[SD]=N[wD]=N[ED]=N[TD]=N[UD]=N[qD]=N[DD]=N[kD]=!0;N[hD]=N[Yy]=N[RD]=!1;function $n(e,t,r,n,o,s){var i,u=t&lD,p=t&dD,m=t&fD;if(r&&(i=o?r(e,n,o,s):r(e)),i!==void 0)return i;if(!iD(e))return e;var g=nD(e);if(g){if(i=tD(e),!u)return Hq(e,i)}else{var y=eD(e),h=y==Yy||y==AD;if(oD(e))return Yq(e,u);if(y==Hy||y==Vy||h&&!o){if(i=p||h?{}:aD(e),!u)return p?Jq(e,Vq(i,e)):zq(e,Kq(i,e))}else{if(!N[y])return o?e:{};i=rD(e,y,u)}}s||(s=new jq);var S=s.get(e);if(S)return S;s.set(e,i),uD(e)?e.forEach(function(_){i.add($n(_,t,r,_,e,s))}):sD(e)&&e.forEach(function(_,v){i.set(v,$n(_,t,r,v,e,s))});var O=m?p?Zq:Xq:p?pD:cD,x=g?void 0:O(e);return Qq(x||e,function(_,v){x&&(v=_,_=e[v]),$q(i,v,$n(_,t,r,v,e,s))}),i}a($n,"baseClone");zy.exports=$n});var Xy=c((F2,Jy)=>{"use strict";var ND=Li(),BD=4;function MD(e){return ND(e,BD)}a(MD,"clone");Jy.exports=MD});var eh=c((j2,Zy)=>{"use strict";var GD=jn(),FD=8;function Pi(e,t,r){t=r?void 0:t;var n=GD(e,FD,void 0,void 0,void 0,void 0,void 0,t);return n.placeholder=Pi.placeholder,n}a(Pi,"curry");Pi.placeholder={};Zy.exports=Pi});var rh=c(($2,th)=>{"use strict";var WD=yt(),jD=Ie(),QD=Zo(),$D="[object DOMException]",KD="[object Error]";function VD(e){if(!jD(e))return!1;var t=WD(e);return t==KD||t==$D||typeof e.message=="string"&&typeof e.name=="string"&&!QD(e)}a(VD,"isError");th.exports=VD});var nh=c((V2,ah)=>{"use strict";var YD=Ar(),HD=Ie(),zD="[object WeakMap]";function JD(e){return HD(e)&&YD(e)==zD}a(JD,"isWeakMap");ah.exports=JD});var sh=c((H2,oh)=>{"use strict";function XD(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(XD,"arraySome");oh.exports=XD});var Ui=c((J2,ih)=>{"use strict";var ZD=Mo(),ek=sh(),tk=Fo(),rk=1,ak=2;function nk(e,t,r,n,o,s){var i=r&rk,u=e.length,p=t.length;if(u!=p&&!(i&&p>u))return!1;var m=s.get(e),g=s.get(t);if(m&&g)return m==t&&g==e;var y=-1,h=!0,S=r&ak?new ZD:void 0;for(s.set(e,t),s.set(t,e);++y<u;){var O=e[y],x=t[y];if(n)var _=i?n(x,O,y,t,e,s):n(O,x,y,e,t,s);if(_!==void 0){if(_)continue;h=!1;break}if(S){if(!ek(t,function(v,q){if(!tk(S,q)&&(O===v||o(O,v,r,n,s)))return S.push(q)})){h=!1;break}}else if(!(O===x||o(O,x,r,n,s))){h=!1;break}}return s.delete(e),s.delete(t),h}a(nk,"equalArrays");ih.exports=nk});var ch=c((Z2,uh)=>{"use strict";function ok(e){var t=-1,r=Array(e.size);return e.forEach(function(n,o){r[++t]=[o,n]}),r}a(ok,"mapToArray");uh.exports=ok});var mh=c((tY,fh)=>{"use strict";var ph=Ct(),lh=Ho(),sk=Jt(),ik=Ui(),uk=ch(),ck=sn(),pk=1,lk=2,dk="[object Boolean]",fk="[object Date]",mk="[object Error]",gk="[object Map]",yk="[object Number]",hk="[object RegExp]",Ak="[object Set]",bk="[object String]",Ik="[object Symbol]",Sk="[object ArrayBuffer]",wk="[object DataView]",dh=ph?ph.prototype:void 0,qi=dh?dh.valueOf:void 0;function Ek(e,t,r,n,o,s,i){switch(r){case wk:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case Sk:return!(e.byteLength!=t.byteLength||!s(new lh(e),new lh(t)));case dk:case fk:case yk:return sk(+e,+t);case mk:return e.name==t.name&&e.message==t.message;case hk:case bk:return e==t+"";case gk:var u=uk;case Ak:var p=n&pk;if(u||(u=ck),e.size!=t.size&&!p)return!1;var m=i.get(e);if(m)return m==t;n|=lk,i.set(e,t);var g=ik(u(e),u(t),n,o,s,i);return i.delete(e),g;case Ik:if(qi)return qi.call(e)==qi.call(t)}return!1}a(Ek,"equalByTag");fh.exports=Ek});var hh=c((aY,yh)=>{"use strict";var gh=Ri(),Tk=1,Rk=Object.prototype,vk=Rk.hasOwnProperty;function _k(e,t,r,n,o,s){var i=r&Tk,u=gh(e),p=u.length,m=gh(t),g=m.length;if(p!=g&&!i)return!1;for(var y=p;y--;){var h=u[y];if(!(i?h in t:vk.call(t,h)))return!1}var S=s.get(e),O=s.get(t);if(S&&O)return S==t&&O==e;var x=!0;s.set(e,t),s.set(t,e);for(var _=i;++y<p;){h=u[y];var v=e[h],q=t[h];if(n)var De=i?n(q,v,h,t,e,s):n(v,q,h,e,t,s);if(!(De===void 0?v===q||o(v,q,r,n,s):De)){x=!1;break}_||(_=h=="constructor")}if(x&&!_){var Re=e.constructor,lt=t.constructor;Re!=lt&&"constructor"in e&&"constructor"in t&&!(typeof Re=="function"&&Re instanceof Re&&typeof lt=="function"&&lt instanceof lt)&&(x=!1)}return s.delete(e),s.delete(t),x}a(_k,"equalObjects");yh.exports=_k});var Rh=c((oY,Th)=>{"use strict";var Di=sa(),xk=Ui(),Ck=mh(),Ok=hh(),Ah=Ar(),bh=ie(),Ih=la(),Lk=mn(),Pk=1,Sh="[object Arguments]",wh="[object Array]",Kn="[object Object]",Uk=Object.prototype,Eh=Uk.hasOwnProperty;function qk(e,t,r,n,o,s){var i=bh(e),u=bh(t),p=i?wh:Ah(e),m=u?wh:Ah(t);p=p==Sh?Kn:p,m=m==Sh?Kn:m;var g=p==Kn,y=m==Kn,h=p==m;if(h&&Ih(e)){if(!Ih(t))return!1;i=!0,g=!1}if(h&&!g)return s||(s=new Di),i||Lk(e)?xk(e,t,r,n,o,s):Ck(e,t,p,r,n,o,s);if(!(r&Pk)){var S=g&&Eh.call(e,"__wrapped__"),O=y&&Eh.call(t,"__wrapped__");if(S||O){var x=S?e.value():e,_=O?t.value():t;return s||(s=new Di),o(x,_,r,n,s)}}return h?(s||(s=new Di),Ok(e,t,r,n,o,s)):!1}a(qk,"baseIsEqualDeep");Th.exports=qk});var ki=c((iY,xh)=>{"use strict";var Dk=Rh(),vh=Ie();function _h(e,t,r,n,o){return e===t?!0:e==null||t==null||!vh(e)&&!vh(t)?e!==e&&t!==t:Dk(e,t,r,n,_h,o)}a(_h,"baseIsEqual");xh.exports=_h});var Oh=c((cY,Ch)=>{"use strict";var kk=sa(),Nk=ki(),Bk=1,Mk=2;function Gk(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 p=u[0],m=e[p],g=u[1];if(i&&u[2]){if(m===void 0&&!(p in e))return!1}else{var y=new kk;if(n)var h=n(m,g,p,e,t,y);if(!(h===void 0?Nk(g,m,Bk|Mk,n,y):h))return!1}}return!0}a(Gk,"baseIsMatch");Ch.exports=Gk});var Ni=c((lY,Lh)=>{"use strict";var Fk=Ce();function Wk(e){return e===e&&!Fk(e)}a(Wk,"isStrictComparable");Lh.exports=Wk});var Uh=c((fY,Ph)=>{"use strict";var jk=Ni(),Qk=yr();function $k(e){for(var t=Qk(e),r=t.length;r--;){var n=t[r],o=e[n];t[r]=[n,o,jk(o)]}return t}a($k,"getMatchData");Ph.exports=$k});var Bi=c((gY,qh)=>{"use strict";function Kk(e,t){return function(r){return r==null?!1:r[e]===t&&(t!==void 0||e in Object(r))}}a(Kk,"matchesStrictComparable");qh.exports=Kk});var kh=c((hY,Dh)=>{"use strict";var Vk=Oh(),Yk=Uh(),Hk=Bi();function zk(e){var t=Yk(e);return t.length==1&&t[0][2]?Hk(t[0][0],t[0][1]):function(r){return r===e||Vk(r,e,t)}}a(zk,"baseMatches");Dh.exports=zk});var Vn=c((bY,Nh)=>{"use strict";var Jk=ie(),Xk=gr(),Zk=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,eN=/^\w*$/;function tN(e,t){if(Jk(e))return!1;var r=typeof e;return r=="number"||r=="symbol"||r=="boolean"||e==null||Xk(e)?!0:eN.test(e)||!Zk.test(e)||t!=null&&e in Object(t)}a(tN,"isKey");Nh.exports=tN});var Gh=c((SY,Mh)=>{"use strict";var Bh=nn(),rN="Expected a function";function Mi(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(rN);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(Mi.Cache||Bh),r}a(Mi,"memoize");Mi.Cache=Bh;Mh.exports=Mi});var Wh=c((EY,Fh)=>{"use strict";var aN=Gh(),nN=500;function oN(e){var t=aN(e,function(n){return r.size===nN&&r.clear(),n}),r=t.cache;return t}a(oN,"memoizeCapped");Fh.exports=oN});var Gi=c((RY,jh)=>{"use strict";var sN=Wh(),iN=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,uN=/\\(\\)?/g,cN=sN(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(iN,function(r,n,o,s){t.push(o?s.replace(uN,"$1"):n||r)}),t});jh.exports=cN});var Fi=c((vY,Qh)=>{"use strict";function pN(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(pN,"arrayMap");Qh.exports=pN});var zh=c((xY,Hh)=>{"use strict";var $h=Ct(),lN=Fi(),dN=ie(),fN=gr(),mN=1/0,Kh=$h?$h.prototype:void 0,Vh=Kh?Kh.toString:void 0;function Yh(e){if(typeof e=="string")return e;if(dN(e))return lN(e,Yh)+"";if(fN(e))return Vh?Vh.call(e):"";var t=e+"";return t=="0"&&1/e==-mN?"-0":t}a(Yh,"baseToString");Hh.exports=Yh});var Wi=c((OY,Jh)=>{"use strict";var gN=zh();function yN(e){return e==null?"":gN(e)}a(yN,"toString");Jh.exports=yN});var ji=c((PY,Xh)=>{"use strict";var hN=ie(),AN=Vn(),bN=Gi(),IN=Wi();function SN(e,t){return hN(e)?e:AN(e,t)?[e]:bN(IN(e))}a(SN,"castPath");Xh.exports=SN});var br=c((qY,Zh)=>{"use strict";var wN=gr(),EN=1/0;function TN(e){if(typeof e=="string"||wN(e))return e;var t=e+"";return t=="0"&&1/e==-EN?"-0":t}a(TN,"toKey");Zh.exports=TN});var Qi=c((kY,eA)=>{"use strict";var RN=ji(),vN=br();function _N(e,t){t=RN(t,e);for(var r=0,n=t.length;e!=null&&r<n;)e=e[vN(t[r++])];return r&&r==n?e:void 0}a(_N,"baseGet");eA.exports=_N});var rA=c((BY,tA)=>{"use strict";var xN=Qi();function CN(e,t,r){var n=e==null?void 0:xN(e,t);return n===void 0?r:n}a(CN,"get");tA.exports=CN});var nA=c((GY,aA)=>{"use strict";function ON(e,t){return e!=null&&t in Object(e)}a(ON,"baseHasIn");aA.exports=ON});var sA=c((WY,oA)=>{"use strict";var LN=ji(),PN=Zr(),UN=ie(),qN=ma(),DN=un(),kN=br();function NN(e,t,r){t=LN(t,e);for(var n=-1,o=t.length,s=!1;++n<o;){var i=kN(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&&DN(o)&&qN(i,o)&&(UN(e)||PN(e)))}a(NN,"hasPath");oA.exports=NN});var uA=c((QY,iA)=>{"use strict";var BN=nA(),MN=sA();function GN(e,t){return e!=null&&MN(e,t,BN)}a(GN,"hasIn");iA.exports=GN});var pA=c((KY,cA)=>{"use strict";var FN=ki(),WN=rA(),jN=uA(),QN=Vn(),$N=Ni(),KN=Bi(),VN=br(),YN=1,HN=2;function zN(e,t){return QN(e)&&$N(t)?KN(VN(e),t):function(r){var n=WN(r,e);return n===void 0&&n===t?jN(r,e):FN(t,n,YN|HN)}}a(zN,"baseMatchesProperty");cA.exports=zN});var dA=c((YY,lA)=>{"use strict";function JN(e){return function(t){return t?.[e]}}a(JN,"baseProperty");lA.exports=JN});var mA=c((zY,fA)=>{"use strict";var XN=Qi();function ZN(e){return function(t){return XN(t,e)}}a(ZN,"basePropertyDeep");fA.exports=ZN});var yA=c((XY,gA)=>{"use strict";var eB=dA(),tB=mA(),rB=Vn(),aB=br();function nB(e){return rB(e)?eB(aB(e)):tB(e)}a(nB,"property");gA.exports=nB});var $i=c((eH,hA)=>{"use strict";var oB=kh(),sB=pA(),iB=ea(),uB=ie(),cB=yA();function pB(e){return typeof e=="function"?e:e==null?iB:typeof e=="object"?uB(e)?sB(e[0],e[1]):oB(e):cB(e)}a(pB,"baseIteratee");hA.exports=pB});var bA=c((rH,AA)=>{"use strict";var lB=Li(),dB=$i(),fB=1;function mB(e){return dB(typeof e=="function"?e:lB(e,fB))}a(mB,"iteratee");AA.exports=mB});var SA=c((nH,IA)=>{"use strict";var gB=Po();function yB(e){var t=e==null?0:e.length;return t?gB(e,1):[]}a(yB,"flatten");IA.exports=yB});var EA=c((sH,wA)=>{"use strict";var hB=SA(),AB=Uo(),bB=rn();function IB(e){return bB(AB(e,void 0,hB),e+"")}a(IB,"flatRest");wA.exports=IB});var RA=c((uH,TA)=>{"use strict";var SB=jn(),wB=EA(),EB=256,TB=wB(function(e,t){return SB(e,EB,void 0,void 0,void 0,t)});TA.exports=TB});var _A=c((cH,vA)=>{"use strict";var RB=Fi(),vB=ar(),_B=ie(),xB=gr(),CB=Gi(),OB=br(),LB=Wi();function PB(e){return _B(e)?RB(e,OB):xB(e)?[e]:vB(CB(LB(e)))}a(PB,"toPath");vA.exports=PB});var CA=c((lH,xA)=>{"use strict";xA.exports={ary:jg(),assign:Si(),clone:Xy(),curry:eh(),forEach:Fn(),isArray:ie(),isError:rh(),isFunction:ta(),isWeakMap:nh(),iteratee:bA(),keys:Ii(),rearg:RA(),toInteger:yi(),toPath:_A()}});var LA=c((dH,OA)=>{"use strict";var UB=Am(),qB=CA();function DB(e,t,r){return UB(qB,e,t,r)}a(DB,"convert");OA.exports=DB});var Ki=c((mH,UA)=>{"use strict";var kB=LA(),PA=kB("merge",ns());PA.placeholder=Zs();UA.exports=PA});var Db=c((O4,qb)=>{"use strict";function rM(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(rM,"arrayAggregator");qb.exports=rM});var Nb=c((P4,kb)=>{"use strict";var aM=Vo(),nM=yr();function oM(e,t){return e&&aM(e,t,nM)}a(oM,"baseForOwn");kb.exports=oM});var Mb=c((q4,Bb)=>{"use strict";var sM=er();function iM(e,t){return function(r,n){if(r==null)return r;if(!sM(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(iM,"createBaseEach");Bb.exports=iM});var Fb=c((k4,Gb)=>{"use strict";var uM=Nb(),cM=Mb(),pM=cM(uM);Gb.exports=pM});var jb=c((N4,Wb)=>{"use strict";var lM=Fb();function dM(e,t,r,n){return lM(e,function(o,s,i){t(n,o,r(o),i)}),n}a(dM,"baseAggregator");Wb.exports=dM});var $b=c((M4,Qb)=>{"use strict";var fM=Db(),mM=jb(),gM=$i(),yM=ie();function hM(e,t){return function(r,n){var o=yM(r)?fM:mM,s=t?t():{};return o(r,e,gM(n,2),s)}}a(hM,"createAggregator");Qb.exports=hM});var Vb=c((F4,Kb)=>{"use strict";var AM=ia(),bM=$b(),IM=Object.prototype,SM=IM.hasOwnProperty,wM=bM(function(e,t,r){SM.call(e,r)?e[r].push(t):AM(e,r,[t])});Kb.exports=wM});var KM={};E(KM,{Method:()=>co,ai:()=>Du,api:()=>cu,auditLogs:()=>St,automations:()=>On,backups:()=>we,branding:()=>In,constants:()=>Kr,environmentVariables:()=>Xe,features:()=>Me,groups:()=>Q,init:()=>dm,licensing:()=>Ve,logger:()=>Bt,mappers:()=>H,middleware:()=>eu,plugins:()=>Ln,publicApi:()=>qn,quotas:()=>Je,scimGroups:()=>Ir,scimUsers:()=>he,sdk:()=>Yi,users:()=>ot,utils:()=>Ht});module.exports=GI(KM);var co=(s=>(s.POST="POST",s.GET="GET",s.PATCH="PATCH",s.DELETE="DELETE",s.PUT="PUT",s))(co||{});var Yi={};E(Yi,{ai:()=>Ss,auditLogs:()=>St,automations:()=>On,backups:()=>we,branding:()=>In,environmentVariables:()=>Xe,features:()=>Me,groups:()=>Q,init:()=>dm,licensing:()=>Ve,logger:()=>Bt,plugins:()=>Ln,publicApi:()=>qn,quotas:()=>Je,scimGroups:()=>Ir,scimUsers:()=>he,users:()=>ot,utils:()=>Ht});var In={};E(In,{getBrandingConfig:()=>Px});var Me={};E(Me,{checkBackups:()=>le,checkFeature:()=>An,checkFeatures:()=>gs,checkSCIM:()=>bs,isAppBuildersEnabled:()=>Ut,isAuditLogsEnabled:()=>bn,isBackupsEnabled:()=>ys,isBrandingEnabled:()=>hs,isEnforceableSSO:()=>Rf,isExpandedPublicApiEnabled:()=>at,isPWAEnabled:()=>Rx,isPkceOidcEnabled:()=>_x,isRecaptchaEnabled:()=>vx,isSSOEnforced:()=>xx,isSyncAutomationsEnabled:()=>Ex,isTriggerAutomationRunEnabled:()=>Tx,isUserGroupsEnabled:()=>As,isViewPermissionEnabled:()=>Cx,isViewReadonlyColumnsEnabled:()=>Ox});var rt=require("@budibase/backend-core"),re=require("@budibase/types");var Ve={};E(Ve,{cache:()=>Ne,client:()=>gt,features:()=>Xa,getFreeLicense:()=>ds,getLicense:()=>ps,getLicenseFromKey:()=>ls,keys:()=>ms,offline:()=>gn,quotas:()=>Za});var Ne={};E(Ne,{getCachedLicense:()=>Ef,invalidate:()=>Tf,refresh:()=>Ot});var Ba=require("@budibase/backend-core");var Rr,FI=a(async()=>{Rr=await Ba.RedisClient.init(Ba.redis.utils.Databases.LICENSES)},"init"),WI=a(async()=>{Rr&&await Rr.finish()},"shutdown");process.on("exit",async()=>{await WI()});var po=a(async()=>(Rr||await FI(),Rr),"getClient");var gt={};E(gt,{activateLicenseKey:()=>_o,getLicense:()=>Vt,getLicenseFromKey:()=>vo,triggerQuota:()=>_S});var Qu=U(require("node-fetch"));var $u=require("@budibase/backend-core"),lo=require("dd-trace"),Ku=require("dd-trace/ext/formats");var fo=class{constructor(t){this.apiCall=t=>async(r="",n={})=>await lo.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";$u.logging.correlation.setHeader(s),lo.tracer.inject(o,Ku.HTTP_HEADERS,s);let u={method:t,body:i?JSON.stringify(n.body):n.body,headers:s,credentials:"include"};return(0,Qu.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")}},mo=fo;var Ha=require("@budibase/types"),P=require("@budibase/backend-core");var $e={};E($e,{bustCache:()=>ho,getCurrentUsageValues:()=>ec,getQuotaUsage:()=>Rt,setAllUsage:()=>bo,setAppUsageValue:()=>Ao,setUsage:()=>Ju,setUsagePerApp:()=>Xu,utils:()=>Cr});var me=require("@budibase/backend-core"),ce=require("@budibase/types");var Cr={};E(Cr,{generateBaseQuotaUsage:()=>Ga,generateNewMonthlyQuotas:()=>xr,generateNewQuotaUsage:()=>yo,getBreakdownName:()=>Wa,getCurrentMonthString:()=>dt,getQuotaDocId:()=>_r,setCurrentMonth:()=>Fa,setQuotaReset:()=>go});var vr=require("@budibase/backend-core"),Ma=require("@budibase/shared-core"),z=require("@budibase/types");var _r=a(()=>vr.context.isSelfHostUsingCloud()?`quota_usage_${vr.context.getTenantId()}`:vr.db.StaticDatabases.GLOBAL.docs.usageQuota,"getQuotaDocId"),Vu=a(()=>{let e=new Date;return new Date(e.getFullYear(),e.getMonth()+1,1).toISOString()},"getNextQuotaReset"),go=a(e=>{e.quotaReset=Vu()},"setQuotaReset"),dt=a(()=>{let e=new Date,t=e.getMonth()+1,r=e.getFullYear();return`${t}-${r}`},"getCurrentMonthString"),Ga=a(()=>({usageQuota:{[z.StaticQuotaName.WORKSPACES]:0,[z.StaticQuotaName.ROWS]:0,[z.StaticQuotaName.PLUGINS]:0,[z.StaticQuotaName.USERS]:0,[z.StaticQuotaName.CREATORS]:0,[z.StaticQuotaName.USER_GROUPS]:0,[z.StaticQuotaName.AI_CUSTOM_CONFIGS]:0,triggers:{}},monthly:{[dt()]:xr()}}),"generateBaseQuotaUsage"),yo=a(()=>{let e={_id:_r(),quotaReset:Vu(),...Ga(),apps:{}};return Fa(e),e},"generateNewQuotaUsage"),xr=a(()=>({[z.MonthlyQuotaName.QUERIES]:0,[z.MonthlyQuotaName.AUTOMATIONS]:0,[z.MonthlyQuotaName.BUDIBASE_AI_CREDITS]:0,[z.MonthlyQuotaName.ACTIONS]:0,triggers:{}}),"generateNewMonthlyQuotas"),Fa=a(e=>{let t=dt();e.monthly||(e.monthly={}),e.monthly[t]||(e.monthly[t]=xr()),e.monthly.current=e.monthly[t]},"setCurrentMonth"),Wa=a((e,t)=>{if(!(!t||!e))switch(e){case z.MonthlyQuotaName.AUTOMATIONS:return z.BreakdownQuotaName.AUTOMATIONS;case z.MonthlyQuotaName.QUERIES:return(0,Ma.isTableIdOrExternalTableId)(t)?z.BreakdownQuotaName.ROW_QUERIES:(0,Ma.isDatasourceOrDatasourcePlusId)(t)?z.BreakdownQuotaName.DATASOURCE_QUERIES:void 0}},"getBreakdownName");var Yu=me.Duration.fromSeconds(60).toMs(),{Writethrough:Hu}=me.cache.writethrough;function QI(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(QI,"clearDeprecated");var ja=a(()=>me.tenancy.isSelfHostUsingCloud()?new Hu(me.tenancy.getSelfHostCloudDB(),Yu):new Hu(me.tenancy.getGlobalDB(),Yu),"getDB");async function ho(e=0){let r=ja(),n=_r(),o=await r.tryGet(n);o&&o._rev&&await r.remove(n,o._rev).catch(async s=>{if(e<1)return await ho(e+1);throw s})}a(ho,"bustCache");var Rt=a(async()=>{let e=ja(),t=await e.tryGet(_r());if(!t){t=yo();let{rev:r}=await e.put(t);t._rev=r}return Fa(t),go(t),QI(t)},"getQuotaUsage"),Ju=a(async(e,t,r)=>bo({name:t,type:r,values:{total:e}}),"setUsage"),Xu=a(async(e,t,r)=>{let n=ja(),o=await Rt(),s=Object.values(e).reduce((u,p)=>u+p,0);for(let[u,p]of Object.entries(e))o=Zu(o,t,r,{total:s,app:p},{appId:u});let i=await n.put(o);return o._rev=i.rev,o},"setUsagePerApp"),$I=a((e,t,r,n)=>{let o=Wa(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"),Ao=a((e,t,r,n={},o)=>{let s;try{s=me.db.getProdWorkspaceID(n?.appId||me.context.getWorkspaceId())}catch{}if(!s||!o.app||!ce.APP_QUOTA_NAMES.includes(t))return e;e.apps?.[s]||(e.apps={...e.apps,[s]:Ga()});let i=e.apps[s];switch(r){case ce.QuotaUsageType.STATIC:i.usageQuota[t]=o.app;break;case ce.QuotaUsageType.MONTHLY:{let u=dt(),p=t,m=i.monthly[u];m||(i.monthly[u]=xr(),m=i.monthly[u]),m[p]=o.app,ce.BREAKDOWN_QUOTA_NAMES.includes(p)&&n?.id&&(m=$I(m,p,n.id,o));break}}return e},"setAppUsageValue"),zu=a((e,t,r,n)=>{if(!ce.APP_QUOTA_NAMES.includes(r))return{};let o;try{o=me.db.getProdWorkspaceID(me.context.getWorkspaceId())}catch{}if(!o||!e.apps||!e.apps[o])return{app:0};let s=e.apps[o];switch(t){case ce.QuotaUsageType.STATIC:if(s.usageQuota?.[r])return{app:s.usageQuota[r]};break;case ce.QuotaUsageType.MONTHLY:{let i=dt(),u=r;if(!s.monthly?.[i]?.[u])break;let p=s.monthly[i],m=p[u],g,y=Wa(u,n);return y&&n&&p.breakdown?.[y]&&(g=p.breakdown[y]?.values[n]),{app:m,breakdown:g||0}}}return{app:0}},"getAppUsageValue"),KI=a((e,t,r)=>{t.usageQuota.triggers||(t.usageQuota.triggers={}),r&&(t.usageQuota.triggers[e]=r)},"setStaticTriggers"),VI=a((e,t,r,n)=>{r.monthly[t].triggers||(r.monthly[t].triggers={}),n&&(r.monthly[t].triggers[e]=n)},"setMonthlyTriggers"),Zu=a((e,t,r,n,o={})=>{if(r===ce.QuotaUsageType.STATIC)t=t,e.usageQuota[t]=n.total,KI(t,e,n.triggers);else if(r===ce.QuotaUsageType.MONTHLY){t=t;let s=dt();e.monthly[s][t]=n.total,VI(t,s,e,n.triggers)}else throw new Error(`Invalid usage type: ${r}`);return Ao(e,t,r,o,n)},"coreUsageUpdate"),bo=a(async e=>{let t=Array.isArray(e)?e:[e],r=ja(),n=await Rt();for(let s of t)n=Zu(n,s.name,s.type,s.values,s.opts);let o=await r.put(n,0);return n._rev=o.rev,n},"setAllUsage"),ec=a(async(e,t,r)=>{let n=await Rt(),o=0,s={};switch(e){case ce.QuotaUsageType.STATIC:if(n.usageQuota[t]){let i=t;o=n.usageQuota[i],s=zu(n,e,t,r)}break;case ce.QuotaUsageType.MONTHLY:{let i=dt(),u=t;n.monthly[i][u]&&(o=n.monthly[i][u],s=zu(n,e,t,r));break}default:throw new Error(`Invalid usage type: ${e}`)}return ce.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 _e={};E(_e,{destroy:()=>zI,get:()=>Io,save:()=>HI});var ft=require("@budibase/backend-core");var YI=a(()=>({_id:ft.StaticDatabases.GLOBAL.docs.licenseInfo}),"newLicenseInfo"),HI=a(async e=>{let t=await Io();t={...t,...e};let n=await ft.tenancy.getGlobalDB().put(t);return t._rev=n.rev,t},"save"),Io=a(async()=>{let e=ft.tenancy.getGlobalDB();try{return await e.get(ft.StaticDatabases.GLOBAL.docs.licenseInfo)}catch(t){if(t.status===404)return YI();throw t}},"get"),zI=a(async()=>{let e=ft.tenancy.getGlobalDB(),t=await Io();t&&t._rev&&await e.remove(ft.StaticDatabases.GLOBAL.docs.licenseInfo,t._rev)},"destroy");var M={};E(M,{bulkSave:()=>uS,destroy:()=>cS,fetch:()=>nS,generateUserGroupID:()=>rS,get:()=>oS,getBulk:()=>sS,getByName:()=>So,getGroupUsers:()=>$a,getGroupUsersParams:()=>oc,getUserGroupsParams:()=>nc,save:()=>iS});var D=require("@budibase/backend-core");var ke=require("@budibase/types"),Qt=require("@budibase/backend-core");async function tc(){let e=Qt.sql.designDoc.base("type");e.sql.tables={[ke.AUDIT_LOG_TYPE]:{fields:{appId:ke.SQLiteType.TEXT,event:ke.SQLiteType.TEXT,userId:ke.SQLiteType.TEXT,timestamp:ke.SQLiteType.TEXT,metadata:ke.SQLiteType.TEXT,name:ke.SQLiteType.TEXT,type:ke.SQLiteType.TEXT,fallback:ke.SQLiteType.TEXT}}};let t=Qt.context.getAuditLogsDB(),r;try{r=await t.get(Qt.SQLITE_DESIGN_DOC_ID),r={...r,...e}}catch(n){if(n.status===404)r=e;else throw n}await t.put(r)}a(tc,"createAuditLogDesignDocSQL");var Qa=require("@budibase/backend-core");var{ViewName:JI,SEPARATOR:XI,DocumentType:ZI,createView:eS}=Qa.db,tS=ZI.USER+XI;async function rc(){let e=Qa.tenancy.getGlobalDB(),t=`function(doc) {
3
+ `)}a(zO,"insertWrapDetails");Jm.exports=zO});var Fn=p((pV,Zm)=>{"use strict";function JO(e,t){for(var r=-1,n=e==null?0:e.length;++r<n&&t(e[r],r,e)!==!1;);return e}a(JO,"arrayEach");Zm.exports=JO});var tg=p((dV,eg)=>{"use strict";var XO=Fn(),ZO=Go(),eL=1,tL=2,rL=8,aL=16,nL=32,oL=64,sL=128,iL=256,uL=512,cL=[["ary",sL],["bind",eL],["bindKey",tL],["curry",rL],["curryRight",aL],["flip",uL],["partial",nL],["partialRight",oL],["rearg",iL]];function pL(e,t){return XO(cL,function(r){var n="_."+r[0];t&r[1]&&!ZO(e,n)&&e.push(n)}),e.sort()}a(pL,"updateWrapDetails");eg.exports=pL});var li=p((mV,rg)=>{"use strict";var lL=zm(),dL=Xm(),fL=rn(),mL=tg();function gL(e,t,r){var n=t+"";return fL(e,dL(n,mL(lL(n),r)))}a(gL,"setWrapToString");rg.exports=gL});var di=p((hV,og)=>{"use strict";var hL=Vm(),yL=pi(),AL=li(),bL=1,IL=2,SL=4,wL=8,ag=32,ng=64;function EL(e,t,r,n,o,s,i,u,c,m){var g=t&wL,h=g?i:void 0,y=g?void 0:i,S=g?s:void 0,O=g?void 0:s;t|=g?ag:ng,t&=~(g?ng:ag),t&SL||(t&=~(bL|IL));var x=[e,t,o,S,h,O,y,u,c,m],_=r.apply(void 0,x);return hL(e)&&yL(_,x),_.placeholder=n,AL(_,e,t)}a(EL,"createRecurry");og.exports=EL});var fi=p((AV,sg)=>{"use strict";function TL(e){var t=e;return t.placeholder}a(TL,"getHolder");sg.exports=TL});var ug=p((IV,ig)=>{"use strict";var RL=ar(),vL=ma(),_L=Math.min;function xL(e,t){for(var r=e.length,n=_L(t.length,r),o=RL(e);n--;){var s=t[n];e[n]=vL(s,r)?o[s]:void 0}return e}a(xL,"reorder");ig.exports=xL});var Wn=p((wV,pg)=>{"use strict";var cg="__lodash_placeholder__";function CL(e,t){for(var r=-1,n=e.length,o=0,s=[];++r<n;){var i=e[r];(i===t||i===cg)&&(e[r]=cg,s[o++]=r)}return s}a(CL,"replaceHolders");pg.exports=CL});var mi=p((TV,fg)=>{"use strict";var OL=si(),LL=ii(),PL=Om(),lg=Ra(),UL=di(),qL=fi(),kL=ug(),DL=Wn(),BL=pe(),NL=1,ML=2,GL=8,FL=16,WL=128,jL=512;function dg(e,t,r,n,o,s,i,u,c,m){var g=t&WL,h=t&NL,y=t&ML,S=t&(GL|FL),O=t&jL,x=y?void 0:lg(e);function _(){for(var v=arguments.length,q=Array(v),ke=v;ke--;)q[ke]=arguments[ke];if(S)var Re=qL(_),lt=PL(q,Re);if(n&&(q=OL(q,n,o,S)),s&&(q=LL(q,s,i,S)),v-=lt,S&&v<m){var jt=DL(q,Re);return UL(e,t,dg,_.placeholder,r,q,jt,u,c,m-v)}var Sr=h?r:this,wr=y?Sr[e]:e;return v=q.length,u?q=kL(q,u):O&&v>1&&q.reverse(),g&&c<v&&(q.length=c),this&&this!==BL&&this instanceof _&&(wr=x||lg(wr)),wr.apply(Sr,q)}return a(_,"wrapper"),_}a(dg,"createHybrid");fg.exports=dg});var gg=p((vV,mg)=>{"use strict";var QL=tn(),$L=Ra(),KL=mi(),VL=di(),HL=fi(),YL=Wn(),zL=pe();function JL(e,t,r){var n=$L(e);function o(){for(var s=arguments.length,i=Array(s),u=s,c=HL(o);u--;)i[u]=arguments[u];var m=s<3&&i[0]!==c&&i[s-1]!==c?[]:YL(i,c);if(s-=m.length,s<r)return VL(e,t,KL,o.placeholder,void 0,i,m,void 0,void 0,r-s);var g=this&&this!==zL&&this instanceof o?n:e;return QL(g,this,i)}return a(o,"wrapper"),o}a(JL,"createCurry");mg.exports=JL});var yg=p((xV,hg)=>{"use strict";var XL=tn(),ZL=Ra(),eP=pe(),tP=1;function rP(e,t,r,n){var o=t&tP,s=ZL(e);function i(){for(var u=-1,c=arguments.length,m=-1,g=n.length,h=Array(g+c),y=this&&this!==eP&&this instanceof i?s:e;++m<g;)h[m]=n[m];for(;c--;)h[m++]=arguments[++u];return XL(y,o?r:this,h)}return a(i,"wrapper"),i}a(rP,"createPartial");hg.exports=rP});var Eg=p((OV,wg)=>{"use strict";var aP=si(),nP=ii(),Ag=Wn(),bg="__lodash_placeholder__",gi=1,oP=2,sP=4,Ig=8,va=128,Sg=256,iP=Math.min;function uP(e,t){var r=e[1],n=t[1],o=r|n,s=o<(gi|oP|va),i=n==va&&r==Ig||n==va&&r==Sg&&e[7].length<=t[8]||n==(va|Sg)&&t[7].length<=t[8]&&r==Ig;if(!(s||i))return e;n&gi&&(e[2]=t[2],o|=r&gi?0:sP);var u=t[3];if(u){var c=e[3];e[3]=c?aP(c,u,t[4]):u,e[4]=c?Ag(e[3],bg):t[4]}return u=t[5],u&&(c=e[5],e[5]=c?nP(c,u,t[6]):u,e[6]=c?Ag(e[5],bg):t[6]),u=t[7],u&&(e[7]=u),n&va&&(e[8]=e[8]==null?t[8]:iP(e[8],t[8])),e[9]==null&&(e[9]=t[9]),e[0]=t[0],e[1]=o,e}a(uP,"mergeData");wg.exports=uP});var Rg=p((PV,Tg)=>{"use strict";var cP=/\s/;function pP(e){for(var t=e.length;t--&&cP.test(e.charAt(t)););return t}a(pP,"trimmedEndIndex");Tg.exports=pP});var _g=p((qV,vg)=>{"use strict";var lP=Rg(),dP=/^\s+/;function fP(e){return e&&e.slice(0,lP(e)+1).replace(dP,"")}a(fP,"baseTrim");vg.exports=fP});var gr=p((DV,xg)=>{"use strict";var mP=ht(),gP=Ie(),hP="[object Symbol]";function yP(e){return typeof e=="symbol"||gP(e)&&mP(e)==hP}a(yP,"isSymbol");xg.exports=yP});var Pg=p((NV,Lg)=>{"use strict";var AP=_g(),Cg=Ce(),bP=gr(),Og=0/0,IP=/^[-+]0x[0-9a-f]+$/i,SP=/^0b[01]+$/i,wP=/^0o[0-7]+$/i,EP=parseInt;function TP(e){if(typeof e=="number")return e;if(bP(e))return Og;if(Cg(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=Cg(t)?t+"":t}if(typeof e!="string")return e===0?e:+e;e=AP(e);var r=SP.test(e);return r||wP.test(e)?EP(e.slice(2),r?2:8):IP.test(e)?Og:+e}a(TP,"toNumber");Lg.exports=TP});var kg=p((GV,qg)=>{"use strict";var RP=Pg(),Ug=1/0,vP=17976931348623157e292;function _P(e){if(!e)return e===0?e:0;if(e=RP(e),e===Ug||e===-Ug){var t=e<0?-1:1;return t*vP}return e===e?e:0}a(_P,"toFinite");qg.exports=_P});var hi=p((WV,Dg)=>{"use strict";var xP=kg();function CP(e){var t=xP(e),r=t%1;return t===t?r?t-r:t:0}a(CP,"toInteger");Dg.exports=CP});var jn=p((QV,Fg)=>{"use strict";var OP=oi(),LP=vm(),PP=gg(),UP=mi(),qP=yg(),kP=ui(),DP=Eg(),BP=pi(),NP=li(),Bg=hi(),MP="Expected a function",Ng=1,GP=2,yi=8,Ai=16,bi=32,Mg=64,Gg=Math.max;function FP(e,t,r,n,o,s,i,u){var c=t&GP;if(!c&&typeof e!="function")throw new TypeError(MP);var m=n?n.length:0;if(m||(t&=~(bi|Mg),n=o=void 0),i=i===void 0?i:Gg(Bg(i),0),u=u===void 0?u:Bg(u),m-=o?o.length:0,t&Mg){var g=n,h=o;n=o=void 0}var y=c?void 0:kP(e),S=[e,t,r,n,o,g,h,s,i,u];if(y&&DP(S,y),e=S[0],t=S[1],r=S[2],n=S[3],o=S[4],u=S[9]=S[9]===void 0?c?0:e.length:Gg(S[9]-m,0),!u&&t&(yi|Ai)&&(t&=~(yi|Ai)),!t||t==Ng)var O=LP(e,t,r);else t==yi||t==Ai?O=PP(e,t,u):(t==bi||t==(Ng|bi))&&!o.length?O=qP(e,t,r,n):O=UP.apply(void 0,S);var x=y?OP:BP;return NP(x(O,S),e,t)}a(FP,"createWrap");Fg.exports=FP});var jg=p((KV,Wg)=>{"use strict";var WP=jn(),jP=128;function QP(e,t,r){return t=r?void 0:t,t=e&&t==null?e.length:t,WP(e,jP,void 0,void 0,void 0,void 0,t)}a(QP,"ary");Wg.exports=QP});var $g=p((HV,Qg)=>{"use strict";var $P=Jo(),KP=$P(Object.keys,Object);Qg.exports=KP});var Ii=p((YV,Kg)=>{"use strict";var VP=ln(),HP=$g(),YP=Object.prototype,zP=YP.hasOwnProperty;function JP(e){if(!VP(e))return HP(e);var t=[];for(var r in Object(e))zP.call(e,r)&&r!="constructor"&&t.push(r);return t}a(JP,"baseKeys");Kg.exports=JP});var hr=p((JV,Vg)=>{"use strict";var XP=as(),ZP=Ii(),eU=er();function tU(e){return eU(e)?XP(e):ZP(e)}a(tU,"keys");Vg.exports=tU});var Si=p((ZV,Hg)=>{"use strict";var rU=sr(),aU=hr();function nU(e,t){return e&&rU(t,aU(t),e)}a(nU,"baseAssign");Hg.exports=nU});var zg=p((tH,Yg)=>{"use strict";var oU=sr(),sU=ir();function iU(e,t){return e&&oU(t,sU(t),e)}a(iU,"baseAssignIn");Yg.exports=iU});var Xg=p((aH,Jg)=>{"use strict";function uU(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(uU,"arrayFilter");Jg.exports=uU});var wi=p((oH,Zg)=>{"use strict";function cU(){return[]}a(cU,"stubArray");Zg.exports=cU});var Qn=p((iH,th)=>{"use strict";var pU=Xg(),lU=wi(),dU=Object.prototype,fU=dU.propertyIsEnumerable,eh=Object.getOwnPropertySymbols,mU=eh?function(e){return e==null?[]:(e=Object(e),pU(eh(e),function(t){return fU.call(e,t)}))}:lU;th.exports=mU});var ah=p((uH,rh)=>{"use strict";var gU=sr(),hU=Qn();function yU(e,t){return gU(e,hU(e),t)}a(yU,"copySymbols");rh.exports=yU});var Ei=p((pH,nh)=>{"use strict";var AU=en(),bU=pn(),IU=Qn(),SU=wi(),wU=Object.getOwnPropertySymbols,EU=wU?function(e){for(var t=[];e;)AU(t,IU(e)),e=bU(e);return t}:SU;nh.exports=EU});var sh=p((lH,oh)=>{"use strict";var TU=sr(),RU=Ei();function vU(e,t){return TU(e,RU(e),t)}a(vU,"copySymbolsIn");oh.exports=vU});var Ti=p((fH,ih)=>{"use strict";var _U=en(),xU=ie();function CU(e,t,r){var n=t(e);return xU(e)?n:_U(n,r(e))}a(CU,"baseGetAllKeys");ih.exports=CU});var Ri=p((gH,uh)=>{"use strict";var OU=Ti(),LU=Qn(),PU=hr();function UU(e){return OU(e,PU,LU)}a(UU,"getAllKeys");uh.exports=UU});var ph=p((yH,ch)=>{"use strict";var qU=Ti(),kU=Ei(),DU=ir();function BU(e){return qU(e,DU,kU)}a(BU,"getAllKeysIn");ch.exports=BU});var dh=p((bH,lh)=>{"use strict";var NU=yt(),MU=pe(),GU=NU(MU,"DataView");lh.exports=GU});var mh=p((IH,fh)=>{"use strict";var FU=yt(),WU=pe(),jU=FU(WU,"Promise");fh.exports=jU});var Ar=p((SH,Sh)=>{"use strict";var vi=dh(),_i=an(),xi=mh(),Ci=Wo(),Oi=ai(),Ih=ht(),yr=ko(),gh="[object Map]",QU="[object Object]",hh="[object Promise]",yh="[object Set]",Ah="[object WeakMap]",bh="[object DataView]",$U=yr(vi),KU=yr(_i),VU=yr(xi),HU=yr(Ci),YU=yr(Oi),Bt=Ih;(vi&&Bt(new vi(new ArrayBuffer(1)))!=bh||_i&&Bt(new _i)!=gh||xi&&Bt(xi.resolve())!=hh||Ci&&Bt(new Ci)!=yh||Oi&&Bt(new Oi)!=Ah)&&(Bt=a(function(e){var t=Ih(e),r=t==QU?e.constructor:void 0,n=r?yr(r):"";if(n)switch(n){case $U:return bh;case KU:return gh;case VU:return hh;case HU:return yh;case YU:return Ah}return t},"getTag"));Sh.exports=Bt});var Eh=p((EH,wh)=>{"use strict";var zU=Object.prototype,JU=zU.hasOwnProperty;function XU(e){var t=e.length,r=new e.constructor(t);return t&&typeof e[0]=="string"&&JU.call(e,"index")&&(r.index=e.index,r.input=e.input),r}a(XU,"initCloneArray");wh.exports=XU});var Rh=p((RH,Th)=>{"use strict";var ZU=cn();function eq(e,t){var r=t?ZU(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.byteLength)}a(eq,"cloneDataView");Th.exports=eq});var _h=p((_H,vh)=>{"use strict";var tq=/\w*$/;function rq(e){var t=new e.constructor(e.source,tq.exec(e));return t.lastIndex=e.lastIndex,t}a(rq,"cloneRegExp");vh.exports=rq});var Ph=p((CH,Lh)=>{"use strict";var xh=Ct(),Ch=xh?xh.prototype:void 0,Oh=Ch?Ch.valueOf:void 0;function aq(e){return Oh?Object(Oh.call(e)):{}}a(aq,"cloneSymbol");Lh.exports=aq});var qh=p((LH,Uh)=>{"use strict";var nq=cn(),oq=Rh(),sq=_h(),iq=Ph(),uq=zo(),cq="[object Boolean]",pq="[object Date]",lq="[object Map]",dq="[object Number]",fq="[object RegExp]",mq="[object Set]",gq="[object String]",hq="[object Symbol]",yq="[object ArrayBuffer]",Aq="[object DataView]",bq="[object Float32Array]",Iq="[object Float64Array]",Sq="[object Int8Array]",wq="[object Int16Array]",Eq="[object Int32Array]",Tq="[object Uint8Array]",Rq="[object Uint8ClampedArray]",vq="[object Uint16Array]",_q="[object Uint32Array]";function xq(e,t,r){var n=e.constructor;switch(t){case yq:return nq(e);case cq:case pq:return new n(+e);case Aq:return oq(e,r);case bq:case Iq:case Sq:case wq:case Eq:case Tq:case Rq:case vq:case _q:return uq(e,r);case lq:return new n;case dq:case gq:return new n(e);case fq:return sq(e);case mq:return new n;case hq:return iq(e)}}a(xq,"initCloneByTag");Uh.exports=xq});var Dh=p((UH,kh)=>{"use strict";var Cq=Ar(),Oq=Ie(),Lq="[object Map]";function Pq(e){return Oq(e)&&Cq(e)==Lq}a(Pq,"baseIsMap");kh.exports=Pq});var Gh=p((kH,Mh)=>{"use strict";var Uq=Dh(),qq=dn(),Bh=fn(),Nh=Bh&&Bh.isMap,kq=Nh?qq(Nh):Uq;Mh.exports=kq});var Wh=p((DH,Fh)=>{"use strict";var Dq=Ar(),Bq=Ie(),Nq="[object Set]";function Mq(e){return Bq(e)&&Dq(e)==Nq}a(Mq,"baseIsSet");Fh.exports=Mq});var Kh=p((NH,$h)=>{"use strict";var Gq=Wh(),Fq=dn(),jh=fn(),Qh=jh&&jh.isSet,Wq=Qh?Fq(Qh):Gq;$h.exports=Wq});var Li=p((MH,zh)=>{"use strict";var jq=sa(),Qq=Fn(),$q=rs(),Kq=Si(),Vq=zg(),Hq=Ho(),Yq=ar(),zq=ah(),Jq=sh(),Xq=Ri(),Zq=ph(),ek=Ar(),tk=Eh(),rk=qh(),ak=Xo(),nk=ie(),ok=la(),sk=Gh(),ik=Ce(),uk=Kh(),ck=hr(),pk=ir(),lk=1,dk=2,fk=4,Vh="[object Arguments]",mk="[object Array]",gk="[object Boolean]",hk="[object Date]",yk="[object Error]",Hh="[object Function]",Ak="[object GeneratorFunction]",bk="[object Map]",Ik="[object Number]",Yh="[object Object]",Sk="[object RegExp]",wk="[object Set]",Ek="[object String]",Tk="[object Symbol]",Rk="[object WeakMap]",vk="[object ArrayBuffer]",_k="[object DataView]",xk="[object Float32Array]",Ck="[object Float64Array]",Ok="[object Int8Array]",Lk="[object Int16Array]",Pk="[object Int32Array]",Uk="[object Uint8Array]",qk="[object Uint8ClampedArray]",kk="[object Uint16Array]",Dk="[object Uint32Array]",B={};B[Vh]=B[mk]=B[vk]=B[_k]=B[gk]=B[hk]=B[xk]=B[Ck]=B[Ok]=B[Lk]=B[Pk]=B[bk]=B[Ik]=B[Yh]=B[Sk]=B[wk]=B[Ek]=B[Tk]=B[Uk]=B[qk]=B[kk]=B[Dk]=!0;B[yk]=B[Hh]=B[Rk]=!1;function $n(e,t,r,n,o,s){var i,u=t&lk,c=t&dk,m=t&fk;if(r&&(i=o?r(e,n,o,s):r(e)),i!==void 0)return i;if(!ik(e))return e;var g=nk(e);if(g){if(i=tk(e),!u)return Yq(e,i)}else{var h=ek(e),y=h==Hh||h==Ak;if(ok(e))return Hq(e,u);if(h==Yh||h==Vh||y&&!o){if(i=c||y?{}:ak(e),!u)return c?Jq(e,Vq(i,e)):zq(e,Kq(i,e))}else{if(!B[h])return o?e:{};i=rk(e,h,u)}}s||(s=new jq);var S=s.get(e);if(S)return S;s.set(e,i),uk(e)?e.forEach(function(_){i.add($n(_,t,r,_,e,s))}):sk(e)&&e.forEach(function(_,v){i.set(v,$n(_,t,r,v,e,s))});var O=m?c?Zq:Xq:c?pk:ck,x=g?void 0:O(e);return Qq(x||e,function(_,v){x&&(v=_,_=e[v]),$q(i,v,$n(_,t,r,v,e,s))}),i}a($n,"baseClone");zh.exports=$n});var Xh=p((FH,Jh)=>{"use strict";var Bk=Li(),Nk=4;function Mk(e){return Bk(e,Nk)}a(Mk,"clone");Jh.exports=Mk});var ey=p((jH,Zh)=>{"use strict";var Gk=jn(),Fk=8;function Pi(e,t,r){t=r?void 0:t;var n=Gk(e,Fk,void 0,void 0,void 0,void 0,void 0,t);return n.placeholder=Pi.placeholder,n}a(Pi,"curry");Pi.placeholder={};Zh.exports=Pi});var ry=p(($H,ty)=>{"use strict";var Wk=ht(),jk=Ie(),Qk=Zo(),$k="[object DOMException]",Kk="[object Error]";function Vk(e){if(!jk(e))return!1;var t=Wk(e);return t==Kk||t==$k||typeof e.message=="string"&&typeof e.name=="string"&&!Qk(e)}a(Vk,"isError");ty.exports=Vk});var ny=p((VH,ay)=>{"use strict";var Hk=Ar(),Yk=Ie(),zk="[object WeakMap]";function Jk(e){return Yk(e)&&Hk(e)==zk}a(Jk,"isWeakMap");ay.exports=Jk});var sy=p((YH,oy)=>{"use strict";function Xk(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(Xk,"arraySome");oy.exports=Xk});var Ui=p((JH,iy)=>{"use strict";var Zk=Mo(),eD=sy(),tD=Fo(),rD=1,aD=2;function nD(e,t,r,n,o,s){var i=r&rD,u=e.length,c=t.length;if(u!=c&&!(i&&c>u))return!1;var m=s.get(e),g=s.get(t);if(m&&g)return m==t&&g==e;var h=-1,y=!0,S=r&aD?new Zk:void 0;for(s.set(e,t),s.set(t,e);++h<u;){var O=e[h],x=t[h];if(n)var _=i?n(x,O,h,t,e,s):n(O,x,h,e,t,s);if(_!==void 0){if(_)continue;y=!1;break}if(S){if(!eD(t,function(v,q){if(!tD(S,q)&&(O===v||o(O,v,r,n,s)))return S.push(q)})){y=!1;break}}else if(!(O===x||o(O,x,r,n,s))){y=!1;break}}return s.delete(e),s.delete(t),y}a(nD,"equalArrays");iy.exports=nD});var cy=p((ZH,uy)=>{"use strict";function oD(e){var t=-1,r=Array(e.size);return e.forEach(function(n,o){r[++t]=[o,n]}),r}a(oD,"mapToArray");uy.exports=oD});var my=p((t2,fy)=>{"use strict";var py=Ct(),ly=Yo(),sD=Jt(),iD=Ui(),uD=cy(),cD=sn(),pD=1,lD=2,dD="[object Boolean]",fD="[object Date]",mD="[object Error]",gD="[object Map]",hD="[object Number]",yD="[object RegExp]",AD="[object Set]",bD="[object String]",ID="[object Symbol]",SD="[object ArrayBuffer]",wD="[object DataView]",dy=py?py.prototype:void 0,qi=dy?dy.valueOf:void 0;function ED(e,t,r,n,o,s,i){switch(r){case wD:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case SD:return!(e.byteLength!=t.byteLength||!s(new ly(e),new ly(t)));case dD:case fD:case hD:return sD(+e,+t);case mD:return e.name==t.name&&e.message==t.message;case yD:case bD:return e==t+"";case gD:var u=uD;case AD:var c=n&pD;if(u||(u=cD),e.size!=t.size&&!c)return!1;var m=i.get(e);if(m)return m==t;n|=lD,i.set(e,t);var g=iD(u(e),u(t),n,o,s,i);return i.delete(e),g;case ID:if(qi)return qi.call(e)==qi.call(t)}return!1}a(ED,"equalByTag");fy.exports=ED});var yy=p((a2,hy)=>{"use strict";var gy=Ri(),TD=1,RD=Object.prototype,vD=RD.hasOwnProperty;function _D(e,t,r,n,o,s){var i=r&TD,u=gy(e),c=u.length,m=gy(t),g=m.length;if(c!=g&&!i)return!1;for(var h=c;h--;){var y=u[h];if(!(i?y in t:vD.call(t,y)))return!1}var S=s.get(e),O=s.get(t);if(S&&O)return S==t&&O==e;var x=!0;s.set(e,t),s.set(t,e);for(var _=i;++h<c;){y=u[h];var v=e[y],q=t[y];if(n)var ke=i?n(q,v,y,t,e,s):n(v,q,y,e,t,s);if(!(ke===void 0?v===q||o(v,q,r,n,s):ke)){x=!1;break}_||(_=y=="constructor")}if(x&&!_){var Re=e.constructor,lt=t.constructor;Re!=lt&&"constructor"in e&&"constructor"in t&&!(typeof Re=="function"&&Re instanceof Re&&typeof lt=="function"&&lt instanceof lt)&&(x=!1)}return s.delete(e),s.delete(t),x}a(_D,"equalObjects");hy.exports=_D});var Ry=p((o2,Ty)=>{"use strict";var ki=sa(),xD=Ui(),CD=my(),OD=yy(),Ay=Ar(),by=ie(),Iy=la(),LD=mn(),PD=1,Sy="[object Arguments]",wy="[object Array]",Kn="[object Object]",UD=Object.prototype,Ey=UD.hasOwnProperty;function qD(e,t,r,n,o,s){var i=by(e),u=by(t),c=i?wy:Ay(e),m=u?wy:Ay(t);c=c==Sy?Kn:c,m=m==Sy?Kn:m;var g=c==Kn,h=m==Kn,y=c==m;if(y&&Iy(e)){if(!Iy(t))return!1;i=!0,g=!1}if(y&&!g)return s||(s=new ki),i||LD(e)?xD(e,t,r,n,o,s):CD(e,t,c,r,n,o,s);if(!(r&PD)){var S=g&&Ey.call(e,"__wrapped__"),O=h&&Ey.call(t,"__wrapped__");if(S||O){var x=S?e.value():e,_=O?t.value():t;return s||(s=new ki),o(x,_,r,n,s)}}return y?(s||(s=new ki),OD(e,t,r,n,o,s)):!1}a(qD,"baseIsEqualDeep");Ty.exports=qD});var Di=p((i2,xy)=>{"use strict";var kD=Ry(),vy=Ie();function _y(e,t,r,n,o){return e===t?!0:e==null||t==null||!vy(e)&&!vy(t)?e!==e&&t!==t:kD(e,t,r,n,_y,o)}a(_y,"baseIsEqual");xy.exports=_y});var Oy=p((c2,Cy)=>{"use strict";var DD=sa(),BD=Di(),ND=1,MD=2;function GD(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],m=e[c],g=u[1];if(i&&u[2]){if(m===void 0&&!(c in e))return!1}else{var h=new DD;if(n)var y=n(m,g,c,e,t,h);if(!(y===void 0?BD(g,m,ND|MD,n,h):y))return!1}}return!0}a(GD,"baseIsMatch");Cy.exports=GD});var Bi=p((l2,Ly)=>{"use strict";var FD=Ce();function WD(e){return e===e&&!FD(e)}a(WD,"isStrictComparable");Ly.exports=WD});var Uy=p((f2,Py)=>{"use strict";var jD=Bi(),QD=hr();function $D(e){for(var t=QD(e),r=t.length;r--;){var n=t[r],o=e[n];t[r]=[n,o,jD(o)]}return t}a($D,"getMatchData");Py.exports=$D});var Ni=p((g2,qy)=>{"use strict";function KD(e,t){return function(r){return r==null?!1:r[e]===t&&(t!==void 0||e in Object(r))}}a(KD,"matchesStrictComparable");qy.exports=KD});var Dy=p((y2,ky)=>{"use strict";var VD=Oy(),HD=Uy(),YD=Ni();function zD(e){var t=HD(e);return t.length==1&&t[0][2]?YD(t[0][0],t[0][1]):function(r){return r===e||VD(r,e,t)}}a(zD,"baseMatches");ky.exports=zD});var Vn=p((b2,By)=>{"use strict";var JD=ie(),XD=gr(),ZD=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,eB=/^\w*$/;function tB(e,t){if(JD(e))return!1;var r=typeof e;return r=="number"||r=="symbol"||r=="boolean"||e==null||XD(e)?!0:eB.test(e)||!ZD.test(e)||t!=null&&e in Object(t)}a(tB,"isKey");By.exports=tB});var Gy=p((S2,My)=>{"use strict";var Ny=nn(),rB="Expected a function";function Mi(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(rB);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(Mi.Cache||Ny),r}a(Mi,"memoize");Mi.Cache=Ny;My.exports=Mi});var Wy=p((E2,Fy)=>{"use strict";var aB=Gy(),nB=500;function oB(e){var t=aB(e,function(n){return r.size===nB&&r.clear(),n}),r=t.cache;return t}a(oB,"memoizeCapped");Fy.exports=oB});var Gi=p((R2,jy)=>{"use strict";var sB=Wy(),iB=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,uB=/\\(\\)?/g,cB=sB(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(iB,function(r,n,o,s){t.push(o?s.replace(uB,"$1"):n||r)}),t});jy.exports=cB});var Fi=p((v2,Qy)=>{"use strict";function pB(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(pB,"arrayMap");Qy.exports=pB});var zy=p((x2,Yy)=>{"use strict";var $y=Ct(),lB=Fi(),dB=ie(),fB=gr(),mB=1/0,Ky=$y?$y.prototype:void 0,Vy=Ky?Ky.toString:void 0;function Hy(e){if(typeof e=="string")return e;if(dB(e))return lB(e,Hy)+"";if(fB(e))return Vy?Vy.call(e):"";var t=e+"";return t=="0"&&1/e==-mB?"-0":t}a(Hy,"baseToString");Yy.exports=Hy});var Wi=p((O2,Jy)=>{"use strict";var gB=zy();function hB(e){return e==null?"":gB(e)}a(hB,"toString");Jy.exports=hB});var ji=p((P2,Xy)=>{"use strict";var yB=ie(),AB=Vn(),bB=Gi(),IB=Wi();function SB(e,t){return yB(e)?e:AB(e,t)?[e]:bB(IB(e))}a(SB,"castPath");Xy.exports=SB});var br=p((q2,Zy)=>{"use strict";var wB=gr(),EB=1/0;function TB(e){if(typeof e=="string"||wB(e))return e;var t=e+"";return t=="0"&&1/e==-EB?"-0":t}a(TB,"toKey");Zy.exports=TB});var Qi=p((D2,eA)=>{"use strict";var RB=ji(),vB=br();function _B(e,t){t=RB(t,e);for(var r=0,n=t.length;e!=null&&r<n;)e=e[vB(t[r++])];return r&&r==n?e:void 0}a(_B,"baseGet");eA.exports=_B});var rA=p((N2,tA)=>{"use strict";var xB=Qi();function CB(e,t,r){var n=e==null?void 0:xB(e,t);return n===void 0?r:n}a(CB,"get");tA.exports=CB});var nA=p((G2,aA)=>{"use strict";function OB(e,t){return e!=null&&t in Object(e)}a(OB,"baseHasIn");aA.exports=OB});var sA=p((W2,oA)=>{"use strict";var LB=ji(),PB=Zr(),UB=ie(),qB=ma(),kB=un(),DB=br();function BB(e,t,r){t=LB(t,e);for(var n=-1,o=t.length,s=!1;++n<o;){var i=DB(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&&kB(o)&&qB(i,o)&&(UB(e)||PB(e)))}a(BB,"hasPath");oA.exports=BB});var uA=p((Q2,iA)=>{"use strict";var NB=nA(),MB=sA();function GB(e,t){return e!=null&&MB(e,t,NB)}a(GB,"hasIn");iA.exports=GB});var pA=p((K2,cA)=>{"use strict";var FB=Di(),WB=rA(),jB=uA(),QB=Vn(),$B=Bi(),KB=Ni(),VB=br(),HB=1,YB=2;function zB(e,t){return QB(e)&&$B(t)?KB(VB(e),t):function(r){var n=WB(r,e);return n===void 0&&n===t?jB(r,e):FB(t,n,HB|YB)}}a(zB,"baseMatchesProperty");cA.exports=zB});var dA=p((H2,lA)=>{"use strict";function JB(e){return function(t){return t?.[e]}}a(JB,"baseProperty");lA.exports=JB});var mA=p((z2,fA)=>{"use strict";var XB=Qi();function ZB(e){return function(t){return XB(t,e)}}a(ZB,"basePropertyDeep");fA.exports=ZB});var hA=p((X2,gA)=>{"use strict";var eN=dA(),tN=mA(),rN=Vn(),aN=br();function nN(e){return rN(e)?eN(aN(e)):tN(e)}a(nN,"property");gA.exports=nN});var $i=p((eY,yA)=>{"use strict";var oN=Dy(),sN=pA(),iN=ea(),uN=ie(),cN=hA();function pN(e){return typeof e=="function"?e:e==null?iN:typeof e=="object"?uN(e)?sN(e[0],e[1]):oN(e):cN(e)}a(pN,"baseIteratee");yA.exports=pN});var bA=p((rY,AA)=>{"use strict";var lN=Li(),dN=$i(),fN=1;function mN(e){return dN(typeof e=="function"?e:lN(e,fN))}a(mN,"iteratee");AA.exports=mN});var SA=p((nY,IA)=>{"use strict";var gN=Po();function hN(e){var t=e==null?0:e.length;return t?gN(e,1):[]}a(hN,"flatten");IA.exports=hN});var EA=p((sY,wA)=>{"use strict";var yN=SA(),AN=Uo(),bN=rn();function IN(e){return bN(AN(e,void 0,yN),e+"")}a(IN,"flatRest");wA.exports=IN});var RA=p((uY,TA)=>{"use strict";var SN=jn(),wN=EA(),EN=256,TN=wN(function(e,t){return SN(e,EN,void 0,void 0,void 0,t)});TA.exports=TN});var _A=p((cY,vA)=>{"use strict";var RN=Fi(),vN=ar(),_N=ie(),xN=gr(),CN=Gi(),ON=br(),LN=Wi();function PN(e){return _N(e)?RN(e,ON):xN(e)?[e]:vN(CN(LN(e)))}a(PN,"toPath");vA.exports=PN});var CA=p((lY,xA)=>{"use strict";xA.exports={ary:jg(),assign:Si(),clone:Xh(),curry:ey(),forEach:Fn(),isArray:ie(),isError:ry(),isFunction:ta(),isWeakMap:ny(),iteratee:bA(),keys:Ii(),rearg:RA(),toInteger:hi(),toPath:_A()}});var LA=p((dY,OA)=>{"use strict";var UN=Am(),qN=CA();function kN(e,t,r){return UN(qN,e,t,r)}a(kN,"convert");OA.exports=kN});var Ki=p((mY,UA)=>{"use strict";var DN=LA(),PA=DN("merge",ns());PA.placeholder=Zs();UA.exports=PA});var kb=p((O4,qb)=>{"use strict";function rM(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(rM,"arrayAggregator");qb.exports=rM});var Bb=p((P4,Db)=>{"use strict";var aM=Vo(),nM=hr();function oM(e,t){return e&&aM(e,t,nM)}a(oM,"baseForOwn");Db.exports=oM});var Mb=p((q4,Nb)=>{"use strict";var sM=er();function iM(e,t){return function(r,n){if(r==null)return r;if(!sM(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(iM,"createBaseEach");Nb.exports=iM});var Fb=p((D4,Gb)=>{"use strict";var uM=Bb(),cM=Mb(),pM=cM(uM);Gb.exports=pM});var jb=p((B4,Wb)=>{"use strict";var lM=Fb();function dM(e,t,r,n){return lM(e,function(o,s,i){t(n,o,r(o),i)}),n}a(dM,"baseAggregator");Wb.exports=dM});var $b=p((M4,Qb)=>{"use strict";var fM=kb(),mM=jb(),gM=$i(),hM=ie();function yM(e,t){return function(r,n){var o=hM(r)?fM:mM,s=t?t():{};return o(r,e,gM(n,2),s)}}a(yM,"createAggregator");Qb.exports=yM});var Vb=p((F4,Kb)=>{"use strict";var AM=ia(),bM=$b(),IM=Object.prototype,SM=IM.hasOwnProperty,wM=bM(function(e,t,r){SM.call(e,r)?e[r].push(t):AM(e,r,[t])});Kb.exports=wM});var KM={};E(KM,{Method:()=>co,ai:()=>ku,api:()=>cu,auditLogs:()=>St,automations:()=>On,backups:()=>we,branding:()=>In,constants:()=>Kr,environmentVariables:()=>Xe,features:()=>Me,groups:()=>Q,init:()=>dm,licensing:()=>Ve,logger:()=>Nt,mappers:()=>Y,middleware:()=>eu,plugins:()=>Ln,publicApi:()=>qn,quotas:()=>Je,scimGroups:()=>Ir,scimUsers:()=>ye,sdk:()=>Hi,users:()=>ot,utils:()=>Yt});module.exports=GI(KM);var co=(s=>(s.POST="POST",s.GET="GET",s.PATCH="PATCH",s.DELETE="DELETE",s.PUT="PUT",s))(co||{});var Hi={};E(Hi,{ai:()=>Ss,auditLogs:()=>St,automations:()=>On,backups:()=>we,branding:()=>In,environmentVariables:()=>Xe,features:()=>Me,groups:()=>Q,init:()=>dm,licensing:()=>Ve,logger:()=>Nt,plugins:()=>Ln,publicApi:()=>qn,quotas:()=>Je,scimGroups:()=>Ir,scimUsers:()=>ye,users:()=>ot,utils:()=>Yt});var In={};E(In,{getBrandingConfig:()=>Px});var Me={};E(Me,{checkBackups:()=>le,checkFeature:()=>An,checkFeatures:()=>gs,checkSCIM:()=>bs,isAppBuildersEnabled:()=>Ut,isAuditLogsEnabled:()=>bn,isBackupsEnabled:()=>hs,isBrandingEnabled:()=>ys,isEnforceableSSO:()=>Rf,isExpandedPublicApiEnabled:()=>at,isPWAEnabled:()=>Rx,isPkceOidcEnabled:()=>_x,isRecaptchaEnabled:()=>vx,isSSOEnforced:()=>xx,isSyncAutomationsEnabled:()=>Ex,isTriggerAutomationRunEnabled:()=>Tx,isUserGroupsEnabled:()=>As,isViewPermissionEnabled:()=>Cx,isViewReadonlyColumnsEnabled:()=>Ox});var rt=require("@budibase/backend-core"),re=require("@budibase/types");var Ve={};E(Ve,{cache:()=>Be,client:()=>gt,features:()=>Xa,getFreeLicense:()=>ds,getLicense:()=>ps,getLicenseFromKey:()=>ls,keys:()=>ms,offline:()=>gn,quotas:()=>Za});var Be={};E(Be,{getCachedLicense:()=>Ef,invalidate:()=>Tf,refresh:()=>Ot});var Na=require("@budibase/backend-core");var Rr,FI=a(async()=>{Rr=await Na.RedisClient.init(Na.redis.utils.Databases.LICENSES)},"init"),WI=a(async()=>{Rr&&await Rr.finish()},"shutdown");process.on("exit",async()=>{await WI()});var po=a(async()=>(Rr||await FI(),Rr),"getClient");var gt={};E(gt,{activateLicenseKey:()=>_o,getLicense:()=>Vt,getLicenseFromKey:()=>vo,triggerQuota:()=>_S});var Qu=U(require("node-fetch"));var $u=require("@budibase/backend-core"),lo=require("dd-trace"),Ku=require("dd-trace/ext/formats");var fo=class{constructor(t){this.apiCall=t=>async(r="",n={})=>await lo.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";$u.logging.correlation.setHeader(s),lo.tracer.inject(o,Ku.HTTP_HEADERS,s);let u={method:t,body:i?JSON.stringify(n.body):n.body,headers:s,credentials:"include"};return(0,Qu.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")}},mo=fo;var Ya=require("@budibase/types"),P=require("@budibase/backend-core");var $e={};E($e,{bustCache:()=>yo,getCurrentUsageValues:()=>ec,getQuotaUsage:()=>Rt,setAllUsage:()=>bo,setAppUsageValue:()=>Ao,setUsage:()=>Ju,setUsagePerApp:()=>Xu,utils:()=>Cr});var me=require("@budibase/backend-core"),ce=require("@budibase/types");var Cr={};E(Cr,{generateBaseQuotaUsage:()=>Ga,generateNewMonthlyQuotas:()=>xr,generateNewQuotaUsage:()=>ho,getBreakdownName:()=>Wa,getCurrentMonthString:()=>dt,getQuotaDocId:()=>_r,setCurrentMonth:()=>Fa,setQuotaReset:()=>go});var vr=require("@budibase/backend-core"),Ma=require("@budibase/shared-core"),z=require("@budibase/types");var _r=a(()=>vr.context.isSelfHostUsingCloud()?`quota_usage_${vr.context.getTenantId()}`:vr.db.StaticDatabases.GLOBAL.docs.usageQuota,"getQuotaDocId"),Vu=a(()=>{let e=new Date;return new Date(e.getFullYear(),e.getMonth()+1,1).toISOString()},"getNextQuotaReset"),go=a(e=>{e.quotaReset=Vu()},"setQuotaReset"),dt=a(()=>{let e=new Date,t=e.getMonth()+1,r=e.getFullYear();return`${t}-${r}`},"getCurrentMonthString"),Ga=a(()=>({usageQuota:{[z.StaticQuotaName.WORKSPACES]:0,[z.StaticQuotaName.ROWS]:0,[z.StaticQuotaName.PLUGINS]:0,[z.StaticQuotaName.USERS]:0,[z.StaticQuotaName.CREATORS]:0,[z.StaticQuotaName.USER_GROUPS]:0,[z.StaticQuotaName.AI_CUSTOM_CONFIGS]:0,triggers:{}},monthly:{[dt()]:xr()}}),"generateBaseQuotaUsage"),ho=a(()=>{let e={_id:_r(),quotaReset:Vu(),...Ga(),apps:{}};return Fa(e),e},"generateNewQuotaUsage"),xr=a(()=>({[z.MonthlyQuotaName.QUERIES]:0,[z.MonthlyQuotaName.AUTOMATIONS]:0,[z.MonthlyQuotaName.BUDIBASE_AI_CREDITS]:0,[z.MonthlyQuotaName.ACTIONS]:0,triggers:{}}),"generateNewMonthlyQuotas"),Fa=a(e=>{let t=dt();e.monthly||(e.monthly={}),e.monthly[t]||(e.monthly[t]=xr()),e.monthly.current=e.monthly[t]},"setCurrentMonth"),Wa=a((e,t)=>{if(!(!t||!e))switch(e){case z.MonthlyQuotaName.AUTOMATIONS:return z.BreakdownQuotaName.AUTOMATIONS;case z.MonthlyQuotaName.QUERIES:return(0,Ma.isTableIdOrExternalTableId)(t)?z.BreakdownQuotaName.ROW_QUERIES:(0,Ma.isDatasourceOrDatasourcePlusId)(t)?z.BreakdownQuotaName.DATASOURCE_QUERIES:void 0}},"getBreakdownName");var Hu=me.Duration.fromSeconds(60).toMs(),{Writethrough:Yu}=me.cache.writethrough;function QI(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(QI,"clearDeprecated");var ja=a(()=>me.tenancy.isSelfHostUsingCloud()?new Yu(me.tenancy.getSelfHostCloudDB(),Hu):new Yu(me.tenancy.getGlobalDB(),Hu),"getDB");async function yo(e=0){let r=ja(),n=_r(),o=await r.tryGet(n);o&&o._rev&&await r.remove(n,o._rev).catch(async s=>{if(e<1)return await yo(e+1);throw s})}a(yo,"bustCache");var Rt=a(async()=>{let e=ja(),t=await e.tryGet(_r());if(!t){t=ho();let{rev:r}=await e.put(t);t._rev=r}return Fa(t),go(t),QI(t)},"getQuotaUsage"),Ju=a(async(e,t,r)=>bo({name:t,type:r,values:{total:e}}),"setUsage"),Xu=a(async(e,t,r)=>{let n=ja(),o=await Rt(),s=Object.values(e).reduce((u,c)=>u+c,0);for(let[u,c]of Object.entries(e))o=Zu(o,t,r,{total:s,app:c},{appId:u});let i=await n.put(o);return o._rev=i.rev,o},"setUsagePerApp"),$I=a((e,t,r,n)=>{let o=Wa(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"),Ao=a((e,t,r,n={},o)=>{let s;try{s=me.db.getProdWorkspaceID(n?.appId||me.context.getWorkspaceId())}catch{}if(!s||!o.app||!ce.APP_QUOTA_NAMES.includes(t))return e;e.apps?.[s]||(e.apps={...e.apps,[s]:Ga()});let i=e.apps[s];switch(r){case ce.QuotaUsageType.STATIC:i.usageQuota[t]=o.app;break;case ce.QuotaUsageType.MONTHLY:{let u=dt(),c=t,m=i.monthly[u];m||(i.monthly[u]=xr(),m=i.monthly[u]),m[c]=o.app,ce.BREAKDOWN_QUOTA_NAMES.includes(c)&&n?.id&&(m=$I(m,c,n.id,o));break}}return e},"setAppUsageValue"),zu=a((e,t,r,n)=>{if(!ce.APP_QUOTA_NAMES.includes(r))return{};let o;try{o=me.db.getProdWorkspaceID(me.context.getWorkspaceId())}catch{}if(!o||!e.apps||!e.apps[o])return{app:0};let s=e.apps[o];switch(t){case ce.QuotaUsageType.STATIC:if(s.usageQuota?.[r])return{app:s.usageQuota[r]};break;case ce.QuotaUsageType.MONTHLY:{let i=dt(),u=r;if(!s.monthly?.[i]?.[u])break;let c=s.monthly[i],m=c[u],g,h=Wa(u,n);return h&&n&&c.breakdown?.[h]&&(g=c.breakdown[h]?.values[n]),{app:m,breakdown:g||0}}}return{app:0}},"getAppUsageValue"),KI=a((e,t,r)=>{t.usageQuota.triggers||(t.usageQuota.triggers={}),r&&(t.usageQuota.triggers[e]=r)},"setStaticTriggers"),VI=a((e,t,r,n)=>{r.monthly[t].triggers||(r.monthly[t].triggers={}),n&&(r.monthly[t].triggers[e]=n)},"setMonthlyTriggers"),Zu=a((e,t,r,n,o={})=>{if(r===ce.QuotaUsageType.STATIC)t=t,e.usageQuota[t]=n.total,KI(t,e,n.triggers);else if(r===ce.QuotaUsageType.MONTHLY){t=t;let s=dt();e.monthly[s][t]=n.total,VI(t,s,e,n.triggers)}else throw new Error(`Invalid usage type: ${r}`);return Ao(e,t,r,o,n)},"coreUsageUpdate"),bo=a(async e=>{let t=Array.isArray(e)?e:[e],r=ja(),n=await Rt();for(let s of t)n=Zu(n,s.name,s.type,s.values,s.opts);let o=await r.put(n,0);return n._rev=o.rev,n},"setAllUsage"),ec=a(async(e,t,r)=>{let n=await Rt(),o=0,s={};switch(e){case ce.QuotaUsageType.STATIC:if(n.usageQuota[t]){let i=t;o=n.usageQuota[i],s=zu(n,e,t,r)}break;case ce.QuotaUsageType.MONTHLY:{let i=dt(),u=t;n.monthly[i][u]&&(o=n.monthly[i][u],s=zu(n,e,t,r));break}default:throw new Error(`Invalid usage type: ${e}`)}return ce.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 _e={};E(_e,{destroy:()=>zI,get:()=>Io,save:()=>YI});var ft=require("@budibase/backend-core");var HI=a(()=>({_id:ft.StaticDatabases.GLOBAL.docs.licenseInfo}),"newLicenseInfo"),YI=a(async e=>{let t=await Io();t={...t,...e};let n=await ft.tenancy.getGlobalDB().put(t);return t._rev=n.rev,t},"save"),Io=a(async()=>{let e=ft.tenancy.getGlobalDB();try{return await e.get(ft.StaticDatabases.GLOBAL.docs.licenseInfo)}catch(t){if(t.status===404)return HI();throw t}},"get"),zI=a(async()=>{let e=ft.tenancy.getGlobalDB(),t=await Io();t&&t._rev&&await e.remove(ft.StaticDatabases.GLOBAL.docs.licenseInfo,t._rev)},"destroy");var M={};E(M,{bulkSave:()=>uS,destroy:()=>cS,fetch:()=>nS,generateUserGroupID:()=>rS,get:()=>oS,getBulk:()=>sS,getByName:()=>So,getGroupUsers:()=>$a,getGroupUsersParams:()=>oc,getUserGroupsParams:()=>nc,save:()=>iS});var k=require("@budibase/backend-core");var De=require("@budibase/types"),Qt=require("@budibase/backend-core");async function tc(){let e=Qt.sql.designDoc.base("type");e.sql.tables={[De.AUDIT_LOG_TYPE]:{fields:{appId:De.SQLiteType.TEXT,event:De.SQLiteType.TEXT,userId:De.SQLiteType.TEXT,timestamp:De.SQLiteType.TEXT,metadata:De.SQLiteType.TEXT,name:De.SQLiteType.TEXT,type:De.SQLiteType.TEXT,fallback:De.SQLiteType.TEXT}}};let t=Qt.context.getAuditLogsDB(),r;try{r=await t.get(Qt.SQLITE_DESIGN_DOC_ID),r={...r,...e}}catch(n){if(n.status===404)r=e;else throw n}await t.put(r)}a(tc,"createAuditLogDesignDocSQL");var Qa=require("@budibase/backend-core");var{ViewName:JI,SEPARATOR:XI,DocumentType:ZI,createView:eS}=Qa.db,tS=ZI.USER+XI;async function rc(){let e=Qa.tenancy.getGlobalDB(),t=`function(doc) {
4
4
  if (doc._id.startsWith("${tS}") && 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 eS(e,t,JI.USER_BY_GROUP)}a(rc,"createGroupUserLookupView");var ac=`${D.DocumentType.GROUP}${D.SEPARATOR}`,Or=a(async()=>(await D.db.getAllWorkspaces({dev:!0,efficient:!0,idsOnly:!0})).map(t=>D.db.getProdWorkspaceID(t)),"getAppIDs");function nc(e,t={}){e||(e="");let r=e?.startsWith(D.DocumentType.GROUP)?"":ac;return{...t,startkey:`${r}${e}`,endkey:`${r}${e}${D.UNICODE_MAX}`}}a(nc,"getUserGroupsParams");function oc(e,t={}){e||(e="");let{emailSearch:r,bookmark:n,...o}=t;return r?{...o,startkey:`e_${e}${n||r}`,endkey:`e_${e}${r}${D.UNICODE_MAX}`}:{...t,startkey:`g_${e}`,endkey:`g_${e}${D.UNICODE_MAX}`,startkey_docid:n}}a(oc,"getGroupUsersParams");function rS(){return`${ac}${D.utils.newid()}`}a(rS,"generateUserGroupID");async function $a(e,t){let r=D.tenancy.getGlobalDB();return(await D.db.queryView(D.db.ViewName.USER_BY_GROUP,oc(e,t),r,rc,{arrayResponse:!0})).map(o=>({_id:o.userId,email:o.email}))||[]}a($a,"getGroupUsers");async function Lr(e,t){return e.users=await $a(e._id),e.roles&&(e.roles=Object.fromEntries(Object.entries(e.roles).filter(([r])=>t.includes(r)))),e}a(Lr,"enrichGroup");async function aS(e){let r=(await Lr(e,await Or())).users?.map(s=>s._id),n=await D.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 D.users.bulkUpdateGlobalUsers(o)}a(aS,"cleanupUsers");async function sc(){return(await D.tenancy.getGlobalDB().allDocs(nc(null,{include_docs:!0}))).rows.map(t=>t.doc)}a(sc,"getAllGroupDocuments");async function nS(){let[e,t]=await Promise.all([sc(),Or()]),r=[];for(let n of e)r.push(Lr(n,t));return await Promise.all(r)}a(nS,"fetch");async function oS(e){let t=D.tenancy.getGlobalDB(),[r,n]=await Promise.all([t.get(e),Or()]);return await Lr(r,n)}a(oS,"get");async function sS(e,t={enriched:!0}){let r=D.tenancy.getGlobalDB(),[n,o]=await Promise.all([r.getMultiple(e,{allowMissing:!0}),Or()]);if(t?.enriched){let s=[];for(let i of n)s.push(Lr(i,o));return await Promise.all(s)}else return n}a(sS,"getBulk");async function iS(e){return await D.tenancy.getGlobalDB().put(e)}a(iS,"save");async function uS(e){return await D.tenancy.getGlobalDB().bulkDocs(e)}a(uS,"bulkSave");async function cS(e,t){let r=D.tenancy.getGlobalDB(),n=await r.get(e),o=await r.remove(e,t);return await aS(n),o}a(cS,"destroy");async function So(e){let t=e.toLowerCase(),[r,n]=await Promise.all([sc(),Or()]),o=r.find(s=>s.name.toLowerCase()===t);if(o)return await Lr(o,n)}a(So,"getByName");var xe={};E(xe,{deleteAppBackupMetadata:()=>wS,fetchAppBackups:()=>bS,generateAppBackupID:()=>Ic,getAppBackupMetadata:()=>ES,oldestBackupDate:()=>Ac,storeAppBackupMetadata:()=>IS,updateAppBackupMetadata:()=>SS});var j=require("@budibase/backend-core"),hc=require("@budibase/types");var Kr={};E(Kr,{GENERIC_PAGE_SIZE:()=>Ke,auditLogs:()=>$t,licenses:()=>be,quotas:()=>tt,versions:()=>$r});var be={};E(be,{CLOUD_FREE_LICENSE:()=>lS,SELF_FREE_LICENSE:()=>wo,UNLIMITED:()=>W,UNLIMITED_LICENSE:()=>dS});var mt=require("@budibase/types");var tt={};E(tt,{UNLIMITED:()=>pS,actions:()=>Fr,appBackupRetentionDays:()=>jr,apps:()=>Ur,automationLogRetentionDays:()=>Wr,automations:()=>Mr,budibaseAICredits:()=>Gr,creators:()=>Dr,customAIConfigurations:()=>Qr,plugins:()=>Nr,queries:()=>Br,rows:()=>Pr,userGroups:()=>kr,users:()=>qr});var se=require("@budibase/types");var pS=-1,Pr=a(e=>({[se.StaticQuotaName.ROWS]:{name:"Rows",value:e,triggers:[90,100]}}),"rows"),Ur=a(e=>({[se.StaticQuotaName.WORKSPACES]:{name:"Workspaces",value:e,triggers:[100]}}),"apps"),qr=a(e=>({[se.StaticQuotaName.USERS]:{name:"Users",value:e,triggers:[80,100]}}),"users"),Dr=a(e=>({[se.StaticQuotaName.CREATORS]:{name:"Creators",value:e,triggers:[]}}),"creators"),kr=a(e=>({[se.StaticQuotaName.USER_GROUPS]:{name:"User Groups",value:e,triggers:[80,100]}}),"userGroups"),Nr=a(e=>({[se.StaticQuotaName.PLUGINS]:{name:"Plugins",value:e,triggers:[90,100]}}),"plugins"),Br=a(e=>({[se.MonthlyQuotaName.QUERIES]:{name:"Queries",value:e,triggers:[]}}),"queries"),Mr=a(e=>({[se.MonthlyQuotaName.AUTOMATIONS]:{name:"Automations",value:e,triggers:[80,90,100]}}),"automations"),Gr=a(e=>({[se.MonthlyQuotaName.BUDIBASE_AI_CREDITS]:{name:"Budibase AI Credits",value:e,triggers:[80,90,100]}}),"budibaseAICredits"),Fr=a(e=>({[se.MonthlyQuotaName.ACTIONS]:{name:"Actions",value:e,triggers:[80,90,100]}}),"actions"),Wr=a(e=>({[se.ConstantQuotaName.AUTOMATION_LOG_RETENTION_DAYS]:{name:"Automation Logs",value:e,triggers:[]}}),"automationLogRetentionDays"),jr=a(e=>({[se.ConstantQuotaName.APP_BACKUPS_RETENTION_DAYS]:{name:"App Backups",value:e,triggers:[]}}),"appBackupRetentionDays"),Qr=a(e=>({[se.StaticQuotaName.AI_CUSTOM_CONFIGS]:{name:"Custom AI Configuration",value:e,triggers:[]}}),"customAIConfigurations");var W=-1,lS={features:[],quotas:{usage:{monthly:{...Br(W),...Mr(200),...Gr(5e4),...Fr(W)},static:{...Ur(W),...Pr(2e3),...qr(5),...Dr(5),...kr(0),...Nr(10),...Qr(0)}},constant:{...Wr(1),...jr(0)}},plan:{type:mt.PlanType.FREE,usesInvoicing:!1,model:mt.PlanModel.PER_USER}},wo={features:[],quotas:{usage:{monthly:{...Br(W),...Mr(W),...Gr(5e4),...Fr(W)},static:{...Pr(W),...Ur(W),...qr(20),...Dr(W),...kr(0),...Nr(10),...Qr(0)}},constant:{...Wr(1),...jr(0)}},plan:{type:mt.PlanType.FREE,usesInvoicing:!1,model:mt.PlanModel.PER_USER}},dS={features:[],quotas:{usage:{monthly:{...Br(W),...Mr(W),...Gr(W),...Fr(W)},static:{...Ur(W),...Pr(W),...qr(W),...Dr(W),...kr(W),...Nr(W),...Qr(W)}},constant:{...Wr(W),...jr(W)}},plan:{type:mt.PlanType.FREE,usesInvoicing:!1,model:mt.PlanModel.PER_USER}};var $r={};E($r,{getLicenseVersion:()=>fS,getProVersion:()=>uc});var vt=require("@budibase/backend-core"),Ka=U(require("fs")),ic=U(require("path"));var fS=a(()=>{if(vt.env.isDev()){let e="dev-version.txt",t=ic.default.join(vt.objectStore.budibaseTempDir(),e);if(Ka.default.existsSync(t))return Ka.default.readFileSync(t,"utf8");{let r=vt.utils.newid();return Ka.default.writeFileSync(t,r),r}}else return uc()},"getLicenseVersion"),uc=a(()=>{let e=vt.env.VERSION;if(!e)throw new Error("No budibase pro version was specified");return e},"getProVersion");var $t={};E($t,{searchTable:()=>mS});var _t=require("@budibase/types"),cc=require("@budibase/backend-core");function mS(){return{type:"table",sourceType:_t.TableSourceType.INTERNAL,name:_t.AUDIT_LOG_TYPE,sourceId:cc.SQS_DATASOURCE_INTERNAL,primary:["_id"],schema:{metadata:{name:"metadata",type:_t.FieldType.JSON},fallback:{name:"fallback",type:_t.FieldType.JSON}}}}a(mS,"searchTable");var Ke=9;function Vr(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(Vr,"pagination");var pc=require("@budibase/types");var gS=new Date(864e13).toISOString(),yS=1e3*60*60*24;async function Va(e){let r=(await Ne.getCachedLicense()).quotas?.[pc.QuotaType.CONSTANT]?.[e]?.value||0;return r===be.UNLIMITED?new Date(gS).toISOString():new Date(new Date().getTime()-yS*r).toISOString()}a(Va,"getOldestRetentionDate");var Kt=require("@budibase/backend-core");var{ViewName:dc,AutomationViewMode:Eo,SEPARATOR:Ye,DocumentType:fc,createView:mc}=Kt.db,hS=fc.AUTOMATION_LOG+Ye,lc=fc.APP_BACKUP+Ye;async function gc(){let e=Kt.context.getProdWorkspaceDB(),t=`function(doc) {
11
- if (doc._id.startsWith("${hS}")) {
12
- let autoId = doc.automationId + "${Ye}"
13
- let status = doc.status + "${Ye}"
14
- let autoKey = "${Eo.AUTOMATION}${Ye}" + autoId + doc.createdAt
15
- let statusKey = "${Eo.STATUS}${Ye}" + status + doc.createdAt
16
- let allKey = "${Eo.ALL}${Ye}" + status + autoId + doc.createdAt
10
+ }`;await eS(e,t,JI.USER_BY_GROUP)}a(rc,"createGroupUserLookupView");var ac=`${k.DocumentType.GROUP}${k.SEPARATOR}`,Or=a(async()=>(await k.db.getAllWorkspaces({dev:!0,efficient:!0,idsOnly:!0})).map(t=>k.db.getProdWorkspaceID(t)),"getAppIDs");function nc(e,t={}){e||(e="");let r=e?.startsWith(k.DocumentType.GROUP)?"":ac;return{...t,startkey:`${r}${e}`,endkey:`${r}${e}${k.UNICODE_MAX}`}}a(nc,"getUserGroupsParams");function oc(e,t={}){e||(e="");let{emailSearch:r,bookmark:n,...o}=t;return r?{...o,startkey:`e_${e}${n||r}`,endkey:`e_${e}${r}${k.UNICODE_MAX}`}:{...t,startkey:`g_${e}`,endkey:`g_${e}${k.UNICODE_MAX}`,startkey_docid:n}}a(oc,"getGroupUsersParams");function rS(){return`${ac}${k.utils.newid()}`}a(rS,"generateUserGroupID");async function $a(e,t){let r=k.tenancy.getGlobalDB();return(await k.db.queryView(k.db.ViewName.USER_BY_GROUP,oc(e,t),r,rc,{arrayResponse:!0})).map(o=>({_id:o.userId,email:o.email}))||[]}a($a,"getGroupUsers");async function Lr(e,t){return e.users=await $a(e._id),e.roles&&(e.roles=Object.fromEntries(Object.entries(e.roles).filter(([r])=>t.includes(r)))),e}a(Lr,"enrichGroup");async function aS(e){let r=(await Lr(e,await Or())).users?.map(s=>s._id),n=await k.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 k.users.bulkUpdateGlobalUsers(o)}a(aS,"cleanupUsers");async function sc(){return(await k.tenancy.getGlobalDB().allDocs(nc(null,{include_docs:!0}))).rows.map(t=>t.doc)}a(sc,"getAllGroupDocuments");async function nS(){let[e,t]=await Promise.all([sc(),Or()]),r=[];for(let n of e)r.push(Lr(n,t));return await Promise.all(r)}a(nS,"fetch");async function oS(e){let t=k.tenancy.getGlobalDB(),[r,n]=await Promise.all([t.get(e),Or()]);return await Lr(r,n)}a(oS,"get");async function sS(e,t={enriched:!0}){let r=k.tenancy.getGlobalDB(),[n,o]=await Promise.all([r.getMultiple(e,{allowMissing:!0}),Or()]);if(t?.enriched){let s=[];for(let i of n)s.push(Lr(i,o));return await Promise.all(s)}else return n}a(sS,"getBulk");async function iS(e){return await k.tenancy.getGlobalDB().put(e)}a(iS,"save");async function uS(e){return await k.tenancy.getGlobalDB().bulkDocs(e)}a(uS,"bulkSave");async function cS(e,t){let r=k.tenancy.getGlobalDB(),n=await r.get(e),o=await r.remove(e,t);return await aS(n),o}a(cS,"destroy");async function So(e){let t=e.toLowerCase(),[r,n]=await Promise.all([sc(),Or()]),o=r.find(s=>s.name.toLowerCase()===t);if(o)return await Lr(o,n)}a(So,"getByName");var xe={};E(xe,{deleteAppBackupMetadata:()=>wS,fetchAppBackups:()=>bS,generateAppBackupID:()=>Ic,getAppBackupMetadata:()=>ES,oldestBackupDate:()=>Ac,storeAppBackupMetadata:()=>IS,updateAppBackupMetadata:()=>SS});var j=require("@budibase/backend-core"),yc=require("@budibase/types");var Kr={};E(Kr,{GENERIC_PAGE_SIZE:()=>Ke,auditLogs:()=>$t,licenses:()=>be,quotas:()=>tt,versions:()=>$r});var be={};E(be,{CLOUD_FREE_LICENSE:()=>lS,SELF_FREE_LICENSE:()=>wo,UNLIMITED:()=>W,UNLIMITED_LICENSE:()=>dS});var mt=require("@budibase/types");var tt={};E(tt,{UNLIMITED:()=>pS,actions:()=>Fr,appBackupRetentionDays:()=>jr,apps:()=>Ur,automationLogRetentionDays:()=>Wr,automations:()=>Mr,budibaseAICredits:()=>Gr,creators:()=>kr,customAIConfigurations:()=>Qr,plugins:()=>Br,queries:()=>Nr,rows:()=>Pr,userGroups:()=>Dr,users:()=>qr});var se=require("@budibase/types");var pS=-1,Pr=a(e=>({[se.StaticQuotaName.ROWS]:{name:"Rows",value:e,triggers:[90,100]}}),"rows"),Ur=a(e=>({[se.StaticQuotaName.WORKSPACES]:{name:"Workspaces",value:e,triggers:[100]}}),"apps"),qr=a(e=>({[se.StaticQuotaName.USERS]:{name:"Users",value:e,triggers:[80,100]}}),"users"),kr=a(e=>({[se.StaticQuotaName.CREATORS]:{name:"Creators",value:e,triggers:[]}}),"creators"),Dr=a(e=>({[se.StaticQuotaName.USER_GROUPS]:{name:"User Groups",value:e,triggers:[80,100]}}),"userGroups"),Br=a(e=>({[se.StaticQuotaName.PLUGINS]:{name:"Plugins",value:e,triggers:[90,100]}}),"plugins"),Nr=a(e=>({[se.MonthlyQuotaName.QUERIES]:{name:"Queries",value:e,triggers:[]}}),"queries"),Mr=a(e=>({[se.MonthlyQuotaName.AUTOMATIONS]:{name:"Automations",value:e,triggers:[80,90,100]}}),"automations"),Gr=a(e=>({[se.MonthlyQuotaName.BUDIBASE_AI_CREDITS]:{name:"Budibase AI Credits",value:e,triggers:[80,90,100]}}),"budibaseAICredits"),Fr=a(e=>({[se.MonthlyQuotaName.ACTIONS]:{name:"Actions",value:e,triggers:[80,90,100]}}),"actions"),Wr=a(e=>({[se.ConstantQuotaName.AUTOMATION_LOG_RETENTION_DAYS]:{name:"Automation Logs",value:e,triggers:[]}}),"automationLogRetentionDays"),jr=a(e=>({[se.ConstantQuotaName.APP_BACKUPS_RETENTION_DAYS]:{name:"App Backups",value:e,triggers:[]}}),"appBackupRetentionDays"),Qr=a(e=>({[se.StaticQuotaName.AI_CUSTOM_CONFIGS]:{name:"Custom AI Configuration",value:e,triggers:[]}}),"customAIConfigurations");var W=-1,lS={features:[],quotas:{usage:{monthly:{...Nr(W),...Mr(200),...Gr(5e4),...Fr(W)},static:{...Ur(W),...Pr(2e3),...qr(5),...kr(5),...Dr(0),...Br(10),...Qr(0)}},constant:{...Wr(1),...jr(0)}},plan:{type:mt.PlanType.FREE,usesInvoicing:!1,model:mt.PlanModel.PER_USER}},wo={features:[],quotas:{usage:{monthly:{...Nr(W),...Mr(W),...Gr(5e4),...Fr(W)},static:{...Pr(W),...Ur(W),...qr(20),...kr(W),...Dr(0),...Br(10),...Qr(0)}},constant:{...Wr(1),...jr(0)}},plan:{type:mt.PlanType.FREE,usesInvoicing:!1,model:mt.PlanModel.PER_USER}},dS={features:[],quotas:{usage:{monthly:{...Nr(W),...Mr(W),...Gr(W),...Fr(W)},static:{...Ur(W),...Pr(W),...qr(W),...kr(W),...Dr(W),...Br(W),...Qr(W)}},constant:{...Wr(W),...jr(W)}},plan:{type:mt.PlanType.FREE,usesInvoicing:!1,model:mt.PlanModel.PER_USER}};var $r={};E($r,{getLicenseVersion:()=>fS,getProVersion:()=>uc});var vt=require("@budibase/backend-core"),Ka=U(require("fs")),ic=U(require("path"));var fS=a(()=>{if(vt.env.isDev()){let e="dev-version.txt",t=ic.default.join(vt.objectStore.budibaseTempDir(),e);if(Ka.default.existsSync(t))return Ka.default.readFileSync(t,"utf8");{let r=vt.utils.newid();return Ka.default.writeFileSync(t,r),r}}else return uc()},"getLicenseVersion"),uc=a(()=>{let e=vt.env.VERSION;if(!e)throw new Error("No budibase pro version was specified");return e},"getProVersion");var $t={};E($t,{searchTable:()=>mS});var _t=require("@budibase/types"),cc=require("@budibase/backend-core");function mS(){return{type:"table",sourceType:_t.TableSourceType.INTERNAL,name:_t.AUDIT_LOG_TYPE,sourceId:cc.SQS_DATASOURCE_INTERNAL,primary:["_id"],schema:{metadata:{name:"metadata",type:_t.FieldType.JSON},fallback:{name:"fallback",type:_t.FieldType.JSON}}}}a(mS,"searchTable");var Ke=9;function Vr(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(Vr,"pagination");var pc=require("@budibase/types");var gS=new Date(864e13).toISOString(),hS=1e3*60*60*24;async function Va(e){let r=(await Be.getCachedLicense()).quotas?.[pc.QuotaType.CONSTANT]?.[e]?.value||0;return r===be.UNLIMITED?new Date(gS).toISOString():new Date(new Date().getTime()-hS*r).toISOString()}a(Va,"getOldestRetentionDate");var Kt=require("@budibase/backend-core");var{ViewName:dc,AutomationViewMode:Eo,SEPARATOR:He,DocumentType:fc,createView:mc}=Kt.db,yS=fc.AUTOMATION_LOG+He,lc=fc.APP_BACKUP+He;async function gc(){let e=Kt.context.getProdWorkspaceDB(),t=`function(doc) {
11
+ if (doc._id.startsWith("${yS}")) {
12
+ let autoId = doc.automationId + "${He}"
13
+ let status = doc.status + "${He}"
14
+ let autoKey = "${Eo.AUTOMATION}${He}" + autoId + doc.createdAt
15
+ let statusKey = "${Eo.STATUS}${He}" + status + doc.createdAt
16
+ let allKey = "${Eo.ALL}${He}" + status + autoId + doc.createdAt
17
17
  emit(statusKey)
18
18
  emit(autoKey)
19
19
  emit(allKey)
20
20
  }
21
- }`;await mc(e,t,dc.AUTOMATION_LOGS)}a(gc,"createLogByAutomationView");async function yc(){let e=Kt.tenancy.getGlobalDB(),t=`function(doc) {
21
+ }`;await mc(e,t,dc.AUTOMATION_LOGS)}a(gc,"createLogByAutomationView");async function hc(){let e=Kt.tenancy.getGlobalDB(),t=`function(doc) {
22
22
  if (doc._id.startsWith("${lc}") && doc.type && doc.trigger) {
23
- let full = doc.appId + "${Ye}"
24
- full += doc.trigger.toLowerCase() + "${Ye}"
25
- full += doc.type.toLowerCase() + "${Ye}"
23
+ let full = doc.appId + "${He}"
24
+ full += doc.trigger.toLowerCase() + "${He}"
25
+ full += doc.type.toLowerCase() + "${He}"
26
26
  emit("${lc}" + full + doc.timestamp)
27
27
  }
28
- }`;await mc(e,t,dc.WORKSPACE_BACKUP_BY_TRIGGER)}a(yc,"createAppBackupTriggerView");async function Ac(){return Va(hc.ConstantQuotaName.APP_BACKUPS_RETENTION_DAYS)}a(Ac,"oldestBackupDate");var To=`${j.db.DocumentType.APP_BACKUP}${j.db.SEPARATOR}`;async function AS(e,t,r={}){let n=await Ac(),o=j.db.getProdWorkspaceID(e),s=o,i=o;if(t.trigger&&t.type){let u=`${j.db.SEPARATOR}${t.trigger}`;u+=`${j.db.SEPARATOR}${t.type}`,s+=u,i+=u}return(!t.startDate||t.startDate<n)&&(t.startDate=n),t.startDate&&(i+=`${j.db.SEPARATOR}${t.startDate}`),t.endDate&&(s+=`${j.db.SEPARATOR}${t.endDate}`),{...r,descending:!0,startkey:`${To}${s}${j.db.UNICODE_MAX}`,endkey:`${To}${i}`}}a(AS,"getAppBackupParams");async function bc(e,t){try{let r=j.db.getQueryIndex(j.db.ViewName.WORKSPACE_BACKUP_BY_TRIGGER);return await e.query(r,t)}catch(r){if(r!=null&&r.error==="not_found")return await yc(),bc(e,t);throw r}}a(bc,"getAppBackupsByTrigger");function Ic(e,t){return`${To}${e}${j.db.SEPARATOR}${t}`}a(Ic,"generateAppBackupID");async function bS(e,t={}){let r=j.tenancy.getGlobalDB(),n,o=t.limit||9,s=await AS(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 bc(r,s);let i=Vr(n,{paginate:t.paginate,pageSize:o}),u=[...new Set(i.data.filter(m=>m.createdBy).map(m=>m.createdBy))],p=await j.users.bulkGetGlobalUsersById(u,{cleanup:!0});for(let m of p)for(let g of i.data)m?._id===g.createdBy&&(g.createdBy=m);return i}a(bS,"fetchAppBackups");async function IS(e,t={}){let r=j.tenancy.getGlobalDB(),n=j.db.getProdWorkspaceID(e.appId),o=Ic(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=j.db.getGlobalIDFromUserMetadataID(e.createdBy)),await r.put(s)}a(IS,"storeAppBackupMetadata");async function SS(e,t){let r=j.tenancy.getGlobalDB(),n=await r.get(e);return n.name=t,await r.put(n)}a(SS,"updateAppBackupMetadata");async function wS(e){let t=j.tenancy.getGlobalDB(),r=await t.get(e);await t.remove(r._id,r._rev)}a(wS,"deleteAppBackupMetadata");async function ES(e){return await j.tenancy.getGlobalDB().get(e)}a(ES,"getAppBackupMetadata");var xt={};E(xt,{get:()=>RS,getCacheEnvVarID:()=>Ec,getEnvVarID:()=>Ya,update:()=>vS});var Be=require("@budibase/backend-core"),wc=U(require("lru-cache"));var TS=1e3,Sc=new wc.default({max:TS});function Ya(){return Be.StaticDatabases.GLOBAL.docs.environmentVariables}a(Ya,"getEnvVarID");function Ec(e){return`${Be.tenancy.getTenantId()}/${Ya()}/${e||""}`}a(Ec,"getCacheEnvVarID");async function RS(){let e=Ya(),t=Be.tenancy.getGlobalDB(),r,n=!1;try{r=await t.get(e)}catch(u){if(u.status==404)n=!0;else throw u}let o=Ec(r?._rev),s=Sc.get(o);if(s)return s;let i;return!n&&r?i={...r,variables:JSON.parse(Be.encryption.decrypt(r.variables,Be.encryption.SecretOption.ENCRYPTION))}:i={_id:e,variables:{}},Sc.set(o,i),i}a(RS,"get");async function vS(e){let t=Ya();return await Be.tenancy.getGlobalDB().put({_id:e._id||t,_rev:e._rev||void 0,variables:Be.encryption.encrypt(JSON.stringify(e.variables),Be.encryption.SecretOption.ENCRYPTION)})}a(vS,"update");var Ro=require("dd-trace");var za=new mo(P.env.INTERNAL_ACCOUNT_PORTAL_URL),Ja=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"),Tc=a(async e=>{let t,r;if(P.env.SELF_HOSTED){if(t=await _e.get(),!t.licenseKey)return;r={[P.constants.Header.LICENSE_KEY]:t.licenseKey}}else{let n=P.tenancy.getTenantId();r={[P.constants.Header.API_KEY]:P.env.ACCOUNT_PORTAL_API_KEY,[P.constants.Header.TENANT_ID]:n}}return e(r)},"authAware"),Rc=a(async()=>await Ro.tracer.trace("_getLicense",async()=>await Tc(async e=>{let t=await $e.getQuotaUsage();if(t.usageQuota.users==null){let u=await P.users.getUserCount();console.info(`Syncing user count quota to ${u}`),t.usageQuota.users=u,await $e.setUsage(u,Ha.StaticQuotaName.USERS,Ha.QuotaUsageType.STATIC)}let r=await P.installation.getInstallFromDB(),n=P.tenancy.getTenantId(),o=await P.events.identification.getUniqueTenantId(n),s=$r.getProVersion(),i={quotaUsage:t,tenantId:n,install:{id:r.installId,tenantId:o,version:s}};try{let u=await za.post("/api/license",{headers:{...e},body:i});if(u.status===404||u.status===403)return;if(u.status!==200){let p=await Ja(u);throw new P.HTTPError(`Error getting license: ${p}`,u.status)}return u.json()}catch(u){if(P.env.DISABLE_ACCOUNT_PORTAL)return;throw u}})),"_getLicense");P.env.isJest()&&(Rc=jest.fn());var Vt=Rc;async function vo(e){return await Ro.tracer.trace("getLicenseFromKey",async t=>{let r;if(!P.env.ACCOUNT_PORTAL_API_KEY)throw new Error("getLicenseFromKey requires ACCOUNT_PORTAL_API_KEY to be set");try{r=await za.get(`/api/license/${e}`,{headers:{[P.constants.Header.API_KEY]:P.env.ACCOUNT_PORTAL_API_KEY}})}catch(n){if(P.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 Ja(r);throw new P.HTTPError(`Error getting license: ${n}`,r.status)}return r.json()})}a(vo,"getLicenseFromKey");var _S=a(e=>Tc(async t=>{let r=await za.post("/api/license/usage/triggered",{headers:{...t},body:e});if(r.status!==200){let n=await Ja(r);P.logging.logAlert(`Error triggering quota usage: ${n}`)}}),"triggerQuota"),_o=a(async e=>{let t=await P.installation.getInstall(),r={installVersion:t.version,installId:t.installId},n=await za.post("/api/license/activate",{headers:{[P.constants.Header.LICENSE_KEY]:e},body:r});if(n.status===403)throw new P.HTTPError("Invalid license key",400);if(n.status===409)throw new P.HTTPError("License key has already been activated",409);if(n.status!==200){let o=await Ja(n);throw new P.HTTPError(`Error activating license key: ${o}`,n.status)}return n.json()},"activateLicenseKey");var cs=require("@budibase/backend-core");var gn={};E(gn,{activateOfflineLicenseToken:()=>lx,deleteOfflineLicenseToken:()=>dx,dev:()=>ya,enrichLicense:()=>hf,getIdentifier:()=>os,getIdentifierBase64:()=>fx,getIdentifierFromBase64:()=>mx,getOfflineLicense:()=>ss,getOfflineLicenseToken:()=>mf,signing:()=>zr,verifyExpiry:()=>gf,verifyInstallation:()=>yf});var zr={};E(zr,{sign:()=>CS,verifyLicenseToken:()=>Hr});var xo=U(require("jsonwebtoken"));var xS=`-----BEGIN PUBLIC KEY-----
28
+ }`;await mc(e,t,dc.WORKSPACE_BACKUP_BY_TRIGGER)}a(hc,"createAppBackupTriggerView");async function Ac(){return Va(yc.ConstantQuotaName.APP_BACKUPS_RETENTION_DAYS)}a(Ac,"oldestBackupDate");var To=`${j.db.DocumentType.APP_BACKUP}${j.db.SEPARATOR}`;async function AS(e,t,r={}){let n=await Ac(),o=j.db.getProdWorkspaceID(e),s=o,i=o;if(t.trigger&&t.type){let u=`${j.db.SEPARATOR}${t.trigger}`;u+=`${j.db.SEPARATOR}${t.type}`,s+=u,i+=u}return(!t.startDate||t.startDate<n)&&(t.startDate=n),t.startDate&&(i+=`${j.db.SEPARATOR}${t.startDate}`),t.endDate&&(s+=`${j.db.SEPARATOR}${t.endDate}`),{...r,descending:!0,startkey:`${To}${s}${j.db.UNICODE_MAX}`,endkey:`${To}${i}`}}a(AS,"getAppBackupParams");async function bc(e,t){try{let r=j.db.getQueryIndex(j.db.ViewName.WORKSPACE_BACKUP_BY_TRIGGER);return await e.query(r,t)}catch(r){if(r!=null&&r.error==="not_found")return await hc(),bc(e,t);throw r}}a(bc,"getAppBackupsByTrigger");function Ic(e,t){return`${To}${e}${j.db.SEPARATOR}${t}`}a(Ic,"generateAppBackupID");async function bS(e,t={}){let r=j.tenancy.getGlobalDB(),n,o=t.limit||9,s=await AS(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 bc(r,s);let i=Vr(n,{paginate:t.paginate,pageSize:o}),u=[...new Set(i.data.filter(m=>m.createdBy).map(m=>m.createdBy))],c=await j.users.bulkGetGlobalUsersById(u,{cleanup:!0});for(let m of c)for(let g of i.data)m?._id===g.createdBy&&(g.createdBy=m);return i}a(bS,"fetchAppBackups");async function IS(e,t={}){let r=j.tenancy.getGlobalDB(),n=j.db.getProdWorkspaceID(e.appId),o=Ic(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=j.db.getGlobalIDFromUserMetadataID(e.createdBy)),await r.put(s)}a(IS,"storeAppBackupMetadata");async function SS(e,t){let r=j.tenancy.getGlobalDB(),n=await r.get(e);return n.name=t,await r.put(n)}a(SS,"updateAppBackupMetadata");async function wS(e){let t=j.tenancy.getGlobalDB(),r=await t.get(e);await t.remove(r._id,r._rev)}a(wS,"deleteAppBackupMetadata");async function ES(e){return await j.tenancy.getGlobalDB().get(e)}a(ES,"getAppBackupMetadata");var xt={};E(xt,{get:()=>RS,getCacheEnvVarID:()=>Ec,getEnvVarID:()=>Ha,update:()=>vS});var Ne=require("@budibase/backend-core"),wc=U(require("lru-cache"));var TS=1e3,Sc=new wc.default({max:TS});function Ha(){return Ne.StaticDatabases.GLOBAL.docs.environmentVariables}a(Ha,"getEnvVarID");function Ec(e){return`${Ne.tenancy.getTenantId()}/${Ha()}/${e||""}`}a(Ec,"getCacheEnvVarID");async function RS(){let e=Ha(),t=Ne.tenancy.getGlobalDB(),r,n=!1;try{r=await t.get(e)}catch(u){if(u.status==404)n=!0;else throw u}let o=Ec(r?._rev),s=Sc.get(o);if(s)return s;let i;return!n&&r?i={...r,variables:JSON.parse(Ne.encryption.decrypt(r.variables,Ne.encryption.SecretOption.ENCRYPTION))}:i={_id:e,variables:{}},Sc.set(o,i),i}a(RS,"get");async function vS(e){let t=Ha();return await Ne.tenancy.getGlobalDB().put({_id:e._id||t,_rev:e._rev||void 0,variables:Ne.encryption.encrypt(JSON.stringify(e.variables),Ne.encryption.SecretOption.ENCRYPTION)})}a(vS,"update");var Ro=require("dd-trace");var za=new mo(P.env.INTERNAL_ACCOUNT_PORTAL_URL),Ja=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"),Tc=a(async e=>{let t,r;if(P.env.SELF_HOSTED){if(t=await _e.get(),!t.licenseKey)return;r={[P.constants.Header.LICENSE_KEY]:t.licenseKey}}else{let n=P.tenancy.getTenantId();r={[P.constants.Header.API_KEY]:P.env.ACCOUNT_PORTAL_API_KEY,[P.constants.Header.TENANT_ID]:n}}return e(r)},"authAware"),Rc=a(async()=>await Ro.tracer.trace("_getLicense",async()=>await Tc(async e=>{let t=await $e.getQuotaUsage();if(t.usageQuota.users==null){let u=await P.users.getUserCount();console.info(`Syncing user count quota to ${u}`),t.usageQuota.users=u,await $e.setUsage(u,Ya.StaticQuotaName.USERS,Ya.QuotaUsageType.STATIC)}let r=await P.installation.getInstallFromDB(),n=P.tenancy.getTenantId(),o=await P.events.identification.getUniqueTenantId(n),s=$r.getProVersion(),i={quotaUsage:t,tenantId:n,install:{id:r.installId,tenantId:o,version:s}};try{let u=await za.post("/api/license",{headers:{...e},body:i});if(u.status===404||u.status===403)return;if(u.status!==200){let c=await Ja(u);throw new P.HTTPError(`Error getting license: ${c}`,u.status)}return u.json()}catch(u){if(P.env.DISABLE_ACCOUNT_PORTAL)return;throw u}})),"_getLicense");P.env.isJest()&&(Rc=jest.fn());var Vt=Rc;async function vo(e){return await Ro.tracer.trace("getLicenseFromKey",async t=>{let r;if(!P.env.ACCOUNT_PORTAL_API_KEY)throw new Error("getLicenseFromKey requires ACCOUNT_PORTAL_API_KEY to be set");try{r=await za.get(`/api/license/${e}`,{headers:{[P.constants.Header.API_KEY]:P.env.ACCOUNT_PORTAL_API_KEY}})}catch(n){if(P.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 Ja(r);throw new P.HTTPError(`Error getting license: ${n}`,r.status)}return r.json()})}a(vo,"getLicenseFromKey");var _S=a(e=>Tc(async t=>{let r=await za.post("/api/license/usage/triggered",{headers:{...t},body:e});if(r.status!==200){let n=await Ja(r);P.logging.logAlert(`Error triggering quota usage: ${n}`)}}),"triggerQuota"),_o=a(async e=>{let t=await P.installation.getInstall(),r={installVersion:t.version,installId:t.installId},n=await za.post("/api/license/activate",{headers:{[P.constants.Header.LICENSE_KEY]:e},body:r});if(n.status===403)throw new P.HTTPError("Invalid license key",400);if(n.status===409)throw new P.HTTPError("License key has already been activated",409);if(n.status!==200){let o=await Ja(n);throw new P.HTTPError(`Error activating license key: ${o}`,n.status)}return n.json()},"activateLicenseKey");var cs=require("@budibase/backend-core");var gn={};E(gn,{activateOfflineLicenseToken:()=>lx,deleteOfflineLicenseToken:()=>dx,dev:()=>ha,enrichLicense:()=>yf,getIdentifier:()=>os,getIdentifierBase64:()=>fx,getIdentifierFromBase64:()=>mx,getOfflineLicense:()=>ss,getOfflineLicenseToken:()=>mf,signing:()=>zr,verifyExpiry:()=>gf,verifyInstallation:()=>hf});var zr={};E(zr,{sign:()=>CS,verifyLicenseToken:()=>Yr});var xo=U(require("jsonwebtoken"));var xS=`-----BEGIN PUBLIC KEY-----
29
29
  MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvz3jePLCFBXZ19c8Dpkv
30
30
  XtSgOhKFOcvQdo/LV0KJRUzQWDPWuO4ILtBtnqhjtIzZH4CH0qCYBet5L6Qr4CM1
31
31
  l2HXiAD1Q2rlHNW9wDaYyKb1F5f+v4RyqCAyzlkwRdksmkLeECTboojNnmRCrE3C
@@ -34,8 +34,8 @@ l2HXiAD1Q2rlHNW9wDaYyKb1F5f+v4RyqCAyzlkwRdksmkLeECTboojNnmRCrE3C
34
34
  d/o3ZWE1TTj1zYwlCLN5qRKr3hU8nC3xEYNEbkB9SfTRaOq9Q7P8WmfLkoCPm3pR
35
35
  mwIDAQAB
36
36
  -----END PUBLIC KEY-----
37
- `;function Hr(e){return xo.default.verify(e,xS,{algorithms:["RS256"]})}a(Hr,"verifyLicenseToken");function CS(e,t){return xo.default.sign(t,e,{encoding:"utf-8",algorithm:"RS256"})}a(CS,"sign");var Xa={};E(Xa,{getFeatures:()=>Co});var l=require("@budibase/types");var OS={[l.PlanType.FREE]:[...be.SELF_FREE_LICENSE.features],[l.PlanType.PREMIUM]:void 0,[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]},LS={[l.PlanType.FREE]:[...be.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 Co(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(OS);break;case l.Hosting.CLOUD:r=n(LS);break}return r}a(Co,"getFeatures");var Za={};E(Za,{UNLIMITED:()=>f,getQuotas:()=>Oo});var G=require("@budibase/types");var d=tt,vc=be,f=-1,Jr=a(e=>e*1e6,"millions"),PS={[G.PlanType.FREE]:{...vc.CLOUD_FREE_LICENSE.quotas},[G.PlanType.PREMIUM]:{usage:{monthly:{...d.queries(f),...d.automations(1e3),...d.budibaseAICredits(0),...d.actions(f)},static:{...d.rows(1e4),...d.apps(f),...d.users(f),...d.creators(f),...d.userGroups(0),...d.plugins(f),...d.customAIConfigurations(0)}},constant:{...d.automationLogRetentionDays(7),...d.appBackupRetentionDays(7)}},[G.PlanType.PREMIUM_PLUS]:{usage:{monthly:{...d.queries(f),...d.automations(5e3),...d.budibaseAICredits(Jr(2)),...d.actions(f)},static:{...d.rows(25e3),...d.apps(f),...d.users(f),...d.creators(f),...d.userGroups(0),...d.plugins(f),...d.customAIConfigurations(1)}},constant:{...d.automationLogRetentionDays(30),...d.appBackupRetentionDays(30)}},[G.PlanType.PREMIUM_PLUS_TRIAL]:{usage:{monthly:{...d.queries(f),...d.automations(5e3),...d.budibaseAICredits(Jr(2)),...d.actions(f)},static:{...d.rows(25e3),...d.apps(f),...d.users(f),...d.creators(f),...d.userGroups(0),...d.plugins(f),...d.customAIConfigurations(1)}},constant:{...d.automationLogRetentionDays(30),...d.appBackupRetentionDays(30)}},[G.PlanType.PRO]:{usage:{monthly:{...d.queries(f),...d.automations(1e3),...d.budibaseAICredits(0),...d.actions(f)},static:{...d.rows(f),...d.apps(f),...d.users(f),...d.creators(f),...d.userGroups(5),...d.plugins(f),...d.customAIConfigurations(0)}},constant:{...d.automationLogRetentionDays(7),...d.appBackupRetentionDays(7)}},[G.PlanType.TEAM]:{usage:{monthly:{...d.queries(f),...d.automations(5e3),...d.budibaseAICredits(0),...d.actions(f)},static:{...d.rows(f),...d.apps(f),...d.users(f),...d.creators(f),...d.userGroups(10),...d.plugins(f),...d.customAIConfigurations(0)}},constant:{...d.automationLogRetentionDays(30),...d.appBackupRetentionDays(90)}},[G.PlanType.BUSINESS]:{usage:{monthly:{...d.queries(f),...d.automations(1e4),...d.budibaseAICredits(0),...d.actions(f)},static:{...d.rows(5e4),...d.apps(f),...d.users(f),...d.creators(f),...d.userGroups(50),...d.plugins(f),...d.customAIConfigurations(0)}},constant:{...d.automationLogRetentionDays(365),...d.appBackupRetentionDays(365)}},[G.PlanType.ENTERPRISE_BASIC]:{usage:{monthly:{...d.queries(f),...d.automations(f),...d.budibaseAICredits(Jr(4)),...d.actions(f)},static:{...d.rows(f),...d.apps(f),...d.users(f),...d.creators(f),...d.userGroups(f),...d.plugins(f),...d.customAIConfigurations(f)}},constant:{...d.automationLogRetentionDays(f),...d.appBackupRetentionDays(f)}},[G.PlanType.ENTERPRISE_BASIC_TRIAL]:{usage:{monthly:{...d.queries(f),...d.automations(f),...d.budibaseAICredits(Jr(4)),...d.actions(f)},static:{...d.rows(f),...d.apps(f),...d.users(f),...d.creators(f),...d.userGroups(f),...d.plugins(f),...d.customAIConfigurations(f)}},constant:{...d.automationLogRetentionDays(15),...d.appBackupRetentionDays(15)}},[G.PlanType.ENTERPRISE]:{usage:{monthly:{...d.queries(f),...d.automations(f),...d.budibaseAICredits(Jr(4)),...d.actions(f)},static:{...d.rows(f),...d.apps(f),...d.users(f),...d.creators(f),...d.userGroups(f),...d.plugins(f),...d.customAIConfigurations(f)}},constant:{...d.automationLogRetentionDays(f),...d.appBackupRetentionDays(f)}}},US={[G.PlanType.FREE]:{...vc.SELF_FREE_LICENSE.quotas},[G.PlanType.PREMIUM]:void 0,[G.PlanType.PREMIUM_PLUS]:{usage:{monthly:{...d.queries(f),...d.automations(f),...d.budibaseAICredits(0),...d.actions(f)},static:{...d.rows(f),...d.apps(f),...d.users(f),...d.creators(f),...d.userGroups(0),...d.plugins(f),...d.customAIConfigurations(1)}},constant:{...d.automationLogRetentionDays(30),...d.appBackupRetentionDays(30)}},[G.PlanType.PREMIUM_PLUS_TRIAL]:{usage:{monthly:{...d.queries(f),...d.automations(f),...d.budibaseAICredits(0),...d.actions(f)},static:{...d.rows(f),...d.apps(f),...d.users(f),...d.creators(f),...d.userGroups(0),...d.plugins(f),...d.customAIConfigurations(1)}},constant:{...d.automationLogRetentionDays(30),...d.appBackupRetentionDays(30)}},[G.PlanType.PRO]:{usage:{monthly:{...d.queries(f),...d.automations(f),...d.budibaseAICredits(0),...d.actions(f)},static:{...d.rows(f),...d.apps(f),...d.users(f),...d.creators(f),...d.userGroups(5),...d.plugins(f),...d.customAIConfigurations(0)}},constant:{...d.automationLogRetentionDays(7),...d.appBackupRetentionDays(7)}},[G.PlanType.TEAM]:{usage:{monthly:{...d.queries(f),...d.automations(f),...d.budibaseAICredits(0),...d.actions(f)},static:{...d.rows(f),...d.apps(f),...d.users(f),...d.creators(f),...d.userGroups(10),...d.plugins(f),...d.customAIConfigurations(0)}},constant:{...d.automationLogRetentionDays(30),...d.appBackupRetentionDays(90)}},[G.PlanType.BUSINESS]:{usage:{monthly:{...d.queries(f),...d.automations(f),...d.budibaseAICredits(0),...d.actions(f)},static:{...d.rows(f),...d.apps(f),...d.users(f),...d.creators(f),...d.userGroups(50),...d.plugins(f),...d.customAIConfigurations(0)}},constant:{...d.automationLogRetentionDays(90),...d.appBackupRetentionDays(365)}},[G.PlanType.ENTERPRISE_BASIC]:{usage:{monthly:{...d.queries(f),...d.automations(f),...d.budibaseAICredits(0),...d.actions(f)},static:{...d.rows(f),...d.apps(f),...d.users(f),...d.creators(f),...d.userGroups(f),...d.plugins(f),...d.customAIConfigurations(f)}},constant:{...d.automationLogRetentionDays(f),...d.appBackupRetentionDays(f)}},[G.PlanType.ENTERPRISE_BASIC_TRIAL]:{usage:{monthly:{...d.queries(f),...d.automations(f),...d.budibaseAICredits(0),...d.actions(f)},static:{...d.rows(f),...d.apps(f),...d.users(f),...d.creators(f),...d.userGroups(f),...d.plugins(f),...d.customAIConfigurations(f)}},constant:{...d.automationLogRetentionDays(15),...d.appBackupRetentionDays(15)}},[G.PlanType.ENTERPRISE]:{usage:{monthly:{...d.queries(f),...d.automations(f),...d.budibaseAICredits(0),...d.actions(f)},static:{...d.rows(f),...d.apps(f),...d.users(f),...d.creators(f),...d.userGroups(f),...d.plugins(f),...d.customAIConfigurations(f)}},constant:{...d.automationLogRetentionDays(f),...d.appBackupRetentionDays(f)}}};function Oo(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 G.Hosting.SELF:r=n(US);break;case G.Hosting.CLOUD:r=n(PS);break}return JSON.parse(JSON.stringify(r))}a(Oo,"getQuotas");var Ht={};E(Ht,{encoding:()=>Yt,workspaceExists:()=>qS});var _c=require("@budibase/backend-core");async function qS(e){return(await _c.db.getAllWorkspaces({all:!0,idsOnly:!0})).includes(e)}a(qS,"workspaceExists");var Yt={};E(Yt,{base64ToObject:()=>kS,objectToBase64:()=>DS});function DS(e){let t=JSON.stringify(e);return Buffer.from(t).toString("base64")}a(DS,"objectToBase64");function kS(e){let t=Buffer.from(e,"base64").toString();return JSON.parse(t)}a(kS,"base64ToObject");var lf=require("@budibase/types"),ur=require("@budibase/backend-core"),df=U(jl()),ff=U(ns());async function lx(e){await _e.save({offlineLicenseToken:e}),await Ot()}a(lx,"activateOfflineLicenseToken");async function dx(){await _e.save({offlineLicenseToken:void 0}),await Ot()}a(dx,"deleteOfflineLicenseToken");async function mf(){return(await _e.get()).offlineLicenseToken}a(mf,"getOfflineLicenseToken");async function os(){let t=(await ur.installation.getInstall()).installId,r=ur.context.getTenantId(),n=await ur.events.identification.getUniqueTenantId(r);return{installId:t,tenantId:n}}a(os,"getIdentifier");async function fx(){let e=await os();return Yt.objectToBase64(e)}a(fx,"getIdentifierBase64");function mx(e){return Yt.base64ToObject(e)}a(mx,"getIdentifierFromBase64");function gf(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(gf,"verifyExpiry");async function yf(e){let t=await os();if(e.identifier.installId!==t.installId||e.identifier.tenantId!==t.tenantId)throw new Error("Invalid offline license")}a(yf,"verifyInstallation");function hf(e){let t=e.plan.type,r=lf.Hosting.SELF,n=Co(r,t),o=Oo(r,t);return e.features=(0,df.default)(e.features,n),e.quotas=(0,ff.default)(e.quotas,o),e}a(hf,"enrichLicense");async function ss(){try{let e=await mf();if(e){let t=await Hr(e);return gf(t),await yf(t),hf(t)}}catch(e){console.error("Error retrieving offline license",e)}}a(ss,"getOfflineLicense");var ya={};E(ya,{deleteDevLicense:()=>bx,getOfflineLicense:()=>hx,writeDevLicenseToDisk:()=>Ax});var Af=require("@budibase/backend-core"),us=require("path"),bf=require("os"),Lt=U(require("fs"));var gx=Af.env.isTest()?".budibase-test":".budibase",is=(0,us.join)((0,bf.tmpdir)(),gx),yx="dev_license.txt",ga=(0,us.join)(is,yx);if(!Lt.default.existsSync(is))try{Lt.default.mkdirSync(is)}catch{}function hx(){try{if(Lt.default.existsSync(ga)){let e=Lt.default.readFileSync(ga,{encoding:"utf-8"});return Hr(e)}}catch(e){console.error("Error retrieving offline license from disk",e)}}a(hx,"getOfflineLicense");function Ax(e){console.log(`Writing license to: ${ga}`),Lt.default.writeFileSync(ga,e,{encoding:"utf-8"})}a(Ax,"writeDevLicenseToDisk");function bx(){Lt.default.rmSync(ga,{force:!0})}a(bx,"deleteDevLicense");var If=require("dd-trace");var ps=a(async()=>await If.tracer.trace("getLicense",async e=>{if(cs.env.OFFLINE_MODE)return e.addTags({offline:!0}),ss();let t=await Vt();return t||(e.addTags({offlineFallback:!0}),t=ya.getOfflineLicense()),t}),"getLicense"),ls=a(e=>vo(e),"getLicenseFromKey"),ds=a(()=>cs.env.SELF_HOSTED?be.SELF_FREE_LICENSE:be.CLOUD_FREE_LICENSE,"getFreeLicense");var ms={};E(ms,{activateLicenseKey:()=>Ix,deleteLicenseKey:()=>Sx,getLicenseKey:()=>yn});var fs=U(require("dd-trace"));async function Ix(e){await _o(e),await _e.save({licenseKey:e}),await Ot()}a(Ix,"activateLicenseKey");async function yn(){return await fs.default.trace("getLicenseKey",async e=>{let t=await _e.get();return e.addTags({licenseKey:t.licenseKey}),t.licenseKey})}a(yn,"getLicenseKey");async function Sx(){return await fs.default.trace("deleteLicenseKey",async()=>{await _e.save({licenseKey:void 0}),await Ot()})}a(Sx,"deleteLicenseKey");var Pt=require("@budibase/backend-core"),hn=U(require("dd-trace"));var Sf=3600,Ot=a(async()=>{await Tf(),await Ef()},"refresh"),wf=a(async(e,t)=>{let{populateLicense:r=ps,populateFreeLicense:n=ds}=t||{};return await hn.default.trace("getCachedLicense",async o=>{let s=Pt.context.getLicense();if(s)return o.addTags({foundInContext:!0,features:s.features,plan:s.plan,quotas:s.quotas}),s;let i=Pt.tenancy.getTenantId(),u=await po(),p=await u.get(i);return o.addTags({tenantId:i,foundInCache:!!p}),p?(o.addTags({foundInCache:!0,refreshedAt:p.refreshedAt,features:p.features,plan:p.plan,quotas:p.quotas}),p):(p=await hn.default.trace("populateLicense",async()=>await r(i)),o.addTags({populatedLicense:!!p}),p||(p=hn.default.trace("populateFreeLicense",()=>n(e,i)),o.addTags({populatedFreeLicense:!!p})),p.refreshedAt=new Date().toISOString(),o.addTags({refreshedAt:p.refreshedAt,features:p.features,plan:p.plan,quotas:p.quotas,expirySeconds:Sf}),await u.store(i,p,Sf),p)})},"_getCachedLicense");Pt.env.isJest()&&(wf=jest.fn());var Ef=wf,Tf=a(async()=>{let e=Pt.tenancy.getTenantId();await(await po()).delete(e)},"invalidate");async function ae(e,t){Array.isArray(e)||(e=[e]),t||(t=await Ne.getCachedLicense());for(let r of e)if(!t?.features.includes(r))return!1;return!0}a(ae,"areFeaturesEnabled");async function An(e,t){if(!await ae(e,t))throw new rt.FeatureDisabledError(`${e} is not currently enabled`,e)}a(An,"checkFeature");async function gs(e,t){if(!await ae(e,t)){let r=e.join(", ");throw new rt.FeatureDisabledError(`${r} are not currently enabled`,r)}}a(gs,"checkFeatures");function le(e){return async(...t)=>(await An(re.Feature.WORKSPACE_BACKUPS),e(...t))}a(le,"checkBackups");async function ys(){return ae(re.Feature.WORKSPACE_BACKUPS)}a(ys,"isBackupsEnabled");async function hs(){return ae(re.Feature.BRANDING)}a(hs,"isBrandingEnabled");async function Rf(){return ae(re.Feature.ENFORCEABLE_SSO)}a(Rf,"isEnforceableSSO");async function Ex(){return ae(re.Feature.SYNC_AUTOMATIONS)}a(Ex,"isSyncAutomationsEnabled");async function Tx(){return ae(re.Feature.TRIGGER_AUTOMATION_RUN)}a(Tx,"isTriggerAutomationRunEnabled");async function Ut(){return ae(re.Feature.APP_BUILDERS)}a(Ut,"isAppBuildersEnabled");async function bn(){return ae(re.Feature.AUDIT_LOGS)}a(bn,"isAuditLogsEnabled");async function As(){return ae(re.Feature.USER_GROUPS)}a(As,"isUserGroupsEnabled");function Rx(){return ae(re.Feature.PWA)}a(Rx,"isPWAEnabled");function vx(){return ae(re.Feature.RECAPTCHA)}a(vx,"isRecaptchaEnabled");var _x=a(()=>ae(re.Feature.PKCE_OIDC),"isPkceOidcEnabled");async function at(){return ae(re.Feature.EXPANDED_PUBLIC_API)}a(at,"isExpandedPublicApiEnabled");async function xx(e){if(rt.env.ENABLE_SSO_MAINTENANCE_MODE||!await Rf())return!1;let r;return e?.config?r=e.config:r=await rt.configs.getSettingsConfig(),!!r.isSSOEnforced}a(xx,"isSSOEnforced");var bs=a(async()=>{let e=re.Feature.SCIM,t=await ae(e),r=await rt.configs.getSCIMConfig();if(!t||!r?.enabled)throw new rt.FeatureDisabledError(`${e} is not currently enabled`,e);return!0},"checkSCIM");async function Cx(){return ae(re.Feature.VIEW_PERMISSIONS)}a(Cx,"isViewPermissionEnabled");async function Ox(){return ae(re.Feature.VIEW_READONLY_COLUMNS)}a(Ox,"isViewReadonlyColumnsEnabled");var Lx={faviconUrl:void 0,faviconUrlEtag:void 0,emailBrandingEnabled:!0,testimonialsEnabled:!0,platformTitle:void 0,loginHeading:void 0,loginButton:void 0,metaDescription:void 0,metaImageUrl:void 0,metaTitle:void 0};async function Px(e){return await hs()?{faviconUrl:e.faviconUrl,faviconUrlEtag:e.faviconUrlEtag,emailBrandingEnabled:e.emailBrandingEnabled,testimonialsEnabled:e.testimonialsEnabled,platformTitle:e.platformTitle,loginHeading:e.loginHeading,loginButton:e.loginButton,metaDescription:e.metaDescription,metaImageUrl:e.metaImageUrl,metaTitle:e.metaTitle}:Lx}a(Px,"getBrandingConfig");var Ss={};E(Ss,{enrichAIConfig:()=>Is});var vf=require("@budibase/backend-core");var Ux="budibase_ai";async function Is(e){if(vf.env.SELF_HOSTED)return e;for(let t of Object.values(e.config))if(t.provider==="BudibaseAI")return e;return e.config[Ux]={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(Is,"enrichAIConfig");var Je={};E(Je,{addAction:()=>Bx,addApp:()=>Mx,addAutomation:()=>$x,addGroup:()=>Es,addPlugin:()=>Rs,addRow:()=>Fx,addRows:()=>jx,addUsers:()=>En,bustCache:()=>ho,decrement:()=>nt,decrementMany:()=>ha,getCurrentUsageValues:()=>ec,getLicensedQuota:()=>xf,getQuotaUsage:()=>Rt,increment:()=>Se,incrementBudibaseAICredits:()=>Rn,incrementMany:()=>Dt,removeApp:()=>Gx,removeGroup:()=>Ts,removePlugin:()=>vs,removeRow:()=>Wx,removeRows:()=>Qx,removeUsers:()=>dr,set:()=>ws,setAllUsage:()=>bo,setAppUsageValue:()=>Ao,setUsage:()=>Ju,setUsagePerApp:()=>Xu,updatePluginCount:()=>_s,updateUsage:()=>cr,usageLimitIsExceeded:()=>Nx,utils:()=>Cr});var Sn=require("@budibase/types");var Ge=require("@budibase/backend-core"),J=require("@budibase/types"),qt=require("dd-trace");var Se=a(async(e,t,r)=>await qt.tracer.trace("quotas.increment",async n=>(n.addTags({name:e,type:t}),await _f({change:1,name:e,type:t,opts:r}))),"increment"),Dt=a(e=>qt.tracer.trace("quotas.incrementMany",async()=>_f(e)),"incrementMany"),_f=a(async e=>await qt.tracer.trace("quotas.tryIncrement",async t=>{let r=Array.isArray(e)?e:[e];t.addTags({numActions:r.length}),await cr(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 qt.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 cr(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"),nt=a((e,t,r={})=>cr({usageChange:-1,name:e,type:t,opts:r}),"decrement"),ha=a(e=>{let t=Array.isArray(e)?e:[e];return cr(t.map(r=>({usageChange:-r.change,name:r.name,type:r.type,opts:r.opts})))},"decrementMany"),ws=a(async(e,t,r)=>$e.setUsage(r,e,t),"set"),qx=a((e,t,r)=>{if(e==J.QuotaUsageType.STATIC){let n=r.usageQuota.triggers;return n?n[t]||{}:{}}else{let n=$e.utils.getCurrentMonthString(),o=r.monthly[n].triggers;return o?o[t]||{}:{}}},"getExistingTriggers"),Dx=a(async(e,t,r,n)=>{try{await Ge.locks.doWithLock({type:J.LockType.TRY_ONCE,name:J.LockName.TRIGGER_QUOTA,resource:e,ttl:1e4},async()=>{let o={percentage:r,name:t.name};n&&(o.resetDate=n),await gt.triggerQuota(o)})}catch(o){Ge.logging.logAlert("Error triggering quota",o)}},"triggerQuota"),kx=a(async(e,t,r,n)=>{let o=await Rt(),s=e===J.QuotaUsageType.MONTHLY?o.quotaReset:void 0,i=await qx(e,t,o),u=n.triggers,p=r/n.value*100;p>100&&(p=100);for(let[m,g]of u.entries())if(p>=g&&n.value!==tt.UNLIMITED){if(!i[g]){i[g]=new Date().toISOString();let h=u[m+1]||100;(!(p>=h)||p===g)&&await Dx(t,n,p,s)}}else i[g]=void 0;return i},"checkTriggers"),cr=a(async e=>{await qt.tracer.trace("quotas.updateUsage",async t=>{let r=Ge.tenancy.getTenantId(),n=Array.isArray(e)?e:[e];t.addTags({numActions:n.length,tenantId:r});let o,s,i=[],u={},p={},m={},g={};for(let h of n)await qt.tracer.trace("quotas.updateUsage.action",async S=>{S.addTags({actionName:h.name,actionType:h.type,actionUsageChange:h.usageChange});try{o=Ge.context.getWorkspaceId()}catch{}if(J.APP_QUOTA_NAMES.includes(h.name)&&!o)throw new Error("App context required for quota update");try{s=await xf(J.QuotaType.USAGE,h.name,h.type),i.push(s);let{total:x,app:_,breakdown:v}=await $e.getCurrentUsageValues(h.type,h.name,h.opts?.id);x+=h.usageChange,_!=null&&(_+=h.usageChange),v!=null&&(v+=h.usageChange);let q={};if(h.opts?.dryRun||(q=await kx(h.type,h.name,x,s),g={...g,[h.name]:q}),s.value!==tt.UNLIMITED&&x>s.value&&h.usageChange>0)throw new Ge.UsageLimitError(`Licensed ${s.name} of ${s.value} has been exceeded`,s.name);if(x=Math.max(0,x),_&&(_=Math.max(0,_)),v&&(v=Math.max(0,v),m={...m,[h.name]:v}),!h.opts?.dryRun){let De=h.opts?.valueFn;De&&(x=await De(),_=x),u={...u,[h.name]:x},p={...p,[h.name]:_}}}catch(x){throw h.opts?.suppressErrorLog||console.error(`Error updating usage quotas for ${h.name}`,x),x}});let y=n.filter(h=>!h.opts?.dryRun).map(h=>({name:h.name,type:h.type,values:{total:u[h.name],app:p[h.name],breakdown:m[h.name],triggers:g[h.name]},opts:{...h.opts,tenantId:r}}));y.length>0&&await $e.setAllUsage(y)})},"updateUsage"),xf=a(async(e,t,r)=>{let n=await Ne.getCachedLicense();if(!n){let o=Ge.tenancy.getTenantId();throw new Error("License not found for tenant id "+o)}if(r&&(0,J.isStaticQuota)(e,r,t))return n.quotas[e][r][t];if(r&&(0,J.isMonthlyQuota)(e,r,t))return n.quotas[e][r][t];if((0,J.isConstantQuota)(e,t))return n.quotas[e][t];throw new Error("Invalid quota type")},"getLicensedQuota"),Nx=a(async({name:e,type:t,usageChange:r})=>{try{return await cr({usageChange:r,name:e,type:t,opts:{dryRun:!0}}),!1}catch(n){if(n.code===J.ErrorCode.USAGE_LIMIT_EXCEEDED)return!0;throw n}},"usageLimitIsExceeded");var Bx=a(async e=>Se(Sn.MonthlyQuotaName.ACTIONS,Sn.QuotaUsageType.MONTHLY,{fn:e}),"addAction");var Cf=require("@budibase/backend-core"),pr=require("@budibase/types");var Of=a(async()=>{let e=await Cf.db.getAllWorkspaces({dev:!0});return e?e.length:0},"getDevAppsCount"),Mx=a(async(e,{appId:t}={})=>Se(pr.StaticQuotaName.WORKSPACES,pr.QuotaUsageType.STATIC,{fn:e,valueFn:Of,id:t}),"addApp"),Gx=a(async({appId:e}={})=>nt(pr.StaticQuotaName.WORKSPACES,pr.QuotaUsageType.STATIC,{valueFn:Of,id:e}),"removeApp");var He=require("@budibase/types");var Fx=a(async(e,{tableId:t}={})=>Se(He.StaticQuotaName.ROWS,He.QuotaUsageType.STATIC,{fn:e,id:t}),"addRow"),Wx=a(async({tableId:e}={})=>nt(He.StaticQuotaName.ROWS,He.QuotaUsageType.STATIC,{id:e}),"removeRow"),jx=a(async(e,t,{tableId:r}={})=>Dt({change:e,name:He.StaticQuotaName.ROWS,type:He.QuotaUsageType.STATIC,opts:{fn:t,id:r}}),"addRows"),Qx=a(async(e,{tableId:t}={})=>ha({change:e,name:He.StaticQuotaName.ROWS,type:He.QuotaUsageType.STATIC,opts:{id:t}}),"removeRows");var wn=require("@budibase/types");var $x=a(async(e,{automationId:t}={})=>Se(wn.MonthlyQuotaName.AUTOMATIONS,wn.QuotaUsageType.MONTHLY,{fn:e,id:t}),"addAutomation");var lr=require("@budibase/types");var Es=a(async e=>Se(lr.StaticQuotaName.USER_GROUPS,lr.QuotaUsageType.STATIC,{fn:e}),"addGroup"),Ts=a(async()=>nt(lr.StaticQuotaName.USER_GROUPS,lr.QuotaUsageType.STATIC),"removeGroup");var bt=require("@budibase/types");var Rs=a(async e=>Se(bt.StaticQuotaName.PLUGINS,bt.QuotaUsageType.STATIC,{fn:e}),"addPlugin"),vs=a(async()=>nt(bt.StaticQuotaName.PLUGINS,bt.QuotaUsageType.STATIC),"removePlugin"),_s=a(async e=>ws(bt.StaticQuotaName.PLUGINS,bt.QuotaUsageType.STATIC,e),"updatePluginCount");var ze=require("@budibase/types"),Aa=require("@budibase/backend-core");var En=a(async(e,t,r)=>{let n=[{change:e,name:ze.StaticQuotaName.USERS,type:ze.QuotaUsageType.STATIC,opts:{fn:r,valueFn:Aa.users.getUserCount}}];t>0&&n.push({change:t,name:ze.StaticQuotaName.CREATORS,type:ze.QuotaUsageType.STATIC,opts:{valueFn:Aa.users.getCreatorCount}});let o=await Dt(n);return await Vt(),o},"addUsers"),dr=a(async(e,t)=>{let r=[{change:e,name:ze.StaticQuotaName.USERS,type:ze.QuotaUsageType.STATIC,opts:{valueFn:Aa.users.getUserCount}}];t>0&&r.push({change:t,name:ze.StaticQuotaName.CREATORS,type:ze.QuotaUsageType.STATIC,opts:{valueFn:Aa.users.getCreatorCount}}),await ha(r),await Vt()},"removeUsers");var Tn=require("@budibase/types");var Rn=a(async e=>Dt({change:e,name:Tn.MonthlyQuotaName.BUDIBASE_AI_CREDITS,type:Tn.QuotaUsageType.MONTHLY}),"incrementBudibaseAICredits");var ot={};E(ot,{addAppBuilder:()=>zx,db:()=>Oe,removeAppBuilder:()=>Jx});var Ia=require("@budibase/backend-core");var Q={};E(Q,{addAppBuilder:()=>Ls,addUsers:()=>_n,adjustGroupCreatorsQuotas:()=>Hx,cleanupApp:()=>Yx,enrichUserRolesFromGroups:()=>Vx,fetch:()=>ba,get:()=>It,getBulk:()=>Nf,getGroupBuilderAppIds:()=>kf,getGroupRoleId:()=>Kx,remove:()=>xs,removeAppBuilder:()=>Ps,removeUsers:()=>Cs,save:()=>fr,updateGroupApps:()=>Os});var C=require("@budibase/backend-core");var Lf=require("@budibase/backend-core");var vn=class extends Lf.HTTPError{static{a(this,"GroupNameUnavailableError")}constructor(t){super(`Group name "${t}" is unavailable`,409)}};async function qf(e,t){try{let r=[];for(let u of e)if(u.roles){let p=u.roles[C.db.getProdWorkspaceID(t)];p&&r.push(p)}let n=await Promise.all(r.map(async u=>({[u]:await C.roles.roleToNumber(u)}))),o,s,i={};n.forEach(u=>{let[p,m]=Object.entries(u)[0];i[p]={roleId:p,roleNum:m}});for(let{roleId:u,roleNum:p}of Object.values(i))(s===void 0||p>s)&&(s=p,o=u);return o}catch(r){throw C.logging.logAlert(`Error finding higest role for ${e.length} on app ${t}`,r),r}}a(qf,"findHighestRole");async function Df(e,t){return t?t=t.filter(r=>e.includes(r._id)):t=await M.getBulk(e,{enriched:!1}),t}a(Df,"groupList");async function kf(e,t){if(!e.userGroups)return[];let r=await Df(e.userGroups,t?.groups),n=t?.appId?C.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(kf,"getGroupBuilderAppIds");async function Kx(e,t,r){if(!e.userGroups)return null;let n=await Df(e.userGroups,r?.groups),o=C.db.getProdWorkspaceID(t);return e.roles?.[o]?e.roles[o]:(n=n.filter(s=>s?.roles?Object.keys(s.roles).includes(o):!1),await qf(n,t))}a(Kx,"getGroupRoleId");async function Vx(e){if(!e||!e.userGroups)return e;let t=await Nf(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 C.context.doInWorkspaceContext(o,async()=>{if(e.roles[o])return;let s=await qf(t,o);s&&(e.roles[o]=s)});let n=await kf(e,{groups:t});if(n.length&&!e.builder?.global){let o=e.builder?.apps||[];e.builder={apps:o.concat(n)}}return e}a(Vx,"enrichUserRolesFromGroups");async function ba(){return await M.fetch()}a(ba,"fetch");async function It(e){return await M.get(e)}a(It,"get");async function Nf(e,t={enriched:!0}){return await M.getBulk(e,t)}a(Nf,"getBulk");async function Pf(e){if(await M.getByName(e))throw new vn(e)}a(Pf,"guardNameAvailability");async function Uf(e){let t=await M.getGroupUsers(e._id);if(!t.length)return 0;let n=await C.tenancy.getGlobalDB().getMultiple(t.map(s=>s._id));return(await C.userUtils.creatorsInList(n)).filter(s=>s).length}a(Uf,"getCreatorsCountInGroup");async function fr(e){let t=[],r=!e._id,n=0;if(delete e.users,!e._id)e._id=M.generateUserGroupID(),await Pf(e.name),t.push(C.events.group.created(e));else{let s=await M.get(e._id);if(s.name!==e.name&&await Pf(e.name),t.push(C.events.group.updated(e)),JSON.stringify(s.roles)!==JSON.stringify(e.roles)){let i=s.users?.length||0,u=0;i>0&&(u=await Uf(s)),Object.values(e.roles).includes("CREATOR")?n=i-u:n=-i,t.push(C.events.group.permissionsEdited(e))}}await Promise.all(t);let o=a(()=>M.save(e),"saveGroup");if(r)return await Es(o);{let s=await o();if(n>0)await En(0,n);else if(n<0){let i=await Uf(e),u=Math.abs(n)-i;u>0&&await dr(0,u)}return s}}a(fr,"save");async function xs(e,t){let r;try{r=await M.get(e)}catch{throw new Error("Group not found")}let n=Object.values(r.roles||{}).includes("CREATOR"),o=a(()=>{},"recalculateCreatorsQuotasFn");if(n){let i=C.tenancy.getGlobalDB(),u=await M.getGroupUsers(e),m=(await Promise.all(u.map(S=>i.get(S._id)))).map(S=>({...S,userGroups:S.userGroups.filter(O=>O!==e)})),y=(await C.userUtils.creatorsInList(m)).filter(S=>S).length,h=u.length-y;h&&(o=a(()=>dr(0,h),"recalculateCreatorsQuotasFn"))}let s=await M.destroy(e,t);return await C.events.group.deleted(r),await Ts(),await o(),s}a(xs,"remove");async function _n(e,t){let r=await M.get(e),n=await C.users.bulkGetGlobalUsersById(t),o=[];for(let p of n)p.userGroups||(p.userGroups=[]),p.userGroups.includes(e)||o.push(p);if(!o.length)return o;let s=o.map(p=>({...p,userGroups:[...p?.userGroups||[],e]}));if(await C.users.bulkUpdateGlobalUsers(s),Object.values(r.roles||{}).includes("CREATOR")){let m=(await C.userUtils.creatorsInList(o)).filter(y=>y).length,g=o.length-m;g&&await En(0,g)}let u=[];for(let p of t)u.push(C.cache.user.invalidateUser(p));return await Promise.all(u),await C.events.group.usersAdded(s.length,r),s}a(_n,"addUsers");async function Cs(e,t){let r=await M.get(e),n=await C.users.bulkGetGlobalUsersById(t),o=[];for(let u of n){if(!u.userGroups||!u.userGroups.includes(e))continue;let p=u.userGroups.indexOf(e);u.userGroups.splice(p,1),o.push(u)}if(await C.users.bulkUpdateGlobalUsers(o),Object.values(r.roles||{}).includes("CREATOR")){let p=(await C.userUtils.creatorsInList(o)).filter(g=>g).length,m=o.length-p;m&&await dr(0,m)}let i=[];for(let u of t)i.push(C.cache.user.invalidateUser(u));return await Promise.all(i),o.length&&await C.events.group.usersDeleted(o.length,r),o}a(Cs,"removeUsers");async function Os(e,t){let r=await It(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];return await fr(r)}a(Os,"updateGroupApps");async function Yx(e){let t=await ba(),r=[];for(let n of t)!n.roles||!n.roles[e]||(delete n.roles[e],r.push(n));return await M.bulkSave(r)}a(Yx,"cleanupApp");async function Ls(e,t){if(!await Ut())throw new Error("Feature not enabled, please check license");let r=C.db.getProdWorkspaceID(t),n=await It(e);n.builder??={apps:[]},n.builder.apps.includes(t)||(n.builder.apps.push(r),await fr(n))}a(Ls,"addAppBuilder");async function Ps(e,t){if(!await Ut())throw new Error("Feature not enabled, please check license");let r=C.db.getProdWorkspaceID(t),n=await It(e);n.builder?.apps.includes(t)&&(n.builder.apps=n.builder.apps.filter(o=>o!==r),await fr(n))}a(Ps,"removeAppBuilder");async function Hx(){if(!await As()){let e=C.tenancy.getGlobalDB(),r=(await ba()||[]).filter(n=>Object.values(n?.roles||{}).includes("CREATOR"));for(let n of r){let o=await M.getGroupUsers(n._id),i=(await Promise.all(o.map(g=>e.get(g._id)))).map(g=>({...g,userGroups:g.userGroups.filter(y=>y!==n._id)})),p=(await C.userUtils.creatorsInList(i)).filter(g=>g).length,m=o.length-p;await M.save({...n,roles:{}}),m&&await dr(0,m)}}}a(Hx,"adjustGroupCreatorsQuotas");Ia.users.UserDB.init(Je,Q,Me);var Oe=Ia.users.UserDB;async function zx(e,t){if(!await Ut())throw new Error("Feature not enabled, please check license");await Ia.users.addAppBuilder(e,t)}a(zx,"addAppBuilder");async function Jx(e,t){if(!await Ut())throw new Error("Feature not enabled, please check license");await Ia.users.removeAppBuilder(e,t)}a(Jx,"removeAppBuilder");var On={};E(On,{logs:()=>Ms});var Ms={};E(Ms,{logSearch:()=>sC,oldestLogDate:()=>Qf,storeLog:()=>iC});var Cn=require("@budibase/backend-core"),jf=require("@budibase/types");var ee=require("@budibase/backend-core"),xn=require("@budibase/types");var Bf=require("@budibase/backend-core");async function Mf(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||Bf.logging.logWarn(`Failed to backoff: ${t}`,r),s}a(Mf,"backOff");var{SEPARATOR:st,UNICODE_MAX:Xx,DocumentType:Gf,AutomationViewMode:Us,ViewName:Zx,getQueryIndex:eC}=ee.db,tC=new Date(0).toISOString(),rC=100,qs=a(async()=>Va(xn.ConstantQuotaName.AUTOMATION_LOG_RETENTION_DAYS),"oldestLogDate");function Ff(e,t,{status:r,automationId:n}={},o={}){let s=n?`${n}${st}`:"",i=r?`${r}${st}`:"",u;return r&&n?u=`${Us.ALL}${st}${i}${s}`:r?u=`${Us.STATUS}${st}${i}`:n?u=`${Us.AUTOMATION}${st}${s}`:u=`${Gf.AUTOMATION_LOG}${st}`,{...o,descending:!0,startkey:`${u}${t}${Xx}`,endkey:`${u}${e}`}}a(Ff,"getAutomationLogParams");function aC(e,t,r){return`${Gf.AUTOMATION_LOG}${st}${e}${st}${r}${st}${t}`}a(aC,"generateAutomationLogID");async function Ds(e,t,r={docs:!0}){let n=ee.context.getProdWorkspaceDB();await n.exists()||(n=ee.context.getDevWorkspaceDB());let o={status:r.status},s=r?.limit?r.limit:r?.paginate?9+1:void 0,i=Ff(e,t,o,{include_docs:r.docs,limit:s});r?.page&&(i.startkey=r.page);let u=await n.allDocs(i);return Vr(u,{paginate:r?.paginate,pageSize:9})}a(Ds,"getAllLogs");async function ks(e,t,r={}){let n=ee.context.getProdWorkspaceDB();await n.exists()||(n=ee.context.getDevWorkspaceDB());let o;try{let s={automationId:r?.automationId,status:r?.status},i=Ff(e,t,s,{include_docs:!0,limit:9+1});r?.page&&(i.startkey=r.page),o=await n.query(eC(Zx.AUTOMATION_LOGS),i)}catch(s){if(s!=null&&(s.name==="not_found"||s.error==="not_found"))return await gc(),ks(e,t,r);throw s}return Vr(o,{paginate:!0,pageSize:9})}a(ks,"getLogsByView");async function Wf(e,t){let r=ee.context.getProdWorkspaceDB(),n=e._id,o=e.name,s=new Date().toISOString(),i=aC(s,t.status,n),u={...t,automationId:n,status:t.status,automationName:o,createdAt:s,_id:i};return await r.put(u),i}a(Wf,"writeLog");async function Ns(e,{clearing:t}={clearing:!1}){let r=ee.context.getProdWorkspaceDB();await Mf(async()=>{let n=await r.get(ee.db.DocumentType.WORKSPACE_METADATA);for(let o of e){let s=o.split(ee.db.SEPARATOR),i=`${s[s.length-3]}${ee.db.SEPARATOR}${s[s.length-2]}`,u={};n.automationErrors&&(u=n.automationErrors),Array.isArray(u[i])||(u[i]=[]);let p=u[i].indexOf(o);t&&p!==-1?u[i].splice(p,1):u[i].push(o),u[i].length===0&&delete u[i],n.automationErrors=u}await r.put(n),await ee.cache.workspace.invalidateWorkspaceMetadata(n.appId,n)},"Failed to update app metadata with automation log error")}a(Ns,"updateAppMetadataWithErrors");async function nC(){let e=await qs();try{return await Ds(tC,e,{docs:!1,paginate:!1,limit:rC})}catch{return{data:[],hasNextPage:!1}}}a(nC,"getExpiredLogs");async function Bs(){let e=ee.context.getProdWorkspaceDB();try{let t=await nC();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(ee.db.SEPARATOR);return s[s.length-1]===xn.AutomationStatus.ERROR}).map(o=>o.id);await e.bulkDocs(r),n.length&&await Ns(n,{clearing:!0})}catch(t){ee.logging.logAlert(`Failed to cleanup automation log history - Database "${e.name}"`,t)}}a(Bs,"clearOldHistory");var Qf=qs;async function oC(e,t,r,n){let o,s=new Date().toISOString(),i=await Qf();return(!e||e<i)&&(e=i),r||t?o=await ks(e,s,{automationId:r,status:t,page:n}):o=await Ds(e,s,{status:t,page:n,docs:!0,paginate:!0}),o}a(oC,"getLogs");async function sC(e){return await Bs(),await oC(e.startDate,e.status,e.automationId,e.page)}a(sC,"logSearch");async function iC(e,t){if(!Cn.db.isProdWorkspaceID(Cn.context.getWorkspaceId()))return;let r=await Wf(e,t);t.status===jf.AutomationStatus.ERROR&&await Ns([r]),await Bs()}a(iC,"storeLog");var Ln={};E(Ln,{checkPluginQuotas:()=>pC,deletePlugin:()=>cC,storePlugin:()=>uC});var Yf=require("@budibase/types"),X=require("@budibase/backend-core");var $f=U(require("fs")),Kf=require("path");function Vf(e,t){return $f.default.readFileSync((0,Kf.join)(e,t),"utf8")}a(Vf,"loadJSFile");async function uC(metadata,directory,source){let db=X.tenancy.getGlobalDB(),version=metadata.package.version,name=metadata.package.name,description=metadata.package.description,hash=metadata.schema.hash,bucketPath=X.objectStore.getPluginS3Dir(name),files=await X.objectStore.uploadDirectory(X.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===Yf.PluginType.DATASOURCE){let js=Vf(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=X.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 X.events.plugin.imported(doc),{...doc,_rev:e.rev}},"write");return rev?await write():await Rs(write)}a(uC,"storePlugin");async function cC(e){let t=X.tenancy.getGlobalDB();try{let r=await t.get(e),n=X.objectStore.getPluginS3Dir(r.name);await X.objectStore.deleteFolder(X.objectStore.ObjectStoreBuckets.PLUGINS,n),await t.remove(e,r._rev),await X.events.plugin.deleted(r),await vs()}catch(r){let n=r?.message?r?.message:r;throw new Error(`Failed to delete plugin: ${n}`)}}a(cC,"deletePlugin");async function pC(){let e=X.tenancy.getGlobalDB();try{let r=(await e.allDocs(X.db.getPluginParams())).rows.length;console.log(`Syncing plugin count: ${r}`),await _s(r)}catch(t){X.logging.logAlert("Unable to retrieve plugins for quota check",t)}}a(pC,"checkPluginQuotas");var Xe={};E(Xe,{fetch:()=>dC,fetchValues:()=>fC,isEncryptionKeyAvailable:()=>lC,isValid:()=>Jf,remove:()=>gC,update:()=>mC});var Hf=require("@budibase/backend-core"),Sa=require("@budibase/types");function lC(){return!!Hf.env.ENCRYPTION_KEY}a(lC,"isEncryptionKeyAvailable");async function dC(){let e=await xt.get();return Object.keys(e.variables)}a(dC,"fetch");async function fC(e){let r=(await xt.get()).variables,n={};for(let[o,s]of Object.entries(r))switch(e){case Sa.Environment.DEVELOPMENT:n[o]=s.development;break;case Sa.Environment.PRODUCTION:default:n[o]=s.production;break}return n}a(fC,"fetchValues");async function zf(e){if(!(await Ve.cache.getCachedLicense()).features.includes(Sa.Feature.ENVIRONMENT_VARIABLES))throw new Error("User does not have access to environment variables feature.");let r=await xt.get();r.variables=e(r.variables),await xt.update(r)}a(zf,"changeValues");async function mC(e,t){if(Jf(e))await zf(n=>(n[e]=t,n));else throw new Error("Variable name has characters that are not allowed")}a(mC,"update");async function gC(e){await zf(t=>(delete t[e],t))}a(gC,"remove");function Jf(e){return/^[a-zA-Z0-9-_]+$/.test(e)}a(Jf,"isValid");var St={};E(St,{definitions:()=>vC,download:()=>RC,fetch:()=>TC,write:()=>wC});var ge=require("@budibase/backend-core"),Un=require("@budibase/types");var Y=require("@budibase/backend-core"),Fe=require("@budibase/types");var Xf=require("memorystream"),Zf=new Y.sql.Sql(Fe.SqlClient.SQL_LITE);async function yC(e,t,r){let n={operation:Fe.Operation.READ,table:$t.searchTable(),tables:{},paginate:{limit:r||9,page:t},filters:e,resource:{fields:[]},sort:{timestamp:{direction:Fe.SortOrder.DESCENDING,type:Fe.SortType.STRING}}},o=Zf._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(yC,"getAuditLogSqlQuery");function hC(e){return`${Y.DocumentType.AUDIT_LOG}${Y.SEPARATOR}${e}${Y.SEPARATOR}${Y.utils.newid()}`}a(hC,"generateAuditLogID");async function em(e){e._id||(e._id=hC(e.timestamp)),e.type||(e.type=Fe.AUDIT_LOG_TYPE);try{let r=await Y.context.getAuditLogsDB().put(e);return{...e,_rev:r.rev}}catch(t){Y.logging.logAlert("Failed to write audit log",t)}}a(em,"save");async function Gs(e,t,r){t||(t=1);let n=Y.context.getAuditLogsDB();try{let o=9+1,s=await yC(e,t,o),i=$t.searchTable(),u=Zf.convertJsonStringColumns(i,await n.sql(s.sql,s.bindings)),p;u.length>o&&(p=u.pop());let m={rows:u,hasNextPage:!!p};return m.hasNextPage&&(m.bookmark=t+1),m}catch(o){if(o.status===404&&!r?.isRetry)return await AC(),await tc(),await Gs(e,t,{isRetry:!0});throw o}}a(Gs,"searchSQL");async function AC(){let e=Y.context.getAuditLogsDB(),r=(await e.allDocs(Y.db.getDocParams(Y.DocumentType.AUDIT_LOG,null,{include_docs:!0}))).rows.map(n=>n.doc).filter(n=>n&&!n.type).map(n=>({...n,type:Fe.AUDIT_LOG_TYPE}));await e.bulkDocs(r)}a(AC,"migrate");function tm(e){let t=Y.context.getAuditLogsDB(),r=new Xf,n=t.dump(r,{filter:s=>{let i=s;if(!i._id?.startsWith(Y.DocumentType.AUDIT_LOG))return!1;let u=!0,p=a((m,g)=>{!m||m.length===0||(u=!!(u&&g&&m.includes(g)))},"matcher");if(p(e.userIds,i.userId),p(e.appIds,i.appId),p(e.events,i.event),(e.startDate||e.endDate)&&(u=u&&i.timestamp>=e.startDate&&i.timestamp<=e.endDate),e.fullSearch){let m=JSON.stringify(s);u=u&&m.includes(e.fullSearch)}return u}}),o=new Xf;return r.on("data",s=>{let i=JSON.parse(Buffer.from(s).toString());if(Array.isArray(i.docs)){let u="";for(let p of i.docs)u+=JSON.stringify(p)+`
38
- `;o.write(u)}}),r.on("end",()=>{o.end()}),{promise:n,stream:o}}a(tm,"dump");var wa=require("@budibase/backend-core"),Ea=require("@budibase/string-templates"),Pn=require("@budibase/types");var IC=wa.constants.MIN_VALID_DATE.toISOString(),SC=wa.constants.MAX_VALID_DATE.toISOString();function Fs(e){return(e.startDate||e.endDate)&&(e.startDate=e.startDate||IC,e.endDate=e.endDate||SC),e}a(Fs,"fillDates");async function rm(e){Array.isArray(e.appIds)&&(e.appIds=e.appIds.map(n=>wa.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=Fs(e),t.range={timestamp:{high:e.endDate,low:e.startDate}}),Object.keys(t).length===0&&(t.notEmpty={event:!0}),t}a(rm,"getSearchFilters");function Ws(e,t,r){let n={_id:e,status:Pn.AuditLogResourceStatus.DELETED};switch(t){case"app":n.name=r?.appName;break;case"user":n.email=r?.email;break}return n}a(Ws,"deleted");function Qs(e){let t=(0,Ea.findHBSBlocks)(e);for(let r of t){let n=` "${r}"`;e=e.replace(e.includes(n)?n:` ${r}`,""),e=(0,Ea.processStringSync)(e,{})}return e}a(Qs,"removeTemplateStrings");function am(e,t){let r=Pn.AuditedEventFriendlyName[e];if(!r)throw new Error("No friendly name found.");let n=(0,Ea.processStringSync)(r,t);return n.includes('""')&&(n=Qs(r)),n}a(am,"getEventFriendlyName");async function wC(e,t,r){if(!await bn()||!ge.utils.isAudited(e))return;let n=am(e,t),o=new Date;r?.timestamp&&(o=new Date(r.timestamp));let s={timestamp:o.toISOString(),event:e,name:n,userId:r?.userId||Un.AuditLogSystemUser,metadata:{...t,...r?.hostInfo}},i={};try{if(r?.appId){s.appId=ge.db.getProdWorkspaceID(r.appId);let u=await ge.cache.workspace.getWorkspaceMetadata(r.appId);"name"in u&&(i.appName=u.name)}if(r?.userId){let u=await ge.users.getById(r?.userId);i.email=u.email}}catch(u){ge.logging.logAlert("Failed to retrieve fallback information for audit log",u)}return s.fallback=i,await em(s)}a(wC,"write");async function EC(e){let t=e.map(u=>u.userId),n=e.filter(u=>u.appId).map(u=>ge.db.getDevWorkspaceID(u.appId)),o=await ge.users.bulkGetGlobalUsersById([...new Set(t)],{cleanup:!0}),s=await ge.db.getWorkspacesByIDs([...new Set(n)]),i=[];for(let u of e){let p=o.find(y=>y?._id===u.userId),m=s.find(y=>ge.db.isSameWorkspaceID(y?.appId,u.appId)),g={event:u.event,timestamp:u.timestamp,name:u.name,metadata:u.metadata,user:p||Ws(u.userId,"user",u.fallback)};u.appId&&(g.app=m||Ws(u.appId,"app",u.fallback)),i.push(g)}return i}a(EC,"enrich");async function TC(e){if(!await bn())throw new Error("Audit logs not available - license required.");let t=await rm(e);if(typeof e.bookmark=="string")throw new Error("String based bookmark not supported.");let r=await Gs(t,e.bookmark);return{hasNextPage:r.hasNextPage,bookmark:r.bookmark,data:await EC(r.rows)}}a(TC,"fetch");function RC(e){return e=Fs(e),tm(e)}a(RC,"download");function vC(){let e=Object.entries(Un.AuditedEventFriendlyName).filter(r=>r[1]!=null),t={};for(let r of e)t[r[0]]=Qs(r[1]);return t}a(vC,"definitions");var qn={};E(qn,{applications:()=>Ys,roles:()=>Ks,users:()=>$s});var $s={};E($s,{roleCheck:()=>xC});function _C(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(_C,"removeRoles");async function xC(e,t){return await at()||_C(e,t),e}a(xC,"roleCheck");var Ks={};E(Ks,{assign:()=>CC,unAssign:()=>OC});var Ta=require("@budibase/backend-core");async function CC(e,t){if(!await at())throw new Error("Unable to assign roles - license required.");let r=await Oe.bulkGet(e);for(let n of r){if(t.role&&t.role.roleId){let o=Ta.db.getProdWorkspaceID(t.role.appId);n.roles[o]=t.role.roleId}if(t.appBuilder){let o=Ta.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 Oe.bulkUpdate(r)}a(CC,"assign");async function OC(e,t){if(!await at())throw new Error("Unable to un-assign roles - license required.");let r=await Oe.bulkGet(e);for(let n of r){if(t.role){let o=Ta.db.getProdWorkspaceID(t.role?.appId);n.roles[o]===t.role.roleId&&delete n.roles[o]}if(t.appBuilder&&n.builder?.apps){let o=Ta.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(OC,"unAssign");var Ys={};E(Ys,{buildExportFn:()=>PC,buildImportFn:()=>LC});var Vs=require("@budibase/backend-core");function LC(e){return async(t,r)=>{await at()||t.throw(403,"Endpoint unavailable, license required."),t.request.files?.appExport||t.throw(400,"Must provide app export file for import."),await Vs.context.doInWorkspaceContext(t.params.appId,async()=>{await e(t),t.body=void 0,t.status=204,await r()})}}a(LC,"buildImportFn");function PC(e){return async(t,r)=>{await at()||t.throw(403,"Endpoint unavailable, license required.");let{encryptPassword:n,excludeRows:o}=t.request.body;await Vs.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(PC,"buildExportFn");var oe=require("@budibase/backend-core"),ne=require("@budibase/types"),sm=U(require("fs")),im=require("path");var Hs=require("@budibase/backend-core");var nm;function om(){nm=new Hs.queue.BudibaseQueue(Hs.queue.JobQueue.APP_BACKUP,{maxStalledCount:3,jobOptions:{attempts:3,removeOnFail:!0,removeOnComplete:!0}})}a(om,"init");function kt(){return nm}a(kt,"getBackupQueue");async function zs(e,t={}){return xe.storeAppBackupMetadata(e,t)}a(zs,"storeAppBackupMetadata");function um(e){let t=new Date().toISOString();switch(e){case ne.BackupStatus.COMPLETE:case ne.BackupStatus.FAILED:return{timestamp:t,finishedAt:t};case ne.BackupStatus.STARTED:return{timestamp:t,startedAt:t};case ne.BackupStatus.PENDING:return{timestamp:t,createdAt:t}}}a(um,"getTimestamps");async function UC(e,t,r,n){let o=await Dn(e);return await xe.storeAppBackupMetadata({...o,...um(t),contents:r,status:t,type:ne.BackupType.BACKUP},{filename:n,docId:e})}a(UC,"updateBackupStatus");async function qC(e,t,r){let n=await Dn(e);return await xe.storeAppBackupMetadata({...n,...um(r),status:r,type:ne.BackupType.RESTORE,trigger:ne.BackupTrigger.MANUAL},{docId:e,docRev:t})}a(qC,"updateRestoreStatus");async function Dn(e){return xe.getAppBackupMetadata(e)}a(Dn,"getAppBackup");async function DC(e,t){return xe.updateAppBackupMetadata(e,t)}a(DC,"updateAppBackup");async function cm(e){let t=await xe.getAppBackupMetadata(e);return t.filename&&await oe.objectStore.deleteFile(oe.objectStore.ObjectStoreBuckets.BACKUPS,t.filename),xe.deleteAppBackupMetadata(e)}a(cm,"deleteAppBackup");async function kC(e){let t=[];for(let r of e)try{await cm(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(kC,"deleteAppBackups");async function NC(e,t){return xe.fetchAppBackups(e,t)}a(NC,"fetchAppBackups");async function pm(e){let t=await xe.getAppBackupMetadata(e);if(!t.filename)throw new Error("Backup incomplete - cannot download.");let r=await oe.objectStore.getReadStream(oe.objectStore.ObjectStoreBuckets.BACKUPS,t.filename);return{metadata:t,stream:r}}a(pm,"getBackupDownloadStream");async function BC(e){let{stream:t}=await pm(e),r=(0,im.join)(oe.objectStore.budibaseTempDir(),oe.utils.newid()),n=sm.default.createWriteStream(r);return new Promise((o,s)=>{t.on("error",s),n.on("error",s),t.pipe(n).on("close",()=>o(r))})}a(BC,"downloadAppBackup");async function MC(e,t,r={}){let n;try{n=await zs({appId:e,trigger:t,timestamp:new Date().toISOString(),status:ne.BackupStatus.PENDING,type:ne.BackupType.BACKUP,...r})}catch(o){if(o.status===409)return;throw o}return await kt().add({docId:n.id,docRev:n.rev,appId:e,export:{trigger:t,...r}}),await oe.events.backup.appBackupTriggered(e,n.id,ne.BackupType.BACKUP,t,r?.name),n.id}a(MC,"triggerAppBackup");async function GC(e,t,r,n){let o=await Dn(t),s;try{s=await zs({appId:e,timestamp:new Date().toISOString(),status:ne.BackupStatus.PENDING,type:ne.BackupType.RESTORE,createdBy:n})}catch(i){if(i?.status===409)return;throw i}return await kt().add({appId:e,docId:s.id,docRev:s.rev,import:{nameForBackup:r,backupId:t,createdBy:n}}),{restoreId:s.id,metadata:o}}a(GC,"triggerAppRestore");async function FC(e,t,r){let n=oe.db.getProdWorkspaceID(e);await oe.context.doInWorkspaceContext(n,async()=>{let o=oe.context.getProdWorkspaceDB();if(!await o.exists())return;let i=await o.tryGet(ne.DocumentType.WORKSPACE_METADATA);i&&(i.backupErrors||(i.backupErrors={}),i.backupErrors[t]||(i.backupErrors[t]=[]),i.backupErrors[t].push(r),await o.put(i),await oe.cache.workspace.invalidateWorkspaceMetadata(i.appId,i))})}a(FC,"trackBackupError");var WC={isEnabled:ys,triggerAppRestore:le(GC),triggerAppBackup:le(MC),getBackupDownloadStream:le(pm),downloadAppBackup:le(BC),fetchAppBackups:le(NC),storeAppBackupMetadata:le(zs),updateBackupStatus:le(UC),updateRestoreStatus:le(qC),getAppBackup:le(Dn),updateAppBackup:le(DC),deleteAppBackup:le(cm),deleteAppBackups:le(kC),trackBackupError:le(FC)},Le=WC;var Xs={};E(Xs,{init:()=>Js});var $=require("@budibase/backend-core"),We=require("@budibase/types"),mr=U(require("fs"));async function Js(e){kt().process(async t=>{let r=t.data;try{if(r.export)return console.log("Exporting app backup:",r.appId,r.export.trigger),$C(t,e);if(r.import)return console.log("Importing app backup:",r.appId,r.import.backupId),QC(t,e)}catch(n){$.logging.logAlert(`Failed to perform backup for app ID: ${r.appId}`,n)}})}a(Js,"init");async function jC(e){await $.db.getDB(e,{skip_setup:!0}).destroy()}a(jC,"removeExistingApp");async function lm(e,t,r,n){let o=$.db.getDevWorkspaceID(r),s=$.db.getProdWorkspaceID(r),i=new Date().toISOString(),u=a(async(p,m)=>{n?.doc?await Le.updateBackupStatus(n.doc.id,p,m?.contents,m?.filename):await Le.storeAppBackupMetadata({appId:s,timestamp:i,trigger:e,status:p,name:n?.name,type:We.BackupType.BACKUP,contents:m?.contents,createdBy:n?.createdBy},{filename:m?.filename})},"updateMetadata");try{let p=await n.processing.exportAppFn(o,{tar:!0}),m=await n.processing.statsFn(o),g=`${s}/backup-${i}.tar.gz`,y=$.objectStore.ObjectStoreBuckets.BACKUPS,h=mr.default.createReadStream(p);await $.objectStore.streamUpload({bucket:y,filename:g,stream:h,extra:{type:"application/gzip",metadata:{name:n?.name,trigger:e,timestamp:i,appId:s}}}),await u(We.BackupStatus.COMPLETE,{filename:g,contents:m}),mr.default.existsSync(p)&&mr.default.rmSync(p)}catch(p){$.logging.logAlert("App backup error",p),await u(We.BackupStatus.FAILED);let m=n?.doc?.id||`backup-${i}`,g=p instanceof Error?p.message:String(p);await Le.trackBackupError(s,m,`Backup export failed: ${g}`)}}a(lm,"runBackup");async function QC(e,t){let r=e.data,n=r.appId,o=r.import.backupId,s=r.import.nameForBackup,i=r.import.createdBy,u=$.tenancy.getTenantIDFromWorkspaceID(n);return $.tenancy.doInTenant(u,async()=>{let p=$.db.getDevWorkspaceID(n),m=`${p}_temp_${Date.now()}`,{rev:g}=await Le.updateRestoreStatus(r.docId,r.docRev,We.BackupStatus.STARTED);await lm(We.BackupTrigger.RESTORING,u,n,{processing:t,createdBy:i,name:s});let y=await Le.downloadAppBackup(o),h=We.BackupStatus.COMPLETE;try{await t.importAppFn(m,$.db.getDB(m),{file:{type:"application/gzip",path:y},key:y}),await jC(p),await new $.db.Replication({source:m,target:p}).replicate()}catch(S){$.logging.logAlert("App restore error",S),h=We.BackupStatus.FAILED;let O=S instanceof Error?S.message:String(S);await Le.trackBackupError(n,o,`Backup restore failed: ${O}`)}finally{try{await $.db.getDB(m,{skip_setup:!0}).destroy()}catch{}}await Le.updateRestoreStatus(r.docId,g,h),mr.default.existsSync(y)&&mr.default.rmSync(y,{force:!0})})}a(QC,"importProcessor");async function $C(e,t){let r=e.data,n=r.appId,o=r.export.trigger,s=r.export.name,i=$.tenancy.getTenantIDFromWorkspaceID(n);await $.tenancy.doInTenant(i,async()=>{try{let{rev:u}=await Le.updateBackupStatus(r.docId,We.BackupStatus.STARTED);return lm(o,i,n,{processing:t,doc:{id:r.docId,rev:u},name:s})}catch(u){$.logging.logAlert("App backup error",u);let p=u instanceof Error?u.message:String(u);await Le.trackBackupError(n,r.docId,`Backup export failed: ${p}`)}})}a($C,"exportProcessor");var KC=a(async e=>{om(),await Js(e.processing)},"init"),we={...Le,processing:Xs,init:KC,getBackupQueue:kt};var dm=a(async e=>{e.backups&&await we.init(e.backups)},"init");var he={};E(he,{create:()=>MB,find:()=>BB,get:()=>NB,remove:()=>FB,update:()=>GB});var qA=U(Ki()),it=require("@budibase/backend-core");var DA=require("@budibase/types");async function NB(e){let t=it.tenancy.getGlobalDB(),r=new it.db.QueryBuilder(t.name,DA.SearchIndex.USER);r.setIndexBuilder(it.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(NB,"get");async function BB(e){return await it.users.getById(e)}a(BB,"find");async function MB(e){let t=await Oe.getUserByEmail(e.email);if(t){if(t.scimInfo?.isSync)throw new it.HTTPError("User is already synched",409);e={...t,scimInfo:(0,qA.default)(t.scimInfo,e.scimInfo),password:void 0,firstName:e.firstName,lastName:e.lastName,updatedAt:e.updatedAt}}return await Oe.save(e,{requirePassword:!1})}a(MB,"create");async function GB(e,t){return await Oe.save(e,{requirePassword:!1,allowChangingEmail:t?.allowChangingEmail})}a(GB,"update");async function FB(e){return await Oe.destroy(e)}a(FB,"remove");var Ir={};E(Ir,{create:()=>WB});var kA=U(Ki());var NA=require("@budibase/backend-core");async function WB(e){let t=await So(e.name),r;if(!t)r=(await Q.save(e)).id;else{if(t.scimInfo?.isSync)throw new NA.HTTPError("Group is already synched",409);r=t._id,t.users&&(await Q.removeUsers(r,t.users.map(o=>o._id)),delete t.users),t.scimInfo=(0,kA.default)(t.scimInfo,e.scimInfo),await Q.save(t)}return await Q.get(r)}a(WB,"create");var Bt={};E(Bt,{logRequest:()=>jB,logResponse:()=>QB});var Vi=require("@budibase/backend-core");async function jB(e){Vi.logging.logWarn("SCIM request log",e)}a(jB,"logRequest");async function QB(e){Vi.logging.logWarn("SCIM response error",e)}a(QB,"logResponse");var eu={};E(eu,{doInScimContext:()=>Hi,feature:()=>K,internalGroupOnly:()=>Ca,licenseAuth:()=>Zi,licensing:()=>BA,requireSCIM:()=>zi,scimGroupOnly:()=>xa,scimUserOnly:()=>_a});var wt=require("@budibase/backend-core");var Yn=require("@budibase/types");var $B=a((e={checkUsersLimit:!0})=>async(t,r)=>{if((e.licensingCheck?e.licensingCheck:()=>!!t.user)(t)){if(wt.env.SELF_HOSTED&&wt.env.DEFAULT_LICENSE)return t.user.license=wo,r();t.user.license=await Ve.cache.getCachedLicense(t,{populateLicense:e.populateLicense,populateFreeLicense:e.populateFreeLicense}),e.checkUsersLimit&&(wt.utils.isServingApp(t)||wt.utils.isServingBuilder(t)||wt.utils.isServingBuilderPreview(t)||wt.utils.isPublicApiRequest(t))&&await Je.usageLimitIsExceeded({name:Yn.StaticQuotaName.USERS,type:Yn.QuotaUsageType.STATIC,usageChange:0})}return r()},"licensing"),BA=$B;var K={};E(K,{requireFeature:()=>KB,requireFeatures:()=>VB});var KB=a(e=>async(t,r)=>{await An(e),await r()},"requireFeature"),VB=a((...e)=>async(t,r)=>{await gs(e),await r()},"requireFeatures");var Hn=require("@budibase/backend-core");var Hi=a(async(e,t)=>(Hn.env.DISABLE_SCIM_CALLS||await Bt.logRequest({...e.request.toJSON(),body:e.request.body}),await Hn.context.doInScimContext(async()=>{let r=await t();return await Bt.logResponse({...e.response.toJSON(),body:e.response.body}),r})),"doInScimContext");var zi=a(async(e,t)=>{await bs(),await t()},"requireSCIM");var MA=require("@budibase/backend-core");var _a=a(e=>Ji(MA.users.getById,e,!0),"scimUserOnly"),xa=a(e=>Ji(M.get,e,!0),"scimGroupOnly"),Ca=a(e=>Ji(M.get,e,!1),"internalGroupOnly");function Ji(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(Ji,"scimSyncChecks");var Oa=require("@budibase/backend-core");var Xi=require("dd-trace");async function Zi(e,t){await Xi.tracer.trace("licenseAuth",async r=>{let n=e.request.headers[Oa.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 ls(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"),Xi.tracer.setUser({id:"anonymous",tenantId:o.tenantId}),await Oa.context.doInSelfHostTenantUsingCloud(o.tenantId,async()=>{await Oa.context.doInLicenseContext(o,async()=>{await t()})})})}a(Zi,"default");var cu={};E(cu,{appBackups:()=>_b,auditLogs:()=>hb,environmentVariables:()=>ub,groups:()=>ZA,scim:()=>aI,users:()=>uI});var GA=require("@budibase/backend-core");async function FA(e){let t=e.request.body;if(t.name=t.name.trim(),delete t.roles,t._id){let n=await It(t._id);t.roles=n.roles,t.scimInfo=n.scimInfo}let r=await fr(t);e.body={_id:r.id,_rev:r.rev}}a(FA,"save");async function WA(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 _n(t,r)),n&&(s=await Cs(t,n)),e.body={added:o,removed:s}}a(WA,"updateGroupUsers");async function jA(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 Os(t,{appsToAdd:r,appsToRemove:n})}a(jA,"updateGroupApps");async function QA(e){e.body={data:await ba()}}a(QA,"fetch");async function $A(e){let{groupId:t,rev:r}=e.params;try{await xs(t,r),e.body={message:"Group deleted successfully"}}catch(n){e.throw(n.status,n)}}a($A,"destroy");async function KA(e){try{e.body=await It(e.params.groupId)}catch(t){e.throw(t.status,t)}}a(KA,"find");async function VA(e){let{pageSize:t=10,bookmark:r,emailSearch:n}=e.request.query,o=e.params.groupId,s={limit:t+1},i=await $a(o,{...s,emailSearch:n,bookmark:r}),u=n?i[t]?.email:i[t]?._id,p=!!u;e.body={users:i.slice(0,t),bookmark:u,hasNextPage:p}}a(VA,"searchUsers");async function YA(e){let{groupId:t,appId:r}=e.params;await Ls(t,r),e.body={message:"Group app builder access updated."}}a(YA,"addAppBuilder");async function HA(e){let{groupId:t,appId:r}=e.params;await Ps(t,r),e.body={message:"group app builder access removed."}}a(HA,"removeAppBuilder");async function zA(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 GA.csv.jsonFromCsvString(r,{allowSingleColumn:!0});(!n||n.length===0)&&e.throw(400,"CSV file is invalid");let s=Object.keys(n[0]).find(y=>/^(email|e-mail|email address|mail|e_mail)$/i.test(y.trim()));s||e.throw(400,"CSV file must contain an email column");let i=Array.from(new Set(n.map(y=>y[s]).filter(y=>y&&typeof y=="string"&&y.trim().length>0).map(y=>y.trim())));i.length===0&&e.throw(400,"No valid email addresses found in CSV");try{await It(t)}catch(y){if(y.status===404)e.throw(404,"Group not found");else throw y}let u=[],p=[],m=[],g=await Promise.all(i.map(y=>Oe.getUserByEmail(y)));for(let y of i){let h=g.find(S=>S?.email===y);h?(u.push({_id:h._id,email:h.email}),m.push(h._id)):p.push({email:y,reason:"User not found"})}m.length>0&&await _n(t,m),e.body={added:u,skipped:p}}a(zA,"bulkAddUsersFromCsv");var JA=U(require("@koa/router")),de=U(require("joi"));var Ee=require("@budibase/types"),Pe=require("@budibase/backend-core");var XA=new JA.default;function HB(){return Pe.auth.joiValidator.body(de.default.object({_id:de.default.string().optional(),_rev:de.default.string().optional(),color:de.default.string().required(),icon:de.default.string().required(),name:de.default.string().trim().required().max(50),role:de.default.string().optional(),users:de.default.array().optional(),apps:de.default.array().optional(),roles:de.default.object().optional(),createdAt:de.default.string().optional(),updatedAt:de.default.string().optional()}).required())}a(HB,"buildGroupSaveValidation");XA.post("/api/global/groups",Pe.auth.adminOnly,K.requireFeature(Ee.Feature.USER_GROUPS),HB(),FA).get("/api/global/groups",K.requireFeature(Ee.Feature.USER_GROUPS),QA).delete("/api/global/groups/:groupId/:rev",K.requireFeature(Ee.Feature.USER_GROUPS),Pe.auth.adminOnly,Ca("groupId"),$A).get("/api/global/groups/:groupId",K.requireFeature(Ee.Feature.USER_GROUPS),Pe.auth.builderOrAdmin,KA).get("/api/global/groups/:groupId/users",K.requireFeature(Ee.Feature.USER_GROUPS),Pe.auth.builderOrAdmin,VA).post("/api/global/groups/:groupId/users",Pe.auth.adminOnly,K.requireFeature(Ee.Feature.USER_GROUPS),Ca("groupId"),WA).post("/api/global/groups/:groupId/users/bulk",Pe.auth.adminOnly,K.requireFeature(Ee.Feature.USER_GROUPS),Ca("groupId"),Pe.auth.joiValidator.body(de.default.object({csvContent:de.default.string().required()}).required()),zA).post("/api/global/groups/:groupId/apps",Pe.auth.builderOrAdmin,K.requireFeature(Ee.Feature.USER_GROUPS),jA).post("/api/global/groups/:groupId/app/:appId/builder",Pe.auth.builderOrAdmin,K.requireFeatures(Ee.Feature.USER_GROUPS,Ee.Feature.APP_BUILDERS),YA).delete("/api/global/groups/:groupId/app/:appId/builder",Pe.auth.builderOrAdmin,K.requireFeatures(Ee.Feature.USER_GROUPS,Ee.Feature.APP_BUILDERS),HA);var ZA=XA;var ru=require("@budibase/backend-core"),tu=require("@budibase/types");async function eb(e){e.body={encryptionKeyAvailable:Xe.isEncryptionKeyAvailable()}}a(eb,"status");async function tb(e){e.body={variables:await Xe.fetch()}}a(tb,"fetch");async function rb(e){let{name:t,production:r,development:n}=e.request.body;await Xe.update(t,{production:r,development:n});let o=[tu.Environment.PRODUCTION];r!==n&&o.push(tu.Environment.DEVELOPMENT),await ru.events.environmentVariable.created(t,o),e.body={message:`Environment variable "${t}" created.`}}a(rb,"create");async function ab(e){let{production:t,development:r}=e.request.body,n=e.params.varName;await Xe.update(n,{production:t,development:r}),e.body={message:`Environment variable "${n}" updated.`}}a(ab,"update");async function nb(e){let t=e.params.varName;await Xe.remove(t),await ru.events.environmentVariable.deleted(t),e.body={message:`Environment variable "${t}" deleted.`}}a(nb,"destroy");var Mt=require("@budibase/backend-core"),sb=U(require("@koa/router")),La=U(require("joi"));var ib=new sb.default;function ob(){return Mt.auth.joiValidator.body(La.default.object({name:La.default.string().optional(),production:La.default.string().required(),development:La.default.string().required()}))}a(ob,"buildEnvVarUpdateValidator");ib.get("/api/env/variables/status",Mt.auth.builderOrAdmin,eb).get("/api/env/variables",Mt.auth.builderOrAdmin,tb).post("/api/env/variables",Mt.auth.builderOrAdmin,ob(),rb).patch("/api/env/variables/:varName",Mt.auth.builderOrAdmin,ob(),ab).delete("/api/env/variables/:varName",Mt.auth.builderOrAdmin,nb);var ub=ib;var au=require("@budibase/backend-core");async function cb(e){let t=e.request.body,r=await St.fetch(t);await au.events.auditLog.filtered(t),e.body=r}a(cb,"search");async function pb(e){let t=e.request.body,{stream:r}=St.download(t);await au.events.auditLog.downloaded(t),e.attachment(`audit-logs-${Date.now()}.log`),e.body=r}a(pb,"download");async function lb(e){e.body={events:St.definitions()}}a(lb,"definitions");var mb=require("@budibase/types"),Gt=require("@budibase/backend-core"),gb=U(require("@koa/router")),Ue=U(require("joi"));function fb(){return Gt.auth.joiValidator.body(Ue.default.object({userIds:Ue.default.array().items(Ue.default.string()).optional(),appIds:Ue.default.array().items(Ue.default.string()).optional(),events:Ue.default.array().items(Ue.default.string().valid(...Object.values(mb.Event))).optional(),startDate:Ue.default.string().optional().allow(""),endDate:Ue.default.string().optional().allow(""),fullSearch:Ue.default.string().optional().allow(""),bookmark:Ue.default.number()}))}a(fb,"buildAuditLogSearchValidator");var yb=new gb.default;yb.post("/api/global/auditlogs/search",Gt.auth.adminOnly,fb(),cb).get("/api/global/auditlogs/download",Gt.auth.adminOnly,Gt.middleware.querystringToBody,fb(),pb).get("/api/global/auditlogs/definitions",Gt.auth.adminOnly,lb);var hb=yb;var ut=require("@budibase/backend-core"),Jn=require("@budibase/types"),Rb=U(require("@koa/router")),Wt=U(require("joi"));var zn=require("@budibase/backend-core"),nu=require("@budibase/types");async function Ft(e,t){t||e.throw(400,"App ID missing"),await Ht.workspaceExists(t)||e.throw(400,`Provided app ID: ${t} - is invalid.`)}a(Ft,"checkAppID");async function Ab(e){let t=e.params.appId;await Ft(e,t);let{body:r}=e.request,n=e.user?._id,o=await we.triggerAppBackup(t,nu.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(Ab,"manualBackup");async function bb(e){let t=e.params.appId;await Ft(e,t);let r=e.params.backupId,n=e.request.body.name,o=await we.triggerAppRestore(t,r,n,e.user?._id);o||e.throw(500,"Unable to start restore."),await zn.events.backup.appBackupRestored(o.metadata),e.body={restoreId:o?.restoreId,message:"Restore triggered - process starting."}}a(bb,"importBackup");async function Ib(e){let t=e.params.appId;await Ft(e,t);let r=e.params.backupId;await we.deleteAppBackup(r),e.body={message:"Backup deleted successfully."}}a(Ib,"deleteBackup");async function Sb(e){let t=zn.context.getWorkspaceId();await Ft(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 we.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(Sb,"deleteBackups");async function wb(e){let t=e.params.appId;await Ft(e,t);let r=e.request.body;r?.trigger&&(r.trigger=r.trigger.toLowerCase(),Object.values(nu.BackupTrigger).includes(r.trigger)||e.throw(400,"Provided trigger is not a valid option.")),e.body=await we.fetchAppBackups(t,{paginate:!0,...r})}a(wb,"fetchBackups");async function Eb(e){let t=e.params.appId;await Ft(e,t);let r=e.params.backupId,n=e.request.body;e.body=await we.updateAppBackup(r,n.name)}a(Eb,"updateBackup");async function Tb(e){let t=e.params.appId;await Ft(e,t);let r=e.params.backupId,{metadata:n,stream:o}=await we.getBackupDownloadStream(r);e.attachment(`backup-${n.timestamp}.tar.gz`),e.body=o}a(Tb,"downloadBackup");var vb=new Rb.default;function ZB(){return ut.auth.joiValidator.body(Wt.default.object({trigger:Wt.default.string().valid(...Object.values(Jn.BackupTrigger)),type:Wt.default.string().valid(...Object.values(Jn.BackupType)),startDate:Wt.default.date(),endDate:Wt.default.date(),page:Wt.default.string()}))}a(ZB,"validateBackupSearch");vb.post("/api/apps/:appId/backups",ut.auth.builderOrAdmin,Ab).post("/api/apps/:appId/backups/search",ut.auth.builderOrAdmin,ZB(),wb).get("/api/apps/:appId/backups/:backupId/file",ut.auth.builderOrAdmin,Tb).patch("/api/apps/:appId/backups/:backupId",ut.auth.builderOrAdmin,Eb).delete("/api/apps/:appId/backups/:backupId",ut.auth.builderOrAdmin,Ib).delete("/api/apps/:appId/backups",ut.auth.builderOrAdmin,Sb).post("/api/apps/:appId/backups/:backupId/import",ut.auth.builderOrAdmin,bb);var _b=vb;var rI=U(require("@koa/router"));var Xn=require("scim-patch");var Cb=require("@budibase/backend-core");function xb(e,t){let r=e.request.query[t];if(r!==void 0)return+r}a(xb,"tryGetQueryAsNumber");var Ob=a(async e=>{let t=xb(e,"pageSize")??20,r=xb(e,"startIndex"),n;e.request.query.filter&&(n=H.user.userFilters(e.request.query.filter));let o=await he.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(H.user.toScimUserResponse),startIndex:(r||0)+1,itemsPerPage:t}},"get"),Lb=a(async e=>{let{id:t}=e.params;typeof t!="string"&&e.throw(404);let r=await he.find(t);e.body=H.user.toScimUserResponse(r)},"find"),Pb=a(async e=>{let t=H.user.fromScimUser(e.request.body);try{let r=await he.create(t);e.body=H.user.toScimUserResponse(r)}catch(r){throw r instanceof Cb.EmailUnavailableError&&e.throw(409,"Email already in use"),r}},"create");function eM(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(eM,"isDeactivation");var Ub=a(async e=>{let t=await he.find(e.params.id);t||e.throw(404);let r=H.user.toScimUserResponse(t),n=e.request.body;try{(0,Xn.patchBodyValidation)(n)}catch{}if(eM(n))return ou(e);let o;try{o=(0,Xn.scimPatch)(r,n.Operations)}catch{}o||e.throw(500);let s=H.user.fromScimUser(o);await he.update(s,{allowChangingEmail:!0}),e.body=H.user.toScimUserResponse(s)},"update"),ou=a(async e=>{let{id:t}=e.params;typeof t!="string"&&e.throw(404),await he.remove(t),e.status=204},"remove");var Yb=U(Vb()),Hb=require("@budibase/shared-core"),Zn=require("scim-patch");var eo=require("scim2-parse-filter");function zb(e,t){for(let r of t.split(","))delete e[r]}a(zb,"cleanResponse");var Jb=a(async e=>{let r=(await Q.fetch()).filter(s=>s.scimInfo?.isSync).map(H.group.toScimGroupResponse),{filter:n,excludedAttributes:o}=e.request.query;if(n){let s=(0,eo.filter)((0,eo.parse)(n));r=r.filter(s)}o&&r.forEach(s=>{zb(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"),Xb=a(async e=>{let t=H.group.fromScimGroup(e.request.body),r=await Ir.create(t);e.body=H.group.toScimGroupResponse(r)},"create"),Zb=a(async e=>{let{id:t}=e.params,r=await Q.get(t),n=H.group.toScimGroupResponse(r),{excludedAttributes:o}=e.request.query;o&&zb(n,o),e.body=n},"find"),eI=a(async e=>{let{id:t}=e.params,r=await Q.get(t);await Q.remove(t,r._rev),e.status=204},"remove"),tI=a(async e=>{let{id:t}=e.params,r=await Q.get(t),n=H.group.toScimGroupResponse(r),o=e.request.body;try{(0,Zn.patchBodyValidation)(o)}catch{e.throw(400)}let{true:s,false:i}=(0,Yb.default)(o.Operations,u=>u.path==="members");if(i?.length){let u=(0,Zn.scimPatch)(n,i);u||e.throw(500);let p={...H.group.fromScimGroup(u),_rev:r._rev};await Q.save(p)}if(s?.length){let u=[],p=[];for(let{op:m,value:g}of s)switch(m){case"add":case"Add":for(let y of g)u.push(await he.find(y.value));break;case"remove":case"Remove":for(let y of g)p.push(await he.find(y.value));break;case"replace":case"Replace":throw new Error("Replacing members is not allowed");default:Hb.utils.unreachable(m)}u.length&&await Q.addUsers(t,u.map(m=>m._id)),p.length&&await Q.removeUsers(t,p.map(m=>m._id))}e.body=H.group.toScimGroupResponse(await Q.get(t))},"update");var Pa=require("@budibase/types"),Te=new rI.default({prefix:"/api/global/scim/v2"});Te.use(zi);Te.use(Hi);Te.get("/users",Ob);Te.get("/users/:id",_a("id"),Lb);Te.post("/users",Pb);Te.patch("/users/:id",_a("id"),Ub);Te.delete("/users/:id",_a("id"),ou);Te.get("/groups",Jb);Te.post("/groups",K.requireFeature(Pa.Feature.USER_GROUPS),Xb);Te.get("/groups/:id",K.requireFeature(Pa.Feature.USER_GROUPS),xa("id"),Zb);Te.delete("/groups/:id",K.requireFeature(Pa.Feature.USER_GROUPS),xa("id"),eI);Te.patch("/groups/:id",K.requireFeature(Pa.Feature.USER_GROUPS),xa("id"),tI);var aI=Te;var sI=U(require("@koa/router"));var su=require("@budibase/backend-core");async function nI(e){let{userId:t,appId:r}=e.params,n=await ot.db.getUser(t);if(su.users.isGlobalBuilder(n)){e.body={message:"User already admin - no permissions updated."};return}await ot.addAppBuilder(n,r),e.body={message:`User "${n.email}" app builder access updated.`}}a(nI,"addAppBuilder");async function oI(e){let{userId:t,appId:r}=e.params,n=await ot.db.getUser(t);if(su.users.isGlobalBuilder(n)){e.body={message:"User already admin - no permissions removed."};return}await ot.removeAppBuilder(n,r),e.body={message:`User "${n.email}" app builder access removed.`}}a(oI,"removeAppBuilder");var iu=require("@budibase/types"),uu=require("@budibase/backend-core"),iI=new sI.default;iI.post("/api/global/users/:userId/app/:appId/builder",uu.auth.builderOrAdmin,K.requireFeatures(iu.Feature.APP_BUILDERS),nI).delete("/api/global/users/:userId/app/:appId/builder",uu.auth.builderOrAdmin,K.requireFeatures(iu.Feature.APP_BUILDERS),oI);var uI=iI;var H={};E(H,{group:()=>lu,user:()=>pu});var pu={};E(pu,{fromScimUser:()=>CM,toScimUserResponse:()=>vM,userFilters:()=>OM});var to=require("@budibase/types"),cI=require("scim2-parse-filter"),pI=require("@budibase/backend-core"),lI=require("@budibase/shared-core");var{unreachable:RM}=lI.utils,vM=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===to.UserStatus.ACTIVE};return(e.firstName||e.lastName)&&(o.name={formatted:[e.firstName,e.lastName].filter(s=>s).join(" "),familyName:e.lastName,givenName:e.firstName}),o},"toScimUserResponse"),_M=a(e=>!!e?.id,"isScimUserResponse");function xM(e){if(pI.utils.validEmail(e.userName))return e.userName;if(e.emails)return e.emails.find(t=>t.primary)?.value||e.emails[0]?.value}a(xM,"tryGetEmail");var CM=a(e=>{let t=_M(e)?e:void 0,r=xM(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:RM(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?to.UserStatus.ACTIVE:to.UserStatus.INACTIVE,createdAt:t?.meta.created.getTime(),updatedAt:t?.meta.lastModified.toISOString()}},"fromScimUser"),OM=a(e=>{let t={equal:{}},r=(0,cI.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 lu={};E(lu,{fromScimGroup:()=>UM,toScimGroupResponse:()=>LM});var LM=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"),PM=a(e=>!!e?.id,"isScimGroup"),UM=a(e=>{let t=PM(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 Du={};E(Du,{LLM:()=>Ze,LLMRequest:()=>V,TableGeneration:()=>qu,agentHistoryTitleSystemPrompt:()=>QM,agentSystemPrompt:()=>jM,aiColumnSchemas:()=>Pu,aiTableResponseToTableSchema:()=>xu,appendAIColumns:()=>Cu,classifyText:()=>mu,cleanData:()=>gu,extractFileData:()=>MM,generateAIColumns:()=>vu,generateCode:()=>WM,generateCronExpression:()=>yu,generateData:()=>_u,generateJs:()=>Iu,generateSQL:()=>FM,generateTables:()=>Ru,generationStructure:()=>Lu,getLLM:()=>Da,getLLMConfig:()=>Tu,getLLMOrThrow:()=>wI,normalizeContentType:()=>du,parseResponseFormat:()=>ao,sanitiseToolName:()=>qM,searchWeb:()=>bu,sentimentAnalysis:()=>Au,summarizeText:()=>ro,tableDataStructuredOutput:()=>Uu,translate:()=>hu});var Ua=require("@budibase/types");function qM(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(qM,"sanitiseToolName");function du(e){return e?e.includes("/")?e:{[Ua.SupportedFileType.PDF]:"application/pdf",[Ua.SupportedFileType.JPG]:"image/jpeg",[Ua.SupportedFileType.JPEG]:"image/jpeg",[Ua.SupportedFileType.PNG]:"image/png"}[e.toLowerCase()]||"application/octet-stream":"application/octet-stream"}a(du,"normalizeContentType");var uo=require("@budibase/types");var et=require("@budibase/backend-core"),AI=require("@budibase/types");var no=U(require("openai"));var Et=require("@budibase/types");var dI=require("@budibase/shared-core");var Tt=U(require("dd-trace"));function fu(e,t){return t.map(r=>e[r]).join(" ")}a(fu,"extractTextFromColumns");var Ze=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 Tt.default.trace("prompt",async()=>{let r=typeof t=="string"?new V().addUserMessage(t):t,{messages:n,tokensUsed:o}=await Tt.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 Tt.default.trace("chat",async()=>await this.chatCompletion(t))}async*chatStream(t){yield*this.chatCompletionStream(t)}async summarizeText(t){return Tt.default.trace("summarizeText",()=>this.prompt(ro(t)))}async generateCronExpression(t){return Tt.default.trace("generateCronExpression",()=>this.prompt(yu(t)))}async operation(t,r){return Tt.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:p}=t;switch(n){case Et.AIOperationEnum.SUMMARISE_TEXT:return ro(fu(r,s));case Et.AIOperationEnum.CLEAN_DATA:return gu(r[o]);case Et.AIOperationEnum.TRANSLATE:return hu(r[o],i);case Et.AIOperationEnum.CATEGORISE_TEXT:if(!u)throw Error("No categories provided for categorise text operation. Please provide categories.");return mu(fu(r,s),u.split(","));case Et.AIOperationEnum.SENTIMENT_ANALYSIS:return Au(r[o]);case Et.AIOperationEnum.PROMPT:return p;case Et.AIOperationEnum.SEARCH_WEB:return bu(fu(r,s));default:throw dI.utils.unreachable(n)}}async generateJs(t,r){return await Tt.default.trace("generateJs",async()=>{let{bindings:n=[],snippets:o=[]}=r||{};return await this.prompt(Iu(n,o).addUserMessage(t))})}};var mI=require("@budibase/types"),Su=require("openai/helpers/zod");var gI=(n=>(n.GPT_5_MINI="gpt-5-mini",n.GPT_5="gpt-5",n.GPT_5_NANO="gpt-5-nano",n))(gI||{});function ao(e){if(e)return e==="text"?{type:"text"}:e==="json"?{type:"json_object"}:e}a(ao,"parseResponseFormat");function fI(e){if(!e)return 0;let t=e.prompt_tokens;return e.completion_tokens*3+t}a(fI,"calculateBudibaseAICredits");var qe=class extends Ze{constructor(r){super(r);this.client=this.getClient(r)}static{a(this,"OpenAI")}getClient(r){if(!r.apiKey)throw new Error("No OpenAI API key found");return new no.default({apiKey:r.apiKey})}async uploadFile(r,n,o){let s=du(o);if(mI.ImageContentTypes.includes(s.toLowerCase())){let p;if(Buffer.isBuffer(r))p=r;else{let g=[];for await(let y of r)g.push(new Uint8Array(y));p=Buffer.concat(g)}let m=p.toString("base64");return`data:${s};base64,${m}`}let i=await(0,no.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)};Object.values(gI).includes(this.model)&&(n.verbosity="low",n.reasoning_effort="minimal"),r.tools&&r.tools.length>0&&(n.tool_choice="auto",n.tools=r.tools.map(Su.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 p=u.function.name,m=r.findTool(p);if(!m)throw new Error(`Tool ${p} not found in prompt tools`);let g=JSON.parse(u.function.arguments);i.push(m.handler(g).then(y=>({role:"tool",tool_call_id:u.id,content:y})).catch(y=>(console.error(`[OPENAI TOOL ERROR] Tool ${p} failed in OpenAI handler:`,y),{role:"tool",tool_call_id:u.id,content:`Error: ${y.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:fI(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(Su.zodFunction));try{let o=await this.client.chat.completions.create(n),s=null,i="",u=null;for await(let m of o){let g=m?.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 y=g.tool_calls[0];y.id?(s={id:y.id,name:y.function?.name||"",arguments:y.function?.arguments||""},yield{type:"tool_call_start",toolCall:{id:s.id,name:s.name,arguments:s.arguments}}):s&&y.function?.arguments&&(s.arguments+=y.function.arguments,yield{type:"tool_call_start",toolCall:{id:s.id,name:s.name,arguments:s.arguments}})}m.usage&&(u=m.usage)}}let p=u?fI(u):0;if(s){r.addMessage({role:"assistant",content:"",tool_calls:[{id:s.id,type:"function",function:{name:s.name,arguments:s.arguments}}]});let m=r.findTool(s.name);if(m)try{let g=JSON.parse(s.arguments),y=await m.handler(g);yield{type:"tool_call_result",toolResult:{id:s.id,result:y}},r.addMessage({role:"tool",tool_call_id:s.id,content:y}),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:p}}catch(o){yield{type:"error",content:o.message}}}};var te=require("@budibase/backend-core"),yI=require("@budibase/types");var wu=require("dd-trace");var oo=class extends Ze{static{a(this,"BudibaseAI")}async prompt(t){let r=await super.prompt(t);return r.tokensUsed&&await Rn(r.tokensUsed),r}async chat(t){let r=await super.chat(t);return r.tokensUsed&&await Rn(r.tokensUsed),r}async uploadFile(t,r,n){return te.env.SELF_HOSTED?this.uploadFileSelfHost(t,r,n):this.uploadFileCloud(t,r,n)}async uploadFileCloud(t,r,n){return new qe({apiKey:te.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 p=[];for await(let m of t)p.push(new Uint8Array(m));o=Buffer.concat(p)}let s=o.toString("base64");if(n&&yI.ImageContentTypes.includes(n.toLowerCase()))return`data:image/jpeg;base64,${s}`;if(!te.env.BUDICLOUD_URL)throw new Error("No Budibase URL found");if(!this._apiKey){let p=await yn();if(!p)throw new Error("No license key found");this._apiKey=p}let i=await fetch(`${te.env.BUDICLOUD_URL}/api/ai/upload-file`,{method:"POST",headers:{"Content-Type":"application/json",[te.constants.Header.LICENSE_KEY]:this._apiKey},body:JSON.stringify({data:s,filename:r,contentType:n})});if(!i.ok)throw await te.HTTPError.fromResponse(i);return(await i.json()).fileId}async chatCompletion(t){return te.env.SELF_HOSTED?this.chatCompletionSelfHost(t):this.chatCompletionCloud(t)}async chatCompletionCloud(t){return await wu.tracer.trace("chatCompletionCloud",async()=>await new qe({apiKey:te.env.OPENAI_API_KEY,model:this.model,max_completion_tokens:this.maxTokens}).chatCompletion(t))}async chatCompletionSelfHost(t){return await wu.tracer.trace("chatCompletionSelfHost",async r=>{if(!te.env.BUDICLOUD_URL)throw new Error("No Budibase URL found");if(r.addTags({budicloudUrl:te.env.BUDICLOUD_URL}),!this._apiKey){let s=await yn();if(!s)throw new Error("No license key found");this._apiKey=s,r.addTags({licenseKey:this._apiKey})}let n={messages:t.messages,format:t.format,useTools:t.tools.length>0},o=await fetch(`${te.env.BUDICLOUD_URL}/api/ai/chat`,{method:"POST",headers:{"Content-Type":"application/json",[te.constants.Header.LICENSE_KEY]:this._apiKey},body:JSON.stringify(n)});if(!o.ok)throw await te.HTTPError.fromResponse(o);return await o.json()})}async*chatCompletionStream(t){te.env.SELF_HOSTED?yield*this.chatCompletionStreamSelfHost(t):yield*this.chatCompletionStreamCloud(t)}async*chatCompletionStreamCloud(t){yield*new qe({apiKey:te.env.OPENAI_API_KEY,model:this.model,max_completion_tokens:this.maxTokens}).chatCompletionStream(t)}async*chatCompletionStreamSelfHost(t){try{let r=await this.chatCompletionSelfHost(t);if(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){yield{type:"error",content:r.message}}}};var qa=require("dd-trace");var Eu=U(require("@anthropic-ai/sdk"));function DM(e){if(!e)return 0;let t=e.input_tokens;return e.output_tokens*3+t}a(DM,"calculateBudibaseAICredits");var so=class extends Ze{constructor(r){super(r);this.client=new Eu.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:DM(n.usage)}}catch(n){throw n instanceof Eu.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 bI=require("zod"),II=require("openai/helpers/zod");var hI=require("openai");var io=class extends qe{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 hI.AzureOpenAI({apiKey:t.apiKey,apiVersion:"2024-10-01-preview",baseURL:t.baseUrl})}};var SI="gpt-5-mini",kM={OpenAI:qe,TogetherAI:qe,AzureOpenAI:io,Custom:qe,Anthropic:so,BudibaseAI:oo};async function NM(){return await qa.tracer.trace("getAIConfig",async e=>{let t={type:AI.ConfigType.AI,config:{}};if(!et.context.isSelfHostUsingCloud()){let n=await et.configs.getAIConfig();n&&(t=n)}await Is(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||SI,apiKey:r.apiKey,baseUrl:r.baseUrl}})}a(NM,"getAIConfig");async function BM(){return qa.tracer.trace("getSelfHostOpenAIKeyConfig",e=>{if(!et.env.SELF_HOSTED){e.addTags({enabled:!1,reason:"not self host"});return}if(!et.env.OPENAI_API_KEY){e.addTags({enabled:!1,reason:"no OPENAI_API_KEY"});return}return e.addTags({enabled:!0}),{provider:"OpenAI",model:SI,apiKey:et.env.OPENAI_API_KEY}})}a(BM,"getSelfHostOpenAIKeyConfig");async function Tu(){return qa.tracer.trace("getLLMConfig",async()=>await NM()||await BM())}a(Tu,"getLLMConfig");async function Da(e){return await qa.tracer.trace("getLLM",async t=>{let{model:r,maxTokens:n}=e||{},o=await Tu();if(!o){t.addTags({enabled:!1,reason:"no config found"});return}r&&(o.model=r),n&&(o.maxTokens=n);let s=kM[o.provider];if(!s){t.addTags({enabled:!1,reason:"no provider found",provider:o.provider});return}return new s(o)})}a(Da,"getLLM");async function wI(){let e=await Da();if(!e)throw new et.HTTPError("No available LLM configurations",500);return e}a(wI,"getLLMOrThrow");var V=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 bI.z.ZodType?this.format=(0,II.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 ct=require("zod");function ro(e,t){let r=`Summarize this text:
37
+ `;function Yr(e){return xo.default.verify(e,xS,{algorithms:["RS256"]})}a(Yr,"verifyLicenseToken");function CS(e,t){return xo.default.sign(t,e,{encoding:"utf-8",algorithm:"RS256"})}a(CS,"sign");var Xa={};E(Xa,{getFeatures:()=>Co});var l=require("@budibase/types");var OS={[l.PlanType.FREE]:[...be.SELF_FREE_LICENSE.features],[l.PlanType.PREMIUM]:void 0,[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]},LS={[l.PlanType.FREE]:[...be.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 Co(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(OS);break;case l.Hosting.CLOUD:r=n(LS);break}return r}a(Co,"getFeatures");var Za={};E(Za,{UNLIMITED:()=>f,getQuotas:()=>Oo});var G=require("@budibase/types");var d=tt,vc=be,f=-1,Jr=a(e=>e*1e6,"millions"),PS={[G.PlanType.FREE]:{...vc.CLOUD_FREE_LICENSE.quotas},[G.PlanType.PREMIUM]:{usage:{monthly:{...d.queries(f),...d.automations(1e3),...d.budibaseAICredits(0),...d.actions(f)},static:{...d.rows(1e4),...d.apps(f),...d.users(f),...d.creators(f),...d.userGroups(0),...d.plugins(f),...d.customAIConfigurations(0)}},constant:{...d.automationLogRetentionDays(7),...d.appBackupRetentionDays(7)}},[G.PlanType.PREMIUM_PLUS]:{usage:{monthly:{...d.queries(f),...d.automations(5e3),...d.budibaseAICredits(Jr(2)),...d.actions(f)},static:{...d.rows(25e3),...d.apps(f),...d.users(f),...d.creators(f),...d.userGroups(0),...d.plugins(f),...d.customAIConfigurations(1)}},constant:{...d.automationLogRetentionDays(30),...d.appBackupRetentionDays(30)}},[G.PlanType.PREMIUM_PLUS_TRIAL]:{usage:{monthly:{...d.queries(f),...d.automations(5e3),...d.budibaseAICredits(Jr(2)),...d.actions(f)},static:{...d.rows(25e3),...d.apps(f),...d.users(f),...d.creators(f),...d.userGroups(0),...d.plugins(f),...d.customAIConfigurations(1)}},constant:{...d.automationLogRetentionDays(30),...d.appBackupRetentionDays(30)}},[G.PlanType.PRO]:{usage:{monthly:{...d.queries(f),...d.automations(1e3),...d.budibaseAICredits(0),...d.actions(f)},static:{...d.rows(f),...d.apps(f),...d.users(f),...d.creators(f),...d.userGroups(5),...d.plugins(f),...d.customAIConfigurations(0)}},constant:{...d.automationLogRetentionDays(7),...d.appBackupRetentionDays(7)}},[G.PlanType.TEAM]:{usage:{monthly:{...d.queries(f),...d.automations(5e3),...d.budibaseAICredits(0),...d.actions(f)},static:{...d.rows(f),...d.apps(f),...d.users(f),...d.creators(f),...d.userGroups(10),...d.plugins(f),...d.customAIConfigurations(0)}},constant:{...d.automationLogRetentionDays(30),...d.appBackupRetentionDays(90)}},[G.PlanType.BUSINESS]:{usage:{monthly:{...d.queries(f),...d.automations(1e4),...d.budibaseAICredits(0),...d.actions(f)},static:{...d.rows(5e4),...d.apps(f),...d.users(f),...d.creators(f),...d.userGroups(50),...d.plugins(f),...d.customAIConfigurations(0)}},constant:{...d.automationLogRetentionDays(365),...d.appBackupRetentionDays(365)}},[G.PlanType.ENTERPRISE_BASIC]:{usage:{monthly:{...d.queries(f),...d.automations(f),...d.budibaseAICredits(Jr(4)),...d.actions(f)},static:{...d.rows(f),...d.apps(f),...d.users(f),...d.creators(f),...d.userGroups(f),...d.plugins(f),...d.customAIConfigurations(f)}},constant:{...d.automationLogRetentionDays(f),...d.appBackupRetentionDays(f)}},[G.PlanType.ENTERPRISE_BASIC_TRIAL]:{usage:{monthly:{...d.queries(f),...d.automations(f),...d.budibaseAICredits(Jr(4)),...d.actions(f)},static:{...d.rows(f),...d.apps(f),...d.users(f),...d.creators(f),...d.userGroups(f),...d.plugins(f),...d.customAIConfigurations(f)}},constant:{...d.automationLogRetentionDays(15),...d.appBackupRetentionDays(15)}},[G.PlanType.ENTERPRISE]:{usage:{monthly:{...d.queries(f),...d.automations(f),...d.budibaseAICredits(Jr(4)),...d.actions(f)},static:{...d.rows(f),...d.apps(f),...d.users(f),...d.creators(f),...d.userGroups(f),...d.plugins(f),...d.customAIConfigurations(f)}},constant:{...d.automationLogRetentionDays(f),...d.appBackupRetentionDays(f)}}},US={[G.PlanType.FREE]:{...vc.SELF_FREE_LICENSE.quotas},[G.PlanType.PREMIUM]:void 0,[G.PlanType.PREMIUM_PLUS]:{usage:{monthly:{...d.queries(f),...d.automations(f),...d.budibaseAICredits(0),...d.actions(f)},static:{...d.rows(f),...d.apps(f),...d.users(f),...d.creators(f),...d.userGroups(0),...d.plugins(f),...d.customAIConfigurations(1)}},constant:{...d.automationLogRetentionDays(30),...d.appBackupRetentionDays(30)}},[G.PlanType.PREMIUM_PLUS_TRIAL]:{usage:{monthly:{...d.queries(f),...d.automations(f),...d.budibaseAICredits(0),...d.actions(f)},static:{...d.rows(f),...d.apps(f),...d.users(f),...d.creators(f),...d.userGroups(0),...d.plugins(f),...d.customAIConfigurations(1)}},constant:{...d.automationLogRetentionDays(30),...d.appBackupRetentionDays(30)}},[G.PlanType.PRO]:{usage:{monthly:{...d.queries(f),...d.automations(f),...d.budibaseAICredits(0),...d.actions(f)},static:{...d.rows(f),...d.apps(f),...d.users(f),...d.creators(f),...d.userGroups(5),...d.plugins(f),...d.customAIConfigurations(0)}},constant:{...d.automationLogRetentionDays(7),...d.appBackupRetentionDays(7)}},[G.PlanType.TEAM]:{usage:{monthly:{...d.queries(f),...d.automations(f),...d.budibaseAICredits(0),...d.actions(f)},static:{...d.rows(f),...d.apps(f),...d.users(f),...d.creators(f),...d.userGroups(10),...d.plugins(f),...d.customAIConfigurations(0)}},constant:{...d.automationLogRetentionDays(30),...d.appBackupRetentionDays(90)}},[G.PlanType.BUSINESS]:{usage:{monthly:{...d.queries(f),...d.automations(f),...d.budibaseAICredits(0),...d.actions(f)},static:{...d.rows(f),...d.apps(f),...d.users(f),...d.creators(f),...d.userGroups(50),...d.plugins(f),...d.customAIConfigurations(0)}},constant:{...d.automationLogRetentionDays(90),...d.appBackupRetentionDays(365)}},[G.PlanType.ENTERPRISE_BASIC]:{usage:{monthly:{...d.queries(f),...d.automations(f),...d.budibaseAICredits(0),...d.actions(f)},static:{...d.rows(f),...d.apps(f),...d.users(f),...d.creators(f),...d.userGroups(f),...d.plugins(f),...d.customAIConfigurations(f)}},constant:{...d.automationLogRetentionDays(f),...d.appBackupRetentionDays(f)}},[G.PlanType.ENTERPRISE_BASIC_TRIAL]:{usage:{monthly:{...d.queries(f),...d.automations(f),...d.budibaseAICredits(0),...d.actions(f)},static:{...d.rows(f),...d.apps(f),...d.users(f),...d.creators(f),...d.userGroups(f),...d.plugins(f),...d.customAIConfigurations(f)}},constant:{...d.automationLogRetentionDays(15),...d.appBackupRetentionDays(15)}},[G.PlanType.ENTERPRISE]:{usage:{monthly:{...d.queries(f),...d.automations(f),...d.budibaseAICredits(0),...d.actions(f)},static:{...d.rows(f),...d.apps(f),...d.users(f),...d.creators(f),...d.userGroups(f),...d.plugins(f),...d.customAIConfigurations(f)}},constant:{...d.automationLogRetentionDays(f),...d.appBackupRetentionDays(f)}}};function Oo(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 G.Hosting.SELF:r=n(US);break;case G.Hosting.CLOUD:r=n(PS);break}return JSON.parse(JSON.stringify(r))}a(Oo,"getQuotas");var Yt={};E(Yt,{encoding:()=>Ht,workspaceExists:()=>qS});var _c=require("@budibase/backend-core");async function qS(e){return(await _c.db.getAllWorkspaces({all:!0,idsOnly:!0})).includes(e)}a(qS,"workspaceExists");var Ht={};E(Ht,{base64ToObject:()=>DS,objectToBase64:()=>kS});function kS(e){let t=JSON.stringify(e);return Buffer.from(t).toString("base64")}a(kS,"objectToBase64");function DS(e){let t=Buffer.from(e,"base64").toString();return JSON.parse(t)}a(DS,"base64ToObject");var lf=require("@budibase/types"),ur=require("@budibase/backend-core"),df=U(jl()),ff=U(ns());async function lx(e){await _e.save({offlineLicenseToken:e}),await Ot()}a(lx,"activateOfflineLicenseToken");async function dx(){await _e.save({offlineLicenseToken:void 0}),await Ot()}a(dx,"deleteOfflineLicenseToken");async function mf(){return(await _e.get()).offlineLicenseToken}a(mf,"getOfflineLicenseToken");async function os(){let t=(await ur.installation.getInstall()).installId,r=ur.context.getTenantId(),n=await ur.events.identification.getUniqueTenantId(r);return{installId:t,tenantId:n}}a(os,"getIdentifier");async function fx(){let e=await os();return Ht.objectToBase64(e)}a(fx,"getIdentifierBase64");function mx(e){return Ht.base64ToObject(e)}a(mx,"getIdentifierFromBase64");function gf(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(gf,"verifyExpiry");async function hf(e){let t=await os();if(e.identifier.installId!==t.installId||e.identifier.tenantId!==t.tenantId)throw new Error("Invalid offline license")}a(hf,"verifyInstallation");function yf(e){let t=e.plan.type,r=lf.Hosting.SELF,n=Co(r,t),o=Oo(r,t);return e.features=(0,df.default)(e.features,n),e.quotas=(0,ff.default)(e.quotas,o),e}a(yf,"enrichLicense");async function ss(){try{let e=await mf();if(e){let t=await Yr(e);return gf(t),await hf(t),yf(t)}}catch(e){console.error("Error retrieving offline license",e)}}a(ss,"getOfflineLicense");var ha={};E(ha,{deleteDevLicense:()=>bx,getOfflineLicense:()=>yx,writeDevLicenseToDisk:()=>Ax});var Af=require("@budibase/backend-core"),us=require("path"),bf=require("os"),Lt=U(require("fs"));var gx=Af.env.isTest()?".budibase-test":".budibase",is=(0,us.join)((0,bf.tmpdir)(),gx),hx="dev_license.txt",ga=(0,us.join)(is,hx);if(!Lt.default.existsSync(is))try{Lt.default.mkdirSync(is)}catch{}function yx(){try{if(Lt.default.existsSync(ga)){let e=Lt.default.readFileSync(ga,{encoding:"utf-8"});return Yr(e)}}catch(e){console.error("Error retrieving offline license from disk",e)}}a(yx,"getOfflineLicense");function Ax(e){console.log(`Writing license to: ${ga}`),Lt.default.writeFileSync(ga,e,{encoding:"utf-8"})}a(Ax,"writeDevLicenseToDisk");function bx(){Lt.default.rmSync(ga,{force:!0})}a(bx,"deleteDevLicense");var If=require("dd-trace");var ps=a(async()=>await If.tracer.trace("getLicense",async e=>{if(cs.env.OFFLINE_MODE)return e.addTags({offline:!0}),ss();let t=await Vt();return t||(e.addTags({offlineFallback:!0}),t=ha.getOfflineLicense()),t}),"getLicense"),ls=a(e=>vo(e),"getLicenseFromKey"),ds=a(()=>cs.env.SELF_HOSTED?be.SELF_FREE_LICENSE:be.CLOUD_FREE_LICENSE,"getFreeLicense");var ms={};E(ms,{activateLicenseKey:()=>Ix,deleteLicenseKey:()=>Sx,getLicenseKey:()=>hn});var fs=U(require("dd-trace"));async function Ix(e){await _o(e),await _e.save({licenseKey:e}),await Ot()}a(Ix,"activateLicenseKey");async function hn(){return await fs.default.trace("getLicenseKey",async e=>{let t=await _e.get();return e.addTags({licenseKey:t.licenseKey}),t.licenseKey})}a(hn,"getLicenseKey");async function Sx(){return await fs.default.trace("deleteLicenseKey",async()=>{await _e.save({licenseKey:void 0}),await Ot()})}a(Sx,"deleteLicenseKey");var Pt=require("@budibase/backend-core"),yn=U(require("dd-trace"));var Sf=3600,Ot=a(async()=>{await Tf(),await Ef()},"refresh"),wf=a(async(e,t)=>{let{populateLicense:r=ps,populateFreeLicense:n=ds}=t||{};return await yn.default.trace("getCachedLicense",async o=>{let s=Pt.context.getLicense();if(s)return o.addTags({foundInContext:!0,features:s.features,plan:s.plan,quotas:s.quotas}),s;let i=Pt.tenancy.getTenantId(),u=await po(),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 yn.default.trace("populateLicense",async()=>await r(i)),o.addTags({populatedLicense:!!c}),c||(c=yn.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:Sf}),await u.store(i,c,Sf),c)})},"_getCachedLicense");Pt.env.isJest()&&(wf=jest.fn());var Ef=wf,Tf=a(async()=>{let e=Pt.tenancy.getTenantId();await(await po()).delete(e)},"invalidate");async function ae(e,t){Array.isArray(e)||(e=[e]),t||(t=await Be.getCachedLicense());for(let r of e)if(!t?.features.includes(r))return!1;return!0}a(ae,"areFeaturesEnabled");async function An(e,t){if(!await ae(e,t))throw new rt.FeatureDisabledError(`${e} is not currently enabled`,e)}a(An,"checkFeature");async function gs(e,t){if(!await ae(e,t)){let r=e.join(", ");throw new rt.FeatureDisabledError(`${r} are not currently enabled`,r)}}a(gs,"checkFeatures");function le(e){return async(...t)=>(await An(re.Feature.WORKSPACE_BACKUPS),e(...t))}a(le,"checkBackups");async function hs(){return ae(re.Feature.WORKSPACE_BACKUPS)}a(hs,"isBackupsEnabled");async function ys(){return ae(re.Feature.BRANDING)}a(ys,"isBrandingEnabled");async function Rf(){return ae(re.Feature.ENFORCEABLE_SSO)}a(Rf,"isEnforceableSSO");async function Ex(){return ae(re.Feature.SYNC_AUTOMATIONS)}a(Ex,"isSyncAutomationsEnabled");async function Tx(){return ae(re.Feature.TRIGGER_AUTOMATION_RUN)}a(Tx,"isTriggerAutomationRunEnabled");async function Ut(){return ae(re.Feature.APP_BUILDERS)}a(Ut,"isAppBuildersEnabled");async function bn(){return ae(re.Feature.AUDIT_LOGS)}a(bn,"isAuditLogsEnabled");async function As(){return ae(re.Feature.USER_GROUPS)}a(As,"isUserGroupsEnabled");function Rx(){return ae(re.Feature.PWA)}a(Rx,"isPWAEnabled");function vx(){return ae(re.Feature.RECAPTCHA)}a(vx,"isRecaptchaEnabled");var _x=a(()=>ae(re.Feature.PKCE_OIDC),"isPkceOidcEnabled");async function at(){return ae(re.Feature.EXPANDED_PUBLIC_API)}a(at,"isExpandedPublicApiEnabled");async function xx(e){if(rt.env.ENABLE_SSO_MAINTENANCE_MODE||!await Rf())return!1;let r;return e?.config?r=e.config:r=await rt.configs.getSettingsConfig(),!!r.isSSOEnforced}a(xx,"isSSOEnforced");var bs=a(async()=>{let e=re.Feature.SCIM,t=await ae(e),r=await rt.configs.getSCIMConfig();if(!t||!r?.enabled)throw new rt.FeatureDisabledError(`${e} is not currently enabled`,e);return!0},"checkSCIM");async function Cx(){return ae(re.Feature.VIEW_PERMISSIONS)}a(Cx,"isViewPermissionEnabled");async function Ox(){return ae(re.Feature.VIEW_READONLY_COLUMNS)}a(Ox,"isViewReadonlyColumnsEnabled");var Lx={faviconUrl:void 0,faviconUrlEtag:void 0,emailBrandingEnabled:!0,testimonialsEnabled:!0,platformTitle:void 0,loginHeading:void 0,loginButton:void 0,metaDescription:void 0,metaImageUrl:void 0,metaTitle:void 0};async function Px(e){return await ys()?{faviconUrl:e.faviconUrl,faviconUrlEtag:e.faviconUrlEtag,emailBrandingEnabled:e.emailBrandingEnabled,testimonialsEnabled:e.testimonialsEnabled,platformTitle:e.platformTitle,loginHeading:e.loginHeading,loginButton:e.loginButton,metaDescription:e.metaDescription,metaImageUrl:e.metaImageUrl,metaTitle:e.metaTitle}:Lx}a(Px,"getBrandingConfig");var Ss={};E(Ss,{enrichAIConfig:()=>Is});var vf=require("@budibase/backend-core");var Ux="budibase_ai";async function Is(e){if(vf.env.SELF_HOSTED)return e;for(let t of Object.values(e.config))if(t.provider==="BudibaseAI")return e;return e.config[Ux]={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(Is,"enrichAIConfig");var Je={};E(Je,{addAction:()=>Nx,addApp:()=>Mx,addAutomation:()=>$x,addGroup:()=>Es,addPlugin:()=>Rs,addRow:()=>Fx,addRows:()=>jx,addUsers:()=>En,bustCache:()=>yo,decrement:()=>nt,decrementMany:()=>ya,getCurrentUsageValues:()=>ec,getLicensedQuota:()=>xf,getQuotaUsage:()=>Rt,increment:()=>Se,incrementBudibaseAICredits:()=>Rn,incrementMany:()=>kt,removeApp:()=>Gx,removeGroup:()=>Ts,removePlugin:()=>vs,removeRow:()=>Wx,removeRows:()=>Qx,removeUsers:()=>dr,set:()=>ws,setAllUsage:()=>bo,setAppUsageValue:()=>Ao,setUsage:()=>Ju,setUsagePerApp:()=>Xu,updatePluginCount:()=>_s,updateUsage:()=>cr,usageLimitIsExceeded:()=>Bx,utils:()=>Cr});var Sn=require("@budibase/types");var Ge=require("@budibase/backend-core"),J=require("@budibase/types"),qt=require("dd-trace");var Se=a(async(e,t,r)=>await qt.tracer.trace("quotas.increment",async n=>(n.addTags({name:e,type:t}),await _f({change:1,name:e,type:t,opts:r}))),"increment"),kt=a(e=>qt.tracer.trace("quotas.incrementMany",async()=>_f(e)),"incrementMany"),_f=a(async e=>await qt.tracer.trace("quotas.tryIncrement",async t=>{let r=Array.isArray(e)?e:[e];t.addTags({numActions:r.length}),await cr(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 qt.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 cr(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"),nt=a((e,t,r={})=>cr({usageChange:-1,name:e,type:t,opts:r}),"decrement"),ya=a(e=>{let t=Array.isArray(e)?e:[e];return cr(t.map(r=>({usageChange:-r.change,name:r.name,type:r.type,opts:r.opts})))},"decrementMany"),ws=a(async(e,t,r)=>$e.setUsage(r,e,t),"set"),qx=a((e,t,r)=>{if(e==J.QuotaUsageType.STATIC){let n=r.usageQuota.triggers;return n?n[t]||{}:{}}else{let n=$e.utils.getCurrentMonthString(),o=r.monthly[n].triggers;return o?o[t]||{}:{}}},"getExistingTriggers"),kx=a(async(e,t,r,n)=>{try{await Ge.locks.doWithLock({type:J.LockType.TRY_ONCE,name:J.LockName.TRIGGER_QUOTA,resource:e,ttl:1e4},async()=>{let o={percentage:r,name:t.name};n&&(o.resetDate=n),await gt.triggerQuota(o)})}catch(o){Ge.logging.logAlert("Error triggering quota",o)}},"triggerQuota"),Dx=a(async(e,t,r,n)=>{let o=await Rt(),s=e===J.QuotaUsageType.MONTHLY?o.quotaReset:void 0,i=await qx(e,t,o),u=n.triggers,c=r/n.value*100;c>100&&(c=100);for(let[m,g]of u.entries())if(c>=g&&n.value!==tt.UNLIMITED){if(!i[g]){i[g]=new Date().toISOString();let y=u[m+1]||100;(!(c>=y)||c===g)&&await kx(t,n,c,s)}}else i[g]=void 0;return i},"checkTriggers"),cr=a(async e=>{await qt.tracer.trace("quotas.updateUsage",async t=>{let r=Ge.tenancy.getTenantId(),n=Array.isArray(e)?e:[e];t.addTags({numActions:n.length,tenantId:r});let o,s,i=[],u={},c={},m={},g={};for(let y of n)await qt.tracer.trace("quotas.updateUsage.action",async S=>{S.addTags({actionName:y.name,actionType:y.type,actionUsageChange:y.usageChange});try{o=Ge.context.getWorkspaceId()}catch{}if(J.APP_QUOTA_NAMES.includes(y.name)&&!o)throw new Error("App context required for quota update");try{s=await xf(J.QuotaType.USAGE,y.name,y.type),i.push(s);let{total:x,app:_,breakdown:v}=await $e.getCurrentUsageValues(y.type,y.name,y.opts?.id);x+=y.usageChange,_!=null&&(_+=y.usageChange),v!=null&&(v+=y.usageChange);let q={};if(y.opts?.dryRun||(q=await Dx(y.type,y.name,x,s),g={...g,[y.name]:q}),s.value!==tt.UNLIMITED&&x>s.value&&y.usageChange>0)throw new Ge.UsageLimitError(`Licensed ${s.name} of ${s.value} has been exceeded`,s.name);if(x=Math.max(0,x),_&&(_=Math.max(0,_)),v&&(v=Math.max(0,v),m={...m,[y.name]:v}),!y.opts?.dryRun){let ke=y.opts?.valueFn;ke&&(x=await ke(),_=x),u={...u,[y.name]:x},c={...c,[y.name]:_}}}catch(x){throw y.opts?.suppressErrorLog||console.error(`Error updating usage quotas for ${y.name}`,x),x}});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:m[y.name],triggers:g[y.name]},opts:{...y.opts,tenantId:r}}));h.length>0&&await $e.setAllUsage(h)})},"updateUsage"),xf=a(async(e,t,r)=>{let n=await Be.getCachedLicense();if(!n){let o=Ge.tenancy.getTenantId();throw new Error("License not found for tenant id "+o)}if(r&&(0,J.isStaticQuota)(e,r,t))return n.quotas[e][r][t];if(r&&(0,J.isMonthlyQuota)(e,r,t))return n.quotas[e][r][t];if((0,J.isConstantQuota)(e,t))return n.quotas[e][t];throw new Error("Invalid quota type")},"getLicensedQuota"),Bx=a(async({name:e,type:t,usageChange:r})=>{try{return await cr({usageChange:r,name:e,type:t,opts:{dryRun:!0}}),!1}catch(n){if(n.code===J.ErrorCode.USAGE_LIMIT_EXCEEDED)return!0;throw n}},"usageLimitIsExceeded");var Nx=a(async e=>Se(Sn.MonthlyQuotaName.ACTIONS,Sn.QuotaUsageType.MONTHLY,{fn:e}),"addAction");var Cf=require("@budibase/backend-core"),pr=require("@budibase/types");var Of=a(async()=>{let e=await Cf.db.getAllWorkspaces({dev:!0});return e?e.length:0},"getDevAppsCount"),Mx=a(async(e,{appId:t}={})=>Se(pr.StaticQuotaName.WORKSPACES,pr.QuotaUsageType.STATIC,{fn:e,valueFn:Of,id:t}),"addApp"),Gx=a(async({appId:e}={})=>nt(pr.StaticQuotaName.WORKSPACES,pr.QuotaUsageType.STATIC,{valueFn:Of,id:e}),"removeApp");var Ye=require("@budibase/types");var Fx=a(async(e,{tableId:t}={})=>Se(Ye.StaticQuotaName.ROWS,Ye.QuotaUsageType.STATIC,{fn:e,id:t}),"addRow"),Wx=a(async({tableId:e}={})=>nt(Ye.StaticQuotaName.ROWS,Ye.QuotaUsageType.STATIC,{id:e}),"removeRow"),jx=a(async(e,t,{tableId:r}={})=>kt({change:e,name:Ye.StaticQuotaName.ROWS,type:Ye.QuotaUsageType.STATIC,opts:{fn:t,id:r}}),"addRows"),Qx=a(async(e,{tableId:t}={})=>ya({change:e,name:Ye.StaticQuotaName.ROWS,type:Ye.QuotaUsageType.STATIC,opts:{id:t}}),"removeRows");var wn=require("@budibase/types");var $x=a(async(e,{automationId:t}={})=>Se(wn.MonthlyQuotaName.AUTOMATIONS,wn.QuotaUsageType.MONTHLY,{fn:e,id:t}),"addAutomation");var lr=require("@budibase/types");var Es=a(async e=>Se(lr.StaticQuotaName.USER_GROUPS,lr.QuotaUsageType.STATIC,{fn:e}),"addGroup"),Ts=a(async()=>nt(lr.StaticQuotaName.USER_GROUPS,lr.QuotaUsageType.STATIC),"removeGroup");var bt=require("@budibase/types");var Rs=a(async e=>Se(bt.StaticQuotaName.PLUGINS,bt.QuotaUsageType.STATIC,{fn:e}),"addPlugin"),vs=a(async()=>nt(bt.StaticQuotaName.PLUGINS,bt.QuotaUsageType.STATIC),"removePlugin"),_s=a(async e=>ws(bt.StaticQuotaName.PLUGINS,bt.QuotaUsageType.STATIC,e),"updatePluginCount");var ze=require("@budibase/types"),Aa=require("@budibase/backend-core");var En=a(async(e,t,r)=>{let n=[{change:e,name:ze.StaticQuotaName.USERS,type:ze.QuotaUsageType.STATIC,opts:{fn:r,valueFn:Aa.users.getUserCount}}];t>0&&n.push({change:t,name:ze.StaticQuotaName.CREATORS,type:ze.QuotaUsageType.STATIC,opts:{valueFn:Aa.users.getCreatorCount}});let o=await kt(n);return await Vt(),o},"addUsers"),dr=a(async(e,t)=>{let r=[{change:e,name:ze.StaticQuotaName.USERS,type:ze.QuotaUsageType.STATIC,opts:{valueFn:Aa.users.getUserCount}}];t>0&&r.push({change:t,name:ze.StaticQuotaName.CREATORS,type:ze.QuotaUsageType.STATIC,opts:{valueFn:Aa.users.getCreatorCount}}),await ya(r),await Vt()},"removeUsers");var Tn=require("@budibase/types");var Rn=a(async e=>kt({change:e,name:Tn.MonthlyQuotaName.BUDIBASE_AI_CREDITS,type:Tn.QuotaUsageType.MONTHLY}),"incrementBudibaseAICredits");var ot={};E(ot,{addAppBuilder:()=>zx,db:()=>Oe,removeAppBuilder:()=>Jx});var Ia=require("@budibase/backend-core");var Q={};E(Q,{addAppBuilder:()=>Ls,addUsers:()=>_n,adjustGroupCreatorsQuotas:()=>Yx,cleanupApp:()=>Hx,enrichUserRolesFromGroups:()=>Vx,fetch:()=>ba,get:()=>It,getBulk:()=>Bf,getGroupBuilderAppIds:()=>Df,getGroupRoleId:()=>Kx,remove:()=>xs,removeAppBuilder:()=>Ps,removeUsers:()=>Cs,save:()=>fr,updateGroupApps:()=>Os});var C=require("@budibase/backend-core");var Lf=require("@budibase/backend-core");var vn=class extends Lf.HTTPError{static{a(this,"GroupNameUnavailableError")}constructor(t){super(`Group name "${t}" is unavailable`,409)}};async function qf(e,t){try{let r=[];for(let u of e)if(u.roles){let c=u.roles[C.db.getProdWorkspaceID(t)];c&&r.push(c)}let n=await Promise.all(r.map(async u=>({[u]:await C.roles.roleToNumber(u)}))),o,s,i={};n.forEach(u=>{let[c,m]=Object.entries(u)[0];i[c]={roleId:c,roleNum:m}});for(let{roleId:u,roleNum:c}of Object.values(i))(s===void 0||c>s)&&(s=c,o=u);return o}catch(r){throw C.logging.logAlert(`Error finding higest role for ${e.length} on app ${t}`,r),r}}a(qf,"findHighestRole");async function kf(e,t){return t?t=t.filter(r=>e.includes(r._id)):t=await M.getBulk(e,{enriched:!1}),t}a(kf,"groupList");async function Df(e,t){if(!e.userGroups)return[];let r=await kf(e.userGroups,t?.groups),n=t?.appId?C.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(Df,"getGroupBuilderAppIds");async function Kx(e,t,r){if(!e.userGroups)return null;let n=await kf(e.userGroups,r?.groups),o=C.db.getProdWorkspaceID(t);return e.roles?.[o]?e.roles[o]:(n=n.filter(s=>s?.roles?Object.keys(s.roles).includes(o):!1),await qf(n,t))}a(Kx,"getGroupRoleId");async function Vx(e){if(!e||!e.userGroups)return e;let t=await Bf(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 C.context.doInWorkspaceContext(o,async()=>{if(e.roles[o])return;let s=await qf(t,o);s&&(e.roles[o]=s)});let n=await Df(e,{groups:t});if(n.length&&!e.builder?.global){let o=e.builder?.apps||[];e.builder={apps:o.concat(n)}}return e}a(Vx,"enrichUserRolesFromGroups");async function ba(){return await M.fetch()}a(ba,"fetch");async function It(e){return await M.get(e)}a(It,"get");async function Bf(e,t={enriched:!0}){return await M.getBulk(e,t)}a(Bf,"getBulk");async function Pf(e){if(await M.getByName(e))throw new vn(e)}a(Pf,"guardNameAvailability");async function Uf(e){let t=await M.getGroupUsers(e._id);if(!t.length)return 0;let n=await C.tenancy.getGlobalDB().getMultiple(t.map(s=>s._id));return(await C.userUtils.creatorsInList(n)).filter(s=>s).length}a(Uf,"getCreatorsCountInGroup");async function fr(e){let t=[],r=!e._id,n=0;if(delete e.users,!e._id)e._id=M.generateUserGroupID(),await Pf(e.name),t.push(C.events.group.created(e));else{let s=await M.get(e._id);if(s.name!==e.name&&await Pf(e.name),t.push(C.events.group.updated(e)),JSON.stringify(s.roles)!==JSON.stringify(e.roles)){let i=s.users?.length||0,u=0;i>0&&(u=await Uf(s)),Object.values(e.roles).includes("CREATOR")?n=i-u:n=-i,t.push(C.events.group.permissionsEdited(e))}}await Promise.all(t);let o=a(()=>M.save(e),"saveGroup");if(r)return await Es(o);{let s=await o();if(n>0)await En(0,n);else if(n<0){let i=await Uf(e),u=Math.abs(n)-i;u>0&&await dr(0,u)}return s}}a(fr,"save");async function xs(e,t){let r;try{r=await M.get(e)}catch{throw new Error("Group not found")}let n=Object.values(r.roles||{}).includes("CREATOR"),o=a(()=>{},"recalculateCreatorsQuotasFn");if(n){let i=C.tenancy.getGlobalDB(),u=await M.getGroupUsers(e),m=(await Promise.all(u.map(S=>i.get(S._id)))).map(S=>({...S,userGroups:S.userGroups.filter(O=>O!==e)})),h=(await C.userUtils.creatorsInList(m)).filter(S=>S).length,y=u.length-h;y&&(o=a(()=>dr(0,y),"recalculateCreatorsQuotasFn"))}let s=await M.destroy(e,t);return await C.events.group.deleted(r),await Ts(),await o(),s}a(xs,"remove");async function _n(e,t){let r=await M.get(e),n=await C.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 C.users.bulkUpdateGlobalUsers(s),Object.values(r.roles||{}).includes("CREATOR")){let m=(await C.userUtils.creatorsInList(o)).filter(h=>h).length,g=o.length-m;g&&await En(0,g)}let u=[];for(let c of t)u.push(C.cache.user.invalidateUser(c));return await Promise.all(u),await C.events.group.usersAdded(s.length,r),s}a(_n,"addUsers");async function Cs(e,t){let r=await M.get(e),n=await C.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 C.users.bulkUpdateGlobalUsers(o),Object.values(r.roles||{}).includes("CREATOR")){let c=(await C.userUtils.creatorsInList(o)).filter(g=>g).length,m=o.length-c;m&&await dr(0,m)}let i=[];for(let u of t)i.push(C.cache.user.invalidateUser(u));return await Promise.all(i),o.length&&await C.events.group.usersDeleted(o.length,r),o}a(Cs,"removeUsers");async function Os(e,t){let r=await It(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];return await fr(r)}a(Os,"updateGroupApps");async function Hx(e){let t=await ba(),r=[];for(let n of t)!n.roles||!n.roles[e]||(delete n.roles[e],r.push(n));return await M.bulkSave(r)}a(Hx,"cleanupApp");async function Ls(e,t){if(!await Ut())throw new Error("Feature not enabled, please check license");let r=C.db.getProdWorkspaceID(t),n=await It(e);n.builder??={apps:[]},n.builder.apps.includes(t)||(n.builder.apps.push(r),await fr(n))}a(Ls,"addAppBuilder");async function Ps(e,t){if(!await Ut())throw new Error("Feature not enabled, please check license");let r=C.db.getProdWorkspaceID(t),n=await It(e);n.builder?.apps.includes(t)&&(n.builder.apps=n.builder.apps.filter(o=>o!==r),await fr(n))}a(Ps,"removeAppBuilder");async function Yx(){if(!await As()){let e=C.tenancy.getGlobalDB(),r=(await ba()||[]).filter(n=>Object.values(n?.roles||{}).includes("CREATOR"));for(let n of r){let o=await M.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 C.userUtils.creatorsInList(i)).filter(g=>g).length,m=o.length-c;await M.save({...n,roles:{}}),m&&await dr(0,m)}}}a(Yx,"adjustGroupCreatorsQuotas");Ia.users.UserDB.init(Je,Q,Me);var Oe=Ia.users.UserDB;async function zx(e,t){if(!await Ut())throw new Error("Feature not enabled, please check license");await Ia.users.addAppBuilder(e,t)}a(zx,"addAppBuilder");async function Jx(e,t){if(!await Ut())throw new Error("Feature not enabled, please check license");await Ia.users.removeAppBuilder(e,t)}a(Jx,"removeAppBuilder");var On={};E(On,{logs:()=>Ms});var Ms={};E(Ms,{logSearch:()=>sC,oldestLogDate:()=>Qf,storeLog:()=>iC});var Cn=require("@budibase/backend-core"),jf=require("@budibase/types");var ee=require("@budibase/backend-core"),xn=require("@budibase/types");var Nf=require("@budibase/backend-core");async function Mf(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||Nf.logging.logWarn(`Failed to backoff: ${t}`,r),s}a(Mf,"backOff");var{SEPARATOR:st,UNICODE_MAX:Xx,DocumentType:Gf,AutomationViewMode:Us,ViewName:Zx,getQueryIndex:eC}=ee.db,tC=new Date(0).toISOString(),rC=100,qs=a(async()=>Va(xn.ConstantQuotaName.AUTOMATION_LOG_RETENTION_DAYS),"oldestLogDate");function Ff(e,t,{status:r,automationId:n}={},o={}){let s=n?`${n}${st}`:"",i=r?`${r}${st}`:"",u;return r&&n?u=`${Us.ALL}${st}${i}${s}`:r?u=`${Us.STATUS}${st}${i}`:n?u=`${Us.AUTOMATION}${st}${s}`:u=`${Gf.AUTOMATION_LOG}${st}`,{...o,descending:!0,startkey:`${u}${t}${Xx}`,endkey:`${u}${e}`}}a(Ff,"getAutomationLogParams");function aC(e,t,r){return`${Gf.AUTOMATION_LOG}${st}${e}${st}${r}${st}${t}`}a(aC,"generateAutomationLogID");async function ks(e,t,r={docs:!0}){let n=ee.context.getProdWorkspaceDB();await n.exists()||(n=ee.context.getDevWorkspaceDB());let o={status:r.status},s=r?.limit?r.limit:r?.paginate?9+1:void 0,i=Ff(e,t,o,{include_docs:r.docs,limit:s});r?.page&&(i.startkey=r.page);let u=await n.allDocs(i);return Vr(u,{paginate:r?.paginate,pageSize:9})}a(ks,"getAllLogs");async function Ds(e,t,r={}){let n=ee.context.getProdWorkspaceDB();await n.exists()||(n=ee.context.getDevWorkspaceDB());let o;try{let s={automationId:r?.automationId,status:r?.status},i=Ff(e,t,s,{include_docs:!0,limit:9+1});r?.page&&(i.startkey=r.page),o=await n.query(eC(Zx.AUTOMATION_LOGS),i)}catch(s){if(s!=null&&(s.name==="not_found"||s.error==="not_found"))return await gc(),Ds(e,t,r);throw s}return Vr(o,{paginate:!0,pageSize:9})}a(Ds,"getLogsByView");async function Wf(e,t){let r=ee.context.getProdWorkspaceDB(),n=e._id,o=e.name,s=new Date().toISOString(),i=aC(s,t.status,n),u={...t,automationId:n,status:t.status,automationName:o,createdAt:s,_id:i};return await r.put(u),i}a(Wf,"writeLog");async function Bs(e,{clearing:t}={clearing:!1}){let r=ee.context.getProdWorkspaceDB();await Mf(async()=>{let n=await r.get(ee.db.DocumentType.WORKSPACE_METADATA);for(let o of e){let s=o.split(ee.db.SEPARATOR),i=`${s[s.length-3]}${ee.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 ee.cache.workspace.invalidateWorkspaceMetadata(n.appId,n)},"Failed to update app metadata with automation log error")}a(Bs,"updateAppMetadataWithErrors");async function nC(){let e=await qs();try{return await ks(tC,e,{docs:!1,paginate:!1,limit:rC})}catch{return{data:[],hasNextPage:!1}}}a(nC,"getExpiredLogs");async function Ns(){let e=ee.context.getProdWorkspaceDB();try{let t=await nC();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(ee.db.SEPARATOR);return s[s.length-1]===xn.AutomationStatus.ERROR}).map(o=>o.id);await e.bulkDocs(r),n.length&&await Bs(n,{clearing:!0})}catch(t){ee.logging.logAlert(`Failed to cleanup automation log history - Database "${e.name}"`,t)}}a(Ns,"clearOldHistory");var Qf=qs;async function oC(e,t,r,n){let o,s=new Date().toISOString(),i=await Qf();return(!e||e<i)&&(e=i),r||t?o=await Ds(e,s,{automationId:r,status:t,page:n}):o=await ks(e,s,{status:t,page:n,docs:!0,paginate:!0}),o}a(oC,"getLogs");async function sC(e){return await Ns(),await oC(e.startDate,e.status,e.automationId,e.page)}a(sC,"logSearch");async function iC(e,t){if(!Cn.db.isProdWorkspaceID(Cn.context.getWorkspaceId()))return;let r=await Wf(e,t);t.status===jf.AutomationStatus.ERROR&&await Bs([r]),await Ns()}a(iC,"storeLog");var Ln={};E(Ln,{checkPluginQuotas:()=>pC,deletePlugin:()=>cC,storePlugin:()=>uC});var Hf=require("@budibase/types"),X=require("@budibase/backend-core");var $f=U(require("fs")),Kf=require("path");function Vf(e,t){return $f.default.readFileSync((0,Kf.join)(e,t),"utf8")}a(Vf,"loadJSFile");async function uC(metadata,directory,source){let db=X.tenancy.getGlobalDB(),version=metadata.package.version,name=metadata.package.name,description=metadata.package.description,hash=metadata.schema.hash,bucketPath=X.objectStore.getPluginS3Dir(name),files=await X.objectStore.uploadDirectory(X.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===Hf.PluginType.DATASOURCE){let js=Vf(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=X.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 X.events.plugin.imported(doc),{...doc,_rev:e.rev}},"write");return rev?await write():await Rs(write)}a(uC,"storePlugin");async function cC(e){let t=X.tenancy.getGlobalDB();try{let r=await t.get(e),n=X.objectStore.getPluginS3Dir(r.name);await X.objectStore.deleteFolder(X.objectStore.ObjectStoreBuckets.PLUGINS,n),await t.remove(e,r._rev),await X.events.plugin.deleted(r),await vs()}catch(r){let n=r?.message?r?.message:r;throw new Error(`Failed to delete plugin: ${n}`)}}a(cC,"deletePlugin");async function pC(){let e=X.tenancy.getGlobalDB();try{let r=(await e.allDocs(X.db.getPluginParams())).rows.length;console.log(`Syncing plugin count: ${r}`),await _s(r)}catch(t){X.logging.logAlert("Unable to retrieve plugins for quota check",t)}}a(pC,"checkPluginQuotas");var Xe={};E(Xe,{fetch:()=>dC,fetchValues:()=>fC,isEncryptionKeyAvailable:()=>lC,isValid:()=>Jf,remove:()=>gC,update:()=>mC});var Yf=require("@budibase/backend-core"),Sa=require("@budibase/types");function lC(){return!!Yf.env.ENCRYPTION_KEY}a(lC,"isEncryptionKeyAvailable");async function dC(){let e=await xt.get();return Object.keys(e.variables)}a(dC,"fetch");async function fC(e){let r=(await xt.get()).variables,n={};for(let[o,s]of Object.entries(r))switch(e){case Sa.Environment.DEVELOPMENT:n[o]=s.development;break;case Sa.Environment.PRODUCTION:default:n[o]=s.production;break}return n}a(fC,"fetchValues");async function zf(e){if(!(await Ve.cache.getCachedLicense()).features.includes(Sa.Feature.ENVIRONMENT_VARIABLES))throw new Error("User does not have access to environment variables feature.");let r=await xt.get();r.variables=e(r.variables),await xt.update(r)}a(zf,"changeValues");async function mC(e,t){if(Jf(e))await zf(n=>(n[e]=t,n));else throw new Error("Variable name has characters that are not allowed")}a(mC,"update");async function gC(e){await zf(t=>(delete t[e],t))}a(gC,"remove");function Jf(e){return/^[a-zA-Z0-9-_]+$/.test(e)}a(Jf,"isValid");var St={};E(St,{definitions:()=>vC,download:()=>RC,fetch:()=>TC,write:()=>wC});var ge=require("@budibase/backend-core"),Un=require("@budibase/types");var H=require("@budibase/backend-core"),Fe=require("@budibase/types");var Xf=require("memorystream"),Zf=new H.sql.Sql(Fe.SqlClient.SQL_LITE);async function hC(e,t,r){let n={operation:Fe.Operation.READ,table:$t.searchTable(),tables:{},paginate:{limit:r||9,page:t},filters:e,resource:{fields:[]},sort:{timestamp:{direction:Fe.SortOrder.DESCENDING,type:Fe.SortType.STRING}}},o=Zf._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(hC,"getAuditLogSqlQuery");function yC(e){return`${H.DocumentType.AUDIT_LOG}${H.SEPARATOR}${e}${H.SEPARATOR}${H.utils.newid()}`}a(yC,"generateAuditLogID");async function em(e){e._id||(e._id=yC(e.timestamp)),e.type||(e.type=Fe.AUDIT_LOG_TYPE);try{let r=await H.context.getAuditLogsDB().put(e);return{...e,_rev:r.rev}}catch(t){H.logging.logAlert("Failed to write audit log",t)}}a(em,"save");async function Gs(e,t,r){t||(t=1);let n=H.context.getAuditLogsDB();try{let o=9+1,s=await hC(e,t,o),i=$t.searchTable(),u=Zf.convertJsonStringColumns(i,await n.sql(s.sql,s.bindings)),c;u.length>o&&(c=u.pop());let m={rows:u,hasNextPage:!!c};return m.hasNextPage&&(m.bookmark=t+1),m}catch(o){if(o.status===404&&!r?.isRetry)return await AC(),await tc(),await Gs(e,t,{isRetry:!0});throw o}}a(Gs,"searchSQL");async function AC(){let e=H.context.getAuditLogsDB(),r=(await e.allDocs(H.db.getDocParams(H.DocumentType.AUDIT_LOG,null,{include_docs:!0}))).rows.map(n=>n.doc).filter(n=>n&&!n.type).map(n=>({...n,type:Fe.AUDIT_LOG_TYPE}));await e.bulkDocs(r)}a(AC,"migrate");function tm(e){let t=H.context.getAuditLogsDB(),r=new Xf,n=t.dump(r,{filter:s=>{let i=s;if(!i._id?.startsWith(H.DocumentType.AUDIT_LOG))return!1;let u=!0,c=a((m,g)=>{!m||m.length===0||(u=!!(u&&g&&m.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 m=JSON.stringify(s);u=u&&m.includes(e.fullSearch)}return u}}),o=new Xf;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(tm,"dump");var wa=require("@budibase/backend-core"),Ea=require("@budibase/string-templates"),Pn=require("@budibase/types");var IC=wa.constants.MIN_VALID_DATE.toISOString(),SC=wa.constants.MAX_VALID_DATE.toISOString();function Fs(e){return(e.startDate||e.endDate)&&(e.startDate=e.startDate||IC,e.endDate=e.endDate||SC),e}a(Fs,"fillDates");async function rm(e){Array.isArray(e.appIds)&&(e.appIds=e.appIds.map(n=>wa.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=Fs(e),t.range={timestamp:{high:e.endDate,low:e.startDate}}),Object.keys(t).length===0&&(t.notEmpty={event:!0}),t}a(rm,"getSearchFilters");function Ws(e,t,r){let n={_id:e,status:Pn.AuditLogResourceStatus.DELETED};switch(t){case"app":n.name=r?.appName;break;case"user":n.email=r?.email;break}return n}a(Ws,"deleted");function Qs(e){let t=(0,Ea.findHBSBlocks)(e);for(let r of t){let n=` "${r}"`;e=e.replace(e.includes(n)?n:` ${r}`,""),e=(0,Ea.processStringSync)(e,{})}return e}a(Qs,"removeTemplateStrings");function am(e,t){let r=Pn.AuditedEventFriendlyName[e];if(!r)throw new Error("No friendly name found.");let n=(0,Ea.processStringSync)(r,t);return n.includes('""')&&(n=Qs(r)),n}a(am,"getEventFriendlyName");async function wC(e,t,r){if(!await bn()||!ge.utils.isAudited(e))return;let n=am(e,t),o=new Date;r?.timestamp&&(o=new Date(r.timestamp));let s={timestamp:o.toISOString(),event:e,name:n,userId:r?.userId||Un.AuditLogSystemUser,metadata:{...t,...r?.hostInfo}},i={};try{if(r?.appId){s.appId=ge.db.getProdWorkspaceID(r.appId);let u=await ge.cache.workspace.getWorkspaceMetadata(r.appId);"name"in u&&(i.appName=u.name)}if(r?.userId){let u=await ge.users.getById(r?.userId);i.email=u.email}}catch(u){ge.logging.logAlert("Failed to retrieve fallback information for audit log",u)}return s.fallback=i,await em(s)}a(wC,"write");async function EC(e){let t=e.map(u=>u.userId),n=e.filter(u=>u.appId).map(u=>ge.db.getDevWorkspaceID(u.appId)),o=await ge.users.bulkGetGlobalUsersById([...new Set(t)],{cleanup:!0}),s=await ge.db.getWorkspacesByIDs([...new Set(n)]),i=[];for(let u of e){let c=o.find(h=>h?._id===u.userId),m=s.find(h=>ge.db.isSameWorkspaceID(h?.appId,u.appId)),g={event:u.event,timestamp:u.timestamp,name:u.name,metadata:u.metadata,user:c||Ws(u.userId,"user",u.fallback)};u.appId&&(g.app=m||Ws(u.appId,"app",u.fallback)),i.push(g)}return i}a(EC,"enrich");async function TC(e){if(!await bn())throw new Error("Audit logs not available - license required.");let t=await rm(e);if(typeof e.bookmark=="string")throw new Error("String based bookmark not supported.");let r=await Gs(t,e.bookmark);return{hasNextPage:r.hasNextPage,bookmark:r.bookmark,data:await EC(r.rows)}}a(TC,"fetch");function RC(e){return e=Fs(e),tm(e)}a(RC,"download");function vC(){let e=Object.entries(Un.AuditedEventFriendlyName).filter(r=>r[1]!=null),t={};for(let r of e)t[r[0]]=Qs(r[1]);return t}a(vC,"definitions");var qn={};E(qn,{applications:()=>Hs,roles:()=>Ks,users:()=>$s});var $s={};E($s,{roleCheck:()=>xC});function _C(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(_C,"removeRoles");async function xC(e,t){return await at()||_C(e,t),e}a(xC,"roleCheck");var Ks={};E(Ks,{assign:()=>CC,unAssign:()=>OC});var Ta=require("@budibase/backend-core");async function CC(e,t){if(!await at())throw new Error("Unable to assign roles - license required.");let r=await Oe.bulkGet(e);for(let n of r){if(t.role&&t.role.roleId){let o=Ta.db.getProdWorkspaceID(t.role.appId);n.roles[o]=t.role.roleId}if(t.appBuilder){let o=Ta.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 Oe.bulkUpdate(r)}a(CC,"assign");async function OC(e,t){if(!await at())throw new Error("Unable to un-assign roles - license required.");let r=await Oe.bulkGet(e);for(let n of r){if(t.role){let o=Ta.db.getProdWorkspaceID(t.role?.appId);n.roles[o]===t.role.roleId&&delete n.roles[o]}if(t.appBuilder&&n.builder?.apps){let o=Ta.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(OC,"unAssign");var Hs={};E(Hs,{buildExportFn:()=>PC,buildImportFn:()=>LC});var Vs=require("@budibase/backend-core");function LC(e){return async(t,r)=>{await at()||t.throw(403,"Endpoint unavailable, license required."),t.request.files?.appExport||t.throw(400,"Must provide app export file for import."),await Vs.context.doInWorkspaceContext(t.params.appId,async()=>{await e(t),t.body=void 0,t.status=204,await r()})}}a(LC,"buildImportFn");function PC(e){return async(t,r)=>{await at()||t.throw(403,"Endpoint unavailable, license required.");let{encryptPassword:n,excludeRows:o}=t.request.body;await Vs.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(PC,"buildExportFn");var oe=require("@budibase/backend-core"),ne=require("@budibase/types"),sm=U(require("fs")),im=require("path");var Ys=require("@budibase/backend-core");var nm;function om(){nm=new Ys.queue.BudibaseQueue(Ys.queue.JobQueue.APP_BACKUP,{maxStalledCount:3,jobOptions:{attempts:3,removeOnFail:!0,removeOnComplete:!0}})}a(om,"init");function Dt(){return nm}a(Dt,"getBackupQueue");async function zs(e,t={}){return xe.storeAppBackupMetadata(e,t)}a(zs,"storeAppBackupMetadata");function um(e){let t=new Date().toISOString();switch(e){case ne.BackupStatus.COMPLETE:case ne.BackupStatus.FAILED:return{timestamp:t,finishedAt:t};case ne.BackupStatus.STARTED:return{timestamp:t,startedAt:t};case ne.BackupStatus.PENDING:return{timestamp:t,createdAt:t}}}a(um,"getTimestamps");async function UC(e,t,r,n){let o=await kn(e);return await xe.storeAppBackupMetadata({...o,...um(t),contents:r,status:t,type:ne.BackupType.BACKUP},{filename:n,docId:e})}a(UC,"updateBackupStatus");async function qC(e,t,r){let n=await kn(e);return await xe.storeAppBackupMetadata({...n,...um(r),status:r,type:ne.BackupType.RESTORE,trigger:ne.BackupTrigger.MANUAL},{docId:e,docRev:t})}a(qC,"updateRestoreStatus");async function kn(e){return xe.getAppBackupMetadata(e)}a(kn,"getAppBackup");async function kC(e,t){return xe.updateAppBackupMetadata(e,t)}a(kC,"updateAppBackup");async function cm(e){let t=await xe.getAppBackupMetadata(e);return t.filename&&await oe.objectStore.deleteFile(oe.objectStore.ObjectStoreBuckets.BACKUPS,t.filename),xe.deleteAppBackupMetadata(e)}a(cm,"deleteAppBackup");async function DC(e){let t=[];for(let r of e)try{await cm(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(DC,"deleteAppBackups");async function BC(e,t){return xe.fetchAppBackups(e,t)}a(BC,"fetchAppBackups");async function pm(e){let t=await xe.getAppBackupMetadata(e);if(!t.filename)throw new Error("Backup incomplete - cannot download.");let r=await oe.objectStore.getReadStream(oe.objectStore.ObjectStoreBuckets.BACKUPS,t.filename);return{metadata:t,stream:r}}a(pm,"getBackupDownloadStream");async function NC(e){let{stream:t}=await pm(e),r=(0,im.join)(oe.objectStore.budibaseTempDir(),oe.utils.newid()),n=sm.default.createWriteStream(r);return new Promise((o,s)=>{t.on("error",s),n.on("error",s),t.pipe(n).on("close",()=>o(r))})}a(NC,"downloadAppBackup");async function MC(e,t,r={}){let n;try{n=await zs({appId:e,trigger:t,timestamp:new Date().toISOString(),status:ne.BackupStatus.PENDING,type:ne.BackupType.BACKUP,...r})}catch(o){if(o.status===409)return;throw o}return await Dt().add({docId:n.id,docRev:n.rev,appId:e,export:{trigger:t,...r}}),await oe.events.backup.appBackupTriggered(e,n.id,ne.BackupType.BACKUP,t,r?.name),n.id}a(MC,"triggerAppBackup");async function GC(e,t,r,n){let o=await kn(t),s;try{s=await zs({appId:e,timestamp:new Date().toISOString(),status:ne.BackupStatus.PENDING,type:ne.BackupType.RESTORE,createdBy:n})}catch(i){if(i?.status===409)return;throw i}return await Dt().add({appId:e,docId:s.id,docRev:s.rev,import:{nameForBackup:r,backupId:t,createdBy:n}}),{restoreId:s.id,metadata:o}}a(GC,"triggerAppRestore");async function FC(e,t,r){let n=oe.db.getProdWorkspaceID(e);await oe.context.doInWorkspaceContext(n,async()=>{let o=oe.context.getProdWorkspaceDB();if(!await o.exists())return;let i=await o.tryGet(ne.DocumentType.WORKSPACE_METADATA);i&&(i.backupErrors||(i.backupErrors={}),i.backupErrors[t]||(i.backupErrors[t]=[]),i.backupErrors[t].push(r),await o.put(i),await oe.cache.workspace.invalidateWorkspaceMetadata(i.appId,i))})}a(FC,"trackBackupError");var WC={isEnabled:hs,triggerAppRestore:le(GC),triggerAppBackup:le(MC),getBackupDownloadStream:le(pm),downloadAppBackup:le(NC),fetchAppBackups:le(BC),storeAppBackupMetadata:le(zs),updateBackupStatus:le(UC),updateRestoreStatus:le(qC),getAppBackup:le(kn),updateAppBackup:le(kC),deleteAppBackup:le(cm),deleteAppBackups:le(DC),trackBackupError:le(FC)},Le=WC;var Xs={};E(Xs,{init:()=>Js});var $=require("@budibase/backend-core"),We=require("@budibase/types"),mr=U(require("fs"));async function Js(e){Dt().process(async t=>{let r=t.data;try{if(r.export)return console.log("Exporting app backup:",r.appId,r.export.trigger),$C(t,e);if(r.import)return console.log("Importing app backup:",r.appId,r.import.backupId),QC(t,e)}catch(n){$.logging.logAlert(`Failed to perform backup for app ID: ${r.appId}`,n)}})}a(Js,"init");async function jC(e){await $.db.getDB(e,{skip_setup:!0}).destroy()}a(jC,"removeExistingApp");async function lm(e,t,r,n){let o=$.db.getDevWorkspaceID(r),s=$.db.getProdWorkspaceID(r),i=new Date().toISOString(),u=a(async(c,m)=>{n?.doc?await Le.updateBackupStatus(n.doc.id,c,m?.contents,m?.filename):await Le.storeAppBackupMetadata({appId:s,timestamp:i,trigger:e,status:c,name:n?.name,type:We.BackupType.BACKUP,contents:m?.contents,createdBy:n?.createdBy},{filename:m?.filename})},"updateMetadata");try{let c=await n.processing.exportAppFn(o,{tar:!0}),m=await n.processing.statsFn(o),g=`${s}/backup-${i}.tar.gz`,h=$.objectStore.ObjectStoreBuckets.BACKUPS,y=mr.default.createReadStream(c);await $.objectStore.streamUpload({bucket:h,filename:g,stream:y,extra:{type:"application/gzip",metadata:{name:n?.name,trigger:e,timestamp:i,appId:s}}}),await u(We.BackupStatus.COMPLETE,{filename:g,contents:m}),mr.default.existsSync(c)&&mr.default.rmSync(c)}catch(c){$.logging.logAlert("App backup error",c),await u(We.BackupStatus.FAILED);let m=n?.doc?.id||`backup-${i}`,g=c instanceof Error?c.message:String(c);await Le.trackBackupError(s,m,`Backup export failed: ${g}`)}}a(lm,"runBackup");async function QC(e,t){let r=e.data,n=r.appId,o=r.import.backupId,s=r.import.nameForBackup,i=r.import.createdBy,u=$.tenancy.getTenantIDFromWorkspaceID(n);return $.tenancy.doInTenant(u,async()=>{let c=$.db.getDevWorkspaceID(n),m=`${c}_temp_${Date.now()}`,{rev:g}=await Le.updateRestoreStatus(r.docId,r.docRev,We.BackupStatus.STARTED);await lm(We.BackupTrigger.RESTORING,u,n,{processing:t,createdBy:i,name:s});let h=await Le.downloadAppBackup(o),y=We.BackupStatus.COMPLETE;try{await t.importAppFn(m,$.db.getDB(m),{file:{type:"application/gzip",path:h},key:h}),await jC(c),await new $.db.Replication({source:m,target:c}).replicate()}catch(S){$.logging.logAlert("App restore error",S),y=We.BackupStatus.FAILED;let O=S instanceof Error?S.message:String(S);await Le.trackBackupError(n,o,`Backup restore failed: ${O}`)}finally{try{await $.db.getDB(m,{skip_setup:!0}).destroy()}catch{}}await Le.updateRestoreStatus(r.docId,g,y),mr.default.existsSync(h)&&mr.default.rmSync(h,{force:!0})})}a(QC,"importProcessor");async function $C(e,t){let r=e.data,n=r.appId,o=r.export.trigger,s=r.export.name,i=$.tenancy.getTenantIDFromWorkspaceID(n);await $.tenancy.doInTenant(i,async()=>{try{let{rev:u}=await Le.updateBackupStatus(r.docId,We.BackupStatus.STARTED);return lm(o,i,n,{processing:t,doc:{id:r.docId,rev:u},name:s})}catch(u){$.logging.logAlert("App backup error",u);let c=u instanceof Error?u.message:String(u);await Le.trackBackupError(n,r.docId,`Backup export failed: ${c}`)}})}a($C,"exportProcessor");var KC=a(async e=>{om(),await Js(e.processing)},"init"),we={...Le,processing:Xs,init:KC,getBackupQueue:Dt};var dm=a(async e=>{e.backups&&await we.init(e.backups)},"init");var ye={};E(ye,{create:()=>MN,find:()=>NN,get:()=>BN,remove:()=>FN,update:()=>GN});var qA=U(Ki()),it=require("@budibase/backend-core");var kA=require("@budibase/types");async function BN(e){let t=it.tenancy.getGlobalDB(),r=new it.db.QueryBuilder(t.name,kA.SearchIndex.USER);r.setIndexBuilder(it.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(BN,"get");async function NN(e){return await it.users.getById(e)}a(NN,"find");async function MN(e){let t=await Oe.getUserByEmail(e.email);if(t){if(t.scimInfo?.isSync)throw new it.HTTPError("User is already synched",409);e={...t,scimInfo:(0,qA.default)(t.scimInfo,e.scimInfo),password:void 0,firstName:e.firstName,lastName:e.lastName,updatedAt:e.updatedAt}}return await Oe.save(e,{requirePassword:!1})}a(MN,"create");async function GN(e,t){return await Oe.save(e,{requirePassword:!1,allowChangingEmail:t?.allowChangingEmail})}a(GN,"update");async function FN(e){return await Oe.destroy(e)}a(FN,"remove");var Ir={};E(Ir,{create:()=>WN});var DA=U(Ki());var BA=require("@budibase/backend-core");async function WN(e){let t=await So(e.name),r;if(!t)r=(await Q.save(e)).id;else{if(t.scimInfo?.isSync)throw new BA.HTTPError("Group is already synched",409);r=t._id,t.users&&(await Q.removeUsers(r,t.users.map(o=>o._id)),delete t.users),t.scimInfo=(0,DA.default)(t.scimInfo,e.scimInfo),await Q.save(t)}return await Q.get(r)}a(WN,"create");var Nt={};E(Nt,{logRequest:()=>jN,logResponse:()=>QN});var Vi=require("@budibase/backend-core");async function jN(e){Vi.logging.logWarn("SCIM request log",e)}a(jN,"logRequest");async function QN(e){Vi.logging.logWarn("SCIM response error",e)}a(QN,"logResponse");var eu={};E(eu,{doInScimContext:()=>Yi,feature:()=>K,internalGroupOnly:()=>Ca,licenseAuth:()=>Zi,licensing:()=>NA,requireSCIM:()=>zi,scimGroupOnly:()=>xa,scimUserOnly:()=>_a});var wt=require("@budibase/backend-core");var Hn=require("@budibase/types");var $N=a((e={checkUsersLimit:!0})=>async(t,r)=>{if((e.licensingCheck?e.licensingCheck:()=>!!t.user)(t)){if(wt.env.SELF_HOSTED&&wt.env.DEFAULT_LICENSE)return t.user.license=wo,r();t.user.license=await Ve.cache.getCachedLicense(t,{populateLicense:e.populateLicense,populateFreeLicense:e.populateFreeLicense}),e.checkUsersLimit&&(wt.utils.isServingApp(t)||wt.utils.isServingBuilder(t)||wt.utils.isServingBuilderPreview(t)||wt.utils.isPublicApiRequest(t))&&await Je.usageLimitIsExceeded({name:Hn.StaticQuotaName.USERS,type:Hn.QuotaUsageType.STATIC,usageChange:0})}return r()},"licensing"),NA=$N;var K={};E(K,{requireFeature:()=>KN,requireFeatures:()=>VN});var KN=a(e=>async(t,r)=>{await An(e),await r()},"requireFeature"),VN=a((...e)=>async(t,r)=>{await gs(e),await r()},"requireFeatures");var Yn=require("@budibase/backend-core");var Yi=a(async(e,t)=>(Yn.env.DISABLE_SCIM_CALLS||await Nt.logRequest({...e.request.toJSON(),body:e.request.body}),await Yn.context.doInScimContext(async()=>{let r=await t();return await Nt.logResponse({...e.response.toJSON(),body:e.response.body}),r})),"doInScimContext");var zi=a(async(e,t)=>{await bs(),await t()},"requireSCIM");var MA=require("@budibase/backend-core");var _a=a(e=>Ji(MA.users.getById,e,!0),"scimUserOnly"),xa=a(e=>Ji(M.get,e,!0),"scimGroupOnly"),Ca=a(e=>Ji(M.get,e,!1),"internalGroupOnly");function Ji(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(Ji,"scimSyncChecks");var Oa=require("@budibase/backend-core");var Xi=require("dd-trace");async function Zi(e,t){await Xi.tracer.trace("licenseAuth",async r=>{let n=e.request.headers[Oa.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 ls(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"),Xi.tracer.setUser({id:"anonymous",tenantId:o.tenantId}),await Oa.context.doInSelfHostTenantUsingCloud(o.tenantId,async()=>{await Oa.context.doInLicenseContext(o,async()=>{await t()})})})}a(Zi,"default");var cu={};E(cu,{appBackups:()=>_b,auditLogs:()=>yb,environmentVariables:()=>ub,groups:()=>ZA,scim:()=>aI,users:()=>uI});var GA=require("@budibase/backend-core");async function FA(e){let t=e.request.body;if(t.name=t.name.trim(),delete t.roles,t._id){let n=await It(t._id);t.roles=n.roles,t.scimInfo=n.scimInfo}let r=await fr(t);e.body={_id:r.id,_rev:r.rev}}a(FA,"save");async function WA(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 _n(t,r)),n&&(s=await Cs(t,n)),e.body={added:o,removed:s}}a(WA,"updateGroupUsers");async function jA(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 Os(t,{appsToAdd:r,appsToRemove:n})}a(jA,"updateGroupApps");async function QA(e){e.body={data:await ba()}}a(QA,"fetch");async function $A(e){let{groupId:t,rev:r}=e.params;try{await xs(t,r),e.body={message:"Group deleted successfully"}}catch(n){e.throw(n.status,n)}}a($A,"destroy");async function KA(e){try{e.body=await It(e.params.groupId)}catch(t){e.throw(t.status,t)}}a(KA,"find");async function VA(e){let{pageSize:t=10,bookmark:r,emailSearch:n}=e.request.query,o=e.params.groupId,s={limit:t+1},i=await $a(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(VA,"searchUsers");async function HA(e){let{groupId:t,appId:r}=e.params;await Ls(t,r),e.body={message:"Group app builder access updated."}}a(HA,"addAppBuilder");async function YA(e){let{groupId:t,appId:r}=e.params;await Ps(t,r),e.body={message:"group app builder access removed."}}a(YA,"removeAppBuilder");async function zA(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 GA.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 It(t)}catch(h){if(h.status===404)e.throw(404,"Group not found");else throw h}let u=[],c=[],m=[],g=await Promise.all(i.map(h=>Oe.getUserByEmail(h)));for(let h of i){let y=g.find(S=>S?.email===h);y?(u.push({_id:y._id,email:y.email}),m.push(y._id)):c.push({email:h,reason:"User not found"})}m.length>0&&await _n(t,m),e.body={added:u,skipped:c}}a(zA,"bulkAddUsersFromCsv");var JA=U(require("@koa/router")),de=U(require("joi"));var Ee=require("@budibase/types"),Pe=require("@budibase/backend-core");var XA=new JA.default;function YN(){return Pe.auth.joiValidator.body(de.default.object({_id:de.default.string().optional(),_rev:de.default.string().optional(),color:de.default.string().required(),icon:de.default.string().required(),name:de.default.string().trim().required().max(50),role:de.default.string().optional(),users:de.default.array().optional(),apps:de.default.array().optional(),roles:de.default.object().optional(),createdAt:de.default.string().optional(),updatedAt:de.default.string().optional()}).required())}a(YN,"buildGroupSaveValidation");XA.post("/api/global/groups",Pe.auth.adminOnly,K.requireFeature(Ee.Feature.USER_GROUPS),YN(),FA).get("/api/global/groups",K.requireFeature(Ee.Feature.USER_GROUPS),QA).delete("/api/global/groups/:groupId/:rev",K.requireFeature(Ee.Feature.USER_GROUPS),Pe.auth.adminOnly,Ca("groupId"),$A).get("/api/global/groups/:groupId",K.requireFeature(Ee.Feature.USER_GROUPS),Pe.auth.builderOrAdmin,KA).get("/api/global/groups/:groupId/users",K.requireFeature(Ee.Feature.USER_GROUPS),Pe.auth.builderOrAdmin,VA).post("/api/global/groups/:groupId/users",Pe.auth.adminOnly,K.requireFeature(Ee.Feature.USER_GROUPS),Ca("groupId"),WA).post("/api/global/groups/:groupId/users/bulk",Pe.auth.adminOnly,K.requireFeature(Ee.Feature.USER_GROUPS),Ca("groupId"),Pe.auth.joiValidator.body(de.default.object({csvContent:de.default.string().required()}).required()),zA).post("/api/global/groups/:groupId/apps",Pe.auth.builderOrAdmin,K.requireFeature(Ee.Feature.USER_GROUPS),jA).post("/api/global/groups/:groupId/app/:appId/builder",Pe.auth.builderOrAdmin,K.requireFeatures(Ee.Feature.USER_GROUPS,Ee.Feature.APP_BUILDERS),HA).delete("/api/global/groups/:groupId/app/:appId/builder",Pe.auth.builderOrAdmin,K.requireFeatures(Ee.Feature.USER_GROUPS,Ee.Feature.APP_BUILDERS),YA);var ZA=XA;var ru=require("@budibase/backend-core"),tu=require("@budibase/types");async function eb(e){e.body={encryptionKeyAvailable:Xe.isEncryptionKeyAvailable()}}a(eb,"status");async function tb(e){e.body={variables:await Xe.fetch()}}a(tb,"fetch");async function rb(e){let{name:t,production:r,development:n}=e.request.body;await Xe.update(t,{production:r,development:n});let o=[tu.Environment.PRODUCTION];r!==n&&o.push(tu.Environment.DEVELOPMENT),await ru.events.environmentVariable.created(t,o),e.body={message:`Environment variable "${t}" created.`}}a(rb,"create");async function ab(e){let{production:t,development:r}=e.request.body,n=e.params.varName;await Xe.update(n,{production:t,development:r}),e.body={message:`Environment variable "${n}" updated.`}}a(ab,"update");async function nb(e){let t=e.params.varName;await Xe.remove(t),await ru.events.environmentVariable.deleted(t),e.body={message:`Environment variable "${t}" deleted.`}}a(nb,"destroy");var Mt=require("@budibase/backend-core"),sb=U(require("@koa/router")),La=U(require("joi"));var ib=new sb.default;function ob(){return Mt.auth.joiValidator.body(La.default.object({name:La.default.string().optional(),production:La.default.string().required(),development:La.default.string().required()}))}a(ob,"buildEnvVarUpdateValidator");ib.get("/api/env/variables/status",Mt.auth.builderOrAdmin,eb).get("/api/env/variables",Mt.auth.builderOrAdmin,tb).post("/api/env/variables",Mt.auth.builderOrAdmin,ob(),rb).patch("/api/env/variables/:varName",Mt.auth.builderOrAdmin,ob(),ab).delete("/api/env/variables/:varName",Mt.auth.builderOrAdmin,nb);var ub=ib;var au=require("@budibase/backend-core");async function cb(e){let t=e.request.body,r=await St.fetch(t);await au.events.auditLog.filtered(t),e.body=r}a(cb,"search");async function pb(e){let t=e.request.body,{stream:r}=St.download(t);await au.events.auditLog.downloaded(t),e.attachment(`audit-logs-${Date.now()}.log`),e.body=r}a(pb,"download");async function lb(e){e.body={events:St.definitions()}}a(lb,"definitions");var mb=require("@budibase/types"),Gt=require("@budibase/backend-core"),gb=U(require("@koa/router")),Ue=U(require("joi"));function fb(){return Gt.auth.joiValidator.body(Ue.default.object({userIds:Ue.default.array().items(Ue.default.string()).optional(),appIds:Ue.default.array().items(Ue.default.string()).optional(),events:Ue.default.array().items(Ue.default.string().valid(...Object.values(mb.Event))).optional(),startDate:Ue.default.string().optional().allow(""),endDate:Ue.default.string().optional().allow(""),fullSearch:Ue.default.string().optional().allow(""),bookmark:Ue.default.number()}))}a(fb,"buildAuditLogSearchValidator");var hb=new gb.default;hb.post("/api/global/auditlogs/search",Gt.auth.adminOnly,fb(),cb).get("/api/global/auditlogs/download",Gt.auth.adminOnly,Gt.middleware.querystringToBody,fb(),pb).get("/api/global/auditlogs/definitions",Gt.auth.adminOnly,lb);var yb=hb;var ut=require("@budibase/backend-core"),Jn=require("@budibase/types"),Rb=U(require("@koa/router")),Wt=U(require("joi"));var zn=require("@budibase/backend-core"),nu=require("@budibase/types");async function Ft(e,t){t||e.throw(400,"App ID missing"),await Yt.workspaceExists(t)||e.throw(400,`Provided app ID: ${t} - is invalid.`)}a(Ft,"checkAppID");async function Ab(e){let t=e.params.appId;await Ft(e,t);let{body:r}=e.request,n=e.user?._id,o=await we.triggerAppBackup(t,nu.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(Ab,"manualBackup");async function bb(e){let t=e.params.appId;await Ft(e,t);let r=e.params.backupId,n=e.request.body.name,o=await we.triggerAppRestore(t,r,n,e.user?._id);o||e.throw(500,"Unable to start restore."),await zn.events.backup.appBackupRestored(o.metadata),e.body={restoreId:o?.restoreId,message:"Restore triggered - process starting."}}a(bb,"importBackup");async function Ib(e){let t=e.params.appId;await Ft(e,t);let r=e.params.backupId;await we.deleteAppBackup(r),e.body={message:"Backup deleted successfully."}}a(Ib,"deleteBackup");async function Sb(e){let t=zn.context.getWorkspaceId();await Ft(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 we.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(Sb,"deleteBackups");async function wb(e){let t=e.params.appId;await Ft(e,t);let r=e.request.body;r?.trigger&&(r.trigger=r.trigger.toLowerCase(),Object.values(nu.BackupTrigger).includes(r.trigger)||e.throw(400,"Provided trigger is not a valid option.")),e.body=await we.fetchAppBackups(t,{paginate:!0,...r})}a(wb,"fetchBackups");async function Eb(e){let t=e.params.appId;await Ft(e,t);let r=e.params.backupId,n=e.request.body;e.body=await we.updateAppBackup(r,n.name)}a(Eb,"updateBackup");async function Tb(e){let t=e.params.appId;await Ft(e,t);let r=e.params.backupId,{metadata:n,stream:o}=await we.getBackupDownloadStream(r);e.attachment(`backup-${n.timestamp}.tar.gz`),e.body=o}a(Tb,"downloadBackup");var vb=new Rb.default;function ZN(){return ut.auth.joiValidator.body(Wt.default.object({trigger:Wt.default.string().valid(...Object.values(Jn.BackupTrigger)),type:Wt.default.string().valid(...Object.values(Jn.BackupType)),startDate:Wt.default.date(),endDate:Wt.default.date(),page:Wt.default.string()}))}a(ZN,"validateBackupSearch");vb.post("/api/apps/:appId/backups",ut.auth.builderOrAdmin,Ab).post("/api/apps/:appId/backups/search",ut.auth.builderOrAdmin,ZN(),wb).get("/api/apps/:appId/backups/:backupId/file",ut.auth.builderOrAdmin,Tb).patch("/api/apps/:appId/backups/:backupId",ut.auth.builderOrAdmin,Eb).delete("/api/apps/:appId/backups/:backupId",ut.auth.builderOrAdmin,Ib).delete("/api/apps/:appId/backups",ut.auth.builderOrAdmin,Sb).post("/api/apps/:appId/backups/:backupId/import",ut.auth.builderOrAdmin,bb);var _b=vb;var rI=U(require("@koa/router"));var Xn=require("scim-patch");var Cb=require("@budibase/backend-core");function xb(e,t){let r=e.request.query[t];if(r!==void 0)return+r}a(xb,"tryGetQueryAsNumber");var Ob=a(async e=>{let t=xb(e,"pageSize")??20,r=xb(e,"startIndex"),n;e.request.query.filter&&(n=Y.user.userFilters(e.request.query.filter));let o=await ye.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(Y.user.toScimUserResponse),startIndex:(r||0)+1,itemsPerPage:t}},"get"),Lb=a(async e=>{let{id:t}=e.params;typeof t!="string"&&e.throw(404);let r=await ye.find(t);e.body=Y.user.toScimUserResponse(r)},"find"),Pb=a(async e=>{let t=Y.user.fromScimUser(e.request.body);try{let r=await ye.create(t);e.body=Y.user.toScimUserResponse(r)}catch(r){throw r instanceof Cb.EmailUnavailableError&&e.throw(409,"Email already in use"),r}},"create");function eM(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(eM,"isDeactivation");var Ub=a(async e=>{let t=await ye.find(e.params.id);t||e.throw(404);let r=Y.user.toScimUserResponse(t),n=e.request.body;try{(0,Xn.patchBodyValidation)(n)}catch{}if(eM(n))return ou(e);let o;try{o=(0,Xn.scimPatch)(r,n.Operations)}catch{}o||e.throw(500);let s=Y.user.fromScimUser(o);await ye.update(s,{allowChangingEmail:!0}),e.body=Y.user.toScimUserResponse(s)},"update"),ou=a(async e=>{let{id:t}=e.params;typeof t!="string"&&e.throw(404),await ye.remove(t),e.status=204},"remove");var Hb=U(Vb()),Yb=require("@budibase/shared-core"),Zn=require("scim-patch");var eo=require("scim2-parse-filter");function zb(e,t){for(let r of t.split(","))delete e[r]}a(zb,"cleanResponse");var Jb=a(async e=>{let r=(await Q.fetch()).filter(s=>s.scimInfo?.isSync).map(Y.group.toScimGroupResponse),{filter:n,excludedAttributes:o}=e.request.query;if(n){let s=(0,eo.filter)((0,eo.parse)(n));r=r.filter(s)}o&&r.forEach(s=>{zb(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"),Xb=a(async e=>{let t=Y.group.fromScimGroup(e.request.body),r=await Ir.create(t);e.body=Y.group.toScimGroupResponse(r)},"create"),Zb=a(async e=>{let{id:t}=e.params,r=await Q.get(t),n=Y.group.toScimGroupResponse(r),{excludedAttributes:o}=e.request.query;o&&zb(n,o),e.body=n},"find"),eI=a(async e=>{let{id:t}=e.params,r=await Q.get(t);await Q.remove(t,r._rev),e.status=204},"remove"),tI=a(async e=>{let{id:t}=e.params,r=await Q.get(t),n=Y.group.toScimGroupResponse(r),o=e.request.body;try{(0,Zn.patchBodyValidation)(o)}catch{e.throw(400)}let{true:s,false:i}=(0,Hb.default)(o.Operations,u=>u.path==="members");if(i?.length){let u=(0,Zn.scimPatch)(n,i);u||e.throw(500);let c={...Y.group.fromScimGroup(u),_rev:r._rev};await Q.save(c)}if(s?.length){let u=[],c=[];for(let{op:m,value:g}of s)switch(m){case"add":case"Add":for(let h of g)u.push(await ye.find(h.value));break;case"remove":case"Remove":for(let h of g)c.push(await ye.find(h.value));break;case"replace":case"Replace":throw new Error("Replacing members is not allowed");default:Yb.utils.unreachable(m)}u.length&&await Q.addUsers(t,u.map(m=>m._id)),c.length&&await Q.removeUsers(t,c.map(m=>m._id))}e.body=Y.group.toScimGroupResponse(await Q.get(t))},"update");var Pa=require("@budibase/types"),Te=new rI.default({prefix:"/api/global/scim/v2"});Te.use(zi);Te.use(Yi);Te.get("/users",Ob);Te.get("/users/:id",_a("id"),Lb);Te.post("/users",Pb);Te.patch("/users/:id",_a("id"),Ub);Te.delete("/users/:id",_a("id"),ou);Te.get("/groups",Jb);Te.post("/groups",K.requireFeature(Pa.Feature.USER_GROUPS),Xb);Te.get("/groups/:id",K.requireFeature(Pa.Feature.USER_GROUPS),xa("id"),Zb);Te.delete("/groups/:id",K.requireFeature(Pa.Feature.USER_GROUPS),xa("id"),eI);Te.patch("/groups/:id",K.requireFeature(Pa.Feature.USER_GROUPS),xa("id"),tI);var aI=Te;var sI=U(require("@koa/router"));var su=require("@budibase/backend-core");async function nI(e){let{userId:t,appId:r}=e.params,n=await ot.db.getUser(t);if(su.users.isGlobalBuilder(n)){e.body={message:"User already admin - no permissions updated."};return}await ot.addAppBuilder(n,r),e.body={message:`User "${n.email}" app builder access updated.`}}a(nI,"addAppBuilder");async function oI(e){let{userId:t,appId:r}=e.params,n=await ot.db.getUser(t);if(su.users.isGlobalBuilder(n)){e.body={message:"User already admin - no permissions removed."};return}await ot.removeAppBuilder(n,r),e.body={message:`User "${n.email}" app builder access removed.`}}a(oI,"removeAppBuilder");var iu=require("@budibase/types"),uu=require("@budibase/backend-core"),iI=new sI.default;iI.post("/api/global/users/:userId/app/:appId/builder",uu.auth.builderOrAdmin,K.requireFeatures(iu.Feature.APP_BUILDERS),nI).delete("/api/global/users/:userId/app/:appId/builder",uu.auth.builderOrAdmin,K.requireFeatures(iu.Feature.APP_BUILDERS),oI);var uI=iI;var Y={};E(Y,{group:()=>lu,user:()=>pu});var pu={};E(pu,{fromScimUser:()=>CM,toScimUserResponse:()=>vM,userFilters:()=>OM});var to=require("@budibase/types"),cI=require("scim2-parse-filter"),pI=require("@budibase/backend-core"),lI=require("@budibase/shared-core");var{unreachable:RM}=lI.utils,vM=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===to.UserStatus.ACTIVE};return(e.firstName||e.lastName)&&(o.name={formatted:[e.firstName,e.lastName].filter(s=>s).join(" "),familyName:e.lastName,givenName:e.firstName}),o},"toScimUserResponse"),_M=a(e=>!!e?.id,"isScimUserResponse");function xM(e){if(pI.utils.validEmail(e.userName))return e.userName;if(e.emails)return e.emails.find(t=>t.primary)?.value||e.emails[0]?.value}a(xM,"tryGetEmail");var CM=a(e=>{let t=_M(e)?e:void 0,r=xM(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:RM(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?to.UserStatus.ACTIVE:to.UserStatus.INACTIVE,createdAt:t?.meta.created.getTime(),updatedAt:t?.meta.lastModified.toISOString()}},"fromScimUser"),OM=a(e=>{let t={equal:{}},r=(0,cI.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 lu={};E(lu,{fromScimGroup:()=>UM,toScimGroupResponse:()=>LM});var LM=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"),PM=a(e=>!!e?.id,"isScimGroup"),UM=a(e=>{let t=PM(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 ku={};E(ku,{LLM:()=>Ze,LLMRequest:()=>V,TableGeneration:()=>qu,agentHistoryTitleSystemPrompt:()=>QM,agentSystemPrompt:()=>jM,aiColumnSchemas:()=>Pu,aiTableResponseToTableSchema:()=>xu,appendAIColumns:()=>Cu,classifyText:()=>mu,cleanData:()=>gu,extractFileData:()=>MM,generateAIColumns:()=>vu,generateCode:()=>WM,generateCronExpression:()=>hu,generateData:()=>_u,generateJs:()=>Iu,generateSQL:()=>FM,generateTables:()=>Ru,generationStructure:()=>Lu,getLLM:()=>ka,getLLMConfig:()=>Tu,getLLMOrThrow:()=>wI,normalizeContentType:()=>du,parseResponseFormat:()=>ao,sanitiseToolName:()=>qM,searchWeb:()=>bu,sentimentAnalysis:()=>Au,summarizeText:()=>ro,tableDataStructuredOutput:()=>Uu,translate:()=>yu});var Ua=require("@budibase/types");function qM(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(qM,"sanitiseToolName");function du(e){return e?e.includes("/")?e:{[Ua.SupportedFileType.PDF]:"application/pdf",[Ua.SupportedFileType.JPG]:"image/jpeg",[Ua.SupportedFileType.JPEG]:"image/jpeg",[Ua.SupportedFileType.PNG]:"image/png"}[e.toLowerCase()]||"application/octet-stream":"application/octet-stream"}a(du,"normalizeContentType");var uo=require("@budibase/types");var et=require("@budibase/backend-core"),AI=require("@budibase/types");var no=U(require("openai"));var Et=require("@budibase/types");var dI=require("@budibase/shared-core");var Tt=U(require("dd-trace"));function fu(e,t){return t.map(r=>e[r]).join(" ")}a(fu,"extractTextFromColumns");var Ze=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 Tt.default.trace("prompt",async()=>{let r=typeof t=="string"?new V().addUserMessage(t):t,{messages:n,tokensUsed:o}=await Tt.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 Tt.default.trace("chat",async()=>await this.chatCompletion(t))}async*chatStream(t){yield*this.chatCompletionStream(t)}async summarizeText(t){return Tt.default.trace("summarizeText",()=>this.prompt(ro(t)))}async generateCronExpression(t){return Tt.default.trace("generateCronExpression",()=>this.prompt(hu(t)))}async operation(t,r){return Tt.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 Et.AIOperationEnum.SUMMARISE_TEXT:return ro(fu(r,s));case Et.AIOperationEnum.CLEAN_DATA:return gu(r[o]);case Et.AIOperationEnum.TRANSLATE:return yu(r[o],i);case Et.AIOperationEnum.CATEGORISE_TEXT:if(!u)throw Error("No categories provided for categorise text operation. Please provide categories.");return mu(fu(r,s),u.split(","));case Et.AIOperationEnum.SENTIMENT_ANALYSIS:return Au(r[o]);case Et.AIOperationEnum.PROMPT:return c;case Et.AIOperationEnum.SEARCH_WEB:return bu(fu(r,s));default:throw dI.utils.unreachable(n)}}async generateJs(t,r){return await Tt.default.trace("generateJs",async()=>{let{bindings:n=[],snippets:o=[]}=r||{};return await this.prompt(Iu(n,o).addUserMessage(t))})}};var mI=require("@budibase/types"),Su=require("openai/helpers/zod");var gI=(n=>(n.GPT_5_MINI="gpt-5-mini",n.GPT_5="gpt-5",n.GPT_5_NANO="gpt-5-nano",n))(gI||{});function ao(e){if(e)return e==="text"?{type:"text"}:e==="json"?{type:"json_object"}:e}a(ao,"parseResponseFormat");function fI(e){if(!e)return 0;let t=e.prompt_tokens;return e.completion_tokens*3+t}a(fI,"calculateBudibaseAICredits");var qe=class extends Ze{constructor(r){super(r);this.client=this.getClient(r)}static{a(this,"OpenAI")}getClient(r){if(!r.apiKey)throw new Error("No OpenAI API key found");return new no.default({apiKey:r.apiKey})}async uploadFile(r,n,o){let s=du(o);if(mI.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 m=c.toString("base64");return`data:${s};base64,${m}`}let i=await(0,no.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)};Object.values(gI).includes(this.model)&&(n.verbosity="low",n.reasoning_effort="minimal"),r.tools&&r.tools.length>0&&(n.tool_choice="auto",n.tools=r.tools.map(Su.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,m=r.findTool(c);if(!m)throw new Error(`Tool ${c} not found in prompt tools`);let g=JSON.parse(u.function.arguments);i.push(m.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:fI(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(Su.zodFunction));try{let o=await this.client.chat.completions.create(n),s=null,i="",u=null;for await(let m of o){let g=m?.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}})}m.usage&&(u=m.usage)}}let c=u?fI(u):0;if(s){r.addMessage({role:"assistant",content:"",tool_calls:[{id:s.id,type:"function",function:{name:s.name,arguments:s.arguments}}]});let m=r.findTool(s.name);if(m)try{let g=JSON.parse(s.arguments),h=await m.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 te=require("@budibase/backend-core"),hI=require("@budibase/types");var wu=require("dd-trace");var oo=class extends Ze{static{a(this,"BudibaseAI")}async prompt(t){let r=await super.prompt(t);return r.tokensUsed&&await Rn(r.tokensUsed),r}async chat(t){let r=await super.chat(t);return r.tokensUsed&&await Rn(r.tokensUsed),r}async uploadFile(t,r,n){return te.env.SELF_HOSTED?this.uploadFileSelfHost(t,r,n):this.uploadFileCloud(t,r,n)}async uploadFileCloud(t,r,n){return new qe({apiKey:te.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&&hI.ImageContentTypes.includes(n.toLowerCase()))return`data:image/jpeg;base64,${s}`;if(!te.env.BUDICLOUD_URL)throw new Error("No Budibase URL found");if(!this._apiKey){let g=await hn();if(!g)throw new Error("No license key found");this._apiKey=g}let i=`${te.env.BUDICLOUD_URL}/api/ai/upload-file`,u={method:"POST",headers:{"Content-Type":"application/json",[te.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 te.HTTPError.fromResponse(c);return(await c.json()).fileId}async chatCompletion(t){return te.env.SELF_HOSTED?this.chatCompletionSelfHost(t):this.chatCompletionCloud(t)}async chatCompletionCloud(t){return await wu.tracer.trace("chatCompletionCloud",async()=>await new qe({apiKey:te.env.OPENAI_API_KEY,model:this.model,max_completion_tokens:this.maxTokens}).chatCompletion(t))}async chatCompletionSelfHost(t){return await wu.tracer.trace("chatCompletionSelfHost",async r=>{if(!te.env.BUDICLOUD_URL)throw new Error("No Budibase URL found");if(r.addTags({budicloudUrl:te.env.BUDICLOUD_URL}),!this._apiKey){let c=await hn();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=`${te.env.BUDICLOUD_URL}/api/ai/chat`,s={method:"POST",headers:{"Content-Type":"application/json",[te.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 te.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){te.env.SELF_HOSTED?yield*this.chatCompletionStreamSelfHost(t):yield*this.chatCompletionStreamCloud(t)}async*chatCompletionStreamCloud(t){yield*new qe({apiKey:te.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 Eu=U(require("@anthropic-ai/sdk"));function kM(e){if(!e)return 0;let t=e.input_tokens;return e.output_tokens*3+t}a(kM,"calculateBudibaseAICredits");var so=class extends Ze{constructor(r){super(r);this.client=new Eu.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:kM(n.usage)}}catch(n){throw n instanceof Eu.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 bI=require("zod"),II=require("openai/helpers/zod");var yI=require("openai");var io=class extends qe{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 yI.AzureOpenAI({apiKey:t.apiKey,apiVersion:"2024-10-01-preview",baseURL:t.baseUrl})}};var SI="gpt-5-mini",DM={OpenAI:qe,TogetherAI:qe,AzureOpenAI:io,Custom:qe,Anthropic:so,BudibaseAI:oo};async function BM(){return await qa.tracer.trace("getAIConfig",async e=>{let t={type:AI.ConfigType.AI,config:{}};if(!et.context.isSelfHostUsingCloud()){let n=await et.configs.getAIConfig();n&&(t=n)}await Is(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||SI,apiKey:r.apiKey,baseUrl:r.baseUrl}})}a(BM,"getAIConfig");async function NM(){return qa.tracer.trace("getSelfHostOpenAIKeyConfig",e=>{if(!et.env.SELF_HOSTED){e.addTags({enabled:!1,reason:"not self host"});return}if(!et.env.OPENAI_API_KEY){e.addTags({enabled:!1,reason:"no OPENAI_API_KEY"});return}return e.addTags({enabled:!0}),{provider:"OpenAI",model:SI,apiKey:et.env.OPENAI_API_KEY}})}a(NM,"getSelfHostOpenAIKeyConfig");async function Tu(){return qa.tracer.trace("getLLMConfig",async()=>await BM()||await NM())}a(Tu,"getLLMConfig");async function ka(e){return await qa.tracer.trace("getLLM",async t=>{let{model:r,maxTokens:n}=e||{},o=await Tu();if(!o){t.addTags({enabled:!1,reason:"no config found"});return}r&&(o.model=r),n&&(o.maxTokens=n);let s=DM[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 wI(){let e=await ka();if(!e)throw new et.HTTPError("No available LLM configurations",500);return e}a(wI,"getLLMOrThrow");var V=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 bI.z.ZodType?this.format=(0,II.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 ct=require("zod");function ro(e,t){let r=`Summarize this text:
39
39
  ${e}`,n="";if(t)switch(t){case uo.SummariseLength.SHORT:n="In 1-2 concise sentences, ";break;case uo.SummariseLength.MEDIUM:n="In 2-3 paragraphs, ";break;case uo.SummariseLength.LONG:n="In multiple detailed paragraphs, ";break}return new V().addUserMessage(`${n}${r}.
40
40
  Only return the summary.`)}a(ro,"summarizeText");function MM(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
 
@@ -48,8 +48,8 @@ Generate a SQL query for the following request:
48
48
  ${e}.
49
49
  Only provide the SQL.`)}a(FM,"generateSQL");function WM(e){return new V().addUserMessage(`Generate JavaScript code for the following request:
50
50
  ${e}.
51
- Only provide the JS and nothing else.`)}a(WM,"generateCode");function yu(e){return new V().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(yu,"generateCronExpression");function hu(e,t){return new V().addUserMessage(`Translate the following text: "${e}" into ${t}. Only return the translation.`)}a(hu,"translate");function Au(e){return new V().addUserMessage(`Return the sentiment of this text: "${e}". Only return the sentiment.`)}a(Au,"sentimentAnalysis");function bu(e){return new V().addUserMessage(`Search the web for the following: "${e}". Only return the top results.`)}a(bu,"searchWeb");function Iu(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(WM,"generateCode");function hu(e){return new V().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(hu,"generateCronExpression");function yu(e,t){return new V().addUserMessage(`Translate the following text: "${e}" into ${t}. Only return the translation.`)}a(yu,"translate");function Au(e){return new V().addUserMessage(`Return the sentiment of this text: "${e}". Only return the sentiment.`)}a(Au,"sentimentAnalysis");function bu(e){return new V().addUserMessage(`Search the web for the following: "${e}". Only return the top results.`)}a(bu,"searchWeb");function Iu(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:
@@ -172,13 +172,13 @@ Avoid placeholder values like "foo" or "bar". Use real names, emails, etc., and
172
172
  ${JSON.stringify(e)}
173
173
  \`\`\``}a(jM,"agentSystemPrompt");function QM(){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(QM,"agentHistoryTitleSystemPrompt");var ka=require("@budibase/backend-core"),RI=require("@budibase/shared-core");var pt=require("@budibase/types"),EI=require("@budibase/backend-core");function xu(e){let t=[],r=[];for(let n of e.tables){let o=n.schema.reduce((s,i)=>{if(i.type===pt.FieldType.LINK){if(!r.includes(i.relationshipId)){let u={[pt.RelationshipType.MANY_TO_ONE]:pt.RelationshipType.ONE_TO_MANY,[pt.RelationshipType.ONE_TO_MANY]:pt.RelationshipType.MANY_TO_ONE,[pt.RelationshipType.MANY_TO_MANY]:pt.RelationshipType.MANY_TO_MANY},{reverseFieldName:p,relationshipId:m,...g}=i;s[i.name]={...g,fieldName:p,relationshipType:u[i.relationshipType]},r.push(m)}}else s[i.name]=i;return s},{});t.push({_id:EI.docIds.generateTableID(),name:n.name,primaryDisplay:n.primaryDisplay,schema:o})}return t}a(xu,"aiTableResponseToTableSchema");function Cu(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(Cu,"appendAIColumns");var T=require("@budibase/types"),b=require("zod");var fe=b.z.object({name:b.z.string().describe("A human readable name for the field. It MUST be alpha-numeric and capitalised.")}),Ou=fe.extend({type:b.z.literal(T.FieldType.LINK),tableId:b.z.string().describe("This must match one of the generated table names"),reverseFieldName:b.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:b.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.")}),$M=b.z.array(b.z.union([fe.extend({type:b.z.enum([T.FieldType.STRING,T.FieldType.NUMBER,T.FieldType.BOOLEAN,T.FieldType.LONGFORM]),constraints:b.z.object({presence:b.z.boolean()}).optional().nullable()}),Ou.extend({relationshipType:b.z.enum([T.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."),Ou.extend({relationshipType:b.z.enum([T.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."),Ou.extend({relationshipType:b.z.enum([T.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."),fe.extend({type:b.z.literal(T.FieldType.OPTIONS),constraints:b.z.object({inclusion:b.z.array(b.z.string()).describe("The options for the field"),presence:b.z.boolean()})}).describe("A single option from closed set of options"),fe.extend({type:b.z.literal(T.FieldType.ARRAY),constraints:b.z.object({inclusion:b.z.array(b.z.string()).describe("The options for the field"),presence:b.z.boolean(),type:b.z.literal(T.JsonFieldSubType.ARRAY)}).describe("Multiple selected options from closed set of options")}),fe.extend({type:b.z.literal(T.FieldType.FORMULA),formula:b.z.string().describe(`
175
+ less than five words.`}a(QM,"agentHistoryTitleSystemPrompt");var Da=require("@budibase/backend-core"),RI=require("@budibase/shared-core");var pt=require("@budibase/types"),EI=require("@budibase/backend-core");function xu(e){let t=[],r=[];for(let n of e.tables){let o=n.schema.reduce((s,i)=>{if(i.type===pt.FieldType.LINK){if(!r.includes(i.relationshipId)){let u={[pt.RelationshipType.MANY_TO_ONE]:pt.RelationshipType.ONE_TO_MANY,[pt.RelationshipType.ONE_TO_MANY]:pt.RelationshipType.MANY_TO_ONE,[pt.RelationshipType.MANY_TO_MANY]:pt.RelationshipType.MANY_TO_MANY},{reverseFieldName:c,relationshipId:m,...g}=i;s[i.name]={...g,fieldName:c,relationshipType:u[i.relationshipType]},r.push(m)}}else s[i.name]=i;return s},{});t.push({_id:EI.docIds.generateTableID(),name:n.name,primaryDisplay:n.primaryDisplay,schema:o})}return t}a(xu,"aiTableResponseToTableSchema");function Cu(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(Cu,"appendAIColumns");var T=require("@budibase/types"),b=require("zod");var fe=b.z.object({name:b.z.string().describe("A human readable name for the field. It MUST be alpha-numeric and capitalised.")}),Ou=fe.extend({type:b.z.literal(T.FieldType.LINK),tableId:b.z.string().describe("This must match one of the generated table names"),reverseFieldName:b.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:b.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.")}),$M=b.z.array(b.z.union([fe.extend({type:b.z.enum([T.FieldType.STRING,T.FieldType.NUMBER,T.FieldType.BOOLEAN,T.FieldType.LONGFORM]),constraints:b.z.object({presence:b.z.boolean()}).optional().nullable()}),Ou.extend({relationshipType:b.z.enum([T.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."),Ou.extend({relationshipType:b.z.enum([T.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."),Ou.extend({relationshipType:b.z.enum([T.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."),fe.extend({type:b.z.literal(T.FieldType.OPTIONS),constraints:b.z.object({inclusion:b.z.array(b.z.string()).describe("The options for the field"),presence:b.z.boolean()})}).describe("A single option from closed set of options"),fe.extend({type:b.z.literal(T.FieldType.ARRAY),constraints:b.z.object({inclusion:b.z.array(b.z.string()).describe("The options for the field"),presence:b.z.boolean(),type:b.z.literal(T.JsonFieldSubType.ARRAY)}).describe("Multiple selected options from closed set of options")}),fe.extend({type:b.z.literal(T.FieldType.FORMULA),formula:b.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:b.z.enum([T.FieldType.STRING,T.FieldType.NUMBER,T.FieldType.BOOLEAN,T.FieldType.DATETIME])}).describe("Define these types after the other types"),fe.extend({type:b.z.literal(T.FieldType.DATETIME),ignoreTimezones:b.z.boolean()}).describe("A datetime field, storing date and time"),fe.extend({type:b.z.literal(T.FieldType.DATETIME),ignoreTimezones:b.z.boolean(),timeOnly:b.z.literal(!0)}).describe("A time only field"),fe.extend({type:b.z.literal(T.FieldType.DATETIME),ignoreTimezones:b.z.boolean(),dateOnly:b.z.literal(!0)}).describe("A date only field"),fe.extend({type:b.z.literal(T.FieldType.ATTACHMENT_SINGLE),subtype:b.z.literal(T.AttachmentSubType.IMAGE)}).describe("Single image column"),fe.extend({type:b.z.literal(T.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."),fe.extend({type:b.z.literal(T.FieldType.ATTACHMENTS),subtype:b.z.literal(T.AttachmentSubType.IMAGE)}).describe("Multiple images column. Use an appropiate name for the columns, like 'Gallery', 'Photos', etc."),fe.extend({type:b.z.literal(T.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.")])),Lu=b.z.object({tables:b.z.array(b.z.object({name:b.z.string(),schema:$M,primaryDisplay:b.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 Pu(e){let t=b.z.object({});for(let r of e){let n=Object.values(r.schema),o=[fe.extend({type:b.z.literal(T.FieldType.AI),operation:b.z.literal(T.AIOperationEnum.TRANSLATE),column:b.z.enum(n.filter(s=>[T.FieldType.STRING,T.FieldType.LONGFORM].includes(s.type)).map(s=>s.name)).describe("The columns to translate"),language:b.z.string()}).describe("This column will be autogenerated via AI to translate one column. Use it for reasonable cases, like translating descriptions or similar."),fe.extend({type:b.z.literal(T.FieldType.AI),operation:b.z.literal(T.AIOperationEnum.CATEGORISE_TEXT),columns:b.z.array(b.z.enum(n.filter(s=>[T.FieldType.STRING,T.FieldType.LONGFORM,T.FieldType.BOOLEAN,T.FieldType.NUMBER,T.FieldType.DATETIME].includes(s.type)).map(s=>s.name))).describe("The columns to be used as context"),categories:b.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===T.FieldType.LONGFORM)&&o.push(fe.extend({type:b.z.literal(T.FieldType.AI),operation:b.z.literal(T.AIOperationEnum.SUMMARISE_TEXT),columns:b.z.array(b.z.enum(n.filter(s=>[T.FieldType.STRING,T.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]:b.z.array(b.z.union(o))})}return t}a(Pu,"aiColumnSchemas");var F=require("zod"),TI=require("@budibase/shared-core"),k=require("@budibase/types");function Uu(e){let t=F.z.object({});for(let r of e){let n={_id:F.z.string().describe("Unique ID for the row")},o=F.z.union([F.z.literal("https://picsum.photos/600/600").describe("For profile pictures and similar"),F.z.literal("https://picsum.photos/1920/1080").describe("For anything else")]),s=F.z.object({fileName:F.z.string(),extension:F.z.enum([".pdf",".txt"]),content:F.z.string().describe("Random content for the file")});for(let i of Object.values(r.schema)){let{type:u}=i;switch(u){case k.FieldType.STRING:case k.FieldType.LONGFORM:n[i.name]=F.z.string();break;case k.FieldType.NUMBER:case k.FieldType.BIGINT:n[i.name]=F.z.number();break;case k.FieldType.BOOLEAN:n[i.name]=F.z.boolean();break;case k.FieldType.DATETIME:n[i.name]=F.z.string().describe(`ISO datetime. Use realistic dates, based on today's date, ${new Date().toISOString()}`);break;case k.FieldType.ATTACHMENT_SINGLE:i.subtype===k.AttachmentSubType.IMAGE?n[i.name]=o:n[i.name]=s;break;case k.FieldType.ATTACHMENTS:i.subtype===k.AttachmentSubType.IMAGE?n[i.name]=F.z.array(o):n[i.name]=F.z.array(s),n[i.name]=n[i.name].describe("Between 2 and 5 items.");break;case k.FieldType.OPTIONS:n[i.name]=F.z.enum(i.constraints.inclusion);break;case k.FieldType.LINK:{let p=F.z.string().describe(`Match one of the _ids created for table "${i.tableId}"`);i.relationshipType===k.RelationshipType.ONE_TO_MANY?n[i.name]=F.z.array(p).describe("Array with a single item"):i.relationshipType===k.RelationshipType.MANY_TO_MANY&&(n[i.name]=F.z.array(p).describe("Array with a one or many items. You can repeat the same ids between rows"))}break;case k.FieldType.ARRAY:n[i.name]=F.z.array(F.z.enum(i.constraints.inclusion));break;case k.FieldType.AI:case k.FieldType.AUTO:case k.FieldType.SIGNATURE_SINGLE:case k.FieldType.BB_REFERENCE:case k.FieldType.JSON:case k.FieldType.FORMULA:case k.FieldType.INTERNAL:case k.FieldType.BARCODEQR:case k.FieldType.BB_REFERENCE_SINGLE:break;default:throw TI.utils.unreachable(u)}}t=t.extend({[r.name]:F.z.array(F.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:b.z.enum([T.FieldType.STRING,T.FieldType.NUMBER,T.FieldType.BOOLEAN,T.FieldType.DATETIME])}).describe("Define these types after the other types"),fe.extend({type:b.z.literal(T.FieldType.DATETIME),ignoreTimezones:b.z.boolean()}).describe("A datetime field, storing date and time"),fe.extend({type:b.z.literal(T.FieldType.DATETIME),ignoreTimezones:b.z.boolean(),timeOnly:b.z.literal(!0)}).describe("A time only field"),fe.extend({type:b.z.literal(T.FieldType.DATETIME),ignoreTimezones:b.z.boolean(),dateOnly:b.z.literal(!0)}).describe("A date only field"),fe.extend({type:b.z.literal(T.FieldType.ATTACHMENT_SINGLE),subtype:b.z.literal(T.AttachmentSubType.IMAGE)}).describe("Single image column"),fe.extend({type:b.z.literal(T.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."),fe.extend({type:b.z.literal(T.FieldType.ATTACHMENTS),subtype:b.z.literal(T.AttachmentSubType.IMAGE)}).describe("Multiple images column. Use an appropiate name for the columns, like 'Gallery', 'Photos', etc."),fe.extend({type:b.z.literal(T.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.")])),Lu=b.z.object({tables:b.z.array(b.z.object({name:b.z.string(),schema:$M,primaryDisplay:b.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 Pu(e){let t=b.z.object({});for(let r of e){let n=Object.values(r.schema),o=[fe.extend({type:b.z.literal(T.FieldType.AI),operation:b.z.literal(T.AIOperationEnum.TRANSLATE),column:b.z.enum(n.filter(s=>[T.FieldType.STRING,T.FieldType.LONGFORM].includes(s.type)).map(s=>s.name)).describe("The columns to translate"),language:b.z.string()}).describe("This column will be autogenerated via AI to translate one column. Use it for reasonable cases, like translating descriptions or similar."),fe.extend({type:b.z.literal(T.FieldType.AI),operation:b.z.literal(T.AIOperationEnum.CATEGORISE_TEXT),columns:b.z.array(b.z.enum(n.filter(s=>[T.FieldType.STRING,T.FieldType.LONGFORM,T.FieldType.BOOLEAN,T.FieldType.NUMBER,T.FieldType.DATETIME].includes(s.type)).map(s=>s.name))).describe("The columns to be used as context"),categories:b.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===T.FieldType.LONGFORM)&&o.push(fe.extend({type:b.z.literal(T.FieldType.AI),operation:b.z.literal(T.AIOperationEnum.SUMMARISE_TEXT),columns:b.z.array(b.z.enum(n.filter(s=>[T.FieldType.STRING,T.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]:b.z.array(b.z.union(o))})}return t}a(Pu,"aiColumnSchemas");var F=require("zod"),TI=require("@budibase/shared-core"),D=require("@budibase/types");function Uu(e){let t=F.z.object({});for(let r of e){let n={_id:F.z.string().describe("Unique ID for the row")},o=F.z.union([F.z.literal("https://picsum.photos/600/600").describe("For profile pictures and similar"),F.z.literal("https://picsum.photos/1920/1080").describe("For anything else")]),s=F.z.object({fileName:F.z.string(),extension:F.z.enum([".pdf",".txt"]),content:F.z.string().describe("Random content for the file")});for(let i of Object.values(r.schema)){let{type:u}=i;switch(u){case D.FieldType.STRING:case D.FieldType.LONGFORM:n[i.name]=F.z.string();break;case D.FieldType.NUMBER:case D.FieldType.BIGINT:n[i.name]=F.z.number();break;case D.FieldType.BOOLEAN:n[i.name]=F.z.boolean();break;case D.FieldType.DATETIME:n[i.name]=F.z.string().describe(`ISO datetime. Use realistic dates, based on today's date, ${new Date().toISOString()}`);break;case D.FieldType.ATTACHMENT_SINGLE:i.subtype===D.AttachmentSubType.IMAGE?n[i.name]=o:n[i.name]=s;break;case D.FieldType.ATTACHMENTS:i.subtype===D.AttachmentSubType.IMAGE?n[i.name]=F.z.array(o):n[i.name]=F.z.array(s),n[i.name]=n[i.name].describe("Between 2 and 5 items.");break;case D.FieldType.OPTIONS:n[i.name]=F.z.enum(i.constraints.inclusion);break;case D.FieldType.LINK:{let c=F.z.string().describe(`Match one of the _ids created for table "${i.tableId}"`);i.relationshipType===D.RelationshipType.ONE_TO_MANY?n[i.name]=F.z.array(c).describe("Array with a single item"):i.relationshipType===D.RelationshipType.MANY_TO_MANY&&(n[i.name]=F.z.array(c).describe("Array with a one or many items. You can repeat the same ids between rows"))}break;case D.FieldType.ARRAY:n[i.name]=F.z.array(F.z.enum(i.constraints.inclusion));break;case D.FieldType.AI:case D.FieldType.AUTO:case D.FieldType.SIGNATURE_SINGLE:case D.FieldType.BB_REFERENCE:case D.FieldType.JSON:case D.FieldType.FORMULA:case D.FieldType.INTERNAL:case D.FieldType.BARCODEQR:case D.FieldType.BB_REFERENCE_SINGLE:break;default:throw TI.utils.unreachable(u)}}t=t.extend({[r.name]:F.z.array(F.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(Uu,"tableDataStructuredOutput");var Na=U(require("dd-trace"));var qu=class e{constructor(t,r){this.llmFunctions={getTableStructure:async t=>Na.default.trace("llm.getTableStructure",async()=>{let r=await this.llm.prompt(Ru().addUserMessage(t).withFormat(Lu));try{let n=JSON.parse(r.message);return xu(n)}catch{throw new ka.HTTPError("Error generating tables",500)}}),generateAIColumns:(t,r)=>Na.default.trace("llm.generateAIColumns",async()=>this.generateAIColumns(t,r)),generateData:async(t,r)=>Na.default.trace("llm.generateData",async()=>{let n=await this.llm.prompt(_u().addUserMessage(t).withFormat(Uu(r)));try{return JSON.parse(n.message)}catch{throw new ka.HTTPError("Error generating data",500)}})};this.llm=t,this.delegates=r}static{a(this,"TableGeneration")}static async init(t){let r=await Da({model:"gpt-5-mini",maxTokens:5e3});if(!r)throw new ka.HTTPError("LLM not available",422);return new e(r,t)}async generate(t,r){return Na.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(Cu(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(vu().addUserMessage(`This is the initial user prompt that generated the given schema:
184
- "${t}"`).withFormat(Pu(r)));try{return JSON.parse(n.message)}catch{throw new ka.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(Uu,"tableDataStructuredOutput");var Ba=U(require("dd-trace"));var qu=class e{constructor(t,r){this.llmFunctions={getTableStructure:async t=>Ba.default.trace("llm.getTableStructure",async()=>{let r=await this.llm.prompt(Ru().addUserMessage(t).withFormat(Lu));try{let n=JSON.parse(r.message);return xu(n)}catch{throw new Da.HTTPError("Error generating tables",500)}}),generateAIColumns:(t,r)=>Ba.default.trace("llm.generateAIColumns",async()=>this.generateAIColumns(t,r)),generateData:async(t,r)=>Ba.default.trace("llm.generateData",async()=>{let n=await this.llm.prompt(_u().addUserMessage(t).withFormat(Uu(r)));try{return JSON.parse(n.message)}catch{throw new Da.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 Da.HTTPError("LLM not available",422);return new e(r,t)}async generate(t,r){return Ba.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(Cu(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(vu().addUserMessage(`This is the initial user prompt that generated the given schema:
184
+ "${t}"`).withFormat(Pu(r)));try{return JSON.parse(n.message)}catch{throw new Da.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});
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "dist"
5
5
  ],
6
6
  "license": "UNLICENSED",
7
- "version": "3.18.14",
7
+ "version": "3.18.15",
8
8
  "description": "Budibase Pro (Backend)",
9
9
  "main": "dist/index.js",
10
10
  "types": "dist/index.d.ts",
@@ -70,5 +70,5 @@
70
70
  }
71
71
  }
72
72
  },
73
- "gitHead": "da28258ca1bcc8260d29f82069545761429eeea7"
73
+ "gitHead": "95620e87e1a4f31518d8577e659c8fc4420b60d8"
74
74
  }