@budibase/pro 3.12.1 → 3.12.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +23 -23
  2. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -1,14 +1,14 @@
1
- "use strict";var lI=Object.create;var La=Object.defineProperty;var dI=Object.getOwnPropertyDescriptor;var fI=Object.getOwnPropertyNames;var mI=Object.getPrototypeOf,gI=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})},Ru=(e,t,r,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of fI(t))!gI.call(e,n)&&n!==r&&La(e,n,{get:()=>t[n],enumerable:!(a=dI(t,n))||a.enumerable});return e};var C=(e,t,r)=>(r=e!=null?lI(mI(e)):{},Ru(t||!e||!e.__esModule?La(r,"default",{value:e,enumerable:!0}):r,e)),yI=e=>Ru(La({},"__esModule",{value:!0}),e);var Va=u((q0,cp)=>{"use strict";function fS(e,t){for(var r=-1,a=t.length,n=e.length;++r<a;)e[n+r]=t[r];return e}cp.exports=fS});var go=u((U0,lp)=>{"use strict";var mS=typeof global=="object"&&global&&global.Object===Object&&global;lp.exports=mS});var ne=u((D0,dp)=>{"use strict";var gS=go(),yS=typeof self=="object"&&self&&self.Object===Object&&self,hS=gS||yS||Function("return this")();dp.exports=hS});var Rt=u((N0,fp)=>{"use strict";var AS=ne(),bS=AS.Symbol;fp.exports=bS});var hp=u((B0,yp)=>{"use strict";var mp=Rt(),gp=Object.prototype,IS=gp.hasOwnProperty,SS=gp.toString,Vr=mp?mp.toStringTag:void 0;function wS(e){var t=IS.call(e,Vr),r=e[Vr];try{e[Vr]=void 0;var a=!0}catch{}var n=SS.call(e);return a&&(t?e[Vr]=r:delete e[Vr]),n}yp.exports=wS});var bp=u((M0,Ap)=>{"use strict";var TS=Object.prototype,vS=TS.toString;function ES(e){return vS.call(e)}Ap.exports=ES});var dt=u((G0,wp)=>{"use strict";var Ip=Rt(),RS=hp(),xS=bp(),_S="[object Null]",OS="[object Undefined]",Sp=Ip?Ip.toStringTag:void 0;function PS(e){return e==null?e===void 0?OS:_S:Sp&&Sp in Object(e)?RS(e):xS(e)}wp.exports=PS});var ge=u((k0,Tp)=>{"use strict";function LS(e){return e!=null&&typeof e=="object"}Tp.exports=LS});var Ep=u((F0,vp)=>{"use strict";var CS=dt(),qS=ge(),US="[object Arguments]";function DS(e){return qS(e)&&CS(e)==US}vp.exports=DS});var Yr=u((Q0,_p)=>{"use strict";var Rp=Ep(),NS=ge(),xp=Object.prototype,BS=xp.hasOwnProperty,MS=xp.propertyIsEnumerable,GS=Rp(function(){return arguments}())?Rp:function(e){return NS(e)&&BS.call(e,"callee")&&!MS.call(e,"callee")};_p.exports=GS});var ee=u((j0,Op)=>{"use strict";var kS=Array.isArray;Op.exports=kS});var qp=u((W0,Cp)=>{"use strict";var Pp=Rt(),FS=Yr(),QS=ee(),Lp=Pp?Pp.isConcatSpreadable:void 0;function jS(e){return QS(e)||FS(e)||!!(Lp&&e&&e[Lp])}Cp.exports=jS});var yo=u(($0,Dp)=>{"use strict";var WS=Va(),$S=qp();function Up(e,t,r,a,n){var o=-1,s=e.length;for(r||(r=$S),n||(n=[]);++o<s;){var i=e[o];t>0&&r(i)?t>1?Up(i,t-1,r,a,n):WS(n,i):a||(n[n.length]=i)}return n}Dp.exports=Up});var Hr=u((K0,Np)=>{"use strict";function KS(e){return e}Np.exports=KS});var Ya=u((V0,Bp)=>{"use strict";function VS(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)}Bp.exports=VS});var ho=u((Y0,Gp)=>{"use strict";var YS=Ya(),Mp=Math.max;function HS(e,t,r){return t=Mp(t===void 0?e.length-1:t,0),function(){for(var a=arguments,n=-1,o=Mp(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),YS(e,this,i)}}Gp.exports=HS});var Fp=u((H0,kp)=>{"use strict";function zS(e){return function(){return e}}kp.exports=zS});var Te=u((z0,Qp)=>{"use strict";function JS(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}Qp.exports=JS});var zr=u((J0,jp)=>{"use strict";var XS=dt(),ZS=Te(),ew="[object AsyncFunction]",tw="[object Function]",rw="[object GeneratorFunction]",aw="[object Proxy]";function nw(e){if(!ZS(e))return!1;var t=XS(e);return t==tw||t==rw||t==ew||t==aw}jp.exports=nw});var $p=u((X0,Wp)=>{"use strict";var ow=ne(),sw=ow["__core-js_shared__"];Wp.exports=sw});var Yp=u((Z0,Vp)=>{"use strict";var Ao=$p(),Kp=function(){var e=/[^.]+$/.exec(Ao&&Ao.keys&&Ao.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function iw(e){return!!Kp&&Kp in e}Vp.exports=iw});var bo=u((ek,Hp)=>{"use strict";var uw=Function.prototype,pw=uw.toString;function cw(e){if(e!=null){try{return pw.call(e)}catch{}try{return e+""}catch{}}return""}Hp.exports=cw});var Jp=u((tk,zp)=>{"use strict";var lw=zr(),dw=Yp(),fw=Te(),mw=bo(),gw=/[\\^$.*+?()[\]{}|]/g,yw=/^\[object .+?Constructor\]$/,hw=Function.prototype,Aw=Object.prototype,bw=hw.toString,Iw=Aw.hasOwnProperty,Sw=RegExp("^"+bw.call(Iw).replace(gw,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function ww(e){if(!fw(e)||dw(e))return!1;var t=lw(e)?Sw:yw;return t.test(mw(e))}zp.exports=ww});var Zp=u((rk,Xp)=>{"use strict";function Tw(e,t){return e?.[t]}Xp.exports=Tw});var ft=u((ak,ec)=>{"use strict";var vw=Jp(),Ew=Zp();function Rw(e,t){var r=Ew(e,t);return vw(r)?r:void 0}ec.exports=Rw});var Io=u((nk,tc)=>{"use strict";var xw=ft(),_w=function(){try{var e=xw(Object,"defineProperty");return e({},"",{}),e}catch{}}();tc.exports=_w});var nc=u((ok,ac)=>{"use strict";var Ow=Fp(),rc=Io(),Pw=Hr(),Lw=rc?function(e,t){return rc(e,"toString",{configurable:!0,enumerable:!1,value:Ow(t),writable:!0})}:Pw;ac.exports=Lw});var So=u((sk,oc)=>{"use strict";var Cw=800,qw=16,Uw=Date.now;function Dw(e){var t=0,r=0;return function(){var a=Uw(),n=qw-(a-r);if(r=a,n>0){if(++t>=Cw)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}oc.exports=Dw});var Ha=u((ik,sc)=>{"use strict";var Nw=nc(),Bw=So(),Mw=Bw(Nw);sc.exports=Mw});var wo=u((uk,ic)=>{"use strict";var Gw=Hr(),kw=ho(),Fw=Ha();function Qw(e,t){return Fw(kw(e,t,Gw),e+"")}ic.exports=Qw});var Jr=u((pk,uc)=>{"use strict";var jw=ft(),Ww=jw(Object,"create");uc.exports=Ww});var lc=u((ck,cc)=>{"use strict";var pc=Jr();function $w(){this.__data__=pc?pc(null):{},this.size=0}cc.exports=$w});var fc=u((lk,dc)=>{"use strict";function Kw(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}dc.exports=Kw});var gc=u((dk,mc)=>{"use strict";var Vw=Jr(),Yw="__lodash_hash_undefined__",Hw=Object.prototype,zw=Hw.hasOwnProperty;function Jw(e){var t=this.__data__;if(Vw){var r=t[e];return r===Yw?void 0:r}return zw.call(t,e)?t[e]:void 0}mc.exports=Jw});var hc=u((fk,yc)=>{"use strict";var Xw=Jr(),Zw=Object.prototype,eT=Zw.hasOwnProperty;function tT(e){var t=this.__data__;return Xw?t[e]!==void 0:eT.call(t,e)}yc.exports=tT});var bc=u((mk,Ac)=>{"use strict";var rT=Jr(),aT="__lodash_hash_undefined__";function nT(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=rT&&t===void 0?aT:t,this}Ac.exports=nT});var Sc=u((gk,Ic)=>{"use strict";var oT=lc(),sT=fc(),iT=gc(),uT=hc(),pT=bc();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=oT;Vt.prototype.delete=sT;Vt.prototype.get=iT;Vt.prototype.has=uT;Vt.prototype.set=pT;Ic.exports=Vt});var Tc=u((yk,wc)=>{"use strict";function cT(){this.__data__=[],this.size=0}wc.exports=cT});var Yt=u((hk,vc)=>{"use strict";function lT(e,t){return e===t||e!==e&&t!==t}vc.exports=lT});var Xr=u((Ak,Ec)=>{"use strict";var dT=Yt();function fT(e,t){for(var r=e.length;r--;)if(dT(e[r][0],t))return r;return-1}Ec.exports=fT});var xc=u((bk,Rc)=>{"use strict";var mT=Xr(),gT=Array.prototype,yT=gT.splice;function hT(e){var t=this.__data__,r=mT(t,e);if(r<0)return!1;var a=t.length-1;return r==a?t.pop():yT.call(t,r,1),--this.size,!0}Rc.exports=hT});var Oc=u((Ik,_c)=>{"use strict";var AT=Xr();function bT(e){var t=this.__data__,r=AT(t,e);return r<0?void 0:t[r][1]}_c.exports=bT});var Lc=u((Sk,Pc)=>{"use strict";var IT=Xr();function ST(e){return IT(this.__data__,e)>-1}Pc.exports=ST});var qc=u((wk,Cc)=>{"use strict";var wT=Xr();function TT(e,t){var r=this.__data__,a=wT(r,e);return a<0?(++this.size,r.push([e,t])):r[a][1]=t,this}Cc.exports=TT});var Zr=u((Tk,Uc)=>{"use strict";var vT=Tc(),ET=xc(),RT=Oc(),xT=Lc(),_T=qc();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=vT;Ht.prototype.delete=ET;Ht.prototype.get=RT;Ht.prototype.has=xT;Ht.prototype.set=_T;Uc.exports=Ht});var za=u((vk,Dc)=>{"use strict";var OT=ft(),PT=ne(),LT=OT(PT,"Map");Dc.exports=LT});var Mc=u((Ek,Bc)=>{"use strict";var Nc=Sc(),CT=Zr(),qT=za();function UT(){this.size=0,this.__data__={hash:new Nc,map:new(qT||CT),string:new Nc}}Bc.exports=UT});var kc=u((Rk,Gc)=>{"use strict";function DT(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}Gc.exports=DT});var ea=u((xk,Fc)=>{"use strict";var NT=kc();function BT(e,t){var r=e.__data__;return NT(t)?r[typeof t=="string"?"string":"hash"]:r.map}Fc.exports=BT});var jc=u((_k,Qc)=>{"use strict";var MT=ea();function GT(e){var t=MT(this,e).delete(e);return this.size-=t?1:0,t}Qc.exports=GT});var $c=u((Ok,Wc)=>{"use strict";var kT=ea();function FT(e){return kT(this,e).get(e)}Wc.exports=FT});var Vc=u((Pk,Kc)=>{"use strict";var QT=ea();function jT(e){return QT(this,e).has(e)}Kc.exports=jT});var Hc=u((Lk,Yc)=>{"use strict";var WT=ea();function $T(e,t){var r=WT(this,e),a=r.size;return r.set(e,t),this.size+=r.size==a?0:1,this}Yc.exports=$T});var Ja=u((Ck,zc)=>{"use strict";var KT=Mc(),VT=jc(),YT=$c(),HT=Vc(),zT=Hc();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=KT;zt.prototype.delete=VT;zt.prototype.get=YT;zt.prototype.has=HT;zt.prototype.set=zT;zc.exports=zt});var Xc=u((qk,Jc)=>{"use strict";var JT="__lodash_hash_undefined__";function XT(e){return this.__data__.set(e,JT),this}Jc.exports=XT});var el=u((Uk,Zc)=>{"use strict";function ZT(e){return this.__data__.has(e)}Zc.exports=ZT});var To=u((Dk,tl)=>{"use strict";var ev=Ja(),tv=Xc(),rv=el();function Xa(e){var t=-1,r=e==null?0:e.length;for(this.__data__=new ev;++t<r;)this.add(e[t])}Xa.prototype.add=Xa.prototype.push=tv;Xa.prototype.has=rv;tl.exports=Xa});var al=u((Nk,rl)=>{"use strict";function av(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}rl.exports=av});var ol=u((Bk,nl)=>{"use strict";function nv(e){return e!==e}nl.exports=nv});var il=u((Mk,sl)=>{"use strict";function ov(e,t,r){for(var a=r-1,n=e.length;++a<n;)if(e[a]===t)return a;return-1}sl.exports=ov});var pl=u((Gk,ul)=>{"use strict";var sv=al(),iv=ol(),uv=il();function pv(e,t,r){return t===t?uv(e,t,r):sv(e,iv,r)}ul.exports=pv});var vo=u((kk,cl)=>{"use strict";var cv=pl();function lv(e,t){var r=e==null?0:e.length;return!!r&&cv(e,t,0)>-1}cl.exports=lv});var dl=u((Fk,ll)=>{"use strict";function dv(e,t,r){for(var a=-1,n=e==null?0:e.length;++a<n;)if(r(t,e[a]))return!0;return!1}ll.exports=dv});var Eo=u((Qk,fl)=>{"use strict";function fv(e,t){return e.has(t)}fl.exports=fv});var Ro=u((jk,ml)=>{"use strict";var mv=ft(),gv=ne(),yv=mv(gv,"Set");ml.exports=yv});var xo=u((Wk,gl)=>{"use strict";function hv(){}gl.exports=hv});var Za=u(($k,yl)=>{"use strict";function Av(e){var t=-1,r=Array(e.size);return e.forEach(function(a){r[++t]=a}),r}yl.exports=Av});var Al=u((Kk,hl)=>{"use strict";var _o=Ro(),bv=xo(),Iv=Za(),Sv=1/0,wv=_o&&1/Iv(new _o([,-0]))[1]==Sv?function(e){return new _o(e)}:bv;hl.exports=wv});var Il=u((Vk,bl)=>{"use strict";var Tv=To(),vv=vo(),Ev=dl(),Rv=Eo(),xv=Al(),_v=Za(),Ov=200;function Pv(e,t,r){var a=-1,n=vv,o=e.length,s=!0,i=[],p=i;if(r)s=!1,n=Ev;else if(o>=Ov){var f=t?null:xv(e);if(f)return _v(f);s=!1,n=Rv,p=new Tv}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}bl.exports=Pv});var en=u((Yk,Sl)=>{"use strict";var Lv=9007199254740991;function Cv(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=Lv}Sl.exports=Cv});var Jt=u((Hk,wl)=>{"use strict";var qv=zr(),Uv=en();function Dv(e){return e!=null&&Uv(e.length)&&!qv(e)}wl.exports=Dv});var Oo=u((zk,Tl)=>{"use strict";var Nv=Jt(),Bv=ge();function Mv(e){return Bv(e)&&Nv(e)}Tl.exports=Mv});var El=u((Jk,vl)=>{"use strict";var Gv=yo(),kv=wo(),Fv=Il(),Qv=Oo(),jv=kv(function(e){return Fv(Gv(e,1,Qv,!0))});vl.exports=jv});var xl=u((Xk,Rl)=>{"use strict";var Wv=Zr();function $v(){this.__data__=new Wv,this.size=0}Rl.exports=$v});var Ol=u((Zk,_l)=>{"use strict";function Kv(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r}_l.exports=Kv});var Ll=u((eF,Pl)=>{"use strict";function Vv(e){return this.__data__.get(e)}Pl.exports=Vv});var ql=u((tF,Cl)=>{"use strict";function Yv(e){return this.__data__.has(e)}Cl.exports=Yv});var Dl=u((rF,Ul)=>{"use strict";var Hv=Zr(),zv=za(),Jv=Ja(),Xv=200;function Zv(e,t){var r=this.__data__;if(r instanceof Hv){var a=r.__data__;if(!zv||a.length<Xv-1)return a.push([e,t]),this.size=++r.size,this;r=this.__data__=new Jv(a)}return r.set(e,t),this.size=r.size,this}Ul.exports=Zv});var ta=u((aF,Nl)=>{"use strict";var eE=Zr(),tE=xl(),rE=Ol(),aE=Ll(),nE=ql(),oE=Dl();function Xt(e){var t=this.__data__=new eE(e);this.size=t.size}Xt.prototype.clear=tE;Xt.prototype.delete=rE;Xt.prototype.get=aE;Xt.prototype.has=nE;Xt.prototype.set=oE;Nl.exports=Xt});var ra=u((nF,Ml)=>{"use strict";var Bl=Io();function sE(e,t,r){t=="__proto__"&&Bl?Bl(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}Ml.exports=sE});var Po=u((oF,Gl)=>{"use strict";var iE=ra(),uE=Yt();function pE(e,t,r){(r!==void 0&&!uE(e[t],r)||r===void 0&&!(t in e))&&iE(e,t,r)}Gl.exports=pE});var Fl=u((sF,kl)=>{"use strict";function cE(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}}kl.exports=cE});var Lo=u((iF,Ql)=>{"use strict";var lE=Fl(),dE=lE();Ql.exports=dE});var Co=u((aa,Zt)=>{"use strict";var fE=ne(),Kl=typeof aa=="object"&&aa&&!aa.nodeType&&aa,jl=Kl&&typeof Zt=="object"&&Zt&&!Zt.nodeType&&Zt,mE=jl&&jl.exports===Kl,Wl=mE?fE.Buffer:void 0,$l=Wl?Wl.allocUnsafe:void 0;function gE(e,t){if(t)return e.slice();var r=e.length,a=$l?$l(r):new e.constructor(r);return e.copy(a),a}Zt.exports=gE});var qo=u((uF,Vl)=>{"use strict";var yE=ne(),hE=yE.Uint8Array;Vl.exports=hE});var tn=u((pF,Hl)=>{"use strict";var Yl=qo();function AE(e){var t=new e.constructor(e.byteLength);return new Yl(t).set(new Yl(e)),t}Hl.exports=AE});var Uo=u((cF,zl)=>{"use strict";var bE=tn();function IE(e,t){var r=t?bE(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.length)}zl.exports=IE});var er=u((lF,Jl)=>{"use strict";function SE(e,t){var r=-1,a=e.length;for(t||(t=Array(a));++r<a;)t[r]=e[r];return t}Jl.exports=SE});var na=u((dF,Zl)=>{"use strict";var wE=Te(),Xl=Object.create,TE=function(){function e(){}return function(t){if(!wE(t))return{};if(Xl)return Xl(t);e.prototype=t;var r=new e;return e.prototype=void 0,r}}();Zl.exports=TE});var Do=u((fF,ed)=>{"use strict";function vE(e,t){return function(r){return e(t(r))}}ed.exports=vE});var rn=u((mF,td)=>{"use strict";var EE=Do(),RE=EE(Object.getPrototypeOf,Object);td.exports=RE});var an=u((gF,rd)=>{"use strict";var xE=Object.prototype;function _E(e){var t=e&&e.constructor,r=typeof t=="function"&&t.prototype||xE;return e===r}rd.exports=_E});var No=u((yF,ad)=>{"use strict";var OE=na(),PE=rn(),LE=an();function CE(e){return typeof e.constructor=="function"&&!LE(e)?OE(PE(e)):{}}ad.exports=CE});var od=u((hF,nd)=>{"use strict";function qE(){return!1}nd.exports=qE});var sa=u((oa,tr)=>{"use strict";var UE=ne(),DE=od(),ud=typeof oa=="object"&&oa&&!oa.nodeType&&oa,sd=ud&&typeof tr=="object"&&tr&&!tr.nodeType&&tr,NE=sd&&sd.exports===ud,id=NE?UE.Buffer:void 0,BE=id?id.isBuffer:void 0,ME=BE||DE;tr.exports=ME});var Bo=u((AF,cd)=>{"use strict";var GE=dt(),kE=rn(),FE=ge(),QE="[object Object]",jE=Function.prototype,WE=Object.prototype,pd=jE.toString,$E=WE.hasOwnProperty,KE=pd.call(Object);function VE(e){if(!FE(e)||GE(e)!=QE)return!1;var t=kE(e);if(t===null)return!0;var r=$E.call(t,"constructor")&&t.constructor;return typeof r=="function"&&r instanceof r&&pd.call(r)==KE}cd.exports=VE});var dd=u((bF,ld)=>{"use strict";var YE=dt(),HE=en(),zE=ge(),JE="[object Arguments]",XE="[object Array]",ZE="[object Boolean]",eR="[object Date]",tR="[object Error]",rR="[object Function]",aR="[object Map]",nR="[object Number]",oR="[object Object]",sR="[object RegExp]",iR="[object Set]",uR="[object String]",pR="[object WeakMap]",cR="[object ArrayBuffer]",lR="[object DataView]",dR="[object Float32Array]",fR="[object Float64Array]",mR="[object Int8Array]",gR="[object Int16Array]",yR="[object Int32Array]",hR="[object Uint8Array]",AR="[object Uint8ClampedArray]",bR="[object Uint16Array]",IR="[object Uint32Array]",B={};B[dR]=B[fR]=B[mR]=B[gR]=B[yR]=B[hR]=B[AR]=B[bR]=B[IR]=!0;B[JE]=B[XE]=B[cR]=B[ZE]=B[lR]=B[eR]=B[tR]=B[rR]=B[aR]=B[nR]=B[oR]=B[sR]=B[iR]=B[uR]=B[pR]=!1;function SR(e){return zE(e)&&HE(e.length)&&!!B[YE(e)]}ld.exports=SR});var nn=u((IF,fd)=>{"use strict";function wR(e){return function(t){return e(t)}}fd.exports=wR});var on=u((ia,rr)=>{"use strict";var TR=go(),md=typeof ia=="object"&&ia&&!ia.nodeType&&ia,ua=md&&typeof rr=="object"&&rr&&!rr.nodeType&&rr,vR=ua&&ua.exports===md,Mo=vR&&TR.process,ER=function(){try{var e=ua&&ua.require&&ua.require("util").types;return e||Mo&&Mo.binding&&Mo.binding("util")}catch{}}();rr.exports=ER});var sn=u((SF,hd)=>{"use strict";var RR=dd(),xR=nn(),gd=on(),yd=gd&&gd.isTypedArray,_R=yd?xR(yd):RR;hd.exports=_R});var Go=u((wF,Ad)=>{"use strict";function OR(e,t){if(!(t==="constructor"&&typeof e[t]=="function")&&t!="__proto__")return e[t]}Ad.exports=OR});var ko=u((TF,bd)=>{"use strict";var PR=ra(),LR=Yt(),CR=Object.prototype,qR=CR.hasOwnProperty;function UR(e,t,r){var a=e[t];(!(qR.call(e,t)&&LR(a,r))||r===void 0&&!(t in e))&&PR(e,t,r)}bd.exports=UR});var ar=u((vF,Id)=>{"use strict";var DR=ko(),NR=ra();function BR(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?NR(r,i,p):DR(r,i,p)}return r}Id.exports=BR});var wd=u((EF,Sd)=>{"use strict";function MR(e,t){for(var r=-1,a=Array(e);++r<e;)a[r]=t(r);return a}Sd.exports=MR});var pa=u((RF,Td)=>{"use strict";var GR=9007199254740991,kR=/^(?:0|[1-9]\d*)$/;function FR(e,t){var r=typeof e;return t=t??GR,!!t&&(r=="number"||r!="symbol"&&kR.test(e))&&e>-1&&e%1==0&&e<t}Td.exports=FR});var Fo=u((xF,vd)=>{"use strict";var QR=wd(),jR=Yr(),WR=ee(),$R=sa(),KR=pa(),VR=sn(),YR=Object.prototype,HR=YR.hasOwnProperty;function zR(e,t){var r=WR(e),a=!r&&jR(e),n=!r&&!a&&$R(e),o=!r&&!a&&!n&&VR(e),s=r||a||n||o,i=s?QR(e.length,String):[],p=i.length;for(var f in e)(t||HR.call(e,f))&&!(s&&(f=="length"||n&&(f=="offset"||f=="parent")||o&&(f=="buffer"||f=="byteLength"||f=="byteOffset")||KR(f,p)))&&i.push(f);return i}vd.exports=zR});var Rd=u((_F,Ed)=>{"use strict";function JR(e){var t=[];if(e!=null)for(var r in Object(e))t.push(r);return t}Ed.exports=JR});var _d=u((OF,xd)=>{"use strict";var XR=Te(),ZR=an(),ex=Rd(),tx=Object.prototype,rx=tx.hasOwnProperty;function ax(e){if(!XR(e))return ex(e);var t=ZR(e),r=[];for(var a in e)a=="constructor"&&(t||!rx.call(e,a))||r.push(a);return r}xd.exports=ax});var nr=u((PF,Od)=>{"use strict";var nx=Fo(),ox=_d(),sx=Jt();function ix(e){return sx(e)?nx(e,!0):ox(e)}Od.exports=ix});var Ld=u((LF,Pd)=>{"use strict";var ux=ar(),px=nr();function cx(e){return ux(e,px(e))}Pd.exports=cx});var Bd=u((CF,Nd)=>{"use strict";var Cd=Po(),lx=Co(),dx=Uo(),fx=er(),mx=No(),qd=Yr(),Ud=ee(),gx=Oo(),yx=sa(),hx=zr(),Ax=Te(),bx=Bo(),Ix=sn(),Dd=Go(),Sx=Ld();function wx(e,t,r,a,n,o,s){var i=Dd(e,r),p=Dd(t,r),f=s.get(p);if(f){Cd(e,r,f);return}var m=o?o(i,p,r+"",e,t,s):void 0,y=m===void 0;if(y){var g=Ud(p),S=!g&&yx(p),P=!g&&!S&&Ix(p);m=p,g||S||P?Ud(i)?m=i:gx(i)?m=fx(i):S?(y=!1,m=lx(p,!0)):P?(y=!1,m=dx(p,!0)):m=[]:bx(p)||qd(p)?(m=i,qd(i)?m=Sx(i):(!Ax(i)||hx(i))&&(m=mx(p))):y=!1}y&&(s.set(p,m),n(m,p,a,o,s),s.delete(p)),Cd(e,r,m)}Nd.exports=wx});var kd=u((qF,Gd)=>{"use strict";var Tx=ta(),vx=Po(),Ex=Lo(),Rx=Bd(),xx=Te(),_x=nr(),Ox=Go();function Md(e,t,r,a,n){e!==t&&Ex(t,function(o,s){if(n||(n=new Tx),xx(o))Rx(e,t,s,r,Md,a,n);else{var i=a?a(Ox(e,s),o,s+"",e,t,n):void 0;i===void 0&&(i=o),vx(e,s,i)}},_x)}Gd.exports=Md});var Qd=u((UF,Fd)=>{"use strict";var Px=Yt(),Lx=Jt(),Cx=pa(),qx=Te();function Ux(e,t,r){if(!qx(r))return!1;var a=typeof t;return(a=="number"?Lx(r)&&Cx(t,r.length):a=="string"&&t in r)?Px(r[t],e):!1}Fd.exports=Ux});var Wd=u((DF,jd)=>{"use strict";var Dx=wo(),Nx=Qd();function Bx(e){return Dx(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&&Nx(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})}jd.exports=Bx});var Qo=u((NF,$d)=>{"use strict";var Mx=kd(),Gx=Wd(),kx=Gx(function(e,t,r){Mx(e,t,r)});$d.exports=kx});var Vf=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 Ms=u((nj,Yf)=>{"use strict";Yf.exports={}});var Xf=u((oj,Jf)=>{"use strict";var J=Vf(),bO=Ms(),Hf=Array.prototype.push;function IO(e,t){return t==2?function(r,a){return e.apply(void 0,arguments)}:function(r){return e.apply(void 0,arguments)}}function Gs(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 SO(e){return function(t){return e({},t)}}function wO(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&&Hf.apply(s,o),t!=a&&Hf.apply(s,n.slice(t+1)),e.apply(this,s)}}function ks(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 Fs(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:bO,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,rI=g.toPath,bu=kt(J.aryMethod),aI={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:Gs(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 Fs(e,I(h),a)}}};function nI(I,h){if(s.cap){var b=J.iterateeRearg[I];if(b)return pI(h,b);var v=!n&&J.iterateeAry[I];if(v)return uI(h,v)}return h}function oI(I,h,b){return p||s.curry&&b>1?R(h,b):h}function Iu(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):wO(h,O)}return h}function Su(I,h,b){return s.rearg&&b>1&&(m||!J.skipRearg[I])?Ir(h,J.methodRearg[I]||J.aryRearg[b]):h}function sI(I,h){h=rI(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 iI(I){return fe.runInContext.convert(I)(void 0)}function wu(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 Fs(Ne,b,Ie,Be)}}function uI(I,h){return Tu(I,function(b){return typeof b=="function"?Gs(b,h):b})}function pI(I,h){return Tu(I,function(b){var v=h.length;return IO(Ir(Gs(b,v),h),v)})}function Tu(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 vu(I,h,b){var v,O=J.aliasToReal[I]||I,te=h,Ne=aI[O];return Ne?te=Ne(h):s.immutable&&(J.mutate.array[O]?te=ks(h,zf):J.mutate.object[O]?te=ks(h,SO(h)):J.mutate.set[O]&&(te=ks(h,sI))),E(bu,function(Ie){return E(J.aryMethod[Ie],function(Be){if(O==Be){var Eu=J.methodSpread[O],cI=Eu&&Eu.afterRearg;return v=cI?Iu(O,Su(O,te,Ie),Ie):Su(O,Iu(O,te,Ie),Ie),v=nI(O,v),v=oI(O,v,Ie),!1}}),!v}),v||(v=te),v==h&&(v=p?R(v,1):function(){return h.apply(this,arguments)}),v.convert=wu(O,h),v.placeholder=h.placeholder=b,v}if(!o)return vu(t,r,i);var fe=r,wr=[];return E(bu,function(I){E(J.aryMethod[I],function(h){var b=fe[J.remap[h]||h];b&&wr.push([h,vu(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=wu(I,h),wr.push([I,h])}}),E(wr,function(I){fe[I[0]]=I[1]}),fe.convert=iI,fe.placeholder=fe,E(kt(fe),function(I){E(J.realToAlias[I]||[],function(h){fe[h]=fe[I]})}),fe}Jf.exports=Fs});var Qs=u((sj,Zf)=>{"use strict";var TO=ft(),vO=ne(),EO=TO(vO,"WeakMap");Zf.exports=EO});var Ws=u((ij,tm)=>{"use strict";var em=Qs(),RO=em&&new em;tm.exports=RO});var $s=u((uj,am)=>{"use strict";var xO=Hr(),rm=Ws(),_O=rm?function(e,t){return rm.set(e,t),e}:xO;am.exports=_O});var Ia=u((pj,nm)=>{"use strict";var OO=na(),PO=Te();function LO(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=OO(e.prototype),a=e.apply(r,t);return PO(a)?a:r}}nm.exports=LO});var sm=u((cj,om)=>{"use strict";var CO=Ia(),qO=ne(),UO=1;function DO(e,t,r){var a=t&UO,n=CO(e);function o(){var s=this&&this!==qO&&this instanceof o?n:e;return s.apply(a?r:this,arguments)}return o}om.exports=DO});var Ks=u((lj,im)=>{"use strict";var NO=Math.max;function BO(e,t,r,a){for(var n=-1,o=e.length,s=r.length,i=-1,p=t.length,f=NO(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}im.exports=BO});var Vs=u((dj,um)=>{"use strict";var MO=Math.max;function GO(e,t,r,a){for(var n=-1,o=e.length,s=-1,i=r.length,p=-1,f=t.length,m=MO(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}um.exports=GO});var cm=u((fj,pm)=>{"use strict";function kO(e,t){for(var r=e.length,a=0;r--;)e[r]===t&&++a;return a}pm.exports=kO});var Rn=u((mj,lm)=>{"use strict";function FO(){}lm.exports=FO});var _n=u((gj,dm)=>{"use strict";var QO=na(),jO=Rn(),WO=4294967295;function xn(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=WO,this.__views__=[]}xn.prototype=QO(jO.prototype);xn.prototype.constructor=xn;dm.exports=xn});var Ys=u((yj,mm)=>{"use strict";var fm=Ws(),$O=xo(),KO=fm?function(e){return fm.get(e)}:$O;mm.exports=KO});var ym=u((hj,gm)=>{"use strict";var VO={};gm.exports=VO});var bm=u((Aj,Am)=>{"use strict";var hm=ym(),YO=Object.prototype,HO=YO.hasOwnProperty;function zO(e){for(var t=e.name+"",r=hm[t],a=HO.call(hm,t)?r.length:0;a--;){var n=r[a],o=n.func;if(o==null||o==e)return n.name}return t}Am.exports=zO});var Hs=u((bj,Im)=>{"use strict";var JO=na(),XO=Rn();function On(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=void 0}On.prototype=JO(XO.prototype);On.prototype.constructor=On;Im.exports=On});var wm=u((Ij,Sm)=>{"use strict";var ZO=_n(),eP=Hs(),tP=er();function rP(e){if(e instanceof ZO)return e.clone();var t=new eP(e.__wrapped__,e.__chain__);return t.__actions__=tP(e.__actions__),t.__index__=e.__index__,t.__values__=e.__values__,t}Sm.exports=rP});var Em=u((Sj,vm)=>{"use strict";var aP=_n(),Tm=Hs(),nP=Rn(),oP=ee(),sP=ge(),iP=wm(),uP=Object.prototype,pP=uP.hasOwnProperty;function Pn(e){if(sP(e)&&!oP(e)&&!(e instanceof aP)){if(e instanceof Tm)return e;if(pP.call(e,"__wrapped__"))return iP(e)}return new Tm(e)}Pn.prototype=nP.prototype;Pn.prototype.constructor=Pn;vm.exports=Pn});var xm=u((wj,Rm)=>{"use strict";var cP=_n(),lP=Ys(),dP=bm(),fP=Em();function mP(e){var t=dP(e),r=fP[t];if(typeof r!="function"||!(t in cP.prototype))return!1;if(e===r)return!0;var a=lP(r);return!!a&&e===a[0]}Rm.exports=mP});var zs=u((Tj,_m)=>{"use strict";var gP=$s(),yP=So(),hP=yP(gP);_m.exports=hP});var Pm=u((vj,Om)=>{"use strict";var AP=/\{\n\/\* \[wrapped with (.+)\] \*/,bP=/,? & /;function IP(e){var t=e.match(AP);return t?t[1].split(bP):[]}Om.exports=IP});var Cm=u((Ej,Lm)=>{"use strict";var SP=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/;function wP(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(SP,`{
1
+ "use strict";var fI=Object.create;var La=Object.defineProperty;var mI=Object.getOwnPropertyDescriptor;var gI=Object.getOwnPropertyNames;var yI=Object.getPrototypeOf,hI=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})},xu=(e,t,r,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of gI(t))!hI.call(e,n)&&n!==r&&La(e,n,{get:()=>t[n],enumerable:!(a=mI(t,n))||a.enumerable});return e};var C=(e,t,r)=>(r=e!=null?fI(yI(e)):{},xu(t||!e||!e.__esModule?La(r,"default",{value:e,enumerable:!0}):r,e)),AI=e=>xu(La({},"__esModule",{value:!0}),e);var Va=u((D0,dp)=>{"use strict";function gS(e,t){for(var r=-1,a=t.length,n=e.length;++r<a;)e[n+r]=t[r];return e}dp.exports=gS});var go=u((N0,fp)=>{"use strict";var yS=typeof global=="object"&&global&&global.Object===Object&&global;fp.exports=yS});var ne=u((B0,mp)=>{"use strict";var hS=go(),AS=typeof self=="object"&&self&&self.Object===Object&&self,bS=hS||AS||Function("return this")();mp.exports=bS});var Rt=u((M0,gp)=>{"use strict";var IS=ne(),SS=IS.Symbol;gp.exports=SS});var bp=u((G0,Ap)=>{"use strict";var yp=Rt(),hp=Object.prototype,wS=hp.hasOwnProperty,TS=hp.toString,Vr=yp?yp.toStringTag:void 0;function vS(e){var t=wS.call(e,Vr),r=e[Vr];try{e[Vr]=void 0;var a=!0}catch{}var n=TS.call(e);return a&&(t?e[Vr]=r:delete e[Vr]),n}Ap.exports=vS});var Sp=u((k0,Ip)=>{"use strict";var ES=Object.prototype,RS=ES.toString;function xS(e){return RS.call(e)}Ip.exports=xS});var dt=u((F0,vp)=>{"use strict";var wp=Rt(),_S=bp(),OS=Sp(),PS="[object Null]",LS="[object Undefined]",Tp=wp?wp.toStringTag:void 0;function CS(e){return e==null?e===void 0?LS:PS:Tp&&Tp in Object(e)?_S(e):OS(e)}vp.exports=CS});var ge=u((Q0,Ep)=>{"use strict";function qS(e){return e!=null&&typeof e=="object"}Ep.exports=qS});var xp=u((j0,Rp)=>{"use strict";var US=dt(),DS=ge(),NS="[object Arguments]";function BS(e){return DS(e)&&US(e)==NS}Rp.exports=BS});var Yr=u((W0,Pp)=>{"use strict";var _p=xp(),MS=ge(),Op=Object.prototype,GS=Op.hasOwnProperty,kS=Op.propertyIsEnumerable,FS=_p(function(){return arguments}())?_p:function(e){return MS(e)&&GS.call(e,"callee")&&!kS.call(e,"callee")};Pp.exports=FS});var ee=u(($0,Lp)=>{"use strict";var QS=Array.isArray;Lp.exports=QS});var Dp=u((K0,Up)=>{"use strict";var Cp=Rt(),jS=Yr(),WS=ee(),qp=Cp?Cp.isConcatSpreadable:void 0;function $S(e){return WS(e)||jS(e)||!!(qp&&e&&e[qp])}Up.exports=$S});var yo=u((V0,Bp)=>{"use strict";var KS=Va(),VS=Dp();function Np(e,t,r,a,n){var o=-1,s=e.length;for(r||(r=VS),n||(n=[]);++o<s;){var i=e[o];t>0&&r(i)?t>1?Np(i,t-1,r,a,n):KS(n,i):a||(n[n.length]=i)}return n}Bp.exports=Np});var Hr=u((Y0,Mp)=>{"use strict";function YS(e){return e}Mp.exports=YS});var Ya=u((H0,Gp)=>{"use strict";function HS(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)}Gp.exports=HS});var ho=u((z0,Fp)=>{"use strict";var zS=Ya(),kp=Math.max;function JS(e,t,r){return t=kp(t===void 0?e.length-1:t,0),function(){for(var a=arguments,n=-1,o=kp(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),zS(e,this,i)}}Fp.exports=JS});var jp=u((J0,Qp)=>{"use strict";function XS(e){return function(){return e}}Qp.exports=XS});var Te=u((X0,Wp)=>{"use strict";function ZS(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}Wp.exports=ZS});var zr=u((Z0,$p)=>{"use strict";var ew=dt(),tw=Te(),rw="[object AsyncFunction]",aw="[object Function]",nw="[object GeneratorFunction]",ow="[object Proxy]";function sw(e){if(!tw(e))return!1;var t=ew(e);return t==aw||t==nw||t==rw||t==ow}$p.exports=sw});var Vp=u((ek,Kp)=>{"use strict";var iw=ne(),uw=iw["__core-js_shared__"];Kp.exports=uw});var zp=u((tk,Hp)=>{"use strict";var Ao=Vp(),Yp=function(){var e=/[^.]+$/.exec(Ao&&Ao.keys&&Ao.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function pw(e){return!!Yp&&Yp in e}Hp.exports=pw});var bo=u((rk,Jp)=>{"use strict";var cw=Function.prototype,lw=cw.toString;function dw(e){if(e!=null){try{return lw.call(e)}catch{}try{return e+""}catch{}}return""}Jp.exports=dw});var Zp=u((ak,Xp)=>{"use strict";var fw=zr(),mw=zp(),gw=Te(),yw=bo(),hw=/[\\^$.*+?()[\]{}|]/g,Aw=/^\[object .+?Constructor\]$/,bw=Function.prototype,Iw=Object.prototype,Sw=bw.toString,ww=Iw.hasOwnProperty,Tw=RegExp("^"+Sw.call(ww).replace(hw,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function vw(e){if(!gw(e)||mw(e))return!1;var t=fw(e)?Tw:Aw;return t.test(yw(e))}Xp.exports=vw});var tc=u((nk,ec)=>{"use strict";function Ew(e,t){return e?.[t]}ec.exports=Ew});var ft=u((ok,rc)=>{"use strict";var Rw=Zp(),xw=tc();function _w(e,t){var r=xw(e,t);return Rw(r)?r:void 0}rc.exports=_w});var Io=u((sk,ac)=>{"use strict";var Ow=ft(),Pw=function(){try{var e=Ow(Object,"defineProperty");return e({},"",{}),e}catch{}}();ac.exports=Pw});var sc=u((ik,oc)=>{"use strict";var Lw=jp(),nc=Io(),Cw=Hr(),qw=nc?function(e,t){return nc(e,"toString",{configurable:!0,enumerable:!1,value:Lw(t),writable:!0})}:Cw;oc.exports=qw});var So=u((uk,ic)=>{"use strict";var Uw=800,Dw=16,Nw=Date.now;function Bw(e){var t=0,r=0;return function(){var a=Nw(),n=Dw-(a-r);if(r=a,n>0){if(++t>=Uw)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}ic.exports=Bw});var Ha=u((pk,uc)=>{"use strict";var Mw=sc(),Gw=So(),kw=Gw(Mw);uc.exports=kw});var wo=u((ck,pc)=>{"use strict";var Fw=Hr(),Qw=ho(),jw=Ha();function Ww(e,t){return jw(Qw(e,t,Fw),e+"")}pc.exports=Ww});var Jr=u((lk,cc)=>{"use strict";var $w=ft(),Kw=$w(Object,"create");cc.exports=Kw});var fc=u((dk,dc)=>{"use strict";var lc=Jr();function Vw(){this.__data__=lc?lc(null):{},this.size=0}dc.exports=Vw});var gc=u((fk,mc)=>{"use strict";function Yw(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}mc.exports=Yw});var hc=u((mk,yc)=>{"use strict";var Hw=Jr(),zw="__lodash_hash_undefined__",Jw=Object.prototype,Xw=Jw.hasOwnProperty;function Zw(e){var t=this.__data__;if(Hw){var r=t[e];return r===zw?void 0:r}return Xw.call(t,e)?t[e]:void 0}yc.exports=Zw});var bc=u((gk,Ac)=>{"use strict";var eT=Jr(),tT=Object.prototype,rT=tT.hasOwnProperty;function aT(e){var t=this.__data__;return eT?t[e]!==void 0:rT.call(t,e)}Ac.exports=aT});var Sc=u((yk,Ic)=>{"use strict";var nT=Jr(),oT="__lodash_hash_undefined__";function sT(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=nT&&t===void 0?oT:t,this}Ic.exports=sT});var Tc=u((hk,wc)=>{"use strict";var iT=fc(),uT=gc(),pT=hc(),cT=bc(),lT=Sc();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=iT;Vt.prototype.delete=uT;Vt.prototype.get=pT;Vt.prototype.has=cT;Vt.prototype.set=lT;wc.exports=Vt});var Ec=u((Ak,vc)=>{"use strict";function dT(){this.__data__=[],this.size=0}vc.exports=dT});var Yt=u((bk,Rc)=>{"use strict";function fT(e,t){return e===t||e!==e&&t!==t}Rc.exports=fT});var Xr=u((Ik,xc)=>{"use strict";var mT=Yt();function gT(e,t){for(var r=e.length;r--;)if(mT(e[r][0],t))return r;return-1}xc.exports=gT});var Oc=u((Sk,_c)=>{"use strict";var yT=Xr(),hT=Array.prototype,AT=hT.splice;function bT(e){var t=this.__data__,r=yT(t,e);if(r<0)return!1;var a=t.length-1;return r==a?t.pop():AT.call(t,r,1),--this.size,!0}_c.exports=bT});var Lc=u((wk,Pc)=>{"use strict";var IT=Xr();function ST(e){var t=this.__data__,r=IT(t,e);return r<0?void 0:t[r][1]}Pc.exports=ST});var qc=u((Tk,Cc)=>{"use strict";var wT=Xr();function TT(e){return wT(this.__data__,e)>-1}Cc.exports=TT});var Dc=u((vk,Uc)=>{"use strict";var vT=Xr();function ET(e,t){var r=this.__data__,a=vT(r,e);return a<0?(++this.size,r.push([e,t])):r[a][1]=t,this}Uc.exports=ET});var Zr=u((Ek,Nc)=>{"use strict";var RT=Ec(),xT=Oc(),_T=Lc(),OT=qc(),PT=Dc();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=RT;Ht.prototype.delete=xT;Ht.prototype.get=_T;Ht.prototype.has=OT;Ht.prototype.set=PT;Nc.exports=Ht});var za=u((Rk,Bc)=>{"use strict";var LT=ft(),CT=ne(),qT=LT(CT,"Map");Bc.exports=qT});var kc=u((xk,Gc)=>{"use strict";var Mc=Tc(),UT=Zr(),DT=za();function NT(){this.size=0,this.__data__={hash:new Mc,map:new(DT||UT),string:new Mc}}Gc.exports=NT});var Qc=u((_k,Fc)=>{"use strict";function BT(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}Fc.exports=BT});var ea=u((Ok,jc)=>{"use strict";var MT=Qc();function GT(e,t){var r=e.__data__;return MT(t)?r[typeof t=="string"?"string":"hash"]:r.map}jc.exports=GT});var $c=u((Pk,Wc)=>{"use strict";var kT=ea();function FT(e){var t=kT(this,e).delete(e);return this.size-=t?1:0,t}Wc.exports=FT});var Vc=u((Lk,Kc)=>{"use strict";var QT=ea();function jT(e){return QT(this,e).get(e)}Kc.exports=jT});var Hc=u((Ck,Yc)=>{"use strict";var WT=ea();function $T(e){return WT(this,e).has(e)}Yc.exports=$T});var Jc=u((qk,zc)=>{"use strict";var KT=ea();function VT(e,t){var r=KT(this,e),a=r.size;return r.set(e,t),this.size+=r.size==a?0:1,this}zc.exports=VT});var Ja=u((Uk,Xc)=>{"use strict";var YT=kc(),HT=$c(),zT=Vc(),JT=Hc(),XT=Jc();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=YT;zt.prototype.delete=HT;zt.prototype.get=zT;zt.prototype.has=JT;zt.prototype.set=XT;Xc.exports=zt});var el=u((Dk,Zc)=>{"use strict";var ZT="__lodash_hash_undefined__";function ev(e){return this.__data__.set(e,ZT),this}Zc.exports=ev});var rl=u((Nk,tl)=>{"use strict";function tv(e){return this.__data__.has(e)}tl.exports=tv});var To=u((Bk,al)=>{"use strict";var rv=Ja(),av=el(),nv=rl();function Xa(e){var t=-1,r=e==null?0:e.length;for(this.__data__=new rv;++t<r;)this.add(e[t])}Xa.prototype.add=Xa.prototype.push=av;Xa.prototype.has=nv;al.exports=Xa});var ol=u((Mk,nl)=>{"use strict";function ov(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}nl.exports=ov});var il=u((Gk,sl)=>{"use strict";function sv(e){return e!==e}sl.exports=sv});var pl=u((kk,ul)=>{"use strict";function iv(e,t,r){for(var a=r-1,n=e.length;++a<n;)if(e[a]===t)return a;return-1}ul.exports=iv});var ll=u((Fk,cl)=>{"use strict";var uv=ol(),pv=il(),cv=pl();function lv(e,t,r){return t===t?cv(e,t,r):uv(e,pv,r)}cl.exports=lv});var vo=u((Qk,dl)=>{"use strict";var dv=ll();function fv(e,t){var r=e==null?0:e.length;return!!r&&dv(e,t,0)>-1}dl.exports=fv});var ml=u((jk,fl)=>{"use strict";function mv(e,t,r){for(var a=-1,n=e==null?0:e.length;++a<n;)if(r(t,e[a]))return!0;return!1}fl.exports=mv});var Eo=u((Wk,gl)=>{"use strict";function gv(e,t){return e.has(t)}gl.exports=gv});var Ro=u(($k,yl)=>{"use strict";var yv=ft(),hv=ne(),Av=yv(hv,"Set");yl.exports=Av});var xo=u((Kk,hl)=>{"use strict";function bv(){}hl.exports=bv});var Za=u((Vk,Al)=>{"use strict";function Iv(e){var t=-1,r=Array(e.size);return e.forEach(function(a){r[++t]=a}),r}Al.exports=Iv});var Il=u((Yk,bl)=>{"use strict";var _o=Ro(),Sv=xo(),wv=Za(),Tv=1/0,vv=_o&&1/wv(new _o([,-0]))[1]==Tv?function(e){return new _o(e)}:Sv;bl.exports=vv});var wl=u((Hk,Sl)=>{"use strict";var Ev=To(),Rv=vo(),xv=ml(),_v=Eo(),Ov=Il(),Pv=Za(),Lv=200;function Cv(e,t,r){var a=-1,n=Rv,o=e.length,s=!0,i=[],p=i;if(r)s=!1,n=xv;else if(o>=Lv){var f=t?null:Ov(e);if(f)return Pv(f);s=!1,n=_v,p=new Ev}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}Sl.exports=Cv});var en=u((zk,Tl)=>{"use strict";var qv=9007199254740991;function Uv(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=qv}Tl.exports=Uv});var Jt=u((Jk,vl)=>{"use strict";var Dv=zr(),Nv=en();function Bv(e){return e!=null&&Nv(e.length)&&!Dv(e)}vl.exports=Bv});var Oo=u((Xk,El)=>{"use strict";var Mv=Jt(),Gv=ge();function kv(e){return Gv(e)&&Mv(e)}El.exports=kv});var xl=u((Zk,Rl)=>{"use strict";var Fv=yo(),Qv=wo(),jv=wl(),Wv=Oo(),$v=Qv(function(e){return jv(Fv(e,1,Wv,!0))});Rl.exports=$v});var Ol=u((eF,_l)=>{"use strict";var Kv=Zr();function Vv(){this.__data__=new Kv,this.size=0}_l.exports=Vv});var Ll=u((tF,Pl)=>{"use strict";function Yv(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r}Pl.exports=Yv});var ql=u((rF,Cl)=>{"use strict";function Hv(e){return this.__data__.get(e)}Cl.exports=Hv});var Dl=u((aF,Ul)=>{"use strict";function zv(e){return this.__data__.has(e)}Ul.exports=zv});var Bl=u((nF,Nl)=>{"use strict";var Jv=Zr(),Xv=za(),Zv=Ja(),eE=200;function tE(e,t){var r=this.__data__;if(r instanceof Jv){var a=r.__data__;if(!Xv||a.length<eE-1)return a.push([e,t]),this.size=++r.size,this;r=this.__data__=new Zv(a)}return r.set(e,t),this.size=r.size,this}Nl.exports=tE});var ta=u((oF,Ml)=>{"use strict";var rE=Zr(),aE=Ol(),nE=Ll(),oE=ql(),sE=Dl(),iE=Bl();function Xt(e){var t=this.__data__=new rE(e);this.size=t.size}Xt.prototype.clear=aE;Xt.prototype.delete=nE;Xt.prototype.get=oE;Xt.prototype.has=sE;Xt.prototype.set=iE;Ml.exports=Xt});var ra=u((sF,kl)=>{"use strict";var Gl=Io();function uE(e,t,r){t=="__proto__"&&Gl?Gl(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}kl.exports=uE});var Po=u((iF,Fl)=>{"use strict";var pE=ra(),cE=Yt();function lE(e,t,r){(r!==void 0&&!cE(e[t],r)||r===void 0&&!(t in e))&&pE(e,t,r)}Fl.exports=lE});var jl=u((uF,Ql)=>{"use strict";function dE(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}}Ql.exports=dE});var Lo=u((pF,Wl)=>{"use strict";var fE=jl(),mE=fE();Wl.exports=mE});var Co=u((aa,Zt)=>{"use strict";var gE=ne(),Yl=typeof aa=="object"&&aa&&!aa.nodeType&&aa,$l=Yl&&typeof Zt=="object"&&Zt&&!Zt.nodeType&&Zt,yE=$l&&$l.exports===Yl,Kl=yE?gE.Buffer:void 0,Vl=Kl?Kl.allocUnsafe:void 0;function hE(e,t){if(t)return e.slice();var r=e.length,a=Vl?Vl(r):new e.constructor(r);return e.copy(a),a}Zt.exports=hE});var qo=u((cF,Hl)=>{"use strict";var AE=ne(),bE=AE.Uint8Array;Hl.exports=bE});var tn=u((lF,Jl)=>{"use strict";var zl=qo();function IE(e){var t=new e.constructor(e.byteLength);return new zl(t).set(new zl(e)),t}Jl.exports=IE});var Uo=u((dF,Xl)=>{"use strict";var SE=tn();function wE(e,t){var r=t?SE(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.length)}Xl.exports=wE});var er=u((fF,Zl)=>{"use strict";function TE(e,t){var r=-1,a=e.length;for(t||(t=Array(a));++r<a;)t[r]=e[r];return t}Zl.exports=TE});var na=u((mF,td)=>{"use strict";var vE=Te(),ed=Object.create,EE=function(){function e(){}return function(t){if(!vE(t))return{};if(ed)return ed(t);e.prototype=t;var r=new e;return e.prototype=void 0,r}}();td.exports=EE});var Do=u((gF,rd)=>{"use strict";function RE(e,t){return function(r){return e(t(r))}}rd.exports=RE});var rn=u((yF,ad)=>{"use strict";var xE=Do(),_E=xE(Object.getPrototypeOf,Object);ad.exports=_E});var an=u((hF,nd)=>{"use strict";var OE=Object.prototype;function PE(e){var t=e&&e.constructor,r=typeof t=="function"&&t.prototype||OE;return e===r}nd.exports=PE});var No=u((AF,od)=>{"use strict";var LE=na(),CE=rn(),qE=an();function UE(e){return typeof e.constructor=="function"&&!qE(e)?LE(CE(e)):{}}od.exports=UE});var id=u((bF,sd)=>{"use strict";function DE(){return!1}sd.exports=DE});var sa=u((oa,tr)=>{"use strict";var NE=ne(),BE=id(),cd=typeof oa=="object"&&oa&&!oa.nodeType&&oa,ud=cd&&typeof tr=="object"&&tr&&!tr.nodeType&&tr,ME=ud&&ud.exports===cd,pd=ME?NE.Buffer:void 0,GE=pd?pd.isBuffer:void 0,kE=GE||BE;tr.exports=kE});var Bo=u((IF,dd)=>{"use strict";var FE=dt(),QE=rn(),jE=ge(),WE="[object Object]",$E=Function.prototype,KE=Object.prototype,ld=$E.toString,VE=KE.hasOwnProperty,YE=ld.call(Object);function HE(e){if(!jE(e)||FE(e)!=WE)return!1;var t=QE(e);if(t===null)return!0;var r=VE.call(t,"constructor")&&t.constructor;return typeof r=="function"&&r instanceof r&&ld.call(r)==YE}dd.exports=HE});var md=u((SF,fd)=>{"use strict";var zE=dt(),JE=en(),XE=ge(),ZE="[object Arguments]",eR="[object Array]",tR="[object Boolean]",rR="[object Date]",aR="[object Error]",nR="[object Function]",oR="[object Map]",sR="[object Number]",iR="[object Object]",uR="[object RegExp]",pR="[object Set]",cR="[object String]",lR="[object WeakMap]",dR="[object ArrayBuffer]",fR="[object DataView]",mR="[object Float32Array]",gR="[object Float64Array]",yR="[object Int8Array]",hR="[object Int16Array]",AR="[object Int32Array]",bR="[object Uint8Array]",IR="[object Uint8ClampedArray]",SR="[object Uint16Array]",wR="[object Uint32Array]",B={};B[mR]=B[gR]=B[yR]=B[hR]=B[AR]=B[bR]=B[IR]=B[SR]=B[wR]=!0;B[ZE]=B[eR]=B[dR]=B[tR]=B[fR]=B[rR]=B[aR]=B[nR]=B[oR]=B[sR]=B[iR]=B[uR]=B[pR]=B[cR]=B[lR]=!1;function TR(e){return XE(e)&&JE(e.length)&&!!B[zE(e)]}fd.exports=TR});var nn=u((wF,gd)=>{"use strict";function vR(e){return function(t){return e(t)}}gd.exports=vR});var on=u((ia,rr)=>{"use strict";var ER=go(),yd=typeof ia=="object"&&ia&&!ia.nodeType&&ia,ua=yd&&typeof rr=="object"&&rr&&!rr.nodeType&&rr,RR=ua&&ua.exports===yd,Mo=RR&&ER.process,xR=function(){try{var e=ua&&ua.require&&ua.require("util").types;return e||Mo&&Mo.binding&&Mo.binding("util")}catch{}}();rr.exports=xR});var sn=u((TF,bd)=>{"use strict";var _R=md(),OR=nn(),hd=on(),Ad=hd&&hd.isTypedArray,PR=Ad?OR(Ad):_R;bd.exports=PR});var Go=u((vF,Id)=>{"use strict";function LR(e,t){if(!(t==="constructor"&&typeof e[t]=="function")&&t!="__proto__")return e[t]}Id.exports=LR});var ko=u((EF,Sd)=>{"use strict";var CR=ra(),qR=Yt(),UR=Object.prototype,DR=UR.hasOwnProperty;function NR(e,t,r){var a=e[t];(!(DR.call(e,t)&&qR(a,r))||r===void 0&&!(t in e))&&CR(e,t,r)}Sd.exports=NR});var ar=u((RF,wd)=>{"use strict";var BR=ko(),MR=ra();function GR(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?MR(r,i,p):BR(r,i,p)}return r}wd.exports=GR});var vd=u((xF,Td)=>{"use strict";function kR(e,t){for(var r=-1,a=Array(e);++r<e;)a[r]=t(r);return a}Td.exports=kR});var pa=u((_F,Ed)=>{"use strict";var FR=9007199254740991,QR=/^(?:0|[1-9]\d*)$/;function jR(e,t){var r=typeof e;return t=t??FR,!!t&&(r=="number"||r!="symbol"&&QR.test(e))&&e>-1&&e%1==0&&e<t}Ed.exports=jR});var Fo=u((OF,Rd)=>{"use strict";var WR=vd(),$R=Yr(),KR=ee(),VR=sa(),YR=pa(),HR=sn(),zR=Object.prototype,JR=zR.hasOwnProperty;function XR(e,t){var r=KR(e),a=!r&&$R(e),n=!r&&!a&&VR(e),o=!r&&!a&&!n&&HR(e),s=r||a||n||o,i=s?WR(e.length,String):[],p=i.length;for(var f in e)(t||JR.call(e,f))&&!(s&&(f=="length"||n&&(f=="offset"||f=="parent")||o&&(f=="buffer"||f=="byteLength"||f=="byteOffset")||YR(f,p)))&&i.push(f);return i}Rd.exports=XR});var _d=u((PF,xd)=>{"use strict";function ZR(e){var t=[];if(e!=null)for(var r in Object(e))t.push(r);return t}xd.exports=ZR});var Pd=u((LF,Od)=>{"use strict";var ex=Te(),tx=an(),rx=_d(),ax=Object.prototype,nx=ax.hasOwnProperty;function ox(e){if(!ex(e))return rx(e);var t=tx(e),r=[];for(var a in e)a=="constructor"&&(t||!nx.call(e,a))||r.push(a);return r}Od.exports=ox});var nr=u((CF,Ld)=>{"use strict";var sx=Fo(),ix=Pd(),ux=Jt();function px(e){return ux(e)?sx(e,!0):ix(e)}Ld.exports=px});var qd=u((qF,Cd)=>{"use strict";var cx=ar(),lx=nr();function dx(e){return cx(e,lx(e))}Cd.exports=dx});var Gd=u((UF,Md)=>{"use strict";var Ud=Po(),fx=Co(),mx=Uo(),gx=er(),yx=No(),Dd=Yr(),Nd=ee(),hx=Oo(),Ax=sa(),bx=zr(),Ix=Te(),Sx=Bo(),wx=sn(),Bd=Go(),Tx=qd();function vx(e,t,r,a,n,o,s){var i=Bd(e,r),p=Bd(t,r),f=s.get(p);if(f){Ud(e,r,f);return}var m=o?o(i,p,r+"",e,t,s):void 0,y=m===void 0;if(y){var g=Nd(p),S=!g&&Ax(p),P=!g&&!S&&wx(p);m=p,g||S||P?Nd(i)?m=i:hx(i)?m=gx(i):S?(y=!1,m=fx(p,!0)):P?(y=!1,m=mx(p,!0)):m=[]:Sx(p)||Dd(p)?(m=i,Dd(i)?m=Tx(i):(!Ix(i)||bx(i))&&(m=yx(p))):y=!1}y&&(s.set(p,m),n(m,p,a,o,s),s.delete(p)),Ud(e,r,m)}Md.exports=vx});var Qd=u((DF,Fd)=>{"use strict";var Ex=ta(),Rx=Po(),xx=Lo(),_x=Gd(),Ox=Te(),Px=nr(),Lx=Go();function kd(e,t,r,a,n){e!==t&&xx(t,function(o,s){if(n||(n=new Ex),Ox(o))_x(e,t,s,r,kd,a,n);else{var i=a?a(Lx(e,s),o,s+"",e,t,n):void 0;i===void 0&&(i=o),Rx(e,s,i)}},Px)}Fd.exports=kd});var Wd=u((NF,jd)=>{"use strict";var Cx=Yt(),qx=Jt(),Ux=pa(),Dx=Te();function Nx(e,t,r){if(!Dx(r))return!1;var a=typeof t;return(a=="number"?qx(r)&&Ux(t,r.length):a=="string"&&t in r)?Cx(r[t],e):!1}jd.exports=Nx});var Kd=u((BF,$d)=>{"use strict";var Bx=wo(),Mx=Wd();function Gx(e){return Bx(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&&Mx(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})}$d.exports=Gx});var Qo=u((MF,Vd)=>{"use strict";var kx=Qd(),Fx=Kd(),Qx=Fx(function(e,t,r){kx(e,t,r)});Vd.exports=Qx});var Hf=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 Ms=u((sj,zf)=>{"use strict";zf.exports={}});var em=u((ij,Zf)=>{"use strict";var J=Hf(),SO=Ms(),Jf=Array.prototype.push;function wO(e,t){return t==2?function(r,a){return e.apply(void 0,arguments)}:function(r){return e.apply(void 0,arguments)}}function Gs(e,t){return t==2?function(r,a){return e(r,a)}:function(r){return e(r)}}function Xf(e){for(var t=e?e.length:0,r=Array(t);t--;)r[t]=e[t];return r}function TO(e){return function(t){return e({},t)}}function vO(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&&Jf.apply(s,o),t!=a&&Jf.apply(s,n.slice(t+1)),e.apply(this,s)}}function ks(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 Fs(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:SO,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,nI=g.toPath,Iu=kt(J.aryMethod),oI={castArray:function(I){return function(){var h=arguments[0];return q(h)?I(Xf(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:Gs(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 Fs(e,I(h),a)}}};function sI(I,h){if(s.cap){var b=J.iterateeRearg[I];if(b)return lI(h,b);var v=!n&&J.iterateeAry[I];if(v)return cI(h,v)}return h}function iI(I,h,b){return p||s.curry&&b>1?R(h,b):h}function Su(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):vO(h,O)}return h}function wu(I,h,b){return s.rearg&&b>1&&(m||!J.skipRearg[I])?Ir(h,J.methodRearg[I]||J.aryRearg[b]):h}function uI(I,h){h=nI(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 pI(I){return fe.runInContext.convert(I)(void 0)}function Tu(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 Fs(Ne,b,Ie,Be)}}function cI(I,h){return vu(I,function(b){return typeof b=="function"?Gs(b,h):b})}function lI(I,h){return vu(I,function(b){var v=h.length;return wO(Ir(Gs(b,v),h),v)})}function vu(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 Eu(I,h,b){var v,O=J.aliasToReal[I]||I,te=h,Ne=oI[O];return Ne?te=Ne(h):s.immutable&&(J.mutate.array[O]?te=ks(h,Xf):J.mutate.object[O]?te=ks(h,TO(h)):J.mutate.set[O]&&(te=ks(h,uI))),E(Iu,function(Ie){return E(J.aryMethod[Ie],function(Be){if(O==Be){var Ru=J.methodSpread[O],dI=Ru&&Ru.afterRearg;return v=dI?Su(O,wu(O,te,Ie),Ie):wu(O,Su(O,te,Ie),Ie),v=sI(O,v),v=iI(O,v,Ie),!1}}),!v}),v||(v=te),v==h&&(v=p?R(v,1):function(){return h.apply(this,arguments)}),v.convert=Tu(O,h),v.placeholder=h.placeholder=b,v}if(!o)return Eu(t,r,i);var fe=r,wr=[];return E(Iu,function(I){E(J.aryMethod[I],function(h){var b=fe[J.remap[h]||h];b&&wr.push([h,Eu(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=Tu(I,h),wr.push([I,h])}}),E(wr,function(I){fe[I[0]]=I[1]}),fe.convert=pI,fe.placeholder=fe,E(kt(fe),function(I){E(J.realToAlias[I]||[],function(h){fe[h]=fe[I]})}),fe}Zf.exports=Fs});var Qs=u((uj,tm)=>{"use strict";var EO=ft(),RO=ne(),xO=EO(RO,"WeakMap");tm.exports=xO});var Ws=u((pj,am)=>{"use strict";var rm=Qs(),_O=rm&&new rm;am.exports=_O});var $s=u((cj,om)=>{"use strict";var OO=Hr(),nm=Ws(),PO=nm?function(e,t){return nm.set(e,t),e}:OO;om.exports=PO});var Ia=u((lj,sm)=>{"use strict";var LO=na(),CO=Te();function qO(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=LO(e.prototype),a=e.apply(r,t);return CO(a)?a:r}}sm.exports=qO});var um=u((dj,im)=>{"use strict";var UO=Ia(),DO=ne(),NO=1;function BO(e,t,r){var a=t&NO,n=UO(e);function o(){var s=this&&this!==DO&&this instanceof o?n:e;return s.apply(a?r:this,arguments)}return o}im.exports=BO});var Ks=u((fj,pm)=>{"use strict";var MO=Math.max;function GO(e,t,r,a){for(var n=-1,o=e.length,s=r.length,i=-1,p=t.length,f=MO(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}pm.exports=GO});var Vs=u((mj,cm)=>{"use strict";var kO=Math.max;function FO(e,t,r,a){for(var n=-1,o=e.length,s=-1,i=r.length,p=-1,f=t.length,m=kO(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}cm.exports=FO});var dm=u((gj,lm)=>{"use strict";function QO(e,t){for(var r=e.length,a=0;r--;)e[r]===t&&++a;return a}lm.exports=QO});var Rn=u((yj,fm)=>{"use strict";function jO(){}fm.exports=jO});var _n=u((hj,mm)=>{"use strict";var WO=na(),$O=Rn(),KO=4294967295;function xn(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=KO,this.__views__=[]}xn.prototype=WO($O.prototype);xn.prototype.constructor=xn;mm.exports=xn});var Ys=u((Aj,ym)=>{"use strict";var gm=Ws(),VO=xo(),YO=gm?function(e){return gm.get(e)}:VO;ym.exports=YO});var Am=u((bj,hm)=>{"use strict";var HO={};hm.exports=HO});var Sm=u((Ij,Im)=>{"use strict";var bm=Am(),zO=Object.prototype,JO=zO.hasOwnProperty;function XO(e){for(var t=e.name+"",r=bm[t],a=JO.call(bm,t)?r.length:0;a--;){var n=r[a],o=n.func;if(o==null||o==e)return n.name}return t}Im.exports=XO});var Hs=u((Sj,wm)=>{"use strict";var ZO=na(),eP=Rn();function On(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=void 0}On.prototype=ZO(eP.prototype);On.prototype.constructor=On;wm.exports=On});var vm=u((wj,Tm)=>{"use strict";var tP=_n(),rP=Hs(),aP=er();function nP(e){if(e instanceof tP)return e.clone();var t=new rP(e.__wrapped__,e.__chain__);return t.__actions__=aP(e.__actions__),t.__index__=e.__index__,t.__values__=e.__values__,t}Tm.exports=nP});var xm=u((Tj,Rm)=>{"use strict";var oP=_n(),Em=Hs(),sP=Rn(),iP=ee(),uP=ge(),pP=vm(),cP=Object.prototype,lP=cP.hasOwnProperty;function Pn(e){if(uP(e)&&!iP(e)&&!(e instanceof oP)){if(e instanceof Em)return e;if(lP.call(e,"__wrapped__"))return pP(e)}return new Em(e)}Pn.prototype=sP.prototype;Pn.prototype.constructor=Pn;Rm.exports=Pn});var Om=u((vj,_m)=>{"use strict";var dP=_n(),fP=Ys(),mP=Sm(),gP=xm();function yP(e){var t=mP(e),r=gP[t];if(typeof r!="function"||!(t in dP.prototype))return!1;if(e===r)return!0;var a=fP(r);return!!a&&e===a[0]}_m.exports=yP});var zs=u((Ej,Pm)=>{"use strict";var hP=$s(),AP=So(),bP=AP(hP);Pm.exports=bP});var Cm=u((Rj,Lm)=>{"use strict";var IP=/\{\n\/\* \[wrapped with (.+)\] \*/,SP=/,? & /;function wP(e){var t=e.match(IP);return t?t[1].split(SP):[]}Lm.exports=wP});var Um=u((xj,qm)=>{"use strict";var TP=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/;function vP(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(TP,`{
2
2
  /* [wrapped with `+t+`] */
3
- `)}Lm.exports=wP});var Ln=u((Rj,qm)=>{"use strict";function TP(e,t){for(var r=-1,a=e==null?0:e.length;++r<a&&t(e[r],r,e)!==!1;);return e}qm.exports=TP});var Dm=u((xj,Um)=>{"use strict";var vP=Ln(),EP=vo(),RP=1,xP=2,_P=8,OP=16,PP=32,LP=64,CP=128,qP=256,UP=512,DP=[["ary",CP],["bind",RP],["bindKey",xP],["curry",_P],["curryRight",OP],["flip",UP],["partial",PP],["partialRight",LP],["rearg",qP]];function NP(e,t){return vP(DP,function(r){var a="_."+r[0];t&r[1]&&!EP(e,a)&&e.push(a)}),e.sort()}Um.exports=NP});var Js=u((_j,Nm)=>{"use strict";var BP=Pm(),MP=Cm(),GP=Ha(),kP=Dm();function FP(e,t,r){var a=t+"";return GP(e,MP(a,kP(BP(a),r)))}Nm.exports=FP});var Xs=u((Oj,Gm)=>{"use strict";var QP=xm(),jP=zs(),WP=Js(),$P=1,KP=2,VP=4,YP=8,Bm=32,Mm=64;function HP(e,t,r,a,n,o,s,i,p,f){var m=t&YP,y=m?s:void 0,g=m?void 0:s,S=m?o:void 0,P=m?void 0:o;t|=m?Bm:Mm,t&=~(m?Mm:Bm),t&VP||(t&=~($P|KP));var x=[e,t,n,S,y,P,g,i,p,f],R=r.apply(void 0,x);return QP(e)&&jP(R,x),R.placeholder=a,WP(R,e,t)}Gm.exports=HP});var Zs=u((Pj,km)=>{"use strict";function zP(e){var t=e;return t.placeholder}km.exports=zP});var Qm=u((Lj,Fm)=>{"use strict";var JP=er(),XP=pa(),ZP=Math.min;function eL(e,t){for(var r=e.length,a=ZP(t.length,r),n=JP(e);a--;){var o=t[a];e[a]=XP(o,r)?n[o]:void 0}return e}Fm.exports=eL});var Cn=u((Cj,Wm)=>{"use strict";var jm="__lodash_placeholder__";function tL(e,t){for(var r=-1,a=e.length,n=0,o=[];++r<a;){var s=e[r];(s===t||s===jm)&&(e[r]=jm,o[n++]=r)}return o}Wm.exports=tL});var ei=u((qj,Vm)=>{"use strict";var rL=Ks(),aL=Vs(),nL=cm(),$m=Ia(),oL=Xs(),sL=Zs(),iL=Qm(),uL=Cn(),pL=ne(),cL=1,lL=2,dL=8,fL=16,mL=128,gL=512;function Km(e,t,r,a,n,o,s,i,p,f){var m=t&mL,y=t&cL,g=t&lL,S=t&(dL|fL),P=t&gL,x=g?void 0:$m(e);function R(){for(var E=arguments.length,q=Array(E),xe=E;xe--;)q[xe]=arguments[xe];if(S)var be=sL(R),it=nL(q,be);if(a&&(q=rL(q,a,n,S)),o&&(q=aL(q,o,s,S)),E-=it,S&&E<f){var kt=uL(q,be);return oL(e,t,Km,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=iL(q,i):P&&E>1&&q.reverse(),m&&p<E&&(q.length=p),this&&this!==pL&&this instanceof R&&(Sr=x||$m(Sr)),Sr.apply(Ir,q)}return R}Vm.exports=Km});var Hm=u((Uj,Ym)=>{"use strict";var yL=Ya(),hL=Ia(),AL=ei(),bL=Xs(),IL=Zs(),SL=Cn(),wL=ne();function TL(e,t,r){var a=hL(e);function n(){for(var o=arguments.length,s=Array(o),i=o,p=IL(n);i--;)s[i]=arguments[i];var f=o<3&&s[0]!==p&&s[o-1]!==p?[]:SL(s,p);if(o-=f.length,o<r)return bL(e,t,AL,n.placeholder,void 0,s,f,void 0,void 0,r-o);var m=this&&this!==wL&&this instanceof n?a:e;return yL(m,this,s)}return n}Ym.exports=TL});var Jm=u((Dj,zm)=>{"use strict";var vL=Ya(),EL=Ia(),RL=ne(),xL=1;function _L(e,t,r,a){var n=t&xL,o=EL(e);function s(){for(var i=-1,p=arguments.length,f=-1,m=a.length,y=Array(m+p),g=this&&this!==RL&&this instanceof s?o:e;++f<m;)y[f]=a[f];for(;p--;)y[f++]=arguments[++i];return vL(g,n?r:this,y)}return s}zm.exports=_L});var ag=u((Nj,rg)=>{"use strict";var OL=Ks(),PL=Vs(),Xm=Cn(),Zm="__lodash_placeholder__",ti=1,LL=2,CL=4,eg=8,Sa=128,tg=256,qL=Math.min;function UL(e,t){var r=e[1],a=t[1],n=r|a,o=n<(ti|LL|Sa),s=a==Sa&&r==eg||a==Sa&&r==tg&&e[7].length<=t[8]||a==(Sa|tg)&&t[7].length<=t[8]&&r==eg;if(!(o||s))return e;a&ti&&(e[2]=t[2],n|=r&ti?0:CL);var i=t[3];if(i){var p=e[3];e[3]=p?OL(p,i,t[4]):i,e[4]=p?Xm(e[3],Zm):t[4]}return i=t[5],i&&(p=e[5],e[5]=p?PL(p,i,t[6]):i,e[6]=p?Xm(e[5],Zm):t[6]),i=t[7],i&&(e[7]=i),a&Sa&&(e[8]=e[8]==null?t[8]:qL(e[8],t[8])),e[9]==null&&(e[9]=t[9]),e[0]=t[0],e[1]=n,e}rg.exports=UL});var og=u((Bj,ng)=>{"use strict";var DL=/\s/;function NL(e){for(var t=e.length;t--&&DL.test(e.charAt(t)););return t}ng.exports=NL});var ig=u((Mj,sg)=>{"use strict";var BL=og(),ML=/^\s+/;function GL(e){return e&&e.slice(0,BL(e)+1).replace(ML,"")}sg.exports=GL});var fr=u((Gj,ug)=>{"use strict";var kL=dt(),FL=ge(),QL="[object Symbol]";function jL(e){return typeof e=="symbol"||FL(e)&&kL(e)==QL}ug.exports=jL});var dg=u((kj,lg)=>{"use strict";var WL=ig(),pg=Te(),$L=fr(),cg=0/0,KL=/^[-+]0x[0-9a-f]+$/i,VL=/^0b[01]+$/i,YL=/^0o[0-7]+$/i,HL=parseInt;function zL(e){if(typeof e=="number")return e;if($L(e))return cg;if(pg(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=pg(t)?t+"":t}if(typeof e!="string")return e===0?e:+e;e=WL(e);var r=VL.test(e);return r||YL.test(e)?HL(e.slice(2),r?2:8):KL.test(e)?cg:+e}lg.exports=zL});var gg=u((Fj,mg)=>{"use strict";var JL=dg(),fg=1/0,XL=17976931348623157e292;function ZL(e){if(!e)return e===0?e:0;if(e=JL(e),e===fg||e===-fg){var t=e<0?-1:1;return t*XL}return e===e?e:0}mg.exports=ZL});var ri=u((Qj,yg)=>{"use strict";var eC=gg();function tC(e){var t=eC(e),r=t%1;return t===t?r?t-r:t:0}yg.exports=tC});var qn=u((jj,Sg)=>{"use strict";var rC=$s(),aC=sm(),nC=Hm(),oC=ei(),sC=Jm(),iC=Ys(),uC=ag(),pC=zs(),cC=Js(),hg=ri(),lC="Expected a function",Ag=1,dC=2,ai=8,ni=16,oi=32,bg=64,Ig=Math.max;function fC(e,t,r,a,n,o,s,i){var p=t&dC;if(!p&&typeof e!="function")throw new TypeError(lC);var f=a?a.length:0;if(f||(t&=~(oi|bg),a=n=void 0),s=s===void 0?s:Ig(hg(s),0),i=i===void 0?i:hg(i),f-=n?n.length:0,t&bg){var m=a,y=n;a=n=void 0}var g=p?void 0:iC(e),S=[e,t,r,a,n,m,y,o,s,i];if(g&&uC(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:Ig(S[9]-f,0),!i&&t&(ai|ni)&&(t&=~(ai|ni)),!t||t==Ag)var P=aC(e,t,r);else t==ai||t==ni?P=nC(e,t,i):(t==oi||t==(Ag|oi))&&!n.length?P=sC(e,t,r,a):P=oC.apply(void 0,S);var x=g?rC:pC;return cC(x(P,S),e,t)}Sg.exports=fC});var Tg=u((Wj,wg)=>{"use strict";var mC=qn(),gC=128;function yC(e,t,r){return t=r?void 0:t,t=e&&t==null?e.length:t,mC(e,gC,void 0,void 0,void 0,void 0,t)}wg.exports=yC});var Eg=u(($j,vg)=>{"use strict";var hC=Do(),AC=hC(Object.keys,Object);vg.exports=AC});var si=u((Kj,Rg)=>{"use strict";var bC=an(),IC=Eg(),SC=Object.prototype,wC=SC.hasOwnProperty;function TC(e){if(!bC(e))return IC(e);var t=[];for(var r in Object(e))wC.call(e,r)&&r!="constructor"&&t.push(r);return t}Rg.exports=TC});var mr=u((Vj,xg)=>{"use strict";var vC=Fo(),EC=si(),RC=Jt();function xC(e){return RC(e)?vC(e):EC(e)}xg.exports=xC});var ii=u((Yj,_g)=>{"use strict";var _C=ar(),OC=mr();function PC(e,t){return e&&_C(t,OC(t),e)}_g.exports=PC});var Pg=u((Hj,Og)=>{"use strict";var LC=ar(),CC=nr();function qC(e,t){return e&&LC(t,CC(t),e)}Og.exports=qC});var Cg=u((zj,Lg)=>{"use strict";function UC(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}Lg.exports=UC});var ui=u((Jj,qg)=>{"use strict";function DC(){return[]}qg.exports=DC});var Un=u((Xj,Dg)=>{"use strict";var NC=Cg(),BC=ui(),MC=Object.prototype,GC=MC.propertyIsEnumerable,Ug=Object.getOwnPropertySymbols,kC=Ug?function(e){return e==null?[]:(e=Object(e),NC(Ug(e),function(t){return GC.call(e,t)}))}:BC;Dg.exports=kC});var Bg=u((Zj,Ng)=>{"use strict";var FC=ar(),QC=Un();function jC(e,t){return FC(e,QC(e),t)}Ng.exports=jC});var pi=u((eW,Mg)=>{"use strict";var WC=Va(),$C=rn(),KC=Un(),VC=ui(),YC=Object.getOwnPropertySymbols,HC=YC?function(e){for(var t=[];e;)WC(t,KC(e)),e=$C(e);return t}:VC;Mg.exports=HC});var kg=u((tW,Gg)=>{"use strict";var zC=ar(),JC=pi();function XC(e,t){return zC(e,JC(e),t)}Gg.exports=XC});var ci=u((rW,Fg)=>{"use strict";var ZC=Va(),eq=ee();function tq(e,t,r){var a=t(e);return eq(e)?a:ZC(a,r(e))}Fg.exports=tq});var li=u((aW,Qg)=>{"use strict";var rq=ci(),aq=Un(),nq=mr();function oq(e){return rq(e,nq,aq)}Qg.exports=oq});var Wg=u((nW,jg)=>{"use strict";var sq=ci(),iq=pi(),uq=nr();function pq(e){return sq(e,uq,iq)}jg.exports=pq});var Kg=u((oW,$g)=>{"use strict";var cq=ft(),lq=ne(),dq=cq(lq,"DataView");$g.exports=dq});var Yg=u((sW,Vg)=>{"use strict";var fq=ft(),mq=ne(),gq=fq(mq,"Promise");Vg.exports=gq});var yr=u((iW,ty)=>{"use strict";var di=Kg(),fi=za(),mi=Yg(),gi=Ro(),yi=Qs(),ey=dt(),gr=bo(),Hg="[object Map]",yq="[object Object]",zg="[object Promise]",Jg="[object Set]",Xg="[object WeakMap]",Zg="[object DataView]",hq=gr(di),Aq=gr(fi),bq=gr(mi),Iq=gr(gi),Sq=gr(yi),Dt=ey;(di&&Dt(new di(new ArrayBuffer(1)))!=Zg||fi&&Dt(new fi)!=Hg||mi&&Dt(mi.resolve())!=zg||gi&&Dt(new gi)!=Jg||yi&&Dt(new yi)!=Xg)&&(Dt=function(e){var t=ey(e),r=t==yq?e.constructor:void 0,a=r?gr(r):"";if(a)switch(a){case hq:return Zg;case Aq:return Hg;case bq:return zg;case Iq:return Jg;case Sq:return Xg}return t});ty.exports=Dt});var ay=u((uW,ry)=>{"use strict";var wq=Object.prototype,Tq=wq.hasOwnProperty;function vq(e){var t=e.length,r=new e.constructor(t);return t&&typeof e[0]=="string"&&Tq.call(e,"index")&&(r.index=e.index,r.input=e.input),r}ry.exports=vq});var oy=u((pW,ny)=>{"use strict";var Eq=tn();function Rq(e,t){var r=t?Eq(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.byteLength)}ny.exports=Rq});var iy=u((cW,sy)=>{"use strict";var xq=/\w*$/;function _q(e){var t=new e.constructor(e.source,xq.exec(e));return t.lastIndex=e.lastIndex,t}sy.exports=_q});var dy=u((lW,ly)=>{"use strict";var uy=Rt(),py=uy?uy.prototype:void 0,cy=py?py.valueOf:void 0;function Oq(e){return cy?Object(cy.call(e)):{}}ly.exports=Oq});var my=u((dW,fy)=>{"use strict";var Pq=tn(),Lq=oy(),Cq=iy(),qq=dy(),Uq=Uo(),Dq="[object Boolean]",Nq="[object Date]",Bq="[object Map]",Mq="[object Number]",Gq="[object RegExp]",kq="[object Set]",Fq="[object String]",Qq="[object Symbol]",jq="[object ArrayBuffer]",Wq="[object DataView]",$q="[object Float32Array]",Kq="[object Float64Array]",Vq="[object Int8Array]",Yq="[object Int16Array]",Hq="[object Int32Array]",zq="[object Uint8Array]",Jq="[object Uint8ClampedArray]",Xq="[object Uint16Array]",Zq="[object Uint32Array]";function eU(e,t,r){var a=e.constructor;switch(t){case jq:return Pq(e);case Dq:case Nq:return new a(+e);case Wq:return Lq(e,r);case $q:case Kq:case Vq:case Yq:case Hq:case zq:case Jq:case Xq:case Zq:return Uq(e,r);case Bq:return new a;case Mq:case Fq:return new a(e);case Gq:return Cq(e);case kq:return new a;case Qq:return qq(e)}}fy.exports=eU});var yy=u((fW,gy)=>{"use strict";var tU=yr(),rU=ge(),aU="[object Map]";function nU(e){return rU(e)&&tU(e)==aU}gy.exports=nU});var Iy=u((mW,by)=>{"use strict";var oU=yy(),sU=nn(),hy=on(),Ay=hy&&hy.isMap,iU=Ay?sU(Ay):oU;by.exports=iU});var wy=u((gW,Sy)=>{"use strict";var uU=yr(),pU=ge(),cU="[object Set]";function lU(e){return pU(e)&&uU(e)==cU}Sy.exports=lU});var Ry=u((yW,Ey)=>{"use strict";var dU=wy(),fU=nn(),Ty=on(),vy=Ty&&Ty.isSet,mU=vy?fU(vy):dU;Ey.exports=mU});var hi=u((hW,Py)=>{"use strict";var gU=ta(),yU=Ln(),hU=ko(),AU=ii(),bU=Pg(),IU=Co(),SU=er(),wU=Bg(),TU=kg(),vU=li(),EU=Wg(),RU=yr(),xU=ay(),_U=my(),OU=No(),PU=ee(),LU=sa(),CU=Iy(),qU=Te(),UU=Ry(),DU=mr(),NU=nr(),BU=1,MU=2,GU=4,xy="[object Arguments]",kU="[object Array]",FU="[object Boolean]",QU="[object Date]",jU="[object Error]",_y="[object Function]",WU="[object GeneratorFunction]",$U="[object Map]",KU="[object Number]",Oy="[object Object]",VU="[object RegExp]",YU="[object Set]",HU="[object String]",zU="[object Symbol]",JU="[object WeakMap]",XU="[object ArrayBuffer]",ZU="[object DataView]",eD="[object Float32Array]",tD="[object Float64Array]",rD="[object Int8Array]",aD="[object Int16Array]",nD="[object Int32Array]",oD="[object Uint8Array]",sD="[object Uint8ClampedArray]",iD="[object Uint16Array]",uD="[object Uint32Array]",D={};D[xy]=D[kU]=D[XU]=D[ZU]=D[FU]=D[QU]=D[eD]=D[tD]=D[rD]=D[aD]=D[nD]=D[$U]=D[KU]=D[Oy]=D[VU]=D[YU]=D[HU]=D[zU]=D[oD]=D[sD]=D[iD]=D[uD]=!0;D[jU]=D[_y]=D[JU]=!1;function Dn(e,t,r,a,n,o){var s,i=t&BU,p=t&MU,f=t&GU;if(r&&(s=n?r(e,a,n,o):r(e)),s!==void 0)return s;if(!qU(e))return e;var m=PU(e);if(m){if(s=xU(e),!i)return SU(e,s)}else{var y=RU(e),g=y==_y||y==WU;if(LU(e))return IU(e,i);if(y==Oy||y==xy||g&&!n){if(s=p||g?{}:OU(e),!i)return p?TU(e,bU(s,e)):wU(e,AU(s,e))}else{if(!D[y])return n?e:{};s=_U(e,y,i)}}o||(o=new gU);var S=o.get(e);if(S)return S;o.set(e,s),UU(e)?e.forEach(function(R){s.add(Dn(R,t,r,R,e,o))}):CU(e)&&e.forEach(function(R,E){s.set(E,Dn(R,t,r,E,e,o))});var P=f?p?EU:vU:p?NU:DU,x=m?void 0:P(e);return yU(x||e,function(R,E){x&&(E=R,R=e[E]),hU(s,E,Dn(R,t,r,E,e,o))}),s}Py.exports=Dn});var Cy=u((AW,Ly)=>{"use strict";var pD=hi(),cD=4;function lD(e){return pD(e,cD)}Ly.exports=lD});var Uy=u((bW,qy)=>{"use strict";var dD=qn(),fD=8;function Ai(e,t,r){t=r?void 0:t;var a=dD(e,fD,void 0,void 0,void 0,void 0,void 0,t);return a.placeholder=Ai.placeholder,a}Ai.placeholder={};qy.exports=Ai});var Ny=u((IW,Dy)=>{"use strict";var mD=dt(),gD=ge(),yD=Bo(),hD="[object DOMException]",AD="[object Error]";function bD(e){if(!gD(e))return!1;var t=mD(e);return t==AD||t==hD||typeof e.message=="string"&&typeof e.name=="string"&&!yD(e)}Dy.exports=bD});var My=u((SW,By)=>{"use strict";var ID=yr(),SD=ge(),wD="[object WeakMap]";function TD(e){return SD(e)&&ID(e)==wD}By.exports=TD});var ky=u((wW,Gy)=>{"use strict";function vD(e,t){for(var r=-1,a=e==null?0:e.length;++r<a;)if(t(e[r],r,e))return!0;return!1}Gy.exports=vD});var bi=u((TW,Fy)=>{"use strict";var ED=To(),RD=ky(),xD=Eo(),_D=1,OD=2;function PD(e,t,r,a,n,o){var s=r&_D,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&OD?new ED: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(!RD(t,function(E,q){if(!xD(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}Fy.exports=PD});var jy=u((vW,Qy)=>{"use strict";function LD(e){var t=-1,r=Array(e.size);return e.forEach(function(a,n){r[++t]=[n,a]}),r}Qy.exports=LD});var Yy=u((EW,Vy)=>{"use strict";var Wy=Rt(),$y=qo(),CD=Yt(),qD=bi(),UD=jy(),DD=Za(),ND=1,BD=2,MD="[object Boolean]",GD="[object Date]",kD="[object Error]",FD="[object Map]",QD="[object Number]",jD="[object RegExp]",WD="[object Set]",$D="[object String]",KD="[object Symbol]",VD="[object ArrayBuffer]",YD="[object DataView]",Ky=Wy?Wy.prototype:void 0,Ii=Ky?Ky.valueOf:void 0;function HD(e,t,r,a,n,o,s){switch(r){case YD:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case VD:return!(e.byteLength!=t.byteLength||!o(new $y(e),new $y(t)));case MD:case GD:case QD:return CD(+e,+t);case kD:return e.name==t.name&&e.message==t.message;case jD:case $D:return e==t+"";case FD:var i=UD;case WD:var p=a&ND;if(i||(i=DD),e.size!=t.size&&!p)return!1;var f=s.get(e);if(f)return f==t;a|=BD,s.set(e,t);var m=qD(i(e),i(t),a,n,o,s);return s.delete(e),m;case KD:if(Ii)return Ii.call(e)==Ii.call(t)}return!1}Vy.exports=HD});var Jy=u((RW,zy)=>{"use strict";var Hy=li(),zD=1,JD=Object.prototype,XD=JD.hasOwnProperty;function ZD(e,t,r,a,n,o){var s=r&zD,i=Hy(e),p=i.length,f=Hy(t),m=f.length;if(p!=m&&!s)return!1;for(var y=p;y--;){var g=i[y];if(!(s?g in t:XD.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=ZD});var oh=u((xW,nh)=>{"use strict";var Si=ta(),eN=bi(),tN=Yy(),rN=Jy(),Xy=yr(),Zy=ee(),eh=sa(),aN=sn(),nN=1,th="[object Arguments]",rh="[object Array]",Nn="[object Object]",oN=Object.prototype,ah=oN.hasOwnProperty;function sN(e,t,r,a,n,o){var s=Zy(e),i=Zy(t),p=s?rh:Xy(e),f=i?rh:Xy(t);p=p==th?Nn:p,f=f==th?Nn:f;var m=p==Nn,y=f==Nn,g=p==f;if(g&&eh(e)){if(!eh(t))return!1;s=!0,m=!1}if(g&&!m)return o||(o=new Si),s||aN(e)?eN(e,t,r,a,n,o):tN(e,t,p,r,a,n,o);if(!(r&nN)){var S=m&&ah.call(e,"__wrapped__"),P=y&&ah.call(t,"__wrapped__");if(S||P){var x=S?e.value():e,R=P?t.value():t;return o||(o=new Si),n(x,R,r,a,o)}}return g?(o||(o=new Si),rN(e,t,r,a,n,o)):!1}nh.exports=sN});var wi=u((_W,uh)=>{"use strict";var iN=oh(),sh=ge();function ih(e,t,r,a,n){return e===t?!0:e==null||t==null||!sh(e)&&!sh(t)?e!==e&&t!==t:iN(e,t,r,a,ih,n)}uh.exports=ih});var ch=u((OW,ph)=>{"use strict";var uN=ta(),pN=wi(),cN=1,lN=2;function dN(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 uN;if(a)var g=a(f,m,p,e,t,y);if(!(g===void 0?pN(m,f,cN|lN,a,y):g))return!1}}return!0}ph.exports=dN});var Ti=u((PW,lh)=>{"use strict";var fN=Te();function mN(e){return e===e&&!fN(e)}lh.exports=mN});var fh=u((LW,dh)=>{"use strict";var gN=Ti(),yN=mr();function hN(e){for(var t=yN(e),r=t.length;r--;){var a=t[r],n=e[a];t[r]=[a,n,gN(n)]}return t}dh.exports=hN});var vi=u((CW,mh)=>{"use strict";function AN(e,t){return function(r){return r==null?!1:r[e]===t&&(t!==void 0||e in Object(r))}}mh.exports=AN});var yh=u((qW,gh)=>{"use strict";var bN=ch(),IN=fh(),SN=vi();function wN(e){var t=IN(e);return t.length==1&&t[0][2]?SN(t[0][0],t[0][1]):function(r){return r===e||bN(r,e,t)}}gh.exports=wN});var Bn=u((UW,hh)=>{"use strict";var TN=ee(),vN=fr(),EN=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,RN=/^\w*$/;function xN(e,t){if(TN(e))return!1;var r=typeof e;return r=="number"||r=="symbol"||r=="boolean"||e==null||vN(e)?!0:RN.test(e)||!EN.test(e)||t!=null&&e in Object(t)}hh.exports=xN});var Ih=u((DW,bh)=>{"use strict";var Ah=Ja(),_N="Expected a function";function Ei(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(_N);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(Ei.Cache||Ah),r}Ei.Cache=Ah;bh.exports=Ei});var wh=u((NW,Sh)=>{"use strict";var ON=Ih(),PN=500;function LN(e){var t=ON(e,function(a){return r.size===PN&&r.clear(),a}),r=t.cache;return t}Sh.exports=LN});var Ri=u((BW,Th)=>{"use strict";var CN=wh(),qN=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,UN=/\\(\\)?/g,DN=CN(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(qN,function(r,a,n,o){t.push(n?o.replace(UN,"$1"):a||r)}),t});Th.exports=DN});var xi=u((MW,vh)=>{"use strict";function NN(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}vh.exports=NN});var Ph=u((GW,Oh)=>{"use strict";var Eh=Rt(),BN=xi(),MN=ee(),GN=fr(),kN=1/0,Rh=Eh?Eh.prototype:void 0,xh=Rh?Rh.toString:void 0;function _h(e){if(typeof e=="string")return e;if(MN(e))return BN(e,_h)+"";if(GN(e))return xh?xh.call(e):"";var t=e+"";return t=="0"&&1/e==-kN?"-0":t}Oh.exports=_h});var _i=u((kW,Lh)=>{"use strict";var FN=Ph();function QN(e){return e==null?"":FN(e)}Lh.exports=QN});var Oi=u((FW,Ch)=>{"use strict";var jN=ee(),WN=Bn(),$N=Ri(),KN=_i();function VN(e,t){return jN(e)?e:WN(e,t)?[e]:$N(KN(e))}Ch.exports=VN});var hr=u((QW,qh)=>{"use strict";var YN=fr(),HN=1/0;function zN(e){if(typeof e=="string"||YN(e))return e;var t=e+"";return t=="0"&&1/e==-HN?"-0":t}qh.exports=zN});var Pi=u((jW,Uh)=>{"use strict";var JN=Oi(),XN=hr();function ZN(e,t){t=JN(t,e);for(var r=0,a=t.length;e!=null&&r<a;)e=e[XN(t[r++])];return r&&r==a?e:void 0}Uh.exports=ZN});var Nh=u((WW,Dh)=>{"use strict";var eB=Pi();function tB(e,t,r){var a=e==null?void 0:eB(e,t);return a===void 0?r:a}Dh.exports=tB});var Mh=u(($W,Bh)=>{"use strict";function rB(e,t){return e!=null&&t in Object(e)}Bh.exports=rB});var kh=u((KW,Gh)=>{"use strict";var aB=Oi(),nB=Yr(),oB=ee(),sB=pa(),iB=en(),uB=hr();function pB(e,t,r){t=aB(t,e);for(var a=-1,n=t.length,o=!1;++a<n;){var s=uB(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&&iB(n)&&sB(s,n)&&(oB(e)||nB(e)))}Gh.exports=pB});var Qh=u((VW,Fh)=>{"use strict";var cB=Mh(),lB=kh();function dB(e,t){return e!=null&&lB(e,t,cB)}Fh.exports=dB});var Wh=u((YW,jh)=>{"use strict";var fB=wi(),mB=Nh(),gB=Qh(),yB=Bn(),hB=Ti(),AB=vi(),bB=hr(),IB=1,SB=2;function wB(e,t){return yB(e)&&hB(t)?AB(bB(e),t):function(r){var a=mB(r,e);return a===void 0&&a===t?gB(r,e):fB(t,a,IB|SB)}}jh.exports=wB});var Kh=u((HW,$h)=>{"use strict";function TB(e){return function(t){return t?.[e]}}$h.exports=TB});var Yh=u((zW,Vh)=>{"use strict";var vB=Pi();function EB(e){return function(t){return vB(t,e)}}Vh.exports=EB});var zh=u((JW,Hh)=>{"use strict";var RB=Kh(),xB=Yh(),_B=Bn(),OB=hr();function PB(e){return _B(e)?RB(OB(e)):xB(e)}Hh.exports=PB});var Li=u((XW,Jh)=>{"use strict";var LB=yh(),CB=Wh(),qB=Hr(),UB=ee(),DB=zh();function NB(e){return typeof e=="function"?e:e==null?qB:typeof e=="object"?UB(e)?CB(e[0],e[1]):LB(e):DB(e)}Jh.exports=NB});var Zh=u((ZW,Xh)=>{"use strict";var BB=hi(),MB=Li(),GB=1;function kB(e){return MB(typeof e=="function"?e:BB(e,GB))}Xh.exports=kB});var tA=u((e$,eA)=>{"use strict";var FB=yo();function QB(e){var t=e==null?0:e.length;return t?FB(e,1):[]}eA.exports=QB});var aA=u((t$,rA)=>{"use strict";var jB=tA(),WB=ho(),$B=Ha();function KB(e){return $B(WB(e,void 0,jB),e+"")}rA.exports=KB});var oA=u((r$,nA)=>{"use strict";var VB=qn(),YB=aA(),HB=256,zB=YB(function(e,t){return VB(e,HB,void 0,void 0,void 0,t)});nA.exports=zB});var iA=u((a$,sA)=>{"use strict";var JB=xi(),XB=er(),ZB=ee(),eM=fr(),tM=Ri(),rM=hr(),aM=_i();function nM(e){return ZB(e)?JB(e,rM):eM(e)?[e]:XB(tM(aM(e)))}sA.exports=nM});var pA=u((n$,uA)=>{"use strict";uA.exports={ary:Tg(),assign:ii(),clone:Cy(),curry:Uy(),forEach:Ln(),isArray:ee(),isError:Ny(),isFunction:zr(),isWeakMap:My(),iteratee:Zh(),keys:si(),rearg:oA(),toInteger:ri(),toPath:iA()}});var lA=u((o$,cA)=>{"use strict";var oM=Xf(),sM=pA();function iM(e,t,r){return oM(sM,e,t,r)}cA.exports=iM});var Ci=u((s$,fA)=>{"use strict";var uM=lA(),dA=uM("merge",Qo());dA.placeholder=Ms();fA.exports=dA});var mb=u((X$,fb)=>{"use strict";function _M(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}fb.exports=_M});var yb=u((Z$,gb)=>{"use strict";var OM=Lo(),PM=mr();function LM(e,t){return e&&OM(e,t,PM)}gb.exports=LM});var Ab=u((eK,hb)=>{"use strict";var CM=Jt();function qM(e,t){return function(r,a){if(r==null)return r;if(!CM(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}}hb.exports=qM});var Ib=u((tK,bb)=>{"use strict";var UM=yb(),DM=Ab(),NM=DM(UM);bb.exports=NM});var wb=u((rK,Sb)=>{"use strict";var BM=Ib();function MM(e,t,r,a){return BM(e,function(n,o,s){t(a,n,r(n),s)}),a}Sb.exports=MM});var vb=u((aK,Tb)=>{"use strict";var GM=mb(),kM=wb(),FM=Li(),QM=ee();function jM(e,t){return function(r,a){var n=QM(r)?GM:kM,o=t?t():{};return n(r,e,FM(a,2),o)}}Tb.exports=jM});var Rb=u((nK,Eb)=>{"use strict";var WM=ra(),$M=vb(),KM=Object.prototype,VM=KM.hasOwnProperty,YM=$M(function(e,t,r){VM.call(e,r)?e[r].push(t):WM(e,r,[t])});Eb.exports=YM});var hG={};w(hG,{Method:()=>Hn,ai:()=>Au,api:()=>Vi,auditLogs:()=>gt,automations:()=>In,backups:()=>ve,branding:()=>dn,constants:()=>Qr,environmentVariables:()=>Ke,features:()=>Le,groups:()=>Q,init:()=>Kf,licensing:()=>Fe,logger:()=>Nt,mappers:()=>K,middleware:()=>Mi,plugins:()=>Sn,publicApi:()=>vn,quotas:()=>We,scimGroups:()=>Ar,scimUsers:()=>de,sdk:()=>Ui,users:()=>tt,utils:()=>Kt});module.exports=yI(hG);var Hn=(o=>(o.POST="POST",o.GET="GET",o.PATCH="PATCH",o.DELETE="DELETE",o.PUT="PUT",o))(Hn||{});var Ui={};w(Ui,{ai:()=>ss,auditLogs:()=>gt,automations:()=>In,backups:()=>ve,branding:()=>dn,environmentVariables:()=>Ke,features:()=>Le,groups:()=>Q,init:()=>Kf,licensing:()=>Fe,logger:()=>Nt,plugins:()=>Sn,publicApi:()=>vn,quotas:()=>We,scimGroups:()=>Ar,scimUsers:()=>de,users:()=>tt,utils:()=>Kt});var dn={};w(dn,{getBrandingConfig:()=>s_});var Le={};w(Le,{checkBackups:()=>ye,checkFeature:()=>cn,checkFeatures:()=>es,checkSCIM:()=>ns,isAppBuildersEnabled:()=>Pt,isAuditLogsEnabled:()=>ln,isBackupsEnabled:()=>ts,isBrandingEnabled:()=>rs,isEnforceableSSO:()=>of,isExpandedPublicApiEnabled:()=>Ze,isPWAEnabled:()=>t_,isSSOEnforced:()=>r_,isSyncAutomationsEnabled:()=>Zx,isTriggerAutomationRunEnabled:()=>e_,isUserGroupsEnabled:()=>as,isViewPermissionEnabled:()=>a_,isViewReadonlyColumnsEnabled:()=>n_});var oe=require("@budibase/types"),Xe=require("@budibase/backend-core");var Fe={};w(Fe,{cache:()=>Oe,client:()=>lt,features:()=>$a,getFreeLicense:()=>zo,getLicense:()=>Yo,getLicenseFromKey:()=>Ho,keys:()=>Zo,offline:()=>un,quotas:()=>Ka});var Oe={};w(Oe,{getCachedLicense:()=>af,invalidate:()=>nf,refresh:()=>xt});var Ca=require("@budibase/backend-core"),Tr,hI=async()=>{Tr=await Ca.RedisClient.init(Ca.redis.utils.Databases.LICENSES)},AI=async()=>{Tr&&await Tr.finish()};process.on("exit",async()=>{await AI()});var zn=async()=>(Tr||await hI(),Tr);var lt={};w(lt,{activateLicenseKey:()=>co,getLicense:()=>Wt,getLicenseFromKey:()=>po,triggerQuota:()=>aS});var xu=C(require("node-fetch"));var _u=require("@budibase/backend-core"),Jn=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";_u.logging.correlation.setHeader(a.headers);let o={method:t,body:n?JSON.stringify(a.body):a.body,headers:a.headers,credentials:"include"};return(0,xu.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}},Xn=Jn;var Qa=require("@budibase/types"),L=require("@budibase/backend-core");var Me={};w(Me,{bustCache:()=>to,getCurrentUsageValues:()=>Nu,getQuotaUsage:()=>wt,setAllUsage:()=>ao,setAppUsageValue:()=>ro,setUsage:()=>qu,setUsagePerApp:()=>Uu,utils:()=>Rr});var re=require("@budibase/types"),pe=require("@budibase/backend-core");var Rr={};w(Rr,{generateBaseQuotaUsage:()=>qa,generateNewMonthlyQuotas:()=>Er,generateNewQuotaUsage:()=>eo,getBreakdownName:()=>Da,getCurrentMonthString:()=>ut,getQuotaDocId:()=>vr,setCurrentMonth:()=>Ua,setQuotaReset:()=>Zn});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,Ou=()=>{let e=new Date;return new Date(e.getFullYear(),e.getMonth()+1,1).toISOString()},Zn=e=>{e.quotaReset=Ou()},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()}}),eo=()=>{let e={_id:vr(),quotaReset:Ou(),...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 Pu=pe.Duration.fromSeconds(60).toMs(),{Writethrough:Lu}=pe.cache.writethrough;function II(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 Lu(pe.tenancy.getSelfHostCloudDB(),Pu):new Lu(pe.tenancy.getGlobalDB(),Pu);async function to(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 to(e+1);throw o})}var wt=async()=>{let e=Na(),t=await e.tryGet(vr());if(!t){t=eo();let{rev:r}=await e.put(t);t._rev=r}return Ua(t),Zn(t),II(t)},qu=async(e,t,r)=>ao({name:t,type:r,values:{total:e}}),Uu=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=Du(n,t,r,{total:o,app:p},{appId:i});let s=await a.put(n);return n._rev=s.rev,n},SI=(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},ro=(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=SI(f,p,a.id,n));break}}return e},Cu=(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}},wI=(e,t,r)=>{t.usageQuota.triggers||(t.usageQuota.triggers={}),r&&(t.usageQuota.triggers[e]=r)},TI=(e,t,r,a)=>{r.monthly[t].triggers||(r.monthly[t].triggers={}),a&&(r.monthly[t].triggers[e]=a)},Du=(e,t,r,a,n={})=>{if(r===re.QuotaUsageType.STATIC)t=t,e.usageQuota[t]=a.total,wI(t,e,a.triggers);else if(r===re.QuotaUsageType.MONTHLY){t=t;let o=ut();e.monthly[o][t]=a.total,TI(t,o,e,a.triggers)}else throw new Error(`Invalid usage type: ${r}`);return ro(e,t,r,n,a)},ao=async e=>{let t=Array.isArray(e)?e:[e],r=Na(),a=await wt();for(let o of t)a=Du(a,o.name,o.type,o.values,o.opts);let n=await r.put(a,0);return a._rev=n.rev,a},Nu=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=Cu(a,e,t,r)}break;case re.QuotaUsageType.MONTHLY:{let s=ut(),i=t;a.monthly[s][i]&&(n=a.monthly[s][i],o=Cu(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:()=>RI,get:()=>no,save:()=>EI});var pt=require("@budibase/backend-core"),vI=()=>({_id:pt.StaticDatabases.GLOBAL.docs.licenseInfo}),EI=async e=>{let t=await no();t={...t,...e};let a=await pt.tenancy.getGlobalDB().put(t);return t._rev=a.rev,t},no=async()=>{let e=pt.tenancy.getGlobalDB();try{return await e.get(pt.StaticDatabases.GLOBAL.docs.licenseInfo)}catch(t){if(t.status===404)return vI();throw t}},RI=async()=>{let e=pt.tenancy.getGlobalDB(),t=await no();t&&t._rev&&await e.remove(pt.StaticDatabases.GLOBAL.docs.licenseInfo,t._rev)};var M={};w(M,{bulkSave:()=>MI,destroy:()=>GI,fetch:()=>UI,generateUserGroupID:()=>CI,get:()=>DI,getBulk:()=>NI,getByName:()=>oo,getGroupUsers:()=>Ma,getGroupUsersParams:()=>Fu,getUserGroupsParams:()=>ku,save:()=>BI});var N=require("@budibase/backend-core");var _e=require("@budibase/types"),Ft=require("@budibase/backend-core");async function Bu(){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:xI,SEPARATOR:_I,DocumentType:OI,createView:PI}=Ba.db,LI=OI.USER+_I;async function Mu(){let e=Ba.tenancy.getGlobalDB(),t=`function(doc) {
4
- if (doc._id.startsWith("${LI}") && Array.isArray(doc.userGroups)) {
3
+ `)}qm.exports=vP});var Ln=u((_j,Dm)=>{"use strict";function EP(e,t){for(var r=-1,a=e==null?0:e.length;++r<a&&t(e[r],r,e)!==!1;);return e}Dm.exports=EP});var Bm=u((Oj,Nm)=>{"use strict";var RP=Ln(),xP=vo(),_P=1,OP=2,PP=8,LP=16,CP=32,qP=64,UP=128,DP=256,NP=512,BP=[["ary",UP],["bind",_P],["bindKey",OP],["curry",PP],["curryRight",LP],["flip",NP],["partial",CP],["partialRight",qP],["rearg",DP]];function MP(e,t){return RP(BP,function(r){var a="_."+r[0];t&r[1]&&!xP(e,a)&&e.push(a)}),e.sort()}Nm.exports=MP});var Js=u((Pj,Mm)=>{"use strict";var GP=Cm(),kP=Um(),FP=Ha(),QP=Bm();function jP(e,t,r){var a=t+"";return FP(e,kP(a,QP(GP(a),r)))}Mm.exports=jP});var Xs=u((Lj,Fm)=>{"use strict";var WP=Om(),$P=zs(),KP=Js(),VP=1,YP=2,HP=4,zP=8,Gm=32,km=64;function JP(e,t,r,a,n,o,s,i,p,f){var m=t&zP,y=m?s:void 0,g=m?void 0:s,S=m?o:void 0,P=m?void 0:o;t|=m?Gm:km,t&=~(m?km:Gm),t&HP||(t&=~(VP|YP));var x=[e,t,n,S,y,P,g,i,p,f],R=r.apply(void 0,x);return WP(e)&&$P(R,x),R.placeholder=a,KP(R,e,t)}Fm.exports=JP});var Zs=u((Cj,Qm)=>{"use strict";function XP(e){var t=e;return t.placeholder}Qm.exports=XP});var Wm=u((qj,jm)=>{"use strict";var ZP=er(),eL=pa(),tL=Math.min;function rL(e,t){for(var r=e.length,a=tL(t.length,r),n=ZP(e);a--;){var o=t[a];e[a]=eL(o,r)?n[o]:void 0}return e}jm.exports=rL});var Cn=u((Uj,Km)=>{"use strict";var $m="__lodash_placeholder__";function aL(e,t){for(var r=-1,a=e.length,n=0,o=[];++r<a;){var s=e[r];(s===t||s===$m)&&(e[r]=$m,o[n++]=r)}return o}Km.exports=aL});var ei=u((Dj,Hm)=>{"use strict";var nL=Ks(),oL=Vs(),sL=dm(),Vm=Ia(),iL=Xs(),uL=Zs(),pL=Wm(),cL=Cn(),lL=ne(),dL=1,fL=2,mL=8,gL=16,yL=128,hL=512;function Ym(e,t,r,a,n,o,s,i,p,f){var m=t&yL,y=t&dL,g=t&fL,S=t&(mL|gL),P=t&hL,x=g?void 0:Vm(e);function R(){for(var E=arguments.length,q=Array(E),xe=E;xe--;)q[xe]=arguments[xe];if(S)var be=uL(R),it=sL(q,be);if(a&&(q=nL(q,a,n,S)),o&&(q=oL(q,o,s,S)),E-=it,S&&E<f){var kt=cL(q,be);return iL(e,t,Ym,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=pL(q,i):P&&E>1&&q.reverse(),m&&p<E&&(q.length=p),this&&this!==lL&&this instanceof R&&(Sr=x||Vm(Sr)),Sr.apply(Ir,q)}return R}Hm.exports=Ym});var Jm=u((Nj,zm)=>{"use strict";var AL=Ya(),bL=Ia(),IL=ei(),SL=Xs(),wL=Zs(),TL=Cn(),vL=ne();function EL(e,t,r){var a=bL(e);function n(){for(var o=arguments.length,s=Array(o),i=o,p=wL(n);i--;)s[i]=arguments[i];var f=o<3&&s[0]!==p&&s[o-1]!==p?[]:TL(s,p);if(o-=f.length,o<r)return SL(e,t,IL,n.placeholder,void 0,s,f,void 0,void 0,r-o);var m=this&&this!==vL&&this instanceof n?a:e;return AL(m,this,s)}return n}zm.exports=EL});var Zm=u((Bj,Xm)=>{"use strict";var RL=Ya(),xL=Ia(),_L=ne(),OL=1;function PL(e,t,r,a){var n=t&OL,o=xL(e);function s(){for(var i=-1,p=arguments.length,f=-1,m=a.length,y=Array(m+p),g=this&&this!==_L&&this instanceof s?o:e;++f<m;)y[f]=a[f];for(;p--;)y[f++]=arguments[++i];return RL(g,n?r:this,y)}return s}Xm.exports=PL});var og=u((Mj,ng)=>{"use strict";var LL=Ks(),CL=Vs(),eg=Cn(),tg="__lodash_placeholder__",ti=1,qL=2,UL=4,rg=8,Sa=128,ag=256,DL=Math.min;function NL(e,t){var r=e[1],a=t[1],n=r|a,o=n<(ti|qL|Sa),s=a==Sa&&r==rg||a==Sa&&r==ag&&e[7].length<=t[8]||a==(Sa|ag)&&t[7].length<=t[8]&&r==rg;if(!(o||s))return e;a&ti&&(e[2]=t[2],n|=r&ti?0:UL);var i=t[3];if(i){var p=e[3];e[3]=p?LL(p,i,t[4]):i,e[4]=p?eg(e[3],tg):t[4]}return i=t[5],i&&(p=e[5],e[5]=p?CL(p,i,t[6]):i,e[6]=p?eg(e[5],tg):t[6]),i=t[7],i&&(e[7]=i),a&Sa&&(e[8]=e[8]==null?t[8]:DL(e[8],t[8])),e[9]==null&&(e[9]=t[9]),e[0]=t[0],e[1]=n,e}ng.exports=NL});var ig=u((Gj,sg)=>{"use strict";var BL=/\s/;function ML(e){for(var t=e.length;t--&&BL.test(e.charAt(t)););return t}sg.exports=ML});var pg=u((kj,ug)=>{"use strict";var GL=ig(),kL=/^\s+/;function FL(e){return e&&e.slice(0,GL(e)+1).replace(kL,"")}ug.exports=FL});var fr=u((Fj,cg)=>{"use strict";var QL=dt(),jL=ge(),WL="[object Symbol]";function $L(e){return typeof e=="symbol"||jL(e)&&QL(e)==WL}cg.exports=$L});var mg=u((Qj,fg)=>{"use strict";var KL=pg(),lg=Te(),VL=fr(),dg=0/0,YL=/^[-+]0x[0-9a-f]+$/i,HL=/^0b[01]+$/i,zL=/^0o[0-7]+$/i,JL=parseInt;function XL(e){if(typeof e=="number")return e;if(VL(e))return dg;if(lg(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=lg(t)?t+"":t}if(typeof e!="string")return e===0?e:+e;e=KL(e);var r=HL.test(e);return r||zL.test(e)?JL(e.slice(2),r?2:8):YL.test(e)?dg:+e}fg.exports=XL});var hg=u((jj,yg)=>{"use strict";var ZL=mg(),gg=1/0,eC=17976931348623157e292;function tC(e){if(!e)return e===0?e:0;if(e=ZL(e),e===gg||e===-gg){var t=e<0?-1:1;return t*eC}return e===e?e:0}yg.exports=tC});var ri=u((Wj,Ag)=>{"use strict";var rC=hg();function aC(e){var t=rC(e),r=t%1;return t===t?r?t-r:t:0}Ag.exports=aC});var qn=u(($j,Tg)=>{"use strict";var nC=$s(),oC=um(),sC=Jm(),iC=ei(),uC=Zm(),pC=Ys(),cC=og(),lC=zs(),dC=Js(),bg=ri(),fC="Expected a function",Ig=1,mC=2,ai=8,ni=16,oi=32,Sg=64,wg=Math.max;function gC(e,t,r,a,n,o,s,i){var p=t&mC;if(!p&&typeof e!="function")throw new TypeError(fC);var f=a?a.length:0;if(f||(t&=~(oi|Sg),a=n=void 0),s=s===void 0?s:wg(bg(s),0),i=i===void 0?i:bg(i),f-=n?n.length:0,t&Sg){var m=a,y=n;a=n=void 0}var g=p?void 0:pC(e),S=[e,t,r,a,n,m,y,o,s,i];if(g&&cC(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:wg(S[9]-f,0),!i&&t&(ai|ni)&&(t&=~(ai|ni)),!t||t==Ig)var P=oC(e,t,r);else t==ai||t==ni?P=sC(e,t,i):(t==oi||t==(Ig|oi))&&!n.length?P=uC(e,t,r,a):P=iC.apply(void 0,S);var x=g?nC:lC;return dC(x(P,S),e,t)}Tg.exports=gC});var Eg=u((Kj,vg)=>{"use strict";var yC=qn(),hC=128;function AC(e,t,r){return t=r?void 0:t,t=e&&t==null?e.length:t,yC(e,hC,void 0,void 0,void 0,void 0,t)}vg.exports=AC});var xg=u((Vj,Rg)=>{"use strict";var bC=Do(),IC=bC(Object.keys,Object);Rg.exports=IC});var si=u((Yj,_g)=>{"use strict";var SC=an(),wC=xg(),TC=Object.prototype,vC=TC.hasOwnProperty;function EC(e){if(!SC(e))return wC(e);var t=[];for(var r in Object(e))vC.call(e,r)&&r!="constructor"&&t.push(r);return t}_g.exports=EC});var mr=u((Hj,Og)=>{"use strict";var RC=Fo(),xC=si(),_C=Jt();function OC(e){return _C(e)?RC(e):xC(e)}Og.exports=OC});var ii=u((zj,Pg)=>{"use strict";var PC=ar(),LC=mr();function CC(e,t){return e&&PC(t,LC(t),e)}Pg.exports=CC});var Cg=u((Jj,Lg)=>{"use strict";var qC=ar(),UC=nr();function DC(e,t){return e&&qC(t,UC(t),e)}Lg.exports=DC});var Ug=u((Xj,qg)=>{"use strict";function NC(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=NC});var ui=u((Zj,Dg)=>{"use strict";function BC(){return[]}Dg.exports=BC});var Un=u((eW,Bg)=>{"use strict";var MC=Ug(),GC=ui(),kC=Object.prototype,FC=kC.propertyIsEnumerable,Ng=Object.getOwnPropertySymbols,QC=Ng?function(e){return e==null?[]:(e=Object(e),MC(Ng(e),function(t){return FC.call(e,t)}))}:GC;Bg.exports=QC});var Gg=u((tW,Mg)=>{"use strict";var jC=ar(),WC=Un();function $C(e,t){return jC(e,WC(e),t)}Mg.exports=$C});var pi=u((rW,kg)=>{"use strict";var KC=Va(),VC=rn(),YC=Un(),HC=ui(),zC=Object.getOwnPropertySymbols,JC=zC?function(e){for(var t=[];e;)KC(t,YC(e)),e=VC(e);return t}:HC;kg.exports=JC});var Qg=u((aW,Fg)=>{"use strict";var XC=ar(),ZC=pi();function eq(e,t){return XC(e,ZC(e),t)}Fg.exports=eq});var ci=u((nW,jg)=>{"use strict";var tq=Va(),rq=ee();function aq(e,t,r){var a=t(e);return rq(e)?a:tq(a,r(e))}jg.exports=aq});var li=u((oW,Wg)=>{"use strict";var nq=ci(),oq=Un(),sq=mr();function iq(e){return nq(e,sq,oq)}Wg.exports=iq});var Kg=u((sW,$g)=>{"use strict";var uq=ci(),pq=pi(),cq=nr();function lq(e){return uq(e,cq,pq)}$g.exports=lq});var Yg=u((iW,Vg)=>{"use strict";var dq=ft(),fq=ne(),mq=dq(fq,"DataView");Vg.exports=mq});var zg=u((uW,Hg)=>{"use strict";var gq=ft(),yq=ne(),hq=gq(yq,"Promise");Hg.exports=hq});var yr=u((pW,ay)=>{"use strict";var di=Yg(),fi=za(),mi=zg(),gi=Ro(),yi=Qs(),ry=dt(),gr=bo(),Jg="[object Map]",Aq="[object Object]",Xg="[object Promise]",Zg="[object Set]",ey="[object WeakMap]",ty="[object DataView]",bq=gr(di),Iq=gr(fi),Sq=gr(mi),wq=gr(gi),Tq=gr(yi),Dt=ry;(di&&Dt(new di(new ArrayBuffer(1)))!=ty||fi&&Dt(new fi)!=Jg||mi&&Dt(mi.resolve())!=Xg||gi&&Dt(new gi)!=Zg||yi&&Dt(new yi)!=ey)&&(Dt=function(e){var t=ry(e),r=t==Aq?e.constructor:void 0,a=r?gr(r):"";if(a)switch(a){case bq:return ty;case Iq:return Jg;case Sq:return Xg;case wq:return Zg;case Tq:return ey}return t});ay.exports=Dt});var oy=u((cW,ny)=>{"use strict";var vq=Object.prototype,Eq=vq.hasOwnProperty;function Rq(e){var t=e.length,r=new e.constructor(t);return t&&typeof e[0]=="string"&&Eq.call(e,"index")&&(r.index=e.index,r.input=e.input),r}ny.exports=Rq});var iy=u((lW,sy)=>{"use strict";var xq=tn();function _q(e,t){var r=t?xq(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.byteLength)}sy.exports=_q});var py=u((dW,uy)=>{"use strict";var Oq=/\w*$/;function Pq(e){var t=new e.constructor(e.source,Oq.exec(e));return t.lastIndex=e.lastIndex,t}uy.exports=Pq});var my=u((fW,fy)=>{"use strict";var cy=Rt(),ly=cy?cy.prototype:void 0,dy=ly?ly.valueOf:void 0;function Lq(e){return dy?Object(dy.call(e)):{}}fy.exports=Lq});var yy=u((mW,gy)=>{"use strict";var Cq=tn(),qq=iy(),Uq=py(),Dq=my(),Nq=Uo(),Bq="[object Boolean]",Mq="[object Date]",Gq="[object Map]",kq="[object Number]",Fq="[object RegExp]",Qq="[object Set]",jq="[object String]",Wq="[object Symbol]",$q="[object ArrayBuffer]",Kq="[object DataView]",Vq="[object Float32Array]",Yq="[object Float64Array]",Hq="[object Int8Array]",zq="[object Int16Array]",Jq="[object Int32Array]",Xq="[object Uint8Array]",Zq="[object Uint8ClampedArray]",eU="[object Uint16Array]",tU="[object Uint32Array]";function rU(e,t,r){var a=e.constructor;switch(t){case $q:return Cq(e);case Bq:case Mq:return new a(+e);case Kq:return qq(e,r);case Vq:case Yq:case Hq:case zq:case Jq:case Xq:case Zq:case eU:case tU:return Nq(e,r);case Gq:return new a;case kq:case jq:return new a(e);case Fq:return Uq(e);case Qq:return new a;case Wq:return Dq(e)}}gy.exports=rU});var Ay=u((gW,hy)=>{"use strict";var aU=yr(),nU=ge(),oU="[object Map]";function sU(e){return nU(e)&&aU(e)==oU}hy.exports=sU});var wy=u((yW,Sy)=>{"use strict";var iU=Ay(),uU=nn(),by=on(),Iy=by&&by.isMap,pU=Iy?uU(Iy):iU;Sy.exports=pU});var vy=u((hW,Ty)=>{"use strict";var cU=yr(),lU=ge(),dU="[object Set]";function fU(e){return lU(e)&&cU(e)==dU}Ty.exports=fU});var _y=u((AW,xy)=>{"use strict";var mU=vy(),gU=nn(),Ey=on(),Ry=Ey&&Ey.isSet,yU=Ry?gU(Ry):mU;xy.exports=yU});var hi=u((bW,Cy)=>{"use strict";var hU=ta(),AU=Ln(),bU=ko(),IU=ii(),SU=Cg(),wU=Co(),TU=er(),vU=Gg(),EU=Qg(),RU=li(),xU=Kg(),_U=yr(),OU=oy(),PU=yy(),LU=No(),CU=ee(),qU=sa(),UU=wy(),DU=Te(),NU=_y(),BU=mr(),MU=nr(),GU=1,kU=2,FU=4,Oy="[object Arguments]",QU="[object Array]",jU="[object Boolean]",WU="[object Date]",$U="[object Error]",Py="[object Function]",KU="[object GeneratorFunction]",VU="[object Map]",YU="[object Number]",Ly="[object Object]",HU="[object RegExp]",zU="[object Set]",JU="[object String]",XU="[object Symbol]",ZU="[object WeakMap]",eD="[object ArrayBuffer]",tD="[object DataView]",rD="[object Float32Array]",aD="[object Float64Array]",nD="[object Int8Array]",oD="[object Int16Array]",sD="[object Int32Array]",iD="[object Uint8Array]",uD="[object Uint8ClampedArray]",pD="[object Uint16Array]",cD="[object Uint32Array]",D={};D[Oy]=D[QU]=D[eD]=D[tD]=D[jU]=D[WU]=D[rD]=D[aD]=D[nD]=D[oD]=D[sD]=D[VU]=D[YU]=D[Ly]=D[HU]=D[zU]=D[JU]=D[XU]=D[iD]=D[uD]=D[pD]=D[cD]=!0;D[$U]=D[Py]=D[ZU]=!1;function Dn(e,t,r,a,n,o){var s,i=t&GU,p=t&kU,f=t&FU;if(r&&(s=n?r(e,a,n,o):r(e)),s!==void 0)return s;if(!DU(e))return e;var m=CU(e);if(m){if(s=OU(e),!i)return TU(e,s)}else{var y=_U(e),g=y==Py||y==KU;if(qU(e))return wU(e,i);if(y==Ly||y==Oy||g&&!n){if(s=p||g?{}:LU(e),!i)return p?EU(e,SU(s,e)):vU(e,IU(s,e))}else{if(!D[y])return n?e:{};s=PU(e,y,i)}}o||(o=new hU);var S=o.get(e);if(S)return S;o.set(e,s),NU(e)?e.forEach(function(R){s.add(Dn(R,t,r,R,e,o))}):UU(e)&&e.forEach(function(R,E){s.set(E,Dn(R,t,r,E,e,o))});var P=f?p?xU:RU:p?MU:BU,x=m?void 0:P(e);return AU(x||e,function(R,E){x&&(E=R,R=e[E]),bU(s,E,Dn(R,t,r,E,e,o))}),s}Cy.exports=Dn});var Uy=u((IW,qy)=>{"use strict";var lD=hi(),dD=4;function fD(e){return lD(e,dD)}qy.exports=fD});var Ny=u((SW,Dy)=>{"use strict";var mD=qn(),gD=8;function Ai(e,t,r){t=r?void 0:t;var a=mD(e,gD,void 0,void 0,void 0,void 0,void 0,t);return a.placeholder=Ai.placeholder,a}Ai.placeholder={};Dy.exports=Ai});var My=u((wW,By)=>{"use strict";var yD=dt(),hD=ge(),AD=Bo(),bD="[object DOMException]",ID="[object Error]";function SD(e){if(!hD(e))return!1;var t=yD(e);return t==ID||t==bD||typeof e.message=="string"&&typeof e.name=="string"&&!AD(e)}By.exports=SD});var ky=u((TW,Gy)=>{"use strict";var wD=yr(),TD=ge(),vD="[object WeakMap]";function ED(e){return TD(e)&&wD(e)==vD}Gy.exports=ED});var Qy=u((vW,Fy)=>{"use strict";function RD(e,t){for(var r=-1,a=e==null?0:e.length;++r<a;)if(t(e[r],r,e))return!0;return!1}Fy.exports=RD});var bi=u((EW,jy)=>{"use strict";var xD=To(),_D=Qy(),OD=Eo(),PD=1,LD=2;function CD(e,t,r,a,n,o){var s=r&PD,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&LD?new xD: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(!_D(t,function(E,q){if(!OD(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}jy.exports=CD});var $y=u((RW,Wy)=>{"use strict";function qD(e){var t=-1,r=Array(e.size);return e.forEach(function(a,n){r[++t]=[n,a]}),r}Wy.exports=qD});var zy=u((xW,Hy)=>{"use strict";var Ky=Rt(),Vy=qo(),UD=Yt(),DD=bi(),ND=$y(),BD=Za(),MD=1,GD=2,kD="[object Boolean]",FD="[object Date]",QD="[object Error]",jD="[object Map]",WD="[object Number]",$D="[object RegExp]",KD="[object Set]",VD="[object String]",YD="[object Symbol]",HD="[object ArrayBuffer]",zD="[object DataView]",Yy=Ky?Ky.prototype:void 0,Ii=Yy?Yy.valueOf:void 0;function JD(e,t,r,a,n,o,s){switch(r){case zD:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case HD:return!(e.byteLength!=t.byteLength||!o(new Vy(e),new Vy(t)));case kD:case FD:case WD:return UD(+e,+t);case QD:return e.name==t.name&&e.message==t.message;case $D:case VD:return e==t+"";case jD:var i=ND;case KD:var p=a&MD;if(i||(i=BD),e.size!=t.size&&!p)return!1;var f=s.get(e);if(f)return f==t;a|=GD,s.set(e,t);var m=DD(i(e),i(t),a,n,o,s);return s.delete(e),m;case YD:if(Ii)return Ii.call(e)==Ii.call(t)}return!1}Hy.exports=JD});var Zy=u((_W,Xy)=>{"use strict";var Jy=li(),XD=1,ZD=Object.prototype,eN=ZD.hasOwnProperty;function tN(e,t,r,a,n,o){var s=r&XD,i=Jy(e),p=i.length,f=Jy(t),m=f.length;if(p!=m&&!s)return!1;for(var y=p;y--;){var g=i[y];if(!(s?g in t:eN.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}Xy.exports=tN});var ih=u((OW,sh)=>{"use strict";var Si=ta(),rN=bi(),aN=zy(),nN=Zy(),eh=yr(),th=ee(),rh=sa(),oN=sn(),sN=1,ah="[object Arguments]",nh="[object Array]",Nn="[object Object]",iN=Object.prototype,oh=iN.hasOwnProperty;function uN(e,t,r,a,n,o){var s=th(e),i=th(t),p=s?nh:eh(e),f=i?nh:eh(t);p=p==ah?Nn:p,f=f==ah?Nn:f;var m=p==Nn,y=f==Nn,g=p==f;if(g&&rh(e)){if(!rh(t))return!1;s=!0,m=!1}if(g&&!m)return o||(o=new Si),s||oN(e)?rN(e,t,r,a,n,o):aN(e,t,p,r,a,n,o);if(!(r&sN)){var S=m&&oh.call(e,"__wrapped__"),P=y&&oh.call(t,"__wrapped__");if(S||P){var x=S?e.value():e,R=P?t.value():t;return o||(o=new Si),n(x,R,r,a,o)}}return g?(o||(o=new Si),nN(e,t,r,a,n,o)):!1}sh.exports=uN});var wi=u((PW,ch)=>{"use strict";var pN=ih(),uh=ge();function ph(e,t,r,a,n){return e===t?!0:e==null||t==null||!uh(e)&&!uh(t)?e!==e&&t!==t:pN(e,t,r,a,ph,n)}ch.exports=ph});var dh=u((LW,lh)=>{"use strict";var cN=ta(),lN=wi(),dN=1,fN=2;function mN(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 cN;if(a)var g=a(f,m,p,e,t,y);if(!(g===void 0?lN(m,f,dN|fN,a,y):g))return!1}}return!0}lh.exports=mN});var Ti=u((CW,fh)=>{"use strict";var gN=Te();function yN(e){return e===e&&!gN(e)}fh.exports=yN});var gh=u((qW,mh)=>{"use strict";var hN=Ti(),AN=mr();function bN(e){for(var t=AN(e),r=t.length;r--;){var a=t[r],n=e[a];t[r]=[a,n,hN(n)]}return t}mh.exports=bN});var vi=u((UW,yh)=>{"use strict";function IN(e,t){return function(r){return r==null?!1:r[e]===t&&(t!==void 0||e in Object(r))}}yh.exports=IN});var Ah=u((DW,hh)=>{"use strict";var SN=dh(),wN=gh(),TN=vi();function vN(e){var t=wN(e);return t.length==1&&t[0][2]?TN(t[0][0],t[0][1]):function(r){return r===e||SN(r,e,t)}}hh.exports=vN});var Bn=u((NW,bh)=>{"use strict";var EN=ee(),RN=fr(),xN=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,_N=/^\w*$/;function ON(e,t){if(EN(e))return!1;var r=typeof e;return r=="number"||r=="symbol"||r=="boolean"||e==null||RN(e)?!0:_N.test(e)||!xN.test(e)||t!=null&&e in Object(t)}bh.exports=ON});var wh=u((BW,Sh)=>{"use strict";var Ih=Ja(),PN="Expected a function";function Ei(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(PN);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(Ei.Cache||Ih),r}Ei.Cache=Ih;Sh.exports=Ei});var vh=u((MW,Th)=>{"use strict";var LN=wh(),CN=500;function qN(e){var t=LN(e,function(a){return r.size===CN&&r.clear(),a}),r=t.cache;return t}Th.exports=qN});var Ri=u((GW,Eh)=>{"use strict";var UN=vh(),DN=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,NN=/\\(\\)?/g,BN=UN(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(DN,function(r,a,n,o){t.push(n?o.replace(NN,"$1"):a||r)}),t});Eh.exports=BN});var xi=u((kW,Rh)=>{"use strict";function MN(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}Rh.exports=MN});var Ch=u((FW,Lh)=>{"use strict";var xh=Rt(),GN=xi(),kN=ee(),FN=fr(),QN=1/0,_h=xh?xh.prototype:void 0,Oh=_h?_h.toString:void 0;function Ph(e){if(typeof e=="string")return e;if(kN(e))return GN(e,Ph)+"";if(FN(e))return Oh?Oh.call(e):"";var t=e+"";return t=="0"&&1/e==-QN?"-0":t}Lh.exports=Ph});var _i=u((QW,qh)=>{"use strict";var jN=Ch();function WN(e){return e==null?"":jN(e)}qh.exports=WN});var Oi=u((jW,Uh)=>{"use strict";var $N=ee(),KN=Bn(),VN=Ri(),YN=_i();function HN(e,t){return $N(e)?e:KN(e,t)?[e]:VN(YN(e))}Uh.exports=HN});var hr=u((WW,Dh)=>{"use strict";var zN=fr(),JN=1/0;function XN(e){if(typeof e=="string"||zN(e))return e;var t=e+"";return t=="0"&&1/e==-JN?"-0":t}Dh.exports=XN});var Pi=u(($W,Nh)=>{"use strict";var ZN=Oi(),eB=hr();function tB(e,t){t=ZN(t,e);for(var r=0,a=t.length;e!=null&&r<a;)e=e[eB(t[r++])];return r&&r==a?e:void 0}Nh.exports=tB});var Mh=u((KW,Bh)=>{"use strict";var rB=Pi();function aB(e,t,r){var a=e==null?void 0:rB(e,t);return a===void 0?r:a}Bh.exports=aB});var kh=u((VW,Gh)=>{"use strict";function nB(e,t){return e!=null&&t in Object(e)}Gh.exports=nB});var Qh=u((YW,Fh)=>{"use strict";var oB=Oi(),sB=Yr(),iB=ee(),uB=pa(),pB=en(),cB=hr();function lB(e,t,r){t=oB(t,e);for(var a=-1,n=t.length,o=!1;++a<n;){var s=cB(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&&pB(n)&&uB(s,n)&&(iB(e)||sB(e)))}Fh.exports=lB});var Wh=u((HW,jh)=>{"use strict";var dB=kh(),fB=Qh();function mB(e,t){return e!=null&&fB(e,t,dB)}jh.exports=mB});var Kh=u((zW,$h)=>{"use strict";var gB=wi(),yB=Mh(),hB=Wh(),AB=Bn(),bB=Ti(),IB=vi(),SB=hr(),wB=1,TB=2;function vB(e,t){return AB(e)&&bB(t)?IB(SB(e),t):function(r){var a=yB(r,e);return a===void 0&&a===t?hB(r,e):gB(t,a,wB|TB)}}$h.exports=vB});var Yh=u((JW,Vh)=>{"use strict";function EB(e){return function(t){return t?.[e]}}Vh.exports=EB});var zh=u((XW,Hh)=>{"use strict";var RB=Pi();function xB(e){return function(t){return RB(t,e)}}Hh.exports=xB});var Xh=u((ZW,Jh)=>{"use strict";var _B=Yh(),OB=zh(),PB=Bn(),LB=hr();function CB(e){return PB(e)?_B(LB(e)):OB(e)}Jh.exports=CB});var Li=u((e$,Zh)=>{"use strict";var qB=Ah(),UB=Kh(),DB=Hr(),NB=ee(),BB=Xh();function MB(e){return typeof e=="function"?e:e==null?DB:typeof e=="object"?NB(e)?UB(e[0],e[1]):qB(e):BB(e)}Zh.exports=MB});var tA=u((t$,eA)=>{"use strict";var GB=hi(),kB=Li(),FB=1;function QB(e){return kB(typeof e=="function"?e:GB(e,FB))}eA.exports=QB});var aA=u((r$,rA)=>{"use strict";var jB=yo();function WB(e){var t=e==null?0:e.length;return t?jB(e,1):[]}rA.exports=WB});var oA=u((a$,nA)=>{"use strict";var $B=aA(),KB=ho(),VB=Ha();function YB(e){return VB(KB(e,void 0,$B),e+"")}nA.exports=YB});var iA=u((n$,sA)=>{"use strict";var HB=qn(),zB=oA(),JB=256,XB=zB(function(e,t){return HB(e,JB,void 0,void 0,void 0,t)});sA.exports=XB});var pA=u((o$,uA)=>{"use strict";var ZB=xi(),eM=er(),tM=ee(),rM=fr(),aM=Ri(),nM=hr(),oM=_i();function sM(e){return tM(e)?ZB(e,nM):rM(e)?[e]:eM(aM(oM(e)))}uA.exports=sM});var lA=u((s$,cA)=>{"use strict";cA.exports={ary:Eg(),assign:ii(),clone:Uy(),curry:Ny(),forEach:Ln(),isArray:ee(),isError:My(),isFunction:zr(),isWeakMap:ky(),iteratee:tA(),keys:si(),rearg:iA(),toInteger:ri(),toPath:pA()}});var fA=u((i$,dA)=>{"use strict";var iM=em(),uM=lA();function pM(e,t,r){return iM(uM,e,t,r)}dA.exports=pM});var Ci=u((u$,gA)=>{"use strict";var cM=fA(),mA=cM("merge",Qo());mA.placeholder=Ms();gA.exports=mA});var yb=u((eK,gb)=>{"use strict";function PM(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}gb.exports=PM});var Ab=u((tK,hb)=>{"use strict";var LM=Lo(),CM=mr();function qM(e,t){return e&&LM(e,t,CM)}hb.exports=qM});var Ib=u((rK,bb)=>{"use strict";var UM=Jt();function DM(e,t){return function(r,a){if(r==null)return r;if(!UM(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}}bb.exports=DM});var wb=u((aK,Sb)=>{"use strict";var NM=Ab(),BM=Ib(),MM=BM(NM);Sb.exports=MM});var vb=u((nK,Tb)=>{"use strict";var GM=wb();function kM(e,t,r,a){return GM(e,function(n,o,s){t(a,n,r(n),s)}),a}Tb.exports=kM});var Rb=u((oK,Eb)=>{"use strict";var FM=yb(),QM=vb(),jM=Li(),WM=ee();function $M(e,t){return function(r,a){var n=WM(r)?FM:QM,o=t?t():{};return n(r,e,jM(a,2),o)}}Eb.exports=$M});var _b=u((sK,xb)=>{"use strict";var KM=ra(),VM=Rb(),YM=Object.prototype,HM=YM.hasOwnProperty,zM=VM(function(e,t,r){HM.call(e,r)?e[r].push(t):KM(e,r,[t])});xb.exports=zM});var bG={};w(bG,{Method:()=>Hn,ai:()=>bu,api:()=>Yi,auditLogs:()=>gt,automations:()=>In,backups:()=>ve,branding:()=>dn,constants:()=>Qr,environmentVariables:()=>Ke,features:()=>Le,groups:()=>Q,init:()=>Yf,licensing:()=>Fe,logger:()=>Nt,mappers:()=>K,middleware:()=>Gi,plugins:()=>Sn,publicApi:()=>vn,quotas:()=>We,scimGroups:()=>Ar,scimUsers:()=>de,sdk:()=>Ui,users:()=>tt,utils:()=>Kt});module.exports=AI(bG);var Hn=(o=>(o.POST="POST",o.GET="GET",o.PATCH="PATCH",o.DELETE="DELETE",o.PUT="PUT",o))(Hn||{});var Ui={};w(Ui,{ai:()=>ss,auditLogs:()=>gt,automations:()=>In,backups:()=>ve,branding:()=>dn,environmentVariables:()=>Ke,features:()=>Le,groups:()=>Q,init:()=>Yf,licensing:()=>Fe,logger:()=>Nt,plugins:()=>Sn,publicApi:()=>vn,quotas:()=>We,scimGroups:()=>Ar,scimUsers:()=>de,users:()=>tt,utils:()=>Kt});var dn={};w(dn,{getBrandingConfig:()=>u_});var Le={};w(Le,{checkBackups:()=>ye,checkFeature:()=>cn,checkFeatures:()=>es,checkSCIM:()=>ns,isAppBuildersEnabled:()=>Pt,isAuditLogsEnabled:()=>ln,isBackupsEnabled:()=>ts,isBrandingEnabled:()=>rs,isEnforceableSSO:()=>uf,isExpandedPublicApiEnabled:()=>Ze,isPWAEnabled:()=>a_,isSSOEnforced:()=>n_,isSyncAutomationsEnabled:()=>t_,isTriggerAutomationRunEnabled:()=>r_,isUserGroupsEnabled:()=>as,isViewPermissionEnabled:()=>o_,isViewReadonlyColumnsEnabled:()=>s_});var oe=require("@budibase/types"),Xe=require("@budibase/backend-core");var Fe={};w(Fe,{cache:()=>Oe,client:()=>lt,features:()=>$a,getFreeLicense:()=>zo,getLicense:()=>Yo,getLicenseFromKey:()=>Ho,keys:()=>Zo,offline:()=>un,quotas:()=>Ka});var Oe={};w(Oe,{getCachedLicense:()=>of,invalidate:()=>sf,refresh:()=>xt});var Ca=require("@budibase/backend-core"),Tr,bI=async()=>{Tr=await Ca.RedisClient.init(Ca.redis.utils.Databases.LICENSES)},II=async()=>{Tr&&await Tr.finish()};process.on("exit",async()=>{await II()});var zn=async()=>(Tr||await bI(),Tr);var lt={};w(lt,{activateLicenseKey:()=>co,getLicense:()=>Wt,getLicenseFromKey:()=>po,triggerQuota:()=>oS});var _u=C(require("node-fetch"));var Ou=require("@budibase/backend-core"),Jn=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";Ou.logging.correlation.setHeader(a.headers);let o={method:t,body:n?JSON.stringify(a.body):a.body,headers:a.headers,credentials:"include"};return(0,_u.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}},Xn=Jn;var Qa=require("@budibase/types"),L=require("@budibase/backend-core");var Me={};w(Me,{bustCache:()=>to,getCurrentUsageValues:()=>Bu,getQuotaUsage:()=>wt,setAllUsage:()=>ao,setAppUsageValue:()=>ro,setUsage:()=>Uu,setUsagePerApp:()=>Du,utils:()=>Rr});var re=require("@budibase/types"),pe=require("@budibase/backend-core");var Rr={};w(Rr,{generateBaseQuotaUsage:()=>qa,generateNewMonthlyQuotas:()=>Er,generateNewQuotaUsage:()=>eo,getBreakdownName:()=>Da,getCurrentMonthString:()=>ut,getQuotaDocId:()=>vr,setCurrentMonth:()=>Ua,setQuotaReset:()=>Zn});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,Pu=()=>{let e=new Date;return new Date(e.getFullYear(),e.getMonth()+1,1).toISOString()},Zn=e=>{e.quotaReset=Pu()},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()}}),eo=()=>{let e={_id:vr(),quotaReset:Pu(),...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 Lu=pe.Duration.fromSeconds(60).toMs(),{Writethrough:Cu}=pe.cache.writethrough;function wI(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 Cu(pe.tenancy.getSelfHostCloudDB(),Lu):new Cu(pe.tenancy.getGlobalDB(),Lu);async function to(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 to(e+1);throw o})}var wt=async()=>{let e=Na(),t=await e.tryGet(vr());if(!t){t=eo();let{rev:r}=await e.put(t);t._rev=r}return Ua(t),Zn(t),wI(t)},Uu=async(e,t,r)=>ao({name:t,type:r,values:{total:e}}),Du=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=Nu(n,t,r,{total:o,app:p},{appId:i});let s=await a.put(n);return n._rev=s.rev,n},TI=(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},ro=(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=TI(f,p,a.id,n));break}}return e},qu=(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}},vI=(e,t,r)=>{t.usageQuota.triggers||(t.usageQuota.triggers={}),r&&(t.usageQuota.triggers[e]=r)},EI=(e,t,r,a)=>{r.monthly[t].triggers||(r.monthly[t].triggers={}),a&&(r.monthly[t].triggers[e]=a)},Nu=(e,t,r,a,n={})=>{if(r===re.QuotaUsageType.STATIC)t=t,e.usageQuota[t]=a.total,vI(t,e,a.triggers);else if(r===re.QuotaUsageType.MONTHLY){t=t;let o=ut();e.monthly[o][t]=a.total,EI(t,o,e,a.triggers)}else throw new Error(`Invalid usage type: ${r}`);return ro(e,t,r,n,a)},ao=async e=>{let t=Array.isArray(e)?e:[e],r=Na(),a=await wt();for(let o of t)a=Nu(a,o.name,o.type,o.values,o.opts);let n=await r.put(a,0);return a._rev=n.rev,a},Bu=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=qu(a,e,t,r)}break;case re.QuotaUsageType.MONTHLY:{let s=ut(),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 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:()=>_I,get:()=>no,save:()=>xI});var pt=require("@budibase/backend-core"),RI=()=>({_id:pt.StaticDatabases.GLOBAL.docs.licenseInfo}),xI=async e=>{let t=await no();t={...t,...e};let a=await pt.tenancy.getGlobalDB().put(t);return t._rev=a.rev,t},no=async()=>{let e=pt.tenancy.getGlobalDB();try{return await e.get(pt.StaticDatabases.GLOBAL.docs.licenseInfo)}catch(t){if(t.status===404)return RI();throw t}},_I=async()=>{let e=pt.tenancy.getGlobalDB(),t=await no();t&&t._rev&&await e.remove(pt.StaticDatabases.GLOBAL.docs.licenseInfo,t._rev)};var M={};w(M,{bulkSave:()=>kI,destroy:()=>FI,fetch:()=>NI,generateUserGroupID:()=>UI,get:()=>BI,getBulk:()=>MI,getByName:()=>oo,getGroupUsers:()=>Ma,getGroupUsersParams:()=>Qu,getUserGroupsParams:()=>Fu,save:()=>GI});var N=require("@budibase/backend-core");var _e=require("@budibase/types"),Ft=require("@budibase/backend-core");async function Mu(){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:OI,SEPARATOR:PI,DocumentType:LI,createView:CI}=Ba.db,qI=LI.USER+PI;async function Gu(){let e=Ba.tenancy.getGlobalDB(),t=`function(doc) {
4
+ if (doc._id.startsWith("${qI}") && 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 PI(e,t,xI.USER_BY_GROUP)}var Gu=`${N.DocumentType.GROUP}${N.SEPARATOR}`;function ku(e,t={}){e||(e="");let r=e?.startsWith(N.DocumentType.GROUP)?"":Gu;return{...t,startkey:`${r}${e}`,endkey:`${r}${e}${N.UNICODE_MAX}`}}function Fu(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 CI(){return`${Gu}${N.utils.newid()}`}async function Ma(e,t){let r=N.tenancy.getGlobalDB();return(await N.db.queryView(N.db.ViewName.USER_BY_GROUP,Fu(e,t),r,Mu,{arrayResponse:!0})).map(n=>({_id:n.userId,email:n.email}))||[]}async function xr(e){return e.users=await Ma(e._id),e}async function qI(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 Qu(){return(await N.tenancy.getGlobalDB().allDocs(ku(null,{include_docs:!0}))).rows.map(t=>t.doc)}async function UI(){let e=await Qu(),t=[];for(let r of e)t.push(xr(r));return await Promise.all(t)}async function DI(e){let r=await N.tenancy.getGlobalDB().get(e);return await xr(r)}async function NI(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 BI(e){return await N.tenancy.getGlobalDB().put(e)}async function MI(e){return await N.tenancy.getGlobalDB().bulkDocs(e)}async function GI(e,t){let r=N.tenancy.getGlobalDB(),a=await r.get(e),n=await r.remove(e,t);return await qI(a),n}async function oo(e){let t=e.toLowerCase(),a=(await Qu()).find(n=>n.name.toLowerCase()===t);if(a)return await xr(a)}var we={};w(we,{deleteAppBackupMetadata:()=>XI,fetchAppBackups:()=>HI,generateAppBackupID:()=>rp,getAppBackupMetadata:()=>ZI,oldestBackupDate:()=>ep,storeAppBackupMetadata:()=>zI,updateAppBackupMetadata:()=>JI});var F=require("@budibase/backend-core"),Zu=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:Wu,AutomationViewMode:so,SEPARATOR:Ge,DocumentType:$u,createView:Ku}=Qt.db,kI=$u.AUTOMATION_LOG+Ge,ju=$u.APP_BACKUP+Ge;async function Vu(){let e=Qt.context.getProdAppDB(),t=`function(doc) {
11
- if (doc._id.startsWith("${kI}")) {
10
+ }`;await CI(e,t,OI.USER_BY_GROUP)}var ku=`${N.DocumentType.GROUP}${N.SEPARATOR}`;function Fu(e,t={}){e||(e="");let r=e?.startsWith(N.DocumentType.GROUP)?"":ku;return{...t,startkey:`${r}${e}`,endkey:`${r}${e}${N.UNICODE_MAX}`}}function Qu(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 UI(){return`${ku}${N.utils.newid()}`}async function Ma(e,t){let r=N.tenancy.getGlobalDB();return(await N.db.queryView(N.db.ViewName.USER_BY_GROUP,Qu(e,t),r,Gu,{arrayResponse:!0})).map(n=>({_id:n.userId,email:n.email}))||[]}async function xr(e){return e.users=await Ma(e._id),e}async function DI(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 ju(){return(await N.tenancy.getGlobalDB().allDocs(Fu(null,{include_docs:!0}))).rows.map(t=>t.doc)}async function NI(){let e=await ju(),t=[];for(let r of e)t.push(xr(r));return await Promise.all(t)}async function BI(e){let r=await N.tenancy.getGlobalDB().get(e);return await xr(r)}async function MI(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 GI(e){return await N.tenancy.getGlobalDB().put(e)}async function kI(e){return await N.tenancy.getGlobalDB().bulkDocs(e)}async function FI(e,t){let r=N.tenancy.getGlobalDB(),a=await r.get(e),n=await r.remove(e,t);return await DI(a),n}async function oo(e){let t=e.toLowerCase(),a=(await ju()).find(n=>n.name.toLowerCase()===t);if(a)return await xr(a)}var we={};w(we,{deleteAppBackupMetadata:()=>eS,fetchAppBackups:()=>JI,generateAppBackupID:()=>ap,getAppBackupMetadata:()=>tS,oldestBackupDate:()=>tp,storeAppBackupMetadata:()=>XI,updateAppBackupMetadata:()=>ZI});var F=require("@budibase/backend-core"),ep=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:$u,AutomationViewMode:so,SEPARATOR:Ge,DocumentType:Ku,createView:Vu}=Qt.db,QI=Ku.AUTOMATION_LOG+Ge,Wu=Ku.APP_BACKUP+Ge;async function Yu(){let e=Qt.context.getProdAppDB(),t=`function(doc) {
11
+ if (doc._id.startsWith("${QI}")) {
12
12
  let autoId = doc.automationId + "${Ge}"
13
13
  let status = doc.status + "${Ge}"
14
14
  let autoKey = "${so.AUTOMATION}${Ge}" + autoId + doc.createdAt
@@ -18,14 +18,14 @@
18
18
  emit(autoKey)
19
19
  emit(allKey)
20
20
  }
21
- }`;await Ku(e,t,Wu.AUTOMATION_LOGS)}async function Yu(){let e=Qt.tenancy.getGlobalDB(),t=`function(doc) {
22
- if (doc._id.startsWith("${ju}") && doc.type && doc.trigger) {
21
+ }`;await Vu(e,t,$u.AUTOMATION_LOGS)}async function Hu(){let e=Qt.tenancy.getGlobalDB(),t=`function(doc) {
22
+ if (doc._id.startsWith("${Wu}") && doc.type && doc.trigger) {
23
23
  let full = doc.appId + "${Ge}"
24
24
  full += doc.trigger.toLowerCase() + "${Ge}"
25
25
  full += doc.type.toLowerCase() + "${Ge}"
26
- emit("${ju}" + full + doc.timestamp)
26
+ emit("${Wu}" + full + doc.timestamp)
27
27
  }
28
- }`;await Ku(e,t,Wu.APP_BACKUP_BY_TRIGGER)}var Xu=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:()=>QI,SELF_FREE_LICENSE:()=>io,UNLIMITED:()=>W,UNLIMITED_LICENSE:()=>jI});var ct=require("@budibase/types");var Je={};w(Je,{UNLIMITED:()=>FI,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"),FI=-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,QI={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}},io={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}},jI={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:()=>WI,getProVersion:()=>zu});var Tt=require("@budibase/backend-core"),Ga=C(require("fs")),Hu=C(require("path")),WI=()=>{if(Tt.env.isDev()){let e="dev-version.txt",t=Hu.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 zu()},zu=()=>{let e=Tt.env.VERSION;if(!e)throw new Error("No budibase pro version was specified");return e};var jt={};w(jt,{searchTable:()=>$I});var vt=require("@budibase/types"),Ju=require("@budibase/backend-core");function $I(){return{type:"table",sourceType:vt.TableSourceType.INTERNAL,name:vt.AUDIT_LOG_TYPE,sourceId:Ju.SQS_DATASOURCE_INTERNAL,primary:["_id"],schema:{metadata:{name:"metadata",type:vt.FieldType.JSON},fallback:{name:"fallback",type:vt.FieldType.JSON}}}}var ke=9;var KI=new Date(864e13).toISOString(),VI=1e3*60*60*24;async function ka(e){let r=(await Oe.getCachedLicense()).quotas?.[Xu.QuotaType.CONSTANT]?.[e]?.value||0;return r===me.UNLIMITED?new Date(KI).toISOString():new Date(new Date().getTime()-VI*r).toISOString()}async function ep(){return ka(Zu.ConstantQuotaName.APP_BACKUPS_RETENTION_DAYS)}var uo=`${F.db.DocumentType.APP_BACKUP}${F.db.SEPARATOR}`;async function YI(e,t,r={}){let a=await ep(),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:`${uo}${o}${F.db.UNICODE_MAX}`,endkey:`${uo}${s}`}}async function tp(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 Yu(),tp(e,t);throw r}}function rp(e,t){return`${uo}${e}${F.db.SEPARATOR}${t}`}async function HI(e,t={}){let r=F.tenancy.getGlobalDB(),a,n=t.limit||9,o=await YI(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 tp(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=rp(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 JI(e,t){let r=F.tenancy.getGlobalDB(),a=await r.get(e);return a.name=t,await r.put(a)}async function XI(e){let t=F.tenancy.getGlobalDB(),r=await t.get(e);await t.remove(r._id,r._rev)}async function ZI(e){return await F.tenancy.getGlobalDB().get(e)}var Et={};w(Et,{get:()=>tS,getCacheEnvVarID:()=>op,getEnvVarID:()=>Fa,update:()=>rS});var Pe=require("@budibase/backend-core"),np=C(require("lru-cache")),eS=1e3,ap=new np.default({max:eS});function Fa(){return Pe.StaticDatabases.GLOBAL.docs.environmentVariables}function op(e){return`${Pe.tenancy.getTenantId()}/${Fa()}/${e||""}`}async function tS(){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=op(r?._rev),o=ap.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:{}},ap.set(n,s),s}async function rS(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 ja=new Xn(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{}},sp=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)},ip=async()=>sp(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()&&(ip=jest.fn());var Wt=ip;async function po(e){let t;if(!L.env.INTERNAL_API_KEY)throw new Error("getLicenseFromKey requires INTERNAL_API_KEY to be set");try{t=await ja.get(`/api/license/${e}`,{headers:{[L.constants.Header.API_KEY]:L.env.INTERNAL_API_KEY}})}catch(r){if(L.env.DISABLE_ACCOUNT_PORTAL)return;throw r}if(!(t.status===404||t.status===403)){if(t.status!==200){let r=await Wa(t);throw new L.HTTPError(`Error getting license: ${r}`,t.status)}return t.json()}}var aS=e=>sp(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}`)}}),co=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 Vo=require("@budibase/backend-core");var un={};w(un,{activateOfflineLicenseToken:()=>Fx,deleteOfflineLicenseToken:()=>Qx,dev:()=>la,enrichLicense:()=>Xd,getIdentifier:()=>jo,getIdentifierBase64:()=>jx,getIdentifierFromBase64:()=>Wx,getOfflineLicense:()=>Wo,getOfflineLicenseToken:()=>Hd,signing:()=>$r,verifyExpiry:()=>zd,verifyInstallation:()=>Jd});var $r={};w($r,{sign:()=>oS,verifyLicenseToken:()=>Wr});var lo=C(require("jsonwebtoken")),nS=`-----BEGIN PUBLIC KEY-----
28
+ }`;await Vu(e,t,$u.APP_BACKUP_BY_TRIGGER)}var Zu=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:()=>WI,SELF_FREE_LICENSE:()=>io,UNLIMITED:()=>W,UNLIMITED_LICENSE:()=>$I});var ct=require("@budibase/types");var Je={};w(Je,{UNLIMITED:()=>jI,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"),jI=-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,WI={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}},io={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}},$I={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:()=>KI,getProVersion:()=>Ju});var Tt=require("@budibase/backend-core"),Ga=C(require("fs")),zu=C(require("path")),KI=()=>{if(Tt.env.isDev()){let e="dev-version.txt",t=zu.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 Ju()},Ju=()=>{let e=Tt.env.VERSION;if(!e)throw new Error("No budibase pro version was specified");return e};var jt={};w(jt,{searchTable:()=>VI});var vt=require("@budibase/types"),Xu=require("@budibase/backend-core");function VI(){return{type:"table",sourceType:vt.TableSourceType.INTERNAL,name:vt.AUDIT_LOG_TYPE,sourceId:Xu.SQS_DATASOURCE_INTERNAL,primary:["_id"],schema:{metadata:{name:"metadata",type:vt.FieldType.JSON},fallback:{name:"fallback",type:vt.FieldType.JSON}}}}var ke=9;var YI=new Date(864e13).toISOString(),HI=1e3*60*60*24;async function ka(e){let r=(await Oe.getCachedLicense()).quotas?.[Zu.QuotaType.CONSTANT]?.[e]?.value||0;return r===me.UNLIMITED?new Date(YI).toISOString():new Date(new Date().getTime()-HI*r).toISOString()}async function tp(){return ka(ep.ConstantQuotaName.APP_BACKUPS_RETENTION_DAYS)}var uo=`${F.db.DocumentType.APP_BACKUP}${F.db.SEPARATOR}`;async function zI(e,t,r={}){let a=await tp(),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:`${uo}${o}${F.db.UNICODE_MAX}`,endkey:`${uo}${s}`}}async function rp(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 Hu(),rp(e,t);throw r}}function ap(e,t){return`${uo}${e}${F.db.SEPARATOR}${t}`}async function JI(e,t={}){let r=F.tenancy.getGlobalDB(),a,n=t.limit||9,o=await zI(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 rp(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 XI(e,t={}){let r=F.tenancy.getGlobalDB(),a=F.db.getProdAppID(e.appId),n=ap(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 ZI(e,t){let r=F.tenancy.getGlobalDB(),a=await r.get(e);return a.name=t,await r.put(a)}async function eS(e){let t=F.tenancy.getGlobalDB(),r=await t.get(e);await t.remove(r._id,r._rev)}async function tS(e){return await F.tenancy.getGlobalDB().get(e)}var Et={};w(Et,{get:()=>aS,getCacheEnvVarID:()=>sp,getEnvVarID:()=>Fa,update:()=>nS});var Pe=require("@budibase/backend-core"),op=C(require("lru-cache")),rS=1e3,np=new op.default({max:rS});function Fa(){return Pe.StaticDatabases.GLOBAL.docs.environmentVariables}function sp(e){return`${Pe.tenancy.getTenantId()}/${Fa()}/${e||""}`}async function aS(){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=sp(r?._rev),o=np.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:{}},np.set(n,s),s}async function nS(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 ip=require("dd-trace"),ja=new Xn(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{}},up=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)},pp=async()=>up(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()&&(pp=jest.fn());var Wt=pp;async function po(e){return await ip.tracer.trace("getLicenseFromKey",async t=>{let r;if(!L.env.INTERNAL_API_KEY)throw new Error("getLicenseFromKey requires INTERNAL_API_KEY to be set");try{r=await ja.get(`/api/license/${e}`,{headers:{[L.constants.Header.API_KEY]:L.env.INTERNAL_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 oS=e=>up(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}`)}}),co=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 Vo=require("@budibase/backend-core");var un={};w(un,{activateOfflineLicenseToken:()=>jx,deleteOfflineLicenseToken:()=>Wx,dev:()=>la,enrichLicense:()=>ef,getIdentifier:()=>jo,getIdentifierBase64:()=>$x,getIdentifierFromBase64:()=>Kx,getOfflineLicense:()=>Wo,getOfflineLicenseToken:()=>Jd,signing:()=>$r,verifyExpiry:()=>Xd,verifyInstallation:()=>Zd});var $r={};w($r,{sign:()=>iS,verifyLicenseToken:()=>Wr});var lo=C(require("jsonwebtoken")),sS=`-----BEGIN PUBLIC KEY-----
29
29
  MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvz3jePLCFBXZ19c8Dpkv
30
30
  XtSgOhKFOcvQdo/LV0KJRUzQWDPWuO4ILtBtnqhjtIzZH4CH0qCYBet5L6Qr4CM1
31
31
  l2HXiAD1Q2rlHNW9wDaYyKb1F5f+v4RyqCAyzlkwRdksmkLeECTboojNnmRCrE3C
@@ -34,18 +34,18 @@ l2HXiAD1Q2rlHNW9wDaYyKb1F5f+v4RyqCAyzlkwRdksmkLeECTboojNnmRCrE3C
34
34
  d/o3ZWE1TTj1zYwlCLN5qRKr3hU8nC3xEYNEbkB9SfTRaOq9Q7P8WmfLkoCPm3pR
35
35
  mwIDAQAB
36
36
  -----END PUBLIC KEY-----
37
- `;function Wr(e){return lo.default.verify(e,nS,{algorithms:["RS256"]})}function oS(e,t){return lo.default.sign(t,e,{encoding:"utf-8",algorithm:"RS256"})}var $a={};w($a,{getFeatures:()=>fo});var c=require("@budibase/types");var sS={[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]},iS={[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 fo(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(sS);break;case c.Hosting.CLOUD:r=a(iS);break}return r}var Ka={};w(Ka,{UNLIMITED:()=>d,getQuotas:()=>mo});var G=require("@budibase/types");var l=Je,up=me,d=-1,Kr=e=>e*1e6,uS={[G.PlanType.FREE]:{...up.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)}}},pS={[G.PlanType.FREE]:{...up.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 mo(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(pS);break;case G.Hosting.CLOUD:r=a(uS);break}return JSON.parse(JSON.stringify(r))}var Kt={};w(Kt,{appExists:()=>cS,encoding:()=>$t});var pp=require("@budibase/backend-core");async function cS(e){return(await pp.db.getAllApps({all:!0,idsOnly:!0})).includes(e)}var $t={};w($t,{base64ToObject:()=>dS,objectToBase64:()=>lS});function lS(e){let t=JSON.stringify(e);return Buffer.from(t).toString("base64")}function dS(e){let t=Buffer.from(e,"base64").toString();return JSON.parse(t)}var Kd=require("@budibase/types"),or=require("@budibase/backend-core"),Vd=C(El()),Yd=C(Qo());async function Fx(e){await Se.save({offlineLicenseToken:e}),await xt()}async function Qx(){await Se.save({offlineLicenseToken:void 0}),await xt()}async function Hd(){return(await Se.get()).offlineLicenseToken}async function jo(){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 jx(){let e=await jo();return $t.objectToBase64(e)}function Wx(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 Jd(e){let t=await jo();if(e.identifier.installId!==t.installId||e.identifier.tenantId!==t.tenantId)throw new Error("Invalid offline license")}function Xd(e){let t=e.plan.type,r=Kd.Hosting.SELF,a=fo(r,t),n=mo(r,t);return e.features=(0,Vd.default)(e.features,a),e.quotas=(0,Yd.default)(e.quotas,n),e}async function Wo(){try{let e=await Hd();if(e){let t=await Wr(e);return zd(t),await Jd(t),Xd(t)}}catch(e){console.error("Error retrieving offline license",e)}}var la={};w(la,{deleteDevLicense:()=>Hx,getOfflineLicense:()=>Vx,writeDevLicenseToDisk:()=>Yx});var Zd=require("@budibase/backend-core"),Ko=require("path"),ef=require("os"),_t=C(require("fs"));var $x=Zd.env.isTest()?".budibase-test":".budibase",$o=(0,Ko.join)((0,ef.tmpdir)(),$x),Kx="dev_license.txt",ca=(0,Ko.join)($o,Kx);if(!_t.default.existsSync($o))try{_t.default.mkdirSync($o)}catch{}function Vx(){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 Yx(e){console.log(`Writing license to: ${ca}`),_t.default.writeFileSync(ca,e,{encoding:"utf-8"})}function Hx(){_t.default.rmSync(ca,{force:!0})}var Yo=async()=>{if(Vo.env.OFFLINE_MODE)return Wo();let e=await Wt();return e||(e=la.getOfflineLicense()),e},Ho=e=>po(e),zo=()=>Vo.env.SELF_HOSTED?me.SELF_FREE_LICENSE:me.CLOUD_FREE_LICENSE;var Zo={};w(Zo,{activateLicenseKey:()=>zx,deleteLicenseKey:()=>Jx,getLicenseKey:()=>Xo});var Jo=C(require("dd-trace"));async function zx(e){await co(e),await Se.save({licenseKey:e}),await xt()}async function Xo(){return await Jo.default.trace("getLicenseKey",async e=>{let t=await Se.get();return e.addTags({licenseKey:t.licenseKey}),t.licenseKey})}async function Jx(){return await Jo.default.trace("deleteLicenseKey",async()=>{await Se.save({licenseKey:void 0}),await xt()})}var Ot=require("@budibase/backend-core"),pn=C(require("dd-trace")),tf=3600,xt=async()=>{await nf(),await af()},rf=async(e,t)=>{let{populateLicense:r=Yo,populateFreeLicense:a=zo}=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 zn(),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:tf}),await i.store(s,p,tf),p)})};Ot.env.isJest()&&(rf=jest.fn());var af=rf,nf=async()=>{let e=Ot.tenancy.getTenantId();await(await zn()).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 es(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 ts(){return se(oe.Feature.APP_BACKUPS)}async function rs(){return se(oe.Feature.BRANDING)}async function of(){return se(oe.Feature.ENFORCEABLE_SSO)}async function Zx(){return se(oe.Feature.SYNC_AUTOMATIONS)}async function e_(){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 as(){return se(oe.Feature.USER_GROUPS)}function t_(){return se(oe.Feature.PWA)}async function Ze(){return se(oe.Feature.EXPANDED_PUBLIC_API)}async function r_(e){if(Xe.env.ENABLE_SSO_MAINTENANCE_MODE||!await of())return!1;let r;return e?.config?r=e.config:r=await Xe.configs.getSettingsConfig(),!!r.isSSOEnforced}var ns=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 a_(){return se(oe.Feature.VIEW_PERMISSIONS)}async function n_(){return se(oe.Feature.VIEW_READONLY_COLUMNS)}var o_={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 s_(e){return await rs()?{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}:o_}var ss={};w(ss,{enrichAIConfig:()=>os});var sf=require("@budibase/backend-core"),i_="budibase_ai";async function os(e){if(sf.env.SELF_HOSTED)return e;for(let t of Object.values(e.config))if(t.provider==="BudibaseAI")return e;return e.config[i_]={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:()=>d_,addAutomation:()=>A_,addGroup:()=>us,addPlugin:()=>cs,addRow:()=>m_,addRows:()=>y_,addUsers:()=>mn,bustCache:()=>to,decrement:()=>et,decrementMany:()=>da,getCurrentUsageValues:()=>Nu,getLicensedQuota:()=>pf,getQuotaUsage:()=>wt,increment:()=>qe,incrementBudibaseAICredits:()=>yn,incrementMany:()=>Lt,removeApp:()=>f_,removeGroup:()=>ps,removePlugin:()=>ls,removeRow:()=>g_,removeRows:()=>h_,removeUsers:()=>cr,set:()=>is,setAllUsage:()=>ao,setAppUsageValue:()=>ro,setUsage:()=>qu,setUsagePerApp:()=>Uu,updatePluginCount:()=>ds,updateUsage:()=>ir,usageLimitIsExceeded:()=>l_,utils:()=>Rr});var Y=require("@budibase/types");var Ce=require("@budibase/backend-core");var sr=require("dd-trace"),qe=(e,t,r)=>uf({change:1,name:e,type:t,opts:r}),Lt=e=>sr.tracer.trace("quotas.incrementMany",async()=>uf(e)),uf=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})))},is=async(e,t,r)=>Me.setUsage(r,e,t),u_=(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]||{}:{}}},p_=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)}},c_=async(e,t,r,a)=>{let n=await wt(),o=e===Y.QuotaUsageType.MONTHLY?n.quotaReset:void 0,s=await u_(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 p_(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 pf(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 c_(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)})},pf=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")},l_=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"),cf=require("@budibase/backend-core"),lf=async()=>{let e=await cf.db.getAllApps({dev:!0});return e?e.length:0},d_=async(e,{appId:t}={})=>qe(ur.StaticQuotaName.APPS,ur.QuotaUsageType.STATIC,{fn:e,valueFn:lf,id:t}),f_=async({appId:e}={})=>et(ur.StaticQuotaName.APPS,ur.QuotaUsageType.STATIC,{valueFn:lf,id:e});var Qe=require("@budibase/types"),m_=async(e,{tableId:t}={})=>qe(Qe.StaticQuotaName.ROWS,Qe.QuotaUsageType.STATIC,{fn:e,id:t}),g_=async({tableId:e}={})=>et(Qe.StaticQuotaName.ROWS,Qe.QuotaUsageType.STATIC,{id:e}),y_=async(e,t,{tableId:r}={})=>Lt({change:e,name:Qe.StaticQuotaName.ROWS,type:Qe.QuotaUsageType.STATIC,opts:{fn:t,id:r}}),h_=async(e,{tableId:t}={})=>da({change:e,name:Qe.StaticQuotaName.ROWS,type:Qe.QuotaUsageType.STATIC,opts:{id:t}});var fn=require("@budibase/types"),A_=async(e,{automationId:t}={})=>qe(fn.MonthlyQuotaName.AUTOMATIONS,fn.QuotaUsageType.MONTHLY,{fn:e,id:t});var pr=require("@budibase/types"),us=async e=>qe(pr.StaticQuotaName.USER_GROUPS,pr.QuotaUsageType.STATIC,{fn:e}),ps=async()=>et(pr.StaticQuotaName.USER_GROUPS,pr.QuotaUsageType.STATIC);var mt=require("@budibase/types"),cs=async e=>qe(mt.StaticQuotaName.PLUGINS,mt.QuotaUsageType.STATIC,{fn:e}),ls=async()=>et(mt.StaticQuotaName.PLUGINS,mt.QuotaUsageType.STATIC),ds=async e=>is(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:()=>T_,db:()=>$e,removeAppBuilder:()=>v_});var ga=require("@budibase/backend-core");var Q={};w(Q,{addAppBuilder:()=>hs,addUsers:()=>ms,adjustGroupCreatorsQuotas:()=>w_,cleanupApp:()=>S_,enrichUserRolesFromGroups:()=>I_,fetch:()=>ma,get:()=>qt,getBulk:()=>Af,getGroupBuilderAppIds:()=>hf,getGroupRoleId:()=>b_,remove:()=>fs,removeAppBuilder:()=>As,removeUsers:()=>gs,save:()=>lr,updateGroupApps:()=>ys});var _=require("@budibase/backend-core");var df=require("@budibase/backend-core"),hn=class extends df.HTTPError{constructor(t){super(`Group name "${t}" is unavailable`,409)}};async function gf(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 yf(e,t){return t?t=t.filter(r=>e.includes(r._id)):t=await M.getBulk(e,{enriched:!1}),t}async function hf(e,t){if(!e.userGroups)return[];let r=await yf(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 b_(e,t,r){if(!e.userGroups)return null;let a=await yf(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 gf(a,t))}async function I_(e){if(!e||!e.userGroups)return e;let t=await Af(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 gf(t,n);o&&(e.roles[n]=o)});let a=await hf(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 Af(e,t={enriched:!0}){return await M.getBulk(e,t)}async function ff(e){if(await M.getByName(e))throw new hn(e)}async function mf(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 ff(e.name),t.push(_.events.group.created(e));else{let o=await M.get(e._id);if(o.name!==e.name&&await ff(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 mf(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 us(n);{let o=await n();if(a>0)await mn(0,a);else if(a<0){let s=await mf(e),i=Math.abs(a)-s;i>0&&await cr(0,i)}return o}}async function fs(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 ps(),await n(),o}async function ms(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 gs(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 ys(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 S_(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 hs(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 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.includes(t)&&(a.builder.apps=a.builder.apps.filter(n=>n!==r),await lr(a))}async function w_(){if(!await as()){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 T_(e,t){if(!await Pt())throw new Error("Feature not enabled, please check license");await ga.users.addAppBuilder(e,t)}async function v_(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:()=>Es});var Es={};w(Es,{logSearch:()=>q_,oldestLogDate:()=>Ef,storeLog:()=>U_});var vf=require("@budibase/types"),bn=require("@budibase/backend-core");var An=require("@budibase/types");var Z=require("@budibase/backend-core");var bf=require("@budibase/backend-core");async function If(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||bf.logging.logWarn(`Failed to backoff: ${t}`,r),o}var{SEPARATOR:rt,UNICODE_MAX:E_,DocumentType:Sf,AutomationViewMode:bs,ViewName:R_,getQueryIndex:x_}=Z.db,__=new Date(0).toISOString(),O_=100,Is=async()=>ka(An.ConstantQuotaName.AUTOMATION_LOG_RETENTION_DAYS);function wf(e,t,{status:r,automationId:a}={},n={}){let o=a?`${a}${rt}`:"",s=r?`${r}${rt}`:"",i;return r&&a?i=`${bs.ALL}${rt}${s}${o}`:r?i=`${bs.STATUS}${rt}${s}`:a?i=`${bs.AUTOMATION}${rt}${o}`:i=`${Sf.AUTOMATION_LOG}${rt}`,{...n,descending:!0,startkey:`${i}${t}${E_}`,endkey:`${i}${e}`}}function P_(e,t,r){return`${Sf.AUTOMATION_LOG}${rt}${e}${rt}${r}${rt}${t}`}async function Ss(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=wf(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 ws(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=wf(e,t,o,{include_docs:!0,limit:9+1});r?.page&&(s.startkey=r.page),n=await a.query(x_(R_.AUTOMATION_LOGS),s)}catch(o){if(o!=null&&(o.name==="not_found"||o.error==="not_found"))return await Vu(),ws(e,t,r);throw o}return _r(n,{paginate:!0,pageSize:9})}async function Tf(e,t){let r=Z.context.getProdAppDB(),a=e._id,n=e.name,o=new Date().toISOString(),s=P_(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 Ts(e,{clearing:t}={clearing:!1}){let r=Z.context.getProdAppDB();await If(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 L_(){let e=await Is();try{return await Ss(__,e,{docs:!1,paginate:!1,limit:O_})}catch{return{data:[],hasNextPage:!1}}}async function vs(){let e=Z.context.getProdAppDB();try{let t=await L_();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 Ts(a,{clearing:!0})}catch(t){Z.logging.logAlert(`Failed to cleanup automation log history - Database "${e.name}"`,t)}}var Ef=Is;async function C_(e,t,r,a){let n,o=new Date().toISOString(),s=await Ef();return(!e||e<s)&&(e=s),r||t?n=await ws(e,o,{automationId:r,status:t,page:a}):n=await Ss(e,o,{status:t,page:a,docs:!0,paginate:!0}),n}async function q_(e){return await vs(),await C_(e.startDate,e.status,e.automationId,e.page)}async function U_(e,t){if(!bn.db.isProdAppID(bn.context.getAppId()))return;let r=await Tf(e,t);t.status===vf.AutomationStatus.ERROR&&await Ts([r]),await vs()}var Sn={};w(Sn,{checkPluginQuotas:()=>B_,deletePlugin:()=>N_,storePlugin:()=>D_});var Of=require("@budibase/types"),H=require("@budibase/backend-core");var Rf=C(require("fs")),xf=require("path");function _f(e,t){return Rf.default.readFileSync((0,xf.join)(e,t),"utf8")}async function D_(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===Of.PluginType.DATASOURCE){let js=_f(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 cs(write)}async function N_(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 ls()}catch(r){let a=r?.message?r?.message:r;throw new Error(`Failed to delete plugin: ${a}`)}}async function B_(){let e=H.tenancy.getGlobalDB();try{let r=(await e.allDocs(H.db.getPluginParams())).rows.length;console.log(`Syncing plugin count: ${r}`),await ds(r)}catch(t){H.logging.logAlert("Unable to retrieve plugins for quota check",t)}}var Ke={};w(Ke,{fetch:()=>G_,fetchValues:()=>k_,isEncryptionKeyAvailable:()=>M_,isValid:()=>Cf,remove:()=>Q_,update:()=>F_});var ya=require("@budibase/types"),Pf=require("@budibase/backend-core");function M_(){return!!Pf.env.ENCRYPTION_KEY}async function G_(){let e=await Et.get();return Object.keys(e.variables)}async function k_(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 Lf(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 F_(e,t){if(Cf(e))await Lf(a=>(a[e]=t,a));else throw new Error("Variable name has characters that are not allowed")}async function Q_(e){await Lf(t=>(delete t[e],t))}function Cf(e){return/^[a-zA-Z0-9-_]+$/.test(e)}var gt={};w(gt,{definitions:()=>Z_,download:()=>X_,fetch:()=>J_,write:()=>H_});var Tn=require("@budibase/types");var $=require("@budibase/backend-core"),Ue=require("@budibase/types");var qf=require("memorystream"),Uf=new $.sql.Sql(Ue.SqlClient.SQL_LITE);async function j_(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=Uf._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 W_(e){return`${$.DocumentType.AUDIT_LOG}${$.SEPARATOR}${e}${$.SEPARATOR}${$.utils.newid()}`}async function Df(e){e._id||(e._id=W_(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 Rs(e,t,r){t||(t=1);let a=$.context.getAuditLogsDB();try{let n=9+1,o=await j_(e,t,n),s=jt.searchTable(),i=Uf.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 $_(),await Bu(),await Rs(e,t,{isRetry:!0});throw n}}async function $_(){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 Nf(e){let t=$.context.getAuditLogsDB(),r=new qf,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 qf;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"),V_=Aa.constants.MIN_VALID_DATE.toISOString(),Y_=Aa.constants.MAX_VALID_DATE.toISOString();function xs(e){return(e.startDate||e.endDate)&&(e.startDate=e.startDate||V_,e.endDate=e.endDate||Y_),e}async function Bf(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=xs(e),t.range={timestamp:{high:e.endDate,low:e.startDate}}),Object.keys(t).length===0&&(t.notEmpty={event:!0}),t}function _s(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 Os(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 Mf(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=Os(r)),a}async function H_(e,t,r){if(!await ln()||!ce.utils.isAudited(e))return;let a=Mf(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 Df(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||_s(i.userId,"user",i.fallback)};i.appId&&(m.app=f||_s(i.appId,"app",i.fallback)),s.push(m)}return s}async function J_(e){if(!await ln())throw new Error("Audit logs not available - license required.");let t=await Bf(e);if(typeof e.bookmark=="string")throw new Error("String based bookmark not supported.");let r=await Rs(t,e.bookmark);return{hasNextPage:r.hasNextPage,bookmark:r.bookmark,data:await z_(r.rows)}}function X_(e){return e=xs(e),Nf(e)}function Z_(){let e=Object.entries(Tn.AuditedEventFriendlyName).filter(r=>r[1]!=null),t={};for(let r of e)t[r[0]]=Os(r[1]);return t}var vn={};w(vn,{applications:()=>qs,roles:()=>Ls,users:()=>Ps});var Ps={};w(Ps,{roleCheck:()=>tO});function eO(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 tO(e,t){return await Ze()||eO(e,t),e}var Ls={};w(Ls,{assign:()=>rO,unAssign:()=>aO});var ba=require("@budibase/backend-core");async function rO(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 aO(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 qs={};w(qs,{buildExportFn:()=>oO,buildImportFn:()=>nO});var Cs=require("@budibase/backend-core");function nO(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 Cs.context.doInAppContext(t.params.appId,async()=>{await e(t),t.body=void 0,t.status=204,await r()})}}function oO(e){return async(t,r)=>{await Ze()||t.throw(403,"Endpoint unavailable, license required.");let{encryptPassword:a,excludeRows:n}=t.request.body;await Cs.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 Us=require("@budibase/backend-core"),Gf;function kf(){Gf=new Us.queue.BudibaseQueue(Us.queue.JobQueue.APP_BACKUP,{maxStalledCount:3,jobOptions:{attempts:3,removeOnFail:!0,removeOnComplete:!0}})}function Ut(){return Gf}var Ff=require("path"),Qf=C(require("fs"));async function Ds(e,t={}){return we.storeAppBackupMetadata(e,t)}function jf(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 sO(e,t,r,a){let n=await En(e);return await we.storeAppBackupMetadata({...n,...jf(t),contents:r,status:t,type:ie.AppBackupType.BACKUP},{filename:a,docId:e})}async function iO(e,t,r){let a=await En(e);return await we.storeAppBackupMetadata({...a,...jf(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 uO(e,t){return we.updateAppBackupMetadata(e,t)}async function pO(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 cO(e,t){return we.fetchAppBackups(e,t)}async function Wf(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 lO(e){let{stream:t}=await Wf(e),r=(0,Ff.join)(Ve.objectStore.budibaseTempDir(),Ve.utils.newid()),a=Qf.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 dO(e,t,r={}){let a;try{a=await Ds({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 fO(e,t,r,a){let n=await En(t),o;try{o=await Ds({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 mO={isEnabled:ts,triggerAppRestore:ye(fO),triggerAppBackup:ye(dO),getBackupDownloadStream:ye(Wf),downloadAppBackup:ye(lO),fetchAppBackups:ye(cO),storeAppBackupMetadata:ye(Ds),updateBackupStatus:ye(sO),updateRestoreStatus:ye(iO),getAppBackup:ye(En),updateAppBackup:ye(uO),deleteAppBackup:ye(pO)},at=mO;var Bs={};w(Bs,{init:()=>Ns});var z=require("@budibase/backend-core");var De=require("@budibase/types");var dr=C(require("fs"));async function Ns(e){Ut().process(async t=>{let r=t.data;try{if(r.export)return hO(t,e);if(r.import)return yO(t,e)}catch(a){z.logging.logAlert(`Failed to perform backup for app ID: ${r.appId}`,a)}})}async function gO(e){await z.db.getDB(e,{skip_setup:!0}).destroy()}async function $f(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 yO(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 $f(De.AppBackupTrigger.RESTORING,i,a,{processing:t,createdBy:s,name:o});let m=await at.downloadAppBackup(n);await gO(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 hO(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 $f(n,s,a,{processing:t,doc:{id:r.docId,rev:i},name:o})}catch(i){z.logging.logAlert("App backup error",i)}})}var AO=async e=>{kf(),await Ns(e.processing)},ve={...at,processing:Bs,init:AO,getBackupQueue:Ut};var Kf=async e=>{e.backups&&await ve.init(e.backups)};var de={};w(de,{create:()=>lM,find:()=>cM,get:()=>pM,remove:()=>fM,update:()=>dM});var mA=C(Ci()),nt=require("@budibase/backend-core");var gA=require("@budibase/types");async function pM(e){let t=nt.tenancy.getGlobalDB(),r=new nt.db.QueryBuilder(t.name,gA.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 cM(e){return await nt.users.getById(e)}async function lM(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,mA.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 dM(e,t){return await $e.save(e,{requirePassword:!1,allowChangingEmail:t?.allowChangingEmail})}async function fM(e){return await $e.destroy(e)}var Ar={};w(Ar,{create:()=>mM});var yA=C(Ci());var hA=require("@budibase/backend-core");async function mM(e){let t=await oo(e.name),r;if(!t)r=(await Q.save(e)).id;else{if(t.scimInfo?.isSync)throw new hA.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,yA.default)(t.scimInfo,e.scimInfo),await Q.save(t)}return await Q.get(r)}var Nt={};w(Nt,{logRequest:()=>gM,logResponse:()=>yM});var qi=require("@budibase/backend-core");async function gM(e){qi.logging.logWarn("SCIM request log",e)}async function yM(e){qi.logging.logWarn("SCIM response error",e)}var Mi={};w(Mi,{doInScimContext:()=>Di,feature:()=>j,internalGroupOnly:()=>kn,licenseAuth:()=>IA,licensing:()=>AA,requireSCIM:()=>Ni,scimGroupOnly:()=>Ta,scimUserOnly:()=>wa});var yt=require("@budibase/backend-core");var Mn=require("@budibase/types"),hM=(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=io,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()},AA=hM;var j={};w(j,{requireFeature:()=>AM,requireFeatures:()=>bM});var AM=e=>async(t,r)=>{await cn(e),await r()},bM=(...e)=>async(t,r)=>{await es(e),await r()};var Gn=require("@budibase/backend-core");var Di=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 Ni=async(e,t)=>{await ns(),await t()};var bA=require("@budibase/backend-core");var wa=e=>Bi(bA.users.getById,e,!0),Ta=e=>Bi(M.get,e,!0),kn=e=>Bi(M.get,e,!1);function Bi(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");async function IA(e,t){let r=e.request.headers[va.constants.Header.LICENSE_KEY];Array.isArray(r)&&(r=r[0]),r||e.throw(403,"License key not provided");let a=await Ho(r);a||e.throw(403,"License not found or invalid"),a.tenantId||e.throw(403,"License does not have a tenant ID"),await va.context.doInSelfHostTenantUsingCloud(a.tenantId,async()=>{await va.context.doInLicenseContext(a,async()=>{await t()})})}var Vi={};w(Vi,{appBackups:()=>ob,auditLogs:()=>HA,environmentVariables:()=>FA,groups:()=>CA,scim:()=>Nb,users:()=>Fb});async function SA(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 wA(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 ms(t,r)),a&&(o=await gs(t,a)),e.body={added:n,removed:o}}async function TA(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 ys(t,{appsToAdd:r,appsToRemove:a})}async function vA(e){e.body={data:await ma()}}async function EA(e){let{groupId:t,rev:r}=e.params;try{await fs(t,r),e.body={message:"Group deleted successfully"}}catch(a){e.throw(a.status,a)}}async function RA(e){try{e.body=await qt(e.params.groupId)}catch(t){e.throw(t.status,t)}}async function xA(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 _A(e){let{groupId:t,appId:r}=e.params;await hs(t,r),e.body={message:"Group app builder access updated."}}async function OA(e){let{groupId:t,appId:r}=e.params;await As(t,r),e.body={message:"group app builder access removed."}}var PA=C(require("@koa/router")),he=C(require("joi"));var Ee=require("@budibase/types"),Ye=require("@budibase/backend-core"),LA=new PA.default;function SM(){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())}LA.post("/api/global/groups",Ye.auth.adminOnly,j.requireFeature(Ee.Feature.USER_GROUPS),SM(),SA).get("/api/global/groups",j.requireFeature(Ee.Feature.USER_GROUPS),vA).delete("/api/global/groups/:groupId/:rev",j.requireFeature(Ee.Feature.USER_GROUPS),Ye.auth.adminOnly,kn("groupId"),EA).get("/api/global/groups/:groupId",j.requireFeature(Ee.Feature.USER_GROUPS),Ye.auth.builderOrAdmin,RA).get("/api/global/groups/:groupId/users",j.requireFeature(Ee.Feature.USER_GROUPS),Ye.auth.builderOrAdmin,xA).post("/api/global/groups/:groupId/users",Ye.auth.adminOnly,j.requireFeature(Ee.Feature.USER_GROUPS),kn("groupId"),wA).post("/api/global/groups/:groupId/apps",Ye.auth.builderOrAdmin,j.requireFeature(Ee.Feature.USER_GROUPS),TA).post("/api/global/groups/:groupId/app/:appId/builder",Ye.auth.builderOrAdmin,j.requireFeatures(Ee.Feature.USER_GROUPS,Ee.Feature.APP_BUILDERS),_A).delete("/api/global/groups/:groupId/app/:appId/builder",Ye.auth.builderOrAdmin,j.requireFeatures(Ee.Feature.USER_GROUPS,Ee.Feature.APP_BUILDERS),OA);var CA=LA;var Gi=require("@budibase/types");var ki=require("@budibase/backend-core");async function qA(e){e.body={encryptionKeyAvailable:Ke.isEncryptionKeyAvailable()}}async function UA(e){e.body={variables:await Ke.fetch()}}async function DA(e){let{name:t,production:r,development:a}=e.request.body;await Ke.update(t,{production:r,development:a});let n=[Gi.AppEnvironment.PRODUCTION];r!==a&&n.push(Gi.AppEnvironment.DEVELOPMENT),await ki.events.environmentVariable.created(t,n),e.body={message:`Environment variable "${t}" created.`}}async function NA(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 BA(e){let t=e.params.varName;await Ke.remove(t),await ki.events.environmentVariable.deleted(t),e.body={message:`Environment variable "${t}" deleted.`}}var Bt=require("@budibase/backend-core"),GA=C(require("@koa/router")),Ea=C(require("joi")),kA=new GA.default;function MA(){return Bt.auth.joiValidator.body(Ea.default.object({name:Ea.default.string().optional(),production:Ea.default.string().required(),development:Ea.default.string().required()}))}kA.get("/api/env/variables/status",Bt.auth.builderOrAdmin,qA).get("/api/env/variables",Bt.auth.builderOrAdmin,UA).post("/api/env/variables",Bt.auth.builderOrAdmin,MA(),DA).patch("/api/env/variables/:varName",Bt.auth.builderOrAdmin,MA(),NA).delete("/api/env/variables/:varName",Bt.auth.builderOrAdmin,BA);var FA=kA;var Fi=require("@budibase/backend-core");async function QA(e){let t=e.request.body,r=await gt.fetch(t);await Fi.events.auditLog.filtered(t),e.body=r}async function jA(e){let t=e.request.body,{stream:r}=gt.download(t);await Fi.events.auditLog.downloaded(t),e.attachment(`audit-logs-${Date.now()}.log`),e.body=r}async function WA(e){e.body={events:gt.definitions()}}var KA=require("@budibase/types"),Mt=require("@budibase/backend-core"),VA=C(require("@koa/router")),Re=C(require("joi"));function $A(){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(KA.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 YA=new VA.default;YA.post("/api/global/auditlogs/search",Mt.auth.adminOnly,$A(),QA).get("/api/global/auditlogs/download",Mt.auth.adminOnly,Mt.middleware.querystringToBody,$A(),jA).get("/api/global/auditlogs/definitions",Mt.auth.adminOnly,WA);var HA=YA;var Qi=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 JA(e){let t=e.params.appId;await br(e,t);let r=e.request.body,a=e.user?._id,n=await ve.triggerAppBackup(t,Qi.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 XA(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 ZA(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 eb(e){let t=e.params.appId;await br(e,t);let r=e.request.body;r?.trigger&&(r.trigger=r.trigger.toLowerCase(),Object.values(Qi.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 tb(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 rb(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 ab=C(require("@koa/router")),Gt=C(require("joi")),Fn=require("@budibase/types"),ht=require("@budibase/backend-core"),nb=new ab.default;function EM(){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()}))}nb.post("/api/apps/:appId/backups",ht.auth.builderOrAdmin,JA).post("/api/apps/:appId/backups/search",ht.auth.builderOrAdmin,EM(),eb).get("/api/apps/:appId/backups/:backupId/file",ht.auth.builderOrAdmin,rb).patch("/api/apps/:appId/backups/:backupId",ht.auth.builderOrAdmin,tb).delete("/api/apps/:appId/backups/:backupId",ht.auth.builderOrAdmin,ZA).post("/api/apps/:appId/backups/:backupId/import",ht.auth.builderOrAdmin,XA);var ob=nb;var Db=C(require("@koa/router"));var Qn=require("scim-patch");var ib=require("@budibase/backend-core");function sb(e,t){let r=e.request.query[t];if(r!==void 0)return+r}var ub=async e=>{let t=sb(e,"pageSize")??20,r=sb(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}},pb=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)},cb=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 ib.EmailUnavailableError&&e.throw(409,"Email already in use"),r}};function RM(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 lb=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(RM(a))return ji(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)},ji=async e=>{let{id:t}=e.params;typeof t!="string"&&e.throw(404),await de.remove(t),e.status=204};var xb=C(Rb()),_b=require("@budibase/shared-core"),jn=require("scim-patch");var Wn=require("scim2-parse-filter");function Ob(e,t){for(let r of t.split(","))delete e[r]}var Pb=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=>{Ob(o,n)}),e.body={schemas:["urn:ietf:params:scim:api:messages:2.0:ListResponse"],totalResults:r.length,Resources:r,startIndex:1,itemsPerPage:r.length}},Lb=async e=>{let t=K.group.fromScimGroup(e.request.body),r=await Ar.create(t);e.body=K.group.toScimGroupResponse(r)},Cb=async e=>{let{id:t}=e.params,r=await Q.get(t),a=K.group.toScimGroupResponse(r),{excludedAttributes:n}=e.request.query;n&&Ob(a,n),e.body=a},qb=async e=>{let{id:t}=e.params,r=await Q.get(t);await Q.remove(t,r._rev),e.status=204},Ub=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,xb.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:_b.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 Db.default({prefix:"/api/global/scim/v2"});Ae.use(Ni);Ae.use(Di);Ae.get("/users",ub);Ae.get("/users/:id",wa("id"),pb);Ae.post("/users",cb);Ae.patch("/users/:id",wa("id"),lb);Ae.delete("/users/:id",wa("id"),ji);Ae.get("/groups",Pb);Ae.post("/groups",j.requireFeature(Ra.Feature.USER_GROUPS),Lb);Ae.get("/groups/:id",j.requireFeature(Ra.Feature.USER_GROUPS),Ta("id"),Cb);Ae.delete("/groups/:id",j.requireFeature(Ra.Feature.USER_GROUPS),Ta("id"),qb);Ae.patch("/groups/:id",j.requireFeature(Ra.Feature.USER_GROUPS),Ta("id"),Ub);var Nb=Ae;var Gb=C(require("@koa/router"));var Wi=require("@budibase/backend-core");async function Bb(e){let{userId:t,appId:r}=e.params,a=await tt.db.getUser(t);if(Wi.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 Mb(e){let{userId:t,appId:r}=e.params,a=await tt.db.getUser(t);if(Wi.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 $i=require("@budibase/types"),Ki=require("@budibase/backend-core"),kb=new Gb.default;kb.post("/api/global/users/:userId/app/:appId/builder",Ki.auth.builderOrAdmin,j.requireFeatures($i.Feature.APP_BUILDERS),Bb).delete("/api/global/users/:userId/app/:appId/builder",Ki.auth.builderOrAdmin,j.requireFeatures($i.Feature.APP_BUILDERS),Mb);var Fb=kb;var K={};w(K,{group:()=>Hi,user:()=>Yi});var Yi={};w(Yi,{fromScimUser:()=>tG,toScimUserResponse:()=>XM,userFilters:()=>rG});var $n=require("@budibase/types"),Qb=require("scim2-parse-filter"),jb=require("@budibase/backend-core"),Wb=require("@budibase/shared-core"),{unreachable:JM}=Wb.utils,XM=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},ZM=e=>!!e?.id;function eG(e){if(jb.utils.validEmail(e.userName))return e.userName;if(e.emails)return e.emails.find(t=>t.primary)?.value||e.emails[0]?.value}var tG=e=>{let t=ZM(e)?e:void 0,r=eG(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:JM(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()}},rG=e=>{let t={equal:{}},r=(0,Qb.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 Hi={};w(Hi,{fromScimGroup:()=>oG,toScimGroupResponse:()=>aG});var aG=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}))}),nG=e=>!!e?.id,oG=e=>{let t=nG(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 Au={};w(Au,{LLMRequest:()=>V,TableGeneration:()=>hu,agentHistoryTitleSystemPrompt:()=>gG,agentSystemPrompt:()=>mG,aiColumnSchemas:()=>gu,aiTableResponseToTableSchema:()=>lu,appendAIColumns:()=>du,classifyText:()=>Ji,cleanData:()=>Xi,generateAIColumns:()=>pu,generateCode:()=>fG,generateCronExpression:()=>Zi,generateData:()=>cu,generateJs:()=>au,generateSQL:()=>dG,generateTables:()=>uu,generationStructure:()=>mu,getLLM:()=>_a,getLLMConfig:()=>iu,getLLMOrThrow:()=>Xb,parseResponseFormat:()=>nu,sanitiseToolName:()=>sG,searchWeb:()=>ru,sentimentAnalysis:()=>tu,summarizeText:()=>Kn,tableDataStructuredOutput:()=>yu,translate:()=>eu});function sG(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 ze=require("@budibase/backend-core"),Yb=require("@budibase/types");var Kb=C(require("openai"));var At=require("@budibase/types");var $b=require("@budibase/shared-core");var bt=C(require("dd-trace"));function zi(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(Zi(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(zi(r,o));case At.AIOperationEnum.CLEAN_DATA:return Xi(r[n]);case At.AIOperationEnum.TRANSLATE:return eu(r[n],s);case At.AIOperationEnum.CATEGORISE_TEXT:if(!i)throw Error("No categories provided for categorise text operation. Please provide categories.");return Ji(zi(r,o),i.split(","));case At.AIOperationEnum.SENTIMENT_ANALYSIS:return tu(r[n]);case At.AIOperationEnum.PROMPT:return p;case At.AIOperationEnum.SEARCH_WEB:return ru(zi(r,o));default:throw $b.utils.unreachable(a)}}async generateJs(t,r){return await bt.default.trace("generateJs",async()=>{let{bindings:a=[],snippets:n=[]}=r||{};return await this.prompt(au(a,n).addUserMessage(t))})}};var Vb=require("openai/helpers/zod");function nu(e){if(e)return e==="text"?{type:"text"}:e==="json"?{type:"json_object"}:e}function iG(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 Kb.default({apiKey:r.apiKey})}async chatCompletion(r){let a={model:this.model,messages:r.messages,max_tokens:this.maxTokens,response_format:nu(r.format)};r.tools&&r.tools.length>0&&(a.tool_choice="auto",a.tools=r.tools.map(Vb.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:iG(n.usage)};throw new Error("No response found")}}};var He=require("@budibase/backend-core");var ou=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 ou.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 ou.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 Xo();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 su=C(require("@anthropic-ai/sdk"));function uG(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 su.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:uG(a.usage)}}catch(a){throw a instanceof su.default.APIError&&console.error(`Anthropic Prompt failed with error ${a.name} and status: ${a.status}`),a}}};var Hb=require("zod"),zb=require("openai/helpers/zod"),Jb="gpt-4o-mini",pG={OpenAI:ot,TogetherAI:ot,AzureOpenAI:ot,Custom:ot,Anthropic:Yn,BudibaseAI:Vn};async function cG(){return await xa.tracer.trace("getAIConfig",async e=>{let t={type:Yb.ConfigType.AI,config:{}};if(!ze.context.isSelfHostUsingCloud()){let a=await ze.configs.getAIConfig();a&&(t=a)}await os(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||Jb,apiKey:r.apiKey}})}async function lG(){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:Jb,apiKey:ze.env.OPENAI_API_KEY}})}async function iu(){return xa.tracer.trace("getLLMConfig",async()=>await cG()||await lG())}async function _a(e){return await xa.tracer.trace("getLLM",async t=>{let{model:r,maxTokens:a}=e||{},n=await iu();if(!n){t.addTags({enabled:!1,reason:"no config found"});return}r&&(n.model=r),a&&(n.maxTokens=a);let o=pG[n.provider];if(!o){t.addTags({enabled:!1,reason:"no provider found",provider:n.provider});return}return new o(n)})}async function Xb(){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 Hb.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){return new V().addUserMessage(`Summarize this text:
37
+ `;function Wr(e){return lo.default.verify(e,sS,{algorithms:["RS256"]})}function iS(e,t){return lo.default.sign(t,e,{encoding:"utf-8",algorithm:"RS256"})}var $a={};w($a,{getFeatures:()=>fo});var c=require("@budibase/types");var uS={[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]},pS={[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 fo(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(uS);break;case c.Hosting.CLOUD:r=a(pS);break}return r}var Ka={};w(Ka,{UNLIMITED:()=>d,getQuotas:()=>mo});var G=require("@budibase/types");var l=Je,cp=me,d=-1,Kr=e=>e*1e6,cS={[G.PlanType.FREE]:{...cp.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)}}},lS={[G.PlanType.FREE]:{...cp.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 mo(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(lS);break;case G.Hosting.CLOUD:r=a(cS);break}return JSON.parse(JSON.stringify(r))}var Kt={};w(Kt,{appExists:()=>dS,encoding:()=>$t});var lp=require("@budibase/backend-core");async function dS(e){return(await lp.db.getAllApps({all:!0,idsOnly:!0})).includes(e)}var $t={};w($t,{base64ToObject:()=>mS,objectToBase64:()=>fS});function fS(e){let t=JSON.stringify(e);return Buffer.from(t).toString("base64")}function mS(e){let t=Buffer.from(e,"base64").toString();return JSON.parse(t)}var Yd=require("@budibase/types"),or=require("@budibase/backend-core"),Hd=C(xl()),zd=C(Qo());async function jx(e){await Se.save({offlineLicenseToken:e}),await xt()}async function Wx(){await Se.save({offlineLicenseToken:void 0}),await xt()}async function Jd(){return(await Se.get()).offlineLicenseToken}async function jo(){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 $x(){let e=await jo();return $t.objectToBase64(e)}function Kx(e){return $t.base64ToObject(e)}function Xd(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 Zd(e){let t=await jo();if(e.identifier.installId!==t.installId||e.identifier.tenantId!==t.tenantId)throw new Error("Invalid offline license")}function ef(e){let t=e.plan.type,r=Yd.Hosting.SELF,a=fo(r,t),n=mo(r,t);return e.features=(0,Hd.default)(e.features,a),e.quotas=(0,zd.default)(e.quotas,n),e}async function Wo(){try{let e=await Jd();if(e){let t=await Wr(e);return Xd(t),await Zd(t),ef(t)}}catch(e){console.error("Error retrieving offline license",e)}}var la={};w(la,{deleteDevLicense:()=>Jx,getOfflineLicense:()=>Hx,writeDevLicenseToDisk:()=>zx});var tf=require("@budibase/backend-core"),Ko=require("path"),rf=require("os"),_t=C(require("fs"));var Vx=tf.env.isTest()?".budibase-test":".budibase",$o=(0,Ko.join)((0,rf.tmpdir)(),Vx),Yx="dev_license.txt",ca=(0,Ko.join)($o,Yx);if(!_t.default.existsSync($o))try{_t.default.mkdirSync($o)}catch{}function Hx(){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 zx(e){console.log(`Writing license to: ${ca}`),_t.default.writeFileSync(ca,e,{encoding:"utf-8"})}function Jx(){_t.default.rmSync(ca,{force:!0})}var Yo=async()=>{if(Vo.env.OFFLINE_MODE)return Wo();let e=await Wt();return e||(e=la.getOfflineLicense()),e},Ho=e=>po(e),zo=()=>Vo.env.SELF_HOSTED?me.SELF_FREE_LICENSE:me.CLOUD_FREE_LICENSE;var Zo={};w(Zo,{activateLicenseKey:()=>Xx,deleteLicenseKey:()=>Zx,getLicenseKey:()=>Xo});var Jo=C(require("dd-trace"));async function Xx(e){await co(e),await Se.save({licenseKey:e}),await xt()}async function Xo(){return await Jo.default.trace("getLicenseKey",async e=>{let t=await Se.get();return e.addTags({licenseKey:t.licenseKey}),t.licenseKey})}async function Zx(){return await Jo.default.trace("deleteLicenseKey",async()=>{await Se.save({licenseKey:void 0}),await xt()})}var Ot=require("@budibase/backend-core"),pn=C(require("dd-trace")),af=3600,xt=async()=>{await sf(),await of()},nf=async(e,t)=>{let{populateLicense:r=Yo,populateFreeLicense:a=zo}=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 zn(),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:af}),await i.store(s,p,af),p)})};Ot.env.isJest()&&(nf=jest.fn());var of=nf,sf=async()=>{let e=Ot.tenancy.getTenantId();await(await zn()).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 es(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 ts(){return se(oe.Feature.APP_BACKUPS)}async function rs(){return se(oe.Feature.BRANDING)}async function uf(){return se(oe.Feature.ENFORCEABLE_SSO)}async function t_(){return se(oe.Feature.SYNC_AUTOMATIONS)}async function r_(){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 as(){return se(oe.Feature.USER_GROUPS)}function a_(){return se(oe.Feature.PWA)}async function Ze(){return se(oe.Feature.EXPANDED_PUBLIC_API)}async function n_(e){if(Xe.env.ENABLE_SSO_MAINTENANCE_MODE||!await uf())return!1;let r;return e?.config?r=e.config:r=await Xe.configs.getSettingsConfig(),!!r.isSSOEnforced}var ns=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 o_(){return se(oe.Feature.VIEW_PERMISSIONS)}async function s_(){return se(oe.Feature.VIEW_READONLY_COLUMNS)}var i_={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 u_(e){return await rs()?{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}:i_}var ss={};w(ss,{enrichAIConfig:()=>os});var pf=require("@budibase/backend-core"),p_="budibase_ai";async function os(e){if(pf.env.SELF_HOSTED)return e;for(let t of Object.values(e.config))if(t.provider==="BudibaseAI")return e;return e.config[p_]={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:()=>m_,addAutomation:()=>I_,addGroup:()=>us,addPlugin:()=>cs,addRow:()=>y_,addRows:()=>A_,addUsers:()=>mn,bustCache:()=>to,decrement:()=>et,decrementMany:()=>da,getCurrentUsageValues:()=>Bu,getLicensedQuota:()=>lf,getQuotaUsage:()=>wt,increment:()=>qe,incrementBudibaseAICredits:()=>yn,incrementMany:()=>Lt,removeApp:()=>g_,removeGroup:()=>ps,removePlugin:()=>ls,removeRow:()=>h_,removeRows:()=>b_,removeUsers:()=>cr,set:()=>is,setAllUsage:()=>ao,setAppUsageValue:()=>ro,setUsage:()=>Uu,setUsagePerApp:()=>Du,updatePluginCount:()=>ds,updateUsage:()=>ir,usageLimitIsExceeded:()=>f_,utils:()=>Rr});var Y=require("@budibase/types");var Ce=require("@budibase/backend-core");var sr=require("dd-trace"),qe=(e,t,r)=>cf({change:1,name:e,type:t,opts:r}),Lt=e=>sr.tracer.trace("quotas.incrementMany",async()=>cf(e)),cf=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})))},is=async(e,t,r)=>Me.setUsage(r,e,t),c_=(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]||{}:{}}},l_=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)}},d_=async(e,t,r,a)=>{let n=await wt(),o=e===Y.QuotaUsageType.MONTHLY?n.quotaReset:void 0,s=await c_(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 l_(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 lf(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 d_(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)})},lf=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")},f_=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"),df=require("@budibase/backend-core"),ff=async()=>{let e=await df.db.getAllApps({dev:!0});return e?e.length:0},m_=async(e,{appId:t}={})=>qe(ur.StaticQuotaName.APPS,ur.QuotaUsageType.STATIC,{fn:e,valueFn:ff,id:t}),g_=async({appId:e}={})=>et(ur.StaticQuotaName.APPS,ur.QuotaUsageType.STATIC,{valueFn:ff,id:e});var Qe=require("@budibase/types"),y_=async(e,{tableId:t}={})=>qe(Qe.StaticQuotaName.ROWS,Qe.QuotaUsageType.STATIC,{fn:e,id:t}),h_=async({tableId:e}={})=>et(Qe.StaticQuotaName.ROWS,Qe.QuotaUsageType.STATIC,{id:e}),A_=async(e,t,{tableId:r}={})=>Lt({change:e,name:Qe.StaticQuotaName.ROWS,type:Qe.QuotaUsageType.STATIC,opts:{fn:t,id:r}}),b_=async(e,{tableId:t}={})=>da({change:e,name:Qe.StaticQuotaName.ROWS,type:Qe.QuotaUsageType.STATIC,opts:{id:t}});var fn=require("@budibase/types"),I_=async(e,{automationId:t}={})=>qe(fn.MonthlyQuotaName.AUTOMATIONS,fn.QuotaUsageType.MONTHLY,{fn:e,id:t});var pr=require("@budibase/types"),us=async e=>qe(pr.StaticQuotaName.USER_GROUPS,pr.QuotaUsageType.STATIC,{fn:e}),ps=async()=>et(pr.StaticQuotaName.USER_GROUPS,pr.QuotaUsageType.STATIC);var mt=require("@budibase/types"),cs=async e=>qe(mt.StaticQuotaName.PLUGINS,mt.QuotaUsageType.STATIC,{fn:e}),ls=async()=>et(mt.StaticQuotaName.PLUGINS,mt.QuotaUsageType.STATIC),ds=async e=>is(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:()=>E_,db:()=>$e,removeAppBuilder:()=>R_});var ga=require("@budibase/backend-core");var Q={};w(Q,{addAppBuilder:()=>hs,addUsers:()=>ms,adjustGroupCreatorsQuotas:()=>v_,cleanupApp:()=>T_,enrichUserRolesFromGroups:()=>w_,fetch:()=>ma,get:()=>qt,getBulk:()=>If,getGroupBuilderAppIds:()=>bf,getGroupRoleId:()=>S_,remove:()=>fs,removeAppBuilder:()=>As,removeUsers:()=>gs,save:()=>lr,updateGroupApps:()=>ys});var _=require("@budibase/backend-core");var mf=require("@budibase/backend-core"),hn=class extends mf.HTTPError{constructor(t){super(`Group name "${t}" is unavailable`,409)}};async function hf(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 Af(e,t){return t?t=t.filter(r=>e.includes(r._id)):t=await M.getBulk(e,{enriched:!1}),t}async function bf(e,t){if(!e.userGroups)return[];let r=await Af(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 S_(e,t,r){if(!e.userGroups)return null;let a=await Af(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 hf(a,t))}async function w_(e){if(!e||!e.userGroups)return e;let t=await If(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 hf(t,n);o&&(e.roles[n]=o)});let a=await bf(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 If(e,t={enriched:!0}){return await M.getBulk(e,t)}async function gf(e){if(await M.getByName(e))throw new hn(e)}async function yf(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 gf(e.name),t.push(_.events.group.created(e));else{let o=await M.get(e._id);if(o.name!==e.name&&await gf(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 yf(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 us(n);{let o=await n();if(a>0)await mn(0,a);else if(a<0){let s=await yf(e),i=Math.abs(a)-s;i>0&&await cr(0,i)}return o}}async function fs(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 ps(),await n(),o}async function ms(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 gs(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 ys(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 T_(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 hs(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 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.includes(t)&&(a.builder.apps=a.builder.apps.filter(n=>n!==r),await lr(a))}async function v_(){if(!await as()){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 E_(e,t){if(!await Pt())throw new Error("Feature not enabled, please check license");await ga.users.addAppBuilder(e,t)}async function R_(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:()=>Es});var Es={};w(Es,{logSearch:()=>D_,oldestLogDate:()=>xf,storeLog:()=>N_});var Rf=require("@budibase/types"),bn=require("@budibase/backend-core");var An=require("@budibase/types");var Z=require("@budibase/backend-core");var Sf=require("@budibase/backend-core");async function wf(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||Sf.logging.logWarn(`Failed to backoff: ${t}`,r),o}var{SEPARATOR:rt,UNICODE_MAX:x_,DocumentType:Tf,AutomationViewMode:bs,ViewName:__,getQueryIndex:O_}=Z.db,P_=new Date(0).toISOString(),L_=100,Is=async()=>ka(An.ConstantQuotaName.AUTOMATION_LOG_RETENTION_DAYS);function vf(e,t,{status:r,automationId:a}={},n={}){let o=a?`${a}${rt}`:"",s=r?`${r}${rt}`:"",i;return r&&a?i=`${bs.ALL}${rt}${s}${o}`:r?i=`${bs.STATUS}${rt}${s}`:a?i=`${bs.AUTOMATION}${rt}${o}`:i=`${Tf.AUTOMATION_LOG}${rt}`,{...n,descending:!0,startkey:`${i}${t}${x_}`,endkey:`${i}${e}`}}function C_(e,t,r){return`${Tf.AUTOMATION_LOG}${rt}${e}${rt}${r}${rt}${t}`}async function Ss(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=vf(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 ws(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=vf(e,t,o,{include_docs:!0,limit:9+1});r?.page&&(s.startkey=r.page),n=await a.query(O_(__.AUTOMATION_LOGS),s)}catch(o){if(o!=null&&(o.name==="not_found"||o.error==="not_found"))return await Yu(),ws(e,t,r);throw o}return _r(n,{paginate:!0,pageSize:9})}async function Ef(e,t){let r=Z.context.getProdAppDB(),a=e._id,n=e.name,o=new Date().toISOString(),s=C_(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 Ts(e,{clearing:t}={clearing:!1}){let r=Z.context.getProdAppDB();await wf(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 q_(){let e=await Is();try{return await Ss(P_,e,{docs:!1,paginate:!1,limit:L_})}catch{return{data:[],hasNextPage:!1}}}async function vs(){let e=Z.context.getProdAppDB();try{let t=await q_();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 Ts(a,{clearing:!0})}catch(t){Z.logging.logAlert(`Failed to cleanup automation log history - Database "${e.name}"`,t)}}var xf=Is;async function U_(e,t,r,a){let n,o=new Date().toISOString(),s=await xf();return(!e||e<s)&&(e=s),r||t?n=await ws(e,o,{automationId:r,status:t,page:a}):n=await Ss(e,o,{status:t,page:a,docs:!0,paginate:!0}),n}async function D_(e){return await vs(),await U_(e.startDate,e.status,e.automationId,e.page)}async function N_(e,t){if(!bn.db.isProdAppID(bn.context.getAppId()))return;let r=await Ef(e,t);t.status===Rf.AutomationStatus.ERROR&&await Ts([r]),await vs()}var Sn={};w(Sn,{checkPluginQuotas:()=>G_,deletePlugin:()=>M_,storePlugin:()=>B_});var Lf=require("@budibase/types"),H=require("@budibase/backend-core");var _f=C(require("fs")),Of=require("path");function Pf(e,t){return _f.default.readFileSync((0,Of.join)(e,t),"utf8")}async function B_(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===Lf.PluginType.DATASOURCE){let js=Pf(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 cs(write)}async function M_(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 ls()}catch(r){let a=r?.message?r?.message:r;throw new Error(`Failed to delete plugin: ${a}`)}}async function G_(){let e=H.tenancy.getGlobalDB();try{let r=(await e.allDocs(H.db.getPluginParams())).rows.length;console.log(`Syncing plugin count: ${r}`),await ds(r)}catch(t){H.logging.logAlert("Unable to retrieve plugins for quota check",t)}}var Ke={};w(Ke,{fetch:()=>F_,fetchValues:()=>Q_,isEncryptionKeyAvailable:()=>k_,isValid:()=>Uf,remove:()=>W_,update:()=>j_});var ya=require("@budibase/types"),Cf=require("@budibase/backend-core");function k_(){return!!Cf.env.ENCRYPTION_KEY}async function F_(){let e=await Et.get();return Object.keys(e.variables)}async function Q_(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 qf(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 j_(e,t){if(Uf(e))await qf(a=>(a[e]=t,a));else throw new Error("Variable name has characters that are not allowed")}async function W_(e){await qf(t=>(delete t[e],t))}function Uf(e){return/^[a-zA-Z0-9-_]+$/.test(e)}var gt={};w(gt,{definitions:()=>tO,download:()=>eO,fetch:()=>Z_,write:()=>J_});var Tn=require("@budibase/types");var $=require("@budibase/backend-core"),Ue=require("@budibase/types");var Df=require("memorystream"),Nf=new $.sql.Sql(Ue.SqlClient.SQL_LITE);async function $_(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=Nf._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 K_(e){return`${$.DocumentType.AUDIT_LOG}${$.SEPARATOR}${e}${$.SEPARATOR}${$.utils.newid()}`}async function Bf(e){e._id||(e._id=K_(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 Rs(e,t,r){t||(t=1);let a=$.context.getAuditLogsDB();try{let n=9+1,o=await $_(e,t,n),s=jt.searchTable(),i=Nf.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 V_(),await Mu(),await Rs(e,t,{isRetry:!0});throw n}}async function V_(){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 Mf(e){let t=$.context.getAuditLogsDB(),r=new Df,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 Df;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"),H_=Aa.constants.MIN_VALID_DATE.toISOString(),z_=Aa.constants.MAX_VALID_DATE.toISOString();function xs(e){return(e.startDate||e.endDate)&&(e.startDate=e.startDate||H_,e.endDate=e.endDate||z_),e}async function Gf(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=xs(e),t.range={timestamp:{high:e.endDate,low:e.startDate}}),Object.keys(t).length===0&&(t.notEmpty={event:!0}),t}function _s(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 Os(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 kf(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=Os(r)),a}async function J_(e,t,r){if(!await ln()||!ce.utils.isAudited(e))return;let a=kf(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 Bf(o)}async function X_(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||_s(i.userId,"user",i.fallback)};i.appId&&(m.app=f||_s(i.appId,"app",i.fallback)),s.push(m)}return s}async function Z_(e){if(!await ln())throw new Error("Audit logs not available - license required.");let t=await Gf(e);if(typeof e.bookmark=="string")throw new Error("String based bookmark not supported.");let r=await Rs(t,e.bookmark);return{hasNextPage:r.hasNextPage,bookmark:r.bookmark,data:await X_(r.rows)}}function eO(e){return e=xs(e),Mf(e)}function tO(){let e=Object.entries(Tn.AuditedEventFriendlyName).filter(r=>r[1]!=null),t={};for(let r of e)t[r[0]]=Os(r[1]);return t}var vn={};w(vn,{applications:()=>qs,roles:()=>Ls,users:()=>Ps});var Ps={};w(Ps,{roleCheck:()=>aO});function rO(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 aO(e,t){return await Ze()||rO(e,t),e}var Ls={};w(Ls,{assign:()=>nO,unAssign:()=>oO});var ba=require("@budibase/backend-core");async function nO(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 oO(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 qs={};w(qs,{buildExportFn:()=>iO,buildImportFn:()=>sO});var Cs=require("@budibase/backend-core");function sO(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 Cs.context.doInAppContext(t.params.appId,async()=>{await e(t),t.body=void 0,t.status=204,await r()})}}function iO(e){return async(t,r)=>{await Ze()||t.throw(403,"Endpoint unavailable, license required.");let{encryptPassword:a,excludeRows:n}=t.request.body;await Cs.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 Us=require("@budibase/backend-core"),Ff;function Qf(){Ff=new Us.queue.BudibaseQueue(Us.queue.JobQueue.APP_BACKUP,{maxStalledCount:3,jobOptions:{attempts:3,removeOnFail:!0,removeOnComplete:!0}})}function Ut(){return Ff}var jf=require("path"),Wf=C(require("fs"));async function Ds(e,t={}){return we.storeAppBackupMetadata(e,t)}function $f(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 uO(e,t,r,a){let n=await En(e);return await we.storeAppBackupMetadata({...n,...$f(t),contents:r,status:t,type:ie.AppBackupType.BACKUP},{filename:a,docId:e})}async function pO(e,t,r){let a=await En(e);return await we.storeAppBackupMetadata({...a,...$f(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 cO(e,t){return we.updateAppBackupMetadata(e,t)}async function lO(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 dO(e,t){return we.fetchAppBackups(e,t)}async function Kf(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 fO(e){let{stream:t}=await Kf(e),r=(0,jf.join)(Ve.objectStore.budibaseTempDir(),Ve.utils.newid()),a=Wf.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 mO(e,t,r={}){let a;try{a=await Ds({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 gO(e,t,r,a){let n=await En(t),o;try{o=await Ds({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 yO={isEnabled:ts,triggerAppRestore:ye(gO),triggerAppBackup:ye(mO),getBackupDownloadStream:ye(Kf),downloadAppBackup:ye(fO),fetchAppBackups:ye(dO),storeAppBackupMetadata:ye(Ds),updateBackupStatus:ye(uO),updateRestoreStatus:ye(pO),getAppBackup:ye(En),updateAppBackup:ye(cO),deleteAppBackup:ye(lO)},at=yO;var Bs={};w(Bs,{init:()=>Ns});var z=require("@budibase/backend-core");var De=require("@budibase/types");var dr=C(require("fs"));async function Ns(e){Ut().process(async t=>{let r=t.data;try{if(r.export)return bO(t,e);if(r.import)return AO(t,e)}catch(a){z.logging.logAlert(`Failed to perform backup for app ID: ${r.appId}`,a)}})}async function hO(e){await z.db.getDB(e,{skip_setup:!0}).destroy()}async function Vf(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 AO(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 Vf(De.AppBackupTrigger.RESTORING,i,a,{processing:t,createdBy:s,name:o});let m=await at.downloadAppBackup(n);await hO(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 bO(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 Vf(n,s,a,{processing:t,doc:{id:r.docId,rev:i},name:o})}catch(i){z.logging.logAlert("App backup error",i)}})}var IO=async e=>{Qf(),await Ns(e.processing)},ve={...at,processing:Bs,init:IO,getBackupQueue:Ut};var Yf=async e=>{e.backups&&await ve.init(e.backups)};var de={};w(de,{create:()=>fM,find:()=>dM,get:()=>lM,remove:()=>gM,update:()=>mM});var yA=C(Ci()),nt=require("@budibase/backend-core");var hA=require("@budibase/types");async function lM(e){let t=nt.tenancy.getGlobalDB(),r=new nt.db.QueryBuilder(t.name,hA.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 dM(e){return await nt.users.getById(e)}async function fM(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,yA.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 mM(e,t){return await $e.save(e,{requirePassword:!1,allowChangingEmail:t?.allowChangingEmail})}async function gM(e){return await $e.destroy(e)}var Ar={};w(Ar,{create:()=>yM});var AA=C(Ci());var bA=require("@budibase/backend-core");async function yM(e){let t=await oo(e.name),r;if(!t)r=(await Q.save(e)).id;else{if(t.scimInfo?.isSync)throw new bA.HTTPError("Group is already synched",409);r=t._id,t.users&&(await Q.removeUsers(r,t.users.map(n=>n._id)),delete t.users),t.scimInfo=(0,AA.default)(t.scimInfo,e.scimInfo),await Q.save(t)}return await Q.get(r)}var Nt={};w(Nt,{logRequest:()=>hM,logResponse:()=>AM});var qi=require("@budibase/backend-core");async function hM(e){qi.logging.logWarn("SCIM request log",e)}async function AM(e){qi.logging.logWarn("SCIM response error",e)}var Gi={};w(Gi,{doInScimContext:()=>Di,feature:()=>j,internalGroupOnly:()=>kn,licenseAuth:()=>wA,licensing:()=>IA,requireSCIM:()=>Ni,scimGroupOnly:()=>Ta,scimUserOnly:()=>wa});var yt=require("@budibase/backend-core");var Mn=require("@budibase/types"),bM=(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=io,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()},IA=bM;var j={};w(j,{requireFeature:()=>IM,requireFeatures:()=>SM});var IM=e=>async(t,r)=>{await cn(e),await r()},SM=(...e)=>async(t,r)=>{await es(e),await r()};var Gn=require("@budibase/backend-core");var Di=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 Ni=async(e,t)=>{await ns(),await t()};var SA=require("@budibase/backend-core");var wa=e=>Bi(SA.users.getById,e,!0),Ta=e=>Bi(M.get,e,!0),kn=e=>Bi(M.get,e,!1);function Bi(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 Mi=require("dd-trace");async function wA(e,t){await Mi.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 Ho(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"),Mi.tracer.setUser({id:"anonymous",tenantId:n.tenantId}),await va.context.doInSelfHostTenantUsingCloud(n.tenantId,async()=>{await va.context.doInLicenseContext(n,async()=>{await t()})})})}var Yi={};w(Yi,{appBackups:()=>ib,auditLogs:()=>JA,environmentVariables:()=>jA,groups:()=>UA,scim:()=>Mb,users:()=>jb});async function TA(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 vA(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 ms(t,r)),a&&(o=await gs(t,a)),e.body={added:n,removed:o}}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 objects, with appId and roleId to add or remove"),e.body=await ys(t,{appsToAdd:r,appsToRemove:a})}async function RA(e){e.body={data:await ma()}}async function xA(e){let{groupId:t,rev:r}=e.params;try{await fs(t,r),e.body={message:"Group deleted successfully"}}catch(a){e.throw(a.status,a)}}async function _A(e){try{e.body=await qt(e.params.groupId)}catch(t){e.throw(t.status,t)}}async function OA(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 PA(e){let{groupId:t,appId:r}=e.params;await hs(t,r),e.body={message:"Group app builder access updated."}}async function LA(e){let{groupId:t,appId:r}=e.params;await As(t,r),e.body={message:"group app builder access removed."}}var CA=C(require("@koa/router")),he=C(require("joi"));var Ee=require("@budibase/types"),Ye=require("@budibase/backend-core"),qA=new CA.default;function TM(){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())}qA.post("/api/global/groups",Ye.auth.adminOnly,j.requireFeature(Ee.Feature.USER_GROUPS),TM(),TA).get("/api/global/groups",j.requireFeature(Ee.Feature.USER_GROUPS),RA).delete("/api/global/groups/:groupId/:rev",j.requireFeature(Ee.Feature.USER_GROUPS),Ye.auth.adminOnly,kn("groupId"),xA).get("/api/global/groups/:groupId",j.requireFeature(Ee.Feature.USER_GROUPS),Ye.auth.builderOrAdmin,_A).get("/api/global/groups/:groupId/users",j.requireFeature(Ee.Feature.USER_GROUPS),Ye.auth.builderOrAdmin,OA).post("/api/global/groups/:groupId/users",Ye.auth.adminOnly,j.requireFeature(Ee.Feature.USER_GROUPS),kn("groupId"),vA).post("/api/global/groups/:groupId/apps",Ye.auth.builderOrAdmin,j.requireFeature(Ee.Feature.USER_GROUPS),EA).post("/api/global/groups/:groupId/app/:appId/builder",Ye.auth.builderOrAdmin,j.requireFeatures(Ee.Feature.USER_GROUPS,Ee.Feature.APP_BUILDERS),PA).delete("/api/global/groups/:groupId/app/:appId/builder",Ye.auth.builderOrAdmin,j.requireFeatures(Ee.Feature.USER_GROUPS,Ee.Feature.APP_BUILDERS),LA);var UA=qA;var ki=require("@budibase/types");var Fi=require("@budibase/backend-core");async function DA(e){e.body={encryptionKeyAvailable:Ke.isEncryptionKeyAvailable()}}async function NA(e){e.body={variables:await Ke.fetch()}}async function BA(e){let{name:t,production:r,development:a}=e.request.body;await Ke.update(t,{production:r,development:a});let n=[ki.AppEnvironment.PRODUCTION];r!==a&&n.push(ki.AppEnvironment.DEVELOPMENT),await Fi.events.environmentVariable.created(t,n),e.body={message:`Environment variable "${t}" created.`}}async function MA(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 GA(e){let t=e.params.varName;await Ke.remove(t),await Fi.events.environmentVariable.deleted(t),e.body={message:`Environment variable "${t}" deleted.`}}var Bt=require("@budibase/backend-core"),FA=C(require("@koa/router")),Ea=C(require("joi")),QA=new FA.default;function kA(){return Bt.auth.joiValidator.body(Ea.default.object({name:Ea.default.string().optional(),production:Ea.default.string().required(),development:Ea.default.string().required()}))}QA.get("/api/env/variables/status",Bt.auth.builderOrAdmin,DA).get("/api/env/variables",Bt.auth.builderOrAdmin,NA).post("/api/env/variables",Bt.auth.builderOrAdmin,kA(),BA).patch("/api/env/variables/:varName",Bt.auth.builderOrAdmin,kA(),MA).delete("/api/env/variables/:varName",Bt.auth.builderOrAdmin,GA);var jA=QA;var Qi=require("@budibase/backend-core");async function WA(e){let t=e.request.body,r=await gt.fetch(t);await Qi.events.auditLog.filtered(t),e.body=r}async function $A(e){let t=e.request.body,{stream:r}=gt.download(t);await Qi.events.auditLog.downloaded(t),e.attachment(`audit-logs-${Date.now()}.log`),e.body=r}async function KA(e){e.body={events:gt.definitions()}}var YA=require("@budibase/types"),Mt=require("@budibase/backend-core"),HA=C(require("@koa/router")),Re=C(require("joi"));function VA(){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(YA.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 zA=new HA.default;zA.post("/api/global/auditlogs/search",Mt.auth.adminOnly,VA(),WA).get("/api/global/auditlogs/download",Mt.auth.adminOnly,Mt.middleware.querystringToBody,VA(),$A).get("/api/global/auditlogs/definitions",Mt.auth.adminOnly,KA);var JA=zA;var ji=require("@budibase/types");var XA=require("@budibase/backend-core");async function br(e,t){await Kt.appExists(t)||e.throw(400,`Provided app ID: ${t} - is invalid.`)}async function ZA(e){let t=e.params.appId;await br(e,t);let r=e.request.body,a=e.user?._id,n=await ve.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 eb(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 XA.events.backup.appBackupRestored(n.metadata),e.body={restoredId:n?.restoreId,message:"Restore triggered - process starting."}}async function tb(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 rb(e){let t=e.params.appId;await br(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 ve.fetchAppBackups(t,{paginate:!0,...r})}async function ab(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 nb(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 ob=C(require("@koa/router")),Gt=C(require("joi")),Fn=require("@budibase/types"),ht=require("@budibase/backend-core"),sb=new ob.default;function xM(){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()}))}sb.post("/api/apps/:appId/backups",ht.auth.builderOrAdmin,ZA).post("/api/apps/:appId/backups/search",ht.auth.builderOrAdmin,xM(),rb).get("/api/apps/:appId/backups/:backupId/file",ht.auth.builderOrAdmin,nb).patch("/api/apps/:appId/backups/:backupId",ht.auth.builderOrAdmin,ab).delete("/api/apps/:appId/backups/:backupId",ht.auth.builderOrAdmin,tb).post("/api/apps/:appId/backups/:backupId/import",ht.auth.builderOrAdmin,eb);var ib=sb;var Bb=C(require("@koa/router"));var Qn=require("scim-patch");var pb=require("@budibase/backend-core");function ub(e,t){let r=e.request.query[t];if(r!==void 0)return+r}var cb=async e=>{let t=ub(e,"pageSize")??20,r=ub(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}},lb=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)},fb=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 pb.EmailUnavailableError&&e.throw(409,"Email already in use"),r}};function _M(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 mb=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(_M(a))return Wi(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)},Wi=async e=>{let{id:t}=e.params;typeof t!="string"&&e.throw(404),await de.remove(t),e.status=204};var Ob=C(_b()),Pb=require("@budibase/shared-core"),jn=require("scim-patch");var Wn=require("scim2-parse-filter");function Lb(e,t){for(let r of t.split(","))delete e[r]}var Cb=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=>{Lb(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=K.group.fromScimGroup(e.request.body),r=await Ar.create(t);e.body=K.group.toScimGroupResponse(r)},Ub=async e=>{let{id:t}=e.params,r=await Q.get(t),a=K.group.toScimGroupResponse(r),{excludedAttributes:n}=e.request.query;n&&Lb(a,n),e.body=a},Db=async e=>{let{id:t}=e.params,r=await Q.get(t);await Q.remove(t,r._rev),e.status=204},Nb=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,Ob.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:Pb.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 Bb.default({prefix:"/api/global/scim/v2"});Ae.use(Ni);Ae.use(Di);Ae.get("/users",cb);Ae.get("/users/:id",wa("id"),lb);Ae.post("/users",fb);Ae.patch("/users/:id",wa("id"),mb);Ae.delete("/users/:id",wa("id"),Wi);Ae.get("/groups",Cb);Ae.post("/groups",j.requireFeature(Ra.Feature.USER_GROUPS),qb);Ae.get("/groups/:id",j.requireFeature(Ra.Feature.USER_GROUPS),Ta("id"),Ub);Ae.delete("/groups/:id",j.requireFeature(Ra.Feature.USER_GROUPS),Ta("id"),Db);Ae.patch("/groups/:id",j.requireFeature(Ra.Feature.USER_GROUPS),Ta("id"),Nb);var Mb=Ae;var Fb=C(require("@koa/router"));var $i=require("@budibase/backend-core");async function Gb(e){let{userId:t,appId:r}=e.params,a=await tt.db.getUser(t);if($i.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 kb(e){let{userId:t,appId:r}=e.params,a=await tt.db.getUser(t);if($i.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 Ki=require("@budibase/types"),Vi=require("@budibase/backend-core"),Qb=new Fb.default;Qb.post("/api/global/users/:userId/app/:appId/builder",Vi.auth.builderOrAdmin,j.requireFeatures(Ki.Feature.APP_BUILDERS),Gb).delete("/api/global/users/:userId/app/:appId/builder",Vi.auth.builderOrAdmin,j.requireFeatures(Ki.Feature.APP_BUILDERS),kb);var jb=Qb;var K={};w(K,{group:()=>zi,user:()=>Hi});var Hi={};w(Hi,{fromScimUser:()=>aG,toScimUserResponse:()=>eG,userFilters:()=>nG});var $n=require("@budibase/types"),Wb=require("scim2-parse-filter"),$b=require("@budibase/backend-core"),Kb=require("@budibase/shared-core"),{unreachable:ZM}=Kb.utils,eG=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},tG=e=>!!e?.id;function rG(e){if($b.utils.validEmail(e.userName))return e.userName;if(e.emails)return e.emails.find(t=>t.primary)?.value||e.emails[0]?.value}var aG=e=>{let t=tG(e)?e:void 0,r=rG(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:ZM(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()}},nG=e=>{let t={equal:{}},r=(0,Wb.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 zi={};w(zi,{fromScimGroup:()=>iG,toScimGroupResponse:()=>oG});var oG=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}))}),sG=e=>!!e?.id,iG=e=>{let t=sG(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 bu={};w(bu,{LLMRequest:()=>V,TableGeneration:()=>Au,agentHistoryTitleSystemPrompt:()=>hG,agentSystemPrompt:()=>yG,aiColumnSchemas:()=>yu,aiTableResponseToTableSchema:()=>du,appendAIColumns:()=>fu,classifyText:()=>Xi,cleanData:()=>Zi,generateAIColumns:()=>cu,generateCode:()=>gG,generateCronExpression:()=>eu,generateData:()=>lu,generateJs:()=>nu,generateSQL:()=>mG,generateTables:()=>pu,generationStructure:()=>gu,getLLM:()=>_a,getLLMConfig:()=>uu,getLLMOrThrow:()=>eI,parseResponseFormat:()=>ou,sanitiseToolName:()=>uG,searchWeb:()=>au,sentimentAnalysis:()=>ru,summarizeText:()=>Kn,tableDataStructuredOutput:()=>hu,translate:()=>tu});function uG(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 ze=require("@budibase/backend-core"),zb=require("@budibase/types");var Yb=C(require("openai"));var At=require("@budibase/types");var Vb=require("@budibase/shared-core");var bt=C(require("dd-trace"));function Ji(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(eu(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(Ji(r,o));case At.AIOperationEnum.CLEAN_DATA:return Zi(r[n]);case At.AIOperationEnum.TRANSLATE:return tu(r[n],s);case At.AIOperationEnum.CATEGORISE_TEXT:if(!i)throw Error("No categories provided for categorise text operation. Please provide categories.");return Xi(Ji(r,o),i.split(","));case At.AIOperationEnum.SENTIMENT_ANALYSIS:return ru(r[n]);case At.AIOperationEnum.PROMPT:return p;case At.AIOperationEnum.SEARCH_WEB:return au(Ji(r,o));default:throw Vb.utils.unreachable(a)}}async generateJs(t,r){return await bt.default.trace("generateJs",async()=>{let{bindings:a=[],snippets:n=[]}=r||{};return await this.prompt(nu(a,n).addUserMessage(t))})}};var Hb=require("openai/helpers/zod");function ou(e){if(e)return e==="text"?{type:"text"}:e==="json"?{type:"json_object"}:e}function pG(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 Yb.default({apiKey:r.apiKey})}async chatCompletion(r){let a={model:this.model,messages:r.messages,max_tokens:this.maxTokens,response_format:ou(r.format)};r.tools&&r.tools.length>0&&(a.tool_choice="auto",a.tools=r.tools.map(Hb.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:pG(n.usage)};throw new Error("No response found")}}};var He=require("@budibase/backend-core");var su=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 su.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 su.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 Xo();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 iu=C(require("@anthropic-ai/sdk"));function cG(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 iu.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:cG(a.usage)}}catch(a){throw a instanceof iu.default.APIError&&console.error(`Anthropic Prompt failed with error ${a.name} and status: ${a.status}`),a}}};var Jb=require("zod"),Xb=require("openai/helpers/zod"),Zb="gpt-4o-mini",lG={OpenAI:ot,TogetherAI:ot,AzureOpenAI:ot,Custom:ot,Anthropic:Yn,BudibaseAI:Vn};async function dG(){return await xa.tracer.trace("getAIConfig",async e=>{let t={type:zb.ConfigType.AI,config:{}};if(!ze.context.isSelfHostUsingCloud()){let a=await ze.configs.getAIConfig();a&&(t=a)}await os(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||Zb,apiKey:r.apiKey}})}async function fG(){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:Zb,apiKey:ze.env.OPENAI_API_KEY}})}async function uu(){return xa.tracer.trace("getLLMConfig",async()=>await dG()||await fG())}async function _a(e){return await xa.tracer.trace("getLLM",async t=>{let{model:r,maxTokens:a}=e||{},n=await uu();if(!n){t.addTags({enabled:!1,reason:"no config found"});return}r&&(n.model=r),a&&(n.maxTokens=a);let o=lG[n.provider];if(!o){t.addTags({enabled:!1,reason:"no provider found",provider:n.provider});return}return new o(n)})}async function eI(){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 Jb.z.ZodType?this.format=(0,Xb.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){return new V().addUserMessage(`Summarize this text:
39
39
  ${e}.
40
- Only return the summary.`)}function Ji(e,t){return new V().addUserMessage(`Return the category of this text: "${e}". Based on these categories: ${t.join(", ")}. Only return the category.`)}function Xi(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 dG(e,t){return new V().addUserMessage(`Given the table schema:
40
+ Only return the summary.`)}function Xi(e,t){return new V().addUserMessage(`Return the category of this text: "${e}". Based on these categories: ${t.join(", ")}. Only return the category.`)}function Zi(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 mG(e,t){return new V().addUserMessage(`Given the table schema:
41
41
  ${t}
42
42
 
43
43
  Generate a SQL query for the following request:
44
44
  ${e}.
45
- Only provide the SQL.`)}function fG(e){return new V().addUserMessage(`Generate JavaScript code for the following request:
45
+ Only provide the SQL.`)}function gG(e){return new V().addUserMessage(`Generate JavaScript code for the following request:
46
46
  ${e}.
47
- Only provide the JS and nothing else.`)}function Zi(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 eu(e,t){return new V().addUserMessage(`Translate the following text: "${e}" into ${t}. Only return the translation.`)}function tu(e){return new V().addUserMessage(`Return the sentiment of this text: "${e}". Only return the sentiment.`)}function ru(e){return new V().addUserMessage(`Search the web for the following: "${e}". Only return the top results.`)}function au(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:
47
+ Only provide the JS and nothing else.`)}function eu(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 tu(e,t){return new V().addUserMessage(`Translate the following text: "${e}" into ${t}. Only return the translation.`)}function ru(e){return new V().addUserMessage(`Return the sentiment of this text: "${e}". Only return the sentiment.`)}function au(e){return new V().addUserMessage(`Search the web for the following: "${e}". Only return the top results.`)}function nu(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
49
 
50
50
  ${e.map(({readableBinding:n})=>`- $("${n}")`).join(`
51
51
  `)}`);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:
@@ -140,7 +140,7 @@ a variable, it will be provided to you as a binding.
140
140
 
141
141
  ${a}
142
142
 
143
- ${r}`)}function uu(){let e=`
143
+ ${r}`)}function pu(){let e=`
144
144
  You are generating Budibase table schemas from user prompts.
145
145
  Always return at least 2 tables, and define only one side of relationships using a link field.
146
146
  Exclude id, created_at, and updated_at (Budibase adds them).
@@ -148,10 +148,10 @@ Include a variety of column types: text, dropdown, date, number.
148
148
  Add at least one formula column, one attachment, and one multi-attachment column across the tables.
149
149
  Budibase handles reverse relationships and many-to-many links \u2014 never define join tables or reverse fields.
150
150
  You may specify foreignColumnName, but do not create that field manually.
151
- `;return new V().addSystemMessage(e)}function pu(){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 cu(){let e=`
151
+ `;return new V().addSystemMessage(e)}function cu(){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 lu(){let e=`
152
152
  For each table, populate the data field with realistic-looking sample records.
153
153
  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 mG(e){return`You are a helpful support agent, using workflows to solve problems for users.
154
+ `;return new V().addSystemMessage(e)}function yG(e){return`You are a helpful support agent, using workflows to solve problems for users.
155
155
  The user is asking you for help with a support query.
156
156
 
157
157
  Your reply MUST be short and concise, answering the user's query as quickly and
@@ -168,15 +168,15 @@ Avoid placeholder values like "foo" or "bar". Use real names, emails, etc., and
168
168
  Information about the user making the request can be found below:
169
169
  \`\`\`
170
170
  ${JSON.stringify(e)}
171
- \`\`\``}function gG(){return`You will be provided with a set of history, a conversation between a user and an AI. Using this
171
+ \`\`\``}function hG(){return`You will be provided with a set of history, a conversation between a user and an AI. Using this
172
172
  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"),tI=require("@budibase/shared-core");var st=require("@budibase/types"),Zb=require("@budibase/backend-core");function lu(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:Zb.docIds.generateTableID(),name:a.name,primaryDisplay:a.primaryDisplay,schema:n})}return t}function du(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.")}),fu=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.")}),yG=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()}),fu.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."),fu.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."),fu.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(`
173
+ less than five words.`}var Oa=require("@budibase/backend-core"),aI=require("@budibase/shared-core");var st=require("@budibase/types"),tI=require("@budibase/backend-core");function du(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:tI.docIds.generateTableID(),name:a.name,primaryDisplay:a.primaryDisplay,schema:n})}return t}function fu(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.")}),mu=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.")}),AG=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()}),mu.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."),mu.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."),mu.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
174
  A JavaScript expression using only previously defined fields.
175
175
  Reference fields using $("Field name"). Must end with: return ...
176
176
  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.")])),mu=A.z.object({tables:A.z.array(A.z.object({name:A.z.string(),schema:yG,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 gu(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"),eI=require("@budibase/shared-core"),U=require("@budibase/types");function yu(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 eI.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:
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.")])),gu=A.z.object({tables:A.z.array(A.z.object({name:A.z.string(),schema:AG,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 yu(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"),rI=require("@budibase/shared-core"),U=require("@budibase/types");function hu(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 rI.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
178
  1. If we have posts and comments, there should be more posts than users, and more comments than posts.
179
179
  2. If it's a ticketing system, there may be more tickets than users, and some users may have submitted several tickets.
180
180
  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")),hu=class e{constructor(t,r){this.llmFunctions={getTableStructure:async t=>Pa.default.trace("llm.getTableStructure",async()=>{let r=await this.llm.prompt(uu().addUserMessage(t).withFormat(mu));try{let a=JSON.parse(r.message);return lu(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(cu().addUserMessage(t).withFormat(yu(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(du(a,i))),o=await this.llmFunctions.generateData(t,a),s=await n;return await this.delegates.generateDataDelegate(o,r,tI.utils.toMap("name",a)),s}async generateAIColumns(t,r){let a=await this.llm.prompt(pu().addUserMessage(`This is the initial user prompt that generated the given schema:
182
- "${t}"`).withFormat(gu(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});
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")),Au=class e{constructor(t,r){this.llmFunctions={getTableStructure:async t=>Pa.default.trace("llm.getTableStructure",async()=>{let r=await this.llm.prompt(pu().addUserMessage(t).withFormat(gu));try{let a=JSON.parse(r.message);return du(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(lu().addUserMessage(t).withFormat(hu(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(fu(a,i))),o=await this.llmFunctions.generateData(t,a),s=await n;return await this.delegates.generateDataDelegate(o,r,aI.utils.toMap("name",a)),s}async generateAIColumns(t,r){let a=await this.llm.prompt(cu().addUserMessage(`This is the initial user prompt that generated the given schema:
182
+ "${t}"`).withFormat(yu(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});
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "dist"
5
5
  ],
6
6
  "license": "UNLICENSED",
7
- "version": "3.12.1",
7
+ "version": "3.12.3",
8
8
  "description": "Budibase Pro (Backend)",
9
9
  "main": "dist/index.js",
10
10
  "types": "dist/index.d.ts",
@@ -73,5 +73,5 @@
73
73
  }
74
74
  }
75
75
  },
76
- "gitHead": "ddbf7f3d2ba1a57923aff162a8bfb737f37eec20"
76
+ "gitHead": "0f048a6c1236761bab75b42c9a7c3c546f7fe4e6"
77
77
  }