@budibase/pro 3.12.8 → 3.12.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,31 +1,31 @@
1
- "use strict";var mI=Object.create;var La=Object.defineProperty;var gI=Object.getOwnPropertyDescriptor;var yI=Object.getOwnPropertyNames;var hI=Object.getPrototypeOf,AI=Object.prototype.hasOwnProperty;var u=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),w=(e,t)=>{for(var r in t)La(e,r,{get:t[r],enumerable:!0})},_u=(e,t,r,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of yI(t))!AI.call(e,n)&&n!==r&&La(e,n,{get:()=>t[n],enumerable:!(a=gI(t,n))||a.enumerable});return e};var C=(e,t,r)=>(r=e!=null?mI(hI(e)):{},_u(t||!e||!e.__esModule?La(r,"default",{value:e,enumerable:!0}):r,e)),bI=e=>_u(La({},"__esModule",{value:!0}),e);var Va=u((N0,fp)=>{"use strict";function yS(e,t){for(var r=-1,a=t.length,n=e.length;++r<a;)e[n+r]=t[r];return e}fp.exports=yS});var yo=u((B0,mp)=>{"use strict";var hS=typeof global=="object"&&global&&global.Object===Object&&global;mp.exports=hS});var ne=u((M0,gp)=>{"use strict";var AS=yo(),bS=typeof self=="object"&&self&&self.Object===Object&&self,IS=AS||bS||Function("return this")();gp.exports=IS});var Rt=u((G0,yp)=>{"use strict";var SS=ne(),wS=SS.Symbol;yp.exports=wS});var Ip=u((k0,bp)=>{"use strict";var hp=Rt(),Ap=Object.prototype,TS=Ap.hasOwnProperty,vS=Ap.toString,Vr=hp?hp.toStringTag:void 0;function ES(e){var t=TS.call(e,Vr),r=e[Vr];try{e[Vr]=void 0;var a=!0}catch{}var n=vS.call(e);return a&&(t?e[Vr]=r:delete e[Vr]),n}bp.exports=ES});var wp=u((F0,Sp)=>{"use strict";var RS=Object.prototype,xS=RS.toString;function _S(e){return xS.call(e)}Sp.exports=_S});var dt=u((Q0,Ep)=>{"use strict";var Tp=Rt(),OS=Ip(),PS=wp(),LS="[object Null]",CS="[object Undefined]",vp=Tp?Tp.toStringTag:void 0;function qS(e){return e==null?e===void 0?CS:LS:vp&&vp in Object(e)?OS(e):PS(e)}Ep.exports=qS});var ge=u((j0,Rp)=>{"use strict";function US(e){return e!=null&&typeof e=="object"}Rp.exports=US});var _p=u((W0,xp)=>{"use strict";var DS=dt(),NS=ge(),BS="[object Arguments]";function MS(e){return NS(e)&&DS(e)==BS}xp.exports=MS});var Yr=u(($0,Lp)=>{"use strict";var Op=_p(),GS=ge(),Pp=Object.prototype,kS=Pp.hasOwnProperty,FS=Pp.propertyIsEnumerable,QS=Op(function(){return arguments}())?Op:function(e){return GS(e)&&kS.call(e,"callee")&&!FS.call(e,"callee")};Lp.exports=QS});var ee=u((K0,Cp)=>{"use strict";var jS=Array.isArray;Cp.exports=jS});var Np=u((V0,Dp)=>{"use strict";var qp=Rt(),WS=Yr(),$S=ee(),Up=qp?qp.isConcatSpreadable:void 0;function KS(e){return $S(e)||WS(e)||!!(Up&&e&&e[Up])}Dp.exports=KS});var ho=u((Y0,Mp)=>{"use strict";var VS=Va(),YS=Np();function Bp(e,t,r,a,n){var o=-1,s=e.length;for(r||(r=YS),n||(n=[]);++o<s;){var i=e[o];t>0&&r(i)?t>1?Bp(i,t-1,r,a,n):VS(n,i):a||(n[n.length]=i)}return n}Mp.exports=Bp});var Hr=u((H0,Gp)=>{"use strict";function HS(e){return e}Gp.exports=HS});var Ya=u((z0,kp)=>{"use strict";function zS(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)}kp.exports=zS});var Ao=u((J0,Qp)=>{"use strict";var JS=Ya(),Fp=Math.max;function XS(e,t,r){return t=Fp(t===void 0?e.length-1:t,0),function(){for(var a=arguments,n=-1,o=Fp(a.length-t,0),s=Array(o);++n<o;)s[n]=a[t+n];n=-1;for(var i=Array(t+1);++n<t;)i[n]=a[n];return i[t]=r(s),JS(e,this,i)}}Qp.exports=XS});var Wp=u((X0,jp)=>{"use strict";function ZS(e){return function(){return e}}jp.exports=ZS});var Te=u((Z0,$p)=>{"use strict";function ew(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}$p.exports=ew});var zr=u((ek,Kp)=>{"use strict";var tw=dt(),rw=Te(),aw="[object AsyncFunction]",nw="[object Function]",ow="[object GeneratorFunction]",sw="[object Proxy]";function iw(e){if(!rw(e))return!1;var t=tw(e);return t==nw||t==ow||t==aw||t==sw}Kp.exports=iw});var Yp=u((tk,Vp)=>{"use strict";var uw=ne(),pw=uw["__core-js_shared__"];Vp.exports=pw});var Jp=u((rk,zp)=>{"use strict";var bo=Yp(),Hp=function(){var e=/[^.]+$/.exec(bo&&bo.keys&&bo.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function cw(e){return!!Hp&&Hp in e}zp.exports=cw});var Io=u((ak,Xp)=>{"use strict";var lw=Function.prototype,dw=lw.toString;function fw(e){if(e!=null){try{return dw.call(e)}catch{}try{return e+""}catch{}}return""}Xp.exports=fw});var ec=u((nk,Zp)=>{"use strict";var mw=zr(),gw=Jp(),yw=Te(),hw=Io(),Aw=/[\\^$.*+?()[\]{}|]/g,bw=/^\[object .+?Constructor\]$/,Iw=Function.prototype,Sw=Object.prototype,ww=Iw.toString,Tw=Sw.hasOwnProperty,vw=RegExp("^"+ww.call(Tw).replace(Aw,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function Ew(e){if(!yw(e)||gw(e))return!1;var t=mw(e)?vw:bw;return t.test(hw(e))}Zp.exports=Ew});var rc=u((ok,tc)=>{"use strict";function Rw(e,t){return e?.[t]}tc.exports=Rw});var ft=u((sk,ac)=>{"use strict";var xw=ec(),_w=rc();function Ow(e,t){var r=_w(e,t);return xw(r)?r:void 0}ac.exports=Ow});var So=u((ik,nc)=>{"use strict";var Pw=ft(),Lw=function(){try{var e=Pw(Object,"defineProperty");return e({},"",{}),e}catch{}}();nc.exports=Lw});var ic=u((uk,sc)=>{"use strict";var Cw=Wp(),oc=So(),qw=Hr(),Uw=oc?function(e,t){return oc(e,"toString",{configurable:!0,enumerable:!1,value:Cw(t),writable:!0})}:qw;sc.exports=Uw});var wo=u((pk,uc)=>{"use strict";var Dw=800,Nw=16,Bw=Date.now;function Mw(e){var t=0,r=0;return function(){var a=Bw(),n=Nw-(a-r);if(r=a,n>0){if(++t>=Dw)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}uc.exports=Mw});var Ha=u((ck,pc)=>{"use strict";var Gw=ic(),kw=wo(),Fw=kw(Gw);pc.exports=Fw});var To=u((lk,cc)=>{"use strict";var Qw=Hr(),jw=Ao(),Ww=Ha();function $w(e,t){return Ww(jw(e,t,Qw),e+"")}cc.exports=$w});var Jr=u((dk,lc)=>{"use strict";var Kw=ft(),Vw=Kw(Object,"create");lc.exports=Vw});var mc=u((fk,fc)=>{"use strict";var dc=Jr();function Yw(){this.__data__=dc?dc(null):{},this.size=0}fc.exports=Yw});var yc=u((mk,gc)=>{"use strict";function Hw(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}gc.exports=Hw});var Ac=u((gk,hc)=>{"use strict";var zw=Jr(),Jw="__lodash_hash_undefined__",Xw=Object.prototype,Zw=Xw.hasOwnProperty;function eT(e){var t=this.__data__;if(zw){var r=t[e];return r===Jw?void 0:r}return Zw.call(t,e)?t[e]:void 0}hc.exports=eT});var Ic=u((yk,bc)=>{"use strict";var tT=Jr(),rT=Object.prototype,aT=rT.hasOwnProperty;function nT(e){var t=this.__data__;return tT?t[e]!==void 0:aT.call(t,e)}bc.exports=nT});var wc=u((hk,Sc)=>{"use strict";var oT=Jr(),sT="__lodash_hash_undefined__";function iT(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=oT&&t===void 0?sT:t,this}Sc.exports=iT});var vc=u((Ak,Tc)=>{"use strict";var uT=mc(),pT=yc(),cT=Ac(),lT=Ic(),dT=wc();function Vt(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var a=e[t];this.set(a[0],a[1])}}Vt.prototype.clear=uT;Vt.prototype.delete=pT;Vt.prototype.get=cT;Vt.prototype.has=lT;Vt.prototype.set=dT;Tc.exports=Vt});var Rc=u((bk,Ec)=>{"use strict";function fT(){this.__data__=[],this.size=0}Ec.exports=fT});var Yt=u((Ik,xc)=>{"use strict";function mT(e,t){return e===t||e!==e&&t!==t}xc.exports=mT});var Xr=u((Sk,_c)=>{"use strict";var gT=Yt();function yT(e,t){for(var r=e.length;r--;)if(gT(e[r][0],t))return r;return-1}_c.exports=yT});var Pc=u((wk,Oc)=>{"use strict";var hT=Xr(),AT=Array.prototype,bT=AT.splice;function IT(e){var t=this.__data__,r=hT(t,e);if(r<0)return!1;var a=t.length-1;return r==a?t.pop():bT.call(t,r,1),--this.size,!0}Oc.exports=IT});var Cc=u((Tk,Lc)=>{"use strict";var ST=Xr();function wT(e){var t=this.__data__,r=ST(t,e);return r<0?void 0:t[r][1]}Lc.exports=wT});var Uc=u((vk,qc)=>{"use strict";var TT=Xr();function vT(e){return TT(this.__data__,e)>-1}qc.exports=vT});var Nc=u((Ek,Dc)=>{"use strict";var ET=Xr();function RT(e,t){var r=this.__data__,a=ET(r,e);return a<0?(++this.size,r.push([e,t])):r[a][1]=t,this}Dc.exports=RT});var Zr=u((Rk,Bc)=>{"use strict";var xT=Rc(),_T=Pc(),OT=Cc(),PT=Uc(),LT=Nc();function Ht(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var a=e[t];this.set(a[0],a[1])}}Ht.prototype.clear=xT;Ht.prototype.delete=_T;Ht.prototype.get=OT;Ht.prototype.has=PT;Ht.prototype.set=LT;Bc.exports=Ht});var za=u((xk,Mc)=>{"use strict";var CT=ft(),qT=ne(),UT=CT(qT,"Map");Mc.exports=UT});var Fc=u((_k,kc)=>{"use strict";var Gc=vc(),DT=Zr(),NT=za();function BT(){this.size=0,this.__data__={hash:new Gc,map:new(NT||DT),string:new Gc}}kc.exports=BT});var jc=u((Ok,Qc)=>{"use strict";function MT(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}Qc.exports=MT});var ea=u((Pk,Wc)=>{"use strict";var GT=jc();function kT(e,t){var r=e.__data__;return GT(t)?r[typeof t=="string"?"string":"hash"]:r.map}Wc.exports=kT});var Kc=u((Lk,$c)=>{"use strict";var FT=ea();function QT(e){var t=FT(this,e).delete(e);return this.size-=t?1:0,t}$c.exports=QT});var Yc=u((Ck,Vc)=>{"use strict";var jT=ea();function WT(e){return jT(this,e).get(e)}Vc.exports=WT});var zc=u((qk,Hc)=>{"use strict";var $T=ea();function KT(e){return $T(this,e).has(e)}Hc.exports=KT});var Xc=u((Uk,Jc)=>{"use strict";var VT=ea();function YT(e,t){var r=VT(this,e),a=r.size;return r.set(e,t),this.size+=r.size==a?0:1,this}Jc.exports=YT});var Ja=u((Dk,Zc)=>{"use strict";var HT=Fc(),zT=Kc(),JT=Yc(),XT=zc(),ZT=Xc();function zt(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var a=e[t];this.set(a[0],a[1])}}zt.prototype.clear=HT;zt.prototype.delete=zT;zt.prototype.get=JT;zt.prototype.has=XT;zt.prototype.set=ZT;Zc.exports=zt});var tl=u((Nk,el)=>{"use strict";var ev="__lodash_hash_undefined__";function tv(e){return this.__data__.set(e,ev),this}el.exports=tv});var al=u((Bk,rl)=>{"use strict";function rv(e){return this.__data__.has(e)}rl.exports=rv});var vo=u((Mk,nl)=>{"use strict";var av=Ja(),nv=tl(),ov=al();function Xa(e){var t=-1,r=e==null?0:e.length;for(this.__data__=new av;++t<r;)this.add(e[t])}Xa.prototype.add=Xa.prototype.push=nv;Xa.prototype.has=ov;nl.exports=Xa});var sl=u((Gk,ol)=>{"use strict";function sv(e,t,r,a){for(var n=e.length,o=r+(a?1:-1);a?o--:++o<n;)if(t(e[o],o,e))return o;return-1}ol.exports=sv});var ul=u((kk,il)=>{"use strict";function iv(e){return e!==e}il.exports=iv});var cl=u((Fk,pl)=>{"use strict";function uv(e,t,r){for(var a=r-1,n=e.length;++a<n;)if(e[a]===t)return a;return-1}pl.exports=uv});var dl=u((Qk,ll)=>{"use strict";var pv=sl(),cv=ul(),lv=cl();function dv(e,t,r){return t===t?lv(e,t,r):pv(e,cv,r)}ll.exports=dv});var Eo=u((jk,fl)=>{"use strict";var fv=dl();function mv(e,t){var r=e==null?0:e.length;return!!r&&fv(e,t,0)>-1}fl.exports=mv});var gl=u((Wk,ml)=>{"use strict";function gv(e,t,r){for(var a=-1,n=e==null?0:e.length;++a<n;)if(r(t,e[a]))return!0;return!1}ml.exports=gv});var Ro=u(($k,yl)=>{"use strict";function yv(e,t){return e.has(t)}yl.exports=yv});var xo=u((Kk,hl)=>{"use strict";var hv=ft(),Av=ne(),bv=hv(Av,"Set");hl.exports=bv});var _o=u((Vk,Al)=>{"use strict";function Iv(){}Al.exports=Iv});var Za=u((Yk,bl)=>{"use strict";function Sv(e){var t=-1,r=Array(e.size);return e.forEach(function(a){r[++t]=a}),r}bl.exports=Sv});var Sl=u((Hk,Il)=>{"use strict";var Oo=xo(),wv=_o(),Tv=Za(),vv=1/0,Ev=Oo&&1/Tv(new Oo([,-0]))[1]==vv?function(e){return new Oo(e)}:wv;Il.exports=Ev});var Tl=u((zk,wl)=>{"use strict";var Rv=vo(),xv=Eo(),_v=gl(),Ov=Ro(),Pv=Sl(),Lv=Za(),Cv=200;function qv(e,t,r){var a=-1,n=xv,o=e.length,s=!0,i=[],p=i;if(r)s=!1,n=_v;else if(o>=Cv){var f=t?null:Pv(e);if(f)return Lv(f);s=!1,n=Ov,p=new Rv}else p=t?[]:i;e:for(;++a<o;){var m=e[a],y=t?t(m):m;if(m=r||m!==0?m:0,s&&y===y){for(var g=p.length;g--;)if(p[g]===y)continue e;t&&p.push(y),i.push(m)}else n(p,y,r)||(p!==i&&p.push(y),i.push(m))}return i}wl.exports=qv});var en=u((Jk,vl)=>{"use strict";var Uv=9007199254740991;function Dv(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=Uv}vl.exports=Dv});var Jt=u((Xk,El)=>{"use strict";var Nv=zr(),Bv=en();function Mv(e){return e!=null&&Bv(e.length)&&!Nv(e)}El.exports=Mv});var Po=u((Zk,Rl)=>{"use strict";var Gv=Jt(),kv=ge();function Fv(e){return kv(e)&&Gv(e)}Rl.exports=Fv});var _l=u((eF,xl)=>{"use strict";var Qv=ho(),jv=To(),Wv=Tl(),$v=Po(),Kv=jv(function(e){return Wv(Qv(e,1,$v,!0))});xl.exports=Kv});var Pl=u((tF,Ol)=>{"use strict";var Vv=Zr();function Yv(){this.__data__=new Vv,this.size=0}Ol.exports=Yv});var Cl=u((rF,Ll)=>{"use strict";function Hv(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r}Ll.exports=Hv});var Ul=u((aF,ql)=>{"use strict";function zv(e){return this.__data__.get(e)}ql.exports=zv});var Nl=u((nF,Dl)=>{"use strict";function Jv(e){return this.__data__.has(e)}Dl.exports=Jv});var Ml=u((oF,Bl)=>{"use strict";var Xv=Zr(),Zv=za(),eE=Ja(),tE=200;function rE(e,t){var r=this.__data__;if(r instanceof Xv){var a=r.__data__;if(!Zv||a.length<tE-1)return a.push([e,t]),this.size=++r.size,this;r=this.__data__=new eE(a)}return r.set(e,t),this.size=r.size,this}Bl.exports=rE});var ta=u((sF,Gl)=>{"use strict";var aE=Zr(),nE=Pl(),oE=Cl(),sE=Ul(),iE=Nl(),uE=Ml();function Xt(e){var t=this.__data__=new aE(e);this.size=t.size}Xt.prototype.clear=nE;Xt.prototype.delete=oE;Xt.prototype.get=sE;Xt.prototype.has=iE;Xt.prototype.set=uE;Gl.exports=Xt});var ra=u((iF,Fl)=>{"use strict";var kl=So();function pE(e,t,r){t=="__proto__"&&kl?kl(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}Fl.exports=pE});var Lo=u((uF,Ql)=>{"use strict";var cE=ra(),lE=Yt();function dE(e,t,r){(r!==void 0&&!lE(e[t],r)||r===void 0&&!(t in e))&&cE(e,t,r)}Ql.exports=dE});var Wl=u((pF,jl)=>{"use strict";function fE(e){return function(t,r,a){for(var n=-1,o=Object(t),s=a(t),i=s.length;i--;){var p=s[e?i:++n];if(r(o[p],p,o)===!1)break}return t}}jl.exports=fE});var Co=u((cF,$l)=>{"use strict";var mE=Wl(),gE=mE();$l.exports=gE});var qo=u((aa,Zt)=>{"use strict";var yE=ne(),Hl=typeof aa=="object"&&aa&&!aa.nodeType&&aa,Kl=Hl&&typeof Zt=="object"&&Zt&&!Zt.nodeType&&Zt,hE=Kl&&Kl.exports===Hl,Vl=hE?yE.Buffer:void 0,Yl=Vl?Vl.allocUnsafe:void 0;function AE(e,t){if(t)return e.slice();var r=e.length,a=Yl?Yl(r):new e.constructor(r);return e.copy(a),a}Zt.exports=AE});var Uo=u((lF,zl)=>{"use strict";var bE=ne(),IE=bE.Uint8Array;zl.exports=IE});var tn=u((dF,Xl)=>{"use strict";var Jl=Uo();function SE(e){var t=new e.constructor(e.byteLength);return new Jl(t).set(new Jl(e)),t}Xl.exports=SE});var Do=u((fF,Zl)=>{"use strict";var wE=tn();function TE(e,t){var r=t?wE(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.length)}Zl.exports=TE});var er=u((mF,ed)=>{"use strict";function vE(e,t){var r=-1,a=e.length;for(t||(t=Array(a));++r<a;)t[r]=e[r];return t}ed.exports=vE});var na=u((gF,rd)=>{"use strict";var EE=Te(),td=Object.create,RE=function(){function e(){}return function(t){if(!EE(t))return{};if(td)return td(t);e.prototype=t;var r=new e;return e.prototype=void 0,r}}();rd.exports=RE});var No=u((yF,ad)=>{"use strict";function xE(e,t){return function(r){return e(t(r))}}ad.exports=xE});var rn=u((hF,nd)=>{"use strict";var _E=No(),OE=_E(Object.getPrototypeOf,Object);nd.exports=OE});var an=u((AF,od)=>{"use strict";var PE=Object.prototype;function LE(e){var t=e&&e.constructor,r=typeof t=="function"&&t.prototype||PE;return e===r}od.exports=LE});var Bo=u((bF,sd)=>{"use strict";var CE=na(),qE=rn(),UE=an();function DE(e){return typeof e.constructor=="function"&&!UE(e)?CE(qE(e)):{}}sd.exports=DE});var ud=u((IF,id)=>{"use strict";function NE(){return!1}id.exports=NE});var sa=u((oa,tr)=>{"use strict";var BE=ne(),ME=ud(),ld=typeof oa=="object"&&oa&&!oa.nodeType&&oa,pd=ld&&typeof tr=="object"&&tr&&!tr.nodeType&&tr,GE=pd&&pd.exports===ld,cd=GE?BE.Buffer:void 0,kE=cd?cd.isBuffer:void 0,FE=kE||ME;tr.exports=FE});var Mo=u((SF,fd)=>{"use strict";var QE=dt(),jE=rn(),WE=ge(),$E="[object Object]",KE=Function.prototype,VE=Object.prototype,dd=KE.toString,YE=VE.hasOwnProperty,HE=dd.call(Object);function zE(e){if(!WE(e)||QE(e)!=$E)return!1;var t=jE(e);if(t===null)return!0;var r=YE.call(t,"constructor")&&t.constructor;return typeof r=="function"&&r instanceof r&&dd.call(r)==HE}fd.exports=zE});var gd=u((wF,md)=>{"use strict";var JE=dt(),XE=en(),ZE=ge(),eR="[object Arguments]",tR="[object Array]",rR="[object Boolean]",aR="[object Date]",nR="[object Error]",oR="[object Function]",sR="[object Map]",iR="[object Number]",uR="[object Object]",pR="[object RegExp]",cR="[object Set]",lR="[object String]",dR="[object WeakMap]",fR="[object ArrayBuffer]",mR="[object DataView]",gR="[object Float32Array]",yR="[object Float64Array]",hR="[object Int8Array]",AR="[object Int16Array]",bR="[object Int32Array]",IR="[object Uint8Array]",SR="[object Uint8ClampedArray]",wR="[object Uint16Array]",TR="[object Uint32Array]",B={};B[gR]=B[yR]=B[hR]=B[AR]=B[bR]=B[IR]=B[SR]=B[wR]=B[TR]=!0;B[eR]=B[tR]=B[fR]=B[rR]=B[mR]=B[aR]=B[nR]=B[oR]=B[sR]=B[iR]=B[uR]=B[pR]=B[cR]=B[lR]=B[dR]=!1;function vR(e){return ZE(e)&&XE(e.length)&&!!B[JE(e)]}md.exports=vR});var nn=u((TF,yd)=>{"use strict";function ER(e){return function(t){return e(t)}}yd.exports=ER});var on=u((ia,rr)=>{"use strict";var RR=yo(),hd=typeof ia=="object"&&ia&&!ia.nodeType&&ia,ua=hd&&typeof rr=="object"&&rr&&!rr.nodeType&&rr,xR=ua&&ua.exports===hd,Go=xR&&RR.process,_R=function(){try{var e=ua&&ua.require&&ua.require("util").types;return e||Go&&Go.binding&&Go.binding("util")}catch{}}();rr.exports=_R});var sn=u((vF,Id)=>{"use strict";var OR=gd(),PR=nn(),Ad=on(),bd=Ad&&Ad.isTypedArray,LR=bd?PR(bd):OR;Id.exports=LR});var ko=u((EF,Sd)=>{"use strict";function CR(e,t){if(!(t==="constructor"&&typeof e[t]=="function")&&t!="__proto__")return e[t]}Sd.exports=CR});var Fo=u((RF,wd)=>{"use strict";var qR=ra(),UR=Yt(),DR=Object.prototype,NR=DR.hasOwnProperty;function BR(e,t,r){var a=e[t];(!(NR.call(e,t)&&UR(a,r))||r===void 0&&!(t in e))&&qR(e,t,r)}wd.exports=BR});var ar=u((xF,Td)=>{"use strict";var MR=Fo(),GR=ra();function kR(e,t,r,a){var n=!r;r||(r={});for(var o=-1,s=t.length;++o<s;){var i=t[o],p=a?a(r[i],e[i],i,r,e):void 0;p===void 0&&(p=e[i]),n?GR(r,i,p):MR(r,i,p)}return r}Td.exports=kR});var Ed=u((_F,vd)=>{"use strict";function FR(e,t){for(var r=-1,a=Array(e);++r<e;)a[r]=t(r);return a}vd.exports=FR});var pa=u((OF,Rd)=>{"use strict";var QR=9007199254740991,jR=/^(?:0|[1-9]\d*)$/;function WR(e,t){var r=typeof e;return t=t??QR,!!t&&(r=="number"||r!="symbol"&&jR.test(e))&&e>-1&&e%1==0&&e<t}Rd.exports=WR});var Qo=u((PF,xd)=>{"use strict";var $R=Ed(),KR=Yr(),VR=ee(),YR=sa(),HR=pa(),zR=sn(),JR=Object.prototype,XR=JR.hasOwnProperty;function ZR(e,t){var r=VR(e),a=!r&&KR(e),n=!r&&!a&&YR(e),o=!r&&!a&&!n&&zR(e),s=r||a||n||o,i=s?$R(e.length,String):[],p=i.length;for(var f in e)(t||XR.call(e,f))&&!(s&&(f=="length"||n&&(f=="offset"||f=="parent")||o&&(f=="buffer"||f=="byteLength"||f=="byteOffset")||HR(f,p)))&&i.push(f);return i}xd.exports=ZR});var Od=u((LF,_d)=>{"use strict";function ex(e){var t=[];if(e!=null)for(var r in Object(e))t.push(r);return t}_d.exports=ex});var Ld=u((CF,Pd)=>{"use strict";var tx=Te(),rx=an(),ax=Od(),nx=Object.prototype,ox=nx.hasOwnProperty;function sx(e){if(!tx(e))return ax(e);var t=rx(e),r=[];for(var a in e)a=="constructor"&&(t||!ox.call(e,a))||r.push(a);return r}Pd.exports=sx});var nr=u((qF,Cd)=>{"use strict";var ix=Qo(),ux=Ld(),px=Jt();function cx(e){return px(e)?ix(e,!0):ux(e)}Cd.exports=cx});var Ud=u((UF,qd)=>{"use strict";var lx=ar(),dx=nr();function fx(e){return lx(e,dx(e))}qd.exports=fx});var kd=u((DF,Gd)=>{"use strict";var Dd=Lo(),mx=qo(),gx=Do(),yx=er(),hx=Bo(),Nd=Yr(),Bd=ee(),Ax=Po(),bx=sa(),Ix=zr(),Sx=Te(),wx=Mo(),Tx=sn(),Md=ko(),vx=Ud();function Ex(e,t,r,a,n,o,s){var i=Md(e,r),p=Md(t,r),f=s.get(p);if(f){Dd(e,r,f);return}var m=o?o(i,p,r+"",e,t,s):void 0,y=m===void 0;if(y){var g=Bd(p),S=!g&&bx(p),P=!g&&!S&&Tx(p);m=p,g||S||P?Bd(i)?m=i:Ax(i)?m=yx(i):S?(y=!1,m=mx(p,!0)):P?(y=!1,m=gx(p,!0)):m=[]:wx(p)||Nd(p)?(m=i,Nd(i)?m=vx(i):(!Sx(i)||Ix(i))&&(m=hx(p))):y=!1}y&&(s.set(p,m),n(m,p,a,o,s),s.delete(p)),Dd(e,r,m)}Gd.exports=Ex});var jd=u((NF,Qd)=>{"use strict";var Rx=ta(),xx=Lo(),_x=Co(),Ox=kd(),Px=Te(),Lx=nr(),Cx=ko();function Fd(e,t,r,a,n){e!==t&&_x(t,function(o,s){if(n||(n=new Rx),Px(o))Ox(e,t,s,r,Fd,a,n);else{var i=a?a(Cx(e,s),o,s+"",e,t,n):void 0;i===void 0&&(i=o),xx(e,s,i)}},Lx)}Qd.exports=Fd});var $d=u((BF,Wd)=>{"use strict";var qx=Yt(),Ux=Jt(),Dx=pa(),Nx=Te();function Bx(e,t,r){if(!Nx(r))return!1;var a=typeof t;return(a=="number"?Ux(r)&&Dx(t,r.length):a=="string"&&t in r)?qx(r[t],e):!1}Wd.exports=Bx});var Vd=u((MF,Kd)=>{"use strict";var Mx=To(),Gx=$d();function kx(e){return Mx(function(t,r){var a=-1,n=r.length,o=n>1?r[n-1]:void 0,s=n>2?r[2]:void 0;for(o=e.length>3&&typeof o=="function"?(n--,o):void 0,s&&Gx(r[0],r[1],s)&&(o=n<3?void 0:o,n=1),t=Object(t);++a<n;){var i=r[a];i&&e(t,i,a,o)}return t})}Kd.exports=kx});var jo=u((GF,Yd)=>{"use strict";var Fx=jd(),Qx=Vd(),jx=Qx(function(e,t,r){Fx(e,t,r)});Yd.exports=jx});var zf=u(le=>{"use strict";le.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"};le.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"]};le.aryRearg={2:[1,0],3:[2,0,1],4:[3,2,0,1]};le.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};le.iterateeRearg={mapKeys:[1],reduceRight:[1,0]};le.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]};le.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}};le.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}};le.realToAlias=function(){var e=Object.prototype.hasOwnProperty,t=le.aliasToReal,r={};for(var a in t){var n=t[a];e.call(r,n)?r[n].push(a):r[n]=[a]}return r}();le.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"};le.skipFixed={castArray:!0,flow:!0,flowRight:!0,iteratee:!0,mixin:!0,rearg:!0,runInContext:!0};le.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 Gs=u((ij,Jf)=>{"use strict";Jf.exports={}});var tm=u((uj,em)=>{"use strict";var J=zf(),wO=Gs(),Xf=Array.prototype.push;function TO(e,t){return t==2?function(r,a){return e.apply(void 0,arguments)}:function(r){return e.apply(void 0,arguments)}}function ks(e,t){return t==2?function(r,a){return e(r,a)}:function(r){return e(r)}}function Zf(e){for(var t=e?e.length:0,r=Array(t);t--;)r[t]=e[t];return r}function vO(e){return function(t){return e({},t)}}function EO(e,t){return function(){for(var r=arguments.length,a=r-1,n=Array(r);r--;)n[r]=arguments[r];var o=n[t],s=n.slice(0,t);return o&&Xf.apply(s,o),t!=a&&Xf.apply(s,n.slice(t+1)),e.apply(this,s)}}function Fs(e,t){return function(){var r=arguments.length;if(r){for(var a=Array(r);r--;)a[r]=arguments[r];var n=a[0]=t.apply(void 0,a);return e.apply(void 0,a),n}}}function Qs(e,t,r,a){var n=typeof t=="function",o=t===Object(t);if(o&&(a=r,r=t,t=void 0),r==null)throw new TypeError;a||(a={});var s={cap:"cap"in a?a.cap:!0,curry:"curry"in a?a.curry:!0,fixed:"fixed"in a?a.fixed:!0,immutable:"immutable"in a?a.immutable:!0,rearg:"rearg"in a?a.rearg:!0},i=n?r:wO,p="curry"in a&&a.curry,f="fixed"in a&&a.fixed,m="rearg"in a&&a.rearg,y=n?r.runInContext():void 0,g=n?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=g.ary,P=g.assign,x=g.clone,R=g.curry,E=g.forEach,q=g.isArray,xe=g.isError,be=g.isFunction,it=g.isWeakMap,kt=g.keys,Ir=g.rearg,Sr=g.toInteger,oI=g.toPath,Su=kt(J.aryMethod),sI={castArray:function(I){return function(){var h=arguments[0];return q(h)?I(Zf(h)):I.apply(void 0,arguments)}},iteratee:function(I){return function(){var h=arguments[0],b=arguments[1],v=I(h,b),O=v.length;return s.cap&&typeof b=="number"?(b=b>2?b-2:1,O&&O<=b?v:ks(v,b)):v}},mixin:function(I){return function(h){var b=this;if(!be(b))return I(b,Object(h));var v=[];return E(kt(h),function(O){be(h[O])&&v.push([O,b.prototype[O]])}),I(b,Object(h)),E(v,function(O){var te=O[1];be(te)?b.prototype[O[0]]=te:delete b.prototype[O[0]]}),b}},nthArg:function(I){return function(h){var b=h<0?1:Sr(h)+1;return R(I(h),b)}},rearg:function(I){return function(h,b){var v=b?b.length:0;return R(I(h,b),v)}},runInContext:function(I){return function(h){return Qs(e,I(h),a)}}};function iI(I,h){if(s.cap){var b=J.iterateeRearg[I];if(b)return dI(h,b);var v=!n&&J.iterateeAry[I];if(v)return lI(h,v)}return h}function uI(I,h,b){return p||s.curry&&b>1?R(h,b):h}function wu(I,h,b){if(s.fixed&&(f||!J.skipFixed[I])){var v=J.methodSpread[I],O=v&&v.start;return O===void 0?S(h,b):EO(h,O)}return h}function Tu(I,h,b){return s.rearg&&b>1&&(m||!J.skipRearg[I])?Ir(h,J.methodRearg[I]||J.aryRearg[b]):h}function pI(I,h){h=oI(h);for(var b=-1,v=h.length,O=v-1,te=x(Object(I)),Ne=te;Ne!=null&&++b<v;){var Ie=h[b],Be=Ne[Ie];Be!=null&&!(be(Be)||xe(Be)||it(Be))&&(Ne[Ie]=x(b==O?Be:Object(Be))),Ne=Ne[Ie]}return te}function cI(I){return fe.runInContext.convert(I)(void 0)}function vu(I,h){var b=J.aliasToReal[I]||I,v=J.remap[b]||b,O=a;return function(te){var Ne=n?y:g,Ie=n?y[v]:h,Be=P(P({},O),te);return Qs(Ne,b,Ie,Be)}}function lI(I,h){return Eu(I,function(b){return typeof b=="function"?ks(b,h):b})}function dI(I,h){return Eu(I,function(b){var v=h.length;return TO(Ir(ks(b,v),h),v)})}function Eu(I,h){return function(){var b=arguments.length;if(!b)return I();for(var v=Array(b);b--;)v[b]=arguments[b];var O=s.rearg?0:b-1;return v[O]=h(v[O]),I.apply(void 0,v)}}function Ru(I,h,b){var v,O=J.aliasToReal[I]||I,te=h,Ne=sI[O];return Ne?te=Ne(h):s.immutable&&(J.mutate.array[O]?te=Fs(h,Zf):J.mutate.object[O]?te=Fs(h,vO(h)):J.mutate.set[O]&&(te=Fs(h,pI))),E(Su,function(Ie){return E(J.aryMethod[Ie],function(Be){if(O==Be){var xu=J.methodSpread[O],fI=xu&&xu.afterRearg;return v=fI?wu(O,Tu(O,te,Ie),Ie):Tu(O,wu(O,te,Ie),Ie),v=iI(O,v),v=uI(O,v,Ie),!1}}),!v}),v||(v=te),v==h&&(v=p?R(v,1):function(){return h.apply(this,arguments)}),v.convert=vu(O,h),v.placeholder=h.placeholder=b,v}if(!o)return Ru(t,r,i);var fe=r,wr=[];return E(Su,function(I){E(J.aryMethod[I],function(h){var b=fe[J.remap[h]||h];b&&wr.push([h,Ru(h,b,fe)])})}),E(kt(fe),function(I){var h=fe[I];if(typeof h=="function"){for(var b=wr.length;b--;)if(wr[b][0]==I)return;h.convert=vu(I,h),wr.push([I,h])}}),E(wr,function(I){fe[I[0]]=I[1]}),fe.convert=cI,fe.placeholder=fe,E(kt(fe),function(I){E(J.realToAlias[I]||[],function(h){fe[h]=fe[I]})}),fe}em.exports=Qs});var Ws=u((pj,rm)=>{"use strict";var RO=ft(),xO=ne(),_O=RO(xO,"WeakMap");rm.exports=_O});var $s=u((cj,nm)=>{"use strict";var am=Ws(),OO=am&&new am;nm.exports=OO});var Ks=u((lj,sm)=>{"use strict";var PO=Hr(),om=$s(),LO=om?function(e,t){return om.set(e,t),e}:PO;sm.exports=LO});var Ia=u((dj,im)=>{"use strict";var CO=na(),qO=Te();function UO(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=CO(e.prototype),a=e.apply(r,t);return qO(a)?a:r}}im.exports=UO});var pm=u((fj,um)=>{"use strict";var DO=Ia(),NO=ne(),BO=1;function MO(e,t,r){var a=t&BO,n=DO(e);function o(){var s=this&&this!==NO&&this instanceof o?n:e;return s.apply(a?r:this,arguments)}return o}um.exports=MO});var Vs=u((mj,cm)=>{"use strict";var GO=Math.max;function kO(e,t,r,a){for(var n=-1,o=e.length,s=r.length,i=-1,p=t.length,f=GO(o-s,0),m=Array(p+f),y=!a;++i<p;)m[i]=t[i];for(;++n<s;)(y||n<o)&&(m[r[n]]=e[n]);for(;f--;)m[i++]=e[n++];return m}cm.exports=kO});var Ys=u((gj,lm)=>{"use strict";var FO=Math.max;function QO(e,t,r,a){for(var n=-1,o=e.length,s=-1,i=r.length,p=-1,f=t.length,m=FO(o-i,0),y=Array(m+f),g=!a;++n<m;)y[n]=e[n];for(var S=n;++p<f;)y[S+p]=t[p];for(;++s<i;)(g||n<o)&&(y[S+r[s]]=e[n++]);return y}lm.exports=QO});var fm=u((yj,dm)=>{"use strict";function jO(e,t){for(var r=e.length,a=0;r--;)e[r]===t&&++a;return a}dm.exports=jO});var Rn=u((hj,mm)=>{"use strict";function WO(){}mm.exports=WO});var _n=u((Aj,gm)=>{"use strict";var $O=na(),KO=Rn(),VO=4294967295;function xn(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=VO,this.__views__=[]}xn.prototype=$O(KO.prototype);xn.prototype.constructor=xn;gm.exports=xn});var Hs=u((bj,hm)=>{"use strict";var ym=$s(),YO=_o(),HO=ym?function(e){return ym.get(e)}:YO;hm.exports=HO});var bm=u((Ij,Am)=>{"use strict";var zO={};Am.exports=zO});var wm=u((Sj,Sm)=>{"use strict";var Im=bm(),JO=Object.prototype,XO=JO.hasOwnProperty;function ZO(e){for(var t=e.name+"",r=Im[t],a=XO.call(Im,t)?r.length:0;a--;){var n=r[a],o=n.func;if(o==null||o==e)return n.name}return t}Sm.exports=ZO});var zs=u((wj,Tm)=>{"use strict";var eP=na(),tP=Rn();function On(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=void 0}On.prototype=eP(tP.prototype);On.prototype.constructor=On;Tm.exports=On});var Em=u((Tj,vm)=>{"use strict";var rP=_n(),aP=zs(),nP=er();function oP(e){if(e instanceof rP)return e.clone();var t=new aP(e.__wrapped__,e.__chain__);return t.__actions__=nP(e.__actions__),t.__index__=e.__index__,t.__values__=e.__values__,t}vm.exports=oP});var _m=u((vj,xm)=>{"use strict";var sP=_n(),Rm=zs(),iP=Rn(),uP=ee(),pP=ge(),cP=Em(),lP=Object.prototype,dP=lP.hasOwnProperty;function Pn(e){if(pP(e)&&!uP(e)&&!(e instanceof sP)){if(e instanceof Rm)return e;if(dP.call(e,"__wrapped__"))return cP(e)}return new Rm(e)}Pn.prototype=iP.prototype;Pn.prototype.constructor=Pn;xm.exports=Pn});var Pm=u((Ej,Om)=>{"use strict";var fP=_n(),mP=Hs(),gP=wm(),yP=_m();function hP(e){var t=gP(e),r=yP[t];if(typeof r!="function"||!(t in fP.prototype))return!1;if(e===r)return!0;var a=mP(r);return!!a&&e===a[0]}Om.exports=hP});var Js=u((Rj,Lm)=>{"use strict";var AP=Ks(),bP=wo(),IP=bP(AP);Lm.exports=IP});var qm=u((xj,Cm)=>{"use strict";var SP=/\{\n\/\* \[wrapped with (.+)\] \*/,wP=/,? & /;function TP(e){var t=e.match(SP);return t?t[1].split(wP):[]}Cm.exports=TP});var Dm=u((_j,Um)=>{"use strict";var vP=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/;function EP(e,t){var r=t.length;if(!r)return e;var a=r-1;return t[a]=(r>1?"& ":"")+t[a],t=t.join(r>2?", ":" "),e.replace(vP,`{
1
+ "use strict";var vI=Object.create;var qa=Object.defineProperty;var EI=Object.getOwnPropertyDescriptor;var RI=Object.getOwnPropertyNames;var _I=Object.getPrototypeOf,xI=Object.prototype.hasOwnProperty;var u=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),w=(e,t)=>{for(var r in t)qa(e,r,{get:t[r],enumerable:!0})},Nu=(e,t,r,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of RI(t))!xI.call(e,n)&&n!==r&&qa(e,n,{get:()=>t[n],enumerable:!(a=EI(t,n))||a.enumerable});return e};var P=(e,t,r)=>(r=e!=null?vI(_I(e)):{},Nu(t||!e||!e.__esModule?qa(r,"default",{value:e,enumerable:!0}):r,e)),CI=e=>Nu(qa({},"__esModule",{value:!0}),e);var za=u((Yk,Sp)=>{"use strict";function RS(e,t){for(var r=-1,a=t.length,n=e.length;++r<a;)e[n+r]=t[r];return e}Sp.exports=RS});var vo=u((Hk,wp)=>{"use strict";var _S=typeof global=="object"&&global&&global.Object===Object&&global;wp.exports=_S});var oe=u((zk,Tp)=>{"use strict";var xS=vo(),CS=typeof self=="object"&&self&&self.Object===Object&&self,OS=xS||CS||Function("return this")();Tp.exports=OS});var xt=u((Jk,vp)=>{"use strict";var LS=oe(),PS=LS.Symbol;vp.exports=PS});var xp=u((Xk,_p)=>{"use strict";var Ep=xt(),Rp=Object.prototype,US=Rp.hasOwnProperty,qS=Rp.toString,Hr=Ep?Ep.toStringTag:void 0;function DS(e){var t=US.call(e,Hr),r=e[Hr];try{e[Hr]=void 0;var a=!0}catch{}var n=qS.call(e);return a&&(t?e[Hr]=r:delete e[Hr]),n}_p.exports=DS});var Op=u((Zk,Cp)=>{"use strict";var NS=Object.prototype,BS=NS.toString;function MS(e){return BS.call(e)}Cp.exports=MS});var mt=u((e0,Up)=>{"use strict";var Lp=xt(),GS=xp(),kS=Op(),FS="[object Null]",QS="[object Undefined]",Pp=Lp?Lp.toStringTag:void 0;function jS(e){return e==null?e===void 0?QS:FS:Pp&&Pp in Object(e)?GS(e):kS(e)}Up.exports=jS});var he=u((t0,qp)=>{"use strict";function WS(e){return e!=null&&typeof e=="object"}qp.exports=WS});var Np=u((r0,Dp)=>{"use strict";var $S=mt(),KS=he(),VS="[object Arguments]";function YS(e){return KS(e)&&$S(e)==VS}Dp.exports=YS});var zr=u((a0,Gp)=>{"use strict";var Bp=Np(),HS=he(),Mp=Object.prototype,zS=Mp.hasOwnProperty,JS=Mp.propertyIsEnumerable,XS=Bp(function(){return arguments}())?Bp:function(e){return HS(e)&&zS.call(e,"callee")&&!JS.call(e,"callee")};Gp.exports=XS});var re=u((n0,kp)=>{"use strict";var ZS=Array.isArray;kp.exports=ZS});var Wp=u((o0,jp)=>{"use strict";var Fp=xt(),ew=zr(),tw=re(),Qp=Fp?Fp.isConcatSpreadable:void 0;function rw(e){return tw(e)||ew(e)||!!(Qp&&e&&e[Qp])}jp.exports=rw});var Eo=u((s0,Kp)=>{"use strict";var aw=za(),nw=Wp();function $p(e,t,r,a,n){var o=-1,s=e.length;for(r||(r=nw),n||(n=[]);++o<s;){var i=e[o];t>0&&r(i)?t>1?$p(i,t-1,r,a,n):aw(n,i):a||(n[n.length]=i)}return n}Kp.exports=$p});var Jr=u((i0,Vp)=>{"use strict";function ow(e){return e}Vp.exports=ow});var Ja=u((u0,Yp)=>{"use strict";function sw(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)}Yp.exports=sw});var Ro=u((p0,zp)=>{"use strict";var iw=Ja(),Hp=Math.max;function uw(e,t,r){return t=Hp(t===void 0?e.length-1:t,0),function(){for(var a=arguments,n=-1,o=Hp(a.length-t,0),s=Array(o);++n<o;)s[n]=a[t+n];n=-1;for(var i=Array(t+1);++n<t;)i[n]=a[n];return i[t]=r(s),iw(e,this,i)}}zp.exports=uw});var Xp=u((c0,Jp)=>{"use strict";function pw(e){return function(){return e}}Jp.exports=pw});var Ee=u((l0,Zp)=>{"use strict";function cw(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}Zp.exports=cw});var Xr=u((d0,ec)=>{"use strict";var lw=mt(),dw=Ee(),fw="[object AsyncFunction]",mw="[object Function]",gw="[object GeneratorFunction]",hw="[object Proxy]";function yw(e){if(!dw(e))return!1;var t=lw(e);return t==mw||t==gw||t==fw||t==hw}ec.exports=yw});var rc=u((f0,tc)=>{"use strict";var Aw=oe(),bw=Aw["__core-js_shared__"];tc.exports=bw});var oc=u((m0,nc)=>{"use strict";var _o=rc(),ac=function(){var e=/[^.]+$/.exec(_o&&_o.keys&&_o.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function Iw(e){return!!ac&&ac in e}nc.exports=Iw});var xo=u((g0,sc)=>{"use strict";var Sw=Function.prototype,ww=Sw.toString;function Tw(e){if(e!=null){try{return ww.call(e)}catch{}try{return e+""}catch{}}return""}sc.exports=Tw});var uc=u((h0,ic)=>{"use strict";var vw=Xr(),Ew=oc(),Rw=Ee(),_w=xo(),xw=/[\\^$.*+?()[\]{}|]/g,Cw=/^\[object .+?Constructor\]$/,Ow=Function.prototype,Lw=Object.prototype,Pw=Ow.toString,Uw=Lw.hasOwnProperty,qw=RegExp("^"+Pw.call(Uw).replace(xw,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function Dw(e){if(!Rw(e)||Ew(e))return!1;var t=vw(e)?qw:Cw;return t.test(_w(e))}ic.exports=Dw});var cc=u((y0,pc)=>{"use strict";function Nw(e,t){return e?.[t]}pc.exports=Nw});var gt=u((A0,lc)=>{"use strict";var Bw=uc(),Mw=cc();function Gw(e,t){var r=Mw(e,t);return Bw(r)?r:void 0}lc.exports=Gw});var Co=u((b0,dc)=>{"use strict";var kw=gt(),Fw=function(){try{var e=kw(Object,"defineProperty");return e({},"",{}),e}catch{}}();dc.exports=Fw});var gc=u((I0,mc)=>{"use strict";var Qw=Xp(),fc=Co(),jw=Jr(),Ww=fc?function(e,t){return fc(e,"toString",{configurable:!0,enumerable:!1,value:Qw(t),writable:!0})}:jw;mc.exports=Ww});var Oo=u((S0,hc)=>{"use strict";var $w=800,Kw=16,Vw=Date.now;function Yw(e){var t=0,r=0;return function(){var a=Vw(),n=Kw-(a-r);if(r=a,n>0){if(++t>=$w)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}hc.exports=Yw});var Xa=u((w0,yc)=>{"use strict";var Hw=gc(),zw=Oo(),Jw=zw(Hw);yc.exports=Jw});var Lo=u((T0,Ac)=>{"use strict";var Xw=Jr(),Zw=Ro(),eT=Xa();function tT(e,t){return eT(Zw(e,t,Xw),e+"")}Ac.exports=tT});var Zr=u((v0,bc)=>{"use strict";var rT=gt(),aT=rT(Object,"create");bc.exports=aT});var wc=u((E0,Sc)=>{"use strict";var Ic=Zr();function nT(){this.__data__=Ic?Ic(null):{},this.size=0}Sc.exports=nT});var vc=u((R0,Tc)=>{"use strict";function oT(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}Tc.exports=oT});var Rc=u((_0,Ec)=>{"use strict";var sT=Zr(),iT="__lodash_hash_undefined__",uT=Object.prototype,pT=uT.hasOwnProperty;function cT(e){var t=this.__data__;if(sT){var r=t[e];return r===iT?void 0:r}return pT.call(t,e)?t[e]:void 0}Ec.exports=cT});var xc=u((x0,_c)=>{"use strict";var lT=Zr(),dT=Object.prototype,fT=dT.hasOwnProperty;function mT(e){var t=this.__data__;return lT?t[e]!==void 0:fT.call(t,e)}_c.exports=mT});var Oc=u((C0,Cc)=>{"use strict";var gT=Zr(),hT="__lodash_hash_undefined__";function yT(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=gT&&t===void 0?hT:t,this}Cc.exports=yT});var Pc=u((O0,Lc)=>{"use strict";var AT=wc(),bT=vc(),IT=Rc(),ST=xc(),wT=Oc();function Yt(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var a=e[t];this.set(a[0],a[1])}}Yt.prototype.clear=AT;Yt.prototype.delete=bT;Yt.prototype.get=IT;Yt.prototype.has=ST;Yt.prototype.set=wT;Lc.exports=Yt});var qc=u((L0,Uc)=>{"use strict";function TT(){this.__data__=[],this.size=0}Uc.exports=TT});var Ht=u((P0,Dc)=>{"use strict";function vT(e,t){return e===t||e!==e&&t!==t}Dc.exports=vT});var ea=u((U0,Nc)=>{"use strict";var ET=Ht();function RT(e,t){for(var r=e.length;r--;)if(ET(e[r][0],t))return r;return-1}Nc.exports=RT});var Mc=u((q0,Bc)=>{"use strict";var _T=ea(),xT=Array.prototype,CT=xT.splice;function OT(e){var t=this.__data__,r=_T(t,e);if(r<0)return!1;var a=t.length-1;return r==a?t.pop():CT.call(t,r,1),--this.size,!0}Bc.exports=OT});var kc=u((D0,Gc)=>{"use strict";var LT=ea();function PT(e){var t=this.__data__,r=LT(t,e);return r<0?void 0:t[r][1]}Gc.exports=PT});var Qc=u((N0,Fc)=>{"use strict";var UT=ea();function qT(e){return UT(this.__data__,e)>-1}Fc.exports=qT});var Wc=u((B0,jc)=>{"use strict";var DT=ea();function NT(e,t){var r=this.__data__,a=DT(r,e);return a<0?(++this.size,r.push([e,t])):r[a][1]=t,this}jc.exports=NT});var ta=u((M0,$c)=>{"use strict";var BT=qc(),MT=Mc(),GT=kc(),kT=Qc(),FT=Wc();function zt(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var a=e[t];this.set(a[0],a[1])}}zt.prototype.clear=BT;zt.prototype.delete=MT;zt.prototype.get=GT;zt.prototype.has=kT;zt.prototype.set=FT;$c.exports=zt});var Za=u((G0,Kc)=>{"use strict";var QT=gt(),jT=oe(),WT=QT(jT,"Map");Kc.exports=WT});var Hc=u((k0,Yc)=>{"use strict";var Vc=Pc(),$T=ta(),KT=Za();function VT(){this.size=0,this.__data__={hash:new Vc,map:new(KT||$T),string:new Vc}}Yc.exports=VT});var Jc=u((F0,zc)=>{"use strict";function YT(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}zc.exports=YT});var ra=u((Q0,Xc)=>{"use strict";var HT=Jc();function zT(e,t){var r=e.__data__;return HT(t)?r[typeof t=="string"?"string":"hash"]:r.map}Xc.exports=zT});var el=u((j0,Zc)=>{"use strict";var JT=ra();function XT(e){var t=JT(this,e).delete(e);return this.size-=t?1:0,t}Zc.exports=XT});var rl=u((W0,tl)=>{"use strict";var ZT=ra();function ev(e){return ZT(this,e).get(e)}tl.exports=ev});var nl=u(($0,al)=>{"use strict";var tv=ra();function rv(e){return tv(this,e).has(e)}al.exports=rv});var sl=u((K0,ol)=>{"use strict";var av=ra();function nv(e,t){var r=av(this,e),a=r.size;return r.set(e,t),this.size+=r.size==a?0:1,this}ol.exports=nv});var en=u((V0,il)=>{"use strict";var ov=Hc(),sv=el(),iv=rl(),uv=nl(),pv=sl();function Jt(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var a=e[t];this.set(a[0],a[1])}}Jt.prototype.clear=ov;Jt.prototype.delete=sv;Jt.prototype.get=iv;Jt.prototype.has=uv;Jt.prototype.set=pv;il.exports=Jt});var pl=u((Y0,ul)=>{"use strict";var cv="__lodash_hash_undefined__";function lv(e){return this.__data__.set(e,cv),this}ul.exports=lv});var ll=u((H0,cl)=>{"use strict";function dv(e){return this.__data__.has(e)}cl.exports=dv});var Po=u((z0,dl)=>{"use strict";var fv=en(),mv=pl(),gv=ll();function tn(e){var t=-1,r=e==null?0:e.length;for(this.__data__=new fv;++t<r;)this.add(e[t])}tn.prototype.add=tn.prototype.push=mv;tn.prototype.has=gv;dl.exports=tn});var ml=u((J0,fl)=>{"use strict";function hv(e,t,r,a){for(var n=e.length,o=r+(a?1:-1);a?o--:++o<n;)if(t(e[o],o,e))return o;return-1}fl.exports=hv});var hl=u((X0,gl)=>{"use strict";function yv(e){return e!==e}gl.exports=yv});var Al=u((Z0,yl)=>{"use strict";function Av(e,t,r){for(var a=r-1,n=e.length;++a<n;)if(e[a]===t)return a;return-1}yl.exports=Av});var Il=u((eF,bl)=>{"use strict";var bv=ml(),Iv=hl(),Sv=Al();function wv(e,t,r){return t===t?Sv(e,t,r):bv(e,Iv,r)}bl.exports=wv});var Uo=u((tF,Sl)=>{"use strict";var Tv=Il();function vv(e,t){var r=e==null?0:e.length;return!!r&&Tv(e,t,0)>-1}Sl.exports=vv});var Tl=u((rF,wl)=>{"use strict";function Ev(e,t,r){for(var a=-1,n=e==null?0:e.length;++a<n;)if(r(t,e[a]))return!0;return!1}wl.exports=Ev});var qo=u((aF,vl)=>{"use strict";function Rv(e,t){return e.has(t)}vl.exports=Rv});var Do=u((nF,El)=>{"use strict";var _v=gt(),xv=oe(),Cv=_v(xv,"Set");El.exports=Cv});var No=u((oF,Rl)=>{"use strict";function Ov(){}Rl.exports=Ov});var rn=u((sF,_l)=>{"use strict";function Lv(e){var t=-1,r=Array(e.size);return e.forEach(function(a){r[++t]=a}),r}_l.exports=Lv});var Cl=u((iF,xl)=>{"use strict";var Bo=Do(),Pv=No(),Uv=rn(),qv=1/0,Dv=Bo&&1/Uv(new Bo([,-0]))[1]==qv?function(e){return new Bo(e)}:Pv;xl.exports=Dv});var Ll=u((uF,Ol)=>{"use strict";var Nv=Po(),Bv=Uo(),Mv=Tl(),Gv=qo(),kv=Cl(),Fv=rn(),Qv=200;function jv(e,t,r){var a=-1,n=Bv,o=e.length,s=!0,i=[],p=i;if(r)s=!1,n=Mv;else if(o>=Qv){var m=t?null:kv(e);if(m)return Fv(m);s=!1,n=Gv,p=new Nv}else p=t?[]:i;e:for(;++a<o;){var f=e[a],h=t?t(f):f;if(f=r||f!==0?f:0,s&&h===h){for(var g=p.length;g--;)if(p[g]===h)continue e;t&&p.push(h),i.push(f)}else n(p,h,r)||(p!==i&&p.push(h),i.push(f))}return i}Ol.exports=jv});var an=u((pF,Pl)=>{"use strict";var Wv=9007199254740991;function $v(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=Wv}Pl.exports=$v});var Xt=u((cF,Ul)=>{"use strict";var Kv=Xr(),Vv=an();function Yv(e){return e!=null&&Vv(e.length)&&!Kv(e)}Ul.exports=Yv});var Mo=u((lF,ql)=>{"use strict";var Hv=Xt(),zv=he();function Jv(e){return zv(e)&&Hv(e)}ql.exports=Jv});var Nl=u((dF,Dl)=>{"use strict";var Xv=Eo(),Zv=Lo(),eE=Ll(),tE=Mo(),rE=Zv(function(e){return eE(Xv(e,1,tE,!0))});Dl.exports=rE});var Ml=u((fF,Bl)=>{"use strict";var aE=ta();function nE(){this.__data__=new aE,this.size=0}Bl.exports=nE});var kl=u((mF,Gl)=>{"use strict";function oE(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r}Gl.exports=oE});var Ql=u((gF,Fl)=>{"use strict";function sE(e){return this.__data__.get(e)}Fl.exports=sE});var Wl=u((hF,jl)=>{"use strict";function iE(e){return this.__data__.has(e)}jl.exports=iE});var Kl=u((yF,$l)=>{"use strict";var uE=ta(),pE=Za(),cE=en(),lE=200;function dE(e,t){var r=this.__data__;if(r instanceof uE){var a=r.__data__;if(!pE||a.length<lE-1)return a.push([e,t]),this.size=++r.size,this;r=this.__data__=new cE(a)}return r.set(e,t),this.size=r.size,this}$l.exports=dE});var aa=u((AF,Vl)=>{"use strict";var fE=ta(),mE=Ml(),gE=kl(),hE=Ql(),yE=Wl(),AE=Kl();function Zt(e){var t=this.__data__=new fE(e);this.size=t.size}Zt.prototype.clear=mE;Zt.prototype.delete=gE;Zt.prototype.get=hE;Zt.prototype.has=yE;Zt.prototype.set=AE;Vl.exports=Zt});var na=u((bF,Hl)=>{"use strict";var Yl=Co();function bE(e,t,r){t=="__proto__"&&Yl?Yl(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}Hl.exports=bE});var Go=u((IF,zl)=>{"use strict";var IE=na(),SE=Ht();function wE(e,t,r){(r!==void 0&&!SE(e[t],r)||r===void 0&&!(t in e))&&IE(e,t,r)}zl.exports=wE});var Xl=u((SF,Jl)=>{"use strict";function TE(e){return function(t,r,a){for(var n=-1,o=Object(t),s=a(t),i=s.length;i--;){var p=s[e?i:++n];if(r(o[p],p,o)===!1)break}return t}}Jl.exports=TE});var ko=u((wF,Zl)=>{"use strict";var vE=Xl(),EE=vE();Zl.exports=EE});var Fo=u((oa,er)=>{"use strict";var RE=oe(),ad=typeof oa=="object"&&oa&&!oa.nodeType&&oa,ed=ad&&typeof er=="object"&&er&&!er.nodeType&&er,_E=ed&&ed.exports===ad,td=_E?RE.Buffer:void 0,rd=td?td.allocUnsafe:void 0;function xE(e,t){if(t)return e.slice();var r=e.length,a=rd?rd(r):new e.constructor(r);return e.copy(a),a}er.exports=xE});var Qo=u((TF,nd)=>{"use strict";var CE=oe(),OE=CE.Uint8Array;nd.exports=OE});var nn=u((vF,sd)=>{"use strict";var od=Qo();function LE(e){var t=new e.constructor(e.byteLength);return new od(t).set(new od(e)),t}sd.exports=LE});var jo=u((EF,id)=>{"use strict";var PE=nn();function UE(e,t){var r=t?PE(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.length)}id.exports=UE});var tr=u((RF,ud)=>{"use strict";function qE(e,t){var r=-1,a=e.length;for(t||(t=Array(a));++r<a;)t[r]=e[r];return t}ud.exports=qE});var sa=u((_F,cd)=>{"use strict";var DE=Ee(),pd=Object.create,NE=function(){function e(){}return function(t){if(!DE(t))return{};if(pd)return pd(t);e.prototype=t;var r=new e;return e.prototype=void 0,r}}();cd.exports=NE});var Wo=u((xF,ld)=>{"use strict";function BE(e,t){return function(r){return e(t(r))}}ld.exports=BE});var on=u((CF,dd)=>{"use strict";var ME=Wo(),GE=ME(Object.getPrototypeOf,Object);dd.exports=GE});var sn=u((OF,fd)=>{"use strict";var kE=Object.prototype;function FE(e){var t=e&&e.constructor,r=typeof t=="function"&&t.prototype||kE;return e===r}fd.exports=FE});var $o=u((LF,md)=>{"use strict";var QE=sa(),jE=on(),WE=sn();function $E(e){return typeof e.constructor=="function"&&!WE(e)?QE(jE(e)):{}}md.exports=$E});var hd=u((PF,gd)=>{"use strict";function KE(){return!1}gd.exports=KE});var ua=u((ia,rr)=>{"use strict";var VE=oe(),YE=hd(),bd=typeof ia=="object"&&ia&&!ia.nodeType&&ia,yd=bd&&typeof rr=="object"&&rr&&!rr.nodeType&&rr,HE=yd&&yd.exports===bd,Ad=HE?VE.Buffer:void 0,zE=Ad?Ad.isBuffer:void 0,JE=zE||YE;rr.exports=JE});var Ko=u((UF,Sd)=>{"use strict";var XE=mt(),ZE=on(),eR=he(),tR="[object Object]",rR=Function.prototype,aR=Object.prototype,Id=rR.toString,nR=aR.hasOwnProperty,oR=Id.call(Object);function sR(e){if(!eR(e)||XE(e)!=tR)return!1;var t=ZE(e);if(t===null)return!0;var r=nR.call(t,"constructor")&&t.constructor;return typeof r=="function"&&r instanceof r&&Id.call(r)==oR}Sd.exports=sR});var Td=u((qF,wd)=>{"use strict";var iR=mt(),uR=an(),pR=he(),cR="[object Arguments]",lR="[object Array]",dR="[object Boolean]",fR="[object Date]",mR="[object Error]",gR="[object Function]",hR="[object Map]",yR="[object Number]",AR="[object Object]",bR="[object RegExp]",IR="[object Set]",SR="[object String]",wR="[object WeakMap]",TR="[object ArrayBuffer]",vR="[object DataView]",ER="[object Float32Array]",RR="[object Float64Array]",_R="[object Int8Array]",xR="[object Int16Array]",CR="[object Int32Array]",OR="[object Uint8Array]",LR="[object Uint8ClampedArray]",PR="[object Uint16Array]",UR="[object Uint32Array]",B={};B[ER]=B[RR]=B[_R]=B[xR]=B[CR]=B[OR]=B[LR]=B[PR]=B[UR]=!0;B[cR]=B[lR]=B[TR]=B[dR]=B[vR]=B[fR]=B[mR]=B[gR]=B[hR]=B[yR]=B[AR]=B[bR]=B[IR]=B[SR]=B[wR]=!1;function qR(e){return pR(e)&&uR(e.length)&&!!B[iR(e)]}wd.exports=qR});var un=u((DF,vd)=>{"use strict";function DR(e){return function(t){return e(t)}}vd.exports=DR});var pn=u((pa,ar)=>{"use strict";var NR=vo(),Ed=typeof pa=="object"&&pa&&!pa.nodeType&&pa,ca=Ed&&typeof ar=="object"&&ar&&!ar.nodeType&&ar,BR=ca&&ca.exports===Ed,Vo=BR&&NR.process,MR=function(){try{var e=ca&&ca.require&&ca.require("util").types;return e||Vo&&Vo.binding&&Vo.binding("util")}catch{}}();ar.exports=MR});var cn=u((NF,xd)=>{"use strict";var GR=Td(),kR=un(),Rd=pn(),_d=Rd&&Rd.isTypedArray,FR=_d?kR(_d):GR;xd.exports=FR});var Yo=u((BF,Cd)=>{"use strict";function QR(e,t){if(!(t==="constructor"&&typeof e[t]=="function")&&t!="__proto__")return e[t]}Cd.exports=QR});var Ho=u((MF,Od)=>{"use strict";var jR=na(),WR=Ht(),$R=Object.prototype,KR=$R.hasOwnProperty;function VR(e,t,r){var a=e[t];(!(KR.call(e,t)&&WR(a,r))||r===void 0&&!(t in e))&&jR(e,t,r)}Od.exports=VR});var nr=u((GF,Ld)=>{"use strict";var YR=Ho(),HR=na();function zR(e,t,r,a){var n=!r;r||(r={});for(var o=-1,s=t.length;++o<s;){var i=t[o],p=a?a(r[i],e[i],i,r,e):void 0;p===void 0&&(p=e[i]),n?HR(r,i,p):YR(r,i,p)}return r}Ld.exports=zR});var Ud=u((kF,Pd)=>{"use strict";function JR(e,t){for(var r=-1,a=Array(e);++r<e;)a[r]=t(r);return a}Pd.exports=JR});var la=u((FF,qd)=>{"use strict";var XR=9007199254740991,ZR=/^(?:0|[1-9]\d*)$/;function e_(e,t){var r=typeof e;return t=t??XR,!!t&&(r=="number"||r!="symbol"&&ZR.test(e))&&e>-1&&e%1==0&&e<t}qd.exports=e_});var zo=u((QF,Dd)=>{"use strict";var t_=Ud(),r_=zr(),a_=re(),n_=ua(),o_=la(),s_=cn(),i_=Object.prototype,u_=i_.hasOwnProperty;function p_(e,t){var r=a_(e),a=!r&&r_(e),n=!r&&!a&&n_(e),o=!r&&!a&&!n&&s_(e),s=r||a||n||o,i=s?t_(e.length,String):[],p=i.length;for(var m in e)(t||u_.call(e,m))&&!(s&&(m=="length"||n&&(m=="offset"||m=="parent")||o&&(m=="buffer"||m=="byteLength"||m=="byteOffset")||o_(m,p)))&&i.push(m);return i}Dd.exports=p_});var Bd=u((jF,Nd)=>{"use strict";function c_(e){var t=[];if(e!=null)for(var r in Object(e))t.push(r);return t}Nd.exports=c_});var Gd=u((WF,Md)=>{"use strict";var l_=Ee(),d_=sn(),f_=Bd(),m_=Object.prototype,g_=m_.hasOwnProperty;function h_(e){if(!l_(e))return f_(e);var t=d_(e),r=[];for(var a in e)a=="constructor"&&(t||!g_.call(e,a))||r.push(a);return r}Md.exports=h_});var or=u(($F,kd)=>{"use strict";var y_=zo(),A_=Gd(),b_=Xt();function I_(e){return b_(e)?y_(e,!0):A_(e)}kd.exports=I_});var Qd=u((KF,Fd)=>{"use strict";var S_=nr(),w_=or();function T_(e){return S_(e,w_(e))}Fd.exports=T_});var Yd=u((VF,Vd)=>{"use strict";var jd=Go(),v_=Fo(),E_=jo(),R_=tr(),__=$o(),Wd=zr(),$d=re(),x_=Mo(),C_=ua(),O_=Xr(),L_=Ee(),P_=Ko(),U_=cn(),Kd=Yo(),q_=Qd();function D_(e,t,r,a,n,o,s){var i=Kd(e,r),p=Kd(t,r),m=s.get(p);if(m){jd(e,r,m);return}var f=o?o(i,p,r+"",e,t,s):void 0,h=f===void 0;if(h){var g=$d(p),S=!g&&C_(p),O=!g&&!S&&U_(p);f=p,g||S||O?$d(i)?f=i:x_(i)?f=R_(i):S?(h=!1,f=v_(p,!0)):O?(h=!1,f=E_(p,!0)):f=[]:P_(p)||Wd(p)?(f=i,Wd(i)?f=q_(i):(!L_(i)||O_(i))&&(f=__(p))):h=!1}h&&(s.set(p,f),n(f,p,a,o,s),s.delete(p)),jd(e,r,f)}Vd.exports=D_});var Jd=u((YF,zd)=>{"use strict";var N_=aa(),B_=Go(),M_=ko(),G_=Yd(),k_=Ee(),F_=or(),Q_=Yo();function Hd(e,t,r,a,n){e!==t&&M_(t,function(o,s){if(n||(n=new N_),k_(o))G_(e,t,s,r,Hd,a,n);else{var i=a?a(Q_(e,s),o,s+"",e,t,n):void 0;i===void 0&&(i=o),B_(e,s,i)}},F_)}zd.exports=Hd});var Zd=u((HF,Xd)=>{"use strict";var j_=Ht(),W_=Xt(),$_=la(),K_=Ee();function V_(e,t,r){if(!K_(r))return!1;var a=typeof t;return(a=="number"?W_(r)&&$_(t,r.length):a=="string"&&t in r)?j_(r[t],e):!1}Xd.exports=V_});var tf=u((zF,ef)=>{"use strict";var Y_=Lo(),H_=Zd();function z_(e){return Y_(function(t,r){var a=-1,n=r.length,o=n>1?r[n-1]:void 0,s=n>2?r[2]:void 0;for(o=e.length>3&&typeof o=="function"?(n--,o):void 0,s&&H_(r[0],r[1],s)&&(o=n<3?void 0:o,n=1),t=Object(t);++a<n;){var i=r[a];i&&e(t,i,a,o)}return t})}ef.exports=z_});var Jo=u((JF,rf)=>{"use strict";var J_=Jd(),X_=tf(),Z_=X_(function(e,t,r){J_(e,t,r)});rf.exports=Z_});var nm=u(de=>{"use strict";de.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"};de.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"]};de.aryRearg={2:[1,0],3:[2,0,1],4:[3,2,0,1]};de.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};de.iterateeRearg={mapKeys:[1],reduceRight:[1,0]};de.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]};de.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}};de.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}};de.realToAlias=function(){var e=Object.prototype.hasOwnProperty,t=de.aliasToReal,r={};for(var a in t){var n=t[a];e.call(r,n)?r[n].push(a):r[n]=[a]}return r}();de.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"};de.skipFixed={castArray:!0,flow:!0,flowRight:!0,iteratee:!0,mixin:!0,rearg:!0,runInContext:!0};de.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 Vs=u((Sj,om)=>{"use strict";om.exports={}});var pm=u((wj,um)=>{"use strict";var X=nm(),UC=Vs(),sm=Array.prototype.push;function qC(e,t){return t==2?function(r,a){return e.apply(void 0,arguments)}:function(r){return e.apply(void 0,arguments)}}function Ys(e,t){return t==2?function(r,a){return e(r,a)}:function(r){return e(r)}}function im(e){for(var t=e?e.length:0,r=Array(t);t--;)r[t]=e[t];return r}function DC(e){return function(t){return e({},t)}}function NC(e,t){return function(){for(var r=arguments.length,a=r-1,n=Array(r);r--;)n[r]=arguments[r];var o=n[t],s=n.slice(0,t);return o&&sm.apply(s,o),t!=a&&sm.apply(s,n.slice(t+1)),e.apply(this,s)}}function Hs(e,t){return function(){var r=arguments.length;if(r){for(var a=Array(r);r--;)a[r]=arguments[r];var n=a[0]=t.apply(void 0,a);return e.apply(void 0,a),n}}}function zs(e,t,r,a){var n=typeof t=="function",o=t===Object(t);if(o&&(a=r,r=t,t=void 0),r==null)throw new TypeError;a||(a={});var s={cap:"cap"in a?a.cap:!0,curry:"curry"in a?a.curry:!0,fixed:"fixed"in a?a.fixed:!0,immutable:"immutable"in a?a.immutable:!0,rearg:"rearg"in a?a.rearg:!0},i=n?r:UC,p="curry"in a&&a.curry,m="fixed"in a&&a.fixed,f="rearg"in a&&a.rearg,h=n?r.runInContext():void 0,g=n?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=g.ary,O=g.assign,_=g.clone,R=g.curry,E=g.forEach,U=g.isArray,Oe=g.isError,Se=g.isFunction,pt=g.isWeakMap,Ft=g.keys,Sr=g.rearg,wr=g.toInteger,gI=g.toPath,Cu=Ft(X.aryMethod),hI={castArray:function(I){return function(){var y=arguments[0];return U(y)?I(im(y)):I.apply(void 0,arguments)}},iteratee:function(I){return function(){var y=arguments[0],b=arguments[1],v=I(y,b),C=v.length;return s.cap&&typeof b=="number"?(b=b>2?b-2:1,C&&C<=b?v:Ys(v,b)):v}},mixin:function(I){return function(y){var b=this;if(!Se(b))return I(b,Object(y));var v=[];return E(Ft(y),function(C){Se(y[C])&&v.push([C,b.prototype[C]])}),I(b,Object(y)),E(v,function(C){var ae=C[1];Se(ae)?b.prototype[C[0]]=ae:delete b.prototype[C[0]]}),b}},nthArg:function(I){return function(y){var b=y<0?1:wr(y)+1;return R(I(y),b)}},rearg:function(I){return function(y,b){var v=b?b.length:0;return R(I(y,b),v)}},runInContext:function(I){return function(y){return zs(e,I(y),a)}}};function yI(I,y){if(s.cap){var b=X.iterateeRearg[I];if(b)return wI(y,b);var v=!n&&X.iterateeAry[I];if(v)return SI(y,v)}return y}function AI(I,y,b){return p||s.curry&&b>1?R(y,b):y}function Ou(I,y,b){if(s.fixed&&(m||!X.skipFixed[I])){var v=X.methodSpread[I],C=v&&v.start;return C===void 0?S(y,b):NC(y,C)}return y}function Lu(I,y,b){return s.rearg&&b>1&&(f||!X.skipRearg[I])?Sr(y,X.methodRearg[I]||X.aryRearg[b]):y}function bI(I,y){y=gI(y);for(var b=-1,v=y.length,C=v-1,ae=_(Object(I)),Me=ae;Me!=null&&++b<v;){var we=y[b],Ge=Me[we];Ge!=null&&!(Se(Ge)||Oe(Ge)||pt(Ge))&&(Me[we]=_(b==C?Ge:Object(Ge))),Me=Me[we]}return ae}function II(I){return me.runInContext.convert(I)(void 0)}function Pu(I,y){var b=X.aliasToReal[I]||I,v=X.remap[b]||b,C=a;return function(ae){var Me=n?h:g,we=n?h[v]:y,Ge=O(O({},C),ae);return zs(Me,b,we,Ge)}}function SI(I,y){return Uu(I,function(b){return typeof b=="function"?Ys(b,y):b})}function wI(I,y){return Uu(I,function(b){var v=y.length;return qC(Sr(Ys(b,v),y),v)})}function Uu(I,y){return function(){var b=arguments.length;if(!b)return I();for(var v=Array(b);b--;)v[b]=arguments[b];var C=s.rearg?0:b-1;return v[C]=y(v[C]),I.apply(void 0,v)}}function qu(I,y,b){var v,C=X.aliasToReal[I]||I,ae=y,Me=hI[C];return Me?ae=Me(y):s.immutable&&(X.mutate.array[C]?ae=Hs(y,im):X.mutate.object[C]?ae=Hs(y,DC(y)):X.mutate.set[C]&&(ae=Hs(y,bI))),E(Cu,function(we){return E(X.aryMethod[we],function(Ge){if(C==Ge){var Du=X.methodSpread[C],TI=Du&&Du.afterRearg;return v=TI?Ou(C,Lu(C,ae,we),we):Lu(C,Ou(C,ae,we),we),v=yI(C,v),v=AI(C,v,we),!1}}),!v}),v||(v=ae),v==y&&(v=p?R(v,1):function(){return y.apply(this,arguments)}),v.convert=Pu(C,y),v.placeholder=y.placeholder=b,v}if(!o)return qu(t,r,i);var me=r,Tr=[];return E(Cu,function(I){E(X.aryMethod[I],function(y){var b=me[X.remap[y]||y];b&&Tr.push([y,qu(y,b,me)])})}),E(Ft(me),function(I){var y=me[I];if(typeof y=="function"){for(var b=Tr.length;b--;)if(Tr[b][0]==I)return;y.convert=Pu(I,y),Tr.push([I,y])}}),E(Tr,function(I){me[I[0]]=I[1]}),me.convert=II,me.placeholder=me,E(Ft(me),function(I){E(X.realToAlias[I]||[],function(y){me[y]=me[I]})}),me}um.exports=zs});var Js=u((Tj,cm)=>{"use strict";var BC=gt(),MC=oe(),GC=BC(MC,"WeakMap");cm.exports=GC});var Xs=u((vj,dm)=>{"use strict";var lm=Js(),kC=lm&&new lm;dm.exports=kC});var Zs=u((Ej,mm)=>{"use strict";var FC=Jr(),fm=Xs(),QC=fm?function(e,t){return fm.set(e,t),e}:FC;mm.exports=QC});var wa=u((Rj,gm)=>{"use strict";var jC=sa(),WC=Ee();function $C(e){return function(){var t=arguments;switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3]);case 5:return new e(t[0],t[1],t[2],t[3],t[4]);case 6:return new e(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new e(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var r=jC(e.prototype),a=e.apply(r,t);return WC(a)?a:r}}gm.exports=$C});var ym=u((_j,hm)=>{"use strict";var KC=wa(),VC=oe(),YC=1;function HC(e,t,r){var a=t&YC,n=KC(e);function o(){var s=this&&this!==VC&&this instanceof o?n:e;return s.apply(a?r:this,arguments)}return o}hm.exports=HC});var ei=u((xj,Am)=>{"use strict";var zC=Math.max;function JC(e,t,r,a){for(var n=-1,o=e.length,s=r.length,i=-1,p=t.length,m=zC(o-s,0),f=Array(p+m),h=!a;++i<p;)f[i]=t[i];for(;++n<s;)(h||n<o)&&(f[r[n]]=e[n]);for(;m--;)f[i++]=e[n++];return f}Am.exports=JC});var ti=u((Cj,bm)=>{"use strict";var XC=Math.max;function ZC(e,t,r,a){for(var n=-1,o=e.length,s=-1,i=r.length,p=-1,m=t.length,f=XC(o-i,0),h=Array(f+m),g=!a;++n<f;)h[n]=e[n];for(var S=n;++p<m;)h[S+p]=t[p];for(;++s<i;)(g||n<o)&&(h[S+r[s]]=e[n++]);return h}bm.exports=ZC});var Sm=u((Oj,Im)=>{"use strict";function eO(e,t){for(var r=e.length,a=0;r--;)e[r]===t&&++a;return a}Im.exports=eO});var Ln=u((Lj,wm)=>{"use strict";function tO(){}wm.exports=tO});var Un=u((Pj,Tm)=>{"use strict";var rO=sa(),aO=Ln(),nO=4294967295;function Pn(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=nO,this.__views__=[]}Pn.prototype=rO(aO.prototype);Pn.prototype.constructor=Pn;Tm.exports=Pn});var ri=u((Uj,Em)=>{"use strict";var vm=Xs(),oO=No(),sO=vm?function(e){return vm.get(e)}:oO;Em.exports=sO});var _m=u((qj,Rm)=>{"use strict";var iO={};Rm.exports=iO});var Om=u((Dj,Cm)=>{"use strict";var xm=_m(),uO=Object.prototype,pO=uO.hasOwnProperty;function cO(e){for(var t=e.name+"",r=xm[t],a=pO.call(xm,t)?r.length:0;a--;){var n=r[a],o=n.func;if(o==null||o==e)return n.name}return t}Cm.exports=cO});var ai=u((Nj,Lm)=>{"use strict";var lO=sa(),dO=Ln();function qn(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=void 0}qn.prototype=lO(dO.prototype);qn.prototype.constructor=qn;Lm.exports=qn});var Um=u((Bj,Pm)=>{"use strict";var fO=Un(),mO=ai(),gO=tr();function hO(e){if(e instanceof fO)return e.clone();var t=new mO(e.__wrapped__,e.__chain__);return t.__actions__=gO(e.__actions__),t.__index__=e.__index__,t.__values__=e.__values__,t}Pm.exports=hO});var Nm=u((Mj,Dm)=>{"use strict";var yO=Un(),qm=ai(),AO=Ln(),bO=re(),IO=he(),SO=Um(),wO=Object.prototype,TO=wO.hasOwnProperty;function Dn(e){if(IO(e)&&!bO(e)&&!(e instanceof yO)){if(e instanceof qm)return e;if(TO.call(e,"__wrapped__"))return SO(e)}return new qm(e)}Dn.prototype=AO.prototype;Dn.prototype.constructor=Dn;Dm.exports=Dn});var Mm=u((Gj,Bm)=>{"use strict";var vO=Un(),EO=ri(),RO=Om(),_O=Nm();function xO(e){var t=RO(e),r=_O[t];if(typeof r!="function"||!(t in vO.prototype))return!1;if(e===r)return!0;var a=EO(r);return!!a&&e===a[0]}Bm.exports=xO});var ni=u((kj,Gm)=>{"use strict";var CO=Zs(),OO=Oo(),LO=OO(CO);Gm.exports=LO});var Fm=u((Fj,km)=>{"use strict";var PO=/\{\n\/\* \[wrapped with (.+)\] \*/,UO=/,? & /;function qO(e){var t=e.match(PO);return t?t[1].split(UO):[]}km.exports=qO});var jm=u((Qj,Qm)=>{"use strict";var DO=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/;function NO(e,t){var r=t.length;if(!r)return e;var a=r-1;return t[a]=(r>1?"& ":"")+t[a],t=t.join(r>2?", ":" "),e.replace(DO,`{
2
2
  /* [wrapped with `+t+`] */
3
- `)}Um.exports=EP});var Ln=u((Oj,Nm)=>{"use strict";function RP(e,t){for(var r=-1,a=e==null?0:e.length;++r<a&&t(e[r],r,e)!==!1;);return e}Nm.exports=RP});var Mm=u((Pj,Bm)=>{"use strict";var xP=Ln(),_P=Eo(),OP=1,PP=2,LP=8,CP=16,qP=32,UP=64,DP=128,NP=256,BP=512,MP=[["ary",DP],["bind",OP],["bindKey",PP],["curry",LP],["curryRight",CP],["flip",BP],["partial",qP],["partialRight",UP],["rearg",NP]];function GP(e,t){return xP(MP,function(r){var a="_."+r[0];t&r[1]&&!_P(e,a)&&e.push(a)}),e.sort()}Bm.exports=GP});var Xs=u((Lj,Gm)=>{"use strict";var kP=qm(),FP=Dm(),QP=Ha(),jP=Mm();function WP(e,t,r){var a=t+"";return QP(e,FP(a,jP(kP(a),r)))}Gm.exports=WP});var Zs=u((Cj,Qm)=>{"use strict";var $P=Pm(),KP=Js(),VP=Xs(),YP=1,HP=2,zP=4,JP=8,km=32,Fm=64;function XP(e,t,r,a,n,o,s,i,p,f){var m=t&JP,y=m?s:void 0,g=m?void 0:s,S=m?o:void 0,P=m?void 0:o;t|=m?km:Fm,t&=~(m?Fm:km),t&zP||(t&=~(YP|HP));var x=[e,t,n,S,y,P,g,i,p,f],R=r.apply(void 0,x);return $P(e)&&KP(R,x),R.placeholder=a,VP(R,e,t)}Qm.exports=XP});var ei=u((qj,jm)=>{"use strict";function ZP(e){var t=e;return t.placeholder}jm.exports=ZP});var $m=u((Uj,Wm)=>{"use strict";var eL=er(),tL=pa(),rL=Math.min;function aL(e,t){for(var r=e.length,a=rL(t.length,r),n=eL(e);a--;){var o=t[a];e[a]=tL(o,r)?n[o]:void 0}return e}Wm.exports=aL});var Cn=u((Dj,Vm)=>{"use strict";var Km="__lodash_placeholder__";function nL(e,t){for(var r=-1,a=e.length,n=0,o=[];++r<a;){var s=e[r];(s===t||s===Km)&&(e[r]=Km,o[n++]=r)}return o}Vm.exports=nL});var ti=u((Nj,zm)=>{"use strict";var oL=Vs(),sL=Ys(),iL=fm(),Ym=Ia(),uL=Zs(),pL=ei(),cL=$m(),lL=Cn(),dL=ne(),fL=1,mL=2,gL=8,yL=16,hL=128,AL=512;function Hm(e,t,r,a,n,o,s,i,p,f){var m=t&hL,y=t&fL,g=t&mL,S=t&(gL|yL),P=t&AL,x=g?void 0:Ym(e);function R(){for(var E=arguments.length,q=Array(E),xe=E;xe--;)q[xe]=arguments[xe];if(S)var be=pL(R),it=iL(q,be);if(a&&(q=oL(q,a,n,S)),o&&(q=sL(q,o,s,S)),E-=it,S&&E<f){var kt=lL(q,be);return uL(e,t,Hm,R.placeholder,r,q,kt,i,p,f-E)}var Ir=y?r:this,Sr=g?Ir[e]:e;return E=q.length,i?q=cL(q,i):P&&E>1&&q.reverse(),m&&p<E&&(q.length=p),this&&this!==dL&&this instanceof R&&(Sr=x||Ym(Sr)),Sr.apply(Ir,q)}return R}zm.exports=Hm});var Xm=u((Bj,Jm)=>{"use strict";var bL=Ya(),IL=Ia(),SL=ti(),wL=Zs(),TL=ei(),vL=Cn(),EL=ne();function RL(e,t,r){var a=IL(e);function n(){for(var o=arguments.length,s=Array(o),i=o,p=TL(n);i--;)s[i]=arguments[i];var f=o<3&&s[0]!==p&&s[o-1]!==p?[]:vL(s,p);if(o-=f.length,o<r)return wL(e,t,SL,n.placeholder,void 0,s,f,void 0,void 0,r-o);var m=this&&this!==EL&&this instanceof n?a:e;return bL(m,this,s)}return n}Jm.exports=RL});var eg=u((Mj,Zm)=>{"use strict";var xL=Ya(),_L=Ia(),OL=ne(),PL=1;function LL(e,t,r,a){var n=t&PL,o=_L(e);function s(){for(var i=-1,p=arguments.length,f=-1,m=a.length,y=Array(m+p),g=this&&this!==OL&&this instanceof s?o:e;++f<m;)y[f]=a[f];for(;p--;)y[f++]=arguments[++i];return xL(g,n?r:this,y)}return s}Zm.exports=LL});var sg=u((Gj,og)=>{"use strict";var CL=Vs(),qL=Ys(),tg=Cn(),rg="__lodash_placeholder__",ri=1,UL=2,DL=4,ag=8,Sa=128,ng=256,NL=Math.min;function BL(e,t){var r=e[1],a=t[1],n=r|a,o=n<(ri|UL|Sa),s=a==Sa&&r==ag||a==Sa&&r==ng&&e[7].length<=t[8]||a==(Sa|ng)&&t[7].length<=t[8]&&r==ag;if(!(o||s))return e;a&ri&&(e[2]=t[2],n|=r&ri?0:DL);var i=t[3];if(i){var p=e[3];e[3]=p?CL(p,i,t[4]):i,e[4]=p?tg(e[3],rg):t[4]}return i=t[5],i&&(p=e[5],e[5]=p?qL(p,i,t[6]):i,e[6]=p?tg(e[5],rg):t[6]),i=t[7],i&&(e[7]=i),a&Sa&&(e[8]=e[8]==null?t[8]:NL(e[8],t[8])),e[9]==null&&(e[9]=t[9]),e[0]=t[0],e[1]=n,e}og.exports=BL});var ug=u((kj,ig)=>{"use strict";var ML=/\s/;function GL(e){for(var t=e.length;t--&&ML.test(e.charAt(t)););return t}ig.exports=GL});var cg=u((Fj,pg)=>{"use strict";var kL=ug(),FL=/^\s+/;function QL(e){return e&&e.slice(0,kL(e)+1).replace(FL,"")}pg.exports=QL});var fr=u((Qj,lg)=>{"use strict";var jL=dt(),WL=ge(),$L="[object Symbol]";function KL(e){return typeof e=="symbol"||WL(e)&&jL(e)==$L}lg.exports=KL});var gg=u((jj,mg)=>{"use strict";var VL=cg(),dg=Te(),YL=fr(),fg=0/0,HL=/^[-+]0x[0-9a-f]+$/i,zL=/^0b[01]+$/i,JL=/^0o[0-7]+$/i,XL=parseInt;function ZL(e){if(typeof e=="number")return e;if(YL(e))return fg;if(dg(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=dg(t)?t+"":t}if(typeof e!="string")return e===0?e:+e;e=VL(e);var r=zL.test(e);return r||JL.test(e)?XL(e.slice(2),r?2:8):HL.test(e)?fg:+e}mg.exports=ZL});var Ag=u((Wj,hg)=>{"use strict";var eC=gg(),yg=1/0,tC=17976931348623157e292;function rC(e){if(!e)return e===0?e:0;if(e=eC(e),e===yg||e===-yg){var t=e<0?-1:1;return t*tC}return e===e?e:0}hg.exports=rC});var ai=u(($j,bg)=>{"use strict";var aC=Ag();function nC(e){var t=aC(e),r=t%1;return t===t?r?t-r:t:0}bg.exports=nC});var qn=u((Kj,vg)=>{"use strict";var oC=Ks(),sC=pm(),iC=Xm(),uC=ti(),pC=eg(),cC=Hs(),lC=sg(),dC=Js(),fC=Xs(),Ig=ai(),mC="Expected a function",Sg=1,gC=2,ni=8,oi=16,si=32,wg=64,Tg=Math.max;function yC(e,t,r,a,n,o,s,i){var p=t&gC;if(!p&&typeof e!="function")throw new TypeError(mC);var f=a?a.length:0;if(f||(t&=~(si|wg),a=n=void 0),s=s===void 0?s:Tg(Ig(s),0),i=i===void 0?i:Ig(i),f-=n?n.length:0,t&wg){var m=a,y=n;a=n=void 0}var g=p?void 0:cC(e),S=[e,t,r,a,n,m,y,o,s,i];if(g&&lC(S,g),e=S[0],t=S[1],r=S[2],a=S[3],n=S[4],i=S[9]=S[9]===void 0?p?0:e.length:Tg(S[9]-f,0),!i&&t&(ni|oi)&&(t&=~(ni|oi)),!t||t==Sg)var P=sC(e,t,r);else t==ni||t==oi?P=iC(e,t,i):(t==si||t==(Sg|si))&&!n.length?P=pC(e,t,r,a):P=uC.apply(void 0,S);var x=g?oC:dC;return fC(x(P,S),e,t)}vg.exports=yC});var Rg=u((Vj,Eg)=>{"use strict";var hC=qn(),AC=128;function bC(e,t,r){return t=r?void 0:t,t=e&&t==null?e.length:t,hC(e,AC,void 0,void 0,void 0,void 0,t)}Eg.exports=bC});var _g=u((Yj,xg)=>{"use strict";var IC=No(),SC=IC(Object.keys,Object);xg.exports=SC});var ii=u((Hj,Og)=>{"use strict";var wC=an(),TC=_g(),vC=Object.prototype,EC=vC.hasOwnProperty;function RC(e){if(!wC(e))return TC(e);var t=[];for(var r in Object(e))EC.call(e,r)&&r!="constructor"&&t.push(r);return t}Og.exports=RC});var mr=u((zj,Pg)=>{"use strict";var xC=Qo(),_C=ii(),OC=Jt();function PC(e){return OC(e)?xC(e):_C(e)}Pg.exports=PC});var ui=u((Jj,Lg)=>{"use strict";var LC=ar(),CC=mr();function qC(e,t){return e&&LC(t,CC(t),e)}Lg.exports=qC});var qg=u((Xj,Cg)=>{"use strict";var UC=ar(),DC=nr();function NC(e,t){return e&&UC(t,DC(t),e)}Cg.exports=NC});var Dg=u((Zj,Ug)=>{"use strict";function BC(e,t){for(var r=-1,a=e==null?0:e.length,n=0,o=[];++r<a;){var s=e[r];t(s,r,e)&&(o[n++]=s)}return o}Ug.exports=BC});var pi=u((eW,Ng)=>{"use strict";function MC(){return[]}Ng.exports=MC});var Un=u((tW,Mg)=>{"use strict";var GC=Dg(),kC=pi(),FC=Object.prototype,QC=FC.propertyIsEnumerable,Bg=Object.getOwnPropertySymbols,jC=Bg?function(e){return e==null?[]:(e=Object(e),GC(Bg(e),function(t){return QC.call(e,t)}))}:kC;Mg.exports=jC});var kg=u((rW,Gg)=>{"use strict";var WC=ar(),$C=Un();function KC(e,t){return WC(e,$C(e),t)}Gg.exports=KC});var ci=u((aW,Fg)=>{"use strict";var VC=Va(),YC=rn(),HC=Un(),zC=pi(),JC=Object.getOwnPropertySymbols,XC=JC?function(e){for(var t=[];e;)VC(t,HC(e)),e=YC(e);return t}:zC;Fg.exports=XC});var jg=u((nW,Qg)=>{"use strict";var ZC=ar(),eq=ci();function tq(e,t){return ZC(e,eq(e),t)}Qg.exports=tq});var li=u((oW,Wg)=>{"use strict";var rq=Va(),aq=ee();function nq(e,t,r){var a=t(e);return aq(e)?a:rq(a,r(e))}Wg.exports=nq});var di=u((sW,$g)=>{"use strict";var oq=li(),sq=Un(),iq=mr();function uq(e){return oq(e,iq,sq)}$g.exports=uq});var Vg=u((iW,Kg)=>{"use strict";var pq=li(),cq=ci(),lq=nr();function dq(e){return pq(e,lq,cq)}Kg.exports=dq});var Hg=u((uW,Yg)=>{"use strict";var fq=ft(),mq=ne(),gq=fq(mq,"DataView");Yg.exports=gq});var Jg=u((pW,zg)=>{"use strict";var yq=ft(),hq=ne(),Aq=yq(hq,"Promise");zg.exports=Aq});var yr=u((cW,ny)=>{"use strict";var fi=Hg(),mi=za(),gi=Jg(),yi=xo(),hi=Ws(),ay=dt(),gr=Io(),Xg="[object Map]",bq="[object Object]",Zg="[object Promise]",ey="[object Set]",ty="[object WeakMap]",ry="[object DataView]",Iq=gr(fi),Sq=gr(mi),wq=gr(gi),Tq=gr(yi),vq=gr(hi),Dt=ay;(fi&&Dt(new fi(new ArrayBuffer(1)))!=ry||mi&&Dt(new mi)!=Xg||gi&&Dt(gi.resolve())!=Zg||yi&&Dt(new yi)!=ey||hi&&Dt(new hi)!=ty)&&(Dt=function(e){var t=ay(e),r=t==bq?e.constructor:void 0,a=r?gr(r):"";if(a)switch(a){case Iq:return ry;case Sq:return Xg;case wq:return Zg;case Tq:return ey;case vq:return ty}return t});ny.exports=Dt});var sy=u((lW,oy)=>{"use strict";var Eq=Object.prototype,Rq=Eq.hasOwnProperty;function xq(e){var t=e.length,r=new e.constructor(t);return t&&typeof e[0]=="string"&&Rq.call(e,"index")&&(r.index=e.index,r.input=e.input),r}oy.exports=xq});var uy=u((dW,iy)=>{"use strict";var _q=tn();function Oq(e,t){var r=t?_q(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.byteLength)}iy.exports=Oq});var cy=u((fW,py)=>{"use strict";var Pq=/\w*$/;function Lq(e){var t=new e.constructor(e.source,Pq.exec(e));return t.lastIndex=e.lastIndex,t}py.exports=Lq});var gy=u((mW,my)=>{"use strict";var ly=Rt(),dy=ly?ly.prototype:void 0,fy=dy?dy.valueOf:void 0;function Cq(e){return fy?Object(fy.call(e)):{}}my.exports=Cq});var hy=u((gW,yy)=>{"use strict";var qq=tn(),Uq=uy(),Dq=cy(),Nq=gy(),Bq=Do(),Mq="[object Boolean]",Gq="[object Date]",kq="[object Map]",Fq="[object Number]",Qq="[object RegExp]",jq="[object Set]",Wq="[object String]",$q="[object Symbol]",Kq="[object ArrayBuffer]",Vq="[object DataView]",Yq="[object Float32Array]",Hq="[object Float64Array]",zq="[object Int8Array]",Jq="[object Int16Array]",Xq="[object Int32Array]",Zq="[object Uint8Array]",eU="[object Uint8ClampedArray]",tU="[object Uint16Array]",rU="[object Uint32Array]";function aU(e,t,r){var a=e.constructor;switch(t){case Kq:return qq(e);case Mq:case Gq:return new a(+e);case Vq:return Uq(e,r);case Yq:case Hq:case zq:case Jq:case Xq:case Zq:case eU:case tU:case rU:return Bq(e,r);case kq:return new a;case Fq:case Wq:return new a(e);case Qq:return Dq(e);case jq:return new a;case $q:return Nq(e)}}yy.exports=aU});var by=u((yW,Ay)=>{"use strict";var nU=yr(),oU=ge(),sU="[object Map]";function iU(e){return oU(e)&&nU(e)==sU}Ay.exports=iU});var Ty=u((hW,wy)=>{"use strict";var uU=by(),pU=nn(),Iy=on(),Sy=Iy&&Iy.isMap,cU=Sy?pU(Sy):uU;wy.exports=cU});var Ey=u((AW,vy)=>{"use strict";var lU=yr(),dU=ge(),fU="[object Set]";function mU(e){return dU(e)&&lU(e)==fU}vy.exports=mU});var Oy=u((bW,_y)=>{"use strict";var gU=Ey(),yU=nn(),Ry=on(),xy=Ry&&Ry.isSet,hU=xy?yU(xy):gU;_y.exports=hU});var Ai=u((IW,qy)=>{"use strict";var AU=ta(),bU=Ln(),IU=Fo(),SU=ui(),wU=qg(),TU=qo(),vU=er(),EU=kg(),RU=jg(),xU=di(),_U=Vg(),OU=yr(),PU=sy(),LU=hy(),CU=Bo(),qU=ee(),UU=sa(),DU=Ty(),NU=Te(),BU=Oy(),MU=mr(),GU=nr(),kU=1,FU=2,QU=4,Py="[object Arguments]",jU="[object Array]",WU="[object Boolean]",$U="[object Date]",KU="[object Error]",Ly="[object Function]",VU="[object GeneratorFunction]",YU="[object Map]",HU="[object Number]",Cy="[object Object]",zU="[object RegExp]",JU="[object Set]",XU="[object String]",ZU="[object Symbol]",eD="[object WeakMap]",tD="[object ArrayBuffer]",rD="[object DataView]",aD="[object Float32Array]",nD="[object Float64Array]",oD="[object Int8Array]",sD="[object Int16Array]",iD="[object Int32Array]",uD="[object Uint8Array]",pD="[object Uint8ClampedArray]",cD="[object Uint16Array]",lD="[object Uint32Array]",D={};D[Py]=D[jU]=D[tD]=D[rD]=D[WU]=D[$U]=D[aD]=D[nD]=D[oD]=D[sD]=D[iD]=D[YU]=D[HU]=D[Cy]=D[zU]=D[JU]=D[XU]=D[ZU]=D[uD]=D[pD]=D[cD]=D[lD]=!0;D[KU]=D[Ly]=D[eD]=!1;function Dn(e,t,r,a,n,o){var s,i=t&kU,p=t&FU,f=t&QU;if(r&&(s=n?r(e,a,n,o):r(e)),s!==void 0)return s;if(!NU(e))return e;var m=qU(e);if(m){if(s=PU(e),!i)return vU(e,s)}else{var y=OU(e),g=y==Ly||y==VU;if(UU(e))return TU(e,i);if(y==Cy||y==Py||g&&!n){if(s=p||g?{}:CU(e),!i)return p?RU(e,wU(s,e)):EU(e,SU(s,e))}else{if(!D[y])return n?e:{};s=LU(e,y,i)}}o||(o=new AU);var S=o.get(e);if(S)return S;o.set(e,s),BU(e)?e.forEach(function(R){s.add(Dn(R,t,r,R,e,o))}):DU(e)&&e.forEach(function(R,E){s.set(E,Dn(R,t,r,E,e,o))});var P=f?p?_U:xU:p?GU:MU,x=m?void 0:P(e);return bU(x||e,function(R,E){x&&(E=R,R=e[E]),IU(s,E,Dn(R,t,r,E,e,o))}),s}qy.exports=Dn});var Dy=u((SW,Uy)=>{"use strict";var dD=Ai(),fD=4;function mD(e){return dD(e,fD)}Uy.exports=mD});var By=u((wW,Ny)=>{"use strict";var gD=qn(),yD=8;function bi(e,t,r){t=r?void 0:t;var a=gD(e,yD,void 0,void 0,void 0,void 0,void 0,t);return a.placeholder=bi.placeholder,a}bi.placeholder={};Ny.exports=bi});var Gy=u((TW,My)=>{"use strict";var hD=dt(),AD=ge(),bD=Mo(),ID="[object DOMException]",SD="[object Error]";function wD(e){if(!AD(e))return!1;var t=hD(e);return t==SD||t==ID||typeof e.message=="string"&&typeof e.name=="string"&&!bD(e)}My.exports=wD});var Fy=u((vW,ky)=>{"use strict";var TD=yr(),vD=ge(),ED="[object WeakMap]";function RD(e){return vD(e)&&TD(e)==ED}ky.exports=RD});var jy=u((EW,Qy)=>{"use strict";function xD(e,t){for(var r=-1,a=e==null?0:e.length;++r<a;)if(t(e[r],r,e))return!0;return!1}Qy.exports=xD});var Ii=u((RW,Wy)=>{"use strict";var _D=vo(),OD=jy(),PD=Ro(),LD=1,CD=2;function qD(e,t,r,a,n,o){var s=r&LD,i=e.length,p=t.length;if(i!=p&&!(s&&p>i))return!1;var f=o.get(e),m=o.get(t);if(f&&m)return f==t&&m==e;var y=-1,g=!0,S=r&CD?new _D:void 0;for(o.set(e,t),o.set(t,e);++y<i;){var P=e[y],x=t[y];if(a)var R=s?a(x,P,y,t,e,o):a(P,x,y,e,t,o);if(R!==void 0){if(R)continue;g=!1;break}if(S){if(!OD(t,function(E,q){if(!PD(S,q)&&(P===E||n(P,E,r,a,o)))return S.push(q)})){g=!1;break}}else if(!(P===x||n(P,x,r,a,o))){g=!1;break}}return o.delete(e),o.delete(t),g}Wy.exports=qD});var Ky=u((xW,$y)=>{"use strict";function UD(e){var t=-1,r=Array(e.size);return e.forEach(function(a,n){r[++t]=[n,a]}),r}$y.exports=UD});var Jy=u((_W,zy)=>{"use strict";var Vy=Rt(),Yy=Uo(),DD=Yt(),ND=Ii(),BD=Ky(),MD=Za(),GD=1,kD=2,FD="[object Boolean]",QD="[object Date]",jD="[object Error]",WD="[object Map]",$D="[object Number]",KD="[object RegExp]",VD="[object Set]",YD="[object String]",HD="[object Symbol]",zD="[object ArrayBuffer]",JD="[object DataView]",Hy=Vy?Vy.prototype:void 0,Si=Hy?Hy.valueOf:void 0;function XD(e,t,r,a,n,o,s){switch(r){case JD:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case zD:return!(e.byteLength!=t.byteLength||!o(new Yy(e),new Yy(t)));case FD:case QD:case $D:return DD(+e,+t);case jD:return e.name==t.name&&e.message==t.message;case KD:case YD:return e==t+"";case WD:var i=BD;case VD:var p=a&GD;if(i||(i=MD),e.size!=t.size&&!p)return!1;var f=s.get(e);if(f)return f==t;a|=kD,s.set(e,t);var m=ND(i(e),i(t),a,n,o,s);return s.delete(e),m;case HD:if(Si)return Si.call(e)==Si.call(t)}return!1}zy.exports=XD});var eh=u((OW,Zy)=>{"use strict";var Xy=di(),ZD=1,eN=Object.prototype,tN=eN.hasOwnProperty;function rN(e,t,r,a,n,o){var s=r&ZD,i=Xy(e),p=i.length,f=Xy(t),m=f.length;if(p!=m&&!s)return!1;for(var y=p;y--;){var g=i[y];if(!(s?g in t:tN.call(t,g)))return!1}var S=o.get(e),P=o.get(t);if(S&&P)return S==t&&P==e;var x=!0;o.set(e,t),o.set(t,e);for(var R=s;++y<p;){g=i[y];var E=e[g],q=t[g];if(a)var xe=s?a(q,E,g,t,e,o):a(E,q,g,e,t,o);if(!(xe===void 0?E===q||n(E,q,r,a,o):xe)){x=!1;break}R||(R=g=="constructor")}if(x&&!R){var be=e.constructor,it=t.constructor;be!=it&&"constructor"in e&&"constructor"in t&&!(typeof be=="function"&&be instanceof be&&typeof it=="function"&&it instanceof it)&&(x=!1)}return o.delete(e),o.delete(t),x}Zy.exports=rN});var uh=u((PW,ih)=>{"use strict";var wi=ta(),aN=Ii(),nN=Jy(),oN=eh(),th=yr(),rh=ee(),ah=sa(),sN=sn(),iN=1,nh="[object Arguments]",oh="[object Array]",Nn="[object Object]",uN=Object.prototype,sh=uN.hasOwnProperty;function pN(e,t,r,a,n,o){var s=rh(e),i=rh(t),p=s?oh:th(e),f=i?oh:th(t);p=p==nh?Nn:p,f=f==nh?Nn:f;var m=p==Nn,y=f==Nn,g=p==f;if(g&&ah(e)){if(!ah(t))return!1;s=!0,m=!1}if(g&&!m)return o||(o=new wi),s||sN(e)?aN(e,t,r,a,n,o):nN(e,t,p,r,a,n,o);if(!(r&iN)){var S=m&&sh.call(e,"__wrapped__"),P=y&&sh.call(t,"__wrapped__");if(S||P){var x=S?e.value():e,R=P?t.value():t;return o||(o=new wi),n(x,R,r,a,o)}}return g?(o||(o=new wi),oN(e,t,r,a,n,o)):!1}ih.exports=pN});var Ti=u((LW,lh)=>{"use strict";var cN=uh(),ph=ge();function ch(e,t,r,a,n){return e===t?!0:e==null||t==null||!ph(e)&&!ph(t)?e!==e&&t!==t:cN(e,t,r,a,ch,n)}lh.exports=ch});var fh=u((CW,dh)=>{"use strict";var lN=ta(),dN=Ti(),fN=1,mN=2;function gN(e,t,r,a){var n=r.length,o=n,s=!a;if(e==null)return!o;for(e=Object(e);n--;){var i=r[n];if(s&&i[2]?i[1]!==e[i[0]]:!(i[0]in e))return!1}for(;++n<o;){i=r[n];var p=i[0],f=e[p],m=i[1];if(s&&i[2]){if(f===void 0&&!(p in e))return!1}else{var y=new lN;if(a)var g=a(f,m,p,e,t,y);if(!(g===void 0?dN(m,f,fN|mN,a,y):g))return!1}}return!0}dh.exports=gN});var vi=u((qW,mh)=>{"use strict";var yN=Te();function hN(e){return e===e&&!yN(e)}mh.exports=hN});var yh=u((UW,gh)=>{"use strict";var AN=vi(),bN=mr();function IN(e){for(var t=bN(e),r=t.length;r--;){var a=t[r],n=e[a];t[r]=[a,n,AN(n)]}return t}gh.exports=IN});var Ei=u((DW,hh)=>{"use strict";function SN(e,t){return function(r){return r==null?!1:r[e]===t&&(t!==void 0||e in Object(r))}}hh.exports=SN});var bh=u((NW,Ah)=>{"use strict";var wN=fh(),TN=yh(),vN=Ei();function EN(e){var t=TN(e);return t.length==1&&t[0][2]?vN(t[0][0],t[0][1]):function(r){return r===e||wN(r,e,t)}}Ah.exports=EN});var Bn=u((BW,Ih)=>{"use strict";var RN=ee(),xN=fr(),_N=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,ON=/^\w*$/;function PN(e,t){if(RN(e))return!1;var r=typeof e;return r=="number"||r=="symbol"||r=="boolean"||e==null||xN(e)?!0:ON.test(e)||!_N.test(e)||t!=null&&e in Object(t)}Ih.exports=PN});var Th=u((MW,wh)=>{"use strict";var Sh=Ja(),LN="Expected a function";function Ri(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(LN);var r=function(){var a=arguments,n=t?t.apply(this,a):a[0],o=r.cache;if(o.has(n))return o.get(n);var s=e.apply(this,a);return r.cache=o.set(n,s)||o,s};return r.cache=new(Ri.Cache||Sh),r}Ri.Cache=Sh;wh.exports=Ri});var Eh=u((GW,vh)=>{"use strict";var CN=Th(),qN=500;function UN(e){var t=CN(e,function(a){return r.size===qN&&r.clear(),a}),r=t.cache;return t}vh.exports=UN});var xi=u((kW,Rh)=>{"use strict";var DN=Eh(),NN=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,BN=/\\(\\)?/g,MN=DN(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(NN,function(r,a,n,o){t.push(n?o.replace(BN,"$1"):a||r)}),t});Rh.exports=MN});var _i=u((FW,xh)=>{"use strict";function GN(e,t){for(var r=-1,a=e==null?0:e.length,n=Array(a);++r<a;)n[r]=t(e[r],r,e);return n}xh.exports=GN});var qh=u((QW,Ch)=>{"use strict";var _h=Rt(),kN=_i(),FN=ee(),QN=fr(),jN=1/0,Oh=_h?_h.prototype:void 0,Ph=Oh?Oh.toString:void 0;function Lh(e){if(typeof e=="string")return e;if(FN(e))return kN(e,Lh)+"";if(QN(e))return Ph?Ph.call(e):"";var t=e+"";return t=="0"&&1/e==-jN?"-0":t}Ch.exports=Lh});var Oi=u((jW,Uh)=>{"use strict";var WN=qh();function $N(e){return e==null?"":WN(e)}Uh.exports=$N});var Pi=u((WW,Dh)=>{"use strict";var KN=ee(),VN=Bn(),YN=xi(),HN=Oi();function zN(e,t){return KN(e)?e:VN(e,t)?[e]:YN(HN(e))}Dh.exports=zN});var hr=u(($W,Nh)=>{"use strict";var JN=fr(),XN=1/0;function ZN(e){if(typeof e=="string"||JN(e))return e;var t=e+"";return t=="0"&&1/e==-XN?"-0":t}Nh.exports=ZN});var Li=u((KW,Bh)=>{"use strict";var eB=Pi(),tB=hr();function rB(e,t){t=eB(t,e);for(var r=0,a=t.length;e!=null&&r<a;)e=e[tB(t[r++])];return r&&r==a?e:void 0}Bh.exports=rB});var Gh=u((VW,Mh)=>{"use strict";var aB=Li();function nB(e,t,r){var a=e==null?void 0:aB(e,t);return a===void 0?r:a}Mh.exports=nB});var Fh=u((YW,kh)=>{"use strict";function oB(e,t){return e!=null&&t in Object(e)}kh.exports=oB});var jh=u((HW,Qh)=>{"use strict";var sB=Pi(),iB=Yr(),uB=ee(),pB=pa(),cB=en(),lB=hr();function dB(e,t,r){t=sB(t,e);for(var a=-1,n=t.length,o=!1;++a<n;){var s=lB(t[a]);if(!(o=e!=null&&r(e,s)))break;e=e[s]}return o||++a!=n?o:(n=e==null?0:e.length,!!n&&cB(n)&&pB(s,n)&&(uB(e)||iB(e)))}Qh.exports=dB});var $h=u((zW,Wh)=>{"use strict";var fB=Fh(),mB=jh();function gB(e,t){return e!=null&&mB(e,t,fB)}Wh.exports=gB});var Vh=u((JW,Kh)=>{"use strict";var yB=Ti(),hB=Gh(),AB=$h(),bB=Bn(),IB=vi(),SB=Ei(),wB=hr(),TB=1,vB=2;function EB(e,t){return bB(e)&&IB(t)?SB(wB(e),t):function(r){var a=hB(r,e);return a===void 0&&a===t?AB(r,e):yB(t,a,TB|vB)}}Kh.exports=EB});var Hh=u((XW,Yh)=>{"use strict";function RB(e){return function(t){return t?.[e]}}Yh.exports=RB});var Jh=u((ZW,zh)=>{"use strict";var xB=Li();function _B(e){return function(t){return xB(t,e)}}zh.exports=_B});var Zh=u((e$,Xh)=>{"use strict";var OB=Hh(),PB=Jh(),LB=Bn(),CB=hr();function qB(e){return LB(e)?OB(CB(e)):PB(e)}Xh.exports=qB});var Ci=u((t$,eA)=>{"use strict";var UB=bh(),DB=Vh(),NB=Hr(),BB=ee(),MB=Zh();function GB(e){return typeof e=="function"?e:e==null?NB:typeof e=="object"?BB(e)?DB(e[0],e[1]):UB(e):MB(e)}eA.exports=GB});var rA=u((r$,tA)=>{"use strict";var kB=Ai(),FB=Ci(),QB=1;function jB(e){return FB(typeof e=="function"?e:kB(e,QB))}tA.exports=jB});var nA=u((a$,aA)=>{"use strict";var WB=ho();function $B(e){var t=e==null?0:e.length;return t?WB(e,1):[]}aA.exports=$B});var sA=u((n$,oA)=>{"use strict";var KB=nA(),VB=Ao(),YB=Ha();function HB(e){return YB(VB(e,void 0,KB),e+"")}oA.exports=HB});var uA=u((o$,iA)=>{"use strict";var zB=qn(),JB=sA(),XB=256,ZB=JB(function(e,t){return zB(e,XB,void 0,void 0,void 0,t)});iA.exports=ZB});var cA=u((s$,pA)=>{"use strict";var eM=_i(),tM=er(),rM=ee(),aM=fr(),nM=xi(),oM=hr(),sM=Oi();function iM(e){return rM(e)?eM(e,oM):aM(e)?[e]:tM(nM(sM(e)))}pA.exports=iM});var dA=u((i$,lA)=>{"use strict";lA.exports={ary:Rg(),assign:ui(),clone:Dy(),curry:By(),forEach:Ln(),isArray:ee(),isError:Gy(),isFunction:zr(),isWeakMap:Fy(),iteratee:rA(),keys:ii(),rearg:uA(),toInteger:ai(),toPath:cA()}});var mA=u((u$,fA)=>{"use strict";var uM=tm(),pM=dA();function cM(e,t,r){return uM(pM,e,t,r)}fA.exports=cM});var qi=u((p$,yA)=>{"use strict";var lM=mA(),gA=lM("merge",jo());gA.placeholder=Gs();yA.exports=gA});var hb=u((tK,yb)=>{"use strict";function LM(e,t,r,a){for(var n=-1,o=e==null?0:e.length;++n<o;){var s=e[n];t(a,s,r(s),e)}return a}yb.exports=LM});var bb=u((rK,Ab)=>{"use strict";var CM=Co(),qM=mr();function UM(e,t){return e&&CM(e,t,qM)}Ab.exports=UM});var Sb=u((aK,Ib)=>{"use strict";var DM=Jt();function NM(e,t){return function(r,a){if(r==null)return r;if(!DM(r))return e(r,a);for(var n=r.length,o=t?n:-1,s=Object(r);(t?o--:++o<n)&&a(s[o],o,s)!==!1;);return r}}Ib.exports=NM});var Tb=u((nK,wb)=>{"use strict";var BM=bb(),MM=Sb(),GM=MM(BM);wb.exports=GM});var Eb=u((oK,vb)=>{"use strict";var kM=Tb();function FM(e,t,r,a){return kM(e,function(n,o,s){t(a,n,r(n),s)}),a}vb.exports=FM});var xb=u((sK,Rb)=>{"use strict";var QM=hb(),jM=Eb(),WM=Ci(),$M=ee();function KM(e,t){return function(r,a){var n=$M(r)?QM:jM,o=t?t():{};return n(r,e,WM(a,2),o)}}Rb.exports=KM});var Ob=u((iK,_b)=>{"use strict";var VM=ra(),YM=xb(),HM=Object.prototype,zM=HM.hasOwnProperty,JM=YM(function(e,t,r){zM.call(e,r)?e[r].push(t):VM(e,r,[t])});_b.exports=JM});var IG={};w(IG,{Method:()=>zn,ai:()=>Iu,api:()=>Hi,auditLogs:()=>gt,automations:()=>In,backups:()=>ve,branding:()=>dn,constants:()=>Qr,environmentVariables:()=>Ke,features:()=>Le,groups:()=>Q,init:()=>Hf,licensing:()=>Fe,logger:()=>Nt,mappers:()=>K,middleware:()=>ki,plugins:()=>Sn,publicApi:()=>vn,quotas:()=>We,scimGroups:()=>Ar,scimUsers:()=>de,sdk:()=>Di,users:()=>tt,utils:()=>Kt});module.exports=bI(IG);var zn=(o=>(o.POST="POST",o.GET="GET",o.PATCH="PATCH",o.DELETE="DELETE",o.PUT="PUT",o))(zn||{});var Di={};w(Di,{ai:()=>is,auditLogs:()=>gt,automations:()=>In,backups:()=>ve,branding:()=>dn,environmentVariables:()=>Ke,features:()=>Le,groups:()=>Q,init:()=>Hf,licensing:()=>Fe,logger:()=>Nt,plugins:()=>Sn,publicApi:()=>vn,quotas:()=>We,scimGroups:()=>Ar,scimUsers:()=>de,users:()=>tt,utils:()=>Kt});var dn={};w(dn,{getBrandingConfig:()=>p_});var Le={};w(Le,{checkBackups:()=>ye,checkFeature:()=>cn,checkFeatures:()=>ts,checkSCIM:()=>os,isAppBuildersEnabled:()=>Pt,isAuditLogsEnabled:()=>ln,isBackupsEnabled:()=>rs,isBrandingEnabled:()=>as,isEnforceableSSO:()=>pf,isExpandedPublicApiEnabled:()=>Ze,isPWAEnabled:()=>n_,isSSOEnforced:()=>o_,isSyncAutomationsEnabled:()=>r_,isTriggerAutomationRunEnabled:()=>a_,isUserGroupsEnabled:()=>ns,isViewPermissionEnabled:()=>s_,isViewReadonlyColumnsEnabled:()=>i_});var oe=require("@budibase/types"),Xe=require("@budibase/backend-core");var Fe={};w(Fe,{cache:()=>Oe,client:()=>lt,features:()=>$a,getFreeLicense:()=>Jo,getLicense:()=>Ho,getLicenseFromKey:()=>zo,keys:()=>es,offline:()=>un,quotas:()=>Ka});var Oe={};w(Oe,{getCachedLicense:()=>sf,invalidate:()=>uf,refresh:()=>xt});var Ca=require("@budibase/backend-core"),Tr,II=async()=>{Tr=await Ca.RedisClient.init(Ca.redis.utils.Databases.LICENSES)},SI=async()=>{Tr&&await Tr.finish()};process.on("exit",async()=>{await SI()});var Jn=async()=>(Tr||await II(),Tr);var lt={};w(lt,{activateLicenseKey:()=>lo,getLicense:()=>Wt,getLicenseFromKey:()=>co,triggerQuota:()=>sS});var Ou=C(require("node-fetch"));var Pu=require("@budibase/backend-core"),Xn=class{constructor(t){this.apiCall=t=>async(r="",a={})=>{a.headers||(a.headers={}),a.headers["Content-Type"]||(a.headers={"Content-Type":"application/json",Accept:"application/json",...a.headers});let n=a.headers["Content-Type"]==="application/json";Pu.logging.correlation.setHeader(a.headers);let o={method:t,body:n?JSON.stringify(a.body):a.body,headers:a.headers,credentials:"include"};return(0,Ou.default)(`${this.host}${r}`,o)};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}},Zn=Xn;var Qa=require("@budibase/types"),L=require("@budibase/backend-core");var Me={};w(Me,{bustCache:()=>ro,getCurrentUsageValues:()=>Mu,getQuotaUsage:()=>wt,setAllUsage:()=>no,setAppUsageValue:()=>ao,setUsage:()=>Du,setUsagePerApp:()=>Nu,utils:()=>Rr});var re=require("@budibase/types"),pe=require("@budibase/backend-core");var Rr={};w(Rr,{generateBaseQuotaUsage:()=>qa,generateNewMonthlyQuotas:()=>Er,generateNewQuotaUsage:()=>to,getBreakdownName:()=>Da,getCurrentMonthString:()=>ut,getQuotaDocId:()=>vr,setCurrentMonth:()=>Ua,setQuotaReset:()=>eo});var X=require("@budibase/types"),St=require("@budibase/backend-core"),vr=()=>St.context.isSelfHostUsingCloud()?`quota_usage_${St.context.getTenantId()}`:St.db.StaticDatabases.GLOBAL.docs.usageQuota,Lu=()=>{let e=new Date;return new Date(e.getFullYear(),e.getMonth()+1,1).toISOString()},eo=e=>{e.quotaReset=Lu()},ut=()=>{let e=new Date,t=e.getMonth()+1,r=e.getFullYear();return`${t}-${r}`},qa=()=>({usageQuota:{[X.StaticQuotaName.APPS]:0,[X.StaticQuotaName.ROWS]:0,[X.StaticQuotaName.PLUGINS]:0,[X.StaticQuotaName.USERS]:0,[X.StaticQuotaName.CREATORS]:0,[X.StaticQuotaName.USER_GROUPS]:0,[X.StaticQuotaName.AI_CUSTOM_CONFIGS]:0,triggers:{}},monthly:{[ut()]:Er()}}),to=()=>{let e={_id:vr(),quotaReset:Lu(),...qa(),apps:{}};return Ua(e),e},Er=()=>({[X.MonthlyQuotaName.QUERIES]:0,[X.MonthlyQuotaName.AUTOMATIONS]:0,[X.MonthlyQuotaName.BUDIBASE_AI_CREDITS]:0,triggers:{}}),Ua=e=>{let t=ut();e.monthly||(e.monthly={}),e.monthly[t]||(e.monthly[t]=Er()),e.monthly.current=e.monthly[t]},Da=(e,t)=>{if(!(!t||!e))switch(e){case X.MonthlyQuotaName.AUTOMATIONS:return X.BreakdownQuotaName.AUTOMATIONS;case X.MonthlyQuotaName.QUERIES:return St.db.isTableId(t)?X.BreakdownQuotaName.ROW_QUERIES:St.db.isDatasourceId(t)?X.BreakdownQuotaName.DATASOURCE_QUERIES:void 0}};var Cu=pe.Duration.fromSeconds(60).toMs(),{Writethrough:qu}=pe.cache.writethrough;function TI(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}var Na=()=>pe.tenancy.isSelfHostUsingCloud()?new qu(pe.tenancy.getSelfHostCloudDB(),Cu):new qu(pe.tenancy.getGlobalDB(),Cu);async function ro(e=0){let r=Na(),a=vr(),n=await r.tryGet(a);n&&n._rev&&await r.remove(a,n._rev).catch(async o=>{if(e<1)return await ro(e+1);throw o})}var wt=async()=>{let e=Na(),t=await e.tryGet(vr());if(!t){t=to();let{rev:r}=await e.put(t);t._rev=r}return Ua(t),eo(t),TI(t)},Du=async(e,t,r)=>no({name:t,type:r,values:{total:e}}),Nu=async(e,t,r)=>{let a=Na(),n=await wt(),o=Object.values(e).reduce((i,p)=>i+p,0);for(let[i,p]of Object.entries(e))n=Bu(n,t,r,{total:o,app:p},{appId:i});let s=await a.put(n);return n._rev=s.rev,n},vI=(e,t,r,a)=>{let n=Da(t,r);if(!n||!a?.breakdown)return e;e.breakdown||(e.breakdown={}),e.breakdown[n]||(e.breakdown[n]={parent:t,values:{}});let o=e.breakdown[n];return o.values[r]=a.breakdown,e},ao=(e,t,r,a={},n)=>{let o;try{o=pe.db.getProdAppID(a?.appId||pe.context.getAppId())}catch{}if(!o||!n.app||!re.APP_QUOTA_NAMES.includes(t))return e;e.apps?.[o]||(e.apps={...e.apps,[o]:qa()});let s=e.apps[o];switch(r){case re.QuotaUsageType.STATIC:s.usageQuota[t]=n.app;break;case re.QuotaUsageType.MONTHLY:{let i=ut(),p=t,f=s.monthly[i];f||(s.monthly[i]=Er(),f=s.monthly[i]),f[p]=n.app,re.BREAKDOWN_QUOTA_NAMES.includes(p)&&a?.id&&(f=vI(f,p,a.id,n));break}}return e},Uu=(e,t,r,a)=>{if(!re.APP_QUOTA_NAMES.includes(r))return{};let n;try{n=pe.db.getProdAppID(pe.context.getAppId())}catch{}if(!n||!e.apps||!e.apps[n])return{app:0};let o=e.apps[n];switch(t){case re.QuotaUsageType.STATIC:if(o.usageQuota?.[r])return{app:o.usageQuota[r]};break;case re.QuotaUsageType.MONTHLY:{let s=ut(),i=r;if(!o.monthly?.[s]?.[i])break;let p=o.monthly[s],f=p[i],m,y=Da(i,a);return y&&a&&p.breakdown?.[y]&&(m=p.breakdown[y]?.values[a]),{app:f,breakdown:m||0}}}return{app:0}},EI=(e,t,r)=>{t.usageQuota.triggers||(t.usageQuota.triggers={}),r&&(t.usageQuota.triggers[e]=r)},RI=(e,t,r,a)=>{r.monthly[t].triggers||(r.monthly[t].triggers={}),a&&(r.monthly[t].triggers[e]=a)},Bu=(e,t,r,a,n={})=>{if(r===re.QuotaUsageType.STATIC)t=t,e.usageQuota[t]=a.total,EI(t,e,a.triggers);else if(r===re.QuotaUsageType.MONTHLY){t=t;let o=ut();e.monthly[o][t]=a.total,RI(t,o,e,a.triggers)}else throw new Error(`Invalid usage type: ${r}`);return ao(e,t,r,n,a)},no=async e=>{let t=Array.isArray(e)?e:[e],r=Na(),a=await wt();for(let o of t)a=Bu(a,o.name,o.type,o.values,o.opts);let n=await r.put(a,0);return a._rev=n.rev,a},Mu=async(e,t,r)=>{let a=await wt(),n=0,o={};switch(e){case re.QuotaUsageType.STATIC:if(a.usageQuota[t]){let s=t;n=a.usageQuota[s],o=Uu(a,e,t,r)}break;case re.QuotaUsageType.MONTHLY:{let s=ut(),i=t;a.monthly[s][i]&&(n=a.monthly[s][i],o=Uu(a,e,t,r));break}default:throw new Error(`Invalid usage type: ${e}`)}return re.APP_QUOTA_NAMES.includes(t)&&!(o.app||o.breakdown)&&(o.app=o.app||0,o.breakdown=o.breakdown||0),{total:n,app:o.app,breakdown:o.breakdown}};var Se={};w(Se,{destroy:()=>OI,get:()=>oo,save:()=>_I});var pt=require("@budibase/backend-core"),xI=()=>({_id:pt.StaticDatabases.GLOBAL.docs.licenseInfo}),_I=async e=>{let t=await oo();t={...t,...e};let a=await pt.tenancy.getGlobalDB().put(t);return t._rev=a.rev,t},oo=async()=>{let e=pt.tenancy.getGlobalDB();try{return await e.get(pt.StaticDatabases.GLOBAL.docs.licenseInfo)}catch(t){if(t.status===404)return xI();throw t}},OI=async()=>{let e=pt.tenancy.getGlobalDB(),t=await oo();t&&t._rev&&await e.remove(pt.StaticDatabases.GLOBAL.docs.licenseInfo,t._rev)};var M={};w(M,{bulkSave:()=>FI,destroy:()=>QI,fetch:()=>BI,generateUserGroupID:()=>DI,get:()=>MI,getBulk:()=>GI,getByName:()=>so,getGroupUsers:()=>Ma,getGroupUsersParams:()=>ju,getUserGroupsParams:()=>Qu,save:()=>kI});var N=require("@budibase/backend-core");var _e=require("@budibase/types"),Ft=require("@budibase/backend-core");async function Gu(){let e=Ft.sql.designDoc.base("type");e.sql.tables={[_e.AUDIT_LOG_TYPE]:{fields:{appId:_e.SQLiteType.TEXT,event:_e.SQLiteType.TEXT,userId:_e.SQLiteType.TEXT,timestamp:_e.SQLiteType.TEXT,metadata:_e.SQLiteType.TEXT,name:_e.SQLiteType.TEXT,type:_e.SQLiteType.TEXT,fallback:_e.SQLiteType.TEXT}}};let t=Ft.context.getAuditLogsDB(),r;try{r=await t.get(Ft.SQLITE_DESIGN_DOC_ID),r={...r,...e}}catch(a){if(a.status===404)r=e;else throw a}await t.put(r)}var Ba=require("@budibase/backend-core"),{ViewName:PI,SEPARATOR:LI,DocumentType:CI,createView:qI}=Ba.db,UI=CI.USER+LI;async function ku(){let e=Ba.tenancy.getGlobalDB(),t=`function(doc) {
4
- if (doc._id.startsWith("${UI}") && Array.isArray(doc.userGroups)) {
3
+ `)}Qm.exports=NO});var Nn=u((jj,Wm)=>{"use strict";function BO(e,t){for(var r=-1,a=e==null?0:e.length;++r<a&&t(e[r],r,e)!==!1;);return e}Wm.exports=BO});var Km=u((Wj,$m)=>{"use strict";var MO=Nn(),GO=Uo(),kO=1,FO=2,QO=8,jO=16,WO=32,$O=64,KO=128,VO=256,YO=512,HO=[["ary",KO],["bind",kO],["bindKey",FO],["curry",QO],["curryRight",jO],["flip",YO],["partial",WO],["partialRight",$O],["rearg",VO]];function zO(e,t){return MO(HO,function(r){var a="_."+r[0];t&r[1]&&!GO(e,a)&&e.push(a)}),e.sort()}$m.exports=zO});var oi=u(($j,Vm)=>{"use strict";var JO=Fm(),XO=jm(),ZO=Xa(),eL=Km();function tL(e,t,r){var a=t+"";return ZO(e,XO(a,eL(JO(a),r)))}Vm.exports=tL});var si=u((Kj,zm)=>{"use strict";var rL=Mm(),aL=ni(),nL=oi(),oL=1,sL=2,iL=4,uL=8,Ym=32,Hm=64;function pL(e,t,r,a,n,o,s,i,p,m){var f=t&uL,h=f?s:void 0,g=f?void 0:s,S=f?o:void 0,O=f?void 0:o;t|=f?Ym:Hm,t&=~(f?Hm:Ym),t&iL||(t&=~(oL|sL));var _=[e,t,n,S,h,O,g,i,p,m],R=r.apply(void 0,_);return rL(e)&&aL(R,_),R.placeholder=a,nL(R,e,t)}zm.exports=pL});var ii=u((Vj,Jm)=>{"use strict";function cL(e){var t=e;return t.placeholder}Jm.exports=cL});var Zm=u((Yj,Xm)=>{"use strict";var lL=tr(),dL=la(),fL=Math.min;function mL(e,t){for(var r=e.length,a=fL(t.length,r),n=lL(e);a--;){var o=t[a];e[a]=dL(o,r)?n[o]:void 0}return e}Xm.exports=mL});var Bn=u((Hj,tg)=>{"use strict";var eg="__lodash_placeholder__";function gL(e,t){for(var r=-1,a=e.length,n=0,o=[];++r<a;){var s=e[r];(s===t||s===eg)&&(e[r]=eg,o[n++]=r)}return o}tg.exports=gL});var ui=u((zj,ng)=>{"use strict";var hL=ei(),yL=ti(),AL=Sm(),rg=wa(),bL=si(),IL=ii(),SL=Zm(),wL=Bn(),TL=oe(),vL=1,EL=2,RL=8,_L=16,xL=128,CL=512;function ag(e,t,r,a,n,o,s,i,p,m){var f=t&xL,h=t&vL,g=t&EL,S=t&(RL|_L),O=t&CL,_=g?void 0:rg(e);function R(){for(var E=arguments.length,U=Array(E),Oe=E;Oe--;)U[Oe]=arguments[Oe];if(S)var Se=IL(R),pt=AL(U,Se);if(a&&(U=hL(U,a,n,S)),o&&(U=yL(U,o,s,S)),E-=pt,S&&E<m){var Ft=wL(U,Se);return bL(e,t,ag,R.placeholder,r,U,Ft,i,p,m-E)}var Sr=h?r:this,wr=g?Sr[e]:e;return E=U.length,i?U=SL(U,i):O&&E>1&&U.reverse(),f&&p<E&&(U.length=p),this&&this!==TL&&this instanceof R&&(wr=_||rg(wr)),wr.apply(Sr,U)}return R}ng.exports=ag});var sg=u((Jj,og)=>{"use strict";var OL=Ja(),LL=wa(),PL=ui(),UL=si(),qL=ii(),DL=Bn(),NL=oe();function BL(e,t,r){var a=LL(e);function n(){for(var o=arguments.length,s=Array(o),i=o,p=qL(n);i--;)s[i]=arguments[i];var m=o<3&&s[0]!==p&&s[o-1]!==p?[]:DL(s,p);if(o-=m.length,o<r)return UL(e,t,PL,n.placeholder,void 0,s,m,void 0,void 0,r-o);var f=this&&this!==NL&&this instanceof n?a:e;return OL(f,this,s)}return n}og.exports=BL});var ug=u((Xj,ig)=>{"use strict";var ML=Ja(),GL=wa(),kL=oe(),FL=1;function QL(e,t,r,a){var n=t&FL,o=GL(e);function s(){for(var i=-1,p=arguments.length,m=-1,f=a.length,h=Array(f+p),g=this&&this!==kL&&this instanceof s?o:e;++m<f;)h[m]=a[m];for(;p--;)h[m++]=arguments[++i];return ML(g,n?r:this,h)}return s}ig.exports=QL});var mg=u((Zj,fg)=>{"use strict";var jL=ei(),WL=ti(),pg=Bn(),cg="__lodash_placeholder__",pi=1,$L=2,KL=4,lg=8,Ta=128,dg=256,VL=Math.min;function YL(e,t){var r=e[1],a=t[1],n=r|a,o=n<(pi|$L|Ta),s=a==Ta&&r==lg||a==Ta&&r==dg&&e[7].length<=t[8]||a==(Ta|dg)&&t[7].length<=t[8]&&r==lg;if(!(o||s))return e;a&pi&&(e[2]=t[2],n|=r&pi?0:KL);var i=t[3];if(i){var p=e[3];e[3]=p?jL(p,i,t[4]):i,e[4]=p?pg(e[3],cg):t[4]}return i=t[5],i&&(p=e[5],e[5]=p?WL(p,i,t[6]):i,e[6]=p?pg(e[5],cg):t[6]),i=t[7],i&&(e[7]=i),a&Ta&&(e[8]=e[8]==null?t[8]:VL(e[8],t[8])),e[9]==null&&(e[9]=t[9]),e[0]=t[0],e[1]=n,e}fg.exports=YL});var hg=u((eW,gg)=>{"use strict";var HL=/\s/;function zL(e){for(var t=e.length;t--&&HL.test(e.charAt(t)););return t}gg.exports=zL});var Ag=u((tW,yg)=>{"use strict";var JL=hg(),XL=/^\s+/;function ZL(e){return e&&e.slice(0,JL(e)+1).replace(XL,"")}yg.exports=ZL});var mr=u((rW,bg)=>{"use strict";var eP=mt(),tP=he(),rP="[object Symbol]";function aP(e){return typeof e=="symbol"||tP(e)&&eP(e)==rP}bg.exports=aP});var Tg=u((aW,wg)=>{"use strict";var nP=Ag(),Ig=Ee(),oP=mr(),Sg=0/0,sP=/^[-+]0x[0-9a-f]+$/i,iP=/^0b[01]+$/i,uP=/^0o[0-7]+$/i,pP=parseInt;function cP(e){if(typeof e=="number")return e;if(oP(e))return Sg;if(Ig(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=Ig(t)?t+"":t}if(typeof e!="string")return e===0?e:+e;e=nP(e);var r=iP.test(e);return r||uP.test(e)?pP(e.slice(2),r?2:8):sP.test(e)?Sg:+e}wg.exports=cP});var Rg=u((nW,Eg)=>{"use strict";var lP=Tg(),vg=1/0,dP=17976931348623157e292;function fP(e){if(!e)return e===0?e:0;if(e=lP(e),e===vg||e===-vg){var t=e<0?-1:1;return t*dP}return e===e?e:0}Eg.exports=fP});var ci=u((oW,_g)=>{"use strict";var mP=Rg();function gP(e){var t=mP(e),r=t%1;return t===t?r?t-r:t:0}_g.exports=gP});var Mn=u((sW,Pg)=>{"use strict";var hP=Zs(),yP=ym(),AP=sg(),bP=ui(),IP=ug(),SP=ri(),wP=mg(),TP=ni(),vP=oi(),xg=ci(),EP="Expected a function",Cg=1,RP=2,li=8,di=16,fi=32,Og=64,Lg=Math.max;function _P(e,t,r,a,n,o,s,i){var p=t&RP;if(!p&&typeof e!="function")throw new TypeError(EP);var m=a?a.length:0;if(m||(t&=~(fi|Og),a=n=void 0),s=s===void 0?s:Lg(xg(s),0),i=i===void 0?i:xg(i),m-=n?n.length:0,t&Og){var f=a,h=n;a=n=void 0}var g=p?void 0:SP(e),S=[e,t,r,a,n,f,h,o,s,i];if(g&&wP(S,g),e=S[0],t=S[1],r=S[2],a=S[3],n=S[4],i=S[9]=S[9]===void 0?p?0:e.length:Lg(S[9]-m,0),!i&&t&(li|di)&&(t&=~(li|di)),!t||t==Cg)var O=yP(e,t,r);else t==li||t==di?O=AP(e,t,i):(t==fi||t==(Cg|fi))&&!n.length?O=IP(e,t,r,a):O=bP.apply(void 0,S);var _=g?hP:TP;return vP(_(O,S),e,t)}Pg.exports=_P});var qg=u((iW,Ug)=>{"use strict";var xP=Mn(),CP=128;function OP(e,t,r){return t=r?void 0:t,t=e&&t==null?e.length:t,xP(e,CP,void 0,void 0,void 0,void 0,t)}Ug.exports=OP});var Ng=u((uW,Dg)=>{"use strict";var LP=Wo(),PP=LP(Object.keys,Object);Dg.exports=PP});var mi=u((pW,Bg)=>{"use strict";var UP=sn(),qP=Ng(),DP=Object.prototype,NP=DP.hasOwnProperty;function BP(e){if(!UP(e))return qP(e);var t=[];for(var r in Object(e))NP.call(e,r)&&r!="constructor"&&t.push(r);return t}Bg.exports=BP});var gr=u((cW,Mg)=>{"use strict";var MP=zo(),GP=mi(),kP=Xt();function FP(e){return kP(e)?MP(e):GP(e)}Mg.exports=FP});var gi=u((lW,Gg)=>{"use strict";var QP=nr(),jP=gr();function WP(e,t){return e&&QP(t,jP(t),e)}Gg.exports=WP});var Fg=u((dW,kg)=>{"use strict";var $P=nr(),KP=or();function VP(e,t){return e&&$P(t,KP(t),e)}kg.exports=VP});var jg=u((fW,Qg)=>{"use strict";function YP(e,t){for(var r=-1,a=e==null?0:e.length,n=0,o=[];++r<a;){var s=e[r];t(s,r,e)&&(o[n++]=s)}return o}Qg.exports=YP});var hi=u((mW,Wg)=>{"use strict";function HP(){return[]}Wg.exports=HP});var Gn=u((gW,Kg)=>{"use strict";var zP=jg(),JP=hi(),XP=Object.prototype,ZP=XP.propertyIsEnumerable,$g=Object.getOwnPropertySymbols,eU=$g?function(e){return e==null?[]:(e=Object(e),zP($g(e),function(t){return ZP.call(e,t)}))}:JP;Kg.exports=eU});var Yg=u((hW,Vg)=>{"use strict";var tU=nr(),rU=Gn();function aU(e,t){return tU(e,rU(e),t)}Vg.exports=aU});var yi=u((yW,Hg)=>{"use strict";var nU=za(),oU=on(),sU=Gn(),iU=hi(),uU=Object.getOwnPropertySymbols,pU=uU?function(e){for(var t=[];e;)nU(t,sU(e)),e=oU(e);return t}:iU;Hg.exports=pU});var Jg=u((AW,zg)=>{"use strict";var cU=nr(),lU=yi();function dU(e,t){return cU(e,lU(e),t)}zg.exports=dU});var Ai=u((bW,Xg)=>{"use strict";var fU=za(),mU=re();function gU(e,t,r){var a=t(e);return mU(e)?a:fU(a,r(e))}Xg.exports=gU});var bi=u((IW,Zg)=>{"use strict";var hU=Ai(),yU=Gn(),AU=gr();function bU(e){return hU(e,AU,yU)}Zg.exports=bU});var th=u((SW,eh)=>{"use strict";var IU=Ai(),SU=yi(),wU=or();function TU(e){return IU(e,wU,SU)}eh.exports=TU});var ah=u((wW,rh)=>{"use strict";var vU=gt(),EU=oe(),RU=vU(EU,"DataView");rh.exports=RU});var oh=u((TW,nh)=>{"use strict";var _U=gt(),xU=oe(),CU=_U(xU,"Promise");nh.exports=CU});var yr=u((vW,dh)=>{"use strict";var Ii=ah(),Si=Za(),wi=oh(),Ti=Do(),vi=Js(),lh=mt(),hr=xo(),sh="[object Map]",OU="[object Object]",ih="[object Promise]",uh="[object Set]",ph="[object WeakMap]",ch="[object DataView]",LU=hr(Ii),PU=hr(Si),UU=hr(wi),qU=hr(Ti),DU=hr(vi),Nt=lh;(Ii&&Nt(new Ii(new ArrayBuffer(1)))!=ch||Si&&Nt(new Si)!=sh||wi&&Nt(wi.resolve())!=ih||Ti&&Nt(new Ti)!=uh||vi&&Nt(new vi)!=ph)&&(Nt=function(e){var t=lh(e),r=t==OU?e.constructor:void 0,a=r?hr(r):"";if(a)switch(a){case LU:return ch;case PU:return sh;case UU:return ih;case qU:return uh;case DU:return ph}return t});dh.exports=Nt});var mh=u((EW,fh)=>{"use strict";var NU=Object.prototype,BU=NU.hasOwnProperty;function MU(e){var t=e.length,r=new e.constructor(t);return t&&typeof e[0]=="string"&&BU.call(e,"index")&&(r.index=e.index,r.input=e.input),r}fh.exports=MU});var hh=u((RW,gh)=>{"use strict";var GU=nn();function kU(e,t){var r=t?GU(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.byteLength)}gh.exports=kU});var Ah=u((_W,yh)=>{"use strict";var FU=/\w*$/;function QU(e){var t=new e.constructor(e.source,FU.exec(e));return t.lastIndex=e.lastIndex,t}yh.exports=QU});var Th=u((xW,wh)=>{"use strict";var bh=xt(),Ih=bh?bh.prototype:void 0,Sh=Ih?Ih.valueOf:void 0;function jU(e){return Sh?Object(Sh.call(e)):{}}wh.exports=jU});var Eh=u((CW,vh)=>{"use strict";var WU=nn(),$U=hh(),KU=Ah(),VU=Th(),YU=jo(),HU="[object Boolean]",zU="[object Date]",JU="[object Map]",XU="[object Number]",ZU="[object RegExp]",eq="[object Set]",tq="[object String]",rq="[object Symbol]",aq="[object ArrayBuffer]",nq="[object DataView]",oq="[object Float32Array]",sq="[object Float64Array]",iq="[object Int8Array]",uq="[object Int16Array]",pq="[object Int32Array]",cq="[object Uint8Array]",lq="[object Uint8ClampedArray]",dq="[object Uint16Array]",fq="[object Uint32Array]";function mq(e,t,r){var a=e.constructor;switch(t){case aq:return WU(e);case HU:case zU:return new a(+e);case nq:return $U(e,r);case oq:case sq:case iq:case uq:case pq:case cq:case lq:case dq:case fq:return YU(e,r);case JU:return new a;case XU:case tq:return new a(e);case ZU:return KU(e);case eq:return new a;case rq:return VU(e)}}vh.exports=mq});var _h=u((OW,Rh)=>{"use strict";var gq=yr(),hq=he(),yq="[object Map]";function Aq(e){return hq(e)&&gq(e)==yq}Rh.exports=Aq});var Lh=u((LW,Oh)=>{"use strict";var bq=_h(),Iq=un(),xh=pn(),Ch=xh&&xh.isMap,Sq=Ch?Iq(Ch):bq;Oh.exports=Sq});var Uh=u((PW,Ph)=>{"use strict";var wq=yr(),Tq=he(),vq="[object Set]";function Eq(e){return Tq(e)&&wq(e)==vq}Ph.exports=Eq});var Bh=u((UW,Nh)=>{"use strict";var Rq=Uh(),_q=un(),qh=pn(),Dh=qh&&qh.isSet,xq=Dh?_q(Dh):Rq;Nh.exports=xq});var Ei=u((qW,Fh)=>{"use strict";var Cq=aa(),Oq=Nn(),Lq=Ho(),Pq=gi(),Uq=Fg(),qq=Fo(),Dq=tr(),Nq=Yg(),Bq=Jg(),Mq=bi(),Gq=th(),kq=yr(),Fq=mh(),Qq=Eh(),jq=$o(),Wq=re(),$q=ua(),Kq=Lh(),Vq=Ee(),Yq=Bh(),Hq=gr(),zq=or(),Jq=1,Xq=2,Zq=4,Mh="[object Arguments]",eD="[object Array]",tD="[object Boolean]",rD="[object Date]",aD="[object Error]",Gh="[object Function]",nD="[object GeneratorFunction]",oD="[object Map]",sD="[object Number]",kh="[object Object]",iD="[object RegExp]",uD="[object Set]",pD="[object String]",cD="[object Symbol]",lD="[object WeakMap]",dD="[object ArrayBuffer]",fD="[object DataView]",mD="[object Float32Array]",gD="[object Float64Array]",hD="[object Int8Array]",yD="[object Int16Array]",AD="[object Int32Array]",bD="[object Uint8Array]",ID="[object Uint8ClampedArray]",SD="[object Uint16Array]",wD="[object Uint32Array]",D={};D[Mh]=D[eD]=D[dD]=D[fD]=D[tD]=D[rD]=D[mD]=D[gD]=D[hD]=D[yD]=D[AD]=D[oD]=D[sD]=D[kh]=D[iD]=D[uD]=D[pD]=D[cD]=D[bD]=D[ID]=D[SD]=D[wD]=!0;D[aD]=D[Gh]=D[lD]=!1;function kn(e,t,r,a,n,o){var s,i=t&Jq,p=t&Xq,m=t&Zq;if(r&&(s=n?r(e,a,n,o):r(e)),s!==void 0)return s;if(!Vq(e))return e;var f=Wq(e);if(f){if(s=Fq(e),!i)return Dq(e,s)}else{var h=kq(e),g=h==Gh||h==nD;if($q(e))return qq(e,i);if(h==kh||h==Mh||g&&!n){if(s=p||g?{}:jq(e),!i)return p?Bq(e,Uq(s,e)):Nq(e,Pq(s,e))}else{if(!D[h])return n?e:{};s=Qq(e,h,i)}}o||(o=new Cq);var S=o.get(e);if(S)return S;o.set(e,s),Yq(e)?e.forEach(function(R){s.add(kn(R,t,r,R,e,o))}):Kq(e)&&e.forEach(function(R,E){s.set(E,kn(R,t,r,E,e,o))});var O=m?p?Gq:Mq:p?zq:Hq,_=f?void 0:O(e);return Oq(_||e,function(R,E){_&&(E=R,R=e[E]),Lq(s,E,kn(R,t,r,E,e,o))}),s}Fh.exports=kn});var jh=u((DW,Qh)=>{"use strict";var TD=Ei(),vD=4;function ED(e){return TD(e,vD)}Qh.exports=ED});var $h=u((NW,Wh)=>{"use strict";var RD=Mn(),_D=8;function Ri(e,t,r){t=r?void 0:t;var a=RD(e,_D,void 0,void 0,void 0,void 0,void 0,t);return a.placeholder=Ri.placeholder,a}Ri.placeholder={};Wh.exports=Ri});var Vh=u((BW,Kh)=>{"use strict";var xD=mt(),CD=he(),OD=Ko(),LD="[object DOMException]",PD="[object Error]";function UD(e){if(!CD(e))return!1;var t=xD(e);return t==PD||t==LD||typeof e.message=="string"&&typeof e.name=="string"&&!OD(e)}Kh.exports=UD});var Hh=u((MW,Yh)=>{"use strict";var qD=yr(),DD=he(),ND="[object WeakMap]";function BD(e){return DD(e)&&qD(e)==ND}Yh.exports=BD});var Jh=u((GW,zh)=>{"use strict";function MD(e,t){for(var r=-1,a=e==null?0:e.length;++r<a;)if(t(e[r],r,e))return!0;return!1}zh.exports=MD});var _i=u((kW,Xh)=>{"use strict";var GD=Po(),kD=Jh(),FD=qo(),QD=1,jD=2;function WD(e,t,r,a,n,o){var s=r&QD,i=e.length,p=t.length;if(i!=p&&!(s&&p>i))return!1;var m=o.get(e),f=o.get(t);if(m&&f)return m==t&&f==e;var h=-1,g=!0,S=r&jD?new GD:void 0;for(o.set(e,t),o.set(t,e);++h<i;){var O=e[h],_=t[h];if(a)var R=s?a(_,O,h,t,e,o):a(O,_,h,e,t,o);if(R!==void 0){if(R)continue;g=!1;break}if(S){if(!kD(t,function(E,U){if(!FD(S,U)&&(O===E||n(O,E,r,a,o)))return S.push(U)})){g=!1;break}}else if(!(O===_||n(O,_,r,a,o))){g=!1;break}}return o.delete(e),o.delete(t),g}Xh.exports=WD});var ey=u((FW,Zh)=>{"use strict";function $D(e){var t=-1,r=Array(e.size);return e.forEach(function(a,n){r[++t]=[n,a]}),r}Zh.exports=$D});var oy=u((QW,ny)=>{"use strict";var ty=xt(),ry=Qo(),KD=Ht(),VD=_i(),YD=ey(),HD=rn(),zD=1,JD=2,XD="[object Boolean]",ZD="[object Date]",eN="[object Error]",tN="[object Map]",rN="[object Number]",aN="[object RegExp]",nN="[object Set]",oN="[object String]",sN="[object Symbol]",iN="[object ArrayBuffer]",uN="[object DataView]",ay=ty?ty.prototype:void 0,xi=ay?ay.valueOf:void 0;function pN(e,t,r,a,n,o,s){switch(r){case uN:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case iN:return!(e.byteLength!=t.byteLength||!o(new ry(e),new ry(t)));case XD:case ZD:case rN:return KD(+e,+t);case eN:return e.name==t.name&&e.message==t.message;case aN:case oN:return e==t+"";case tN:var i=YD;case nN:var p=a&zD;if(i||(i=HD),e.size!=t.size&&!p)return!1;var m=s.get(e);if(m)return m==t;a|=JD,s.set(e,t);var f=VD(i(e),i(t),a,n,o,s);return s.delete(e),f;case sN:if(xi)return xi.call(e)==xi.call(t)}return!1}ny.exports=pN});var uy=u((jW,iy)=>{"use strict";var sy=bi(),cN=1,lN=Object.prototype,dN=lN.hasOwnProperty;function fN(e,t,r,a,n,o){var s=r&cN,i=sy(e),p=i.length,m=sy(t),f=m.length;if(p!=f&&!s)return!1;for(var h=p;h--;){var g=i[h];if(!(s?g in t:dN.call(t,g)))return!1}var S=o.get(e),O=o.get(t);if(S&&O)return S==t&&O==e;var _=!0;o.set(e,t),o.set(t,e);for(var R=s;++h<p;){g=i[h];var E=e[g],U=t[g];if(a)var Oe=s?a(U,E,g,t,e,o):a(E,U,g,e,t,o);if(!(Oe===void 0?E===U||n(E,U,r,a,o):Oe)){_=!1;break}R||(R=g=="constructor")}if(_&&!R){var Se=e.constructor,pt=t.constructor;Se!=pt&&"constructor"in e&&"constructor"in t&&!(typeof Se=="function"&&Se instanceof Se&&typeof pt=="function"&&pt instanceof pt)&&(_=!1)}return o.delete(e),o.delete(t),_}iy.exports=fN});var hy=u((WW,gy)=>{"use strict";var Ci=aa(),mN=_i(),gN=oy(),hN=uy(),py=yr(),cy=re(),ly=ua(),yN=cn(),AN=1,dy="[object Arguments]",fy="[object Array]",Fn="[object Object]",bN=Object.prototype,my=bN.hasOwnProperty;function IN(e,t,r,a,n,o){var s=cy(e),i=cy(t),p=s?fy:py(e),m=i?fy:py(t);p=p==dy?Fn:p,m=m==dy?Fn:m;var f=p==Fn,h=m==Fn,g=p==m;if(g&&ly(e)){if(!ly(t))return!1;s=!0,f=!1}if(g&&!f)return o||(o=new Ci),s||yN(e)?mN(e,t,r,a,n,o):gN(e,t,p,r,a,n,o);if(!(r&AN)){var S=f&&my.call(e,"__wrapped__"),O=h&&my.call(t,"__wrapped__");if(S||O){var _=S?e.value():e,R=O?t.value():t;return o||(o=new Ci),n(_,R,r,a,o)}}return g?(o||(o=new Ci),hN(e,t,r,a,n,o)):!1}gy.exports=IN});var Oi=u(($W,by)=>{"use strict";var SN=hy(),yy=he();function Ay(e,t,r,a,n){return e===t?!0:e==null||t==null||!yy(e)&&!yy(t)?e!==e&&t!==t:SN(e,t,r,a,Ay,n)}by.exports=Ay});var Sy=u((KW,Iy)=>{"use strict";var wN=aa(),TN=Oi(),vN=1,EN=2;function RN(e,t,r,a){var n=r.length,o=n,s=!a;if(e==null)return!o;for(e=Object(e);n--;){var i=r[n];if(s&&i[2]?i[1]!==e[i[0]]:!(i[0]in e))return!1}for(;++n<o;){i=r[n];var p=i[0],m=e[p],f=i[1];if(s&&i[2]){if(m===void 0&&!(p in e))return!1}else{var h=new wN;if(a)var g=a(m,f,p,e,t,h);if(!(g===void 0?TN(f,m,vN|EN,a,h):g))return!1}}return!0}Iy.exports=RN});var Li=u((VW,wy)=>{"use strict";var _N=Ee();function xN(e){return e===e&&!_N(e)}wy.exports=xN});var vy=u((YW,Ty)=>{"use strict";var CN=Li(),ON=gr();function LN(e){for(var t=ON(e),r=t.length;r--;){var a=t[r],n=e[a];t[r]=[a,n,CN(n)]}return t}Ty.exports=LN});var Pi=u((HW,Ey)=>{"use strict";function PN(e,t){return function(r){return r==null?!1:r[e]===t&&(t!==void 0||e in Object(r))}}Ey.exports=PN});var _y=u((zW,Ry)=>{"use strict";var UN=Sy(),qN=vy(),DN=Pi();function NN(e){var t=qN(e);return t.length==1&&t[0][2]?DN(t[0][0],t[0][1]):function(r){return r===e||UN(r,e,t)}}Ry.exports=NN});var Qn=u((JW,xy)=>{"use strict";var BN=re(),MN=mr(),GN=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,kN=/^\w*$/;function FN(e,t){if(BN(e))return!1;var r=typeof e;return r=="number"||r=="symbol"||r=="boolean"||e==null||MN(e)?!0:kN.test(e)||!GN.test(e)||t!=null&&e in Object(t)}xy.exports=FN});var Ly=u((XW,Oy)=>{"use strict";var Cy=en(),QN="Expected a function";function Ui(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(QN);var r=function(){var a=arguments,n=t?t.apply(this,a):a[0],o=r.cache;if(o.has(n))return o.get(n);var s=e.apply(this,a);return r.cache=o.set(n,s)||o,s};return r.cache=new(Ui.Cache||Cy),r}Ui.Cache=Cy;Oy.exports=Ui});var Uy=u((ZW,Py)=>{"use strict";var jN=Ly(),WN=500;function $N(e){var t=jN(e,function(a){return r.size===WN&&r.clear(),a}),r=t.cache;return t}Py.exports=$N});var qi=u((e$,qy)=>{"use strict";var KN=Uy(),VN=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,YN=/\\(\\)?/g,HN=KN(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(VN,function(r,a,n,o){t.push(n?o.replace(YN,"$1"):a||r)}),t});qy.exports=HN});var Di=u((t$,Dy)=>{"use strict";function zN(e,t){for(var r=-1,a=e==null?0:e.length,n=Array(a);++r<a;)n[r]=t(e[r],r,e);return n}Dy.exports=zN});var Fy=u((r$,ky)=>{"use strict";var Ny=xt(),JN=Di(),XN=re(),ZN=mr(),eB=1/0,By=Ny?Ny.prototype:void 0,My=By?By.toString:void 0;function Gy(e){if(typeof e=="string")return e;if(XN(e))return JN(e,Gy)+"";if(ZN(e))return My?My.call(e):"";var t=e+"";return t=="0"&&1/e==-eB?"-0":t}ky.exports=Gy});var Ni=u((a$,Qy)=>{"use strict";var tB=Fy();function rB(e){return e==null?"":tB(e)}Qy.exports=rB});var Bi=u((n$,jy)=>{"use strict";var aB=re(),nB=Qn(),oB=qi(),sB=Ni();function iB(e,t){return aB(e)?e:nB(e,t)?[e]:oB(sB(e))}jy.exports=iB});var Ar=u((o$,Wy)=>{"use strict";var uB=mr(),pB=1/0;function cB(e){if(typeof e=="string"||uB(e))return e;var t=e+"";return t=="0"&&1/e==-pB?"-0":t}Wy.exports=cB});var Mi=u((s$,$y)=>{"use strict";var lB=Bi(),dB=Ar();function fB(e,t){t=lB(t,e);for(var r=0,a=t.length;e!=null&&r<a;)e=e[dB(t[r++])];return r&&r==a?e:void 0}$y.exports=fB});var Vy=u((i$,Ky)=>{"use strict";var mB=Mi();function gB(e,t,r){var a=e==null?void 0:mB(e,t);return a===void 0?r:a}Ky.exports=gB});var Hy=u((u$,Yy)=>{"use strict";function hB(e,t){return e!=null&&t in Object(e)}Yy.exports=hB});var Jy=u((p$,zy)=>{"use strict";var yB=Bi(),AB=zr(),bB=re(),IB=la(),SB=an(),wB=Ar();function TB(e,t,r){t=yB(t,e);for(var a=-1,n=t.length,o=!1;++a<n;){var s=wB(t[a]);if(!(o=e!=null&&r(e,s)))break;e=e[s]}return o||++a!=n?o:(n=e==null?0:e.length,!!n&&SB(n)&&IB(s,n)&&(bB(e)||AB(e)))}zy.exports=TB});var Zy=u((c$,Xy)=>{"use strict";var vB=Hy(),EB=Jy();function RB(e,t){return e!=null&&EB(e,t,vB)}Xy.exports=RB});var tA=u((l$,eA)=>{"use strict";var _B=Oi(),xB=Vy(),CB=Zy(),OB=Qn(),LB=Li(),PB=Pi(),UB=Ar(),qB=1,DB=2;function NB(e,t){return OB(e)&&LB(t)?PB(UB(e),t):function(r){var a=xB(r,e);return a===void 0&&a===t?CB(r,e):_B(t,a,qB|DB)}}eA.exports=NB});var aA=u((d$,rA)=>{"use strict";function BB(e){return function(t){return t?.[e]}}rA.exports=BB});var oA=u((f$,nA)=>{"use strict";var MB=Mi();function GB(e){return function(t){return MB(t,e)}}nA.exports=GB});var iA=u((m$,sA)=>{"use strict";var kB=aA(),FB=oA(),QB=Qn(),jB=Ar();function WB(e){return QB(e)?kB(jB(e)):FB(e)}sA.exports=WB});var Gi=u((g$,uA)=>{"use strict";var $B=_y(),KB=tA(),VB=Jr(),YB=re(),HB=iA();function zB(e){return typeof e=="function"?e:e==null?VB:typeof e=="object"?YB(e)?KB(e[0],e[1]):$B(e):HB(e)}uA.exports=zB});var cA=u((h$,pA)=>{"use strict";var JB=Ei(),XB=Gi(),ZB=1;function eM(e){return XB(typeof e=="function"?e:JB(e,ZB))}pA.exports=eM});var dA=u((y$,lA)=>{"use strict";var tM=Eo();function rM(e){var t=e==null?0:e.length;return t?tM(e,1):[]}lA.exports=rM});var mA=u((A$,fA)=>{"use strict";var aM=dA(),nM=Ro(),oM=Xa();function sM(e){return oM(nM(e,void 0,aM),e+"")}fA.exports=sM});var hA=u((b$,gA)=>{"use strict";var iM=Mn(),uM=mA(),pM=256,cM=uM(function(e,t){return iM(e,pM,void 0,void 0,void 0,t)});gA.exports=cM});var AA=u((I$,yA)=>{"use strict";var lM=Di(),dM=tr(),fM=re(),mM=mr(),gM=qi(),hM=Ar(),yM=Ni();function AM(e){return fM(e)?lM(e,hM):mM(e)?[e]:dM(gM(yM(e)))}yA.exports=AM});var IA=u((S$,bA)=>{"use strict";bA.exports={ary:qg(),assign:gi(),clone:jh(),curry:$h(),forEach:Nn(),isArray:re(),isError:Vh(),isFunction:Xr(),isWeakMap:Hh(),iteratee:cA(),keys:mi(),rearg:hA(),toInteger:ci(),toPath:AA()}});var wA=u((w$,SA)=>{"use strict";var bM=pm(),IM=IA();function SM(e,t,r){return bM(IM,e,t,r)}SA.exports=SM});var ki=u((T$,vA)=>{"use strict";var wM=wA(),TA=wM("merge",Jo());TA.placeholder=Vs();vA.exports=TA});var Eb=u((gK,vb)=>{"use strict";function QM(e,t,r,a){for(var n=-1,o=e==null?0:e.length;++n<o;){var s=e[n];t(a,s,r(s),e)}return a}vb.exports=QM});var _b=u((hK,Rb)=>{"use strict";var jM=ko(),WM=gr();function $M(e,t){return e&&jM(e,t,WM)}Rb.exports=$M});var Cb=u((yK,xb)=>{"use strict";var KM=Xt();function VM(e,t){return function(r,a){if(r==null)return r;if(!KM(r))return e(r,a);for(var n=r.length,o=t?n:-1,s=Object(r);(t?o--:++o<n)&&a(s[o],o,s)!==!1;);return r}}xb.exports=VM});var Lb=u((AK,Ob)=>{"use strict";var YM=_b(),HM=Cb(),zM=HM(YM);Ob.exports=zM});var Ub=u((bK,Pb)=>{"use strict";var JM=Lb();function XM(e,t,r,a){return JM(e,function(n,o,s){t(a,n,r(n),s)}),a}Pb.exports=XM});var Db=u((IK,qb)=>{"use strict";var ZM=Eb(),eG=Ub(),tG=Gi(),rG=re();function aG(e,t){return function(r,a){var n=rG(r)?ZM:eG,o=t?t():{};return n(r,e,tG(a,2),o)}}qb.exports=aG});var Bb=u((SK,Nb)=>{"use strict";var nG=na(),oG=Db(),sG=Object.prototype,iG=sG.hasOwnProperty,uG=oG(function(e,t,r){iG.call(e,r)?e[r].push(t):nG(e,r,[t])});Nb.exports=uG});var PG={};w(PG,{Method:()=>no,ai:()=>xu,api:()=>ru,auditLogs:()=>At,automations:()=>En,backups:()=>Re,branding:()=>hn,constants:()=>Wr,environmentVariables:()=>Ye,features:()=>qe,groups:()=>j,init:()=>am,licensing:()=>je,logger:()=>Bt,mappers:()=>V,middleware:()=>Vi,plugins:()=>Rn,publicApi:()=>Cn,quotas:()=>Ke,scimGroups:()=>br,scimUsers:()=>fe,sdk:()=>Qi,users:()=>at,utils:()=>Vt});module.exports=CI(PG);var no=(o=>(o.POST="POST",o.GET="GET",o.PATCH="PATCH",o.DELETE="DELETE",o.PUT="PUT",o))(no||{});var Qi={};w(Qi,{ai:()=>ms,auditLogs:()=>At,automations:()=>En,backups:()=>Re,branding:()=>hn,environmentVariables:()=>Ye,features:()=>qe,groups:()=>j,init:()=>am,licensing:()=>je,logger:()=>Bt,plugins:()=>Rn,publicApi:()=>Cn,quotas:()=>Ke,scimGroups:()=>br,scimUsers:()=>fe,users:()=>at,utils:()=>Vt});var hn={};w(hn,{getBrandingConfig:()=>bx});var qe={};w(qe,{checkBackups:()=>ye,checkFeature:()=>mn,checkFeatures:()=>us,checkSCIM:()=>ds,isAppBuildersEnabled:()=>Pt,isAuditLogsEnabled:()=>gn,isBackupsEnabled:()=>ps,isBrandingEnabled:()=>cs,isEnforceableSSO:()=>yf,isExpandedPublicApiEnabled:()=>tt,isPWAEnabled:()=>mx,isSSOEnforced:()=>gx,isSyncAutomationsEnabled:()=>dx,isTriggerAutomationRunEnabled:()=>fx,isUserGroupsEnabled:()=>ls,isViewPermissionEnabled:()=>hx,isViewReadonlyColumnsEnabled:()=>yx});var se=require("@budibase/types"),et=require("@budibase/backend-core");var je={};w(je,{cache:()=>Pe,client:()=>ft,features:()=>Ya,getFreeLicense:()=>os,getLicense:()=>as,getLicenseFromKey:()=>ns,keys:()=>is,offline:()=>ln,quotas:()=>Ha});var Pe={};w(Pe,{getCachedLicense:()=>gf,invalidate:()=>hf,refresh:()=>Ct});var Da=require("@budibase/backend-core"),vr,OI=async()=>{vr=await Da.RedisClient.init(Da.redis.utils.Databases.LICENSES)},LI=async()=>{vr&&await vr.finish()};process.on("exit",async()=>{await LI()});var oo=async()=>(vr||await OI(),vr);var ft={};w(ft,{activateLicenseKey:()=>Io,getLicense:()=>$t,getLicenseFromKey:()=>bo,triggerQuota:()=>hS});var Bu=P(require("node-fetch"));var Mu=require("@budibase/backend-core"),so=class{constructor(t){this.apiCall=t=>async(r="",a={})=>{a.headers||(a.headers={}),a.headers["Content-Type"]||(a.headers={"Content-Type":"application/json",Accept:"application/json",...a.headers});let n=a.headers["Content-Type"]==="application/json";Mu.logging.correlation.setHeader(a.headers);let o={method:t,body:n?JSON.stringify(a.body):a.body,headers:a.headers,credentials:"include"};return(0,Bu.default)(`${this.host}${r}`,o)};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}},io=so;var $a=require("@budibase/types"),L=require("@budibase/backend-core");var ke={};w(ke,{bustCache:()=>co,getCurrentUsageValues:()=>Ku,getQuotaUsage:()=>vt,setAllUsage:()=>fo,setAppUsageValue:()=>lo,setUsage:()=>ju,setUsagePerApp:()=>Wu,utils:()=>_r});var ne=require("@budibase/types"),ce=require("@budibase/backend-core");var _r={};w(_r,{generateBaseQuotaUsage:()=>Na,generateNewMonthlyQuotas:()=>Rr,generateNewQuotaUsage:()=>po,getBreakdownName:()=>Ma,getCurrentMonthString:()=>ct,getQuotaDocId:()=>Er,setCurrentMonth:()=>Ba,setQuotaReset:()=>uo});var Y=require("@budibase/types"),Tt=require("@budibase/backend-core"),Er=()=>Tt.context.isSelfHostUsingCloud()?`quota_usage_${Tt.context.getTenantId()}`:Tt.db.StaticDatabases.GLOBAL.docs.usageQuota,Gu=()=>{let e=new Date;return new Date(e.getFullYear(),e.getMonth()+1,1).toISOString()},uo=e=>{e.quotaReset=Gu()},ct=()=>{let e=new Date,t=e.getMonth()+1,r=e.getFullYear();return`${t}-${r}`},Na=()=>({usageQuota:{[Y.StaticQuotaName.APPS]:0,[Y.StaticQuotaName.ROWS]:0,[Y.StaticQuotaName.PLUGINS]:0,[Y.StaticQuotaName.USERS]:0,[Y.StaticQuotaName.CREATORS]:0,[Y.StaticQuotaName.USER_GROUPS]:0,[Y.StaticQuotaName.AI_CUSTOM_CONFIGS]:0,triggers:{}},monthly:{[ct()]:Rr()}}),po=()=>{let e={_id:Er(),quotaReset:Gu(),...Na(),apps:{}};return Ba(e),e},Rr=()=>({[Y.MonthlyQuotaName.QUERIES]:0,[Y.MonthlyQuotaName.AUTOMATIONS]:0,[Y.MonthlyQuotaName.BUDIBASE_AI_CREDITS]:0,[Y.MonthlyQuotaName.ACTIONS]:0,triggers:{}}),Ba=e=>{let t=ct();e.monthly||(e.monthly={}),e.monthly[t]||(e.monthly[t]=Rr()),e.monthly.current=e.monthly[t]},Ma=(e,t)=>{if(!(!t||!e))switch(e){case Y.MonthlyQuotaName.AUTOMATIONS:return Y.BreakdownQuotaName.AUTOMATIONS;case Y.MonthlyQuotaName.QUERIES:return Tt.db.isTableId(t)?Y.BreakdownQuotaName.ROW_QUERIES:Tt.db.isDatasourceId(t)?Y.BreakdownQuotaName.DATASOURCE_QUERIES:void 0}};var ku=ce.Duration.fromSeconds(60).toMs(),{Writethrough:Fu}=ce.cache.writethrough;function UI(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}var Ga=()=>ce.tenancy.isSelfHostUsingCloud()?new Fu(ce.tenancy.getSelfHostCloudDB(),ku):new Fu(ce.tenancy.getGlobalDB(),ku);async function co(e=0){let r=Ga(),a=Er(),n=await r.tryGet(a);n&&n._rev&&await r.remove(a,n._rev).catch(async o=>{if(e<1)return await co(e+1);throw o})}var vt=async()=>{let e=Ga(),t=await e.tryGet(Er());if(!t){t=po();let{rev:r}=await e.put(t);t._rev=r}return Ba(t),uo(t),UI(t)},ju=async(e,t,r)=>fo({name:t,type:r,values:{total:e}}),Wu=async(e,t,r)=>{let a=Ga(),n=await vt(),o=Object.values(e).reduce((i,p)=>i+p,0);for(let[i,p]of Object.entries(e))n=$u(n,t,r,{total:o,app:p},{appId:i});let s=await a.put(n);return n._rev=s.rev,n},qI=(e,t,r,a)=>{let n=Ma(t,r);if(!n||!a?.breakdown)return e;e.breakdown||(e.breakdown={}),e.breakdown[n]||(e.breakdown[n]={parent:t,values:{}});let o=e.breakdown[n];return o.values[r]=a.breakdown,e},lo=(e,t,r,a={},n)=>{let o;try{o=ce.db.getProdAppID(a?.appId||ce.context.getAppId())}catch{}if(!o||!n.app||!ne.APP_QUOTA_NAMES.includes(t))return e;e.apps?.[o]||(e.apps={...e.apps,[o]:Na()});let s=e.apps[o];switch(r){case ne.QuotaUsageType.STATIC:s.usageQuota[t]=n.app;break;case ne.QuotaUsageType.MONTHLY:{let i=ct(),p=t,m=s.monthly[i];m||(s.monthly[i]=Rr(),m=s.monthly[i]),m[p]=n.app,ne.BREAKDOWN_QUOTA_NAMES.includes(p)&&a?.id&&(m=qI(m,p,a.id,n));break}}return e},Qu=(e,t,r,a)=>{if(!ne.APP_QUOTA_NAMES.includes(r))return{};let n;try{n=ce.db.getProdAppID(ce.context.getAppId())}catch{}if(!n||!e.apps||!e.apps[n])return{app:0};let o=e.apps[n];switch(t){case ne.QuotaUsageType.STATIC:if(o.usageQuota?.[r])return{app:o.usageQuota[r]};break;case ne.QuotaUsageType.MONTHLY:{let s=ct(),i=r;if(!o.monthly?.[s]?.[i])break;let p=o.monthly[s],m=p[i],f,h=Ma(i,a);return h&&a&&p.breakdown?.[h]&&(f=p.breakdown[h]?.values[a]),{app:m,breakdown:f||0}}}return{app:0}},DI=(e,t,r)=>{t.usageQuota.triggers||(t.usageQuota.triggers={}),r&&(t.usageQuota.triggers[e]=r)},NI=(e,t,r,a)=>{r.monthly[t].triggers||(r.monthly[t].triggers={}),a&&(r.monthly[t].triggers[e]=a)},$u=(e,t,r,a,n={})=>{if(r===ne.QuotaUsageType.STATIC)t=t,e.usageQuota[t]=a.total,DI(t,e,a.triggers);else if(r===ne.QuotaUsageType.MONTHLY){t=t;let o=ct();e.monthly[o][t]=a.total,NI(t,o,e,a.triggers)}else throw new Error(`Invalid usage type: ${r}`);return lo(e,t,r,n,a)},fo=async e=>{let t=Array.isArray(e)?e:[e],r=Ga(),a=await vt();for(let o of t)a=$u(a,o.name,o.type,o.values,o.opts);let n=await r.put(a,0);return a._rev=n.rev,a},Ku=async(e,t,r)=>{let a=await vt(),n=0,o={};switch(e){case ne.QuotaUsageType.STATIC:if(a.usageQuota[t]){let s=t;n=a.usageQuota[s],o=Qu(a,e,t,r)}break;case ne.QuotaUsageType.MONTHLY:{let s=ct(),i=t;a.monthly[s][i]&&(n=a.monthly[s][i],o=Qu(a,e,t,r));break}default:throw new Error(`Invalid usage type: ${e}`)}return ne.APP_QUOTA_NAMES.includes(t)&&!(o.app||o.breakdown)&&(o.app=o.app||0,o.breakdown=o.breakdown||0),{total:n,app:o.app,breakdown:o.breakdown}};var Te={};w(Te,{destroy:()=>GI,get:()=>mo,save:()=>MI});var lt=require("@budibase/backend-core"),BI=()=>({_id:lt.StaticDatabases.GLOBAL.docs.licenseInfo}),MI=async e=>{let t=await mo();t={...t,...e};let a=await lt.tenancy.getGlobalDB().put(t);return t._rev=a.rev,t},mo=async()=>{let e=lt.tenancy.getGlobalDB();try{return await e.get(lt.StaticDatabases.GLOBAL.docs.licenseInfo)}catch(t){if(t.status===404)return BI();throw t}},GI=async()=>{let e=lt.tenancy.getGlobalDB(),t=await mo();t&&t._rev&&await e.remove(lt.StaticDatabases.GLOBAL.docs.licenseInfo,t._rev)};var M={};w(M,{bulkSave:()=>JI,destroy:()=>XI,fetch:()=>VI,generateUserGroupID:()=>$I,get:()=>YI,getBulk:()=>HI,getByName:()=>go,getGroupUsers:()=>Fa,getGroupUsersParams:()=>Ju,getUserGroupsParams:()=>zu,save:()=>zI});var N=require("@budibase/backend-core");var Le=require("@budibase/types"),Qt=require("@budibase/backend-core");async function Vu(){let e=Qt.sql.designDoc.base("type");e.sql.tables={[Le.AUDIT_LOG_TYPE]:{fields:{appId:Le.SQLiteType.TEXT,event:Le.SQLiteType.TEXT,userId:Le.SQLiteType.TEXT,timestamp:Le.SQLiteType.TEXT,metadata:Le.SQLiteType.TEXT,name:Le.SQLiteType.TEXT,type:Le.SQLiteType.TEXT,fallback:Le.SQLiteType.TEXT}}};let t=Qt.context.getAuditLogsDB(),r;try{r=await t.get(Qt.SQLITE_DESIGN_DOC_ID),r={...r,...e}}catch(a){if(a.status===404)r=e;else throw a}await t.put(r)}var ka=require("@budibase/backend-core"),{ViewName:kI,SEPARATOR:FI,DocumentType:QI,createView:jI}=ka.db,WI=QI.USER+FI;async function Yu(){let e=ka.tenancy.getGlobalDB(),t=`function(doc) {
4
+ if (doc._id.startsWith("${WI}") && 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 qI(e,t,PI.USER_BY_GROUP)}var Fu=`${N.DocumentType.GROUP}${N.SEPARATOR}`;function Qu(e,t={}){e||(e="");let r=e?.startsWith(N.DocumentType.GROUP)?"":Fu;return{...t,startkey:`${r}${e}`,endkey:`${r}${e}${N.UNICODE_MAX}`}}function ju(e,t={}){e||(e="");let{emailSearch:r,bookmark:a,...n}=t;return r?{...n,startkey:`e_${e}${a||r}`,endkey:`e_${e}${r}${N.UNICODE_MAX}`}:{...t,startkey:`g_${e}`,endkey:`g_${e}${N.UNICODE_MAX}`,startkey_docid:a}}function DI(){return`${Fu}${N.utils.newid()}`}async function Ma(e,t){let r=N.tenancy.getGlobalDB();return(await N.db.queryView(N.db.ViewName.USER_BY_GROUP,ju(e,t),r,ku,{arrayResponse:!0})).map(n=>({_id:n.userId,email:n.email}))||[]}async function xr(e){return e.users=await Ma(e._id),e}async function NI(e){let r=(await xr(e)).users?.map(o=>o._id),a=await N.users.bulkGetGlobalUsersById(r),n=[];for(let o of a){if(!o.userGroups)continue;let s=o.userGroups.length;o.userGroups=o.userGroups.filter(i=>i!==e._id),o.userGroups.length!==s&&n.push(o)}n.length&&await N.users.bulkUpdateGlobalUsers(n)}async function Wu(){return(await N.tenancy.getGlobalDB().allDocs(Qu(null,{include_docs:!0}))).rows.map(t=>t.doc)}async function BI(){let e=await Wu(),t=[];for(let r of e)t.push(xr(r));return await Promise.all(t)}async function MI(e){let r=await N.tenancy.getGlobalDB().get(e);return await xr(r)}async function GI(e,t={enriched:!0}){let a=await N.tenancy.getGlobalDB().getMultiple(e,{allowMissing:!0});if(t?.enriched){let n=[];for(let o of a)n.push(xr(o));return await Promise.all(n)}else return a}async function kI(e){return await N.tenancy.getGlobalDB().put(e)}async function FI(e){return await N.tenancy.getGlobalDB().bulkDocs(e)}async function QI(e,t){let r=N.tenancy.getGlobalDB(),a=await r.get(e),n=await r.remove(e,t);return await NI(a),n}async function so(e){let t=e.toLowerCase(),a=(await Wu()).find(n=>n.name.toLowerCase()===t);if(a)return await xr(a)}var we={};w(we,{deleteAppBackupMetadata:()=>tS,fetchAppBackups:()=>XI,generateAppBackupID:()=>np,getAppBackupMetadata:()=>rS,oldestBackupDate:()=>rp,storeAppBackupMetadata:()=>ZI,updateAppBackupMetadata:()=>eS});var F=require("@budibase/backend-core"),tp=require("@budibase/types");function _r(e,t){let r=e.rows.map(n=>n.doc?n.doc:n);if(!t?.paginate)return{data:r,hasNextPage:!1};let a=r.length>t?.pageSize;return{data:r.slice(0,t?.pageSize),hasNextPage:a,nextPage:a?e.rows[t?.pageSize]?.key:void 0}}var Qt=require("@budibase/backend-core"),{ViewName:Ku,AutomationViewMode:io,SEPARATOR:Ge,DocumentType:Vu,createView:Yu}=Qt.db,jI=Vu.AUTOMATION_LOG+Ge,$u=Vu.APP_BACKUP+Ge;async function Hu(){let e=Qt.context.getProdAppDB(),t=`function(doc) {
11
- if (doc._id.startsWith("${jI}")) {
12
- let autoId = doc.automationId + "${Ge}"
13
- let status = doc.status + "${Ge}"
14
- let autoKey = "${io.AUTOMATION}${Ge}" + autoId + doc.createdAt
15
- let statusKey = "${io.STATUS}${Ge}" + status + doc.createdAt
16
- let allKey = "${io.ALL}${Ge}" + status + autoId + doc.createdAt
10
+ }`;await jI(e,t,kI.USER_BY_GROUP)}var Hu=`${N.DocumentType.GROUP}${N.SEPARATOR}`;function zu(e,t={}){e||(e="");let r=e?.startsWith(N.DocumentType.GROUP)?"":Hu;return{...t,startkey:`${r}${e}`,endkey:`${r}${e}${N.UNICODE_MAX}`}}function Ju(e,t={}){e||(e="");let{emailSearch:r,bookmark:a,...n}=t;return r?{...n,startkey:`e_${e}${a||r}`,endkey:`e_${e}${r}${N.UNICODE_MAX}`}:{...t,startkey:`g_${e}`,endkey:`g_${e}${N.UNICODE_MAX}`,startkey_docid:a}}function $I(){return`${Hu}${N.utils.newid()}`}async function Fa(e,t){let r=N.tenancy.getGlobalDB();return(await N.db.queryView(N.db.ViewName.USER_BY_GROUP,Ju(e,t),r,Yu,{arrayResponse:!0})).map(n=>({_id:n.userId,email:n.email}))||[]}async function xr(e){return e.users=await Fa(e._id),e}async function KI(e){let r=(await xr(e)).users?.map(o=>o._id),a=await N.users.bulkGetGlobalUsersById(r),n=[];for(let o of a){if(!o.userGroups)continue;let s=o.userGroups.length;o.userGroups=o.userGroups.filter(i=>i!==e._id),o.userGroups.length!==s&&n.push(o)}n.length&&await N.users.bulkUpdateGlobalUsers(n)}async function Xu(){return(await N.tenancy.getGlobalDB().allDocs(zu(null,{include_docs:!0}))).rows.map(t=>t.doc)}async function VI(){let e=await Xu(),t=[];for(let r of e)t.push(xr(r));return await Promise.all(t)}async function YI(e){let r=await N.tenancy.getGlobalDB().get(e);return await xr(r)}async function HI(e,t={enriched:!0}){let a=await N.tenancy.getGlobalDB().getMultiple(e,{allowMissing:!0});if(t?.enriched){let n=[];for(let o of a)n.push(xr(o));return await Promise.all(n)}else return a}async function zI(e){return await N.tenancy.getGlobalDB().put(e)}async function JI(e){return await N.tenancy.getGlobalDB().bulkDocs(e)}async function XI(e,t){let r=N.tenancy.getGlobalDB(),a=await r.get(e),n=await r.remove(e,t);return await KI(a),n}async function go(e){let t=e.toLowerCase(),a=(await Xu()).find(n=>n.name.toLowerCase()===t);if(a)return await xr(a)}var ve={};w(ve,{deleteAppBackupMetadata:()=>lS,fetchAppBackups:()=>uS,generateAppBackupID:()=>dp,getAppBackupMetadata:()=>dS,oldestBackupDate:()=>cp,storeAppBackupMetadata:()=>pS,updateAppBackupMetadata:()=>cS});var Q=require("@budibase/backend-core"),pp=require("@budibase/types");function Cr(e,t){let r=e.rows.map(n=>n.doc?n.doc:n);if(!t?.paginate)return{data:r,hasNextPage:!1};let a=r.length>t?.pageSize;return{data:r.slice(0,t?.pageSize),hasNextPage:a,nextPage:a?e.rows[t?.pageSize]?.key:void 0}}var jt=require("@budibase/backend-core"),{ViewName:ep,AutomationViewMode:ho,SEPARATOR:Fe,DocumentType:tp,createView:rp}=jt.db,ZI=tp.AUTOMATION_LOG+Fe,Zu=tp.APP_BACKUP+Fe;async function ap(){let e=jt.context.getProdAppDB(),t=`function(doc) {
11
+ if (doc._id.startsWith("${ZI}")) {
12
+ let autoId = doc.automationId + "${Fe}"
13
+ let status = doc.status + "${Fe}"
14
+ let autoKey = "${ho.AUTOMATION}${Fe}" + autoId + doc.createdAt
15
+ let statusKey = "${ho.STATUS}${Fe}" + status + doc.createdAt
16
+ let allKey = "${ho.ALL}${Fe}" + status + autoId + doc.createdAt
17
17
  emit(statusKey)
18
18
  emit(autoKey)
19
19
  emit(allKey)
20
20
  }
21
- }`;await Yu(e,t,Ku.AUTOMATION_LOGS)}async function zu(){let e=Qt.tenancy.getGlobalDB(),t=`function(doc) {
22
- if (doc._id.startsWith("${$u}") && doc.type && doc.trigger) {
23
- let full = doc.appId + "${Ge}"
24
- full += doc.trigger.toLowerCase() + "${Ge}"
25
- full += doc.type.toLowerCase() + "${Ge}"
26
- emit("${$u}" + full + doc.timestamp)
21
+ }`;await rp(e,t,ep.AUTOMATION_LOGS)}async function np(){let e=jt.tenancy.getGlobalDB(),t=`function(doc) {
22
+ if (doc._id.startsWith("${Zu}") && doc.type && doc.trigger) {
23
+ let full = doc.appId + "${Fe}"
24
+ full += doc.trigger.toLowerCase() + "${Fe}"
25
+ full += doc.type.toLowerCase() + "${Fe}"
26
+ emit("${Zu}" + full + doc.timestamp)
27
27
  }
28
- }`;await Yu(e,t,Ku.APP_BACKUP_BY_TRIGGER)}var ep=require("@budibase/types");var Qr={};w(Qr,{GENERIC_PAGE_SIZE:()=>ke,auditLogs:()=>jt,licenses:()=>me,quotas:()=>Je,versions:()=>Fr});var me={};w(me,{CLOUD_FREE_LICENSE:()=>$I,SELF_FREE_LICENSE:()=>uo,UNLIMITED:()=>W,UNLIMITED_LICENSE:()=>KI});var ct=require("@budibase/types");var Je={};w(Je,{UNLIMITED:()=>WI,appBackupRetentionDays:()=>Gr,apps:()=>Pr,automationLogRetentionDays:()=>Mr,automations:()=>Nr,budibaseAICredits:()=>Br,creators:()=>Cr,customAIConfigurations:()=>kr,plugins:()=>Ur,queries:()=>Dr,rows:()=>Or,userGroups:()=>qr,users:()=>Lr});var ae=require("@budibase/types"),WI=-1,Or=e=>({[ae.StaticQuotaName.ROWS]:{name:"Rows",value:e,triggers:[90,100]}}),Pr=e=>({[ae.StaticQuotaName.APPS]:{name:"Apps",value:e,triggers:[100]}}),Lr=e=>({[ae.StaticQuotaName.USERS]:{name:"Users",value:e,triggers:[80,100]}}),Cr=e=>({[ae.StaticQuotaName.CREATORS]:{name:"Creators",value:e,triggers:[]}}),qr=e=>({[ae.StaticQuotaName.USER_GROUPS]:{name:"User Groups",value:e,triggers:[80,100]}}),Ur=e=>({[ae.StaticQuotaName.PLUGINS]:{name:"Plugins",value:e,triggers:[90,100]}}),Dr=e=>({[ae.MonthlyQuotaName.QUERIES]:{name:"Queries",value:e,triggers:[]}}),Nr=e=>({[ae.MonthlyQuotaName.AUTOMATIONS]:{name:"Automations",value:e,triggers:[80,90,100]}}),Br=e=>({[ae.MonthlyQuotaName.BUDIBASE_AI_CREDITS]:{name:"Budibase AI Credits",value:e,triggers:[80,90,100]}}),Mr=e=>({[ae.ConstantQuotaName.AUTOMATION_LOG_RETENTION_DAYS]:{name:"Automation Logs",value:e,triggers:[]}}),Gr=e=>({[ae.ConstantQuotaName.APP_BACKUPS_RETENTION_DAYS]:{name:"App Backups",value:e,triggers:[]}}),kr=e=>({[ae.StaticQuotaName.AI_CUSTOM_CONFIGS]:{name:"Custom AI Configuration",value:e,triggers:[]}});var W=-1,$I={features:[],quotas:{usage:{monthly:{...Dr(W),...Nr(200),...Br(5e4)},static:{...Pr(W),...Or(2e3),...Lr(5),...Cr(5),...qr(0),...Ur(10),...kr(0)}},constant:{...Mr(1),...Gr(0)}},plan:{type:ct.PlanType.FREE,usesInvoicing:!1,model:ct.PlanModel.PER_USER}},uo={features:[],quotas:{usage:{monthly:{...Dr(W),...Nr(W),...Br(5e4)},static:{...Or(W),...Pr(W),...Lr(20),...Cr(W),...qr(0),...Ur(10),...kr(0)}},constant:{...Mr(1),...Gr(0)}},plan:{type:ct.PlanType.FREE,usesInvoicing:!1,model:ct.PlanModel.PER_USER}},KI={features:[],quotas:{usage:{monthly:{...Dr(W),...Nr(W),...Br(W)},static:{...Pr(W),...Or(W),...Lr(W),...Cr(W),...qr(W),...Ur(W),...kr(W)}},constant:{...Mr(W),...Gr(W)}},plan:{type:ct.PlanType.FREE,usesInvoicing:!1,model:ct.PlanModel.PER_USER}};var Fr={};w(Fr,{getLicenseVersion:()=>VI,getProVersion:()=>Xu});var Tt=require("@budibase/backend-core"),Ga=C(require("fs")),Ju=C(require("path")),VI=()=>{if(Tt.env.isDev()){let e="dev-version.txt",t=Ju.default.join(Tt.objectStore.budibaseTempDir(),e);if(Ga.default.existsSync(t))return Ga.default.readFileSync(t,"utf8");{let r=Tt.utils.newid();return Ga.default.writeFileSync(t,r),r}}else return Xu()},Xu=()=>{let e=Tt.env.VERSION;if(!e)throw new Error("No budibase pro version was specified");return e};var jt={};w(jt,{searchTable:()=>YI});var vt=require("@budibase/types"),Zu=require("@budibase/backend-core");function YI(){return{type:"table",sourceType:vt.TableSourceType.INTERNAL,name:vt.AUDIT_LOG_TYPE,sourceId:Zu.SQS_DATASOURCE_INTERNAL,primary:["_id"],schema:{metadata:{name:"metadata",type:vt.FieldType.JSON},fallback:{name:"fallback",type:vt.FieldType.JSON}}}}var ke=9;var HI=new Date(864e13).toISOString(),zI=1e3*60*60*24;async function ka(e){let r=(await Oe.getCachedLicense()).quotas?.[ep.QuotaType.CONSTANT]?.[e]?.value||0;return r===me.UNLIMITED?new Date(HI).toISOString():new Date(new Date().getTime()-zI*r).toISOString()}async function rp(){return ka(tp.ConstantQuotaName.APP_BACKUPS_RETENTION_DAYS)}var po=`${F.db.DocumentType.APP_BACKUP}${F.db.SEPARATOR}`;async function JI(e,t,r={}){let a=await rp(),n=F.db.getProdAppID(e),o=n,s=n;if(t.trigger&&t.type){let i=`${F.db.SEPARATOR}${t.trigger}`;i+=`${F.db.SEPARATOR}${t.type}`,o+=i,s+=i}return(!t.startDate||t.startDate<a)&&(t.startDate=a),t.startDate&&(s+=`${F.db.SEPARATOR}${t.startDate}`),t.endDate&&(o+=`${F.db.SEPARATOR}${t.endDate}`),{...r,descending:!0,startkey:`${po}${o}${F.db.UNICODE_MAX}`,endkey:`${po}${s}`}}async function ap(e,t){try{let r=F.db.getQueryIndex(F.db.ViewName.APP_BACKUP_BY_TRIGGER);return await e.query(r,t)}catch(r){if(r!=null&&r.error==="not_found")return await zu(),ap(e,t);throw r}}function np(e,t){return`${po}${e}${F.db.SEPARATOR}${t}`}async function XI(e,t={}){let r=F.tenancy.getGlobalDB(),a,n=t.limit||9,o=await JI(e,t,{include_docs:!0,limit:n+1});t.page&&(o.startkey=t.page),!t.trigger||!t.type?a=await r.allDocs(o):a=await ap(r,o);let s=_r(a,{paginate:t.paginate,pageSize:n}),i=[...new Set(s.data.filter(f=>f.createdBy).map(f=>f.createdBy))],p=await F.users.bulkGetGlobalUsersById(i,{cleanup:!0});for(let f of p)for(let m of s.data)f?._id===m.createdBy&&(m.createdBy=f);return s}async function ZI(e,t={}){let r=F.tenancy.getGlobalDB(),a=F.db.getProdAppID(e.appId),n=np(a,e.timestamp),o={...e,_id:n,appId:a,name:e.name};return o._id=t.docId||o._id,o._rev=t.docRev||o._rev,t.filename&&(o.filename=t.filename),e.createdBy&&(o.createdBy=F.db.getGlobalIDFromUserMetadataID(e.createdBy)),await r.put(o)}async function eS(e,t){let r=F.tenancy.getGlobalDB(),a=await r.get(e);return a.name=t,await r.put(a)}async function tS(e){let t=F.tenancy.getGlobalDB(),r=await t.get(e);await t.remove(r._id,r._rev)}async function rS(e){return await F.tenancy.getGlobalDB().get(e)}var Et={};w(Et,{get:()=>nS,getCacheEnvVarID:()=>ip,getEnvVarID:()=>Fa,update:()=>oS});var Pe=require("@budibase/backend-core"),sp=C(require("lru-cache")),aS=1e3,op=new sp.default({max:aS});function Fa(){return Pe.StaticDatabases.GLOBAL.docs.environmentVariables}function ip(e){return`${Pe.tenancy.getTenantId()}/${Fa()}/${e||""}`}async function nS(){let e=Fa(),t=Pe.tenancy.getGlobalDB(),r,a=!1;try{r=await t.get(e)}catch(i){if(i.status==404)a=!0;else throw i}let n=ip(r?._rev),o=op.get(n);if(o)return o;let s;return!a&&r?s={...r,variables:JSON.parse(Pe.encryption.decrypt(r.variables,Pe.encryption.SecretOption.ENCRYPTION))}:s={_id:e,variables:{}},op.set(n,s),s}async function oS(e){let t=Fa();return await Pe.tenancy.getGlobalDB().put({_id:e._id||t,_rev:e._rev||void 0,variables:Pe.encryption.encrypt(JSON.stringify(e.variables),Pe.encryption.SecretOption.ENCRYPTION)})}var up=require("dd-trace"),ja=new Zn(L.env.ACCOUNT_PORTAL_URL),Wa=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{}},pp=async e=>{let t,r;if(L.env.SELF_HOSTED){if(t=await Se.get(),!t.licenseKey)return;r={[L.constants.Header.LICENSE_KEY]:t.licenseKey}}else{let a=L.tenancy.getTenantId();r={[L.constants.Header.API_KEY]:L.env.ACCOUNT_PORTAL_API_KEY,[L.constants.Header.TENANT_ID]:a}}return e(r)},cp=async()=>pp(async e=>{let t=await Me.getQuotaUsage();if(t.usageQuota.users==null){let i=await L.users.getUserCount();console.info(`Syncing user count quota to ${i}`),t.usageQuota.users=i,await Me.setUsage(i,Qa.StaticQuotaName.USERS,Qa.QuotaUsageType.STATIC)}let r=await L.installation.getInstallFromDB(),a=L.tenancy.getTenantId(),n=await L.events.identification.getUniqueTenantId(a),o=Fr.getProVersion(),s={quotaUsage:t,tenantId:a,install:{id:r.installId,tenantId:n,version:o}};try{let i=await ja.post("/api/license",{headers:{...e},body:s});if(i.status===404||i.status===403)return;if(i.status!==200){let p=await Wa(i);throw new L.HTTPError(`Error getting license: ${p}`,i.status)}return i.json()}catch(i){if(L.env.DISABLE_ACCOUNT_PORTAL)return;throw i}});L.env.isJest()&&(cp=jest.fn());var Wt=cp;async function co(e){return await up.tracer.trace("getLicenseFromKey",async t=>{let r;if(!L.env.ACCOUNT_PORTAL_API_KEY)throw new Error("getLicenseFromKey requires ACCOUNT_PORTAL_API_KEY to be set");try{r=await ja.get(`/api/license/${e}`,{headers:{[L.constants.Header.API_KEY]:L.env.ACCOUNT_PORTAL_API_KEY}})}catch(a){if(L.env.DISABLE_ACCOUNT_PORTAL)return;throw a}if(r.status===404||r.status===403){t.addTags({licenseFound:!1});return}if(r.status!==200){let a=await Wa(r);throw new L.HTTPError(`Error getting license: ${a}`,r.status)}return r.json()})}var sS=e=>pp(async t=>{let r=await ja.post("/api/license/usage/triggered",{headers:{...t},body:e});if(r.status!==200){let a=await Wa(r);L.logging.logAlert(`Error triggering quota usage: ${a}`)}}),lo=async e=>{let t=await L.installation.getInstall(),r={installVersion:t.version,installId:t.installId},a=await ja.post("/api/license/activate",{headers:{[L.constants.Header.LICENSE_KEY]:e},body:r});if(a.status===403)throw new L.HTTPError("Invalid license key",400);if(a.status===409)throw new L.HTTPError("License key has already been activated",409);if(a.status!==200){let n=await Wa(a);throw new L.HTTPError(`Error activating license key: ${n}`,a.status)}return a.json()};var Yo=require("@budibase/backend-core");var un={};w(un,{activateOfflineLicenseToken:()=>Wx,deleteOfflineLicenseToken:()=>$x,dev:()=>la,enrichLicense:()=>tf,getIdentifier:()=>Wo,getIdentifierBase64:()=>Kx,getIdentifierFromBase64:()=>Vx,getOfflineLicense:()=>$o,getOfflineLicenseToken:()=>Xd,signing:()=>$r,verifyExpiry:()=>Zd,verifyInstallation:()=>ef});var $r={};w($r,{sign:()=>uS,verifyLicenseToken:()=>Wr});var fo=C(require("jsonwebtoken")),iS=`-----BEGIN PUBLIC KEY-----
28
+ }`;await rp(e,t,ep.APP_BACKUP_BY_TRIGGER)}var up=require("@budibase/types");var Wr={};w(Wr,{GENERIC_PAGE_SIZE:()=>Qe,auditLogs:()=>Wt,licenses:()=>ge,quotas:()=>Ze,versions:()=>jr});var ge={};w(ge,{CLOUD_FREE_LICENSE:()=>tS,SELF_FREE_LICENSE:()=>yo,UNLIMITED:()=>F,UNLIMITED_LICENSE:()=>rS});var dt=require("@budibase/types");var Ze={};w(Ze,{UNLIMITED:()=>eS,actions:()=>Gr,appBackupRetentionDays:()=>Fr,apps:()=>Lr,automationLogRetentionDays:()=>kr,automations:()=>Br,budibaseAICredits:()=>Mr,creators:()=>Ur,customAIConfigurations:()=>Qr,plugins:()=>Dr,queries:()=>Nr,rows:()=>Or,userGroups:()=>qr,users:()=>Pr});var te=require("@budibase/types"),eS=-1,Or=e=>({[te.StaticQuotaName.ROWS]:{name:"Rows",value:e,triggers:[90,100]}}),Lr=e=>({[te.StaticQuotaName.APPS]:{name:"Apps",value:e,triggers:[100]}}),Pr=e=>({[te.StaticQuotaName.USERS]:{name:"Users",value:e,triggers:[80,100]}}),Ur=e=>({[te.StaticQuotaName.CREATORS]:{name:"Creators",value:e,triggers:[]}}),qr=e=>({[te.StaticQuotaName.USER_GROUPS]:{name:"User Groups",value:e,triggers:[80,100]}}),Dr=e=>({[te.StaticQuotaName.PLUGINS]:{name:"Plugins",value:e,triggers:[90,100]}}),Nr=e=>({[te.MonthlyQuotaName.QUERIES]:{name:"Queries",value:e,triggers:[]}}),Br=e=>({[te.MonthlyQuotaName.AUTOMATIONS]:{name:"Automations",value:e,triggers:[80,90,100]}}),Mr=e=>({[te.MonthlyQuotaName.BUDIBASE_AI_CREDITS]:{name:"Budibase AI Credits",value:e,triggers:[80,90,100]}}),Gr=e=>({[te.MonthlyQuotaName.ACTIONS]:{name:"Actions",value:e,triggers:[80,90,100]}}),kr=e=>({[te.ConstantQuotaName.AUTOMATION_LOG_RETENTION_DAYS]:{name:"Automation Logs",value:e,triggers:[]}}),Fr=e=>({[te.ConstantQuotaName.APP_BACKUPS_RETENTION_DAYS]:{name:"App Backups",value:e,triggers:[]}}),Qr=e=>({[te.StaticQuotaName.AI_CUSTOM_CONFIGS]:{name:"Custom AI Configuration",value:e,triggers:[]}});var F=-1,tS={features:[],quotas:{usage:{monthly:{...Nr(F),...Br(200),...Mr(5e4),...Gr(F)},static:{...Lr(F),...Or(2e3),...Pr(5),...Ur(5),...qr(0),...Dr(10),...Qr(0)}},constant:{...kr(1),...Fr(0)}},plan:{type:dt.PlanType.FREE,usesInvoicing:!1,model:dt.PlanModel.PER_USER}},yo={features:[],quotas:{usage:{monthly:{...Nr(F),...Br(F),...Mr(5e4),...Gr(F)},static:{...Or(F),...Lr(F),...Pr(20),...Ur(F),...qr(0),...Dr(10),...Qr(0)}},constant:{...kr(1),...Fr(0)}},plan:{type:dt.PlanType.FREE,usesInvoicing:!1,model:dt.PlanModel.PER_USER}},rS={features:[],quotas:{usage:{monthly:{...Nr(F),...Br(F),...Mr(F),...Gr(F)},static:{...Lr(F),...Or(F),...Pr(F),...Ur(F),...qr(F),...Dr(F),...Qr(F)}},constant:{...kr(F),...Fr(F)}},plan:{type:dt.PlanType.FREE,usesInvoicing:!1,model:dt.PlanModel.PER_USER}};var jr={};w(jr,{getLicenseVersion:()=>aS,getProVersion:()=>sp});var Et=require("@budibase/backend-core"),Qa=P(require("fs")),op=P(require("path")),aS=()=>{if(Et.env.isDev()){let e="dev-version.txt",t=op.default.join(Et.objectStore.budibaseTempDir(),e);if(Qa.default.existsSync(t))return Qa.default.readFileSync(t,"utf8");{let r=Et.utils.newid();return Qa.default.writeFileSync(t,r),r}}else return sp()},sp=()=>{let e=Et.env.VERSION;if(!e)throw new Error("No budibase pro version was specified");return e};var Wt={};w(Wt,{searchTable:()=>nS});var Rt=require("@budibase/types"),ip=require("@budibase/backend-core");function nS(){return{type:"table",sourceType:Rt.TableSourceType.INTERNAL,name:Rt.AUDIT_LOG_TYPE,sourceId:ip.SQS_DATASOURCE_INTERNAL,primary:["_id"],schema:{metadata:{name:"metadata",type:Rt.FieldType.JSON},fallback:{name:"fallback",type:Rt.FieldType.JSON}}}}var Qe=9;var oS=new Date(864e13).toISOString(),sS=1e3*60*60*24;async function ja(e){let r=(await Pe.getCachedLicense()).quotas?.[up.QuotaType.CONSTANT]?.[e]?.value||0;return r===ge.UNLIMITED?new Date(oS).toISOString():new Date(new Date().getTime()-sS*r).toISOString()}async function cp(){return ja(pp.ConstantQuotaName.APP_BACKUPS_RETENTION_DAYS)}var Ao=`${Q.db.DocumentType.APP_BACKUP}${Q.db.SEPARATOR}`;async function iS(e,t,r={}){let a=await cp(),n=Q.db.getProdAppID(e),o=n,s=n;if(t.trigger&&t.type){let i=`${Q.db.SEPARATOR}${t.trigger}`;i+=`${Q.db.SEPARATOR}${t.type}`,o+=i,s+=i}return(!t.startDate||t.startDate<a)&&(t.startDate=a),t.startDate&&(s+=`${Q.db.SEPARATOR}${t.startDate}`),t.endDate&&(o+=`${Q.db.SEPARATOR}${t.endDate}`),{...r,descending:!0,startkey:`${Ao}${o}${Q.db.UNICODE_MAX}`,endkey:`${Ao}${s}`}}async function lp(e,t){try{let r=Q.db.getQueryIndex(Q.db.ViewName.APP_BACKUP_BY_TRIGGER);return await e.query(r,t)}catch(r){if(r!=null&&r.error==="not_found")return await np(),lp(e,t);throw r}}function dp(e,t){return`${Ao}${e}${Q.db.SEPARATOR}${t}`}async function uS(e,t={}){let r=Q.tenancy.getGlobalDB(),a,n=t.limit||9,o=await iS(e,t,{include_docs:!0,limit:n+1});t.page&&(o.startkey=t.page),!t.trigger||!t.type?a=await r.allDocs(o):a=await lp(r,o);let s=Cr(a,{paginate:t.paginate,pageSize:n}),i=[...new Set(s.data.filter(m=>m.createdBy).map(m=>m.createdBy))],p=await Q.users.bulkGetGlobalUsersById(i,{cleanup:!0});for(let m of p)for(let f of s.data)m?._id===f.createdBy&&(f.createdBy=m);return s}async function pS(e,t={}){let r=Q.tenancy.getGlobalDB(),a=Q.db.getProdAppID(e.appId),n=dp(a,e.timestamp),o={...e,_id:n,appId:a,name:e.name};return o._id=t.docId||o._id,o._rev=t.docRev||o._rev,t.filename&&(o.filename=t.filename),e.createdBy&&(o.createdBy=Q.db.getGlobalIDFromUserMetadataID(e.createdBy)),await r.put(o)}async function cS(e,t){let r=Q.tenancy.getGlobalDB(),a=await r.get(e);return a.name=t,await r.put(a)}async function lS(e){let t=Q.tenancy.getGlobalDB(),r=await t.get(e);await t.remove(r._id,r._rev)}async function dS(e){return await Q.tenancy.getGlobalDB().get(e)}var _t={};w(_t,{get:()=>mS,getCacheEnvVarID:()=>gp,getEnvVarID:()=>Wa,update:()=>gS});var Ue=require("@budibase/backend-core"),mp=P(require("lru-cache")),fS=1e3,fp=new mp.default({max:fS});function Wa(){return Ue.StaticDatabases.GLOBAL.docs.environmentVariables}function gp(e){return`${Ue.tenancy.getTenantId()}/${Wa()}/${e||""}`}async function mS(){let e=Wa(),t=Ue.tenancy.getGlobalDB(),r,a=!1;try{r=await t.get(e)}catch(i){if(i.status==404)a=!0;else throw i}let n=gp(r?._rev),o=fp.get(n);if(o)return o;let s;return!a&&r?s={...r,variables:JSON.parse(Ue.encryption.decrypt(r.variables,Ue.encryption.SecretOption.ENCRYPTION))}:s={_id:e,variables:{}},fp.set(n,s),s}async function gS(e){let t=Wa();return await Ue.tenancy.getGlobalDB().put({_id:e._id||t,_rev:e._rev||void 0,variables:Ue.encryption.encrypt(JSON.stringify(e.variables),Ue.encryption.SecretOption.ENCRYPTION)})}var hp=require("dd-trace"),Ka=new io(L.env.ACCOUNT_PORTAL_URL),Va=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{}},yp=async e=>{let t,r;if(L.env.SELF_HOSTED){if(t=await Te.get(),!t.licenseKey)return;r={[L.constants.Header.LICENSE_KEY]:t.licenseKey}}else{let a=L.tenancy.getTenantId();r={[L.constants.Header.API_KEY]:L.env.ACCOUNT_PORTAL_API_KEY,[L.constants.Header.TENANT_ID]:a}}return e(r)},Ap=async()=>yp(async e=>{let t=await ke.getQuotaUsage();if(t.usageQuota.users==null){let i=await L.users.getUserCount();console.info(`Syncing user count quota to ${i}`),t.usageQuota.users=i,await ke.setUsage(i,$a.StaticQuotaName.USERS,$a.QuotaUsageType.STATIC)}let r=await L.installation.getInstallFromDB(),a=L.tenancy.getTenantId(),n=await L.events.identification.getUniqueTenantId(a),o=jr.getProVersion(),s={quotaUsage:t,tenantId:a,install:{id:r.installId,tenantId:n,version:o}};try{let i=await Ka.post("/api/license",{headers:{...e},body:s});if(i.status===404||i.status===403)return;if(i.status!==200){let p=await Va(i);throw new L.HTTPError(`Error getting license: ${p}`,i.status)}return i.json()}catch(i){if(L.env.DISABLE_ACCOUNT_PORTAL)return;throw i}});L.env.isJest()&&(Ap=jest.fn());var $t=Ap;async function bo(e){return await hp.tracer.trace("getLicenseFromKey",async t=>{let r;if(!L.env.ACCOUNT_PORTAL_API_KEY)throw new Error("getLicenseFromKey requires ACCOUNT_PORTAL_API_KEY to be set");try{r=await Ka.get(`/api/license/${e}`,{headers:{[L.constants.Header.API_KEY]:L.env.ACCOUNT_PORTAL_API_KEY}})}catch(a){if(L.env.DISABLE_ACCOUNT_PORTAL)return;throw a}if(r.status===404||r.status===403){t.addTags({licenseFound:!1});return}if(r.status!==200){let a=await Va(r);throw new L.HTTPError(`Error getting license: ${a}`,r.status)}return r.json()})}var hS=e=>yp(async t=>{let r=await Ka.post("/api/license/usage/triggered",{headers:{...t},body:e});if(r.status!==200){let a=await Va(r);L.logging.logAlert(`Error triggering quota usage: ${a}`)}}),Io=async e=>{let t=await L.installation.getInstall(),r={installVersion:t.version,installId:t.installId},a=await Ka.post("/api/license/activate",{headers:{[L.constants.Header.LICENSE_KEY]:e},body:r});if(a.status===403)throw new L.HTTPError("Invalid license key",400);if(a.status===409)throw new L.HTTPError("License key has already been activated",409);if(a.status!==200){let n=await Va(a);throw new L.HTTPError(`Error activating license key: ${n}`,a.status)}return a.json()};var rs=require("@budibase/backend-core");var ln={};w(ln,{activateOfflineLicenseToken:()=>ex,deleteOfflineLicenseToken:()=>tx,dev:()=>fa,enrichLicense:()=>cf,getIdentifier:()=>Xo,getIdentifierBase64:()=>rx,getIdentifierFromBase64:()=>ax,getOfflineLicense:()=>Zo,getOfflineLicenseToken:()=>sf,signing:()=>Vr,verifyExpiry:()=>uf,verifyInstallation:()=>pf});var Vr={};w(Vr,{sign:()=>AS,verifyLicenseToken:()=>Kr});var So=P(require("jsonwebtoken")),yS=`-----BEGIN PUBLIC KEY-----
29
29
  MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvz3jePLCFBXZ19c8Dpkv
30
30
  XtSgOhKFOcvQdo/LV0KJRUzQWDPWuO4ILtBtnqhjtIzZH4CH0qCYBet5L6Qr4CM1
31
31
  l2HXiAD1Q2rlHNW9wDaYyKb1F5f+v4RyqCAyzlkwRdksmkLeECTboojNnmRCrE3C
@@ -34,24 +34,28 @@ l2HXiAD1Q2rlHNW9wDaYyKb1F5f+v4RyqCAyzlkwRdksmkLeECTboojNnmRCrE3C
34
34
  d/o3ZWE1TTj1zYwlCLN5qRKr3hU8nC3xEYNEbkB9SfTRaOq9Q7P8WmfLkoCPm3pR
35
35
  mwIDAQAB
36
36
  -----END PUBLIC KEY-----
37
- `;function Wr(e){return fo.default.verify(e,iS,{algorithms:["RS256"]})}function uS(e,t){return fo.default.sign(t,e,{encoding:"utf-8",algorithm:"RS256"})}var $a={};w($a,{getFeatures:()=>mo});var c=require("@budibase/types");var pS={[c.PlanType.FREE]:[...me.SELF_FREE_LICENSE.features],[c.PlanType.PREMIUM]:void 0,[c.PlanType.PREMIUM_PLUS]:[c.Feature.APP_BACKUPS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.AI_CUSTOM_CONFIGS,c.Feature.PDF,c.Feature.BUDIBASE_AI],[c.PlanType.PREMIUM_PLUS_TRIAL]:[c.Feature.APP_BACKUPS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.AI_CUSTOM_CONFIGS,c.Feature.PDF,c.Feature.BUDIBASE_AI],[c.PlanType.PRO]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS],[c.PlanType.TEAM]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS],[c.PlanType.BUSINESS]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.ENVIRONMENT_VARIABLES,c.Feature.AUDIT_LOGS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.EXPANDED_PUBLIC_API,c.Feature.VIEW_PERMISSIONS,c.Feature.PDF,c.Feature.BUDIBASE_AI],[c.PlanType.ENTERPRISE_BASIC]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.ENVIRONMENT_VARIABLES,c.Feature.ENFORCEABLE_SSO,c.Feature.AUDIT_LOGS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.OFFLINE,c.Feature.APP_BUILDERS,c.Feature.EXPANDED_PUBLIC_API,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.SCIM,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.AI_CUSTOM_CONFIGS,c.Feature.PWA,c.Feature.CUSTOM_APP_SCRIPTS,c.Feature.PDF,c.Feature.BUDIBASE_AI],[c.PlanType.ENTERPRISE_BASIC_TRIAL]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.ENVIRONMENT_VARIABLES,c.Feature.ENFORCEABLE_SSO,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.EXPANDED_PUBLIC_API,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.SCIM,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.AI_CUSTOM_CONFIGS,c.Feature.PWA,c.Feature.CUSTOM_APP_SCRIPTS,c.Feature.PDF,c.Feature.BUDIBASE_AI],[c.PlanType.ENTERPRISE]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.ENVIRONMENT_VARIABLES,c.Feature.ENFORCEABLE_SSO,c.Feature.AUDIT_LOGS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.OFFLINE,c.Feature.APP_BUILDERS,c.Feature.EXPANDED_PUBLIC_API,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.SCIM,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.AI_CUSTOM_CONFIGS,c.Feature.PWA,c.Feature.CUSTOM_APP_SCRIPTS,c.Feature.PDF,c.Feature.BUDIBASE_AI]},cS={[c.PlanType.FREE]:[...me.CLOUD_FREE_LICENSE.features],[c.PlanType.PREMIUM]:[c.Feature.APP_BACKUPS,c.Feature.BRANDING,c.Feature.APP_BUILDERS,c.Feature.VIEW_PERMISSIONS,c.Feature.PDF],[c.PlanType.PREMIUM_PLUS]:[c.Feature.APP_BACKUPS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.BUDIBASE_AI,c.Feature.PDF],[c.PlanType.PREMIUM_PLUS_TRIAL]:[c.Feature.APP_BACKUPS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.BUDIBASE_AI,c.Feature.PDF],[c.PlanType.PRO]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.BRANDING],[c.PlanType.TEAM]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.BRANDING],[c.PlanType.BUSINESS]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.ENVIRONMENT_VARIABLES,c.Feature.AUDIT_LOGS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.EXPANDED_PUBLIC_API,c.Feature.VIEW_PERMISSIONS,c.Feature.BUDIBASE_AI,c.Feature.PDF],[c.PlanType.ENTERPRISE_BASIC]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.ENVIRONMENT_VARIABLES,c.Feature.ENFORCEABLE_SSO,c.Feature.AUDIT_LOGS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.OFFLINE,c.Feature.APP_BUILDERS,c.Feature.EXPANDED_PUBLIC_API,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.SCIM,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.AI_CUSTOM_CONFIGS,c.Feature.BUDIBASE_AI,c.Feature.PWA,c.Feature.CUSTOM_APP_SCRIPTS,c.Feature.PDF],[c.PlanType.ENTERPRISE_BASIC_TRIAL]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.ENVIRONMENT_VARIABLES,c.Feature.ENFORCEABLE_SSO,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.EXPANDED_PUBLIC_API,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.SCIM,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.AI_CUSTOM_CONFIGS,c.Feature.BUDIBASE_AI,c.Feature.PWA,c.Feature.CUSTOM_APP_SCRIPTS,c.Feature.PDF],[c.PlanType.ENTERPRISE]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.ENVIRONMENT_VARIABLES,c.Feature.ENFORCEABLE_SSO,c.Feature.AUDIT_LOGS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.EXPANDED_PUBLIC_API,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.SCIM,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.AI_CUSTOM_CONFIGS,c.Feature.BUDIBASE_AI,c.Feature.PWA,c.Feature.CUSTOM_APP_SCRIPTS,c.Feature.PDF]};function mo(e,t){let r=[];function a(n){let o=n[t];if(!o)throw new Error(`Features do not exist for planType=${t} and hosting=${e}`);return o}switch(e){case c.Hosting.SELF:r=a(pS);break;case c.Hosting.CLOUD:r=a(cS);break}return r}var Ka={};w(Ka,{UNLIMITED:()=>d,getQuotas:()=>go});var G=require("@budibase/types");var l=Je,lp=me,d=-1,Kr=e=>e*1e6,lS={[G.PlanType.FREE]:{...lp.CLOUD_FREE_LICENSE.quotas},[G.PlanType.PREMIUM]:{usage:{monthly:{...l.queries(d),...l.automations(1e3),...l.budibaseAICredits(0)},static:{...l.rows(1e4),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(0),...l.plugins(d),...l.customAIConfigurations(0)}},constant:{...l.automationLogRetentionDays(7),...l.appBackupRetentionDays(7)}},[G.PlanType.PREMIUM_PLUS]:{usage:{monthly:{...l.queries(d),...l.automations(5e3),...l.budibaseAICredits(Kr(2))},static:{...l.rows(25e3),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(0),...l.plugins(d),...l.customAIConfigurations(1)}},constant:{...l.automationLogRetentionDays(30),...l.appBackupRetentionDays(30)}},[G.PlanType.PREMIUM_PLUS_TRIAL]:{usage:{monthly:{...l.queries(d),...l.automations(5e3),...l.budibaseAICredits(Kr(2))},static:{...l.rows(25e3),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(0),...l.plugins(d),...l.customAIConfigurations(1)}},constant:{...l.automationLogRetentionDays(30),...l.appBackupRetentionDays(30)}},[G.PlanType.PRO]:{usage:{monthly:{...l.queries(d),...l.automations(1e3),...l.budibaseAICredits(0)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(5),...l.plugins(d),...l.customAIConfigurations(0)}},constant:{...l.automationLogRetentionDays(7),...l.appBackupRetentionDays(7)}},[G.PlanType.TEAM]:{usage:{monthly:{...l.queries(d),...l.automations(5e3),...l.budibaseAICredits(0)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(10),...l.plugins(d),...l.customAIConfigurations(0)}},constant:{...l.automationLogRetentionDays(30),...l.appBackupRetentionDays(90)}},[G.PlanType.BUSINESS]:{usage:{monthly:{...l.queries(d),...l.automations(1e4),...l.budibaseAICredits(0)},static:{...l.rows(5e4),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(50),...l.plugins(d),...l.customAIConfigurations(0)}},constant:{...l.automationLogRetentionDays(365),...l.appBackupRetentionDays(365)}},[G.PlanType.ENTERPRISE_BASIC]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(Kr(4))},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(d),...l.plugins(d),...l.customAIConfigurations(d)}},constant:{...l.automationLogRetentionDays(d),...l.appBackupRetentionDays(d)}},[G.PlanType.ENTERPRISE_BASIC_TRIAL]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(Kr(4))},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(d),...l.plugins(d),...l.customAIConfigurations(d)}},constant:{...l.automationLogRetentionDays(15),...l.appBackupRetentionDays(15)}},[G.PlanType.ENTERPRISE]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(Kr(4))},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(d),...l.plugins(d),...l.customAIConfigurations(d)}},constant:{...l.automationLogRetentionDays(d),...l.appBackupRetentionDays(d)}}},dS={[G.PlanType.FREE]:{...lp.SELF_FREE_LICENSE.quotas},[G.PlanType.PREMIUM]:void 0,[G.PlanType.PREMIUM_PLUS]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(0),...l.plugins(d),...l.customAIConfigurations(1)}},constant:{...l.automationLogRetentionDays(30),...l.appBackupRetentionDays(30)}},[G.PlanType.PREMIUM_PLUS_TRIAL]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(0),...l.plugins(d),...l.customAIConfigurations(1)}},constant:{...l.automationLogRetentionDays(30),...l.appBackupRetentionDays(30)}},[G.PlanType.PRO]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(5),...l.plugins(d),...l.customAIConfigurations(0)}},constant:{...l.automationLogRetentionDays(7),...l.appBackupRetentionDays(7)}},[G.PlanType.TEAM]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(10),...l.plugins(d),...l.customAIConfigurations(0)}},constant:{...l.automationLogRetentionDays(30),...l.appBackupRetentionDays(90)}},[G.PlanType.BUSINESS]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(50),...l.plugins(d),...l.customAIConfigurations(0)}},constant:{...l.automationLogRetentionDays(90),...l.appBackupRetentionDays(365)}},[G.PlanType.ENTERPRISE_BASIC]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(d),...l.plugins(d),...l.customAIConfigurations(d)}},constant:{...l.automationLogRetentionDays(d),...l.appBackupRetentionDays(d)}},[G.PlanType.ENTERPRISE_BASIC_TRIAL]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(d),...l.plugins(d),...l.customAIConfigurations(d)}},constant:{...l.automationLogRetentionDays(15),...l.appBackupRetentionDays(15)}},[G.PlanType.ENTERPRISE]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(d),...l.plugins(d),...l.customAIConfigurations(d)}},constant:{...l.automationLogRetentionDays(d),...l.appBackupRetentionDays(d)}}};function go(e,t){let r;function a(n){let o=n[t];if(!o)throw new Error(`Quotas do not exist for planType=${t} and hosting=${e}`);return o}switch(e){case G.Hosting.SELF:r=a(dS);break;case G.Hosting.CLOUD:r=a(lS);break}return JSON.parse(JSON.stringify(r))}var Kt={};w(Kt,{appExists:()=>fS,encoding:()=>$t});var dp=require("@budibase/backend-core");async function fS(e){return(await dp.db.getAllApps({all:!0,idsOnly:!0})).includes(e)}var $t={};w($t,{base64ToObject:()=>gS,objectToBase64:()=>mS});function mS(e){let t=JSON.stringify(e);return Buffer.from(t).toString("base64")}function gS(e){let t=Buffer.from(e,"base64").toString();return JSON.parse(t)}var Hd=require("@budibase/types"),or=require("@budibase/backend-core"),zd=C(_l()),Jd=C(jo());async function Wx(e){await Se.save({offlineLicenseToken:e}),await xt()}async function $x(){await Se.save({offlineLicenseToken:void 0}),await xt()}async function Xd(){return(await Se.get()).offlineLicenseToken}async function Wo(){let t=(await or.installation.getInstall()).installId,r=or.context.getTenantId(),a=await or.events.identification.getUniqueTenantId(r);return{installId:t,tenantId:a}}async function Kx(){let e=await Wo();return $t.objectToBase64(e)}function Vx(e){return $t.base64ToObject(e)}function Zd(e){let t=Date.now(),r=new Date(e.expireAt).getTime();if(t>r)throw new Error(`Offline license has expired. expireAt=${e.expireAt}`)}async function ef(e){let t=await Wo();if(e.identifier.installId!==t.installId||e.identifier.tenantId!==t.tenantId)throw new Error("Invalid offline license")}function tf(e){let t=e.plan.type,r=Hd.Hosting.SELF,a=mo(r,t),n=go(r,t);return e.features=(0,zd.default)(e.features,a),e.quotas=(0,Jd.default)(e.quotas,n),e}async function $o(){try{let e=await Xd();if(e){let t=await Wr(e);return Zd(t),await ef(t),tf(t)}}catch(e){console.error("Error retrieving offline license",e)}}var la={};w(la,{deleteDevLicense:()=>Xx,getOfflineLicense:()=>zx,writeDevLicenseToDisk:()=>Jx});var rf=require("@budibase/backend-core"),Vo=require("path"),af=require("os"),_t=C(require("fs"));var Yx=rf.env.isTest()?".budibase-test":".budibase",Ko=(0,Vo.join)((0,af.tmpdir)(),Yx),Hx="dev_license.txt",ca=(0,Vo.join)(Ko,Hx);if(!_t.default.existsSync(Ko))try{_t.default.mkdirSync(Ko)}catch{}function zx(){try{if(_t.default.existsSync(ca)){let e=_t.default.readFileSync(ca,{encoding:"utf-8"});return Wr(e)}}catch(e){console.error("Error retrieving offline license from disk",e)}}function Jx(e){console.log(`Writing license to: ${ca}`),_t.default.writeFileSync(ca,e,{encoding:"utf-8"})}function Xx(){_t.default.rmSync(ca,{force:!0})}var Ho=async()=>{if(Yo.env.OFFLINE_MODE)return $o();let e=await Wt();return e||(e=la.getOfflineLicense()),e},zo=e=>co(e),Jo=()=>Yo.env.SELF_HOSTED?me.SELF_FREE_LICENSE:me.CLOUD_FREE_LICENSE;var es={};w(es,{activateLicenseKey:()=>Zx,deleteLicenseKey:()=>e_,getLicenseKey:()=>Zo});var Xo=C(require("dd-trace"));async function Zx(e){await lo(e),await Se.save({licenseKey:e}),await xt()}async function Zo(){return await Xo.default.trace("getLicenseKey",async e=>{let t=await Se.get();return e.addTags({licenseKey:t.licenseKey}),t.licenseKey})}async function e_(){return await Xo.default.trace("deleteLicenseKey",async()=>{await Se.save({licenseKey:void 0}),await xt()})}var Ot=require("@budibase/backend-core"),pn=C(require("dd-trace")),nf=3600,xt=async()=>{await uf(),await sf()},of=async(e,t)=>{let{populateLicense:r=Ho,populateFreeLicense:a=Jo}=t||{};return await pn.default.trace("getCachedLicense",async n=>{let o=Ot.context.getLicense();if(o)return n.addTags({foundInContext:!0,features:o.features,plan:o.plan,quotas:o.quotas}),o;let s=Ot.tenancy.getTenantId(),i=await Jn(),p=await i.get(s);return n.addTags({tenantId:s,foundInCache:!!p}),p?(n.addTags({foundInCache:!0,refreshedAt:p.refreshedAt,features:p.features,plan:p.plan,quotas:p.quotas}),p):(p=await pn.default.trace("populateLicense",async()=>await r(s)),n.addTags({populatedLicense:!!p}),p||(p=pn.default.trace("populateFreeLicense",()=>a(e,s)),n.addTags({populatedFreeLicense:!!p})),p.refreshedAt=new Date().toISOString(),n.addTags({refreshedAt:p.refreshedAt,features:p.features,plan:p.plan,quotas:p.quotas,expirySeconds:nf}),await i.store(s,p,nf),p)})};Ot.env.isJest()&&(of=jest.fn());var sf=of,uf=async()=>{let e=Ot.tenancy.getTenantId();await(await Jn()).delete(e)};async function se(e,t){Array.isArray(e)||(e=[e]),t||(t=await Oe.getCachedLicense());for(let r of e)if(!t?.features.includes(r))return!1;return!0}async function cn(e,t){if(!await se(e,t))throw new Xe.FeatureDisabledError(`${e} is not currently enabled`,e)}async function ts(e,t){if(!await se(e,t)){let r=e.join(", ");throw new Xe.FeatureDisabledError(`${r} are not currently enabled`,r)}}function ye(e){return async(...t)=>(await cn(oe.Feature.APP_BACKUPS),e(...t))}async function rs(){return se(oe.Feature.APP_BACKUPS)}async function as(){return se(oe.Feature.BRANDING)}async function pf(){return se(oe.Feature.ENFORCEABLE_SSO)}async function r_(){return se(oe.Feature.SYNC_AUTOMATIONS)}async function a_(){return se(oe.Feature.TRIGGER_AUTOMATION_RUN)}async function Pt(){return se(oe.Feature.APP_BUILDERS)}async function ln(){return se(oe.Feature.AUDIT_LOGS)}async function ns(){return se(oe.Feature.USER_GROUPS)}function n_(){return se(oe.Feature.PWA)}async function Ze(){return se(oe.Feature.EXPANDED_PUBLIC_API)}async function o_(e){if(Xe.env.ENABLE_SSO_MAINTENANCE_MODE||!await pf())return!1;let r;return e?.config?r=e.config:r=await Xe.configs.getSettingsConfig(),!!r.isSSOEnforced}var os=async()=>{let e=oe.Feature.SCIM,t=await se(e),r=await Xe.configs.getSCIMConfig();if(!t||!r?.enabled)throw new Xe.FeatureDisabledError(`${e} is not currently enabled`,e);return!0};async function s_(){return se(oe.Feature.VIEW_PERMISSIONS)}async function i_(){return se(oe.Feature.VIEW_READONLY_COLUMNS)}var u_={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 p_(e){return await as()?{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}:u_}var is={};w(is,{enrichAIConfig:()=>ss});var cf=require("@budibase/backend-core"),c_="budibase_ai";async function ss(e){if(cf.env.SELF_HOSTED)return e;for(let t of Object.values(e.config))if(t.provider==="BudibaseAI")return e;return e.config[c_]={provider:"BudibaseAI",active:!0,isDefault:Object.keys(e.config).every(t=>!e.config[t].isDefault),defaultModel:process.env.BUDIBASE_AI_DEFAULT_MODEL||"gpt-4o-mini",name:"Budibase AI"},e}var We={};w(We,{addApp:()=>g_,addAutomation:()=>S_,addGroup:()=>ps,addPlugin:()=>ls,addRow:()=>h_,addRows:()=>b_,addUsers:()=>mn,bustCache:()=>ro,decrement:()=>et,decrementMany:()=>da,getCurrentUsageValues:()=>Mu,getLicensedQuota:()=>df,getQuotaUsage:()=>wt,increment:()=>qe,incrementBudibaseAICredits:()=>yn,incrementMany:()=>Lt,removeApp:()=>y_,removeGroup:()=>cs,removePlugin:()=>ds,removeRow:()=>A_,removeRows:()=>I_,removeUsers:()=>cr,set:()=>us,setAllUsage:()=>no,setAppUsageValue:()=>ao,setUsage:()=>Du,setUsagePerApp:()=>Nu,updatePluginCount:()=>fs,updateUsage:()=>ir,usageLimitIsExceeded:()=>m_,utils:()=>Rr});var Y=require("@budibase/types");var Ce=require("@budibase/backend-core");var sr=require("dd-trace"),qe=(e,t,r)=>lf({change:1,name:e,type:t,opts:r}),Lt=e=>sr.tracer.trace("quotas.incrementMany",async()=>lf(e)),lf=async e=>await sr.tracer.trace("quotas.tryIncrement",async t=>{let r=Array.isArray(e)?e:[e];t.addTags({numActions:r.length}),await ir(r.map(n=>({usageChange:n.change,name:n.name,type:n.type,opts:{dryRun:!0,suppressErrorLog:n.opts?.suppressErrorLog,id:n.opts?.id}})));let a=[];for(let n of r)await sr.tracer.trace("quotas.incrementMany.fn",async o=>{o.addTags({actionName:n.name,actionType:n.type,actionChange:n.change});let s=n.opts?.fn;s&&a.push(await s())});return await ir(r.map(n=>({usageChange:n.change,name:n.name,type:n.type,opts:{dryRun:!1,valueFn:n.opts?.valueFn,suppressErrorLog:n.opts?.suppressErrorLog,id:n.opts?.id}}))),a[0]}),et=(e,t,r={})=>ir({usageChange:-1,name:e,type:t,opts:r}),da=e=>{let t=Array.isArray(e)?e:[e];return ir(t.map(r=>({usageChange:-r.change,name:r.name,type:r.type,opts:r.opts})))},us=async(e,t,r)=>Me.setUsage(r,e,t),l_=(e,t,r)=>{if(e==Y.QuotaUsageType.STATIC){let a=r.usageQuota.triggers;return a?a[t]||{}:{}}else{let a=Me.utils.getCurrentMonthString(),n=r.monthly[a].triggers;return n?n[t]||{}:{}}},d_=async(e,t,r,a)=>{try{await Ce.locks.doWithLock({type:Y.LockType.TRY_ONCE,name:Y.LockName.TRIGGER_QUOTA,resource:e,ttl:1e4},async()=>{let n={percentage:r,name:t.name};a&&(n.resetDate=a),await lt.triggerQuota(n)})}catch(n){Ce.logging.logAlert("Error triggering quota",n)}},f_=async(e,t,r,a)=>{let n=await wt(),o=e===Y.QuotaUsageType.MONTHLY?n.quotaReset:void 0,s=await l_(e,t,n),i=a.triggers,p=r/a.value*100;p>100&&(p=100);for(let[f,m]of i.entries())if(p>=m&&a.value!==Je.UNLIMITED){if(!s[m]){s[m]=new Date().toISOString();let g=i[f+1]||100;(!(p>=g)||p===m)&&await d_(t,a,p,o)}}else s[m]=void 0;return s},ir=async e=>{await sr.tracer.trace("quotas.updateUsage",async t=>{let r=Ce.tenancy.getTenantId(),a=Array.isArray(e)?e:[e];t.addTags({numActions:a.length,tenantId:r});let n,o,s=[],i={},p={},f={},m={};for(let g of a)await sr.tracer.trace("quotas.updateUsage.action",async S=>{S.addTags({actionName:g.name,actionType:g.type,actionUsageChange:g.usageChange});try{n=Ce.context.getAppId()}catch{}if(Y.APP_QUOTA_NAMES.includes(g.name)&&!n)throw new Error("App context required for quota update");try{o=await df(Y.QuotaType.USAGE,g.name,g.type),s.push(o);let{total:x,app:R,breakdown:E}=await Me.getCurrentUsageValues(g.type,g.name,g.opts?.id);x+=g.usageChange,R!=null&&(R+=g.usageChange),E!=null&&(E+=g.usageChange);let q={};if(g.opts?.dryRun||(q=await f_(g.type,g.name,x,o),m={...m,[g.name]:q}),o.value!==Je.UNLIMITED&&x>o.value&&g.usageChange>0)throw new Ce.UsageLimitError(`Licensed ${o.name} of ${o.value} has been exceeded`,o.name);if(x=Math.max(0,x),R&&(R=Math.max(0,R)),E&&(E=Math.max(0,E),f={...f,[g.name]:E}),!g.opts?.dryRun){let xe=g.opts?.valueFn;xe&&(x=await xe(),R=x),i={...i,[g.name]:x},p={...p,[g.name]:R}}}catch(x){throw g.opts?.suppressErrorLog||console.error(`Error updating usage quotas for ${g.name}`,x),x}});let y=a.filter(g=>!g.opts?.dryRun).map(g=>({name:g.name,type:g.type,values:{total:i[g.name],app:p[g.name],breakdown:f[g.name],triggers:m[g.name]},opts:{...g.opts,tenantId:r}}));y.length>0&&await Me.setAllUsage(y)})},df=async(e,t,r)=>{let a=await Oe.getCachedLicense();if(!a){let n=Ce.tenancy.getTenantId();throw new Error("License not found for tenant id "+n)}if(r&&(0,Y.isStaticQuota)(e,r,t))return a.quotas[e][r][t];if(r&&(0,Y.isMonthlyQuota)(e,r,t))return a.quotas[e][r][t];if((0,Y.isConstantQuota)(e,t))return a.quotas[e][t];throw new Error("Invalid quota type")},m_=async(e,t)=>{try{return await ir({usageChange:1,name:e,type:t,opts:{dryRun:!0}}),!1}catch(r){if(r.code===Y.ErrorCode.USAGE_LIMIT_EXCEEDED)return!0;throw r}};var ur=require("@budibase/types"),ff=require("@budibase/backend-core"),mf=async()=>{let e=await ff.db.getAllApps({dev:!0});return e?e.length:0},g_=async(e,{appId:t}={})=>qe(ur.StaticQuotaName.APPS,ur.QuotaUsageType.STATIC,{fn:e,valueFn:mf,id:t}),y_=async({appId:e}={})=>et(ur.StaticQuotaName.APPS,ur.QuotaUsageType.STATIC,{valueFn:mf,id:e});var Qe=require("@budibase/types"),h_=async(e,{tableId:t}={})=>qe(Qe.StaticQuotaName.ROWS,Qe.QuotaUsageType.STATIC,{fn:e,id:t}),A_=async({tableId:e}={})=>et(Qe.StaticQuotaName.ROWS,Qe.QuotaUsageType.STATIC,{id:e}),b_=async(e,t,{tableId:r}={})=>Lt({change:e,name:Qe.StaticQuotaName.ROWS,type:Qe.QuotaUsageType.STATIC,opts:{fn:t,id:r}}),I_=async(e,{tableId:t}={})=>da({change:e,name:Qe.StaticQuotaName.ROWS,type:Qe.QuotaUsageType.STATIC,opts:{id:t}});var fn=require("@budibase/types"),S_=async(e,{automationId:t}={})=>qe(fn.MonthlyQuotaName.AUTOMATIONS,fn.QuotaUsageType.MONTHLY,{fn:e,id:t});var pr=require("@budibase/types"),ps=async e=>qe(pr.StaticQuotaName.USER_GROUPS,pr.QuotaUsageType.STATIC,{fn:e}),cs=async()=>et(pr.StaticQuotaName.USER_GROUPS,pr.QuotaUsageType.STATIC);var mt=require("@budibase/types"),ls=async e=>qe(mt.StaticQuotaName.PLUGINS,mt.QuotaUsageType.STATIC,{fn:e}),ds=async()=>et(mt.StaticQuotaName.PLUGINS,mt.QuotaUsageType.STATIC),fs=async e=>us(mt.StaticQuotaName.PLUGINS,mt.QuotaUsageType.STATIC,e);var je=require("@budibase/types"),fa=require("@budibase/backend-core");var mn=async(e,t,r)=>{let a=[{change:e,name:je.StaticQuotaName.USERS,type:je.QuotaUsageType.STATIC,opts:{fn:r,valueFn:fa.users.getUserCount}}];t>0&&a.push({change:t,name:je.StaticQuotaName.CREATORS,type:je.QuotaUsageType.STATIC,opts:{valueFn:fa.users.getCreatorCount}});let n=await Lt(a);return await Wt(),n},cr=async(e,t)=>{let r=[{change:e,name:je.StaticQuotaName.USERS,type:je.QuotaUsageType.STATIC,opts:{valueFn:fa.users.getUserCount}}];t>0&&r.push({change:t,name:je.StaticQuotaName.CREATORS,type:je.QuotaUsageType.STATIC,opts:{valueFn:fa.users.getCreatorCount}}),await da(r),await Wt()};var gn=require("@budibase/types"),yn=async e=>Lt({change:e,name:gn.MonthlyQuotaName.BUDIBASE_AI_CREDITS,type:gn.QuotaUsageType.MONTHLY});var tt={};w(tt,{addAppBuilder:()=>R_,db:()=>$e,removeAppBuilder:()=>x_});var ga=require("@budibase/backend-core");var Q={};w(Q,{addAppBuilder:()=>As,addUsers:()=>gs,adjustGroupCreatorsQuotas:()=>E_,cleanupApp:()=>v_,enrichUserRolesFromGroups:()=>T_,fetch:()=>ma,get:()=>qt,getBulk:()=>Sf,getGroupBuilderAppIds:()=>If,getGroupRoleId:()=>w_,remove:()=>ms,removeAppBuilder:()=>bs,removeUsers:()=>ys,save:()=>lr,updateGroupApps:()=>hs});var _=require("@budibase/backend-core");var gf=require("@budibase/backend-core"),hn=class extends gf.HTTPError{constructor(t){super(`Group name "${t}" is unavailable`,409)}};async function Af(e,t){try{let r=[];for(let i of e)if(i.roles){let p=i.roles[_.db.getProdAppID(t)];p&&r.push(p)}let a=await Promise.all(r.map(async i=>({[i]:await _.roles.roleToNumber(i)}))),n,o,s={};a.forEach(i=>{let[p,f]=Object.entries(i)[0];s[p]={roleId:p,roleNum:f}});for(let{roleId:i,roleNum:p}of Object.values(s))(o===void 0||p>o)&&(o=p,n=i);return n}catch(r){throw _.logging.logAlert(`Error finding higest role for ${e.length} on app ${t}`,r),r}}async function bf(e,t){return t?t=t.filter(r=>e.includes(r._id)):t=await M.getBulk(e,{enriched:!1}),t}async function If(e,t){if(!e.userGroups)return[];let r=await bf(e.userGroups,t?.groups),a=t?.appId?_.db.getProdAppID(t?.appId):null,n=[];for(let o of r){let s=o.builder?.apps;a&&s?.includes(a)?n.push(a):a||(n=n.concat(s||[]))}return[...new Set(n)]}async function w_(e,t,r){if(!e.userGroups)return null;let a=await bf(e.userGroups,r?.groups),n=_.db.getProdAppID(t);return e.roles?.[n]?e.roles[n]:(a=a.filter(o=>o?.roles?Object.keys(o.roles).includes(n):!1),await Af(a,t))}async function T_(e){if(!e||!e.userGroups)return e;let t=await Sf(e.userGroups,{enriched:!1}),r=[];for(let n of t)n?.roles&&(r=r.concat(Object.keys(n.roles)));r=[...new Set(r)];for(let n of r)await _.context.doInAppContext(n,async()=>{if(e.roles[n])return;let o=await Af(t,n);o&&(e.roles[n]=o)});let a=await If(e,{groups:t});if(a.length&&!e.builder?.global){let n=e.builder?.apps||[];e.builder={apps:n.concat(a)}}return e}async function ma(){return await M.fetch()}async function qt(e){return await M.get(e)}async function Sf(e,t={enriched:!0}){return await M.getBulk(e,t)}async function yf(e){if(await M.getByName(e))throw new hn(e)}async function hf(e){let t=await M.getGroupUsers(e._id);if(!t.length)return 0;let a=await _.tenancy.getGlobalDB().getMultiple(t.map(o=>o._id));return(await _.userUtils.creatorsInList(a)).filter(o=>o).length}async function lr(e){let t=[],r=!e._id,a=0;if(delete e.users,!e._id)e._id=M.generateUserGroupID(),await yf(e.name),t.push(_.events.group.created(e));else{let o=await M.get(e._id);if(o.name!==e.name&&await yf(e.name),t.push(_.events.group.updated(e)),JSON.stringify(o.roles)!==JSON.stringify(e.roles)){let s=o.users?.length||0,i=0;s>0&&(i=await hf(o)),Object.values(e.roles).includes("CREATOR")?a=s-i:a=-s,t.push(_.events.group.permissionsEdited(e))}}await Promise.all(t);let n=()=>M.save(e);if(r)return await ps(n);{let o=await n();if(a>0)await mn(0,a);else if(a<0){let s=await hf(e),i=Math.abs(a)-s;i>0&&await cr(0,i)}return o}}async function ms(e,t){let r;try{r=await M.get(e)}catch{throw new Error("Group not found")}let a=Object.values(r.roles||{}).includes("CREATOR"),n=()=>{};if(a){let s=_.tenancy.getGlobalDB(),i=await M.getGroupUsers(e),f=(await Promise.all(i.map(S=>s.get(S._id)))).map(S=>({...S,userGroups:S.userGroups.filter(P=>P!==e)})),y=(await _.userUtils.creatorsInList(f)).filter(S=>S).length,g=i.length-y;g&&(n=()=>cr(0,g))}let o=await M.destroy(e,t);return await _.events.group.deleted(r),await cs(),await n(),o}async function gs(e,t){let r=await M.get(e),a=await _.users.bulkGetGlobalUsersById(t),n=[];for(let p of a)p.userGroups||(p.userGroups=[]),p.userGroups.includes(e)||n.push(p);if(!n.length)return n;let o=n.map(p=>({...p,userGroups:[...p?.userGroups||[],e]}));if(await _.users.bulkUpdateGlobalUsers(o),Object.values(r.roles||{}).includes("CREATOR")){let f=(await _.userUtils.creatorsInList(n)).filter(y=>y).length,m=n.length-f;m&&await mn(0,m)}let i=[];for(let p of t)i.push(_.cache.user.invalidateUser(p));return await Promise.all(i),await _.events.group.usersAdded(o.length,r),o}async function ys(e,t){let r=await M.get(e),a=await _.users.bulkGetGlobalUsersById(t),n=[];for(let i of a){if(!i.userGroups||!i.userGroups.includes(e))continue;let p=i.userGroups.indexOf(e);i.userGroups.splice(p,1),n.push(i)}if(await _.users.bulkUpdateGlobalUsers(n),Object.values(r.roles||{}).includes("CREATOR")){let p=(await _.userUtils.creatorsInList(n)).filter(m=>m).length,f=n.length-p;f&&await cr(0,f)}let s=[];for(let i of t)s.push(_.cache.user.invalidateUser(i));return await Promise.all(s),n.length&&await _.events.group.usersDeleted(n.length,r),n}async function hs(e,t){let r=await qt(e);if(r.roles||(r.roles={}),t.appsToAdd)for(let a of t.appsToAdd)r.roles[a.appId]=a.roleId;if(t.appsToRemove)for(let a of t.appsToRemove)delete r.roles[a.appId];return await lr(r)}async function v_(e){let t=await ma(),r=[];for(let a of t)!a.roles||!a.roles[e]||(delete a.roles[e],r.push(a));return await M.bulkSave(r)}async function As(e,t){if(!await Pt())throw new Error("Feature not enabled, please check license");let r=_.db.getProdAppID(t),a=await qt(e);a.builder??={apps:[]},a.builder.apps.includes(t)||(a.builder.apps.push(r),await lr(a))}async function bs(e,t){if(!await Pt())throw new Error("Feature not enabled, please check license");let r=_.db.getProdAppID(t),a=await qt(e);a.builder?.apps.includes(t)&&(a.builder.apps=a.builder.apps.filter(n=>n!==r),await lr(a))}async function E_(){if(!await ns()){let e=_.tenancy.getGlobalDB(),r=(await ma()||[]).filter(a=>Object.values(a?.roles||{}).includes("CREATOR"));for(let a of r){let n=await M.getGroupUsers(a._id),s=(await Promise.all(n.map(m=>e.get(m._id)))).map(m=>({...m,userGroups:m.userGroups.filter(y=>y!==a._id)})),p=(await _.userUtils.creatorsInList(s)).filter(m=>m).length,f=n.length-p;await M.save({...a,roles:{}}),f&&await cr(0,f)}}}ga.users.UserDB.init(We,Q,Le);var $e=ga.users.UserDB;async function R_(e,t){if(!await Pt())throw new Error("Feature not enabled, please check license");await ga.users.addAppBuilder(e,t)}async function x_(e,t){if(!await Pt())throw new Error("Feature not enabled, please check license");await ga.users.removeAppBuilder(e,t)}var In={};w(In,{logs:()=>Rs});var Rs={};w(Rs,{logSearch:()=>N_,oldestLogDate:()=>_f,storeLog:()=>B_});var xf=require("@budibase/types"),bn=require("@budibase/backend-core");var An=require("@budibase/types");var Z=require("@budibase/backend-core");var wf=require("@budibase/backend-core");async function Tf(e,t){let r,a=5,n=!1,o,s=!0;for(;a>0;a--)try{s?o=await e():o=await exports.randomDelay(e),n=!0;break}catch(i){r=i}return n||wf.logging.logWarn(`Failed to backoff: ${t}`,r),o}var{SEPARATOR:rt,UNICODE_MAX:__,DocumentType:vf,AutomationViewMode:Is,ViewName:O_,getQueryIndex:P_}=Z.db,L_=new Date(0).toISOString(),C_=100,Ss=async()=>ka(An.ConstantQuotaName.AUTOMATION_LOG_RETENTION_DAYS);function Ef(e,t,{status:r,automationId:a}={},n={}){let o=a?`${a}${rt}`:"",s=r?`${r}${rt}`:"",i;return r&&a?i=`${Is.ALL}${rt}${s}${o}`:r?i=`${Is.STATUS}${rt}${s}`:a?i=`${Is.AUTOMATION}${rt}${o}`:i=`${vf.AUTOMATION_LOG}${rt}`,{...n,descending:!0,startkey:`${i}${t}${__}`,endkey:`${i}${e}`}}function q_(e,t,r){return`${vf.AUTOMATION_LOG}${rt}${e}${rt}${r}${rt}${t}`}async function ws(e,t,r={docs:!0}){let a=Z.context.getProdAppDB();await a.exists()||(a=Z.context.getDevAppDB());let n={status:r.status},o=r?.limit?r.limit:r?.paginate?9+1:void 0,s=Ef(e,t,n,{include_docs:r.docs,limit:o});r?.page&&(s.startkey=r.page);let i=await a.allDocs(s);return _r(i,{paginate:r?.paginate,pageSize:9})}async function Ts(e,t,r={}){let a=Z.context.getProdAppDB();await a.exists()||(a=Z.context.getDevAppDB());let n;try{let o={automationId:r?.automationId,status:r?.status},s=Ef(e,t,o,{include_docs:!0,limit:9+1});r?.page&&(s.startkey=r.page),n=await a.query(P_(O_.AUTOMATION_LOGS),s)}catch(o){if(o!=null&&(o.name==="not_found"||o.error==="not_found"))return await Hu(),Ts(e,t,r);throw o}return _r(n,{paginate:!0,pageSize:9})}async function Rf(e,t){let r=Z.context.getProdAppDB(),a=e._id,n=e.name,o=new Date().toISOString(),s=q_(o,t.status,a),i={...t,automationId:a,status:t.status,automationName:n,createdAt:o,_id:s};return await r.put(i),s}async function vs(e,{clearing:t}={clearing:!1}){let r=Z.context.getProdAppDB();await Tf(async()=>{let a=await r.get(Z.db.DocumentType.APP_METADATA);for(let n of e){let o=n.split(Z.db.SEPARATOR),s=`${o[o.length-3]}${Z.db.SEPARATOR}${o[o.length-2]}`,i={};a.automationErrors&&(i=a.automationErrors),Array.isArray(i[s])||(i[s]=[]);let p=i[s].indexOf(n);t&&p!==-1?i[s].splice(p,1):i[s].push(n),i[s].length===0&&delete i[s],a.automationErrors=i}await r.put(a),await Z.cache.app.invalidateAppMetadata(a.appId,a)},"Failed to update app metadata with automation log error")}async function U_(){let e=await Ss();try{return await ws(L_,e,{docs:!1,paginate:!1,limit:C_})}catch{return{data:[],hasNextPage:!1}}}async function Es(){let e=Z.context.getProdAppDB();try{let t=await U_();if(!t.data||t.data.length===0)return;let r=t.data.map(n=>({_id:n.id,_rev:n.value.rev,_deleted:!0})),a=t.data.filter(n=>{let o=n.id.split(Z.db.SEPARATOR);return o[o.length-1]===An.AutomationStatus.ERROR}).map(n=>n.id);await e.bulkDocs(r),a.length&&await vs(a,{clearing:!0})}catch(t){Z.logging.logAlert(`Failed to cleanup automation log history - Database "${e.name}"`,t)}}var _f=Ss;async function D_(e,t,r,a){let n,o=new Date().toISOString(),s=await _f();return(!e||e<s)&&(e=s),r||t?n=await Ts(e,o,{automationId:r,status:t,page:a}):n=await ws(e,o,{status:t,page:a,docs:!0,paginate:!0}),n}async function N_(e){return await Es(),await D_(e.startDate,e.status,e.automationId,e.page)}async function B_(e,t){if(!bn.db.isProdAppID(bn.context.getAppId()))return;let r=await Rf(e,t);t.status===xf.AutomationStatus.ERROR&&await vs([r]),await Es()}var Sn={};w(Sn,{checkPluginQuotas:()=>k_,deletePlugin:()=>G_,storePlugin:()=>M_});var Cf=require("@budibase/types"),H=require("@budibase/backend-core");var Of=C(require("fs")),Pf=require("path");function Lf(e,t){return Of.default.readFileSync((0,Pf.join)(e,t),"utf8")}async function M_(metadata,directory,source){let db=H.tenancy.getGlobalDB(),version=metadata.package.version,name=metadata.package.name,description=metadata.package.description,hash=metadata.schema.hash,bucketPath=H.objectStore.getPluginS3Dir(name),files=await H.objectStore.uploadDirectory(H.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===Cf.PluginType.DATASOURCE){let js=Lf(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=H.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=async()=>{let e=await db.put(doc);return await H.events.plugin.imported(doc),{...doc,_rev:e.rev}};return rev?await write():await ls(write)}async function G_(e){let t=H.tenancy.getGlobalDB();try{let r=await t.get(e),a=H.objectStore.getPluginS3Dir(r.name);await H.objectStore.deleteFolder(H.objectStore.ObjectStoreBuckets.PLUGINS,a),await t.remove(e,r._rev),await H.events.plugin.deleted(r),await ds()}catch(r){let a=r?.message?r?.message:r;throw new Error(`Failed to delete plugin: ${a}`)}}async function k_(){let e=H.tenancy.getGlobalDB();try{let r=(await e.allDocs(H.db.getPluginParams())).rows.length;console.log(`Syncing plugin count: ${r}`),await fs(r)}catch(t){H.logging.logAlert("Unable to retrieve plugins for quota check",t)}}var Ke={};w(Ke,{fetch:()=>Q_,fetchValues:()=>j_,isEncryptionKeyAvailable:()=>F_,isValid:()=>Df,remove:()=>$_,update:()=>W_});var ya=require("@budibase/types"),qf=require("@budibase/backend-core");function F_(){return!!qf.env.ENCRYPTION_KEY}async function Q_(){let e=await Et.get();return Object.keys(e.variables)}async function j_(e){let r=(await Et.get()).variables,a={};for(let[n,o]of Object.entries(r))switch(e){case ya.AppEnvironment.DEVELOPMENT:a[n]=o.development;break;case ya.AppEnvironment.PRODUCTION:default:a[n]=o.production;break}return a}async function Uf(e){if(!(await Fe.cache.getCachedLicense()).features.includes(ya.Feature.ENVIRONMENT_VARIABLES))throw new Error("User does not have access to environment variables feature.");let r=await Et.get();r.variables=e(r.variables),await Et.update(r)}async function W_(e,t){if(Df(e))await Uf(a=>(a[e]=t,a));else throw new Error("Variable name has characters that are not allowed")}async function $_(e){await Uf(t=>(delete t[e],t))}function Df(e){return/^[a-zA-Z0-9-_]+$/.test(e)}var gt={};w(gt,{definitions:()=>rO,download:()=>tO,fetch:()=>eO,write:()=>X_});var Tn=require("@budibase/types");var $=require("@budibase/backend-core"),Ue=require("@budibase/types");var Nf=require("memorystream"),Bf=new $.sql.Sql(Ue.SqlClient.SQL_LITE);async function K_(e,t,r){let a={operation:Ue.Operation.READ,table:jt.searchTable(),tables:{},paginate:{limit:r||9,page:t},filters:e,resource:{fields:[]},sort:{timestamp:{direction:Ue.SortOrder.DESCENDING,type:Ue.SortType.STRING}}},n=Bf._query(a);if(Array.isArray(n))throw new Error("Cannot execute multiple queries for audit log search");return{sql:n.sql,bindings:n.bindings}}function V_(e){return`${$.DocumentType.AUDIT_LOG}${$.SEPARATOR}${e}${$.SEPARATOR}${$.utils.newid()}`}async function Mf(e){e._id||(e._id=V_(e.timestamp)),e.type||(e.type=Ue.AUDIT_LOG_TYPE);try{let r=await $.context.getAuditLogsDB().put(e);return{...e,_rev:r.rev}}catch(t){$.logging.logAlert("Failed to write audit log",t)}}async function xs(e,t,r){t||(t=1);let a=$.context.getAuditLogsDB();try{let n=9+1,o=await K_(e,t,n),s=jt.searchTable(),i=Bf.convertJsonStringColumns(s,await a.sql(o.sql,o.bindings)),p;i.length>n&&(p=i.pop());let f={rows:i,hasNextPage:!!p};return f.hasNextPage&&(f.bookmark=t+1),f}catch(n){if(n.status===404&&!r?.isRetry)return await Y_(),await Gu(),await xs(e,t,{isRetry:!0});throw n}}async function Y_(){let e=$.context.getAuditLogsDB(),r=(await e.allDocs($.db.getDocParams($.DocumentType.AUDIT_LOG,null,{include_docs:!0}))).rows.map(a=>a.doc).filter(a=>a&&!a.type).map(a=>({...a,type:Ue.AUDIT_LOG_TYPE}));await e.bulkDocs(r)}function Gf(e){let t=$.context.getAuditLogsDB(),r=new Nf,a=t.dump(r,{filter:o=>{let s=o;if(!s._id?.startsWith($.DocumentType.AUDIT_LOG))return!1;let i=!0,p=(f,m)=>{!f||f.length===0||(i=!!(i&&m&&f.includes(m)))};if(p(e.userIds,s.userId),p(e.appIds,s.appId),p(e.events,s.event),(e.startDate||e.endDate)&&(i=i&&s.timestamp>=e.startDate&&s.timestamp<=e.endDate),e.fullSearch){let f=JSON.stringify(o);i=i&&f.includes(e.fullSearch)}return i}}),n=new Nf;return r.on("data",o=>{let s=JSON.parse(Buffer.from(o).toString());if(Array.isArray(s.docs)){let i="";for(let p of s.docs)i+=JSON.stringify(p)+`
38
- `;n.write(i)}}),r.on("end",()=>{n.end()}),{promise:a,stream:n}}var ce=require("@budibase/backend-core");var wn=require("@budibase/types"),ha=require("@budibase/string-templates"),Aa=require("@budibase/backend-core"),z_=Aa.constants.MIN_VALID_DATE.toISOString(),J_=Aa.constants.MAX_VALID_DATE.toISOString();function _s(e){return(e.startDate||e.endDate)&&(e.startDate=e.startDate||z_,e.endDate=e.endDate||J_),e}async function kf(e){Array.isArray(e.appIds)&&(e.appIds=e.appIds.map(a=>Aa.db.getProdAppID(a)));let t={};function r(a,n){n?.length&&(t.oneOf={...t.oneOf,[a]:n})}return 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=_s(e),t.range={timestamp:{high:e.endDate,low:e.startDate}}),Object.keys(t).length===0&&(t.notEmpty={event:!0}),t}function Os(e,t,r){let a={_id:e,status:wn.AuditLogResourceStatus.DELETED};switch(t){case"app":a.name=r?.appName;break;case"user":a.email=r?.email;break}return a}function Ps(e){let t=(0,ha.findHBSBlocks)(e);for(let r of t){let a=` "${r}"`;e=e.replace(e.includes(a)?a:` ${r}`,""),e=(0,ha.processStringSync)(e,{})}return e}function Ff(e,t){let r=wn.AuditedEventFriendlyName[e];if(!r)throw new Error("No friendly name found.");let a=(0,ha.processStringSync)(r,t);return a.includes('""')&&(a=Ps(r)),a}async function X_(e,t,r){if(!await ln()||!ce.utils.isAudited(e))return;let a=Ff(e,t),n=new Date;r?.timestamp&&(n=new Date(r.timestamp));let o={timestamp:n.toISOString(),event:e,name:a,userId:r?.userId||Tn.AuditLogSystemUser,metadata:{...t,...r?.hostInfo}},s={};try{if(r?.appId){o.appId=ce.db.getProdAppID(r.appId);let i=await ce.cache.app.getAppMetadata(r.appId);"name"in i&&(s.appName=i.name)}if(r?.userId){let i=await ce.users.getById(r?.userId);s.email=i.email}}catch(i){ce.logging.logAlert("Failed to retrieve fallback information for audit log",i)}return o.fallback=s,await Mf(o)}async function Z_(e){let t=e.map(i=>i.userId),a=e.filter(i=>i.appId).map(i=>ce.db.getDevAppID(i.appId)),n=await ce.users.bulkGetGlobalUsersById([...new Set(t)],{cleanup:!0}),o=await ce.db.getAppsByIDs([...new Set(a)]),s=[];for(let i of e){let p=n.find(y=>y?._id===i.userId),f=o.find(y=>ce.db.isSameAppID(y?.appId,i.appId)),m={event:i.event,timestamp:i.timestamp,name:i.name,metadata:i.metadata,user:p||Os(i.userId,"user",i.fallback)};i.appId&&(m.app=f||Os(i.appId,"app",i.fallback)),s.push(m)}return s}async function eO(e){if(!await ln())throw new Error("Audit logs not available - license required.");let t=await kf(e);if(typeof e.bookmark=="string")throw new Error("String based bookmark not supported.");let r=await xs(t,e.bookmark);return{hasNextPage:r.hasNextPage,bookmark:r.bookmark,data:await Z_(r.rows)}}function tO(e){return e=_s(e),Gf(e)}function rO(){let e=Object.entries(Tn.AuditedEventFriendlyName).filter(r=>r[1]!=null),t={};for(let r of e)t[r[0]]=Ps(r[1]);return t}var vn={};w(vn,{applications:()=>Us,roles:()=>Cs,users:()=>Ls});var Ls={};w(Ls,{roleCheck:()=>nO});function aO(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}async function nO(e,t){return await Ze()||aO(e,t),e}var Cs={};w(Cs,{assign:()=>oO,unAssign:()=>sO});var ba=require("@budibase/backend-core");async function oO(e,t){if(!await Ze())throw new Error("Unable to assign roles - license required.");let r=await $e.bulkGet(e);for(let a of r){if(t.role&&t.role.roleId){let n=ba.db.getProdAppID(t.role.appId);a.roles[n]=t.role.roleId}if(t.appBuilder){let n=ba.db.getProdAppID(t.appBuilder.appId),o=a.builder?.apps||[];a.builder={apps:o.concat([n])}}t.builder&&(a.builder={global:!0}),t.admin&&(a.admin={global:!0}),a.roles}await $e.bulkUpdate(r)}async function sO(e,t){if(!await Ze())throw new Error("Unable to un-assign roles - license required.");let r=await $e.bulkGet(e);for(let a of r){if(t.role){let n=ba.db.getProdAppID(t.role?.appId);a.roles[n]===t.role.roleId&&delete a.roles[n]}if(t.appBuilder&&a.builder?.apps){let n=ba.db.getProdAppID(t.appBuilder.appId);a.builder.apps=a.builder.apps.filter(o=>o!==n)}t.builder&&a.builder&&delete a.builder,t.admin&&a.admin&&delete a.admin}}var Us={};w(Us,{buildExportFn:()=>uO,buildImportFn:()=>iO});var qs=require("@budibase/backend-core");function iO(e){return async(t,r)=>{await Ze()||t.throw(403,"Endpoint unavailable, license required."),t.request.files?.appExport||t.throw(400,"Must provide app export file for import."),await qs.context.doInAppContext(t.params.appId,async()=>{await e(t),t.body=void 0,t.status=204,await r()})}}function uO(e){return async(t,r)=>{await Ze()||t.throw(403,"Endpoint unavailable, license required.");let{encryptPassword:a,excludeRows:n}=t.request.body;await qs.context.doInAppContext(t.params.appId,async()=>{t.request.body={encryptPassword:a,excludeRows:n},t.query.appId=t.params.appId,await e(t),await r()})}}var Ve=require("@budibase/backend-core"),ie=require("@budibase/types");var Ds=require("@budibase/backend-core"),Qf;function jf(){Qf=new Ds.queue.BudibaseQueue(Ds.queue.JobQueue.APP_BACKUP,{maxStalledCount:3,jobOptions:{attempts:3,removeOnFail:!0,removeOnComplete:!0}})}function Ut(){return Qf}var Wf=require("path"),$f=C(require("fs"));async function Ns(e,t={}){return we.storeAppBackupMetadata(e,t)}function Kf(e){let t=new Date().toISOString();switch(e){case ie.AppBackupStatus.COMPLETE:case ie.AppBackupStatus.FAILED:return{timestamp:t,finishedAt:t};case ie.AppBackupStatus.STARTED:return{timestamp:t,startedAt:t};case ie.AppBackupStatus.PENDING:return{timestamp:t,createdAt:t}}}async function pO(e,t,r,a){let n=await En(e);return await we.storeAppBackupMetadata({...n,...Kf(t),contents:r,status:t,type:ie.AppBackupType.BACKUP},{filename:a,docId:e})}async function cO(e,t,r){let a=await En(e);return await we.storeAppBackupMetadata({...a,...Kf(r),status:r,type:ie.AppBackupType.RESTORE,trigger:ie.AppBackupTrigger.MANUAL},{docId:e,docRev:t})}async function En(e){return we.getAppBackupMetadata(e)}async function lO(e,t){return we.updateAppBackupMetadata(e,t)}async function dO(e){let t=await we.getAppBackupMetadata(e);return t.filename&&await Ve.objectStore.deleteFile(Ve.objectStore.ObjectStoreBuckets.BACKUPS,t.filename),we.deleteAppBackupMetadata(e)}async function fO(e,t){return we.fetchAppBackups(e,t)}async function Vf(e){let t=await we.getAppBackupMetadata(e);if(!t.filename)throw new Error("Backup incomplete - cannot download.");let r=await Ve.objectStore.getReadStream(Ve.objectStore.ObjectStoreBuckets.BACKUPS,t.filename);return{metadata:t,stream:r}}async function mO(e){let{stream:t}=await Vf(e),r=(0,Wf.join)(Ve.objectStore.budibaseTempDir(),Ve.utils.newid()),a=$f.default.createWriteStream(r);return new Promise((n,o)=>{t.on("error",o),a.on("error",o),t.pipe(a).on("close",()=>n(r))})}async function gO(e,t,r={}){let a;try{a=await Ns({appId:e,trigger:t,timestamp:new Date().toISOString(),status:ie.AppBackupStatus.PENDING,type:ie.AppBackupType.BACKUP,...r})}catch(n){if(n.status===409)return;throw n}return await Ut().add({docId:a.id,docRev:a.rev,appId:e,export:{trigger:t,...r}}),await Ve.events.backup.appBackupTriggered(e,a.id,ie.AppBackupType.BACKUP,t,r?.name),a.id}async function yO(e,t,r,a){let n=await En(t),o;try{o=await Ns({appId:e,timestamp:new Date().toISOString(),status:ie.AppBackupStatus.PENDING,type:ie.AppBackupType.RESTORE,createdBy:a})}catch(s){if(s?.status===409)return;throw s}return await Ut().add({appId:e,docId:o.id,docRev:o.rev,import:{nameForBackup:r,backupId:t,createdBy:a}}),{restoreId:o.id,metadata:n}}var hO={isEnabled:rs,triggerAppRestore:ye(yO),triggerAppBackup:ye(gO),getBackupDownloadStream:ye(Vf),downloadAppBackup:ye(mO),fetchAppBackups:ye(fO),storeAppBackupMetadata:ye(Ns),updateBackupStatus:ye(pO),updateRestoreStatus:ye(cO),getAppBackup:ye(En),updateAppBackup:ye(lO),deleteAppBackup:ye(dO)},at=hO;var Ms={};w(Ms,{init:()=>Bs});var z=require("@budibase/backend-core");var De=require("@budibase/types");var dr=C(require("fs"));async function Bs(e){Ut().process(async t=>{let r=t.data;try{if(r.export)return IO(t,e);if(r.import)return bO(t,e)}catch(a){z.logging.logAlert(`Failed to perform backup for app ID: ${r.appId}`,a)}})}async function AO(e){await z.db.getDB(e,{skip_setup:!0}).destroy()}async function Yf(e,t,r,a){let n=z.db.getDevAppID(r),o=z.db.getProdAppID(r),s=new Date().toISOString(),i=async(p,f)=>{a?.doc?await at.updateBackupStatus(a.doc.id,p,f?.contents,f?.filename):await at.storeAppBackupMetadata({appId:o,timestamp:s,trigger:e,status:p,name:a?.name,type:De.AppBackupType.BACKUP,contents:f?.contents,createdBy:a?.createdBy},{filename:f?.filename})};try{let p=await a.processing.exportAppFn(n,{tar:!0}),f=await a.processing.statsFn(n),m=`${o}/backup-${s}.tar.gz`,y=z.objectStore.ObjectStoreBuckets.BACKUPS,g=dr.default.createReadStream(p);await z.objectStore.streamUpload({bucket:y,filename:m,stream:g,extra:{type:"application/gzip",metadata:{name:a?.name,trigger:e,timestamp:s,appId:o}}}),await i(De.AppBackupStatus.COMPLETE,{filename:m,contents:f}),dr.default.existsSync(p)&&dr.default.rmSync(p)}catch(p){z.logging.logAlert("App backup error",p),await i(De.AppBackupStatus.FAILED)}}async function bO(e,t){let r=e.data,a=r.appId,n=r.import.backupId,o=r.import.nameForBackup,s=r.import.createdBy,i=z.tenancy.getTenantIDFromAppID(a);return z.tenancy.doInTenant(i,async()=>{let p=z.db.getDevAppID(a),{rev:f}=await at.updateRestoreStatus(r.docId,r.docRev,De.AppBackupStatus.STARTED);await Yf(De.AppBackupTrigger.RESTORING,i,a,{processing:t,createdBy:s,name:o});let m=await at.downloadAppBackup(n);await AO(p);let y=De.AppBackupStatus.COMPLETE;try{await t.importAppFn(p,z.db.getDB(p),{file:{type:"application/gzip",path:m},key:m})}catch(g){z.logging.logAlert("App restore error",g),y=De.AppBackupStatus.FAILED}await at.updateRestoreStatus(r.docId,f,y),dr.default.existsSync(m)&&dr.default.rmSync(m,{force:!0})})}async function IO(e,t){let r=e.data,a=r.appId,n=r.export.trigger,o=r.export.name,s=z.tenancy.getTenantIDFromAppID(a);await z.tenancy.doInTenant(s,async()=>{try{let{rev:i}=await at.updateBackupStatus(r.docId,De.AppBackupStatus.STARTED);return Yf(n,s,a,{processing:t,doc:{id:r.docId,rev:i},name:o})}catch(i){z.logging.logAlert("App backup error",i)}})}var SO=async e=>{jf(),await Bs(e.processing)},ve={...at,processing:Ms,init:SO,getBackupQueue:Ut};var Hf=async e=>{e.backups&&await ve.init(e.backups)};var de={};w(de,{create:()=>mM,find:()=>fM,get:()=>dM,remove:()=>yM,update:()=>gM});var hA=C(qi()),nt=require("@budibase/backend-core");var AA=require("@budibase/types");async function dM(e){let t=nt.tenancy.getGlobalDB(),r=new nt.db.QueryBuilder(t.name,AA.SearchIndex.USER);r.setIndexBuilder(nt.db.searchIndexes.createUserIndex),r.setLimit(e.pageSize),r.addEqual("scimInfo.isSync",!0);for(let[n,o]of Object.entries(e.filters?.equal??{}))r.addEqual(n,o);r.setSort("_id"),r.setSkip(e.skip);let a=await r.run();return{users:a.rows,total:a.totalRows}}async function fM(e){return await nt.users.getById(e)}async function mM(e){let t=await $e.getUserByEmail(e.email);if(t){if(t.scimInfo?.isSync)throw new nt.HTTPError("User is already synched",409);e={...t,scimInfo:(0,hA.default)(t.scimInfo,e.scimInfo),password:void 0,firstName:e.firstName,lastName:e.lastName,updatedAt:e.updatedAt}}return await $e.save(e,{requirePassword:!1})}async function gM(e,t){return await $e.save(e,{requirePassword:!1,allowChangingEmail:t?.allowChangingEmail})}async function yM(e){return await $e.destroy(e)}var Ar={};w(Ar,{create:()=>hM});var bA=C(qi());var IA=require("@budibase/backend-core");async function hM(e){let t=await so(e.name),r;if(!t)r=(await Q.save(e)).id;else{if(t.scimInfo?.isSync)throw new IA.HTTPError("Group is already synched",409);r=t._id,t.users&&(await Q.removeUsers(r,t.users.map(n=>n._id)),delete t.users),t.scimInfo=(0,bA.default)(t.scimInfo,e.scimInfo),await Q.save(t)}return await Q.get(r)}var Nt={};w(Nt,{logRequest:()=>AM,logResponse:()=>bM});var Ui=require("@budibase/backend-core");async function AM(e){Ui.logging.logWarn("SCIM request log",e)}async function bM(e){Ui.logging.logWarn("SCIM response error",e)}var ki={};w(ki,{doInScimContext:()=>Ni,feature:()=>j,internalGroupOnly:()=>kn,licenseAuth:()=>TA,licensing:()=>SA,requireSCIM:()=>Bi,scimGroupOnly:()=>Ta,scimUserOnly:()=>wa});var yt=require("@budibase/backend-core");var Mn=require("@budibase/types"),IM=(e={checkUsersLimit:!0})=>async(t,r)=>{if((e.licensingCheck?e.licensingCheck:()=>!!t.user)(t)){if(yt.env.SELF_HOSTED&&yt.env.DEFAULT_LICENSE)return t.user.license=uo,r();t.user.license=await Fe.cache.getCachedLicense(t,{populateLicense:e.populateLicense,populateFreeLicense:e.populateFreeLicense}),e.checkUsersLimit&&(yt.utils.isServingApp(t)||yt.utils.isServingBuilder(t)||yt.utils.isServingBuilderPreview(t)||yt.utils.isPublicApiRequest(t))&&await We.usageLimitIsExceeded(Mn.StaticQuotaName.USERS,Mn.QuotaUsageType.STATIC)}return r()},SA=IM;var j={};w(j,{requireFeature:()=>SM,requireFeatures:()=>wM});var SM=e=>async(t,r)=>{await cn(e),await r()},wM=(...e)=>async(t,r)=>{await ts(e),await r()};var Gn=require("@budibase/backend-core");var Ni=async(e,t)=>(Gn.env.DISABLE_SCIM_CALLS||await Nt.logRequest({...e.request.toJSON(),body:e.request.body}),await Gn.context.doInScimContext(async()=>{let r=await t();return await Nt.logResponse({...e.response.toJSON(),body:e.response.body}),r}));var Bi=async(e,t)=>{await os(),await t()};var wA=require("@budibase/backend-core");var wa=e=>Mi(wA.users.getById,e,!0),Ta=e=>Mi(M.get,e,!0),kn=e=>Mi(M.get,e,!1);function Mi(e,t,r){return async(a,n)=>{let o=a.params[t];return typeof o!="string"&&a.throw(404),!!(await e(o)).scimInfo?.isSync!==r&&a.throw(404),n()}}var va=require("@budibase/backend-core");var Gi=require("dd-trace");async function TA(e,t){await Gi.tracer.trace("licenseAuth",async r=>{let a=e.request.headers[va.constants.Header.LICENSE_KEY];Array.isArray(a)&&(a=a[0]),r.addTags({licenseKey:a}),a||e.throw(403,"License key not provided");let n=await zo(a);n||(r.addTags({licenseFound:!1}),e.throw(403,"License not found or invalid")),n.tenantId||e.throw(403,"License does not have a tenant ID"),Gi.tracer.setUser({id:"anonymous",tenantId:n.tenantId}),await va.context.doInSelfHostTenantUsingCloud(n.tenantId,async()=>{await va.context.doInLicenseContext(n,async()=>{await t()})})})}var Hi={};w(Hi,{appBackups:()=>ub,auditLogs:()=>XA,environmentVariables:()=>WA,groups:()=>DA,scim:()=>Gb,users:()=>Wb});async function vA(e){let t=e.request.body;if(t.name=t.name.trim(),delete t.roles,t._id){let a=await qt(t._id);t.roles=a.roles,t.scimInfo=a.scimInfo}let r=await lr(t);e.body={_id:r.id,_rev:r.rev}}async function EA(e){let t=e.params.groupId,r=e.request.body.add,a=e.request.body.remove;(r&&!Array.isArray(r)||a&&!Array.isArray(a))&&e.throw(400,"Must supply a list of users to add or to remove");let n,o;r&&(n=await gs(t,r)),a&&(o=await ys(t,a)),e.body={added:n,removed:o}}async function RA(e){let t=e.params.groupId,r=e.request.body.add,a=e.request.body.remove;(r&&!Array.isArray(r)||a&&!Array.isArray(a))&&e.throw(400,"Must supply a list of objects, with appId and roleId to add or remove"),e.body=await hs(t,{appsToAdd:r,appsToRemove:a})}async function xA(e){e.body={data:await ma()}}async function _A(e){let{groupId:t,rev:r}=e.params;try{await ms(t,r),e.body={message:"Group deleted successfully"}}catch(a){e.throw(a.status,a)}}async function OA(e){try{e.body=await qt(e.params.groupId)}catch(t){e.throw(t.status,t)}}async function PA(e){let{pageSize:t=10,bookmark:r,emailSearch:a}=e.request.query,n=e.params.groupId,o={limit:t+1},s=await Ma(n,{...o,emailSearch:a,bookmark:r}),i=a?s[t]?.email:s[t]?._id,p=!!i;e.body={users:s.slice(0,t),bookmark:i,hasNextPage:p}}async function LA(e){let{groupId:t,appId:r}=e.params;await As(t,r),e.body={message:"Group app builder access updated."}}async function CA(e){let{groupId:t,appId:r}=e.params;await bs(t,r),e.body={message:"group app builder access removed."}}var qA=C(require("@koa/router")),he=C(require("joi"));var Ee=require("@budibase/types"),Ye=require("@budibase/backend-core"),UA=new qA.default;function vM(){return Ye.auth.joiValidator.body(he.default.object({_id:he.default.string().optional(),_rev:he.default.string().optional(),color:he.default.string().required(),icon:he.default.string().required(),name:he.default.string().trim().required().max(50),role:he.default.string().optional(),users:he.default.array().optional(),apps:he.default.array().optional(),roles:he.default.object().optional(),createdAt:he.default.string().optional(),updatedAt:he.default.string().optional()}).required())}UA.post("/api/global/groups",Ye.auth.adminOnly,j.requireFeature(Ee.Feature.USER_GROUPS),vM(),vA).get("/api/global/groups",j.requireFeature(Ee.Feature.USER_GROUPS),xA).delete("/api/global/groups/:groupId/:rev",j.requireFeature(Ee.Feature.USER_GROUPS),Ye.auth.adminOnly,kn("groupId"),_A).get("/api/global/groups/:groupId",j.requireFeature(Ee.Feature.USER_GROUPS),Ye.auth.builderOrAdmin,OA).get("/api/global/groups/:groupId/users",j.requireFeature(Ee.Feature.USER_GROUPS),Ye.auth.builderOrAdmin,PA).post("/api/global/groups/:groupId/users",Ye.auth.adminOnly,j.requireFeature(Ee.Feature.USER_GROUPS),kn("groupId"),EA).post("/api/global/groups/:groupId/apps",Ye.auth.builderOrAdmin,j.requireFeature(Ee.Feature.USER_GROUPS),RA).post("/api/global/groups/:groupId/app/:appId/builder",Ye.auth.builderOrAdmin,j.requireFeatures(Ee.Feature.USER_GROUPS,Ee.Feature.APP_BUILDERS),LA).delete("/api/global/groups/:groupId/app/:appId/builder",Ye.auth.builderOrAdmin,j.requireFeatures(Ee.Feature.USER_GROUPS,Ee.Feature.APP_BUILDERS),CA);var DA=UA;var Fi=require("@budibase/types");var Qi=require("@budibase/backend-core");async function NA(e){e.body={encryptionKeyAvailable:Ke.isEncryptionKeyAvailable()}}async function BA(e){e.body={variables:await Ke.fetch()}}async function MA(e){let{name:t,production:r,development:a}=e.request.body;await Ke.update(t,{production:r,development:a});let n=[Fi.AppEnvironment.PRODUCTION];r!==a&&n.push(Fi.AppEnvironment.DEVELOPMENT),await Qi.events.environmentVariable.created(t,n),e.body={message:`Environment variable "${t}" created.`}}async function GA(e){let{production:t,development:r}=e.request.body,a=e.params.varName;await Ke.update(a,{production:t,development:r}),e.body={message:`Environment variable "${a}" updated.`}}async function kA(e){let t=e.params.varName;await Ke.remove(t),await Qi.events.environmentVariable.deleted(t),e.body={message:`Environment variable "${t}" deleted.`}}var Bt=require("@budibase/backend-core"),QA=C(require("@koa/router")),Ea=C(require("joi")),jA=new QA.default;function FA(){return Bt.auth.joiValidator.body(Ea.default.object({name:Ea.default.string().optional(),production:Ea.default.string().required(),development:Ea.default.string().required()}))}jA.get("/api/env/variables/status",Bt.auth.builderOrAdmin,NA).get("/api/env/variables",Bt.auth.builderOrAdmin,BA).post("/api/env/variables",Bt.auth.builderOrAdmin,FA(),MA).patch("/api/env/variables/:varName",Bt.auth.builderOrAdmin,FA(),GA).delete("/api/env/variables/:varName",Bt.auth.builderOrAdmin,kA);var WA=jA;var ji=require("@budibase/backend-core");async function $A(e){let t=e.request.body,r=await gt.fetch(t);await ji.events.auditLog.filtered(t),e.body=r}async function KA(e){let t=e.request.body,{stream:r}=gt.download(t);await ji.events.auditLog.downloaded(t),e.attachment(`audit-logs-${Date.now()}.log`),e.body=r}async function VA(e){e.body={events:gt.definitions()}}var HA=require("@budibase/types"),Mt=require("@budibase/backend-core"),zA=C(require("@koa/router")),Re=C(require("joi"));function YA(){return Mt.auth.joiValidator.body(Re.default.object({userIds:Re.default.array().items(Re.default.string()).optional(),appIds:Re.default.array().items(Re.default.string()).optional(),events:Re.default.array().items(Re.default.string().valid(...Object.values(HA.Event))).optional(),startDate:Re.default.string().optional().allow(""),endDate:Re.default.string().optional().allow(""),fullSearch:Re.default.string().optional().allow(""),bookmark:Re.default.number()}))}var JA=new zA.default;JA.post("/api/global/auditlogs/search",Mt.auth.adminOnly,YA(),$A).get("/api/global/auditlogs/download",Mt.auth.adminOnly,Mt.middleware.querystringToBody,YA(),KA).get("/api/global/auditlogs/definitions",Mt.auth.adminOnly,VA);var XA=JA;var Wi=require("@budibase/types");var ZA=require("@budibase/backend-core");async function br(e,t){await Kt.appExists(t)||e.throw(400,`Provided app ID: ${t} - is invalid.`)}async function eb(e){let t=e.params.appId;await br(e,t);let r=e.request.body,a=e.user?._id,n=await ve.triggerAppBackup(t,Wi.AppBackupTrigger.MANUAL,{name:r.name,createdBy:a});n||e.throw(500,"Unable to start backup."),e.body={backupId:n,message:"Backup triggered - process starting."}}async function tb(e){let t=e.params.appId;await br(e,t);let r=e.params.backupId,a=e.request.body.name,n=await ve.triggerAppRestore(t,r,a,e.user?._id);n||e.throw(500,"Unable to start restore."),await ZA.events.backup.appBackupRestored(n.metadata),e.body={restoredId:n?.restoreId,message:"Restore triggered - process starting."}}async function rb(e){let t=e.params.appId;await br(e,t);let r=e.params.backupId;await ve.deleteAppBackup(r),e.body={message:"Backup deleted successfully."}}async function ab(e){let t=e.params.appId;await br(e,t);let r=e.request.body;r?.trigger&&(r.trigger=r.trigger.toLowerCase(),Object.values(Wi.AppBackupTrigger).includes(r.trigger)||e.throw(400,"Provided trigger is not a valid option.")),e.body=await ve.fetchAppBackups(t,{paginate:!0,...r})}async function nb(e){let t=e.params.appId;await br(e,t);let r=e.params.backupId,a=e.request.body;e.body=await ve.updateAppBackup(r,a.name)}async function ob(e){let t=e.params.appId;await br(e,t);let r=e.params.backupId,{metadata:a,stream:n}=await ve.getBackupDownloadStream(r);e.attachment(`backup-${a.timestamp}.tar.gz`),e.body=n}var sb=C(require("@koa/router")),Gt=C(require("joi")),Fn=require("@budibase/types"),ht=require("@budibase/backend-core"),ib=new sb.default;function _M(){return ht.auth.joiValidator.body(Gt.default.object({trigger:Gt.default.string().valid(...Object.values(Fn.AppBackupTrigger)),type:Gt.default.string().valid(...Object.values(Fn.AppBackupType)),startDate:Gt.default.date(),endDate:Gt.default.date(),page:Gt.default.string()}))}ib.post("/api/apps/:appId/backups",ht.auth.builderOrAdmin,eb).post("/api/apps/:appId/backups/search",ht.auth.builderOrAdmin,_M(),ab).get("/api/apps/:appId/backups/:backupId/file",ht.auth.builderOrAdmin,ob).patch("/api/apps/:appId/backups/:backupId",ht.auth.builderOrAdmin,nb).delete("/api/apps/:appId/backups/:backupId",ht.auth.builderOrAdmin,rb).post("/api/apps/:appId/backups/:backupId/import",ht.auth.builderOrAdmin,tb);var ub=ib;var Mb=C(require("@koa/router"));var Qn=require("scim-patch");var cb=require("@budibase/backend-core");function pb(e,t){let r=e.request.query[t];if(r!==void 0)return+r}var lb=async e=>{let t=pb(e,"pageSize")??20,r=pb(e,"startIndex"),a;e.request.query.filter&&(a=K.user.userFilters(e.request.query.filter));let n=await de.get({pageSize:t,skip:r,filters:a});e.body={schemas:["urn:ietf:params:scim:api:messages:2.0:ListResponse"],totalResults:n.total,Resources:n.users.map(K.user.toScimUserResponse),startIndex:(r||0)+1,itemsPerPage:t}},fb=async e=>{let{id:t}=e.params;typeof t!="string"&&e.throw(404);let r=await de.find(t);e.body=K.user.toScimUserResponse(r)},mb=async e=>{let t=K.user.fromScimUser(e.request.body);try{let r=await de.create(t);e.body=K.user.toScimUserResponse(r)}catch(r){throw r instanceof cb.EmailUnavailableError&&e.throw(409,"Email already in use"),r}};function OM(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}var gb=async e=>{let t=await de.find(e.params.id);t||e.throw(404);let r=K.user.toScimUserResponse(t),a=e.request.body;try{(0,Qn.patchBodyValidation)(a)}catch{}if(OM(a))return $i(e);let n;try{n=(0,Qn.scimPatch)(r,a.Operations)}catch{}n||e.throw(500);let o=K.user.fromScimUser(n);await de.update(o,{allowChangingEmail:!0}),e.body=K.user.toScimUserResponse(o)},$i=async e=>{let{id:t}=e.params;typeof t!="string"&&e.throw(404),await de.remove(t),e.status=204};var Pb=C(Ob()),Lb=require("@budibase/shared-core"),jn=require("scim-patch");var Wn=require("scim2-parse-filter");function Cb(e,t){for(let r of t.split(","))delete e[r]}var qb=async e=>{let r=(await Q.fetch()).filter(o=>o.scimInfo?.isSync).map(K.group.toScimGroupResponse),{filter:a,excludedAttributes:n}=e.request.query;if(a){let o=(0,Wn.filter)((0,Wn.parse)(a));r=r.filter(o)}n&&r.forEach(o=>{Cb(o,n)}),e.body={schemas:["urn:ietf:params:scim:api:messages:2.0:ListResponse"],totalResults:r.length,Resources:r,startIndex:1,itemsPerPage:r.length}},Ub=async e=>{let t=K.group.fromScimGroup(e.request.body),r=await Ar.create(t);e.body=K.group.toScimGroupResponse(r)},Db=async e=>{let{id:t}=e.params,r=await Q.get(t),a=K.group.toScimGroupResponse(r),{excludedAttributes:n}=e.request.query;n&&Cb(a,n),e.body=a},Nb=async e=>{let{id:t}=e.params,r=await Q.get(t);await Q.remove(t,r._rev),e.status=204},Bb=async e=>{let{id:t}=e.params,r=await Q.get(t),a=K.group.toScimGroupResponse(r),n=e.request.body;try{(0,jn.patchBodyValidation)(n)}catch{e.throw(400)}let{true:o,false:s}=(0,Pb.default)(n.Operations,i=>i.path==="members");if(s?.length){let i=(0,jn.scimPatch)(a,s);i||e.throw(500);let p={...K.group.fromScimGroup(i),_rev:r._rev};await Q.save(p)}if(o?.length){let i=[],p=[];for(let{op:f,value:m}of o)switch(f){case"add":case"Add":for(let y of m)i.push(await de.find(y.value));break;case"remove":case"Remove":for(let y of m)p.push(await de.find(y.value));break;case"replace":case"Replace":throw new Error("Replacing members is not allowed");default:Lb.utils.unreachable(f)}i.length&&await Q.addUsers(t,i.map(f=>f._id)),p.length&&await Q.removeUsers(t,p.map(f=>f._id))}e.body=K.group.toScimGroupResponse(await Q.get(t))};var Ra=require("@budibase/types"),Ae=new Mb.default({prefix:"/api/global/scim/v2"});Ae.use(Bi);Ae.use(Ni);Ae.get("/users",lb);Ae.get("/users/:id",wa("id"),fb);Ae.post("/users",mb);Ae.patch("/users/:id",wa("id"),gb);Ae.delete("/users/:id",wa("id"),$i);Ae.get("/groups",qb);Ae.post("/groups",j.requireFeature(Ra.Feature.USER_GROUPS),Ub);Ae.get("/groups/:id",j.requireFeature(Ra.Feature.USER_GROUPS),Ta("id"),Db);Ae.delete("/groups/:id",j.requireFeature(Ra.Feature.USER_GROUPS),Ta("id"),Nb);Ae.patch("/groups/:id",j.requireFeature(Ra.Feature.USER_GROUPS),Ta("id"),Bb);var Gb=Ae;var Qb=C(require("@koa/router"));var Ki=require("@budibase/backend-core");async function kb(e){let{userId:t,appId:r}=e.params,a=await tt.db.getUser(t);if(Ki.users.isGlobalBuilder(a)){e.body={message:"User already admin - no permissions updated."};return}await tt.addAppBuilder(a,r),e.body={message:`User "${a.email}" app builder access updated.`}}async function Fb(e){let{userId:t,appId:r}=e.params,a=await tt.db.getUser(t);if(Ki.users.isGlobalBuilder(a)){e.body={message:"User already admin - no permissions removed."};return}await tt.removeAppBuilder(a,r),e.body={message:`User "${a.email}" app builder access removed.`}}var Vi=require("@budibase/types"),Yi=require("@budibase/backend-core"),jb=new Qb.default;jb.post("/api/global/users/:userId/app/:appId/builder",Yi.auth.builderOrAdmin,j.requireFeatures(Vi.Feature.APP_BUILDERS),kb).delete("/api/global/users/:userId/app/:appId/builder",Yi.auth.builderOrAdmin,j.requireFeatures(Vi.Feature.APP_BUILDERS),Fb);var Wb=jb;var K={};w(K,{group:()=>Ji,user:()=>zi});var zi={};w(zi,{fromScimUser:()=>nG,toScimUserResponse:()=>tG,userFilters:()=>oG});var $n=require("@budibase/types"),$b=require("scim2-parse-filter"),Kb=require("@budibase/backend-core"),Vb=require("@budibase/shared-core"),{unreachable:eG}=Vb.utils,tG=e=>{let{isSync:t,roles:r,...a}=e.scimInfo||{},n={...a,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===$n.UserStatus.ACTIVE};return(e.firstName||e.lastName)&&(n.name={formatted:[e.firstName,e.lastName].filter(o=>o).join(" "),familyName:e.lastName,givenName:e.firstName}),n},rG=e=>!!e?.id;function aG(e){if(Kb.utils.validEmail(e.userName))return e.userName;if(e.emails)return e.emails.find(t=>t.primary)?.value||e.emails[0]?.value}var nG=e=>{let t=rG(e)?e:void 0,r=aG(e);if(!r)throw new Error("Email is required");let a;switch(e.active){case"True":case"true":case!0:a=!0;break;case"False":case"false":case!1:a=!1;break;default:eG(e.active)}let n,o;return e.name?.givenName?(n=e.name?.givenName,o=e.name?.familyName):n=e.displayName,{tenantId:"",_id:t?.id,userId:t?.id,email:r,firstName:n,lastName:o,scimInfo:{...e,isSync:!0},roles:{},status:a?$n.UserStatus.ACTIVE:$n.UserStatus.INACTIVE,createdAt:t?.meta.created.getTime(),updatedAt:t?.meta.lastModified.toISOString()}},oG=e=>{let t={equal:{}},r=(0,$b.parse)(e);function a(n){switch(n.op){case"eq":{let o=n.attrPath,s;switch(o){case"emails.value":s="email";break;default:s=`scimInfo.${o}`}t.equal[s]=n.compValue;break}case"and":for(let o of n.filters)a(o);break;default:console.warn("Filter not handled",{filter:n})}}return a(r),t};var Ji={};w(Ji,{fromScimGroup:()=>uG,toScimGroupResponse:()=>sG});var sG=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}))}),iG=e=>!!e?.id,uG=e=>{let t=iG(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()}};var Iu={};w(Iu,{LLMRequest:()=>V,TableGeneration:()=>bu,agentHistoryTitleSystemPrompt:()=>AG,agentSystemPrompt:()=>hG,aiColumnSchemas:()=>hu,aiTableResponseToTableSchema:()=>fu,appendAIColumns:()=>mu,classifyText:()=>Zi,cleanData:()=>eu,generateAIColumns:()=>lu,generateCode:()=>yG,generateCronExpression:()=>tu,generateData:()=>du,generateJs:()=>ou,generateSQL:()=>gG,generateTables:()=>cu,generationStructure:()=>yu,getLLM:()=>_a,getLLMConfig:()=>pu,getLLMOrThrow:()=>tI,parseResponseFormat:()=>su,sanitiseToolName:()=>pG,searchWeb:()=>nu,sentimentAnalysis:()=>au,summarizeText:()=>Kn,tableDataStructuredOutput:()=>Au,translate:()=>ru});function pG(e){if(e.length>64)throw new Error("Tool name must be under 64 characters long");return e.replace(/[^a-zA-Z0-9_-]/g,"_")}var Hn=require("@budibase/types");var ze=require("@budibase/backend-core"),Jb=require("@budibase/types");var Hb=C(require("openai"));var At=require("@budibase/types");var Yb=require("@budibase/shared-core");var bt=C(require("dd-trace"));function Xi(e,t){return t.map(r=>e[r]).join(" ")}var It=class{constructor({model:t,apiKey:r,maxTokens:a}){this._model=t,this._apiKey=r,this._maxTokens=a??parseInt(process.env.BUDIBASE_AI_MAX_PROMPT_TOKENS||"300")}get model(){return this._model}get apiKey(){return this._apiKey}get maxTokens(){return this._maxTokens}async prompt(t){return await bt.default.trace("prompt",async()=>{let r=typeof t=="string"?new V().addUserMessage(t):t,{messages:a,tokensUsed:n}=await bt.default.trace("chatCompletion",()=>this.chatCompletion(r));return!a||a.length===0?{message:"",tokensUsed:n}:{message:a[a.length-1].content||"",tokensUsed:n}})}async chat(t){return await bt.default.trace("chat",async()=>await this.chatCompletion(t))}async summarizeText(t){return bt.default.trace("summarizeText",()=>this.prompt(Kn(t)))}async generateCronExpression(t){return bt.default.trace("generateCronExpression",()=>this.prompt(tu(t)))}async operation(t,r){return bt.default.trace("operation",a=>{a.addTags({operation:t.operation,rowId:r.id});let n=this.promptForOperation(t,r);return this.prompt(n)})}promptForOperation(t,r){let{operation:a,column:n,columns:o,language:s,categories:i,prompt:p}=t;switch(a){case At.AIOperationEnum.SUMMARISE_TEXT:return Kn(Xi(r,o));case At.AIOperationEnum.CLEAN_DATA:return eu(r[n]);case At.AIOperationEnum.TRANSLATE:return ru(r[n],s);case At.AIOperationEnum.CATEGORISE_TEXT:if(!i)throw Error("No categories provided for categorise text operation. Please provide categories.");return Zi(Xi(r,o),i.split(","));case At.AIOperationEnum.SENTIMENT_ANALYSIS:return au(r[n]);case At.AIOperationEnum.PROMPT:return p;case At.AIOperationEnum.SEARCH_WEB:return nu(Xi(r,o));default:throw Yb.utils.unreachable(a)}}async generateJs(t,r){return await bt.default.trace("generateJs",async()=>{let{bindings:a=[],snippets:n=[]}=r||{};return await this.prompt(ou(a,n).addUserMessage(t))})}};var zb=require("openai/helpers/zod");function su(e){if(e)return e==="text"?{type:"text"}:e==="json"?{type:"json_object"}:e}function cG(e){if(!e)return 0;let t=e.prompt_tokens;return e.completion_tokens*3+t}var ot=class extends It{constructor(r){super(r);if(!r.apiKey)throw new Error("No OpenAI API key found");this.client=new Hb.default({apiKey:r.apiKey})}async chatCompletion(r){let a={model:this.model,messages:r.messages,max_tokens:this.maxTokens,response_format:su(r.format)};r.tools&&r.tools.length>0&&(a.tool_choice="auto",a.tools=r.tools.map(zb.zodFunction));let n=await this.client.chat.completions.create(a),o=n.choices[0]?.message;if(o?.tool_calls){r.addMessage(o);let s=[];for(let i of o.tool_calls){let p=r.findTool(i.function.name);if(!p)throw new Error(`Tool ${i.function.name} not found in prompt tools`);let f=JSON.parse(i.function.arguments);s.push(p.handler(f).then(m=>({role:"tool",tool_call_id:i.id,content:m})))}return r.addMessages(await Promise.all(s)),this.chatCompletion(r)}else{if(o?.content)return{messages:[...r.messages,{role:o.role,content:o.content}],tokensUsed:cG(n.usage)};throw new Error("No response found")}}};var He=require("@budibase/backend-core");var iu=require("dd-trace"),Vn=class extends It{async prompt(t){let r=await super.prompt(t);return r.tokensUsed&&await yn(r.tokensUsed),r}async chat(t){let r=await super.chat(t);return r.tokensUsed&&await yn(r.tokensUsed),r}async chatCompletion(t){return He.env.SELF_HOSTED?this.chatCompletionSelfHost(t):this.chatCompletionCloud(t)}async chatCompletionCloud(t){return await iu.tracer.trace("chatCompletionCloud",async()=>await new ot({apiKey:He.env.OPENAI_API_KEY,model:this.model,maxTokens:this.maxTokens}).chatCompletion(t))}async chatCompletionSelfHost(t){return await iu.tracer.trace("chatCompletionSelfHost",async r=>{if(!He.env.BUDICLOUD_URL)throw new Error("No Budibase URL found");if(r.addTags({budicloudUrl:He.env.BUDICLOUD_URL}),!this._apiKey){let o=await Zo();if(!o)throw new Error("No license key found");this._apiKey=o,r.addTags({licenseKey:this._apiKey})}let a={messages:t.messages,format:t.format,useTools:t.tools.length>0},n=await fetch(`${He.env.BUDICLOUD_URL}/api/ai/chat`,{method:"POST",headers:{"Content-Type":"application/json",[He.constants.Header.LICENSE_KEY]:this._apiKey},body:JSON.stringify(a)});if(!n.ok)throw await He.HTTPError.fromResponse(n);return await n.json()})}};var xa=require("dd-trace");var uu=C(require("@anthropic-ai/sdk"));function lG(e){if(!e)return 0;let t=e.input_tokens;return e.output_tokens*3+t}var Yn=class extends It{constructor(r){super(r);this.client=new uu.default({apiKey:r.apiKey})}firstTextBlock(r){for(let a of r.content)if(a.type==="text")return a.text}async chatCompletion(r){try{let a=await this.client.messages.create({model:this.model,messages:r.messages.map(({content:o})=>({role:"user",content:o||""})),max_tokens:this.maxTokens}),n=this.firstTextBlock(a)||"";return{messages:[...r.messages,{role:"assistant",content:n}],tokensUsed:lG(a.usage)}}catch(a){throw a instanceof uu.default.APIError&&console.error(`Anthropic Prompt failed with error ${a.name} and status: ${a.status}`),a}}};var Xb=require("zod"),Zb=require("openai/helpers/zod"),eI="gpt-4o-mini",dG={OpenAI:ot,TogetherAI:ot,AzureOpenAI:ot,Custom:ot,Anthropic:Yn,BudibaseAI:Vn};async function fG(){return await xa.tracer.trace("getAIConfig",async e=>{let t={type:Jb.ConfigType.AI,config:{}};if(!ze.context.isSelfHostUsingCloud()){let a=await ze.configs.getAIConfig();a&&(t=a)}await ss(t);let r=Object.values(t.config).find(a=>a.active&&a.isDefault);if(!r){e.addTags({enabled:!1,reason:"no provider found"});return}return e.addTags({enabled:!0}),{provider:r.provider,model:r.defaultModel||eI,apiKey:r.apiKey}})}async function mG(){return xa.tracer.trace("getSelfHostOpenAIKeyConfig",e=>{if(!ze.env.SELF_HOSTED){e.addTags({enabled:!1,reason:"not self host"});return}if(!ze.env.OPENAI_API_KEY){e.addTags({enabled:!1,reason:"no OPENAI_API_KEY"});return}return e.addTags({enabled:!0}),{provider:"OpenAI",model:eI,apiKey:ze.env.OPENAI_API_KEY}})}async function pu(){return xa.tracer.trace("getLLMConfig",async()=>await fG()||await mG())}async function _a(e){return await xa.tracer.trace("getLLM",async t=>{let{model:r,maxTokens:a}=e||{},n=await pu();if(!n){t.addTags({enabled:!1,reason:"no config found"});return}r&&(n.model=r),a&&(n.maxTokens=a);let o=dG[n.provider];if(!o){t.addTags({enabled:!1,reason:"no provider found",provider:n.provider});return}return new o(n)})}async function tI(){let e=await _a();if(!e)throw new ze.HTTPError("No available LLM configurations",500);return e}var V=class e{constructor(){this.messages=[];this.tools=[]}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 Xb.z.ZodType?this.format=(0,Zb.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}};function Kn(e,t){let r=`Summarize this text:
39
- ${e}`,a="";if(t)switch(t){case Hn.SummariseLength.SHORT:a="In 1-2 concise sentences, ";break;case Hn.SummariseLength.MEDIUM:a="In 2-3 paragraphs, ";break;case Hn.SummariseLength.LONG:a="In multiple detailed paragraphs, ";break}return new V().addUserMessage(`${a}${r}.
40
- Only return the summary.`)}function Zi(e,t){return new V().addUserMessage(`Return the category of this text: "${e}". Based on these categories: ${t.join(", ")}. Only return the category. Do not add any extra punctuation or fix spelling mistakes. It should exactly match one of the categories. `)}function eu(e){return new V().addUserMessage(`Clean the following string: "${e}". Remove any spelling mistakes or data issues. Only return the cleaned string itself and nothing else.`)}function gG(e,t){return new V().addUserMessage(`Given the table schema:
37
+ `;function Kr(e){return So.default.verify(e,yS,{algorithms:["RS256"]})}function AS(e,t){return So.default.sign(t,e,{encoding:"utf-8",algorithm:"RS256"})}var Ya={};w(Ya,{getFeatures:()=>wo});var l=require("@budibase/types");var bS={[l.PlanType.FREE]:[...ge.SELF_FREE_LICENSE.features],[l.PlanType.PREMIUM]:void 0,[l.PlanType.PREMIUM_PLUS]:[l.Feature.APP_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.APP_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.APP_BACKUPS],[l.PlanType.TEAM]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS],[l.PlanType.BUSINESS]:[l.Feature.USER_GROUPS,l.Feature.APP_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.APP_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.PlanType.ENTERPRISE_BASIC_TRIAL]:[l.Feature.USER_GROUPS,l.Feature.APP_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.PlanType.ENTERPRISE]:[l.Feature.USER_GROUPS,l.Feature.APP_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]},IS={[l.PlanType.FREE]:[...ge.CLOUD_FREE_LICENSE.features],[l.PlanType.PREMIUM]:[l.Feature.APP_BACKUPS,l.Feature.BRANDING,l.Feature.APP_BUILDERS,l.Feature.VIEW_PERMISSIONS,l.Feature.PDF],[l.PlanType.PREMIUM_PLUS]:[l.Feature.APP_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.APP_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.APP_BACKUPS,l.Feature.BRANDING],[l.PlanType.TEAM]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS,l.Feature.BRANDING],[l.PlanType.BUSINESS]:[l.Feature.USER_GROUPS,l.Feature.APP_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.APP_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.PlanType.ENTERPRISE_BASIC_TRIAL]:[l.Feature.USER_GROUPS,l.Feature.APP_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.PlanType.ENTERPRISE]:[l.Feature.USER_GROUPS,l.Feature.APP_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]};function wo(e,t){let r=[];function a(n){let o=n[t];if(!o)throw new Error(`Features do not exist for planType=${t} and hosting=${e}`);return o}switch(e){case l.Hosting.SELF:r=a(bS);break;case l.Hosting.CLOUD:r=a(IS);break}return r}var Ha={};w(Ha,{UNLIMITED:()=>d,getQuotas:()=>To});var G=require("@budibase/types");var c=Ze,bp=ge,d=-1,Yr=e=>e*1e6,SS={[G.PlanType.FREE]:{...bp.CLOUD_FREE_LICENSE.quotas},[G.PlanType.PREMIUM]:{usage:{monthly:{...c.queries(d),...c.automations(1e3),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(1e4),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(0),...c.plugins(d),...c.customAIConfigurations(0)}},constant:{...c.automationLogRetentionDays(7),...c.appBackupRetentionDays(7)}},[G.PlanType.PREMIUM_PLUS]:{usage:{monthly:{...c.queries(d),...c.automations(5e3),...c.budibaseAICredits(Yr(2)),...c.actions(d)},static:{...c.rows(25e3),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(0),...c.plugins(d),...c.customAIConfigurations(1)}},constant:{...c.automationLogRetentionDays(30),...c.appBackupRetentionDays(30)}},[G.PlanType.PREMIUM_PLUS_TRIAL]:{usage:{monthly:{...c.queries(d),...c.automations(5e3),...c.budibaseAICredits(Yr(2)),...c.actions(d)},static:{...c.rows(25e3),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(0),...c.plugins(d),...c.customAIConfigurations(1)}},constant:{...c.automationLogRetentionDays(30),...c.appBackupRetentionDays(30)}},[G.PlanType.PRO]:{usage:{monthly:{...c.queries(d),...c.automations(1e3),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(5),...c.plugins(d),...c.customAIConfigurations(0)}},constant:{...c.automationLogRetentionDays(7),...c.appBackupRetentionDays(7)}},[G.PlanType.TEAM]:{usage:{monthly:{...c.queries(d),...c.automations(5e3),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(10),...c.plugins(d),...c.customAIConfigurations(0)}},constant:{...c.automationLogRetentionDays(30),...c.appBackupRetentionDays(90)}},[G.PlanType.BUSINESS]:{usage:{monthly:{...c.queries(d),...c.automations(1e4),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(5e4),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(50),...c.plugins(d),...c.customAIConfigurations(0)}},constant:{...c.automationLogRetentionDays(365),...c.appBackupRetentionDays(365)}},[G.PlanType.ENTERPRISE_BASIC]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(Yr(4)),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(d),...c.plugins(d),...c.customAIConfigurations(d)}},constant:{...c.automationLogRetentionDays(d),...c.appBackupRetentionDays(d)}},[G.PlanType.ENTERPRISE_BASIC_TRIAL]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(Yr(4)),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(d),...c.plugins(d),...c.customAIConfigurations(d)}},constant:{...c.automationLogRetentionDays(15),...c.appBackupRetentionDays(15)}},[G.PlanType.ENTERPRISE]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(Yr(4)),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(d),...c.plugins(d),...c.customAIConfigurations(d)}},constant:{...c.automationLogRetentionDays(d),...c.appBackupRetentionDays(d)}}},wS={[G.PlanType.FREE]:{...bp.SELF_FREE_LICENSE.quotas},[G.PlanType.PREMIUM]:void 0,[G.PlanType.PREMIUM_PLUS]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(0),...c.plugins(d),...c.customAIConfigurations(1)}},constant:{...c.automationLogRetentionDays(30),...c.appBackupRetentionDays(30)}},[G.PlanType.PREMIUM_PLUS_TRIAL]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(0),...c.plugins(d),...c.customAIConfigurations(1)}},constant:{...c.automationLogRetentionDays(30),...c.appBackupRetentionDays(30)}},[G.PlanType.PRO]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(5),...c.plugins(d),...c.customAIConfigurations(0)}},constant:{...c.automationLogRetentionDays(7),...c.appBackupRetentionDays(7)}},[G.PlanType.TEAM]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(10),...c.plugins(d),...c.customAIConfigurations(0)}},constant:{...c.automationLogRetentionDays(30),...c.appBackupRetentionDays(90)}},[G.PlanType.BUSINESS]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(50),...c.plugins(d),...c.customAIConfigurations(0)}},constant:{...c.automationLogRetentionDays(90),...c.appBackupRetentionDays(365)}},[G.PlanType.ENTERPRISE_BASIC]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(d),...c.plugins(d),...c.customAIConfigurations(d)}},constant:{...c.automationLogRetentionDays(d),...c.appBackupRetentionDays(d)}},[G.PlanType.ENTERPRISE_BASIC_TRIAL]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(d),...c.plugins(d),...c.customAIConfigurations(d)}},constant:{...c.automationLogRetentionDays(15),...c.appBackupRetentionDays(15)}},[G.PlanType.ENTERPRISE]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(d),...c.plugins(d),...c.customAIConfigurations(d)}},constant:{...c.automationLogRetentionDays(d),...c.appBackupRetentionDays(d)}}};function To(e,t){let r;function a(n){let o=n[t];if(!o)throw new Error(`Quotas do not exist for planType=${t} and hosting=${e}`);return o}switch(e){case G.Hosting.SELF:r=a(wS);break;case G.Hosting.CLOUD:r=a(SS);break}return JSON.parse(JSON.stringify(r))}var Vt={};w(Vt,{appExists:()=>TS,encoding:()=>Kt});var Ip=require("@budibase/backend-core");async function TS(e){return(await Ip.db.getAllApps({all:!0,idsOnly:!0})).includes(e)}var Kt={};w(Kt,{base64ToObject:()=>ES,objectToBase64:()=>vS});function vS(e){let t=JSON.stringify(e);return Buffer.from(t).toString("base64")}function ES(e){let t=Buffer.from(e,"base64").toString();return JSON.parse(t)}var af=require("@budibase/types"),sr=require("@budibase/backend-core"),nf=P(Nl()),of=P(Jo());async function ex(e){await Te.save({offlineLicenseToken:e}),await Ct()}async function tx(){await Te.save({offlineLicenseToken:void 0}),await Ct()}async function sf(){return(await Te.get()).offlineLicenseToken}async function Xo(){let t=(await sr.installation.getInstall()).installId,r=sr.context.getTenantId(),a=await sr.events.identification.getUniqueTenantId(r);return{installId:t,tenantId:a}}async function rx(){let e=await Xo();return Kt.objectToBase64(e)}function ax(e){return Kt.base64ToObject(e)}function uf(e){let t=Date.now(),r=new Date(e.expireAt).getTime();if(t>r)throw new Error(`Offline license has expired. expireAt=${e.expireAt}`)}async function pf(e){let t=await Xo();if(e.identifier.installId!==t.installId||e.identifier.tenantId!==t.tenantId)throw new Error("Invalid offline license")}function cf(e){let t=e.plan.type,r=af.Hosting.SELF,a=wo(r,t),n=To(r,t);return e.features=(0,nf.default)(e.features,a),e.quotas=(0,of.default)(e.quotas,n),e}async function Zo(){try{let e=await sf();if(e){let t=await Kr(e);return uf(t),await pf(t),cf(t)}}catch(e){console.error("Error retrieving offline license",e)}}var fa={};w(fa,{deleteDevLicense:()=>ux,getOfflineLicense:()=>sx,writeDevLicenseToDisk:()=>ix});var lf=require("@budibase/backend-core"),ts=require("path"),df=require("os"),Ot=P(require("fs"));var nx=lf.env.isTest()?".budibase-test":".budibase",es=(0,ts.join)((0,df.tmpdir)(),nx),ox="dev_license.txt",da=(0,ts.join)(es,ox);if(!Ot.default.existsSync(es))try{Ot.default.mkdirSync(es)}catch{}function sx(){try{if(Ot.default.existsSync(da)){let e=Ot.default.readFileSync(da,{encoding:"utf-8"});return Kr(e)}}catch(e){console.error("Error retrieving offline license from disk",e)}}function ix(e){console.log(`Writing license to: ${da}`),Ot.default.writeFileSync(da,e,{encoding:"utf-8"})}function ux(){Ot.default.rmSync(da,{force:!0})}var as=async()=>{if(rs.env.OFFLINE_MODE)return Zo();let e=await $t();return e||(e=fa.getOfflineLicense()),e},ns=e=>bo(e),os=()=>rs.env.SELF_HOSTED?ge.SELF_FREE_LICENSE:ge.CLOUD_FREE_LICENSE;var is={};w(is,{activateLicenseKey:()=>px,deleteLicenseKey:()=>cx,getLicenseKey:()=>dn});var ss=P(require("dd-trace"));async function px(e){await Io(e),await Te.save({licenseKey:e}),await Ct()}async function dn(){return await ss.default.trace("getLicenseKey",async e=>{let t=await Te.get();return e.addTags({licenseKey:t.licenseKey}),t.licenseKey})}async function cx(){return await ss.default.trace("deleteLicenseKey",async()=>{await Te.save({licenseKey:void 0}),await Ct()})}var Lt=require("@budibase/backend-core"),fn=P(require("dd-trace")),ff=3600,Ct=async()=>{await hf(),await gf()},mf=async(e,t)=>{let{populateLicense:r=as,populateFreeLicense:a=os}=t||{};return await fn.default.trace("getCachedLicense",async n=>{let o=Lt.context.getLicense();if(o)return n.addTags({foundInContext:!0,features:o.features,plan:o.plan,quotas:o.quotas}),o;let s=Lt.tenancy.getTenantId(),i=await oo(),p=await i.get(s);return n.addTags({tenantId:s,foundInCache:!!p}),p?(n.addTags({foundInCache:!0,refreshedAt:p.refreshedAt,features:p.features,plan:p.plan,quotas:p.quotas}),p):(p=await fn.default.trace("populateLicense",async()=>await r(s)),n.addTags({populatedLicense:!!p}),p||(p=fn.default.trace("populateFreeLicense",()=>a(e,s)),n.addTags({populatedFreeLicense:!!p})),p.refreshedAt=new Date().toISOString(),n.addTags({refreshedAt:p.refreshedAt,features:p.features,plan:p.plan,quotas:p.quotas,expirySeconds:ff}),await i.store(s,p,ff),p)})};Lt.env.isJest()&&(mf=jest.fn());var gf=mf,hf=async()=>{let e=Lt.tenancy.getTenantId();await(await oo()).delete(e)};async function ie(e,t){Array.isArray(e)||(e=[e]),t||(t=await Pe.getCachedLicense());for(let r of e)if(!t?.features.includes(r))return!1;return!0}async function mn(e,t){if(!await ie(e,t))throw new et.FeatureDisabledError(`${e} is not currently enabled`,e)}async function us(e,t){if(!await ie(e,t)){let r=e.join(", ");throw new et.FeatureDisabledError(`${r} are not currently enabled`,r)}}function ye(e){return async(...t)=>(await mn(se.Feature.APP_BACKUPS),e(...t))}async function ps(){return ie(se.Feature.APP_BACKUPS)}async function cs(){return ie(se.Feature.BRANDING)}async function yf(){return ie(se.Feature.ENFORCEABLE_SSO)}async function dx(){return ie(se.Feature.SYNC_AUTOMATIONS)}async function fx(){return ie(se.Feature.TRIGGER_AUTOMATION_RUN)}async function Pt(){return ie(se.Feature.APP_BUILDERS)}async function gn(){return ie(se.Feature.AUDIT_LOGS)}async function ls(){return ie(se.Feature.USER_GROUPS)}function mx(){return ie(se.Feature.PWA)}async function tt(){return ie(se.Feature.EXPANDED_PUBLIC_API)}async function gx(e){if(et.env.ENABLE_SSO_MAINTENANCE_MODE||!await yf())return!1;let r;return e?.config?r=e.config:r=await et.configs.getSettingsConfig(),!!r.isSSOEnforced}var ds=async()=>{let e=se.Feature.SCIM,t=await ie(e),r=await et.configs.getSCIMConfig();if(!t||!r?.enabled)throw new et.FeatureDisabledError(`${e} is not currently enabled`,e);return!0};async function hx(){return ie(se.Feature.VIEW_PERMISSIONS)}async function yx(){return ie(se.Feature.VIEW_READONLY_COLUMNS)}var Ax={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 bx(e){return await cs()?{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}:Ax}var ms={};w(ms,{enrichAIConfig:()=>fs});var Af=require("@budibase/backend-core"),Ix="budibase_ai";async function fs(e){if(Af.env.SELF_HOSTED)return e;for(let t of Object.values(e.config))if(t.provider==="BudibaseAI")return e;return e.config[Ix]={provider:"BudibaseAI",active:!0,isDefault:Object.keys(e.config).every(t=>!e.config[t].isDefault),defaultModel:process.env.BUDIBASE_AI_DEFAULT_MODEL||"gpt-4o-mini",name:"Budibase AI"},e}var Ke={};w(Ke,{addAction:()=>Ex,addApp:()=>Rx,addAutomation:()=>Px,addGroup:()=>hs,addPlugin:()=>As,addRow:()=>xx,addRows:()=>Ox,addUsers:()=>bn,bustCache:()=>co,decrement:()=>rt,decrementMany:()=>ma,getCurrentUsageValues:()=>Ku,getLicensedQuota:()=>If,getQuotaUsage:()=>vt,increment:()=>Ae,incrementBudibaseAICredits:()=>Sn,incrementMany:()=>Ut,removeApp:()=>_x,removeGroup:()=>ys,removePlugin:()=>bs,removeRow:()=>Cx,removeRows:()=>Lx,removeUsers:()=>lr,set:()=>gs,setAllUsage:()=>fo,setAppUsageValue:()=>lo,setUsage:()=>ju,setUsagePerApp:()=>Wu,updatePluginCount:()=>Is,updateUsage:()=>ur,usageLimitIsExceeded:()=>vx,utils:()=>_r});var yn=require("@budibase/types");var H=require("@budibase/types");var De=require("@budibase/backend-core");var ir=require("dd-trace"),Ae=(e,t,r)=>bf({change:1,name:e,type:t,opts:r}),Ut=e=>ir.tracer.trace("quotas.incrementMany",async()=>bf(e)),bf=async e=>await ir.tracer.trace("quotas.tryIncrement",async t=>{let r=Array.isArray(e)?e:[e];t.addTags({numActions:r.length}),await ur(r.map(n=>({usageChange:n.change,name:n.name,type:n.type,opts:{dryRun:!0,suppressErrorLog:n.opts?.suppressErrorLog,id:n.opts?.id}})));let a=[];for(let n of r)await ir.tracer.trace("quotas.incrementMany.fn",async o=>{o.addTags({actionName:n.name,actionType:n.type,actionChange:n.change});let s=n.opts?.fn;s&&a.push(await s())});return await ur(r.map(n=>({usageChange:n.change,name:n.name,type:n.type,opts:{dryRun:!1,valueFn:n.opts?.valueFn,suppressErrorLog:n.opts?.suppressErrorLog,id:n.opts?.id}}))),a[0]}),rt=(e,t,r={})=>ur({usageChange:-1,name:e,type:t,opts:r}),ma=e=>{let t=Array.isArray(e)?e:[e];return ur(t.map(r=>({usageChange:-r.change,name:r.name,type:r.type,opts:r.opts})))},gs=async(e,t,r)=>ke.setUsage(r,e,t),Sx=(e,t,r)=>{if(e==H.QuotaUsageType.STATIC){let a=r.usageQuota.triggers;return a?a[t]||{}:{}}else{let a=ke.utils.getCurrentMonthString(),n=r.monthly[a].triggers;return n?n[t]||{}:{}}},wx=async(e,t,r,a)=>{try{await De.locks.doWithLock({type:H.LockType.TRY_ONCE,name:H.LockName.TRIGGER_QUOTA,resource:e,ttl:1e4},async()=>{let n={percentage:r,name:t.name};a&&(n.resetDate=a),await ft.triggerQuota(n)})}catch(n){De.logging.logAlert("Error triggering quota",n)}},Tx=async(e,t,r,a)=>{let n=await vt(),o=e===H.QuotaUsageType.MONTHLY?n.quotaReset:void 0,s=await Sx(e,t,n),i=a.triggers,p=r/a.value*100;p>100&&(p=100);for(let[m,f]of i.entries())if(p>=f&&a.value!==Ze.UNLIMITED){if(!s[f]){s[f]=new Date().toISOString();let g=i[m+1]||100;(!(p>=g)||p===f)&&await wx(t,a,p,o)}}else s[f]=void 0;return s},ur=async e=>{await ir.tracer.trace("quotas.updateUsage",async t=>{let r=De.tenancy.getTenantId(),a=Array.isArray(e)?e:[e];t.addTags({numActions:a.length,tenantId:r});let n,o,s=[],i={},p={},m={},f={};for(let g of a)await ir.tracer.trace("quotas.updateUsage.action",async S=>{S.addTags({actionName:g.name,actionType:g.type,actionUsageChange:g.usageChange});try{n=De.context.getAppId()}catch{}if(H.APP_QUOTA_NAMES.includes(g.name)&&!n)throw new Error("App context required for quota update");try{o=await If(H.QuotaType.USAGE,g.name,g.type),s.push(o);let{total:_,app:R,breakdown:E}=await ke.getCurrentUsageValues(g.type,g.name,g.opts?.id);_+=g.usageChange,R!=null&&(R+=g.usageChange),E!=null&&(E+=g.usageChange);let U={};if(g.opts?.dryRun||(U=await Tx(g.type,g.name,_,o),f={...f,[g.name]:U}),o.value!==Ze.UNLIMITED&&_>o.value&&g.usageChange>0)throw new De.UsageLimitError(`Licensed ${o.name} of ${o.value} has been exceeded`,o.name);if(_=Math.max(0,_),R&&(R=Math.max(0,R)),E&&(E=Math.max(0,E),m={...m,[g.name]:E}),!g.opts?.dryRun){let Oe=g.opts?.valueFn;Oe&&(_=await Oe(),R=_),i={...i,[g.name]:_},p={...p,[g.name]:R}}}catch(_){throw g.opts?.suppressErrorLog||console.error(`Error updating usage quotas for ${g.name}`,_),_}});let h=a.filter(g=>!g.opts?.dryRun).map(g=>({name:g.name,type:g.type,values:{total:i[g.name],app:p[g.name],breakdown:m[g.name],triggers:f[g.name]},opts:{...g.opts,tenantId:r}}));h.length>0&&await ke.setAllUsage(h)})},If=async(e,t,r)=>{let a=await Pe.getCachedLicense();if(!a){let n=De.tenancy.getTenantId();throw new Error("License not found for tenant id "+n)}if(r&&(0,H.isStaticQuota)(e,r,t))return a.quotas[e][r][t];if(r&&(0,H.isMonthlyQuota)(e,r,t))return a.quotas[e][r][t];if((0,H.isConstantQuota)(e,t))return a.quotas[e][t];throw new Error("Invalid quota type")},vx=async(e,t)=>{try{return await ur({usageChange:1,name:e,type:t,opts:{dryRun:!0}}),!1}catch(r){if(r.code===H.ErrorCode.USAGE_LIMIT_EXCEEDED)return!0;throw r}};var Ex=async e=>Ae(yn.MonthlyQuotaName.ACTIONS,yn.QuotaUsageType.MONTHLY,{fn:e});var pr=require("@budibase/types"),Sf=require("@budibase/backend-core"),wf=async()=>{let e=await Sf.db.getAllApps({dev:!0});return e?e.length:0},Rx=async(e,{appId:t}={})=>Ae(pr.StaticQuotaName.APPS,pr.QuotaUsageType.STATIC,{fn:e,valueFn:wf,id:t}),_x=async({appId:e}={})=>rt(pr.StaticQuotaName.APPS,pr.QuotaUsageType.STATIC,{valueFn:wf,id:e});var We=require("@budibase/types"),xx=async(e,{tableId:t}={})=>Ae(We.StaticQuotaName.ROWS,We.QuotaUsageType.STATIC,{fn:e,id:t}),Cx=async({tableId:e}={})=>rt(We.StaticQuotaName.ROWS,We.QuotaUsageType.STATIC,{id:e}),Ox=async(e,t,{tableId:r}={})=>Ut({change:e,name:We.StaticQuotaName.ROWS,type:We.QuotaUsageType.STATIC,opts:{fn:t,id:r}}),Lx=async(e,{tableId:t}={})=>ma({change:e,name:We.StaticQuotaName.ROWS,type:We.QuotaUsageType.STATIC,opts:{id:t}});var An=require("@budibase/types"),Px=async(e,{automationId:t}={})=>Ae(An.MonthlyQuotaName.AUTOMATIONS,An.QuotaUsageType.MONTHLY,{fn:e,id:t});var cr=require("@budibase/types"),hs=async e=>Ae(cr.StaticQuotaName.USER_GROUPS,cr.QuotaUsageType.STATIC,{fn:e}),ys=async()=>rt(cr.StaticQuotaName.USER_GROUPS,cr.QuotaUsageType.STATIC);var yt=require("@budibase/types"),As=async e=>Ae(yt.StaticQuotaName.PLUGINS,yt.QuotaUsageType.STATIC,{fn:e}),bs=async()=>rt(yt.StaticQuotaName.PLUGINS,yt.QuotaUsageType.STATIC),Is=async e=>gs(yt.StaticQuotaName.PLUGINS,yt.QuotaUsageType.STATIC,e);var $e=require("@budibase/types"),ga=require("@budibase/backend-core");var bn=async(e,t,r)=>{let a=[{change:e,name:$e.StaticQuotaName.USERS,type:$e.QuotaUsageType.STATIC,opts:{fn:r,valueFn:ga.users.getUserCount}}];t>0&&a.push({change:t,name:$e.StaticQuotaName.CREATORS,type:$e.QuotaUsageType.STATIC,opts:{valueFn:ga.users.getCreatorCount}});let n=await Ut(a);return await $t(),n},lr=async(e,t)=>{let r=[{change:e,name:$e.StaticQuotaName.USERS,type:$e.QuotaUsageType.STATIC,opts:{valueFn:ga.users.getUserCount}}];t>0&&r.push({change:t,name:$e.StaticQuotaName.CREATORS,type:$e.QuotaUsageType.STATIC,opts:{valueFn:ga.users.getCreatorCount}}),await ma(r),await $t()};var In=require("@budibase/types"),Sn=async e=>Ut({change:e,name:In.MonthlyQuotaName.BUDIBASE_AI_CREDITS,type:In.QuotaUsageType.MONTHLY});var at={};w(at,{addAppBuilder:()=>Bx,db:()=>Ve,removeAppBuilder:()=>Mx});var ya=require("@budibase/backend-core");var j={};w(j,{addAppBuilder:()=>Es,addUsers:()=>ws,adjustGroupCreatorsQuotas:()=>Nx,cleanupApp:()=>Dx,enrichUserRolesFromGroups:()=>qx,fetch:()=>ha,get:()=>qt,getBulk:()=>Cf,getGroupBuilderAppIds:()=>xf,getGroupRoleId:()=>Ux,remove:()=>Ss,removeAppBuilder:()=>Rs,removeUsers:()=>Ts,save:()=>dr,updateGroupApps:()=>vs});var x=require("@budibase/backend-core");var Tf=require("@budibase/backend-core"),wn=class extends Tf.HTTPError{constructor(t){super(`Group name "${t}" is unavailable`,409)}};async function Rf(e,t){try{let r=[];for(let i of e)if(i.roles){let p=i.roles[x.db.getProdAppID(t)];p&&r.push(p)}let a=await Promise.all(r.map(async i=>({[i]:await x.roles.roleToNumber(i)}))),n,o,s={};a.forEach(i=>{let[p,m]=Object.entries(i)[0];s[p]={roleId:p,roleNum:m}});for(let{roleId:i,roleNum:p}of Object.values(s))(o===void 0||p>o)&&(o=p,n=i);return n}catch(r){throw x.logging.logAlert(`Error finding higest role for ${e.length} on app ${t}`,r),r}}async function _f(e,t){return t?t=t.filter(r=>e.includes(r._id)):t=await M.getBulk(e,{enriched:!1}),t}async function xf(e,t){if(!e.userGroups)return[];let r=await _f(e.userGroups,t?.groups),a=t?.appId?x.db.getProdAppID(t?.appId):null,n=[];for(let o of r){let s=o.builder?.apps;a&&s?.includes(a)?n.push(a):a||(n=n.concat(s||[]))}return[...new Set(n)]}async function Ux(e,t,r){if(!e.userGroups)return null;let a=await _f(e.userGroups,r?.groups),n=x.db.getProdAppID(t);return e.roles?.[n]?e.roles[n]:(a=a.filter(o=>o?.roles?Object.keys(o.roles).includes(n):!1),await Rf(a,t))}async function qx(e){if(!e||!e.userGroups)return e;let t=await Cf(e.userGroups,{enriched:!1}),r=[];for(let n of t)n?.roles&&(r=r.concat(Object.keys(n.roles)));r=[...new Set(r)];for(let n of r)await x.context.doInAppContext(n,async()=>{if(e.roles[n])return;let o=await Rf(t,n);o&&(e.roles[n]=o)});let a=await xf(e,{groups:t});if(a.length&&!e.builder?.global){let n=e.builder?.apps||[];e.builder={apps:n.concat(a)}}return e}async function ha(){return await M.fetch()}async function qt(e){return await M.get(e)}async function Cf(e,t={enriched:!0}){return await M.getBulk(e,t)}async function vf(e){if(await M.getByName(e))throw new wn(e)}async function Ef(e){let t=await M.getGroupUsers(e._id);if(!t.length)return 0;let a=await x.tenancy.getGlobalDB().getMultiple(t.map(o=>o._id));return(await x.userUtils.creatorsInList(a)).filter(o=>o).length}async function dr(e){let t=[],r=!e._id,a=0;if(delete e.users,!e._id)e._id=M.generateUserGroupID(),await vf(e.name),t.push(x.events.group.created(e));else{let o=await M.get(e._id);if(o.name!==e.name&&await vf(e.name),t.push(x.events.group.updated(e)),JSON.stringify(o.roles)!==JSON.stringify(e.roles)){let s=o.users?.length||0,i=0;s>0&&(i=await Ef(o)),Object.values(e.roles).includes("CREATOR")?a=s-i:a=-s,t.push(x.events.group.permissionsEdited(e))}}await Promise.all(t);let n=()=>M.save(e);if(r)return await hs(n);{let o=await n();if(a>0)await bn(0,a);else if(a<0){let s=await Ef(e),i=Math.abs(a)-s;i>0&&await lr(0,i)}return o}}async function Ss(e,t){let r;try{r=await M.get(e)}catch{throw new Error("Group not found")}let a=Object.values(r.roles||{}).includes("CREATOR"),n=()=>{};if(a){let s=x.tenancy.getGlobalDB(),i=await M.getGroupUsers(e),m=(await Promise.all(i.map(S=>s.get(S._id)))).map(S=>({...S,userGroups:S.userGroups.filter(O=>O!==e)})),h=(await x.userUtils.creatorsInList(m)).filter(S=>S).length,g=i.length-h;g&&(n=()=>lr(0,g))}let o=await M.destroy(e,t);return await x.events.group.deleted(r),await ys(),await n(),o}async function ws(e,t){let r=await M.get(e),a=await x.users.bulkGetGlobalUsersById(t),n=[];for(let p of a)p.userGroups||(p.userGroups=[]),p.userGroups.includes(e)||n.push(p);if(!n.length)return n;let o=n.map(p=>({...p,userGroups:[...p?.userGroups||[],e]}));if(await x.users.bulkUpdateGlobalUsers(o),Object.values(r.roles||{}).includes("CREATOR")){let m=(await x.userUtils.creatorsInList(n)).filter(h=>h).length,f=n.length-m;f&&await bn(0,f)}let i=[];for(let p of t)i.push(x.cache.user.invalidateUser(p));return await Promise.all(i),await x.events.group.usersAdded(o.length,r),o}async function Ts(e,t){let r=await M.get(e),a=await x.users.bulkGetGlobalUsersById(t),n=[];for(let i of a){if(!i.userGroups||!i.userGroups.includes(e))continue;let p=i.userGroups.indexOf(e);i.userGroups.splice(p,1),n.push(i)}if(await x.users.bulkUpdateGlobalUsers(n),Object.values(r.roles||{}).includes("CREATOR")){let p=(await x.userUtils.creatorsInList(n)).filter(f=>f).length,m=n.length-p;m&&await lr(0,m)}let s=[];for(let i of t)s.push(x.cache.user.invalidateUser(i));return await Promise.all(s),n.length&&await x.events.group.usersDeleted(n.length,r),n}async function vs(e,t){let r=await qt(e);if(r.roles||(r.roles={}),t.appsToAdd)for(let a of t.appsToAdd)r.roles[a.appId]=a.roleId;if(t.appsToRemove)for(let a of t.appsToRemove)delete r.roles[a.appId];return await dr(r)}async function Dx(e){let t=await ha(),r=[];for(let a of t)!a.roles||!a.roles[e]||(delete a.roles[e],r.push(a));return await M.bulkSave(r)}async function Es(e,t){if(!await Pt())throw new Error("Feature not enabled, please check license");let r=x.db.getProdAppID(t),a=await qt(e);a.builder??={apps:[]},a.builder.apps.includes(t)||(a.builder.apps.push(r),await dr(a))}async function Rs(e,t){if(!await Pt())throw new Error("Feature not enabled, please check license");let r=x.db.getProdAppID(t),a=await qt(e);a.builder?.apps.includes(t)&&(a.builder.apps=a.builder.apps.filter(n=>n!==r),await dr(a))}async function Nx(){if(!await ls()){let e=x.tenancy.getGlobalDB(),r=(await ha()||[]).filter(a=>Object.values(a?.roles||{}).includes("CREATOR"));for(let a of r){let n=await M.getGroupUsers(a._id),s=(await Promise.all(n.map(f=>e.get(f._id)))).map(f=>({...f,userGroups:f.userGroups.filter(h=>h!==a._id)})),p=(await x.userUtils.creatorsInList(s)).filter(f=>f).length,m=n.length-p;await M.save({...a,roles:{}}),m&&await lr(0,m)}}}ya.users.UserDB.init(Ke,j,qe);var Ve=ya.users.UserDB;async function Bx(e,t){if(!await Pt())throw new Error("Feature not enabled, please check license");await ya.users.addAppBuilder(e,t)}async function Mx(e,t){if(!await Pt())throw new Error("Feature not enabled, please check license");await ya.users.removeAppBuilder(e,t)}var En={};w(En,{logs:()=>Us});var Us={};w(Us,{logSearch:()=>Vx,oldestLogDate:()=>Nf,storeLog:()=>Yx});var Df=require("@budibase/types"),vn=require("@budibase/backend-core");var Tn=require("@budibase/types");var Z=require("@budibase/backend-core");var Of=require("@budibase/backend-core");async function Lf(e,t){let r,a=5,n=!1,o,s=!0;for(;a>0;a--)try{s?o=await e():o=await exports.randomDelay(e),n=!0;break}catch(i){r=i}return n||Of.logging.logWarn(`Failed to backoff: ${t}`,r),o}var{SEPARATOR:nt,UNICODE_MAX:Gx,DocumentType:Pf,AutomationViewMode:_s,ViewName:kx,getQueryIndex:Fx}=Z.db,Qx=new Date(0).toISOString(),jx=100,xs=async()=>ja(Tn.ConstantQuotaName.AUTOMATION_LOG_RETENTION_DAYS);function Uf(e,t,{status:r,automationId:a}={},n={}){let o=a?`${a}${nt}`:"",s=r?`${r}${nt}`:"",i;return r&&a?i=`${_s.ALL}${nt}${s}${o}`:r?i=`${_s.STATUS}${nt}${s}`:a?i=`${_s.AUTOMATION}${nt}${o}`:i=`${Pf.AUTOMATION_LOG}${nt}`,{...n,descending:!0,startkey:`${i}${t}${Gx}`,endkey:`${i}${e}`}}function Wx(e,t,r){return`${Pf.AUTOMATION_LOG}${nt}${e}${nt}${r}${nt}${t}`}async function Cs(e,t,r={docs:!0}){let a=Z.context.getProdAppDB();await a.exists()||(a=Z.context.getDevAppDB());let n={status:r.status},o=r?.limit?r.limit:r?.paginate?9+1:void 0,s=Uf(e,t,n,{include_docs:r.docs,limit:o});r?.page&&(s.startkey=r.page);let i=await a.allDocs(s);return Cr(i,{paginate:r?.paginate,pageSize:9})}async function Os(e,t,r={}){let a=Z.context.getProdAppDB();await a.exists()||(a=Z.context.getDevAppDB());let n;try{let o={automationId:r?.automationId,status:r?.status},s=Uf(e,t,o,{include_docs:!0,limit:9+1});r?.page&&(s.startkey=r.page),n=await a.query(Fx(kx.AUTOMATION_LOGS),s)}catch(o){if(o!=null&&(o.name==="not_found"||o.error==="not_found"))return await ap(),Os(e,t,r);throw o}return Cr(n,{paginate:!0,pageSize:9})}async function qf(e,t){let r=Z.context.getProdAppDB(),a=e._id,n=e.name,o=new Date().toISOString(),s=Wx(o,t.status,a),i={...t,automationId:a,status:t.status,automationName:n,createdAt:o,_id:s};return await r.put(i),s}async function Ls(e,{clearing:t}={clearing:!1}){let r=Z.context.getProdAppDB();await Lf(async()=>{let a=await r.get(Z.db.DocumentType.APP_METADATA);for(let n of e){let o=n.split(Z.db.SEPARATOR),s=`${o[o.length-3]}${Z.db.SEPARATOR}${o[o.length-2]}`,i={};a.automationErrors&&(i=a.automationErrors),Array.isArray(i[s])||(i[s]=[]);let p=i[s].indexOf(n);t&&p!==-1?i[s].splice(p,1):i[s].push(n),i[s].length===0&&delete i[s],a.automationErrors=i}await r.put(a),await Z.cache.app.invalidateAppMetadata(a.appId,a)},"Failed to update app metadata with automation log error")}async function $x(){let e=await xs();try{return await Cs(Qx,e,{docs:!1,paginate:!1,limit:jx})}catch{return{data:[],hasNextPage:!1}}}async function Ps(){let e=Z.context.getProdAppDB();try{let t=await $x();if(!t.data||t.data.length===0)return;let r=t.data.map(n=>({_id:n.id,_rev:n.value.rev,_deleted:!0})),a=t.data.filter(n=>{let o=n.id.split(Z.db.SEPARATOR);return o[o.length-1]===Tn.AutomationStatus.ERROR}).map(n=>n.id);await e.bulkDocs(r),a.length&&await Ls(a,{clearing:!0})}catch(t){Z.logging.logAlert(`Failed to cleanup automation log history - Database "${e.name}"`,t)}}var Nf=xs;async function Kx(e,t,r,a){let n,o=new Date().toISOString(),s=await Nf();return(!e||e<s)&&(e=s),r||t?n=await Os(e,o,{automationId:r,status:t,page:a}):n=await Cs(e,o,{status:t,page:a,docs:!0,paginate:!0}),n}async function Vx(e){return await Ps(),await Kx(e.startDate,e.status,e.automationId,e.page)}async function Yx(e,t){if(!vn.db.isProdAppID(vn.context.getAppId()))return;let r=await qf(e,t);t.status===Df.AutomationStatus.ERROR&&await Ls([r]),await Ps()}var Rn={};w(Rn,{checkPluginQuotas:()=>Jx,deletePlugin:()=>zx,storePlugin:()=>Hx});var kf=require("@budibase/types"),z=require("@budibase/backend-core");var Bf=P(require("fs")),Mf=require("path");function Gf(e,t){return Bf.default.readFileSync((0,Mf.join)(e,t),"utf8")}async function Hx(metadata,directory,source){let db=z.tenancy.getGlobalDB(),version=metadata.package.version,name=metadata.package.name,description=metadata.package.description,hash=metadata.schema.hash,bucketPath=z.objectStore.getPluginS3Dir(name),files=await z.objectStore.uploadDirectory(z.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===kf.PluginType.DATASOURCE){let js=Gf(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=z.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=async()=>{let e=await db.put(doc);return await z.events.plugin.imported(doc),{...doc,_rev:e.rev}};return rev?await write():await As(write)}async function zx(e){let t=z.tenancy.getGlobalDB();try{let r=await t.get(e),a=z.objectStore.getPluginS3Dir(r.name);await z.objectStore.deleteFolder(z.objectStore.ObjectStoreBuckets.PLUGINS,a),await t.remove(e,r._rev),await z.events.plugin.deleted(r),await bs()}catch(r){let a=r?.message?r?.message:r;throw new Error(`Failed to delete plugin: ${a}`)}}async function Jx(){let e=z.tenancy.getGlobalDB();try{let r=(await e.allDocs(z.db.getPluginParams())).rows.length;console.log(`Syncing plugin count: ${r}`),await Is(r)}catch(t){z.logging.logAlert("Unable to retrieve plugins for quota check",t)}}var Ye={};w(Ye,{fetch:()=>Zx,fetchValues:()=>eC,isEncryptionKeyAvailable:()=>Xx,isValid:()=>jf,remove:()=>rC,update:()=>tC});var Aa=require("@budibase/types"),Ff=require("@budibase/backend-core");function Xx(){return!!Ff.env.ENCRYPTION_KEY}async function Zx(){let e=await _t.get();return Object.keys(e.variables)}async function eC(e){let r=(await _t.get()).variables,a={};for(let[n,o]of Object.entries(r))switch(e){case Aa.AppEnvironment.DEVELOPMENT:a[n]=o.development;break;case Aa.AppEnvironment.PRODUCTION:default:a[n]=o.production;break}return a}async function Qf(e){if(!(await je.cache.getCachedLicense()).features.includes(Aa.Feature.ENVIRONMENT_VARIABLES))throw new Error("User does not have access to environment variables feature.");let r=await _t.get();r.variables=e(r.variables),await _t.update(r)}async function tC(e,t){if(jf(e))await Qf(a=>(a[e]=t,a));else throw new Error("Variable name has characters that are not allowed")}async function rC(e){await Qf(t=>(delete t[e],t))}function jf(e){return/^[a-zA-Z0-9-_]+$/.test(e)}var At={};w(At,{definitions:()=>fC,download:()=>dC,fetch:()=>lC,write:()=>pC});var xn=require("@budibase/types");var K=require("@budibase/backend-core"),Ne=require("@budibase/types");var Wf=require("memorystream"),$f=new K.sql.Sql(Ne.SqlClient.SQL_LITE);async function aC(e,t,r){let a={operation:Ne.Operation.READ,table:Wt.searchTable(),tables:{},paginate:{limit:r||9,page:t},filters:e,resource:{fields:[]},sort:{timestamp:{direction:Ne.SortOrder.DESCENDING,type:Ne.SortType.STRING}}},n=$f._query(a);if(Array.isArray(n))throw new Error("Cannot execute multiple queries for audit log search");return{sql:n.sql,bindings:n.bindings}}function nC(e){return`${K.DocumentType.AUDIT_LOG}${K.SEPARATOR}${e}${K.SEPARATOR}${K.utils.newid()}`}async function Kf(e){e._id||(e._id=nC(e.timestamp)),e.type||(e.type=Ne.AUDIT_LOG_TYPE);try{let r=await K.context.getAuditLogsDB().put(e);return{...e,_rev:r.rev}}catch(t){K.logging.logAlert("Failed to write audit log",t)}}async function qs(e,t,r){t||(t=1);let a=K.context.getAuditLogsDB();try{let n=9+1,o=await aC(e,t,n),s=Wt.searchTable(),i=$f.convertJsonStringColumns(s,await a.sql(o.sql,o.bindings)),p;i.length>n&&(p=i.pop());let m={rows:i,hasNextPage:!!p};return m.hasNextPage&&(m.bookmark=t+1),m}catch(n){if(n.status===404&&!r?.isRetry)return await oC(),await Vu(),await qs(e,t,{isRetry:!0});throw n}}async function oC(){let e=K.context.getAuditLogsDB(),r=(await e.allDocs(K.db.getDocParams(K.DocumentType.AUDIT_LOG,null,{include_docs:!0}))).rows.map(a=>a.doc).filter(a=>a&&!a.type).map(a=>({...a,type:Ne.AUDIT_LOG_TYPE}));await e.bulkDocs(r)}function Vf(e){let t=K.context.getAuditLogsDB(),r=new Wf,a=t.dump(r,{filter:o=>{let s=o;if(!s._id?.startsWith(K.DocumentType.AUDIT_LOG))return!1;let i=!0,p=(m,f)=>{!m||m.length===0||(i=!!(i&&f&&m.includes(f)))};if(p(e.userIds,s.userId),p(e.appIds,s.appId),p(e.events,s.event),(e.startDate||e.endDate)&&(i=i&&s.timestamp>=e.startDate&&s.timestamp<=e.endDate),e.fullSearch){let m=JSON.stringify(o);i=i&&m.includes(e.fullSearch)}return i}}),n=new Wf;return r.on("data",o=>{let s=JSON.parse(Buffer.from(o).toString());if(Array.isArray(s.docs)){let i="";for(let p of s.docs)i+=JSON.stringify(p)+`
38
+ `;n.write(i)}}),r.on("end",()=>{n.end()}),{promise:a,stream:n}}var le=require("@budibase/backend-core");var _n=require("@budibase/types"),ba=require("@budibase/string-templates"),Ia=require("@budibase/backend-core"),iC=Ia.constants.MIN_VALID_DATE.toISOString(),uC=Ia.constants.MAX_VALID_DATE.toISOString();function Ds(e){return(e.startDate||e.endDate)&&(e.startDate=e.startDate||iC,e.endDate=e.endDate||uC),e}async function Yf(e){Array.isArray(e.appIds)&&(e.appIds=e.appIds.map(a=>Ia.db.getProdAppID(a)));let t={};function r(a,n){n?.length&&(t.oneOf={...t.oneOf,[a]:n})}return 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=Ds(e),t.range={timestamp:{high:e.endDate,low:e.startDate}}),Object.keys(t).length===0&&(t.notEmpty={event:!0}),t}function Ns(e,t,r){let a={_id:e,status:_n.AuditLogResourceStatus.DELETED};switch(t){case"app":a.name=r?.appName;break;case"user":a.email=r?.email;break}return a}function Bs(e){let t=(0,ba.findHBSBlocks)(e);for(let r of t){let a=` "${r}"`;e=e.replace(e.includes(a)?a:` ${r}`,""),e=(0,ba.processStringSync)(e,{})}return e}function Hf(e,t){let r=_n.AuditedEventFriendlyName[e];if(!r)throw new Error("No friendly name found.");let a=(0,ba.processStringSync)(r,t);return a.includes('""')&&(a=Bs(r)),a}async function pC(e,t,r){if(!await gn()||!le.utils.isAudited(e))return;let a=Hf(e,t),n=new Date;r?.timestamp&&(n=new Date(r.timestamp));let o={timestamp:n.toISOString(),event:e,name:a,userId:r?.userId||xn.AuditLogSystemUser,metadata:{...t,...r?.hostInfo}},s={};try{if(r?.appId){o.appId=le.db.getProdAppID(r.appId);let i=await le.cache.app.getAppMetadata(r.appId);"name"in i&&(s.appName=i.name)}if(r?.userId){let i=await le.users.getById(r?.userId);s.email=i.email}}catch(i){le.logging.logAlert("Failed to retrieve fallback information for audit log",i)}return o.fallback=s,await Kf(o)}async function cC(e){let t=e.map(i=>i.userId),a=e.filter(i=>i.appId).map(i=>le.db.getDevAppID(i.appId)),n=await le.users.bulkGetGlobalUsersById([...new Set(t)],{cleanup:!0}),o=await le.db.getAppsByIDs([...new Set(a)]),s=[];for(let i of e){let p=n.find(h=>h?._id===i.userId),m=o.find(h=>le.db.isSameAppID(h?.appId,i.appId)),f={event:i.event,timestamp:i.timestamp,name:i.name,metadata:i.metadata,user:p||Ns(i.userId,"user",i.fallback)};i.appId&&(f.app=m||Ns(i.appId,"app",i.fallback)),s.push(f)}return s}async function lC(e){if(!await gn())throw new Error("Audit logs not available - license required.");let t=await Yf(e);if(typeof e.bookmark=="string")throw new Error("String based bookmark not supported.");let r=await qs(t,e.bookmark);return{hasNextPage:r.hasNextPage,bookmark:r.bookmark,data:await cC(r.rows)}}function dC(e){return e=Ds(e),Vf(e)}function fC(){let e=Object.entries(xn.AuditedEventFriendlyName).filter(r=>r[1]!=null),t={};for(let r of e)t[r[0]]=Bs(r[1]);return t}var Cn={};w(Cn,{applications:()=>Fs,roles:()=>Gs,users:()=>Ms});var Ms={};w(Ms,{roleCheck:()=>gC});function mC(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}async function gC(e,t){return await tt()||mC(e,t),e}var Gs={};w(Gs,{assign:()=>hC,unAssign:()=>yC});var Sa=require("@budibase/backend-core");async function hC(e,t){if(!await tt())throw new Error("Unable to assign roles - license required.");let r=await Ve.bulkGet(e);for(let a of r){if(t.role&&t.role.roleId){let n=Sa.db.getProdAppID(t.role.appId);a.roles[n]=t.role.roleId}if(t.appBuilder){let n=Sa.db.getProdAppID(t.appBuilder.appId),o=a.builder?.apps||[];a.builder={apps:o.concat([n])}}t.builder&&(a.builder={global:!0}),t.admin&&(a.admin={global:!0}),a.roles}await Ve.bulkUpdate(r)}async function yC(e,t){if(!await tt())throw new Error("Unable to un-assign roles - license required.");let r=await Ve.bulkGet(e);for(let a of r){if(t.role){let n=Sa.db.getProdAppID(t.role?.appId);a.roles[n]===t.role.roleId&&delete a.roles[n]}if(t.appBuilder&&a.builder?.apps){let n=Sa.db.getProdAppID(t.appBuilder.appId);a.builder.apps=a.builder.apps.filter(o=>o!==n)}t.builder&&a.builder&&delete a.builder,t.admin&&a.admin&&delete a.admin}}var Fs={};w(Fs,{buildExportFn:()=>bC,buildImportFn:()=>AC});var ks=require("@budibase/backend-core");function AC(e){return async(t,r)=>{await tt()||t.throw(403,"Endpoint unavailable, license required."),t.request.files?.appExport||t.throw(400,"Must provide app export file for import."),await ks.context.doInAppContext(t.params.appId,async()=>{await e(t),t.body=void 0,t.status=204,await r()})}}function bC(e){return async(t,r)=>{await tt()||t.throw(403,"Endpoint unavailable, license required.");let{encryptPassword:a,excludeRows:n}=t.request.body;await ks.context.doInAppContext(t.params.appId,async()=>{t.request.body={encryptPassword:a,excludeRows:n},t.query.appId=t.params.appId,await e(t),await r()})}}var He=require("@budibase/backend-core"),ue=require("@budibase/types");var Qs=require("@budibase/backend-core"),zf;function Jf(){zf=new Qs.queue.BudibaseQueue(Qs.queue.JobQueue.APP_BACKUP,{maxStalledCount:3,jobOptions:{attempts:3,removeOnFail:!0,removeOnComplete:!0}})}function Dt(){return zf}var Xf=require("path"),Zf=P(require("fs"));async function Ws(e,t={}){return ve.storeAppBackupMetadata(e,t)}function em(e){let t=new Date().toISOString();switch(e){case ue.AppBackupStatus.COMPLETE:case ue.AppBackupStatus.FAILED:return{timestamp:t,finishedAt:t};case ue.AppBackupStatus.STARTED:return{timestamp:t,startedAt:t};case ue.AppBackupStatus.PENDING:return{timestamp:t,createdAt:t}}}async function IC(e,t,r,a){let n=await On(e);return await ve.storeAppBackupMetadata({...n,...em(t),contents:r,status:t,type:ue.AppBackupType.BACKUP},{filename:a,docId:e})}async function SC(e,t,r){let a=await On(e);return await ve.storeAppBackupMetadata({...a,...em(r),status:r,type:ue.AppBackupType.RESTORE,trigger:ue.AppBackupTrigger.MANUAL},{docId:e,docRev:t})}async function On(e){return ve.getAppBackupMetadata(e)}async function wC(e,t){return ve.updateAppBackupMetadata(e,t)}async function TC(e){let t=await ve.getAppBackupMetadata(e);return t.filename&&await He.objectStore.deleteFile(He.objectStore.ObjectStoreBuckets.BACKUPS,t.filename),ve.deleteAppBackupMetadata(e)}async function vC(e,t){return ve.fetchAppBackups(e,t)}async function tm(e){let t=await ve.getAppBackupMetadata(e);if(!t.filename)throw new Error("Backup incomplete - cannot download.");let r=await He.objectStore.getReadStream(He.objectStore.ObjectStoreBuckets.BACKUPS,t.filename);return{metadata:t,stream:r}}async function EC(e){let{stream:t}=await tm(e),r=(0,Xf.join)(He.objectStore.budibaseTempDir(),He.utils.newid()),a=Zf.default.createWriteStream(r);return new Promise((n,o)=>{t.on("error",o),a.on("error",o),t.pipe(a).on("close",()=>n(r))})}async function RC(e,t,r={}){let a;try{a=await Ws({appId:e,trigger:t,timestamp:new Date().toISOString(),status:ue.AppBackupStatus.PENDING,type:ue.AppBackupType.BACKUP,...r})}catch(n){if(n.status===409)return;throw n}return await Dt().add({docId:a.id,docRev:a.rev,appId:e,export:{trigger:t,...r}}),await He.events.backup.appBackupTriggered(e,a.id,ue.AppBackupType.BACKUP,t,r?.name),a.id}async function _C(e,t,r,a){let n=await On(t),o;try{o=await Ws({appId:e,timestamp:new Date().toISOString(),status:ue.AppBackupStatus.PENDING,type:ue.AppBackupType.RESTORE,createdBy:a})}catch(s){if(s?.status===409)return;throw s}return await Dt().add({appId:e,docId:o.id,docRev:o.rev,import:{nameForBackup:r,backupId:t,createdBy:a}}),{restoreId:o.id,metadata:n}}var xC={isEnabled:ps,triggerAppRestore:ye(_C),triggerAppBackup:ye(RC),getBackupDownloadStream:ye(tm),downloadAppBackup:ye(EC),fetchAppBackups:ye(vC),storeAppBackupMetadata:ye(Ws),updateBackupStatus:ye(IC),updateRestoreStatus:ye(SC),getAppBackup:ye(On),updateAppBackup:ye(wC),deleteAppBackup:ye(TC)},ot=xC;var Ks={};w(Ks,{init:()=>$s});var J=require("@budibase/backend-core");var Be=require("@budibase/types");var fr=P(require("fs"));async function $s(e){Dt().process(async t=>{let r=t.data;try{if(r.export)return LC(t,e);if(r.import)return OC(t,e)}catch(a){J.logging.logAlert(`Failed to perform backup for app ID: ${r.appId}`,a)}})}async function CC(e){await J.db.getDB(e,{skip_setup:!0}).destroy()}async function rm(e,t,r,a){let n=J.db.getDevAppID(r),o=J.db.getProdAppID(r),s=new Date().toISOString(),i=async(p,m)=>{a?.doc?await ot.updateBackupStatus(a.doc.id,p,m?.contents,m?.filename):await ot.storeAppBackupMetadata({appId:o,timestamp:s,trigger:e,status:p,name:a?.name,type:Be.AppBackupType.BACKUP,contents:m?.contents,createdBy:a?.createdBy},{filename:m?.filename})};try{let p=await a.processing.exportAppFn(n,{tar:!0}),m=await a.processing.statsFn(n),f=`${o}/backup-${s}.tar.gz`,h=J.objectStore.ObjectStoreBuckets.BACKUPS,g=fr.default.createReadStream(p);await J.objectStore.streamUpload({bucket:h,filename:f,stream:g,extra:{type:"application/gzip",metadata:{name:a?.name,trigger:e,timestamp:s,appId:o}}}),await i(Be.AppBackupStatus.COMPLETE,{filename:f,contents:m}),fr.default.existsSync(p)&&fr.default.rmSync(p)}catch(p){J.logging.logAlert("App backup error",p),await i(Be.AppBackupStatus.FAILED)}}async function OC(e,t){let r=e.data,a=r.appId,n=r.import.backupId,o=r.import.nameForBackup,s=r.import.createdBy,i=J.tenancy.getTenantIDFromAppID(a);return J.tenancy.doInTenant(i,async()=>{let p=J.db.getDevAppID(a),{rev:m}=await ot.updateRestoreStatus(r.docId,r.docRev,Be.AppBackupStatus.STARTED);await rm(Be.AppBackupTrigger.RESTORING,i,a,{processing:t,createdBy:s,name:o});let f=await ot.downloadAppBackup(n);await CC(p);let h=Be.AppBackupStatus.COMPLETE;try{await t.importAppFn(p,J.db.getDB(p),{file:{type:"application/gzip",path:f},key:f})}catch(g){J.logging.logAlert("App restore error",g),h=Be.AppBackupStatus.FAILED}await ot.updateRestoreStatus(r.docId,m,h),fr.default.existsSync(f)&&fr.default.rmSync(f,{force:!0})})}async function LC(e,t){let r=e.data,a=r.appId,n=r.export.trigger,o=r.export.name,s=J.tenancy.getTenantIDFromAppID(a);await J.tenancy.doInTenant(s,async()=>{try{let{rev:i}=await ot.updateBackupStatus(r.docId,Be.AppBackupStatus.STARTED);return rm(n,s,a,{processing:t,doc:{id:r.docId,rev:i},name:o})}catch(i){J.logging.logAlert("App backup error",i)}})}var PC=async e=>{Jf(),await $s(e.processing)},Re={...ot,processing:Ks,init:PC,getBackupQueue:Dt};var am=async e=>{e.backups&&await Re.init(e.backups)};var fe={};w(fe,{create:()=>EM,find:()=>vM,get:()=>TM,remove:()=>_M,update:()=>RM});var EA=P(ki()),st=require("@budibase/backend-core");var RA=require("@budibase/types");async function TM(e){let t=st.tenancy.getGlobalDB(),r=new st.db.QueryBuilder(t.name,RA.SearchIndex.USER);r.setIndexBuilder(st.db.searchIndexes.createUserIndex),r.setLimit(e.pageSize),r.addEqual("scimInfo.isSync",!0);for(let[n,o]of Object.entries(e.filters?.equal??{}))r.addEqual(n,o);r.setSort("_id"),r.setSkip(e.skip);let a=await r.run();return{users:a.rows,total:a.totalRows}}async function vM(e){return await st.users.getById(e)}async function EM(e){let t=await Ve.getUserByEmail(e.email);if(t){if(t.scimInfo?.isSync)throw new st.HTTPError("User is already synched",409);e={...t,scimInfo:(0,EA.default)(t.scimInfo,e.scimInfo),password:void 0,firstName:e.firstName,lastName:e.lastName,updatedAt:e.updatedAt}}return await Ve.save(e,{requirePassword:!1})}async function RM(e,t){return await Ve.save(e,{requirePassword:!1,allowChangingEmail:t?.allowChangingEmail})}async function _M(e){return await Ve.destroy(e)}var br={};w(br,{create:()=>xM});var _A=P(ki());var xA=require("@budibase/backend-core");async function xM(e){let t=await go(e.name),r;if(!t)r=(await j.save(e)).id;else{if(t.scimInfo?.isSync)throw new xA.HTTPError("Group is already synched",409);r=t._id,t.users&&(await j.removeUsers(r,t.users.map(n=>n._id)),delete t.users),t.scimInfo=(0,_A.default)(t.scimInfo,e.scimInfo),await j.save(t)}return await j.get(r)}var Bt={};w(Bt,{logRequest:()=>CM,logResponse:()=>OM});var Fi=require("@budibase/backend-core");async function CM(e){Fi.logging.logWarn("SCIM request log",e)}async function OM(e){Fi.logging.logWarn("SCIM response error",e)}var Vi={};w(Vi,{doInScimContext:()=>ji,feature:()=>W,internalGroupOnly:()=>$n,licenseAuth:()=>LA,licensing:()=>CA,requireSCIM:()=>Wi,scimGroupOnly:()=>Ea,scimUserOnly:()=>va});var bt=require("@budibase/backend-core");var jn=require("@budibase/types"),LM=(e={checkUsersLimit:!0})=>async(t,r)=>{if((e.licensingCheck?e.licensingCheck:()=>!!t.user)(t)){if(bt.env.SELF_HOSTED&&bt.env.DEFAULT_LICENSE)return t.user.license=yo,r();t.user.license=await je.cache.getCachedLicense(t,{populateLicense:e.populateLicense,populateFreeLicense:e.populateFreeLicense}),e.checkUsersLimit&&(bt.utils.isServingApp(t)||bt.utils.isServingBuilder(t)||bt.utils.isServingBuilderPreview(t)||bt.utils.isPublicApiRequest(t))&&await Ke.usageLimitIsExceeded(jn.StaticQuotaName.USERS,jn.QuotaUsageType.STATIC)}return r()},CA=LM;var W={};w(W,{requireFeature:()=>PM,requireFeatures:()=>UM});var PM=e=>async(t,r)=>{await mn(e),await r()},UM=(...e)=>async(t,r)=>{await us(e),await r()};var Wn=require("@budibase/backend-core");var ji=async(e,t)=>(Wn.env.DISABLE_SCIM_CALLS||await Bt.logRequest({...e.request.toJSON(),body:e.request.body}),await Wn.context.doInScimContext(async()=>{let r=await t();return await Bt.logResponse({...e.response.toJSON(),body:e.response.body}),r}));var Wi=async(e,t)=>{await ds(),await t()};var OA=require("@budibase/backend-core");var va=e=>$i(OA.users.getById,e,!0),Ea=e=>$i(M.get,e,!0),$n=e=>$i(M.get,e,!1);function $i(e,t,r){return async(a,n)=>{let o=a.params[t];return typeof o!="string"&&a.throw(404),!!(await e(o)).scimInfo?.isSync!==r&&a.throw(404),n()}}var Ra=require("@budibase/backend-core");var Ki=require("dd-trace");async function LA(e,t){await Ki.tracer.trace("licenseAuth",async r=>{let a=e.request.headers[Ra.constants.Header.LICENSE_KEY];Array.isArray(a)&&(a=a[0]),r.addTags({licenseKey:a}),a||e.throw(403,"License key not provided");let n=await ns(a);n||(r.addTags({licenseFound:!1}),e.throw(403,"License not found or invalid")),n.tenantId||e.throw(403,"License does not have a tenant ID"),Ki.tracer.setUser({id:"anonymous",tenantId:n.tenantId}),await Ra.context.doInSelfHostTenantUsingCloud(n.tenantId,async()=>{await Ra.context.doInLicenseContext(n,async()=>{await t()})})})}var ru={};w(ru,{appBackups:()=>yb,auditLogs:()=>sb,environmentVariables:()=>XA,groups:()=>jA,scim:()=>Vb,users:()=>Xb});async function PA(e){let t=e.request.body;if(t.name=t.name.trim(),delete t.roles,t._id){let a=await qt(t._id);t.roles=a.roles,t.scimInfo=a.scimInfo}let r=await dr(t);e.body={_id:r.id,_rev:r.rev}}async function UA(e){let t=e.params.groupId,r=e.request.body.add,a=e.request.body.remove;(r&&!Array.isArray(r)||a&&!Array.isArray(a))&&e.throw(400,"Must supply a list of users to add or to remove");let n,o;r&&(n=await ws(t,r)),a&&(o=await Ts(t,a)),e.body={added:n,removed:o}}async function qA(e){let t=e.params.groupId,r=e.request.body.add,a=e.request.body.remove;(r&&!Array.isArray(r)||a&&!Array.isArray(a))&&e.throw(400,"Must supply a list of objects, with appId and roleId to add or remove"),e.body=await vs(t,{appsToAdd:r,appsToRemove:a})}async function DA(e){e.body={data:await ha()}}async function NA(e){let{groupId:t,rev:r}=e.params;try{await Ss(t,r),e.body={message:"Group deleted successfully"}}catch(a){e.throw(a.status,a)}}async function BA(e){try{e.body=await qt(e.params.groupId)}catch(t){e.throw(t.status,t)}}async function MA(e){let{pageSize:t=10,bookmark:r,emailSearch:a}=e.request.query,n=e.params.groupId,o={limit:t+1},s=await Fa(n,{...o,emailSearch:a,bookmark:r}),i=a?s[t]?.email:s[t]?._id,p=!!i;e.body={users:s.slice(0,t),bookmark:i,hasNextPage:p}}async function GA(e){let{groupId:t,appId:r}=e.params;await Es(t,r),e.body={message:"Group app builder access updated."}}async function kA(e){let{groupId:t,appId:r}=e.params;await Rs(t,r),e.body={message:"group app builder access removed."}}var FA=P(require("@koa/router")),be=P(require("joi"));var _e=require("@budibase/types"),ze=require("@budibase/backend-core"),QA=new FA.default;function DM(){return ze.auth.joiValidator.body(be.default.object({_id:be.default.string().optional(),_rev:be.default.string().optional(),color:be.default.string().required(),icon:be.default.string().required(),name:be.default.string().trim().required().max(50),role:be.default.string().optional(),users:be.default.array().optional(),apps:be.default.array().optional(),roles:be.default.object().optional(),createdAt:be.default.string().optional(),updatedAt:be.default.string().optional()}).required())}QA.post("/api/global/groups",ze.auth.adminOnly,W.requireFeature(_e.Feature.USER_GROUPS),DM(),PA).get("/api/global/groups",W.requireFeature(_e.Feature.USER_GROUPS),DA).delete("/api/global/groups/:groupId/:rev",W.requireFeature(_e.Feature.USER_GROUPS),ze.auth.adminOnly,$n("groupId"),NA).get("/api/global/groups/:groupId",W.requireFeature(_e.Feature.USER_GROUPS),ze.auth.builderOrAdmin,BA).get("/api/global/groups/:groupId/users",W.requireFeature(_e.Feature.USER_GROUPS),ze.auth.builderOrAdmin,MA).post("/api/global/groups/:groupId/users",ze.auth.adminOnly,W.requireFeature(_e.Feature.USER_GROUPS),$n("groupId"),UA).post("/api/global/groups/:groupId/apps",ze.auth.builderOrAdmin,W.requireFeature(_e.Feature.USER_GROUPS),qA).post("/api/global/groups/:groupId/app/:appId/builder",ze.auth.builderOrAdmin,W.requireFeatures(_e.Feature.USER_GROUPS,_e.Feature.APP_BUILDERS),GA).delete("/api/global/groups/:groupId/app/:appId/builder",ze.auth.builderOrAdmin,W.requireFeatures(_e.Feature.USER_GROUPS,_e.Feature.APP_BUILDERS),kA);var jA=QA;var Yi=require("@budibase/types");var Hi=require("@budibase/backend-core");async function WA(e){e.body={encryptionKeyAvailable:Ye.isEncryptionKeyAvailable()}}async function $A(e){e.body={variables:await Ye.fetch()}}async function KA(e){let{name:t,production:r,development:a}=e.request.body;await Ye.update(t,{production:r,development:a});let n=[Yi.AppEnvironment.PRODUCTION];r!==a&&n.push(Yi.AppEnvironment.DEVELOPMENT),await Hi.events.environmentVariable.created(t,n),e.body={message:`Environment variable "${t}" created.`}}async function VA(e){let{production:t,development:r}=e.request.body,a=e.params.varName;await Ye.update(a,{production:t,development:r}),e.body={message:`Environment variable "${a}" updated.`}}async function YA(e){let t=e.params.varName;await Ye.remove(t),await Hi.events.environmentVariable.deleted(t),e.body={message:`Environment variable "${t}" deleted.`}}var Mt=require("@budibase/backend-core"),zA=P(require("@koa/router")),_a=P(require("joi")),JA=new zA.default;function HA(){return Mt.auth.joiValidator.body(_a.default.object({name:_a.default.string().optional(),production:_a.default.string().required(),development:_a.default.string().required()}))}JA.get("/api/env/variables/status",Mt.auth.builderOrAdmin,WA).get("/api/env/variables",Mt.auth.builderOrAdmin,$A).post("/api/env/variables",Mt.auth.builderOrAdmin,HA(),KA).patch("/api/env/variables/:varName",Mt.auth.builderOrAdmin,HA(),VA).delete("/api/env/variables/:varName",Mt.auth.builderOrAdmin,YA);var XA=JA;var zi=require("@budibase/backend-core");async function ZA(e){let t=e.request.body,r=await At.fetch(t);await zi.events.auditLog.filtered(t),e.body=r}async function eb(e){let t=e.request.body,{stream:r}=At.download(t);await zi.events.auditLog.downloaded(t),e.attachment(`audit-logs-${Date.now()}.log`),e.body=r}async function tb(e){e.body={events:At.definitions()}}var ab=require("@budibase/types"),Gt=require("@budibase/backend-core"),nb=P(require("@koa/router")),xe=P(require("joi"));function rb(){return Gt.auth.joiValidator.body(xe.default.object({userIds:xe.default.array().items(xe.default.string()).optional(),appIds:xe.default.array().items(xe.default.string()).optional(),events:xe.default.array().items(xe.default.string().valid(...Object.values(ab.Event))).optional(),startDate:xe.default.string().optional().allow(""),endDate:xe.default.string().optional().allow(""),fullSearch:xe.default.string().optional().allow(""),bookmark:xe.default.number()}))}var ob=new nb.default;ob.post("/api/global/auditlogs/search",Gt.auth.adminOnly,rb(),ZA).get("/api/global/auditlogs/download",Gt.auth.adminOnly,Gt.middleware.querystringToBody,rb(),eb).get("/api/global/auditlogs/definitions",Gt.auth.adminOnly,tb);var sb=ob;var Ji=require("@budibase/types");var ib=require("@budibase/backend-core");async function Ir(e,t){await Vt.appExists(t)||e.throw(400,`Provided app ID: ${t} - is invalid.`)}async function ub(e){let t=e.params.appId;await Ir(e,t);let r=e.request.body,a=e.user?._id,n=await Re.triggerAppBackup(t,Ji.AppBackupTrigger.MANUAL,{name:r.name,createdBy:a});n||e.throw(500,"Unable to start backup."),e.body={backupId:n,message:"Backup triggered - process starting."}}async function pb(e){let t=e.params.appId;await Ir(e,t);let r=e.params.backupId,a=e.request.body.name,n=await Re.triggerAppRestore(t,r,a,e.user?._id);n||e.throw(500,"Unable to start restore."),await ib.events.backup.appBackupRestored(n.metadata),e.body={restoredId:n?.restoreId,message:"Restore triggered - process starting."}}async function cb(e){let t=e.params.appId;await Ir(e,t);let r=e.params.backupId;await Re.deleteAppBackup(r),e.body={message:"Backup deleted successfully."}}async function lb(e){let t=e.params.appId;await Ir(e,t);let r=e.request.body;r?.trigger&&(r.trigger=r.trigger.toLowerCase(),Object.values(Ji.AppBackupTrigger).includes(r.trigger)||e.throw(400,"Provided trigger is not a valid option.")),e.body=await Re.fetchAppBackups(t,{paginate:!0,...r})}async function fb(e){let t=e.params.appId;await Ir(e,t);let r=e.params.backupId,a=e.request.body;e.body=await Re.updateAppBackup(r,a.name)}async function mb(e){let t=e.params.appId;await Ir(e,t);let r=e.params.backupId,{metadata:a,stream:n}=await Re.getBackupDownloadStream(r);e.attachment(`backup-${a.timestamp}.tar.gz`),e.body=n}var gb=P(require("@koa/router")),kt=P(require("joi")),Kn=require("@budibase/types"),It=require("@budibase/backend-core"),hb=new gb.default;function GM(){return It.auth.joiValidator.body(kt.default.object({trigger:kt.default.string().valid(...Object.values(Kn.AppBackupTrigger)),type:kt.default.string().valid(...Object.values(Kn.AppBackupType)),startDate:kt.default.date(),endDate:kt.default.date(),page:kt.default.string()}))}hb.post("/api/apps/:appId/backups",It.auth.builderOrAdmin,ub).post("/api/apps/:appId/backups/search",It.auth.builderOrAdmin,GM(),lb).get("/api/apps/:appId/backups/:backupId/file",It.auth.builderOrAdmin,mb).patch("/api/apps/:appId/backups/:backupId",It.auth.builderOrAdmin,fb).delete("/api/apps/:appId/backups/:backupId",It.auth.builderOrAdmin,cb).post("/api/apps/:appId/backups/:backupId/import",It.auth.builderOrAdmin,pb);var yb=hb;var Kb=P(require("@koa/router"));var Vn=require("scim-patch");var bb=require("@budibase/backend-core");function Ab(e,t){let r=e.request.query[t];if(r!==void 0)return+r}var Ib=async e=>{let t=Ab(e,"pageSize")??20,r=Ab(e,"startIndex"),a;e.request.query.filter&&(a=V.user.userFilters(e.request.query.filter));let n=await fe.get({pageSize:t,skip:r,filters:a});e.body={schemas:["urn:ietf:params:scim:api:messages:2.0:ListResponse"],totalResults:n.total,Resources:n.users.map(V.user.toScimUserResponse),startIndex:(r||0)+1,itemsPerPage:t}},Sb=async e=>{let{id:t}=e.params;typeof t!="string"&&e.throw(404);let r=await fe.find(t);e.body=V.user.toScimUserResponse(r)},wb=async e=>{let t=V.user.fromScimUser(e.request.body);try{let r=await fe.create(t);e.body=V.user.toScimUserResponse(r)}catch(r){throw r instanceof bb.EmailUnavailableError&&e.throw(409,"Email already in use"),r}};function kM(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}var Tb=async e=>{let t=await fe.find(e.params.id);t||e.throw(404);let r=V.user.toScimUserResponse(t),a=e.request.body;try{(0,Vn.patchBodyValidation)(a)}catch{}if(kM(a))return Xi(e);let n;try{n=(0,Vn.scimPatch)(r,a.Operations)}catch{}n||e.throw(500);let o=V.user.fromScimUser(n);await fe.update(o,{allowChangingEmail:!0}),e.body=V.user.toScimUserResponse(o)},Xi=async e=>{let{id:t}=e.params;typeof t!="string"&&e.throw(404),await fe.remove(t),e.status=204};var Mb=P(Bb()),Gb=require("@budibase/shared-core"),Yn=require("scim-patch");var Hn=require("scim2-parse-filter");function kb(e,t){for(let r of t.split(","))delete e[r]}var Fb=async e=>{let r=(await j.fetch()).filter(o=>o.scimInfo?.isSync).map(V.group.toScimGroupResponse),{filter:a,excludedAttributes:n}=e.request.query;if(a){let o=(0,Hn.filter)((0,Hn.parse)(a));r=r.filter(o)}n&&r.forEach(o=>{kb(o,n)}),e.body={schemas:["urn:ietf:params:scim:api:messages:2.0:ListResponse"],totalResults:r.length,Resources:r,startIndex:1,itemsPerPage:r.length}},Qb=async e=>{let t=V.group.fromScimGroup(e.request.body),r=await br.create(t);e.body=V.group.toScimGroupResponse(r)},jb=async e=>{let{id:t}=e.params,r=await j.get(t),a=V.group.toScimGroupResponse(r),{excludedAttributes:n}=e.request.query;n&&kb(a,n),e.body=a},Wb=async e=>{let{id:t}=e.params,r=await j.get(t);await j.remove(t,r._rev),e.status=204},$b=async e=>{let{id:t}=e.params,r=await j.get(t),a=V.group.toScimGroupResponse(r),n=e.request.body;try{(0,Yn.patchBodyValidation)(n)}catch{e.throw(400)}let{true:o,false:s}=(0,Mb.default)(n.Operations,i=>i.path==="members");if(s?.length){let i=(0,Yn.scimPatch)(a,s);i||e.throw(500);let p={...V.group.fromScimGroup(i),_rev:r._rev};await j.save(p)}if(o?.length){let i=[],p=[];for(let{op:m,value:f}of o)switch(m){case"add":case"Add":for(let h of f)i.push(await fe.find(h.value));break;case"remove":case"Remove":for(let h of f)p.push(await fe.find(h.value));break;case"replace":case"Replace":throw new Error("Replacing members is not allowed");default:Gb.utils.unreachable(m)}i.length&&await j.addUsers(t,i.map(m=>m._id)),p.length&&await j.removeUsers(t,p.map(m=>m._id))}e.body=V.group.toScimGroupResponse(await j.get(t))};var xa=require("@budibase/types"),Ie=new Kb.default({prefix:"/api/global/scim/v2"});Ie.use(Wi);Ie.use(ji);Ie.get("/users",Ib);Ie.get("/users/:id",va("id"),Sb);Ie.post("/users",wb);Ie.patch("/users/:id",va("id"),Tb);Ie.delete("/users/:id",va("id"),Xi);Ie.get("/groups",Fb);Ie.post("/groups",W.requireFeature(xa.Feature.USER_GROUPS),Qb);Ie.get("/groups/:id",W.requireFeature(xa.Feature.USER_GROUPS),Ea("id"),jb);Ie.delete("/groups/:id",W.requireFeature(xa.Feature.USER_GROUPS),Ea("id"),Wb);Ie.patch("/groups/:id",W.requireFeature(xa.Feature.USER_GROUPS),Ea("id"),$b);var Vb=Ie;var zb=P(require("@koa/router"));var Zi=require("@budibase/backend-core");async function Yb(e){let{userId:t,appId:r}=e.params,a=await at.db.getUser(t);if(Zi.users.isGlobalBuilder(a)){e.body={message:"User already admin - no permissions updated."};return}await at.addAppBuilder(a,r),e.body={message:`User "${a.email}" app builder access updated.`}}async function Hb(e){let{userId:t,appId:r}=e.params,a=await at.db.getUser(t);if(Zi.users.isGlobalBuilder(a)){e.body={message:"User already admin - no permissions removed."};return}await at.removeAppBuilder(a,r),e.body={message:`User "${a.email}" app builder access removed.`}}var eu=require("@budibase/types"),tu=require("@budibase/backend-core"),Jb=new zb.default;Jb.post("/api/global/users/:userId/app/:appId/builder",tu.auth.builderOrAdmin,W.requireFeatures(eu.Feature.APP_BUILDERS),Yb).delete("/api/global/users/:userId/app/:appId/builder",tu.auth.builderOrAdmin,W.requireFeatures(eu.Feature.APP_BUILDERS),Hb);var Xb=Jb;var V={};w(V,{group:()=>nu,user:()=>au});var au={};w(au,{fromScimUser:()=>gG,toScimUserResponse:()=>dG,userFilters:()=>hG});var zn=require("@budibase/types"),Zb=require("scim2-parse-filter"),eI=require("@budibase/backend-core"),tI=require("@budibase/shared-core"),{unreachable:lG}=tI.utils,dG=e=>{let{isSync:t,roles:r,...a}=e.scimInfo||{},n={...a,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===zn.UserStatus.ACTIVE};return(e.firstName||e.lastName)&&(n.name={formatted:[e.firstName,e.lastName].filter(o=>o).join(" "),familyName:e.lastName,givenName:e.firstName}),n},fG=e=>!!e?.id;function mG(e){if(eI.utils.validEmail(e.userName))return e.userName;if(e.emails)return e.emails.find(t=>t.primary)?.value||e.emails[0]?.value}var gG=e=>{let t=fG(e)?e:void 0,r=mG(e);if(!r)throw new Error("Email is required");let a;switch(e.active){case"True":case"true":case!0:a=!0;break;case"False":case"false":case!1:a=!1;break;default:lG(e.active)}let n,o;return e.name?.givenName?(n=e.name?.givenName,o=e.name?.familyName):n=e.displayName,{tenantId:"",_id:t?.id,userId:t?.id,email:r,firstName:n,lastName:o,scimInfo:{...e,isSync:!0},roles:{},status:a?zn.UserStatus.ACTIVE:zn.UserStatus.INACTIVE,createdAt:t?.meta.created.getTime(),updatedAt:t?.meta.lastModified.toISOString()}},hG=e=>{let t={equal:{}},r=(0,Zb.parse)(e);function a(n){switch(n.op){case"eq":{let o=n.attrPath,s;switch(o){case"emails.value":s="email";break;default:s=`scimInfo.${o}`}t.equal[s]=n.compValue;break}case"and":for(let o of n.filters)a(o);break;default:console.warn("Filter not handled",{filter:n})}}return a(r),t};var nu={};w(nu,{fromScimGroup:()=>bG,toScimGroupResponse:()=>yG});var yG=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}))}),AG=e=>!!e?.id,bG=e=>{let t=AG(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()}};var xu={};w(xu,{LLM:()=>Je,LLMRequest:()=>$,TableGeneration:()=>_u,agentHistoryTitleSystemPrompt:()=>OG,agentSystemPrompt:()=>CG,aiColumnSchemas:()=>Eu,aiTableResponseToTableSchema:()=>Su,appendAIColumns:()=>wu,classifyText:()=>iu,cleanData:()=>uu,extractFileData:()=>EG,generateAIColumns:()=>bu,generateCode:()=>xG,generateCronExpression:()=>pu,generateData:()=>Iu,generateJs:()=>fu,generateSQL:()=>_G,generateTables:()=>Au,generationStructure:()=>vu,getLLM:()=>La,getLLMConfig:()=>yu,getLLMOrThrow:()=>lI,normalizeContentType:()=>ou,parseResponseFormat:()=>Xn,sanitiseToolName:()=>IG,searchWeb:()=>du,sentimentAnalysis:()=>lu,summarizeText:()=>Jn,tableDataStructuredOutput:()=>Ru,translate:()=>cu});var Ca=require("@budibase/types");function IG(e){if(e.length>64)throw new Error("Tool name must be under 64 characters long");return e.replace(/[^a-zA-Z0-9_-]/g,"_")}function ou(e){return e?e.includes("/")?e:{[Ca.SupportedFileType.PDF]:"application/pdf",[Ca.SupportedFileType.JPG]:"image/jpeg",[Ca.SupportedFileType.JPEG]:"image/jpeg",[Ca.SupportedFileType.PNG]:"image/png"}[e.toLowerCase()]||"application/octet-stream":"application/octet-stream"}var ao=require("@budibase/types");var Xe=require("@budibase/backend-core"),iI=require("@budibase/types");var Zn=P(require("openai"));var St=require("@budibase/types");var rI=require("@budibase/shared-core");var wt=P(require("dd-trace"));function su(e,t){return t.map(r=>e[r]).join(" ")}var Je=class{constructor({model:t,apiKey:r,maxTokens:a}){this._model=t,this._apiKey=r,this._maxTokens=a??parseInt(process.env.BUDIBASE_AI_MAX_PROMPT_TOKENS||"300")}get model(){return this._model}get apiKey(){return this._apiKey}get maxTokens(){return this._maxTokens}async prompt(t){return await wt.default.trace("prompt",async()=>{let r=typeof t=="string"?new $().addUserMessage(t):t,{messages:a,tokensUsed:n}=await wt.default.trace("chatCompletion",()=>this.chatCompletion(r));return!a||a.length===0?{message:"",tokensUsed:n}:{message:a[a.length-1].content||"",tokensUsed:n}})}async chat(t){return await wt.default.trace("chat",async()=>await this.chatCompletion(t))}async*chatStream(t){yield*this.chatCompletionStream(t)}async summarizeText(t){return wt.default.trace("summarizeText",()=>this.prompt(Jn(t)))}async generateCronExpression(t){return wt.default.trace("generateCronExpression",()=>this.prompt(pu(t)))}async operation(t,r){return wt.default.trace("operation",a=>{a.addTags({operation:t.operation,rowId:r.id});let n=this.promptForOperation(t,r);return this.prompt(n)})}promptForOperation(t,r){let{operation:a,column:n,columns:o,language:s,categories:i,prompt:p}=t;switch(a){case St.AIOperationEnum.SUMMARISE_TEXT:return Jn(su(r,o));case St.AIOperationEnum.CLEAN_DATA:return uu(r[n]);case St.AIOperationEnum.TRANSLATE:return cu(r[n],s);case St.AIOperationEnum.CATEGORISE_TEXT:if(!i)throw Error("No categories provided for categorise text operation. Please provide categories.");return iu(su(r,o),i.split(","));case St.AIOperationEnum.SENTIMENT_ANALYSIS:return lu(r[n]);case St.AIOperationEnum.PROMPT:return p;case St.AIOperationEnum.SEARCH_WEB:return du(su(r,o));default:throw rI.utils.unreachable(a)}}async generateJs(t,r){return await wt.default.trace("generateJs",async()=>{let{bindings:a=[],snippets:n=[]}=r||{};return await this.prompt(fu(a,n).addUserMessage(t))})}};var nI=require("@budibase/types"),mu=require("openai/helpers/zod");function Xn(e){if(e)return e==="text"?{type:"text"}:e==="json"?{type:"json_object"}:e}function aI(e){if(!e)return 0;let t=e.prompt_tokens;return e.completion_tokens*3+t}var Ce=class extends Je{constructor(r){super(r);this.client=this.getClient(r)}getClient(r){if(!r.apiKey)throw new Error("No OpenAI API key found");return new Zn.default({apiKey:r.apiKey})}async uploadFile(r,a,n){let o=ou(n);if(nI.ImageContentTypes.includes(o.toLowerCase())){let p;if(Buffer.isBuffer(r))p=r;else{let f=[];for await(let h of r)f.push(h);p=Buffer.concat(f)}let m=p.toString("base64");return`data:${o};base64,${m}`}let s=await(0,Zn.toFile)(r,a);return(await this.client.files.create({file:s,purpose:"assistants"})).id}async chatCompletion(r){let a={model:this.model,messages:r.messages,max_tokens:this.maxTokens,response_format:Xn(r.format)};r.tools&&r.tools.length>0&&(a.tool_choice="auto",a.tools=r.tools.map(mu.zodFunction));let n=await this.client.chat.completions.create(a),o=n.choices[0]?.message;if(o?.tool_calls){r.addMessage(o);let s=[];for(let i of o.tool_calls){let p=r.findTool(i.function.name);if(!p)throw new Error(`Tool ${i.function.name} not found in prompt tools`);let m=JSON.parse(i.function.arguments);s.push(p.handler(m).then(f=>({role:"tool",tool_call_id:i.id,content:f})).catch(f=>(console.error(`[OPENAI TOOL ERROR] Tool ${i.function.name} failed in OpenAI handler:`,f),{role:"tool",tool_call_id:i.id,content:`Error: ${f.message}`})))}return r.addMessages(await Promise.all(s)),this.chatCompletion(r)}else{if(o?.content)return{messages:[...r.messages,{role:o.role,content:o.content}],tokensUsed:aI(n.usage)};throw new Error("No response found")}}async*chatCompletionStream(r){let a={model:this.model,messages:r.messages,max_tokens:this.maxTokens,response_format:Xn(r.format),stream:!0};r.tools&&r.tools.length>0&&(a.tool_choice="auto",a.tools=r.tools.map(mu.zodFunction));try{let n=await this.client.chat.completions.create(a),o=null,s="",i=null;for await(let m of n){let f=m.choices[0]?.delta;if(f){if(f.content&&(s+=f.content,yield{type:"content",content:f.content}),f.tool_calls&&f.tool_calls.length>0){let h=f.tool_calls[0];h.id?(o={id:h.id,name:h.function?.name||"",arguments:h.function?.arguments||""},yield{type:"tool_call_start",toolCall:{id:o.id,name:o.name,arguments:o.arguments}}):o&&h.function?.arguments&&(o.arguments+=h.function.arguments,yield{type:"tool_call_start",toolCall:{id:o.id,name:o.name,arguments:o.arguments}})}m.usage&&(i=m.usage)}}let p=i?aI(i):0;if(o){r.addMessage({role:"assistant",content:"",tool_calls:[{id:o.id,type:"function",function:{name:o.name,arguments:o.arguments}}]});let m=r.findTool(o.name);if(m)try{let f=JSON.parse(o.arguments),h=await m.handler(f);yield{type:"tool_call_result",toolResult:{id:o.id,result:h}},r.addMessage({role:"tool",tool_call_id:o.id,content:h}),yield*this.chatCompletionStream(r);return}catch(f){yield{type:"tool_call_result",toolResult:{id:o.id,result:`Error: ${f.message}`,error:f.message}},r.addMessage({role:"tool",tool_call_id:o.id,content:`Error: ${f.message}`}),yield*this.chatCompletionStream(r);return}else{let f=`Tool '${o.name}' not found`;yield{type:"tool_call_result",toolResult:{id:o.id,result:f,error:f}},r.addMessage({role:"tool",tool_call_id:o.id,content:f}),yield*this.chatCompletionStream(r);return}}s&&r.addMessage({role:"assistant",content:s}),yield{type:"done",messages:r.messages,tokensUsed:p}}catch(n){yield{type:"error",content:n.message}}}};var ee=require("@budibase/backend-core"),oI=require("@budibase/types");var gu=require("dd-trace"),eo=class extends Je{async prompt(t){let r=await super.prompt(t);return r.tokensUsed&&await Sn(r.tokensUsed),r}async chat(t){let r=await super.chat(t);return r.tokensUsed&&await Sn(r.tokensUsed),r}async uploadFile(t,r,a){return ee.env.SELF_HOSTED?this.uploadFileSelfHost(t,r,a):this.uploadFileCloud(t,r,a)}async uploadFileCloud(t,r,a){return new Ce({apiKey:ee.env.OPENAI_API_KEY,model:this.model,maxTokens:this.maxTokens}).uploadFile(t,r,a)}async uploadFileSelfHost(t,r,a){let n;if(Buffer.isBuffer(t))n=t;else{let p=[];for await(let m of t)p.push(m);n=Buffer.concat(p)}let o=n.toString("base64");if(a&&oI.ImageContentTypes.includes(a.toLowerCase()))return`data:image/jpeg;base64,${o}`;if(!ee.env.BUDICLOUD_URL)throw new Error("No Budibase URL found");if(!this._apiKey){let p=await dn();if(!p)throw new Error("No license key found");this._apiKey=p}let s=await fetch(`${ee.env.BUDICLOUD_URL}/api/ai/upload-file`,{method:"POST",headers:{"Content-Type":"application/json",[ee.constants.Header.LICENSE_KEY]:this._apiKey},body:JSON.stringify({data:o,filename:r,contentType:a})});if(!s.ok)throw await ee.HTTPError.fromResponse(s);return(await s.json()).fileId}async chatCompletion(t){return ee.env.SELF_HOSTED?this.chatCompletionSelfHost(t):this.chatCompletionCloud(t)}async chatCompletionCloud(t){return await gu.tracer.trace("chatCompletionCloud",async()=>await new Ce({apiKey:ee.env.OPENAI_API_KEY,model:this.model,maxTokens:this.maxTokens}).chatCompletion(t))}async chatCompletionSelfHost(t){return await gu.tracer.trace("chatCompletionSelfHost",async r=>{if(!ee.env.BUDICLOUD_URL)throw new Error("No Budibase URL found");if(r.addTags({budicloudUrl:ee.env.BUDICLOUD_URL}),!this._apiKey){let o=await dn();if(!o)throw new Error("No license key found");this._apiKey=o,r.addTags({licenseKey:this._apiKey})}let a={messages:t.messages,format:t.format,useTools:t.tools.length>0},n=await fetch(`${ee.env.BUDICLOUD_URL}/api/ai/chat`,{method:"POST",headers:{"Content-Type":"application/json",[ee.constants.Header.LICENSE_KEY]:this._apiKey},body:JSON.stringify(a)});if(!n.ok)throw await ee.HTTPError.fromResponse(n);return await n.json()})}async*chatCompletionStream(t){ee.env.SELF_HOSTED?yield*this.chatCompletionStreamSelfHost(t):yield*this.chatCompletionStreamCloud(t)}async*chatCompletionStreamCloud(t){yield*new Ce({apiKey:ee.env.OPENAI_API_KEY,model:this.model,maxTokens:this.maxTokens}).chatCompletionStream(t)}async*chatCompletionStreamSelfHost(t){try{let r=await this.chatCompletionSelfHost(t);if(r.messages.length>0){let a=r.messages[r.messages.length-1];a.content&&(yield{type:"content",content:a.content})}yield{type:"done",messages:r.messages,tokensUsed:r.tokensUsed}}catch(r){yield{type:"error",content:r.message}}}};var Oa=require("dd-trace");var hu=P(require("@anthropic-ai/sdk"));function SG(e){if(!e)return 0;let t=e.input_tokens;return e.output_tokens*3+t}var to=class extends Je{constructor(r){super(r);this.client=new hu.default({apiKey:r.apiKey})}firstTextBlock(r){for(let a of r.content)if(a.type==="text")return a.text}async uploadFile(r,a,n){throw new Error("File upload not supported for this LLM provider")}async chatCompletion(r){try{let a=await this.client.messages.create({model:this.model,messages:r.messages.map(({content:o})=>{if(o==null)return{role:"user",content:""};if(typeof o=="string")return{role:"user",content:o};let s="";for(let i of o)i.type==="text"?s+=i.text:["image_url","input_audio","file"].includes(i.type);return{role:"user",content:s}}),max_tokens:this.maxTokens}),n=this.firstTextBlock(a)||"";return{messages:[...r.messages,{role:"assistant",content:n}],tokensUsed:SG(a.usage)}}catch(a){throw a instanceof hu.default.APIError&&console.error(`Anthropic Prompt failed with error ${a.name} and status: ${a.status}`),a}}async*chatCompletionStream(r){try{let a=await this.chatCompletion(r);if(a.messages.length>0){let n=a.messages[a.messages.length-1];n.content&&(yield{type:"content",content:n.content})}yield{type:"done",messages:a.messages,tokensUsed:a.tokensUsed}}catch(a){yield{type:"error",content:a.message}}}};var uI=require("zod"),pI=require("openai/helpers/zod");var sI=require("openai"),ro=class extends Ce{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 sI.AzureOpenAI({apiKey:t.apiKey,apiVersion:"2024-10-01-preview",deployment:t.model,baseURL:t.baseUrl})}};var cI="gpt-4o-mini",wG={OpenAI:Ce,TogetherAI:Ce,AzureOpenAI:ro,Custom:Ce,Anthropic:to,BudibaseAI:eo};async function TG(){return await Oa.tracer.trace("getAIConfig",async e=>{let t={type:iI.ConfigType.AI,config:{}};if(!Xe.context.isSelfHostUsingCloud()){let a=await Xe.configs.getAIConfig();a&&(t=a)}await fs(t);let r=Object.values(t.config).find(a=>a.active&&a.isDefault);if(!r){e.addTags({enabled:!1,reason:"no provider found"});return}return e.addTags({enabled:!0}),{provider:r.provider,model:r.defaultModel||cI,apiKey:r.apiKey,baseUrl:r.baseUrl}})}async function vG(){return Oa.tracer.trace("getSelfHostOpenAIKeyConfig",e=>{if(!Xe.env.SELF_HOSTED){e.addTags({enabled:!1,reason:"not self host"});return}if(!Xe.env.OPENAI_API_KEY){e.addTags({enabled:!1,reason:"no OPENAI_API_KEY"});return}return e.addTags({enabled:!0}),{provider:"OpenAI",model:cI,apiKey:Xe.env.OPENAI_API_KEY}})}async function yu(){return Oa.tracer.trace("getLLMConfig",async()=>await TG()||await vG())}async function La(e){return await Oa.tracer.trace("getLLM",async t=>{let{model:r,maxTokens:a}=e||{},n=await yu();if(!n){t.addTags({enabled:!1,reason:"no config found"});return}r&&(n.model=r),a&&(n.maxTokens=a);let o=wG[n.provider];if(!o){t.addTags({enabled:!1,reason:"no provider found",provider:n.provider});return}return new o(n)})}async function lI(){let e=await La();if(!e)throw new Xe.HTTPError("No available LLM configurations",500);return e}var $=class e{constructor(){this.messages=[];this.tools=[]}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 uI.z.ZodType?this.format=(0,pI.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 it=require("zod");function Jn(e,t){let r=`Summarize this text:
39
+ ${e}`,a="";if(t)switch(t){case ao.SummariseLength.SHORT:a="In 1-2 concise sentences, ";break;case ao.SummariseLength.MEDIUM:a="In 2-3 paragraphs, ";break;case ao.SummariseLength.LONG:a="In multiple detailed paragraphs, ";break}return new $().addUserMessage(`${a}${r}.
40
+ Only return the summary.`)}function EG(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
+
42
+ `),n=t.startsWith("data:")?[{type:"image_url",image_url:{url:t}},{type:"text",text:r}]:[{type:"text",text:`${r}
43
+
44
+ File ID: ${t}`}],o=RG(e),s=it.z.object({data:it.z.array(o)});return new $().addMessages([{role:"user",content:n}]).withFormat(s)}function RG(e){let t={};for(let[r,a]of Object.entries(e))if(typeof a=="string")switch(a.toLowerCase()){case"string":t[r]=it.z.string();break;case"number":t[r]=it.z.number();break;case"boolean":t[r]=it.z.boolean();break;default:t[r]=it.z.string()}else t[r]=it.z.string();return it.z.object(t)}function iu(e,t){return new $().addUserMessage(`Return the category of this text: "${e}". Based on these categories: ${t.join(", ")}. Only return the category. Do not add any extra punctuation or fix spelling mistakes. It should exactly match one of the categories. `)}function uu(e){return new $().addUserMessage(`Clean the following string: "${e}". Remove any spelling mistakes or data issues. Only return the cleaned string itself and nothing else.`)}function _G(e,t){return new $().addUserMessage(`Given the table schema:
41
45
  ${t}
42
46
 
43
47
  Generate a SQL query for the following request:
44
48
  ${e}.
45
- Only provide the SQL.`)}function yG(e){return new V().addUserMessage(`Generate JavaScript code for the following request:
49
+ Only provide the SQL.`)}function xG(e){return new $().addUserMessage(`Generate JavaScript code for the following request:
46
50
  ${e}.
47
- Only provide the JS and nothing else.`)}function tu(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:
48
- ${e}`)}function ru(e,t){return new V().addUserMessage(`Translate the following text: "${e}" into ${t}. Only return the translation.`)}function au(e){return new V().addUserMessage(`Return the sentiment of this text: "${e}". Only return the sentiment.`)}function nu(e){return new V().addUserMessage(`Search the web for the following: "${e}". Only return the top results.`)}function ou(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.`)}function pu(e){return new $().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}`)}function cu(e,t){return new $().addUserMessage(`Translate the following text: "${e}" into ${t}. Only return the translation.`)}function lu(e){return new $().addUserMessage(`Return the sentiment of this text: "${e}". Only return the sentiment.`)}function du(e){return new $().addUserMessage(`Search the web for the following: "${e}". Only return the top results.`)}function fu(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:
49
53
 
50
54
  ${e.map(({readableBinding:n})=>`- $("${n}")`).join(`
51
55
  `)}`);let a="You do not have access to any snippets in this request.";return t.length>0&&(a=`The snippets you have access to are:
52
56
 
53
57
  ${t.map(({name:n,code:o})=>{let s=o.replace(/^\s*return /g,"");return`- snippets.${n} = ${s.trim()}`}).join(`
54
- `)}`),new V().addSystemMessage(`
58
+ `)}`),new $().addSystemMessage(`
55
59
  You are a helpful expert in writing JavaScript. A user is asking you for help
56
60
  writing some JavaScript for their application.
57
61
 
@@ -140,7 +144,7 @@ a variable, it will be provided to you as a binding.
140
144
 
141
145
  ${a}
142
146
 
143
- ${r}`)}function cu(){let e=`
147
+ ${r}`)}function Au(){let e=`
144
148
  You are generating Budibase table schemas from user prompts.
145
149
  Always return at least 2 tables, and define only one side of relationships using a link field.
146
150
  Exclude id, created_at, and updated_at (Budibase adds them).
@@ -148,35 +152,32 @@ Include a variety of column types: text, dropdown, date, number.
148
152
  Add at least one formula column, one attachment, and one multi-attachment column across the tables.
149
153
  Budibase handles reverse relationships and many-to-many links \u2014 never define join tables or reverse fields.
150
154
  You may specify foreignColumnName, but do not create that field manually.
151
- `;return new V().addSystemMessage(e)}function lu(){let e='Given the generated schema, add only one field of type "AI" to relevant tables to add value to the Budibase user.';return new V().addSystemMessage(e)}function du(){let e=`
155
+ `;return new $().addSystemMessage(e)}function bu(){let e='Given the generated schema, add only one field of type "AI" to relevant tables to add value to the Budibase user.';return new $().addSystemMessage(e)}function Iu(){let e=`
152
156
  For each table, populate the data field with realistic-looking sample records.
153
157
  Avoid placeholder values like "foo" or "bar". Use real names, emails, etc., and ensure values are unique across rows.
154
- `;return new V().addSystemMessage(e)}function hG(e){return`You are a helpful support agent, using workflows to solve problems for users.
155
- The user is asking you for help with a support query.
156
-
157
- Your reply MUST be short and concise, answering the user's query as quickly and
158
- easily as possible.
159
-
160
- You MUST use markdown for any formatting in your response message.
161
-
162
- Do not tell the user about the format of the parameters, for example if a date is required to be
163
- supplied in ISO format, you should convert it to that, allowing the user to provide the date
164
- in any human readable format.
165
-
166
- If asked you can supply the list of "automations" to the user, this is the list of tool names available.
158
+ `;return new $().addSystemMessage(e)}function CG(e){return`You are a helpful support agent who uses workflows to resolve user issues efficiently.
159
+
160
+ - The user will ask support queries.
161
+ - Your replies MUST be short, concise, and directly answer the user's question as quickly and clearly as possible.
162
+ - Use Markdown formatting in your responses.
163
+ - When receiving truncated or paginated results, automatically make follow-up requests to retrieve all pages
164
+ - If you aren't entirely sure which tool to call, make sure to ask for confirmation rather than assume. If there's any ambiguity, get user confirmation.
165
+ - When a tool call fails, show the detailed error status and message in the UI to provide the user further information as to how to debug.
166
+
167
+
168
+ User information is provided below for context:
167
169
 
168
- Information about the user making the request can be found below:
169
170
  \`\`\`
170
171
  ${JSON.stringify(e)}
171
- \`\`\``}function AG(){return`You will be provided with a set of history, a conversation between a user and an AI. Using this
172
+ \`\`\``}function OG(){return`You will be provided with a set of history, a conversation between a user and an AI. Using this
172
173
  information generate a title for the conversation, this should start with a capital letter and MUST be
173
- less than five words.`}var Oa=require("@budibase/backend-core"),nI=require("@budibase/shared-core");var st=require("@budibase/types"),rI=require("@budibase/backend-core");function fu(e){let t=[],r=[];for(let a of e.tables){let n=a.schema.reduce((o,s)=>{if(s.type===st.FieldType.LINK){if(!r.includes(s.relationshipId)){let i={[st.RelationshipType.MANY_TO_ONE]:st.RelationshipType.ONE_TO_MANY,[st.RelationshipType.ONE_TO_MANY]:st.RelationshipType.MANY_TO_ONE,[st.RelationshipType.MANY_TO_MANY]:st.RelationshipType.MANY_TO_MANY},{reverseFieldName:p,relationshipId:f,...m}=s;o[s.name]={...m,fieldName:p,relationshipType:i[s.relationshipType]},r.push(f)}}else o[s.name]=s;return o},{});t.push({_id:rI.docIds.generateTableID(),name:a.name,primaryDisplay:a.primaryDisplay,schema:n})}return t}function mu(e,t){let r=[];for(let a of e)r.push({...a,schema:{...a.schema,...t[a.name]?.reduce((n,o)=>(n[o.name]=o,n),{})}});return r}var T=require("@budibase/types"),A=require("zod"),ue=A.z.object({name:A.z.string().describe("A human readable name for the field. It MUST be alpha-numeric and capitalised.")}),gu=ue.extend({type:A.z.literal(T.FieldType.LINK),tableId:A.z.string().describe("This must match one of the generated table names"),reverseFieldName:A.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:A.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.")}),bG=A.z.array(A.z.union([ue.extend({type:A.z.enum([T.FieldType.STRING,T.FieldType.NUMBER,T.FieldType.BOOLEAN,T.FieldType.LONGFORM]),constraints:A.z.object({presence:A.z.boolean()}).optional()}),gu.extend({relationshipType:A.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."),gu.extend({relationshipType:A.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."),gu.extend({relationshipType:A.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."),ue.extend({type:A.z.literal(T.FieldType.OPTIONS),constraints:A.z.object({inclusion:A.z.array(A.z.string()).describe("The options for the field"),presence:A.z.boolean()})}).describe("A single option from closed set of options"),ue.extend({type:A.z.literal(T.FieldType.ARRAY),constraints:A.z.object({inclusion:A.z.array(A.z.string()).describe("The options for the field"),presence:A.z.boolean(),type:A.z.literal(T.JsonFieldSubType.ARRAY)}).describe("Multiple selected options from closed set of options")}),ue.extend({type:A.z.literal(T.FieldType.FORMULA),formula:A.z.string().describe(`
174
+ less than five words.`}var Pa=require("@budibase/backend-core"),mI=require("@budibase/shared-core");var ut=require("@budibase/types"),dI=require("@budibase/backend-core");function Su(e){let t=[],r=[];for(let a of e.tables){let n=a.schema.reduce((o,s)=>{if(s.type===ut.FieldType.LINK){if(!r.includes(s.relationshipId)){let i={[ut.RelationshipType.MANY_TO_ONE]:ut.RelationshipType.ONE_TO_MANY,[ut.RelationshipType.ONE_TO_MANY]:ut.RelationshipType.MANY_TO_ONE,[ut.RelationshipType.MANY_TO_MANY]:ut.RelationshipType.MANY_TO_MANY},{reverseFieldName:p,relationshipId:m,...f}=s;o[s.name]={...f,fieldName:p,relationshipType:i[s.relationshipType]},r.push(m)}}else o[s.name]=s;return o},{});t.push({_id:dI.docIds.generateTableID(),name:a.name,primaryDisplay:a.primaryDisplay,schema:n})}return t}function wu(e,t){let r=[];for(let a of e)r.push({...a,schema:{...a.schema,...t[a.name]?.reduce((n,o)=>(n[o.name]=o,n),{})}});return r}var T=require("@budibase/types"),A=require("zod"),pe=A.z.object({name:A.z.string().describe("A human readable name for the field. It MUST be alpha-numeric and capitalised.")}),Tu=pe.extend({type:A.z.literal(T.FieldType.LINK),tableId:A.z.string().describe("This must match one of the generated table names"),reverseFieldName:A.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:A.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.")}),LG=A.z.array(A.z.union([pe.extend({type:A.z.enum([T.FieldType.STRING,T.FieldType.NUMBER,T.FieldType.BOOLEAN,T.FieldType.LONGFORM]),constraints:A.z.object({presence:A.z.boolean()}).optional()}),Tu.extend({relationshipType:A.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."),Tu.extend({relationshipType:A.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."),Tu.extend({relationshipType:A.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."),pe.extend({type:A.z.literal(T.FieldType.OPTIONS),constraints:A.z.object({inclusion:A.z.array(A.z.string()).describe("The options for the field"),presence:A.z.boolean()})}).describe("A single option from closed set of options"),pe.extend({type:A.z.literal(T.FieldType.ARRAY),constraints:A.z.object({inclusion:A.z.array(A.z.string()).describe("The options for the field"),presence:A.z.boolean(),type:A.z.literal(T.JsonFieldSubType.ARRAY)}).describe("Multiple selected options from closed set of options")}),pe.extend({type:A.z.literal(T.FieldType.FORMULA),formula:A.z.string().describe(`
174
175
  A JavaScript expression using only previously defined fields.
175
176
  Reference fields using $("Field name"). Must end with: return ...
176
177
  Example: return $("Score") + $("Weight")
177
- `),responseType:A.z.enum([T.FieldType.STRING,T.FieldType.NUMBER,T.FieldType.BOOLEAN,T.FieldType.DATETIME])}).describe("Define these types after the other types"),ue.extend({type:A.z.literal(T.FieldType.DATETIME),ignoreTimezones:A.z.boolean()}).describe("A datetime field, storing date and time"),ue.extend({type:A.z.literal(T.FieldType.DATETIME),ignoreTimezones:A.z.boolean(),timeOnly:A.z.literal(!0)}).describe("A time only field"),ue.extend({type:A.z.literal(T.FieldType.DATETIME),ignoreTimezones:A.z.boolean(),dateOnly:A.z.literal(!0)}).describe("A date only field"),ue.extend({type:A.z.literal(T.FieldType.ATTACHMENT_SINGLE),subtype:A.z.literal(T.AttachmentSubType.IMAGE)}).describe("Single image column"),ue.extend({type:A.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."),ue.extend({type:A.z.literal(T.FieldType.ATTACHMENTS),subtype:A.z.literal(T.AttachmentSubType.IMAGE)}).describe("Multiple images column. Use an appropiate name for the columns, like 'Gallery', 'Photos', etc."),ue.extend({type:A.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.")])),yu=A.z.object({tables:A.z.array(A.z.object({name:A.z.string(),schema:bG,primaryDisplay:A.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 hu(e){let t=A.z.object({});for(let r of e){let a=Object.values(r.schema),n=[ue.extend({type:A.z.literal(T.FieldType.AI),operation:A.z.literal(T.AIOperationEnum.TRANSLATE),column:A.z.enum(a.filter(o=>[T.FieldType.STRING,T.FieldType.LONGFORM].includes(o.type)).map(o=>o.name)).describe("The columns to translate"),language:A.z.string()}).describe("This column will be autogenerated via AI to translate one column. Use it for reasonable cases, like translating descriptions or similar."),ue.extend({type:A.z.literal(T.FieldType.AI),operation:A.z.literal(T.AIOperationEnum.CATEGORISE_TEXT),columns:A.z.array(A.z.enum(a.filter(o=>[T.FieldType.STRING,T.FieldType.LONGFORM,T.FieldType.BOOLEAN,T.FieldType.NUMBER,T.FieldType.DATETIME].includes(o.type)).map(o=>o.name))).describe("The columns to be used as context"),categories:A.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.")];a.some(o=>o.type===T.FieldType.LONGFORM)&&n.push(ue.extend({type:A.z.literal(T.FieldType.AI),operation:A.z.literal(T.AIOperationEnum.SUMMARISE_TEXT),columns:A.z.array(A.z.enum(a.filter(o=>[T.FieldType.STRING,T.FieldType.LONGFORM].includes(o.type)).map(o=>o.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]:A.z.array(A.z.union(n))})}return t}var k=require("zod"),aI=require("@budibase/shared-core"),U=require("@budibase/types");function Au(e){let t=k.z.object({});for(let r of e){let a={_id:k.z.string().describe("Unique ID for the row")},n=k.z.union([k.z.literal("https://picsum.photos/600/600").describe("For profile pictures and similar"),k.z.literal("https://picsum.photos/1920/1080").describe("For anything else")]),o=k.z.object({fileName:k.z.string(),extension:k.z.enum([".pdf",".txt"]),content:k.z.string().describe("Random content for the file")});for(let s of Object.values(r.schema)){let{type:i}=s;switch(i){case U.FieldType.STRING:case U.FieldType.LONGFORM:a[s.name]=k.z.string();break;case U.FieldType.NUMBER:case U.FieldType.BIGINT:a[s.name]=k.z.number();break;case U.FieldType.BOOLEAN:a[s.name]=k.z.boolean();break;case U.FieldType.DATETIME:a[s.name]=k.z.string().describe(`ISO datetime. Use realistic dates, based on today's date, ${new Date().toISOString()}`);break;case U.FieldType.ATTACHMENT_SINGLE:s.subtype===U.AttachmentSubType.IMAGE?a[s.name]=n:a[s.name]=o;break;case U.FieldType.ATTACHMENTS:s.subtype===U.AttachmentSubType.IMAGE?a[s.name]=k.z.array(n):a[s.name]=k.z.array(o),a[s.name]=a[s.name].describe("Between 2 and 5 items.");break;case U.FieldType.OPTIONS:a[s.name]=k.z.enum(s.constraints.inclusion);break;case U.FieldType.LINK:{let p=k.z.string().describe(`Match one of the _ids created for table "${s.tableId}"`);s.relationshipType===U.RelationshipType.ONE_TO_MANY?a[s.name]=k.z.array(p).describe("Array with a single item"):s.relationshipType===U.RelationshipType.MANY_TO_MANY&&(a[s.name]=k.z.array(p).describe("Array with a one or many items. You can repeat the same ids between rows"))}break;case U.FieldType.ARRAY:a[s.name]=k.z.array(k.z.enum(s.constraints.inclusion));break;case U.FieldType.AI:case U.FieldType.AUTO:case U.FieldType.SIGNATURE_SINGLE:case U.FieldType.BB_REFERENCE:case U.FieldType.JSON:case U.FieldType.FORMULA:case U.FieldType.INTERNAL:case U.FieldType.BARCODEQR:case U.FieldType.BB_REFERENCE_SINGLE:break;default:throw aI.utils.unreachable(i)}}t=t.extend({[r.name]:k.z.array(k.z.object(a))}).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:
178
+ `),responseType:A.z.enum([T.FieldType.STRING,T.FieldType.NUMBER,T.FieldType.BOOLEAN,T.FieldType.DATETIME])}).describe("Define these types after the other types"),pe.extend({type:A.z.literal(T.FieldType.DATETIME),ignoreTimezones:A.z.boolean()}).describe("A datetime field, storing date and time"),pe.extend({type:A.z.literal(T.FieldType.DATETIME),ignoreTimezones:A.z.boolean(),timeOnly:A.z.literal(!0)}).describe("A time only field"),pe.extend({type:A.z.literal(T.FieldType.DATETIME),ignoreTimezones:A.z.boolean(),dateOnly:A.z.literal(!0)}).describe("A date only field"),pe.extend({type:A.z.literal(T.FieldType.ATTACHMENT_SINGLE),subtype:A.z.literal(T.AttachmentSubType.IMAGE)}).describe("Single image column"),pe.extend({type:A.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."),pe.extend({type:A.z.literal(T.FieldType.ATTACHMENTS),subtype:A.z.literal(T.AttachmentSubType.IMAGE)}).describe("Multiple images column. Use an appropiate name for the columns, like 'Gallery', 'Photos', etc."),pe.extend({type:A.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.")])),vu=A.z.object({tables:A.z.array(A.z.object({name:A.z.string(),schema:LG,primaryDisplay:A.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 Eu(e){let t=A.z.object({});for(let r of e){let a=Object.values(r.schema),n=[pe.extend({type:A.z.literal(T.FieldType.AI),operation:A.z.literal(T.AIOperationEnum.TRANSLATE),column:A.z.enum(a.filter(o=>[T.FieldType.STRING,T.FieldType.LONGFORM].includes(o.type)).map(o=>o.name)).describe("The columns to translate"),language:A.z.string()}).describe("This column will be autogenerated via AI to translate one column. Use it for reasonable cases, like translating descriptions or similar."),pe.extend({type:A.z.literal(T.FieldType.AI),operation:A.z.literal(T.AIOperationEnum.CATEGORISE_TEXT),columns:A.z.array(A.z.enum(a.filter(o=>[T.FieldType.STRING,T.FieldType.LONGFORM,T.FieldType.BOOLEAN,T.FieldType.NUMBER,T.FieldType.DATETIME].includes(o.type)).map(o=>o.name))).describe("The columns to be used as context"),categories:A.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.")];a.some(o=>o.type===T.FieldType.LONGFORM)&&n.push(pe.extend({type:A.z.literal(T.FieldType.AI),operation:A.z.literal(T.AIOperationEnum.SUMMARISE_TEXT),columns:A.z.array(A.z.enum(a.filter(o=>[T.FieldType.STRING,T.FieldType.LONGFORM].includes(o.type)).map(o=>o.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]:A.z.array(A.z.union(n))})}return t}var k=require("zod"),fI=require("@budibase/shared-core"),q=require("@budibase/types");function Ru(e){let t=k.z.object({});for(let r of e){let a={_id:k.z.string().describe("Unique ID for the row")},n=k.z.union([k.z.literal("https://picsum.photos/600/600").describe("For profile pictures and similar"),k.z.literal("https://picsum.photos/1920/1080").describe("For anything else")]),o=k.z.object({fileName:k.z.string(),extension:k.z.enum([".pdf",".txt"]),content:k.z.string().describe("Random content for the file")});for(let s of Object.values(r.schema)){let{type:i}=s;switch(i){case q.FieldType.STRING:case q.FieldType.LONGFORM:a[s.name]=k.z.string();break;case q.FieldType.NUMBER:case q.FieldType.BIGINT:a[s.name]=k.z.number();break;case q.FieldType.BOOLEAN:a[s.name]=k.z.boolean();break;case q.FieldType.DATETIME:a[s.name]=k.z.string().describe(`ISO datetime. Use realistic dates, based on today's date, ${new Date().toISOString()}`);break;case q.FieldType.ATTACHMENT_SINGLE:s.subtype===q.AttachmentSubType.IMAGE?a[s.name]=n:a[s.name]=o;break;case q.FieldType.ATTACHMENTS:s.subtype===q.AttachmentSubType.IMAGE?a[s.name]=k.z.array(n):a[s.name]=k.z.array(o),a[s.name]=a[s.name].describe("Between 2 and 5 items.");break;case q.FieldType.OPTIONS:a[s.name]=k.z.enum(s.constraints.inclusion);break;case q.FieldType.LINK:{let p=k.z.string().describe(`Match one of the _ids created for table "${s.tableId}"`);s.relationshipType===q.RelationshipType.ONE_TO_MANY?a[s.name]=k.z.array(p).describe("Array with a single item"):s.relationshipType===q.RelationshipType.MANY_TO_MANY&&(a[s.name]=k.z.array(p).describe("Array with a one or many items. You can repeat the same ids between rows"))}break;case q.FieldType.ARRAY:a[s.name]=k.z.array(k.z.enum(s.constraints.inclusion));break;case q.FieldType.AI:case q.FieldType.AUTO:case q.FieldType.SIGNATURE_SINGLE:case q.FieldType.BB_REFERENCE:case q.FieldType.JSON:case q.FieldType.FORMULA:case q.FieldType.INTERNAL:case q.FieldType.BARCODEQR:case q.FieldType.BB_REFERENCE_SINGLE:break;default:throw fI.utils.unreachable(i)}}t=t.extend({[r.name]:k.z.array(k.z.object(a))}).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:
178
179
  1. If we have posts and comments, there should be more posts than users, and more comments than posts.
179
180
  2. If it's a ticketing system, there may be more tickets than users, and some users may have submitted several tickets.
180
181
  3. In a CRM, there are fewer users than customers, and customers may have many deals.
181
- 4. In a project management tool, projects might have many tasks, and tasks might have multiple comments.`)}return t}var Pa=C(require("dd-trace")),bu=class e{constructor(t,r){this.llmFunctions={getTableStructure:async t=>Pa.default.trace("llm.getTableStructure",async()=>{let r=await this.llm.prompt(cu().addUserMessage(t).withFormat(yu));try{let a=JSON.parse(r.message);return fu(a)}catch{throw new Oa.HTTPError("Error generating tables",500)}}),generateAIColumns:(t,r)=>Pa.default.trace("llm.generateAIColumns",async()=>this.generateAIColumns(t,r)),generateData:async(t,r)=>Pa.default.trace("llm.generateData",async()=>{let a=await this.llm.prompt(du().addUserMessage(t).withFormat(Au(r)));try{return JSON.parse(a.message)}catch{throw new Oa.HTTPError("Error generating data",500)}})};this.llm=t,this.delegates=r}static async init(t){let r=await _a({model:"gpt-4o",maxTokens:2e3});if(!r)throw new Oa.HTTPError("LLM not available",422);return new e(r,t)}async generate(t,r){return Pa.default.trace("tableGeneration.generate",async a=>{let n=await this.generateTables(t,r);return a.addTags({table_count:n.length}),n})}async generateTables(t,r){let a=await this.llmFunctions.getTableStructure(t),n=this.llmFunctions.generateAIColumns(t,a).then(i=>this.delegates.generateTablesDelegate(mu(a,i))),o=await this.llmFunctions.generateData(t,a),s=await n;return await this.delegates.generateDataDelegate(o,r,nI.utils.toMap("name",a)),s}async generateAIColumns(t,r){let a=await this.llm.prompt(lu().addUserMessage(`This is the initial user prompt that generated the given schema:
182
- "${t}"`).withFormat(hu(r)));try{return JSON.parse(a.message)}catch{throw new Oa.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});
182
+ 4. In a project management tool, projects might have many tasks, and tasks might have multiple comments.`)}return t}var Ua=P(require("dd-trace")),_u=class e{constructor(t,r){this.llmFunctions={getTableStructure:async t=>Ua.default.trace("llm.getTableStructure",async()=>{let r=await this.llm.prompt(Au().addUserMessage(t).withFormat(vu));try{let a=JSON.parse(r.message);return Su(a)}catch{throw new Pa.HTTPError("Error generating tables",500)}}),generateAIColumns:(t,r)=>Ua.default.trace("llm.generateAIColumns",async()=>this.generateAIColumns(t,r)),generateData:async(t,r)=>Ua.default.trace("llm.generateData",async()=>{let a=await this.llm.prompt(Iu().addUserMessage(t).withFormat(Ru(r)));try{return JSON.parse(a.message)}catch{throw new Pa.HTTPError("Error generating data",500)}})};this.llm=t,this.delegates=r}static async init(t){let r=await La({model:"gpt-4o",maxTokens:2e3});if(!r)throw new Pa.HTTPError("LLM not available",422);return new e(r,t)}async generate(t,r){return Ua.default.trace("tableGeneration.generate",async a=>{let n=await this.generateTables(t,r);return a.addTags({table_count:n.length}),n})}async generateTables(t,r){let a=await this.llmFunctions.getTableStructure(t),n=this.llmFunctions.generateAIColumns(t,a).then(i=>this.delegates.generateTablesDelegate(wu(a,i))),o=await this.llmFunctions.generateData(t,a),s=await n;return await this.delegates.generateDataDelegate(o,r,mI.utils.toMap("name",a)),s}async generateAIColumns(t,r){let a=await this.llm.prompt(bu().addUserMessage(`This is the initial user prompt that generated the given schema:
183
+ "${t}"`).withFormat(Eu(r)));try{return JSON.parse(a.message)}catch{throw new Pa.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});