@budibase/pro 3.12.8 → 3.12.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,31 +1,31 @@
1
- "use strict";var mI=Object.create;var La=Object.defineProperty;var gI=Object.getOwnPropertyDescriptor;var yI=Object.getOwnPropertyNames;var hI=Object.getPrototypeOf,AI=Object.prototype.hasOwnProperty;var u=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),w=(e,t)=>{for(var r in t)La(e,r,{get:t[r],enumerable:!0})},_u=(e,t,r,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of yI(t))!AI.call(e,n)&&n!==r&&La(e,n,{get:()=>t[n],enumerable:!(a=gI(t,n))||a.enumerable});return e};var C=(e,t,r)=>(r=e!=null?mI(hI(e)):{},_u(t||!e||!e.__esModule?La(r,"default",{value:e,enumerable:!0}):r,e)),bI=e=>_u(La({},"__esModule",{value:!0}),e);var Va=u((N0,fp)=>{"use strict";function yS(e,t){for(var r=-1,a=t.length,n=e.length;++r<a;)e[n+r]=t[r];return e}fp.exports=yS});var yo=u((B0,mp)=>{"use strict";var hS=typeof global=="object"&&global&&global.Object===Object&&global;mp.exports=hS});var ne=u((M0,gp)=>{"use strict";var AS=yo(),bS=typeof self=="object"&&self&&self.Object===Object&&self,IS=AS||bS||Function("return this")();gp.exports=IS});var Rt=u((G0,yp)=>{"use strict";var SS=ne(),wS=SS.Symbol;yp.exports=wS});var Ip=u((k0,bp)=>{"use strict";var hp=Rt(),Ap=Object.prototype,TS=Ap.hasOwnProperty,vS=Ap.toString,Vr=hp?hp.toStringTag:void 0;function ES(e){var t=TS.call(e,Vr),r=e[Vr];try{e[Vr]=void 0;var a=!0}catch{}var n=vS.call(e);return a&&(t?e[Vr]=r:delete e[Vr]),n}bp.exports=ES});var wp=u((F0,Sp)=>{"use strict";var RS=Object.prototype,xS=RS.toString;function _S(e){return xS.call(e)}Sp.exports=_S});var dt=u((Q0,Ep)=>{"use strict";var Tp=Rt(),OS=Ip(),PS=wp(),LS="[object Null]",CS="[object Undefined]",vp=Tp?Tp.toStringTag:void 0;function qS(e){return e==null?e===void 0?CS:LS:vp&&vp in Object(e)?OS(e):PS(e)}Ep.exports=qS});var ge=u((j0,Rp)=>{"use strict";function US(e){return e!=null&&typeof e=="object"}Rp.exports=US});var _p=u((W0,xp)=>{"use strict";var DS=dt(),NS=ge(),BS="[object Arguments]";function MS(e){return NS(e)&&DS(e)==BS}xp.exports=MS});var Yr=u(($0,Lp)=>{"use strict";var Op=_p(),GS=ge(),Pp=Object.prototype,kS=Pp.hasOwnProperty,FS=Pp.propertyIsEnumerable,QS=Op(function(){return arguments}())?Op:function(e){return GS(e)&&kS.call(e,"callee")&&!FS.call(e,"callee")};Lp.exports=QS});var ee=u((K0,Cp)=>{"use strict";var jS=Array.isArray;Cp.exports=jS});var Np=u((V0,Dp)=>{"use strict";var qp=Rt(),WS=Yr(),$S=ee(),Up=qp?qp.isConcatSpreadable:void 0;function KS(e){return $S(e)||WS(e)||!!(Up&&e&&e[Up])}Dp.exports=KS});var ho=u((Y0,Mp)=>{"use strict";var VS=Va(),YS=Np();function Bp(e,t,r,a,n){var o=-1,s=e.length;for(r||(r=YS),n||(n=[]);++o<s;){var i=e[o];t>0&&r(i)?t>1?Bp(i,t-1,r,a,n):VS(n,i):a||(n[n.length]=i)}return n}Mp.exports=Bp});var Hr=u((H0,Gp)=>{"use strict";function HS(e){return e}Gp.exports=HS});var Ya=u((z0,kp)=>{"use strict";function zS(e,t,r){switch(r.length){case 0:return e.call(t);case 1:return e.call(t,r[0]);case 2:return e.call(t,r[0],r[1]);case 3:return e.call(t,r[0],r[1],r[2])}return e.apply(t,r)}kp.exports=zS});var Ao=u((J0,Qp)=>{"use strict";var JS=Ya(),Fp=Math.max;function XS(e,t,r){return t=Fp(t===void 0?e.length-1:t,0),function(){for(var a=arguments,n=-1,o=Fp(a.length-t,0),s=Array(o);++n<o;)s[n]=a[t+n];n=-1;for(var i=Array(t+1);++n<t;)i[n]=a[n];return i[t]=r(s),JS(e,this,i)}}Qp.exports=XS});var Wp=u((X0,jp)=>{"use strict";function ZS(e){return function(){return e}}jp.exports=ZS});var Te=u((Z0,$p)=>{"use strict";function ew(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}$p.exports=ew});var zr=u((ek,Kp)=>{"use strict";var tw=dt(),rw=Te(),aw="[object AsyncFunction]",nw="[object Function]",ow="[object GeneratorFunction]",sw="[object Proxy]";function iw(e){if(!rw(e))return!1;var t=tw(e);return t==nw||t==ow||t==aw||t==sw}Kp.exports=iw});var Yp=u((tk,Vp)=>{"use strict";var uw=ne(),pw=uw["__core-js_shared__"];Vp.exports=pw});var Jp=u((rk,zp)=>{"use strict";var bo=Yp(),Hp=function(){var e=/[^.]+$/.exec(bo&&bo.keys&&bo.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function cw(e){return!!Hp&&Hp in e}zp.exports=cw});var Io=u((ak,Xp)=>{"use strict";var lw=Function.prototype,dw=lw.toString;function fw(e){if(e!=null){try{return dw.call(e)}catch{}try{return e+""}catch{}}return""}Xp.exports=fw});var ec=u((nk,Zp)=>{"use strict";var mw=zr(),gw=Jp(),yw=Te(),hw=Io(),Aw=/[\\^$.*+?()[\]{}|]/g,bw=/^\[object .+?Constructor\]$/,Iw=Function.prototype,Sw=Object.prototype,ww=Iw.toString,Tw=Sw.hasOwnProperty,vw=RegExp("^"+ww.call(Tw).replace(Aw,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function Ew(e){if(!yw(e)||gw(e))return!1;var t=mw(e)?vw:bw;return t.test(hw(e))}Zp.exports=Ew});var rc=u((ok,tc)=>{"use strict";function Rw(e,t){return e?.[t]}tc.exports=Rw});var ft=u((sk,ac)=>{"use strict";var xw=ec(),_w=rc();function Ow(e,t){var r=_w(e,t);return xw(r)?r:void 0}ac.exports=Ow});var So=u((ik,nc)=>{"use strict";var Pw=ft(),Lw=function(){try{var e=Pw(Object,"defineProperty");return e({},"",{}),e}catch{}}();nc.exports=Lw});var ic=u((uk,sc)=>{"use strict";var Cw=Wp(),oc=So(),qw=Hr(),Uw=oc?function(e,t){return oc(e,"toString",{configurable:!0,enumerable:!1,value:Cw(t),writable:!0})}:qw;sc.exports=Uw});var wo=u((pk,uc)=>{"use strict";var Dw=800,Nw=16,Bw=Date.now;function Mw(e){var t=0,r=0;return function(){var a=Bw(),n=Nw-(a-r);if(r=a,n>0){if(++t>=Dw)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}uc.exports=Mw});var Ha=u((ck,pc)=>{"use strict";var Gw=ic(),kw=wo(),Fw=kw(Gw);pc.exports=Fw});var To=u((lk,cc)=>{"use strict";var Qw=Hr(),jw=Ao(),Ww=Ha();function $w(e,t){return Ww(jw(e,t,Qw),e+"")}cc.exports=$w});var Jr=u((dk,lc)=>{"use strict";var Kw=ft(),Vw=Kw(Object,"create");lc.exports=Vw});var mc=u((fk,fc)=>{"use strict";var dc=Jr();function Yw(){this.__data__=dc?dc(null):{},this.size=0}fc.exports=Yw});var yc=u((mk,gc)=>{"use strict";function Hw(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}gc.exports=Hw});var Ac=u((gk,hc)=>{"use strict";var zw=Jr(),Jw="__lodash_hash_undefined__",Xw=Object.prototype,Zw=Xw.hasOwnProperty;function eT(e){var t=this.__data__;if(zw){var r=t[e];return r===Jw?void 0:r}return Zw.call(t,e)?t[e]:void 0}hc.exports=eT});var Ic=u((yk,bc)=>{"use strict";var tT=Jr(),rT=Object.prototype,aT=rT.hasOwnProperty;function nT(e){var t=this.__data__;return tT?t[e]!==void 0:aT.call(t,e)}bc.exports=nT});var wc=u((hk,Sc)=>{"use strict";var oT=Jr(),sT="__lodash_hash_undefined__";function iT(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=oT&&t===void 0?sT:t,this}Sc.exports=iT});var vc=u((Ak,Tc)=>{"use strict";var uT=mc(),pT=yc(),cT=Ac(),lT=Ic(),dT=wc();function Vt(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var a=e[t];this.set(a[0],a[1])}}Vt.prototype.clear=uT;Vt.prototype.delete=pT;Vt.prototype.get=cT;Vt.prototype.has=lT;Vt.prototype.set=dT;Tc.exports=Vt});var Rc=u((bk,Ec)=>{"use strict";function fT(){this.__data__=[],this.size=0}Ec.exports=fT});var Yt=u((Ik,xc)=>{"use strict";function mT(e,t){return e===t||e!==e&&t!==t}xc.exports=mT});var Xr=u((Sk,_c)=>{"use strict";var gT=Yt();function yT(e,t){for(var r=e.length;r--;)if(gT(e[r][0],t))return r;return-1}_c.exports=yT});var Pc=u((wk,Oc)=>{"use strict";var hT=Xr(),AT=Array.prototype,bT=AT.splice;function IT(e){var t=this.__data__,r=hT(t,e);if(r<0)return!1;var a=t.length-1;return r==a?t.pop():bT.call(t,r,1),--this.size,!0}Oc.exports=IT});var Cc=u((Tk,Lc)=>{"use strict";var ST=Xr();function wT(e){var t=this.__data__,r=ST(t,e);return r<0?void 0:t[r][1]}Lc.exports=wT});var Uc=u((vk,qc)=>{"use strict";var TT=Xr();function vT(e){return TT(this.__data__,e)>-1}qc.exports=vT});var Nc=u((Ek,Dc)=>{"use strict";var ET=Xr();function RT(e,t){var r=this.__data__,a=ET(r,e);return a<0?(++this.size,r.push([e,t])):r[a][1]=t,this}Dc.exports=RT});var Zr=u((Rk,Bc)=>{"use strict";var xT=Rc(),_T=Pc(),OT=Cc(),PT=Uc(),LT=Nc();function Ht(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var a=e[t];this.set(a[0],a[1])}}Ht.prototype.clear=xT;Ht.prototype.delete=_T;Ht.prototype.get=OT;Ht.prototype.has=PT;Ht.prototype.set=LT;Bc.exports=Ht});var za=u((xk,Mc)=>{"use strict";var CT=ft(),qT=ne(),UT=CT(qT,"Map");Mc.exports=UT});var Fc=u((_k,kc)=>{"use strict";var Gc=vc(),DT=Zr(),NT=za();function BT(){this.size=0,this.__data__={hash:new Gc,map:new(NT||DT),string:new Gc}}kc.exports=BT});var jc=u((Ok,Qc)=>{"use strict";function MT(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}Qc.exports=MT});var ea=u((Pk,Wc)=>{"use strict";var GT=jc();function kT(e,t){var r=e.__data__;return GT(t)?r[typeof t=="string"?"string":"hash"]:r.map}Wc.exports=kT});var Kc=u((Lk,$c)=>{"use strict";var FT=ea();function QT(e){var t=FT(this,e).delete(e);return this.size-=t?1:0,t}$c.exports=QT});var Yc=u((Ck,Vc)=>{"use strict";var jT=ea();function WT(e){return jT(this,e).get(e)}Vc.exports=WT});var zc=u((qk,Hc)=>{"use strict";var $T=ea();function KT(e){return $T(this,e).has(e)}Hc.exports=KT});var Xc=u((Uk,Jc)=>{"use strict";var VT=ea();function YT(e,t){var r=VT(this,e),a=r.size;return r.set(e,t),this.size+=r.size==a?0:1,this}Jc.exports=YT});var Ja=u((Dk,Zc)=>{"use strict";var HT=Fc(),zT=Kc(),JT=Yc(),XT=zc(),ZT=Xc();function zt(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var a=e[t];this.set(a[0],a[1])}}zt.prototype.clear=HT;zt.prototype.delete=zT;zt.prototype.get=JT;zt.prototype.has=XT;zt.prototype.set=ZT;Zc.exports=zt});var tl=u((Nk,el)=>{"use strict";var ev="__lodash_hash_undefined__";function tv(e){return this.__data__.set(e,ev),this}el.exports=tv});var al=u((Bk,rl)=>{"use strict";function rv(e){return this.__data__.has(e)}rl.exports=rv});var vo=u((Mk,nl)=>{"use strict";var av=Ja(),nv=tl(),ov=al();function Xa(e){var t=-1,r=e==null?0:e.length;for(this.__data__=new av;++t<r;)this.add(e[t])}Xa.prototype.add=Xa.prototype.push=nv;Xa.prototype.has=ov;nl.exports=Xa});var sl=u((Gk,ol)=>{"use strict";function sv(e,t,r,a){for(var n=e.length,o=r+(a?1:-1);a?o--:++o<n;)if(t(e[o],o,e))return o;return-1}ol.exports=sv});var ul=u((kk,il)=>{"use strict";function iv(e){return e!==e}il.exports=iv});var cl=u((Fk,pl)=>{"use strict";function uv(e,t,r){for(var a=r-1,n=e.length;++a<n;)if(e[a]===t)return a;return-1}pl.exports=uv});var dl=u((Qk,ll)=>{"use strict";var pv=sl(),cv=ul(),lv=cl();function dv(e,t,r){return t===t?lv(e,t,r):pv(e,cv,r)}ll.exports=dv});var Eo=u((jk,fl)=>{"use strict";var fv=dl();function mv(e,t){var r=e==null?0:e.length;return!!r&&fv(e,t,0)>-1}fl.exports=mv});var gl=u((Wk,ml)=>{"use strict";function gv(e,t,r){for(var a=-1,n=e==null?0:e.length;++a<n;)if(r(t,e[a]))return!0;return!1}ml.exports=gv});var Ro=u(($k,yl)=>{"use strict";function yv(e,t){return e.has(t)}yl.exports=yv});var xo=u((Kk,hl)=>{"use strict";var hv=ft(),Av=ne(),bv=hv(Av,"Set");hl.exports=bv});var _o=u((Vk,Al)=>{"use strict";function Iv(){}Al.exports=Iv});var Za=u((Yk,bl)=>{"use strict";function Sv(e){var t=-1,r=Array(e.size);return e.forEach(function(a){r[++t]=a}),r}bl.exports=Sv});var Sl=u((Hk,Il)=>{"use strict";var Oo=xo(),wv=_o(),Tv=Za(),vv=1/0,Ev=Oo&&1/Tv(new Oo([,-0]))[1]==vv?function(e){return new Oo(e)}:wv;Il.exports=Ev});var Tl=u((zk,wl)=>{"use strict";var Rv=vo(),xv=Eo(),_v=gl(),Ov=Ro(),Pv=Sl(),Lv=Za(),Cv=200;function qv(e,t,r){var a=-1,n=xv,o=e.length,s=!0,i=[],p=i;if(r)s=!1,n=_v;else if(o>=Cv){var f=t?null:Pv(e);if(f)return Lv(f);s=!1,n=Ov,p=new Rv}else p=t?[]:i;e:for(;++a<o;){var m=e[a],y=t?t(m):m;if(m=r||m!==0?m:0,s&&y===y){for(var g=p.length;g--;)if(p[g]===y)continue e;t&&p.push(y),i.push(m)}else n(p,y,r)||(p!==i&&p.push(y),i.push(m))}return i}wl.exports=qv});var en=u((Jk,vl)=>{"use strict";var Uv=9007199254740991;function Dv(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=Uv}vl.exports=Dv});var Jt=u((Xk,El)=>{"use strict";var Nv=zr(),Bv=en();function Mv(e){return e!=null&&Bv(e.length)&&!Nv(e)}El.exports=Mv});var Po=u((Zk,Rl)=>{"use strict";var Gv=Jt(),kv=ge();function Fv(e){return kv(e)&&Gv(e)}Rl.exports=Fv});var _l=u((eF,xl)=>{"use strict";var Qv=ho(),jv=To(),Wv=Tl(),$v=Po(),Kv=jv(function(e){return Wv(Qv(e,1,$v,!0))});xl.exports=Kv});var Pl=u((tF,Ol)=>{"use strict";var Vv=Zr();function Yv(){this.__data__=new Vv,this.size=0}Ol.exports=Yv});var Cl=u((rF,Ll)=>{"use strict";function Hv(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r}Ll.exports=Hv});var Ul=u((aF,ql)=>{"use strict";function zv(e){return this.__data__.get(e)}ql.exports=zv});var Nl=u((nF,Dl)=>{"use strict";function Jv(e){return this.__data__.has(e)}Dl.exports=Jv});var Ml=u((oF,Bl)=>{"use strict";var Xv=Zr(),Zv=za(),eE=Ja(),tE=200;function rE(e,t){var r=this.__data__;if(r instanceof Xv){var a=r.__data__;if(!Zv||a.length<tE-1)return a.push([e,t]),this.size=++r.size,this;r=this.__data__=new eE(a)}return r.set(e,t),this.size=r.size,this}Bl.exports=rE});var ta=u((sF,Gl)=>{"use strict";var aE=Zr(),nE=Pl(),oE=Cl(),sE=Ul(),iE=Nl(),uE=Ml();function Xt(e){var t=this.__data__=new aE(e);this.size=t.size}Xt.prototype.clear=nE;Xt.prototype.delete=oE;Xt.prototype.get=sE;Xt.prototype.has=iE;Xt.prototype.set=uE;Gl.exports=Xt});var ra=u((iF,Fl)=>{"use strict";var kl=So();function pE(e,t,r){t=="__proto__"&&kl?kl(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}Fl.exports=pE});var Lo=u((uF,Ql)=>{"use strict";var cE=ra(),lE=Yt();function dE(e,t,r){(r!==void 0&&!lE(e[t],r)||r===void 0&&!(t in e))&&cE(e,t,r)}Ql.exports=dE});var Wl=u((pF,jl)=>{"use strict";function fE(e){return function(t,r,a){for(var n=-1,o=Object(t),s=a(t),i=s.length;i--;){var p=s[e?i:++n];if(r(o[p],p,o)===!1)break}return t}}jl.exports=fE});var Co=u((cF,$l)=>{"use strict";var mE=Wl(),gE=mE();$l.exports=gE});var qo=u((aa,Zt)=>{"use strict";var yE=ne(),Hl=typeof aa=="object"&&aa&&!aa.nodeType&&aa,Kl=Hl&&typeof Zt=="object"&&Zt&&!Zt.nodeType&&Zt,hE=Kl&&Kl.exports===Hl,Vl=hE?yE.Buffer:void 0,Yl=Vl?Vl.allocUnsafe:void 0;function AE(e,t){if(t)return e.slice();var r=e.length,a=Yl?Yl(r):new e.constructor(r);return e.copy(a),a}Zt.exports=AE});var Uo=u((lF,zl)=>{"use strict";var bE=ne(),IE=bE.Uint8Array;zl.exports=IE});var tn=u((dF,Xl)=>{"use strict";var Jl=Uo();function SE(e){var t=new e.constructor(e.byteLength);return new Jl(t).set(new Jl(e)),t}Xl.exports=SE});var Do=u((fF,Zl)=>{"use strict";var wE=tn();function TE(e,t){var r=t?wE(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.length)}Zl.exports=TE});var er=u((mF,ed)=>{"use strict";function vE(e,t){var r=-1,a=e.length;for(t||(t=Array(a));++r<a;)t[r]=e[r];return t}ed.exports=vE});var na=u((gF,rd)=>{"use strict";var EE=Te(),td=Object.create,RE=function(){function e(){}return function(t){if(!EE(t))return{};if(td)return td(t);e.prototype=t;var r=new e;return e.prototype=void 0,r}}();rd.exports=RE});var No=u((yF,ad)=>{"use strict";function xE(e,t){return function(r){return e(t(r))}}ad.exports=xE});var rn=u((hF,nd)=>{"use strict";var _E=No(),OE=_E(Object.getPrototypeOf,Object);nd.exports=OE});var an=u((AF,od)=>{"use strict";var PE=Object.prototype;function LE(e){var t=e&&e.constructor,r=typeof t=="function"&&t.prototype||PE;return e===r}od.exports=LE});var Bo=u((bF,sd)=>{"use strict";var CE=na(),qE=rn(),UE=an();function DE(e){return typeof e.constructor=="function"&&!UE(e)?CE(qE(e)):{}}sd.exports=DE});var ud=u((IF,id)=>{"use strict";function NE(){return!1}id.exports=NE});var sa=u((oa,tr)=>{"use strict";var BE=ne(),ME=ud(),ld=typeof oa=="object"&&oa&&!oa.nodeType&&oa,pd=ld&&typeof tr=="object"&&tr&&!tr.nodeType&&tr,GE=pd&&pd.exports===ld,cd=GE?BE.Buffer:void 0,kE=cd?cd.isBuffer:void 0,FE=kE||ME;tr.exports=FE});var Mo=u((SF,fd)=>{"use strict";var QE=dt(),jE=rn(),WE=ge(),$E="[object Object]",KE=Function.prototype,VE=Object.prototype,dd=KE.toString,YE=VE.hasOwnProperty,HE=dd.call(Object);function zE(e){if(!WE(e)||QE(e)!=$E)return!1;var t=jE(e);if(t===null)return!0;var r=YE.call(t,"constructor")&&t.constructor;return typeof r=="function"&&r instanceof r&&dd.call(r)==HE}fd.exports=zE});var gd=u((wF,md)=>{"use strict";var JE=dt(),XE=en(),ZE=ge(),eR="[object Arguments]",tR="[object Array]",rR="[object Boolean]",aR="[object Date]",nR="[object Error]",oR="[object Function]",sR="[object Map]",iR="[object Number]",uR="[object Object]",pR="[object RegExp]",cR="[object Set]",lR="[object String]",dR="[object WeakMap]",fR="[object ArrayBuffer]",mR="[object DataView]",gR="[object Float32Array]",yR="[object Float64Array]",hR="[object Int8Array]",AR="[object Int16Array]",bR="[object Int32Array]",IR="[object Uint8Array]",SR="[object Uint8ClampedArray]",wR="[object Uint16Array]",TR="[object Uint32Array]",B={};B[gR]=B[yR]=B[hR]=B[AR]=B[bR]=B[IR]=B[SR]=B[wR]=B[TR]=!0;B[eR]=B[tR]=B[fR]=B[rR]=B[mR]=B[aR]=B[nR]=B[oR]=B[sR]=B[iR]=B[uR]=B[pR]=B[cR]=B[lR]=B[dR]=!1;function vR(e){return ZE(e)&&XE(e.length)&&!!B[JE(e)]}md.exports=vR});var nn=u((TF,yd)=>{"use strict";function ER(e){return function(t){return e(t)}}yd.exports=ER});var on=u((ia,rr)=>{"use strict";var RR=yo(),hd=typeof ia=="object"&&ia&&!ia.nodeType&&ia,ua=hd&&typeof rr=="object"&&rr&&!rr.nodeType&&rr,xR=ua&&ua.exports===hd,Go=xR&&RR.process,_R=function(){try{var e=ua&&ua.require&&ua.require("util").types;return e||Go&&Go.binding&&Go.binding("util")}catch{}}();rr.exports=_R});var sn=u((vF,Id)=>{"use strict";var OR=gd(),PR=nn(),Ad=on(),bd=Ad&&Ad.isTypedArray,LR=bd?PR(bd):OR;Id.exports=LR});var ko=u((EF,Sd)=>{"use strict";function CR(e,t){if(!(t==="constructor"&&typeof e[t]=="function")&&t!="__proto__")return e[t]}Sd.exports=CR});var Fo=u((RF,wd)=>{"use strict";var qR=ra(),UR=Yt(),DR=Object.prototype,NR=DR.hasOwnProperty;function BR(e,t,r){var a=e[t];(!(NR.call(e,t)&&UR(a,r))||r===void 0&&!(t in e))&&qR(e,t,r)}wd.exports=BR});var ar=u((xF,Td)=>{"use strict";var MR=Fo(),GR=ra();function kR(e,t,r,a){var n=!r;r||(r={});for(var o=-1,s=t.length;++o<s;){var i=t[o],p=a?a(r[i],e[i],i,r,e):void 0;p===void 0&&(p=e[i]),n?GR(r,i,p):MR(r,i,p)}return r}Td.exports=kR});var Ed=u((_F,vd)=>{"use strict";function FR(e,t){for(var r=-1,a=Array(e);++r<e;)a[r]=t(r);return a}vd.exports=FR});var pa=u((OF,Rd)=>{"use strict";var QR=9007199254740991,jR=/^(?:0|[1-9]\d*)$/;function WR(e,t){var r=typeof e;return t=t??QR,!!t&&(r=="number"||r!="symbol"&&jR.test(e))&&e>-1&&e%1==0&&e<t}Rd.exports=WR});var Qo=u((PF,xd)=>{"use strict";var $R=Ed(),KR=Yr(),VR=ee(),YR=sa(),HR=pa(),zR=sn(),JR=Object.prototype,XR=JR.hasOwnProperty;function ZR(e,t){var r=VR(e),a=!r&&KR(e),n=!r&&!a&&YR(e),o=!r&&!a&&!n&&zR(e),s=r||a||n||o,i=s?$R(e.length,String):[],p=i.length;for(var f in e)(t||XR.call(e,f))&&!(s&&(f=="length"||n&&(f=="offset"||f=="parent")||o&&(f=="buffer"||f=="byteLength"||f=="byteOffset")||HR(f,p)))&&i.push(f);return i}xd.exports=ZR});var Od=u((LF,_d)=>{"use strict";function ex(e){var t=[];if(e!=null)for(var r in Object(e))t.push(r);return t}_d.exports=ex});var Ld=u((CF,Pd)=>{"use strict";var tx=Te(),rx=an(),ax=Od(),nx=Object.prototype,ox=nx.hasOwnProperty;function sx(e){if(!tx(e))return ax(e);var t=rx(e),r=[];for(var a in e)a=="constructor"&&(t||!ox.call(e,a))||r.push(a);return r}Pd.exports=sx});var nr=u((qF,Cd)=>{"use strict";var ix=Qo(),ux=Ld(),px=Jt();function cx(e){return px(e)?ix(e,!0):ux(e)}Cd.exports=cx});var Ud=u((UF,qd)=>{"use strict";var lx=ar(),dx=nr();function fx(e){return lx(e,dx(e))}qd.exports=fx});var kd=u((DF,Gd)=>{"use strict";var Dd=Lo(),mx=qo(),gx=Do(),yx=er(),hx=Bo(),Nd=Yr(),Bd=ee(),Ax=Po(),bx=sa(),Ix=zr(),Sx=Te(),wx=Mo(),Tx=sn(),Md=ko(),vx=Ud();function Ex(e,t,r,a,n,o,s){var i=Md(e,r),p=Md(t,r),f=s.get(p);if(f){Dd(e,r,f);return}var m=o?o(i,p,r+"",e,t,s):void 0,y=m===void 0;if(y){var g=Bd(p),S=!g&&bx(p),P=!g&&!S&&Tx(p);m=p,g||S||P?Bd(i)?m=i:Ax(i)?m=yx(i):S?(y=!1,m=mx(p,!0)):P?(y=!1,m=gx(p,!0)):m=[]:wx(p)||Nd(p)?(m=i,Nd(i)?m=vx(i):(!Sx(i)||Ix(i))&&(m=hx(p))):y=!1}y&&(s.set(p,m),n(m,p,a,o,s),s.delete(p)),Dd(e,r,m)}Gd.exports=Ex});var jd=u((NF,Qd)=>{"use strict";var Rx=ta(),xx=Lo(),_x=Co(),Ox=kd(),Px=Te(),Lx=nr(),Cx=ko();function Fd(e,t,r,a,n){e!==t&&_x(t,function(o,s){if(n||(n=new Rx),Px(o))Ox(e,t,s,r,Fd,a,n);else{var i=a?a(Cx(e,s),o,s+"",e,t,n):void 0;i===void 0&&(i=o),xx(e,s,i)}},Lx)}Qd.exports=Fd});var $d=u((BF,Wd)=>{"use strict";var qx=Yt(),Ux=Jt(),Dx=pa(),Nx=Te();function Bx(e,t,r){if(!Nx(r))return!1;var a=typeof t;return(a=="number"?Ux(r)&&Dx(t,r.length):a=="string"&&t in r)?qx(r[t],e):!1}Wd.exports=Bx});var Vd=u((MF,Kd)=>{"use strict";var Mx=To(),Gx=$d();function kx(e){return Mx(function(t,r){var a=-1,n=r.length,o=n>1?r[n-1]:void 0,s=n>2?r[2]:void 0;for(o=e.length>3&&typeof o=="function"?(n--,o):void 0,s&&Gx(r[0],r[1],s)&&(o=n<3?void 0:o,n=1),t=Object(t);++a<n;){var i=r[a];i&&e(t,i,a,o)}return t})}Kd.exports=kx});var jo=u((GF,Yd)=>{"use strict";var Fx=jd(),Qx=Vd(),jx=Qx(function(e,t,r){Fx(e,t,r)});Yd.exports=jx});var zf=u(le=>{"use strict";le.aliasToReal={each:"forEach",eachRight:"forEachRight",entries:"toPairs",entriesIn:"toPairsIn",extend:"assignIn",extendAll:"assignInAll",extendAllWith:"assignInAllWith",extendWith:"assignInWith",first:"head",conforms:"conformsTo",matches:"isMatch",property:"get",__:"placeholder",F:"stubFalse",T:"stubTrue",all:"every",allPass:"overEvery",always:"constant",any:"some",anyPass:"overSome",apply:"spread",assoc:"set",assocPath:"set",complement:"negate",compose:"flowRight",contains:"includes",dissoc:"unset",dissocPath:"unset",dropLast:"dropRight",dropLastWhile:"dropRightWhile",equals:"isEqual",identical:"eq",indexBy:"keyBy",init:"initial",invertObj:"invert",juxt:"over",omitAll:"omit",nAry:"ary",path:"get",pathEq:"matchesProperty",pathOr:"getOr",paths:"at",pickAll:"pick",pipe:"flow",pluck:"map",prop:"get",propEq:"matchesProperty",propOr:"getOr",props:"at",symmetricDifference:"xor",symmetricDifferenceBy:"xorBy",symmetricDifferenceWith:"xorWith",takeLast:"takeRight",takeLastWhile:"takeRightWhile",unapply:"rest",unnest:"flatten",useWith:"overArgs",where:"conformsTo",whereEq:"isMatch",zipObj:"zipObject"};le.aryMethod={1:["assignAll","assignInAll","attempt","castArray","ceil","create","curry","curryRight","defaultsAll","defaultsDeepAll","floor","flow","flowRight","fromPairs","invert","iteratee","memoize","method","mergeAll","methodOf","mixin","nthArg","over","overEvery","overSome","rest","reverse","round","runInContext","spread","template","trim","trimEnd","trimStart","uniqueId","words","zipAll"],2:["add","after","ary","assign","assignAllWith","assignIn","assignInAllWith","at","before","bind","bindAll","bindKey","chunk","cloneDeepWith","cloneWith","concat","conformsTo","countBy","curryN","curryRightN","debounce","defaults","defaultsDeep","defaultTo","delay","difference","divide","drop","dropRight","dropRightWhile","dropWhile","endsWith","eq","every","filter","find","findIndex","findKey","findLast","findLastIndex","findLastKey","flatMap","flatMapDeep","flattenDepth","forEach","forEachRight","forIn","forInRight","forOwn","forOwnRight","get","groupBy","gt","gte","has","hasIn","includes","indexOf","intersection","invertBy","invoke","invokeMap","isEqual","isMatch","join","keyBy","lastIndexOf","lt","lte","map","mapKeys","mapValues","matchesProperty","maxBy","meanBy","merge","mergeAllWith","minBy","multiply","nth","omit","omitBy","overArgs","pad","padEnd","padStart","parseInt","partial","partialRight","partition","pick","pickBy","propertyOf","pull","pullAll","pullAt","random","range","rangeRight","rearg","reject","remove","repeat","restFrom","result","sampleSize","some","sortBy","sortedIndex","sortedIndexOf","sortedLastIndex","sortedLastIndexOf","sortedUniqBy","split","spreadFrom","startsWith","subtract","sumBy","take","takeRight","takeRightWhile","takeWhile","tap","throttle","thru","times","trimChars","trimCharsEnd","trimCharsStart","truncate","union","uniqBy","uniqWith","unset","unzipWith","without","wrap","xor","zip","zipObject","zipObjectDeep"],3:["assignInWith","assignWith","clamp","differenceBy","differenceWith","findFrom","findIndexFrom","findLastFrom","findLastIndexFrom","getOr","includesFrom","indexOfFrom","inRange","intersectionBy","intersectionWith","invokeArgs","invokeArgsMap","isEqualWith","isMatchWith","flatMapDepth","lastIndexOfFrom","mergeWith","orderBy","padChars","padCharsEnd","padCharsStart","pullAllBy","pullAllWith","rangeStep","rangeStepRight","reduce","reduceRight","replace","set","slice","sortedIndexBy","sortedLastIndexBy","transform","unionBy","unionWith","update","xorBy","xorWith","zipWith"],4:["fill","setWith","updateWith"]};le.aryRearg={2:[1,0],3:[2,0,1],4:[3,2,0,1]};le.iterateeAry={dropRightWhile:1,dropWhile:1,every:1,filter:1,find:1,findFrom:1,findIndex:1,findIndexFrom:1,findKey:1,findLast:1,findLastFrom:1,findLastIndex:1,findLastIndexFrom:1,findLastKey:1,flatMap:1,flatMapDeep:1,flatMapDepth:1,forEach:1,forEachRight:1,forIn:1,forInRight:1,forOwn:1,forOwnRight:1,map:1,mapKeys:1,mapValues:1,partition:1,reduce:2,reduceRight:2,reject:1,remove:1,some:1,takeRightWhile:1,takeWhile:1,times:1,transform:2};le.iterateeRearg={mapKeys:[1],reduceRight:[1,0]};le.methodRearg={assignInAllWith:[1,0],assignInWith:[1,2,0],assignAllWith:[1,0],assignWith:[1,2,0],differenceBy:[1,2,0],differenceWith:[1,2,0],getOr:[2,1,0],intersectionBy:[1,2,0],intersectionWith:[1,2,0],isEqualWith:[1,2,0],isMatchWith:[2,1,0],mergeAllWith:[1,0],mergeWith:[1,2,0],padChars:[2,1,0],padCharsEnd:[2,1,0],padCharsStart:[2,1,0],pullAllBy:[2,1,0],pullAllWith:[2,1,0],rangeStep:[1,2,0],rangeStepRight:[1,2,0],setWith:[3,1,2,0],sortedIndexBy:[2,1,0],sortedLastIndexBy:[2,1,0],unionBy:[1,2,0],unionWith:[1,2,0],updateWith:[3,1,2,0],xorBy:[1,2,0],xorWith:[1,2,0],zipWith:[1,2,0]};le.methodSpread={assignAll:{start:0},assignAllWith:{start:0},assignInAll:{start:0},assignInAllWith:{start:0},defaultsAll:{start:0},defaultsDeepAll:{start:0},invokeArgs:{start:2},invokeArgsMap:{start:2},mergeAll:{start:0},mergeAllWith:{start:0},partial:{start:1},partialRight:{start:1},without:{start:1},zipAll:{start:0}};le.mutate={array:{fill:!0,pull:!0,pullAll:!0,pullAllBy:!0,pullAllWith:!0,pullAt:!0,remove:!0,reverse:!0},object:{assign:!0,assignAll:!0,assignAllWith:!0,assignIn:!0,assignInAll:!0,assignInAllWith:!0,assignInWith:!0,assignWith:!0,defaults:!0,defaultsAll:!0,defaultsDeep:!0,defaultsDeepAll:!0,merge:!0,mergeAll:!0,mergeAllWith:!0,mergeWith:!0},set:{set:!0,setWith:!0,unset:!0,update:!0,updateWith:!0}};le.realToAlias=function(){var e=Object.prototype.hasOwnProperty,t=le.aliasToReal,r={};for(var a in t){var n=t[a];e.call(r,n)?r[n].push(a):r[n]=[a]}return r}();le.remap={assignAll:"assign",assignAllWith:"assignWith",assignInAll:"assignIn",assignInAllWith:"assignInWith",curryN:"curry",curryRightN:"curryRight",defaultsAll:"defaults",defaultsDeepAll:"defaultsDeep",findFrom:"find",findIndexFrom:"findIndex",findLastFrom:"findLast",findLastIndexFrom:"findLastIndex",getOr:"get",includesFrom:"includes",indexOfFrom:"indexOf",invokeArgs:"invoke",invokeArgsMap:"invokeMap",lastIndexOfFrom:"lastIndexOf",mergeAll:"merge",mergeAllWith:"mergeWith",padChars:"pad",padCharsEnd:"padEnd",padCharsStart:"padStart",propertyOf:"get",rangeStep:"range",rangeStepRight:"rangeRight",restFrom:"rest",spreadFrom:"spread",trimChars:"trim",trimCharsEnd:"trimEnd",trimCharsStart:"trimStart",zipAll:"zip"};le.skipFixed={castArray:!0,flow:!0,flowRight:!0,iteratee:!0,mixin:!0,rearg:!0,runInContext:!0};le.skipRearg={add:!0,assign:!0,assignIn:!0,bind:!0,bindKey:!0,concat:!0,difference:!0,divide:!0,eq:!0,gt:!0,gte:!0,isEqual:!0,lt:!0,lte:!0,matchesProperty:!0,merge:!0,multiply:!0,overArgs:!0,partial:!0,partialRight:!0,propertyOf:!0,random:!0,range:!0,rangeRight:!0,subtract:!0,zip:!0,zipObject:!0,zipObjectDeep:!0}});var Gs=u((ij,Jf)=>{"use strict";Jf.exports={}});var tm=u((uj,em)=>{"use strict";var J=zf(),wO=Gs(),Xf=Array.prototype.push;function TO(e,t){return t==2?function(r,a){return e.apply(void 0,arguments)}:function(r){return e.apply(void 0,arguments)}}function ks(e,t){return t==2?function(r,a){return e(r,a)}:function(r){return e(r)}}function Zf(e){for(var t=e?e.length:0,r=Array(t);t--;)r[t]=e[t];return r}function vO(e){return function(t){return e({},t)}}function EO(e,t){return function(){for(var r=arguments.length,a=r-1,n=Array(r);r--;)n[r]=arguments[r];var o=n[t],s=n.slice(0,t);return o&&Xf.apply(s,o),t!=a&&Xf.apply(s,n.slice(t+1)),e.apply(this,s)}}function Fs(e,t){return function(){var r=arguments.length;if(r){for(var a=Array(r);r--;)a[r]=arguments[r];var n=a[0]=t.apply(void 0,a);return e.apply(void 0,a),n}}}function Qs(e,t,r,a){var n=typeof t=="function",o=t===Object(t);if(o&&(a=r,r=t,t=void 0),r==null)throw new TypeError;a||(a={});var s={cap:"cap"in a?a.cap:!0,curry:"curry"in a?a.curry:!0,fixed:"fixed"in a?a.fixed:!0,immutable:"immutable"in a?a.immutable:!0,rearg:"rearg"in a?a.rearg:!0},i=n?r:wO,p="curry"in a&&a.curry,f="fixed"in a&&a.fixed,m="rearg"in a&&a.rearg,y=n?r.runInContext():void 0,g=n?r:{ary:e.ary,assign:e.assign,clone:e.clone,curry:e.curry,forEach:e.forEach,isArray:e.isArray,isError:e.isError,isFunction:e.isFunction,isWeakMap:e.isWeakMap,iteratee:e.iteratee,keys:e.keys,rearg:e.rearg,toInteger:e.toInteger,toPath:e.toPath},S=g.ary,P=g.assign,x=g.clone,R=g.curry,E=g.forEach,q=g.isArray,xe=g.isError,be=g.isFunction,it=g.isWeakMap,kt=g.keys,Ir=g.rearg,Sr=g.toInteger,oI=g.toPath,Su=kt(J.aryMethod),sI={castArray:function(I){return function(){var h=arguments[0];return q(h)?I(Zf(h)):I.apply(void 0,arguments)}},iteratee:function(I){return function(){var h=arguments[0],b=arguments[1],v=I(h,b),O=v.length;return s.cap&&typeof b=="number"?(b=b>2?b-2:1,O&&O<=b?v:ks(v,b)):v}},mixin:function(I){return function(h){var b=this;if(!be(b))return I(b,Object(h));var v=[];return E(kt(h),function(O){be(h[O])&&v.push([O,b.prototype[O]])}),I(b,Object(h)),E(v,function(O){var te=O[1];be(te)?b.prototype[O[0]]=te:delete b.prototype[O[0]]}),b}},nthArg:function(I){return function(h){var b=h<0?1:Sr(h)+1;return R(I(h),b)}},rearg:function(I){return function(h,b){var v=b?b.length:0;return R(I(h,b),v)}},runInContext:function(I){return function(h){return Qs(e,I(h),a)}}};function iI(I,h){if(s.cap){var b=J.iterateeRearg[I];if(b)return dI(h,b);var v=!n&&J.iterateeAry[I];if(v)return lI(h,v)}return h}function uI(I,h,b){return p||s.curry&&b>1?R(h,b):h}function wu(I,h,b){if(s.fixed&&(f||!J.skipFixed[I])){var v=J.methodSpread[I],O=v&&v.start;return O===void 0?S(h,b):EO(h,O)}return h}function Tu(I,h,b){return s.rearg&&b>1&&(m||!J.skipRearg[I])?Ir(h,J.methodRearg[I]||J.aryRearg[b]):h}function pI(I,h){h=oI(h);for(var b=-1,v=h.length,O=v-1,te=x(Object(I)),Ne=te;Ne!=null&&++b<v;){var Ie=h[b],Be=Ne[Ie];Be!=null&&!(be(Be)||xe(Be)||it(Be))&&(Ne[Ie]=x(b==O?Be:Object(Be))),Ne=Ne[Ie]}return te}function cI(I){return fe.runInContext.convert(I)(void 0)}function vu(I,h){var b=J.aliasToReal[I]||I,v=J.remap[b]||b,O=a;return function(te){var Ne=n?y:g,Ie=n?y[v]:h,Be=P(P({},O),te);return Qs(Ne,b,Ie,Be)}}function lI(I,h){return Eu(I,function(b){return typeof b=="function"?ks(b,h):b})}function dI(I,h){return Eu(I,function(b){var v=h.length;return TO(Ir(ks(b,v),h),v)})}function Eu(I,h){return function(){var b=arguments.length;if(!b)return I();for(var v=Array(b);b--;)v[b]=arguments[b];var O=s.rearg?0:b-1;return v[O]=h(v[O]),I.apply(void 0,v)}}function Ru(I,h,b){var v,O=J.aliasToReal[I]||I,te=h,Ne=sI[O];return Ne?te=Ne(h):s.immutable&&(J.mutate.array[O]?te=Fs(h,Zf):J.mutate.object[O]?te=Fs(h,vO(h)):J.mutate.set[O]&&(te=Fs(h,pI))),E(Su,function(Ie){return E(J.aryMethod[Ie],function(Be){if(O==Be){var xu=J.methodSpread[O],fI=xu&&xu.afterRearg;return v=fI?wu(O,Tu(O,te,Ie),Ie):Tu(O,wu(O,te,Ie),Ie),v=iI(O,v),v=uI(O,v,Ie),!1}}),!v}),v||(v=te),v==h&&(v=p?R(v,1):function(){return h.apply(this,arguments)}),v.convert=vu(O,h),v.placeholder=h.placeholder=b,v}if(!o)return Ru(t,r,i);var fe=r,wr=[];return E(Su,function(I){E(J.aryMethod[I],function(h){var b=fe[J.remap[h]||h];b&&wr.push([h,Ru(h,b,fe)])})}),E(kt(fe),function(I){var h=fe[I];if(typeof h=="function"){for(var b=wr.length;b--;)if(wr[b][0]==I)return;h.convert=vu(I,h),wr.push([I,h])}}),E(wr,function(I){fe[I[0]]=I[1]}),fe.convert=cI,fe.placeholder=fe,E(kt(fe),function(I){E(J.realToAlias[I]||[],function(h){fe[h]=fe[I]})}),fe}em.exports=Qs});var Ws=u((pj,rm)=>{"use strict";var RO=ft(),xO=ne(),_O=RO(xO,"WeakMap");rm.exports=_O});var $s=u((cj,nm)=>{"use strict";var am=Ws(),OO=am&&new am;nm.exports=OO});var Ks=u((lj,sm)=>{"use strict";var PO=Hr(),om=$s(),LO=om?function(e,t){return om.set(e,t),e}:PO;sm.exports=LO});var Ia=u((dj,im)=>{"use strict";var CO=na(),qO=Te();function UO(e){return function(){var t=arguments;switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3]);case 5:return new e(t[0],t[1],t[2],t[3],t[4]);case 6:return new e(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new e(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var r=CO(e.prototype),a=e.apply(r,t);return qO(a)?a:r}}im.exports=UO});var pm=u((fj,um)=>{"use strict";var DO=Ia(),NO=ne(),BO=1;function MO(e,t,r){var a=t&BO,n=DO(e);function o(){var s=this&&this!==NO&&this instanceof o?n:e;return s.apply(a?r:this,arguments)}return o}um.exports=MO});var Vs=u((mj,cm)=>{"use strict";var GO=Math.max;function kO(e,t,r,a){for(var n=-1,o=e.length,s=r.length,i=-1,p=t.length,f=GO(o-s,0),m=Array(p+f),y=!a;++i<p;)m[i]=t[i];for(;++n<s;)(y||n<o)&&(m[r[n]]=e[n]);for(;f--;)m[i++]=e[n++];return m}cm.exports=kO});var Ys=u((gj,lm)=>{"use strict";var FO=Math.max;function QO(e,t,r,a){for(var n=-1,o=e.length,s=-1,i=r.length,p=-1,f=t.length,m=FO(o-i,0),y=Array(m+f),g=!a;++n<m;)y[n]=e[n];for(var S=n;++p<f;)y[S+p]=t[p];for(;++s<i;)(g||n<o)&&(y[S+r[s]]=e[n++]);return y}lm.exports=QO});var fm=u((yj,dm)=>{"use strict";function jO(e,t){for(var r=e.length,a=0;r--;)e[r]===t&&++a;return a}dm.exports=jO});var Rn=u((hj,mm)=>{"use strict";function WO(){}mm.exports=WO});var _n=u((Aj,gm)=>{"use strict";var $O=na(),KO=Rn(),VO=4294967295;function xn(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=VO,this.__views__=[]}xn.prototype=$O(KO.prototype);xn.prototype.constructor=xn;gm.exports=xn});var Hs=u((bj,hm)=>{"use strict";var ym=$s(),YO=_o(),HO=ym?function(e){return ym.get(e)}:YO;hm.exports=HO});var bm=u((Ij,Am)=>{"use strict";var zO={};Am.exports=zO});var wm=u((Sj,Sm)=>{"use strict";var Im=bm(),JO=Object.prototype,XO=JO.hasOwnProperty;function ZO(e){for(var t=e.name+"",r=Im[t],a=XO.call(Im,t)?r.length:0;a--;){var n=r[a],o=n.func;if(o==null||o==e)return n.name}return t}Sm.exports=ZO});var zs=u((wj,Tm)=>{"use strict";var eP=na(),tP=Rn();function On(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=void 0}On.prototype=eP(tP.prototype);On.prototype.constructor=On;Tm.exports=On});var Em=u((Tj,vm)=>{"use strict";var rP=_n(),aP=zs(),nP=er();function oP(e){if(e instanceof rP)return e.clone();var t=new aP(e.__wrapped__,e.__chain__);return t.__actions__=nP(e.__actions__),t.__index__=e.__index__,t.__values__=e.__values__,t}vm.exports=oP});var _m=u((vj,xm)=>{"use strict";var sP=_n(),Rm=zs(),iP=Rn(),uP=ee(),pP=ge(),cP=Em(),lP=Object.prototype,dP=lP.hasOwnProperty;function Pn(e){if(pP(e)&&!uP(e)&&!(e instanceof sP)){if(e instanceof Rm)return e;if(dP.call(e,"__wrapped__"))return cP(e)}return new Rm(e)}Pn.prototype=iP.prototype;Pn.prototype.constructor=Pn;xm.exports=Pn});var Pm=u((Ej,Om)=>{"use strict";var fP=_n(),mP=Hs(),gP=wm(),yP=_m();function hP(e){var t=gP(e),r=yP[t];if(typeof r!="function"||!(t in fP.prototype))return!1;if(e===r)return!0;var a=mP(r);return!!a&&e===a[0]}Om.exports=hP});var Js=u((Rj,Lm)=>{"use strict";var AP=Ks(),bP=wo(),IP=bP(AP);Lm.exports=IP});var qm=u((xj,Cm)=>{"use strict";var SP=/\{\n\/\* \[wrapped with (.+)\] \*/,wP=/,? & /;function TP(e){var t=e.match(SP);return t?t[1].split(wP):[]}Cm.exports=TP});var Dm=u((_j,Um)=>{"use strict";var vP=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/;function EP(e,t){var r=t.length;if(!r)return e;var a=r-1;return t[a]=(r>1?"& ":"")+t[a],t=t.join(r>2?", ":" "),e.replace(vP,`{
1
+ "use strict";var TI=Object.create;var qa=Object.defineProperty;var vI=Object.getOwnPropertyDescriptor;var EI=Object.getOwnPropertyNames;var RI=Object.getPrototypeOf,_I=Object.prototype.hasOwnProperty;var u=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),w=(e,t)=>{for(var r in t)qa(e,r,{get:t[r],enumerable:!0})},Du=(e,t,r,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of EI(t))!_I.call(e,n)&&n!==r&&qa(e,n,{get:()=>t[n],enumerable:!(a=vI(t,n))||a.enumerable});return e};var P=(e,t,r)=>(r=e!=null?TI(RI(e)):{},Du(t||!e||!e.__esModule?qa(r,"default",{value:e,enumerable:!0}):r,e)),xI=e=>Du(qa({},"__esModule",{value:!0}),e);var za=u((Kk,Ip)=>{"use strict";function ES(e,t){for(var r=-1,a=t.length,n=e.length;++r<a;)e[n+r]=t[r];return e}Ip.exports=ES});var To=u((Vk,Sp)=>{"use strict";var RS=typeof global=="object"&&global&&global.Object===Object&&global;Sp.exports=RS});var oe=u((Yk,wp)=>{"use strict";var _S=To(),xS=typeof self=="object"&&self&&self.Object===Object&&self,CS=_S||xS||Function("return this")();wp.exports=CS});var _t=u((Hk,Tp)=>{"use strict";var LS=oe(),OS=LS.Symbol;Tp.exports=OS});var _p=u((zk,Rp)=>{"use strict";var vp=_t(),Ep=Object.prototype,PS=Ep.hasOwnProperty,US=Ep.toString,Hr=vp?vp.toStringTag:void 0;function qS(e){var t=PS.call(e,Hr),r=e[Hr];try{e[Hr]=void 0;var a=!0}catch{}var n=US.call(e);return a&&(t?e[Hr]=r:delete e[Hr]),n}Rp.exports=qS});var Cp=u((Jk,xp)=>{"use strict";var DS=Object.prototype,NS=DS.toString;function BS(e){return NS.call(e)}xp.exports=BS});var mt=u((Xk,Pp)=>{"use strict";var Lp=_t(),MS=_p(),GS=Cp(),kS="[object Null]",FS="[object Undefined]",Op=Lp?Lp.toStringTag:void 0;function QS(e){return e==null?e===void 0?FS:kS:Op&&Op in Object(e)?MS(e):GS(e)}Pp.exports=QS});var he=u((Zk,Up)=>{"use strict";function jS(e){return e!=null&&typeof e=="object"}Up.exports=jS});var Dp=u((e0,qp)=>{"use strict";var WS=mt(),$S=he(),KS="[object Arguments]";function VS(e){return $S(e)&&WS(e)==KS}qp.exports=VS});var zr=u((t0,Mp)=>{"use strict";var Np=Dp(),YS=he(),Bp=Object.prototype,HS=Bp.hasOwnProperty,zS=Bp.propertyIsEnumerable,JS=Np(function(){return arguments}())?Np:function(e){return YS(e)&&HS.call(e,"callee")&&!zS.call(e,"callee")};Mp.exports=JS});var re=u((r0,Gp)=>{"use strict";var XS=Array.isArray;Gp.exports=XS});var jp=u((a0,Qp)=>{"use strict";var kp=_t(),ZS=zr(),ew=re(),Fp=kp?kp.isConcatSpreadable:void 0;function tw(e){return ew(e)||ZS(e)||!!(Fp&&e&&e[Fp])}Qp.exports=tw});var vo=u((n0,$p)=>{"use strict";var rw=za(),aw=jp();function Wp(e,t,r,a,n){var o=-1,s=e.length;for(r||(r=aw),n||(n=[]);++o<s;){var i=e[o];t>0&&r(i)?t>1?Wp(i,t-1,r,a,n):rw(n,i):a||(n[n.length]=i)}return n}$p.exports=Wp});var Jr=u((o0,Kp)=>{"use strict";function nw(e){return e}Kp.exports=nw});var Ja=u((s0,Vp)=>{"use strict";function ow(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)}Vp.exports=ow});var Eo=u((i0,Hp)=>{"use strict";var sw=Ja(),Yp=Math.max;function iw(e,t,r){return t=Yp(t===void 0?e.length-1:t,0),function(){for(var a=arguments,n=-1,o=Yp(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),sw(e,this,i)}}Hp.exports=iw});var Jp=u((u0,zp)=>{"use strict";function uw(e){return function(){return e}}zp.exports=uw});var ve=u((p0,Xp)=>{"use strict";function pw(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}Xp.exports=pw});var Xr=u((c0,Zp)=>{"use strict";var cw=mt(),lw=ve(),dw="[object AsyncFunction]",fw="[object Function]",mw="[object GeneratorFunction]",gw="[object Proxy]";function hw(e){if(!lw(e))return!1;var t=cw(e);return t==fw||t==mw||t==dw||t==gw}Zp.exports=hw});var tc=u((l0,ec)=>{"use strict";var yw=oe(),Aw=yw["__core-js_shared__"];ec.exports=Aw});var nc=u((d0,ac)=>{"use strict";var Ro=tc(),rc=function(){var e=/[^.]+$/.exec(Ro&&Ro.keys&&Ro.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function bw(e){return!!rc&&rc in e}ac.exports=bw});var _o=u((f0,oc)=>{"use strict";var Iw=Function.prototype,Sw=Iw.toString;function ww(e){if(e!=null){try{return Sw.call(e)}catch{}try{return e+""}catch{}}return""}oc.exports=ww});var ic=u((m0,sc)=>{"use strict";var Tw=Xr(),vw=nc(),Ew=ve(),Rw=_o(),_w=/[\\^$.*+?()[\]{}|]/g,xw=/^\[object .+?Constructor\]$/,Cw=Function.prototype,Lw=Object.prototype,Ow=Cw.toString,Pw=Lw.hasOwnProperty,Uw=RegExp("^"+Ow.call(Pw).replace(_w,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function qw(e){if(!Ew(e)||vw(e))return!1;var t=Tw(e)?Uw:xw;return t.test(Rw(e))}sc.exports=qw});var pc=u((g0,uc)=>{"use strict";function Dw(e,t){return e?.[t]}uc.exports=Dw});var gt=u((h0,cc)=>{"use strict";var Nw=ic(),Bw=pc();function Mw(e,t){var r=Bw(e,t);return Nw(r)?r:void 0}cc.exports=Mw});var xo=u((y0,lc)=>{"use strict";var Gw=gt(),kw=function(){try{var e=Gw(Object,"defineProperty");return e({},"",{}),e}catch{}}();lc.exports=kw});var mc=u((A0,fc)=>{"use strict";var Fw=Jp(),dc=xo(),Qw=Jr(),jw=dc?function(e,t){return dc(e,"toString",{configurable:!0,enumerable:!1,value:Fw(t),writable:!0})}:Qw;fc.exports=jw});var Co=u((b0,gc)=>{"use strict";var Ww=800,$w=16,Kw=Date.now;function Vw(e){var t=0,r=0;return function(){var a=Kw(),n=$w-(a-r);if(r=a,n>0){if(++t>=Ww)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}gc.exports=Vw});var Xa=u((I0,hc)=>{"use strict";var Yw=mc(),Hw=Co(),zw=Hw(Yw);hc.exports=zw});var Lo=u((S0,yc)=>{"use strict";var Jw=Jr(),Xw=Eo(),Zw=Xa();function eT(e,t){return Zw(Xw(e,t,Jw),e+"")}yc.exports=eT});var Zr=u((w0,Ac)=>{"use strict";var tT=gt(),rT=tT(Object,"create");Ac.exports=rT});var Sc=u((T0,Ic)=>{"use strict";var bc=Zr();function aT(){this.__data__=bc?bc(null):{},this.size=0}Ic.exports=aT});var Tc=u((v0,wc)=>{"use strict";function nT(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}wc.exports=nT});var Ec=u((E0,vc)=>{"use strict";var oT=Zr(),sT="__lodash_hash_undefined__",iT=Object.prototype,uT=iT.hasOwnProperty;function pT(e){var t=this.__data__;if(oT){var r=t[e];return r===sT?void 0:r}return uT.call(t,e)?t[e]:void 0}vc.exports=pT});var _c=u((R0,Rc)=>{"use strict";var cT=Zr(),lT=Object.prototype,dT=lT.hasOwnProperty;function fT(e){var t=this.__data__;return cT?t[e]!==void 0:dT.call(t,e)}Rc.exports=fT});var Cc=u((_0,xc)=>{"use strict";var mT=Zr(),gT="__lodash_hash_undefined__";function hT(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=mT&&t===void 0?gT:t,this}xc.exports=hT});var Oc=u((x0,Lc)=>{"use strict";var yT=Sc(),AT=Tc(),bT=Ec(),IT=_c(),ST=Cc();function Yt(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var a=e[t];this.set(a[0],a[1])}}Yt.prototype.clear=yT;Yt.prototype.delete=AT;Yt.prototype.get=bT;Yt.prototype.has=IT;Yt.prototype.set=ST;Lc.exports=Yt});var Uc=u((C0,Pc)=>{"use strict";function wT(){this.__data__=[],this.size=0}Pc.exports=wT});var Ht=u((L0,qc)=>{"use strict";function TT(e,t){return e===t||e!==e&&t!==t}qc.exports=TT});var ea=u((O0,Dc)=>{"use strict";var vT=Ht();function ET(e,t){for(var r=e.length;r--;)if(vT(e[r][0],t))return r;return-1}Dc.exports=ET});var Bc=u((P0,Nc)=>{"use strict";var RT=ea(),_T=Array.prototype,xT=_T.splice;function CT(e){var t=this.__data__,r=RT(t,e);if(r<0)return!1;var a=t.length-1;return r==a?t.pop():xT.call(t,r,1),--this.size,!0}Nc.exports=CT});var Gc=u((U0,Mc)=>{"use strict";var LT=ea();function OT(e){var t=this.__data__,r=LT(t,e);return r<0?void 0:t[r][1]}Mc.exports=OT});var Fc=u((q0,kc)=>{"use strict";var PT=ea();function UT(e){return PT(this.__data__,e)>-1}kc.exports=UT});var jc=u((D0,Qc)=>{"use strict";var qT=ea();function DT(e,t){var r=this.__data__,a=qT(r,e);return a<0?(++this.size,r.push([e,t])):r[a][1]=t,this}Qc.exports=DT});var ta=u((N0,Wc)=>{"use strict";var NT=Uc(),BT=Bc(),MT=Gc(),GT=Fc(),kT=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=NT;zt.prototype.delete=BT;zt.prototype.get=MT;zt.prototype.has=GT;zt.prototype.set=kT;Wc.exports=zt});var Za=u((B0,$c)=>{"use strict";var FT=gt(),QT=oe(),jT=FT(QT,"Map");$c.exports=jT});var Yc=u((M0,Vc)=>{"use strict";var Kc=Oc(),WT=ta(),$T=Za();function KT(){this.size=0,this.__data__={hash:new Kc,map:new($T||WT),string:new Kc}}Vc.exports=KT});var zc=u((G0,Hc)=>{"use strict";function VT(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}Hc.exports=VT});var ra=u((k0,Jc)=>{"use strict";var YT=zc();function HT(e,t){var r=e.__data__;return YT(t)?r[typeof t=="string"?"string":"hash"]:r.map}Jc.exports=HT});var Zc=u((F0,Xc)=>{"use strict";var zT=ra();function JT(e){var t=zT(this,e).delete(e);return this.size-=t?1:0,t}Xc.exports=JT});var tl=u((Q0,el)=>{"use strict";var XT=ra();function ZT(e){return XT(this,e).get(e)}el.exports=ZT});var al=u((j0,rl)=>{"use strict";var ev=ra();function tv(e){return ev(this,e).has(e)}rl.exports=tv});var ol=u((W0,nl)=>{"use strict";var rv=ra();function av(e,t){var r=rv(this,e),a=r.size;return r.set(e,t),this.size+=r.size==a?0:1,this}nl.exports=av});var en=u(($0,sl)=>{"use strict";var nv=Yc(),ov=Zc(),sv=tl(),iv=al(),uv=ol();function Jt(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var a=e[t];this.set(a[0],a[1])}}Jt.prototype.clear=nv;Jt.prototype.delete=ov;Jt.prototype.get=sv;Jt.prototype.has=iv;Jt.prototype.set=uv;sl.exports=Jt});var ul=u((K0,il)=>{"use strict";var pv="__lodash_hash_undefined__";function cv(e){return this.__data__.set(e,pv),this}il.exports=cv});var cl=u((V0,pl)=>{"use strict";function lv(e){return this.__data__.has(e)}pl.exports=lv});var Oo=u((Y0,ll)=>{"use strict";var dv=en(),fv=ul(),mv=cl();function tn(e){var t=-1,r=e==null?0:e.length;for(this.__data__=new dv;++t<r;)this.add(e[t])}tn.prototype.add=tn.prototype.push=fv;tn.prototype.has=mv;ll.exports=tn});var fl=u((H0,dl)=>{"use strict";function gv(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}dl.exports=gv});var gl=u((z0,ml)=>{"use strict";function hv(e){return e!==e}ml.exports=hv});var yl=u((J0,hl)=>{"use strict";function yv(e,t,r){for(var a=r-1,n=e.length;++a<n;)if(e[a]===t)return a;return-1}hl.exports=yv});var bl=u((X0,Al)=>{"use strict";var Av=fl(),bv=gl(),Iv=yl();function Sv(e,t,r){return t===t?Iv(e,t,r):Av(e,bv,r)}Al.exports=Sv});var Po=u((Z0,Il)=>{"use strict";var wv=bl();function Tv(e,t){var r=e==null?0:e.length;return!!r&&wv(e,t,0)>-1}Il.exports=Tv});var wl=u((eF,Sl)=>{"use strict";function vv(e,t,r){for(var a=-1,n=e==null?0:e.length;++a<n;)if(r(t,e[a]))return!0;return!1}Sl.exports=vv});var Uo=u((tF,Tl)=>{"use strict";function Ev(e,t){return e.has(t)}Tl.exports=Ev});var qo=u((rF,vl)=>{"use strict";var Rv=gt(),_v=oe(),xv=Rv(_v,"Set");vl.exports=xv});var Do=u((aF,El)=>{"use strict";function Cv(){}El.exports=Cv});var rn=u((nF,Rl)=>{"use strict";function Lv(e){var t=-1,r=Array(e.size);return e.forEach(function(a){r[++t]=a}),r}Rl.exports=Lv});var xl=u((oF,_l)=>{"use strict";var No=qo(),Ov=Do(),Pv=rn(),Uv=1/0,qv=No&&1/Pv(new No([,-0]))[1]==Uv?function(e){return new No(e)}:Ov;_l.exports=qv});var Ll=u((sF,Cl)=>{"use strict";var Dv=Oo(),Nv=Po(),Bv=wl(),Mv=Uo(),Gv=xl(),kv=rn(),Fv=200;function Qv(e,t,r){var a=-1,n=Nv,o=e.length,s=!0,i=[],p=i;if(r)s=!1,n=Bv;else if(o>=Fv){var m=t?null:Gv(e);if(m)return kv(m);s=!1,n=Mv,p=new Dv}else p=t?[]:i;e:for(;++a<o;){var f=e[a],h=t?t(f):f;if(f=r||f!==0?f:0,s&&h===h){for(var g=p.length;g--;)if(p[g]===h)continue e;t&&p.push(h),i.push(f)}else n(p,h,r)||(p!==i&&p.push(h),i.push(f))}return i}Cl.exports=Qv});var an=u((iF,Ol)=>{"use strict";var jv=9007199254740991;function Wv(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=jv}Ol.exports=Wv});var Xt=u((uF,Pl)=>{"use strict";var $v=Xr(),Kv=an();function Vv(e){return e!=null&&Kv(e.length)&&!$v(e)}Pl.exports=Vv});var Bo=u((pF,Ul)=>{"use strict";var Yv=Xt(),Hv=he();function zv(e){return Hv(e)&&Yv(e)}Ul.exports=zv});var Dl=u((cF,ql)=>{"use strict";var Jv=vo(),Xv=Lo(),Zv=Ll(),eE=Bo(),tE=Xv(function(e){return Zv(Jv(e,1,eE,!0))});ql.exports=tE});var Bl=u((lF,Nl)=>{"use strict";var rE=ta();function aE(){this.__data__=new rE,this.size=0}Nl.exports=aE});var Gl=u((dF,Ml)=>{"use strict";function nE(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r}Ml.exports=nE});var Fl=u((fF,kl)=>{"use strict";function oE(e){return this.__data__.get(e)}kl.exports=oE});var jl=u((mF,Ql)=>{"use strict";function sE(e){return this.__data__.has(e)}Ql.exports=sE});var $l=u((gF,Wl)=>{"use strict";var iE=ta(),uE=Za(),pE=en(),cE=200;function lE(e,t){var r=this.__data__;if(r instanceof iE){var a=r.__data__;if(!uE||a.length<cE-1)return a.push([e,t]),this.size=++r.size,this;r=this.__data__=new pE(a)}return r.set(e,t),this.size=r.size,this}Wl.exports=lE});var aa=u((hF,Kl)=>{"use strict";var dE=ta(),fE=Bl(),mE=Gl(),gE=Fl(),hE=jl(),yE=$l();function Zt(e){var t=this.__data__=new dE(e);this.size=t.size}Zt.prototype.clear=fE;Zt.prototype.delete=mE;Zt.prototype.get=gE;Zt.prototype.has=hE;Zt.prototype.set=yE;Kl.exports=Zt});var na=u((yF,Yl)=>{"use strict";var Vl=xo();function AE(e,t,r){t=="__proto__"&&Vl?Vl(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}Yl.exports=AE});var Mo=u((AF,Hl)=>{"use strict";var bE=na(),IE=Ht();function SE(e,t,r){(r!==void 0&&!IE(e[t],r)||r===void 0&&!(t in e))&&bE(e,t,r)}Hl.exports=SE});var Jl=u((bF,zl)=>{"use strict";function wE(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}}zl.exports=wE});var Go=u((IF,Xl)=>{"use strict";var TE=Jl(),vE=TE();Xl.exports=vE});var ko=u((oa,er)=>{"use strict";var EE=oe(),rd=typeof oa=="object"&&oa&&!oa.nodeType&&oa,Zl=rd&&typeof er=="object"&&er&&!er.nodeType&&er,RE=Zl&&Zl.exports===rd,ed=RE?EE.Buffer:void 0,td=ed?ed.allocUnsafe:void 0;function _E(e,t){if(t)return e.slice();var r=e.length,a=td?td(r):new e.constructor(r);return e.copy(a),a}er.exports=_E});var Fo=u((SF,ad)=>{"use strict";var xE=oe(),CE=xE.Uint8Array;ad.exports=CE});var nn=u((wF,od)=>{"use strict";var nd=Fo();function LE(e){var t=new e.constructor(e.byteLength);return new nd(t).set(new nd(e)),t}od.exports=LE});var Qo=u((TF,sd)=>{"use strict";var OE=nn();function PE(e,t){var r=t?OE(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.length)}sd.exports=PE});var tr=u((vF,id)=>{"use strict";function UE(e,t){var r=-1,a=e.length;for(t||(t=Array(a));++r<a;)t[r]=e[r];return t}id.exports=UE});var sa=u((EF,pd)=>{"use strict";var qE=ve(),ud=Object.create,DE=function(){function e(){}return function(t){if(!qE(t))return{};if(ud)return ud(t);e.prototype=t;var r=new e;return e.prototype=void 0,r}}();pd.exports=DE});var jo=u((RF,cd)=>{"use strict";function NE(e,t){return function(r){return e(t(r))}}cd.exports=NE});var on=u((_F,ld)=>{"use strict";var BE=jo(),ME=BE(Object.getPrototypeOf,Object);ld.exports=ME});var sn=u((xF,dd)=>{"use strict";var GE=Object.prototype;function kE(e){var t=e&&e.constructor,r=typeof t=="function"&&t.prototype||GE;return e===r}dd.exports=kE});var Wo=u((CF,fd)=>{"use strict";var FE=sa(),QE=on(),jE=sn();function WE(e){return typeof e.constructor=="function"&&!jE(e)?FE(QE(e)):{}}fd.exports=WE});var gd=u((LF,md)=>{"use strict";function $E(){return!1}md.exports=$E});var ua=u((ia,rr)=>{"use strict";var KE=oe(),VE=gd(),Ad=typeof ia=="object"&&ia&&!ia.nodeType&&ia,hd=Ad&&typeof rr=="object"&&rr&&!rr.nodeType&&rr,YE=hd&&hd.exports===Ad,yd=YE?KE.Buffer:void 0,HE=yd?yd.isBuffer:void 0,zE=HE||VE;rr.exports=zE});var $o=u((OF,Id)=>{"use strict";var JE=mt(),XE=on(),ZE=he(),eR="[object Object]",tR=Function.prototype,rR=Object.prototype,bd=tR.toString,aR=rR.hasOwnProperty,nR=bd.call(Object);function oR(e){if(!ZE(e)||JE(e)!=eR)return!1;var t=XE(e);if(t===null)return!0;var r=aR.call(t,"constructor")&&t.constructor;return typeof r=="function"&&r instanceof r&&bd.call(r)==nR}Id.exports=oR});var wd=u((PF,Sd)=>{"use strict";var sR=mt(),iR=an(),uR=he(),pR="[object Arguments]",cR="[object Array]",lR="[object Boolean]",dR="[object Date]",fR="[object Error]",mR="[object Function]",gR="[object Map]",hR="[object Number]",yR="[object Object]",AR="[object RegExp]",bR="[object Set]",IR="[object String]",SR="[object WeakMap]",wR="[object ArrayBuffer]",TR="[object DataView]",vR="[object Float32Array]",ER="[object Float64Array]",RR="[object Int8Array]",_R="[object Int16Array]",xR="[object Int32Array]",CR="[object Uint8Array]",LR="[object Uint8ClampedArray]",OR="[object Uint16Array]",PR="[object Uint32Array]",B={};B[vR]=B[ER]=B[RR]=B[_R]=B[xR]=B[CR]=B[LR]=B[OR]=B[PR]=!0;B[pR]=B[cR]=B[wR]=B[lR]=B[TR]=B[dR]=B[fR]=B[mR]=B[gR]=B[hR]=B[yR]=B[AR]=B[bR]=B[IR]=B[SR]=!1;function UR(e){return uR(e)&&iR(e.length)&&!!B[sR(e)]}Sd.exports=UR});var un=u((UF,Td)=>{"use strict";function qR(e){return function(t){return e(t)}}Td.exports=qR});var pn=u((pa,ar)=>{"use strict";var DR=To(),vd=typeof pa=="object"&&pa&&!pa.nodeType&&pa,ca=vd&&typeof ar=="object"&&ar&&!ar.nodeType&&ar,NR=ca&&ca.exports===vd,Ko=NR&&DR.process,BR=function(){try{var e=ca&&ca.require&&ca.require("util").types;return e||Ko&&Ko.binding&&Ko.binding("util")}catch{}}();ar.exports=BR});var cn=u((qF,_d)=>{"use strict";var MR=wd(),GR=un(),Ed=pn(),Rd=Ed&&Ed.isTypedArray,kR=Rd?GR(Rd):MR;_d.exports=kR});var Vo=u((DF,xd)=>{"use strict";function FR(e,t){if(!(t==="constructor"&&typeof e[t]=="function")&&t!="__proto__")return e[t]}xd.exports=FR});var Yo=u((NF,Cd)=>{"use strict";var QR=na(),jR=Ht(),WR=Object.prototype,$R=WR.hasOwnProperty;function KR(e,t,r){var a=e[t];(!($R.call(e,t)&&jR(a,r))||r===void 0&&!(t in e))&&QR(e,t,r)}Cd.exports=KR});var nr=u((BF,Ld)=>{"use strict";var VR=Yo(),YR=na();function HR(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?YR(r,i,p):VR(r,i,p)}return r}Ld.exports=HR});var Pd=u((MF,Od)=>{"use strict";function zR(e,t){for(var r=-1,a=Array(e);++r<e;)a[r]=t(r);return a}Od.exports=zR});var la=u((GF,Ud)=>{"use strict";var JR=9007199254740991,XR=/^(?:0|[1-9]\d*)$/;function ZR(e,t){var r=typeof e;return t=t??JR,!!t&&(r=="number"||r!="symbol"&&XR.test(e))&&e>-1&&e%1==0&&e<t}Ud.exports=ZR});var Ho=u((kF,qd)=>{"use strict";var e_=Pd(),t_=zr(),r_=re(),a_=ua(),n_=la(),o_=cn(),s_=Object.prototype,i_=s_.hasOwnProperty;function u_(e,t){var r=r_(e),a=!r&&t_(e),n=!r&&!a&&a_(e),o=!r&&!a&&!n&&o_(e),s=r||a||n||o,i=s?e_(e.length,String):[],p=i.length;for(var m in e)(t||i_.call(e,m))&&!(s&&(m=="length"||n&&(m=="offset"||m=="parent")||o&&(m=="buffer"||m=="byteLength"||m=="byteOffset")||n_(m,p)))&&i.push(m);return i}qd.exports=u_});var Nd=u((FF,Dd)=>{"use strict";function p_(e){var t=[];if(e!=null)for(var r in Object(e))t.push(r);return t}Dd.exports=p_});var Md=u((QF,Bd)=>{"use strict";var c_=ve(),l_=sn(),d_=Nd(),f_=Object.prototype,m_=f_.hasOwnProperty;function g_(e){if(!c_(e))return d_(e);var t=l_(e),r=[];for(var a in e)a=="constructor"&&(t||!m_.call(e,a))||r.push(a);return r}Bd.exports=g_});var or=u((jF,Gd)=>{"use strict";var h_=Ho(),y_=Md(),A_=Xt();function b_(e){return A_(e)?h_(e,!0):y_(e)}Gd.exports=b_});var Fd=u((WF,kd)=>{"use strict";var I_=nr(),S_=or();function w_(e){return I_(e,S_(e))}kd.exports=w_});var Vd=u(($F,Kd)=>{"use strict";var Qd=Mo(),T_=ko(),v_=Qo(),E_=tr(),R_=Wo(),jd=zr(),Wd=re(),__=Bo(),x_=ua(),C_=Xr(),L_=ve(),O_=$o(),P_=cn(),$d=Vo(),U_=Fd();function q_(e,t,r,a,n,o,s){var i=$d(e,r),p=$d(t,r),m=s.get(p);if(m){Qd(e,r,m);return}var f=o?o(i,p,r+"",e,t,s):void 0,h=f===void 0;if(h){var g=Wd(p),S=!g&&x_(p),L=!g&&!S&&P_(p);f=p,g||S||L?Wd(i)?f=i:__(i)?f=E_(i):S?(h=!1,f=T_(p,!0)):L?(h=!1,f=v_(p,!0)):f=[]:O_(p)||jd(p)?(f=i,jd(i)?f=U_(i):(!L_(i)||C_(i))&&(f=R_(p))):h=!1}h&&(s.set(p,f),n(f,p,a,o,s),s.delete(p)),Qd(e,r,f)}Kd.exports=q_});var zd=u((KF,Hd)=>{"use strict";var D_=aa(),N_=Mo(),B_=Go(),M_=Vd(),G_=ve(),k_=or(),F_=Vo();function Yd(e,t,r,a,n){e!==t&&B_(t,function(o,s){if(n||(n=new D_),G_(o))M_(e,t,s,r,Yd,a,n);else{var i=a?a(F_(e,s),o,s+"",e,t,n):void 0;i===void 0&&(i=o),N_(e,s,i)}},k_)}Hd.exports=Yd});var Xd=u((VF,Jd)=>{"use strict";var Q_=Ht(),j_=Xt(),W_=la(),$_=ve();function K_(e,t,r){if(!$_(r))return!1;var a=typeof t;return(a=="number"?j_(r)&&W_(t,r.length):a=="string"&&t in r)?Q_(r[t],e):!1}Jd.exports=K_});var ef=u((YF,Zd)=>{"use strict";var V_=Lo(),Y_=Xd();function H_(e){return V_(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&&Y_(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})}Zd.exports=H_});var zo=u((HF,tf)=>{"use strict";var z_=zd(),J_=ef(),X_=J_(function(e,t,r){z_(e,t,r)});tf.exports=X_});var am=u(de=>{"use strict";de.aliasToReal={each:"forEach",eachRight:"forEachRight",entries:"toPairs",entriesIn:"toPairsIn",extend:"assignIn",extendAll:"assignInAll",extendAllWith:"assignInAllWith",extendWith:"assignInWith",first:"head",conforms:"conformsTo",matches:"isMatch",property:"get",__:"placeholder",F:"stubFalse",T:"stubTrue",all:"every",allPass:"overEvery",always:"constant",any:"some",anyPass:"overSome",apply:"spread",assoc:"set",assocPath:"set",complement:"negate",compose:"flowRight",contains:"includes",dissoc:"unset",dissocPath:"unset",dropLast:"dropRight",dropLastWhile:"dropRightWhile",equals:"isEqual",identical:"eq",indexBy:"keyBy",init:"initial",invertObj:"invert",juxt:"over",omitAll:"omit",nAry:"ary",path:"get",pathEq:"matchesProperty",pathOr:"getOr",paths:"at",pickAll:"pick",pipe:"flow",pluck:"map",prop:"get",propEq:"matchesProperty",propOr:"getOr",props:"at",symmetricDifference:"xor",symmetricDifferenceBy:"xorBy",symmetricDifferenceWith:"xorWith",takeLast:"takeRight",takeLastWhile:"takeRightWhile",unapply:"rest",unnest:"flatten",useWith:"overArgs",where:"conformsTo",whereEq:"isMatch",zipObj:"zipObject"};de.aryMethod={1:["assignAll","assignInAll","attempt","castArray","ceil","create","curry","curryRight","defaultsAll","defaultsDeepAll","floor","flow","flowRight","fromPairs","invert","iteratee","memoize","method","mergeAll","methodOf","mixin","nthArg","over","overEvery","overSome","rest","reverse","round","runInContext","spread","template","trim","trimEnd","trimStart","uniqueId","words","zipAll"],2:["add","after","ary","assign","assignAllWith","assignIn","assignInAllWith","at","before","bind","bindAll","bindKey","chunk","cloneDeepWith","cloneWith","concat","conformsTo","countBy","curryN","curryRightN","debounce","defaults","defaultsDeep","defaultTo","delay","difference","divide","drop","dropRight","dropRightWhile","dropWhile","endsWith","eq","every","filter","find","findIndex","findKey","findLast","findLastIndex","findLastKey","flatMap","flatMapDeep","flattenDepth","forEach","forEachRight","forIn","forInRight","forOwn","forOwnRight","get","groupBy","gt","gte","has","hasIn","includes","indexOf","intersection","invertBy","invoke","invokeMap","isEqual","isMatch","join","keyBy","lastIndexOf","lt","lte","map","mapKeys","mapValues","matchesProperty","maxBy","meanBy","merge","mergeAllWith","minBy","multiply","nth","omit","omitBy","overArgs","pad","padEnd","padStart","parseInt","partial","partialRight","partition","pick","pickBy","propertyOf","pull","pullAll","pullAt","random","range","rangeRight","rearg","reject","remove","repeat","restFrom","result","sampleSize","some","sortBy","sortedIndex","sortedIndexOf","sortedLastIndex","sortedLastIndexOf","sortedUniqBy","split","spreadFrom","startsWith","subtract","sumBy","take","takeRight","takeRightWhile","takeWhile","tap","throttle","thru","times","trimChars","trimCharsEnd","trimCharsStart","truncate","union","uniqBy","uniqWith","unset","unzipWith","without","wrap","xor","zip","zipObject","zipObjectDeep"],3:["assignInWith","assignWith","clamp","differenceBy","differenceWith","findFrom","findIndexFrom","findLastFrom","findLastIndexFrom","getOr","includesFrom","indexOfFrom","inRange","intersectionBy","intersectionWith","invokeArgs","invokeArgsMap","isEqualWith","isMatchWith","flatMapDepth","lastIndexOfFrom","mergeWith","orderBy","padChars","padCharsEnd","padCharsStart","pullAllBy","pullAllWith","rangeStep","rangeStepRight","reduce","reduceRight","replace","set","slice","sortedIndexBy","sortedLastIndexBy","transform","unionBy","unionWith","update","xorBy","xorWith","zipWith"],4:["fill","setWith","updateWith"]};de.aryRearg={2:[1,0],3:[2,0,1],4:[3,2,0,1]};de.iterateeAry={dropRightWhile:1,dropWhile:1,every:1,filter:1,find:1,findFrom:1,findIndex:1,findIndexFrom:1,findKey:1,findLast:1,findLastFrom:1,findLastIndex:1,findLastIndexFrom:1,findLastKey:1,flatMap:1,flatMapDeep:1,flatMapDepth:1,forEach:1,forEachRight:1,forIn:1,forInRight:1,forOwn:1,forOwnRight:1,map:1,mapKeys:1,mapValues:1,partition:1,reduce:2,reduceRight:2,reject:1,remove:1,some:1,takeRightWhile:1,takeWhile:1,times:1,transform:2};de.iterateeRearg={mapKeys:[1],reduceRight:[1,0]};de.methodRearg={assignInAllWith:[1,0],assignInWith:[1,2,0],assignAllWith:[1,0],assignWith:[1,2,0],differenceBy:[1,2,0],differenceWith:[1,2,0],getOr:[2,1,0],intersectionBy:[1,2,0],intersectionWith:[1,2,0],isEqualWith:[1,2,0],isMatchWith:[2,1,0],mergeAllWith:[1,0],mergeWith:[1,2,0],padChars:[2,1,0],padCharsEnd:[2,1,0],padCharsStart:[2,1,0],pullAllBy:[2,1,0],pullAllWith:[2,1,0],rangeStep:[1,2,0],rangeStepRight:[1,2,0],setWith:[3,1,2,0],sortedIndexBy:[2,1,0],sortedLastIndexBy:[2,1,0],unionBy:[1,2,0],unionWith:[1,2,0],updateWith:[3,1,2,0],xorBy:[1,2,0],xorWith:[1,2,0],zipWith:[1,2,0]};de.methodSpread={assignAll:{start:0},assignAllWith:{start:0},assignInAll:{start:0},assignInAllWith:{start:0},defaultsAll:{start:0},defaultsDeepAll:{start:0},invokeArgs:{start:2},invokeArgsMap:{start:2},mergeAll:{start:0},mergeAllWith:{start:0},partial:{start:1},partialRight:{start:1},without:{start:1},zipAll:{start:0}};de.mutate={array:{fill:!0,pull:!0,pullAll:!0,pullAllBy:!0,pullAllWith:!0,pullAt:!0,remove:!0,reverse:!0},object:{assign:!0,assignAll:!0,assignAllWith:!0,assignIn:!0,assignInAll:!0,assignInAllWith:!0,assignInWith:!0,assignWith:!0,defaults:!0,defaultsAll:!0,defaultsDeep:!0,defaultsDeepAll:!0,merge:!0,mergeAll:!0,mergeAllWith:!0,mergeWith:!0},set:{set:!0,setWith:!0,unset:!0,update:!0,updateWith:!0}};de.realToAlias=function(){var e=Object.prototype.hasOwnProperty,t=de.aliasToReal,r={};for(var a in t){var n=t[a];e.call(r,n)?r[n].push(a):r[n]=[a]}return r}();de.remap={assignAll:"assign",assignAllWith:"assignWith",assignInAll:"assignIn",assignInAllWith:"assignInWith",curryN:"curry",curryRightN:"curryRight",defaultsAll:"defaults",defaultsDeepAll:"defaultsDeep",findFrom:"find",findIndexFrom:"findIndex",findLastFrom:"findLast",findLastIndexFrom:"findLastIndex",getOr:"get",includesFrom:"includes",indexOfFrom:"indexOf",invokeArgs:"invoke",invokeArgsMap:"invokeMap",lastIndexOfFrom:"lastIndexOf",mergeAll:"merge",mergeAllWith:"mergeWith",padChars:"pad",padCharsEnd:"padEnd",padCharsStart:"padStart",propertyOf:"get",rangeStep:"range",rangeStepRight:"rangeRight",restFrom:"rest",spreadFrom:"spread",trimChars:"trim",trimCharsEnd:"trimEnd",trimCharsStart:"trimStart",zipAll:"zip"};de.skipFixed={castArray:!0,flow:!0,flowRight:!0,iteratee:!0,mixin:!0,rearg:!0,runInContext:!0};de.skipRearg={add:!0,assign:!0,assignIn:!0,bind:!0,bindKey:!0,concat:!0,difference:!0,divide:!0,eq:!0,gt:!0,gte:!0,isEqual:!0,lt:!0,lte:!0,matchesProperty:!0,merge:!0,multiply:!0,overArgs:!0,partial:!0,partialRight:!0,propertyOf:!0,random:!0,range:!0,rangeRight:!0,subtract:!0,zip:!0,zipObject:!0,zipObjectDeep:!0}});var Ks=u((yj,nm)=>{"use strict";nm.exports={}});var um=u((Aj,im)=>{"use strict";var X=am(),OC=Ks(),om=Array.prototype.push;function PC(e,t){return t==2?function(r,a){return e.apply(void 0,arguments)}:function(r){return e.apply(void 0,arguments)}}function Vs(e,t){return t==2?function(r,a){return e(r,a)}:function(r){return e(r)}}function sm(e){for(var t=e?e.length:0,r=Array(t);t--;)r[t]=e[t];return r}function UC(e){return function(t){return e({},t)}}function qC(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&&om.apply(s,o),t!=a&&om.apply(s,n.slice(t+1)),e.apply(this,s)}}function Ys(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 Hs(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:OC,p="curry"in a&&a.curry,m="fixed"in a&&a.fixed,f="rearg"in a&&a.rearg,h=n?r.runInContext():void 0,g=n?r:{ary:e.ary,assign:e.assign,clone:e.clone,curry:e.curry,forEach:e.forEach,isArray:e.isArray,isError:e.isError,isFunction:e.isFunction,isWeakMap:e.isWeakMap,iteratee:e.iteratee,keys:e.keys,rearg:e.rearg,toInteger:e.toInteger,toPath:e.toPath},S=g.ary,L=g.assign,_=g.clone,R=g.curry,E=g.forEach,U=g.isArray,Ce=g.isError,Ie=g.isFunction,pt=g.isWeakMap,Ft=g.keys,Sr=g.rearg,wr=g.toInteger,mI=g.toPath,xu=Ft(X.aryMethod),gI={castArray:function(I){return function(){var y=arguments[0];return U(y)?I(sm(y)):I.apply(void 0,arguments)}},iteratee:function(I){return function(){var y=arguments[0],b=arguments[1],v=I(y,b),C=v.length;return s.cap&&typeof b=="number"?(b=b>2?b-2:1,C&&C<=b?v:Vs(v,b)):v}},mixin:function(I){return function(y){var b=this;if(!Ie(b))return I(b,Object(y));var v=[];return E(Ft(y),function(C){Ie(y[C])&&v.push([C,b.prototype[C]])}),I(b,Object(y)),E(v,function(C){var ae=C[1];Ie(ae)?b.prototype[C[0]]=ae:delete b.prototype[C[0]]}),b}},nthArg:function(I){return function(y){var b=y<0?1:wr(y)+1;return R(I(y),b)}},rearg:function(I){return function(y,b){var v=b?b.length:0;return R(I(y,b),v)}},runInContext:function(I){return function(y){return Hs(e,I(y),a)}}};function hI(I,y){if(s.cap){var b=X.iterateeRearg[I];if(b)return SI(y,b);var v=!n&&X.iterateeAry[I];if(v)return II(y,v)}return y}function yI(I,y,b){return p||s.curry&&b>1?R(y,b):y}function Cu(I,y,b){if(s.fixed&&(m||!X.skipFixed[I])){var v=X.methodSpread[I],C=v&&v.start;return C===void 0?S(y,b):qC(y,C)}return y}function Lu(I,y,b){return s.rearg&&b>1&&(f||!X.skipRearg[I])?Sr(y,X.methodRearg[I]||X.aryRearg[b]):y}function AI(I,y){y=mI(y);for(var b=-1,v=y.length,C=v-1,ae=_(Object(I)),Me=ae;Me!=null&&++b<v;){var Se=y[b],Ge=Me[Se];Ge!=null&&!(Ie(Ge)||Ce(Ge)||pt(Ge))&&(Me[Se]=_(b==C?Ge:Object(Ge))),Me=Me[Se]}return ae}function bI(I){return me.runInContext.convert(I)(void 0)}function Ou(I,y){var b=X.aliasToReal[I]||I,v=X.remap[b]||b,C=a;return function(ae){var Me=n?h:g,Se=n?h[v]:y,Ge=L(L({},C),ae);return Hs(Me,b,Se,Ge)}}function II(I,y){return Pu(I,function(b){return typeof b=="function"?Vs(b,y):b})}function SI(I,y){return Pu(I,function(b){var v=y.length;return PC(Sr(Vs(b,v),y),v)})}function Pu(I,y){return function(){var b=arguments.length;if(!b)return I();for(var v=Array(b);b--;)v[b]=arguments[b];var C=s.rearg?0:b-1;return v[C]=y(v[C]),I.apply(void 0,v)}}function Uu(I,y,b){var v,C=X.aliasToReal[I]||I,ae=y,Me=gI[C];return Me?ae=Me(y):s.immutable&&(X.mutate.array[C]?ae=Ys(y,sm):X.mutate.object[C]?ae=Ys(y,UC(y)):X.mutate.set[C]&&(ae=Ys(y,AI))),E(xu,function(Se){return E(X.aryMethod[Se],function(Ge){if(C==Ge){var qu=X.methodSpread[C],wI=qu&&qu.afterRearg;return v=wI?Cu(C,Lu(C,ae,Se),Se):Lu(C,Cu(C,ae,Se),Se),v=hI(C,v),v=yI(C,v,Se),!1}}),!v}),v||(v=ae),v==y&&(v=p?R(v,1):function(){return y.apply(this,arguments)}),v.convert=Ou(C,y),v.placeholder=y.placeholder=b,v}if(!o)return Uu(t,r,i);var me=r,Tr=[];return E(xu,function(I){E(X.aryMethod[I],function(y){var b=me[X.remap[y]||y];b&&Tr.push([y,Uu(y,b,me)])})}),E(Ft(me),function(I){var y=me[I];if(typeof y=="function"){for(var b=Tr.length;b--;)if(Tr[b][0]==I)return;y.convert=Ou(I,y),Tr.push([I,y])}}),E(Tr,function(I){me[I[0]]=I[1]}),me.convert=bI,me.placeholder=me,E(Ft(me),function(I){E(X.realToAlias[I]||[],function(y){me[y]=me[I]})}),me}im.exports=Hs});var zs=u((bj,pm)=>{"use strict";var DC=gt(),NC=oe(),BC=DC(NC,"WeakMap");pm.exports=BC});var Js=u((Ij,lm)=>{"use strict";var cm=zs(),MC=cm&&new cm;lm.exports=MC});var Xs=u((Sj,fm)=>{"use strict";var GC=Jr(),dm=Js(),kC=dm?function(e,t){return dm.set(e,t),e}:GC;fm.exports=kC});var wa=u((wj,mm)=>{"use strict";var FC=sa(),QC=ve();function jC(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=FC(e.prototype),a=e.apply(r,t);return QC(a)?a:r}}mm.exports=jC});var hm=u((Tj,gm)=>{"use strict";var WC=wa(),$C=oe(),KC=1;function VC(e,t,r){var a=t&KC,n=WC(e);function o(){var s=this&&this!==$C&&this instanceof o?n:e;return s.apply(a?r:this,arguments)}return o}gm.exports=VC});var Zs=u((vj,ym)=>{"use strict";var YC=Math.max;function HC(e,t,r,a){for(var n=-1,o=e.length,s=r.length,i=-1,p=t.length,m=YC(o-s,0),f=Array(p+m),h=!a;++i<p;)f[i]=t[i];for(;++n<s;)(h||n<o)&&(f[r[n]]=e[n]);for(;m--;)f[i++]=e[n++];return f}ym.exports=HC});var ei=u((Ej,Am)=>{"use strict";var zC=Math.max;function JC(e,t,r,a){for(var n=-1,o=e.length,s=-1,i=r.length,p=-1,m=t.length,f=zC(o-i,0),h=Array(f+m),g=!a;++n<f;)h[n]=e[n];for(var S=n;++p<m;)h[S+p]=t[p];for(;++s<i;)(g||n<o)&&(h[S+r[s]]=e[n++]);return h}Am.exports=JC});var Im=u((Rj,bm)=>{"use strict";function XC(e,t){for(var r=e.length,a=0;r--;)e[r]===t&&++a;return a}bm.exports=XC});var Ln=u((_j,Sm)=>{"use strict";function ZC(){}Sm.exports=ZC});var Pn=u((xj,wm)=>{"use strict";var eL=sa(),tL=Ln(),rL=4294967295;function On(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=rL,this.__views__=[]}On.prototype=eL(tL.prototype);On.prototype.constructor=On;wm.exports=On});var ti=u((Cj,vm)=>{"use strict";var Tm=Js(),aL=Do(),nL=Tm?function(e){return Tm.get(e)}:aL;vm.exports=nL});var Rm=u((Lj,Em)=>{"use strict";var oL={};Em.exports=oL});var Cm=u((Oj,xm)=>{"use strict";var _m=Rm(),sL=Object.prototype,iL=sL.hasOwnProperty;function uL(e){for(var t=e.name+"",r=_m[t],a=iL.call(_m,t)?r.length:0;a--;){var n=r[a],o=n.func;if(o==null||o==e)return n.name}return t}xm.exports=uL});var ri=u((Pj,Lm)=>{"use strict";var pL=sa(),cL=Ln();function Un(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=void 0}Un.prototype=pL(cL.prototype);Un.prototype.constructor=Un;Lm.exports=Un});var Pm=u((Uj,Om)=>{"use strict";var lL=Pn(),dL=ri(),fL=tr();function mL(e){if(e instanceof lL)return e.clone();var t=new dL(e.__wrapped__,e.__chain__);return t.__actions__=fL(e.__actions__),t.__index__=e.__index__,t.__values__=e.__values__,t}Om.exports=mL});var Dm=u((qj,qm)=>{"use strict";var gL=Pn(),Um=ri(),hL=Ln(),yL=re(),AL=he(),bL=Pm(),IL=Object.prototype,SL=IL.hasOwnProperty;function qn(e){if(AL(e)&&!yL(e)&&!(e instanceof gL)){if(e instanceof Um)return e;if(SL.call(e,"__wrapped__"))return bL(e)}return new Um(e)}qn.prototype=hL.prototype;qn.prototype.constructor=qn;qm.exports=qn});var Bm=u((Dj,Nm)=>{"use strict";var wL=Pn(),TL=ti(),vL=Cm(),EL=Dm();function RL(e){var t=vL(e),r=EL[t];if(typeof r!="function"||!(t in wL.prototype))return!1;if(e===r)return!0;var a=TL(r);return!!a&&e===a[0]}Nm.exports=RL});var ai=u((Nj,Mm)=>{"use strict";var _L=Xs(),xL=Co(),CL=xL(_L);Mm.exports=CL});var km=u((Bj,Gm)=>{"use strict";var LL=/\{\n\/\* \[wrapped with (.+)\] \*/,OL=/,? & /;function PL(e){var t=e.match(LL);return t?t[1].split(OL):[]}Gm.exports=PL});var Qm=u((Mj,Fm)=>{"use strict";var UL=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/;function qL(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(UL,`{
2
2
  /* [wrapped with `+t+`] */
3
- `)}Um.exports=EP});var Ln=u((Oj,Nm)=>{"use strict";function RP(e,t){for(var r=-1,a=e==null?0:e.length;++r<a&&t(e[r],r,e)!==!1;);return e}Nm.exports=RP});var Mm=u((Pj,Bm)=>{"use strict";var xP=Ln(),_P=Eo(),OP=1,PP=2,LP=8,CP=16,qP=32,UP=64,DP=128,NP=256,BP=512,MP=[["ary",DP],["bind",OP],["bindKey",PP],["curry",LP],["curryRight",CP],["flip",BP],["partial",qP],["partialRight",UP],["rearg",NP]];function GP(e,t){return xP(MP,function(r){var a="_."+r[0];t&r[1]&&!_P(e,a)&&e.push(a)}),e.sort()}Bm.exports=GP});var Xs=u((Lj,Gm)=>{"use strict";var kP=qm(),FP=Dm(),QP=Ha(),jP=Mm();function WP(e,t,r){var a=t+"";return QP(e,FP(a,jP(kP(a),r)))}Gm.exports=WP});var Zs=u((Cj,Qm)=>{"use strict";var $P=Pm(),KP=Js(),VP=Xs(),YP=1,HP=2,zP=4,JP=8,km=32,Fm=64;function XP(e,t,r,a,n,o,s,i,p,f){var m=t&JP,y=m?s:void 0,g=m?void 0:s,S=m?o:void 0,P=m?void 0:o;t|=m?km:Fm,t&=~(m?Fm:km),t&zP||(t&=~(YP|HP));var x=[e,t,n,S,y,P,g,i,p,f],R=r.apply(void 0,x);return $P(e)&&KP(R,x),R.placeholder=a,VP(R,e,t)}Qm.exports=XP});var ei=u((qj,jm)=>{"use strict";function ZP(e){var t=e;return t.placeholder}jm.exports=ZP});var $m=u((Uj,Wm)=>{"use strict";var eL=er(),tL=pa(),rL=Math.min;function aL(e,t){for(var r=e.length,a=rL(t.length,r),n=eL(e);a--;){var o=t[a];e[a]=tL(o,r)?n[o]:void 0}return e}Wm.exports=aL});var Cn=u((Dj,Vm)=>{"use strict";var Km="__lodash_placeholder__";function nL(e,t){for(var r=-1,a=e.length,n=0,o=[];++r<a;){var s=e[r];(s===t||s===Km)&&(e[r]=Km,o[n++]=r)}return o}Vm.exports=nL});var ti=u((Nj,zm)=>{"use strict";var oL=Vs(),sL=Ys(),iL=fm(),Ym=Ia(),uL=Zs(),pL=ei(),cL=$m(),lL=Cn(),dL=ne(),fL=1,mL=2,gL=8,yL=16,hL=128,AL=512;function Hm(e,t,r,a,n,o,s,i,p,f){var m=t&hL,y=t&fL,g=t&mL,S=t&(gL|yL),P=t&AL,x=g?void 0:Ym(e);function R(){for(var E=arguments.length,q=Array(E),xe=E;xe--;)q[xe]=arguments[xe];if(S)var be=pL(R),it=iL(q,be);if(a&&(q=oL(q,a,n,S)),o&&(q=sL(q,o,s,S)),E-=it,S&&E<f){var kt=lL(q,be);return uL(e,t,Hm,R.placeholder,r,q,kt,i,p,f-E)}var Ir=y?r:this,Sr=g?Ir[e]:e;return E=q.length,i?q=cL(q,i):P&&E>1&&q.reverse(),m&&p<E&&(q.length=p),this&&this!==dL&&this instanceof R&&(Sr=x||Ym(Sr)),Sr.apply(Ir,q)}return R}zm.exports=Hm});var Xm=u((Bj,Jm)=>{"use strict";var bL=Ya(),IL=Ia(),SL=ti(),wL=Zs(),TL=ei(),vL=Cn(),EL=ne();function RL(e,t,r){var a=IL(e);function n(){for(var o=arguments.length,s=Array(o),i=o,p=TL(n);i--;)s[i]=arguments[i];var f=o<3&&s[0]!==p&&s[o-1]!==p?[]:vL(s,p);if(o-=f.length,o<r)return wL(e,t,SL,n.placeholder,void 0,s,f,void 0,void 0,r-o);var m=this&&this!==EL&&this instanceof n?a:e;return bL(m,this,s)}return n}Jm.exports=RL});var eg=u((Mj,Zm)=>{"use strict";var xL=Ya(),_L=Ia(),OL=ne(),PL=1;function LL(e,t,r,a){var n=t&PL,o=_L(e);function s(){for(var i=-1,p=arguments.length,f=-1,m=a.length,y=Array(m+p),g=this&&this!==OL&&this instanceof s?o:e;++f<m;)y[f]=a[f];for(;p--;)y[f++]=arguments[++i];return xL(g,n?r:this,y)}return s}Zm.exports=LL});var sg=u((Gj,og)=>{"use strict";var CL=Vs(),qL=Ys(),tg=Cn(),rg="__lodash_placeholder__",ri=1,UL=2,DL=4,ag=8,Sa=128,ng=256,NL=Math.min;function BL(e,t){var r=e[1],a=t[1],n=r|a,o=n<(ri|UL|Sa),s=a==Sa&&r==ag||a==Sa&&r==ng&&e[7].length<=t[8]||a==(Sa|ng)&&t[7].length<=t[8]&&r==ag;if(!(o||s))return e;a&ri&&(e[2]=t[2],n|=r&ri?0:DL);var i=t[3];if(i){var p=e[3];e[3]=p?CL(p,i,t[4]):i,e[4]=p?tg(e[3],rg):t[4]}return i=t[5],i&&(p=e[5],e[5]=p?qL(p,i,t[6]):i,e[6]=p?tg(e[5],rg):t[6]),i=t[7],i&&(e[7]=i),a&Sa&&(e[8]=e[8]==null?t[8]:NL(e[8],t[8])),e[9]==null&&(e[9]=t[9]),e[0]=t[0],e[1]=n,e}og.exports=BL});var ug=u((kj,ig)=>{"use strict";var ML=/\s/;function GL(e){for(var t=e.length;t--&&ML.test(e.charAt(t)););return t}ig.exports=GL});var cg=u((Fj,pg)=>{"use strict";var kL=ug(),FL=/^\s+/;function QL(e){return e&&e.slice(0,kL(e)+1).replace(FL,"")}pg.exports=QL});var fr=u((Qj,lg)=>{"use strict";var jL=dt(),WL=ge(),$L="[object Symbol]";function KL(e){return typeof e=="symbol"||WL(e)&&jL(e)==$L}lg.exports=KL});var gg=u((jj,mg)=>{"use strict";var VL=cg(),dg=Te(),YL=fr(),fg=0/0,HL=/^[-+]0x[0-9a-f]+$/i,zL=/^0b[01]+$/i,JL=/^0o[0-7]+$/i,XL=parseInt;function ZL(e){if(typeof e=="number")return e;if(YL(e))return fg;if(dg(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=dg(t)?t+"":t}if(typeof e!="string")return e===0?e:+e;e=VL(e);var r=zL.test(e);return r||JL.test(e)?XL(e.slice(2),r?2:8):HL.test(e)?fg:+e}mg.exports=ZL});var Ag=u((Wj,hg)=>{"use strict";var eC=gg(),yg=1/0,tC=17976931348623157e292;function rC(e){if(!e)return e===0?e:0;if(e=eC(e),e===yg||e===-yg){var t=e<0?-1:1;return t*tC}return e===e?e:0}hg.exports=rC});var ai=u(($j,bg)=>{"use strict";var aC=Ag();function nC(e){var t=aC(e),r=t%1;return t===t?r?t-r:t:0}bg.exports=nC});var qn=u((Kj,vg)=>{"use strict";var oC=Ks(),sC=pm(),iC=Xm(),uC=ti(),pC=eg(),cC=Hs(),lC=sg(),dC=Js(),fC=Xs(),Ig=ai(),mC="Expected a function",Sg=1,gC=2,ni=8,oi=16,si=32,wg=64,Tg=Math.max;function yC(e,t,r,a,n,o,s,i){var p=t&gC;if(!p&&typeof e!="function")throw new TypeError(mC);var f=a?a.length:0;if(f||(t&=~(si|wg),a=n=void 0),s=s===void 0?s:Tg(Ig(s),0),i=i===void 0?i:Ig(i),f-=n?n.length:0,t&wg){var m=a,y=n;a=n=void 0}var g=p?void 0:cC(e),S=[e,t,r,a,n,m,y,o,s,i];if(g&&lC(S,g),e=S[0],t=S[1],r=S[2],a=S[3],n=S[4],i=S[9]=S[9]===void 0?p?0:e.length:Tg(S[9]-f,0),!i&&t&(ni|oi)&&(t&=~(ni|oi)),!t||t==Sg)var P=sC(e,t,r);else t==ni||t==oi?P=iC(e,t,i):(t==si||t==(Sg|si))&&!n.length?P=pC(e,t,r,a):P=uC.apply(void 0,S);var x=g?oC:dC;return fC(x(P,S),e,t)}vg.exports=yC});var Rg=u((Vj,Eg)=>{"use strict";var hC=qn(),AC=128;function bC(e,t,r){return t=r?void 0:t,t=e&&t==null?e.length:t,hC(e,AC,void 0,void 0,void 0,void 0,t)}Eg.exports=bC});var _g=u((Yj,xg)=>{"use strict";var IC=No(),SC=IC(Object.keys,Object);xg.exports=SC});var ii=u((Hj,Og)=>{"use strict";var wC=an(),TC=_g(),vC=Object.prototype,EC=vC.hasOwnProperty;function RC(e){if(!wC(e))return TC(e);var t=[];for(var r in Object(e))EC.call(e,r)&&r!="constructor"&&t.push(r);return t}Og.exports=RC});var mr=u((zj,Pg)=>{"use strict";var xC=Qo(),_C=ii(),OC=Jt();function PC(e){return OC(e)?xC(e):_C(e)}Pg.exports=PC});var ui=u((Jj,Lg)=>{"use strict";var LC=ar(),CC=mr();function qC(e,t){return e&&LC(t,CC(t),e)}Lg.exports=qC});var qg=u((Xj,Cg)=>{"use strict";var UC=ar(),DC=nr();function NC(e,t){return e&&UC(t,DC(t),e)}Cg.exports=NC});var Dg=u((Zj,Ug)=>{"use strict";function BC(e,t){for(var r=-1,a=e==null?0:e.length,n=0,o=[];++r<a;){var s=e[r];t(s,r,e)&&(o[n++]=s)}return o}Ug.exports=BC});var pi=u((eW,Ng)=>{"use strict";function MC(){return[]}Ng.exports=MC});var Un=u((tW,Mg)=>{"use strict";var GC=Dg(),kC=pi(),FC=Object.prototype,QC=FC.propertyIsEnumerable,Bg=Object.getOwnPropertySymbols,jC=Bg?function(e){return e==null?[]:(e=Object(e),GC(Bg(e),function(t){return QC.call(e,t)}))}:kC;Mg.exports=jC});var kg=u((rW,Gg)=>{"use strict";var WC=ar(),$C=Un();function KC(e,t){return WC(e,$C(e),t)}Gg.exports=KC});var ci=u((aW,Fg)=>{"use strict";var VC=Va(),YC=rn(),HC=Un(),zC=pi(),JC=Object.getOwnPropertySymbols,XC=JC?function(e){for(var t=[];e;)VC(t,HC(e)),e=YC(e);return t}:zC;Fg.exports=XC});var jg=u((nW,Qg)=>{"use strict";var ZC=ar(),eq=ci();function tq(e,t){return ZC(e,eq(e),t)}Qg.exports=tq});var li=u((oW,Wg)=>{"use strict";var rq=Va(),aq=ee();function nq(e,t,r){var a=t(e);return aq(e)?a:rq(a,r(e))}Wg.exports=nq});var di=u((sW,$g)=>{"use strict";var oq=li(),sq=Un(),iq=mr();function uq(e){return oq(e,iq,sq)}$g.exports=uq});var Vg=u((iW,Kg)=>{"use strict";var pq=li(),cq=ci(),lq=nr();function dq(e){return pq(e,lq,cq)}Kg.exports=dq});var Hg=u((uW,Yg)=>{"use strict";var fq=ft(),mq=ne(),gq=fq(mq,"DataView");Yg.exports=gq});var Jg=u((pW,zg)=>{"use strict";var yq=ft(),hq=ne(),Aq=yq(hq,"Promise");zg.exports=Aq});var yr=u((cW,ny)=>{"use strict";var fi=Hg(),mi=za(),gi=Jg(),yi=xo(),hi=Ws(),ay=dt(),gr=Io(),Xg="[object Map]",bq="[object Object]",Zg="[object Promise]",ey="[object Set]",ty="[object WeakMap]",ry="[object DataView]",Iq=gr(fi),Sq=gr(mi),wq=gr(gi),Tq=gr(yi),vq=gr(hi),Dt=ay;(fi&&Dt(new fi(new ArrayBuffer(1)))!=ry||mi&&Dt(new mi)!=Xg||gi&&Dt(gi.resolve())!=Zg||yi&&Dt(new yi)!=ey||hi&&Dt(new hi)!=ty)&&(Dt=function(e){var t=ay(e),r=t==bq?e.constructor:void 0,a=r?gr(r):"";if(a)switch(a){case Iq:return ry;case Sq:return Xg;case wq:return Zg;case Tq:return ey;case vq:return ty}return t});ny.exports=Dt});var sy=u((lW,oy)=>{"use strict";var Eq=Object.prototype,Rq=Eq.hasOwnProperty;function xq(e){var t=e.length,r=new e.constructor(t);return t&&typeof e[0]=="string"&&Rq.call(e,"index")&&(r.index=e.index,r.input=e.input),r}oy.exports=xq});var uy=u((dW,iy)=>{"use strict";var _q=tn();function Oq(e,t){var r=t?_q(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.byteLength)}iy.exports=Oq});var cy=u((fW,py)=>{"use strict";var Pq=/\w*$/;function Lq(e){var t=new e.constructor(e.source,Pq.exec(e));return t.lastIndex=e.lastIndex,t}py.exports=Lq});var gy=u((mW,my)=>{"use strict";var ly=Rt(),dy=ly?ly.prototype:void 0,fy=dy?dy.valueOf:void 0;function Cq(e){return fy?Object(fy.call(e)):{}}my.exports=Cq});var hy=u((gW,yy)=>{"use strict";var qq=tn(),Uq=uy(),Dq=cy(),Nq=gy(),Bq=Do(),Mq="[object Boolean]",Gq="[object Date]",kq="[object Map]",Fq="[object Number]",Qq="[object RegExp]",jq="[object Set]",Wq="[object String]",$q="[object Symbol]",Kq="[object ArrayBuffer]",Vq="[object DataView]",Yq="[object Float32Array]",Hq="[object Float64Array]",zq="[object Int8Array]",Jq="[object Int16Array]",Xq="[object Int32Array]",Zq="[object Uint8Array]",eU="[object Uint8ClampedArray]",tU="[object Uint16Array]",rU="[object Uint32Array]";function aU(e,t,r){var a=e.constructor;switch(t){case Kq:return qq(e);case Mq:case Gq:return new a(+e);case Vq:return Uq(e,r);case Yq:case Hq:case zq:case Jq:case Xq:case Zq:case eU:case tU:case rU:return Bq(e,r);case kq:return new a;case Fq:case Wq:return new a(e);case Qq:return Dq(e);case jq:return new a;case $q:return Nq(e)}}yy.exports=aU});var by=u((yW,Ay)=>{"use strict";var nU=yr(),oU=ge(),sU="[object Map]";function iU(e){return oU(e)&&nU(e)==sU}Ay.exports=iU});var Ty=u((hW,wy)=>{"use strict";var uU=by(),pU=nn(),Iy=on(),Sy=Iy&&Iy.isMap,cU=Sy?pU(Sy):uU;wy.exports=cU});var Ey=u((AW,vy)=>{"use strict";var lU=yr(),dU=ge(),fU="[object Set]";function mU(e){return dU(e)&&lU(e)==fU}vy.exports=mU});var Oy=u((bW,_y)=>{"use strict";var gU=Ey(),yU=nn(),Ry=on(),xy=Ry&&Ry.isSet,hU=xy?yU(xy):gU;_y.exports=hU});var Ai=u((IW,qy)=>{"use strict";var AU=ta(),bU=Ln(),IU=Fo(),SU=ui(),wU=qg(),TU=qo(),vU=er(),EU=kg(),RU=jg(),xU=di(),_U=Vg(),OU=yr(),PU=sy(),LU=hy(),CU=Bo(),qU=ee(),UU=sa(),DU=Ty(),NU=Te(),BU=Oy(),MU=mr(),GU=nr(),kU=1,FU=2,QU=4,Py="[object Arguments]",jU="[object Array]",WU="[object Boolean]",$U="[object Date]",KU="[object Error]",Ly="[object Function]",VU="[object GeneratorFunction]",YU="[object Map]",HU="[object Number]",Cy="[object Object]",zU="[object RegExp]",JU="[object Set]",XU="[object String]",ZU="[object Symbol]",eD="[object WeakMap]",tD="[object ArrayBuffer]",rD="[object DataView]",aD="[object Float32Array]",nD="[object Float64Array]",oD="[object Int8Array]",sD="[object Int16Array]",iD="[object Int32Array]",uD="[object Uint8Array]",pD="[object Uint8ClampedArray]",cD="[object Uint16Array]",lD="[object Uint32Array]",D={};D[Py]=D[jU]=D[tD]=D[rD]=D[WU]=D[$U]=D[aD]=D[nD]=D[oD]=D[sD]=D[iD]=D[YU]=D[HU]=D[Cy]=D[zU]=D[JU]=D[XU]=D[ZU]=D[uD]=D[pD]=D[cD]=D[lD]=!0;D[KU]=D[Ly]=D[eD]=!1;function Dn(e,t,r,a,n,o){var s,i=t&kU,p=t&FU,f=t&QU;if(r&&(s=n?r(e,a,n,o):r(e)),s!==void 0)return s;if(!NU(e))return e;var m=qU(e);if(m){if(s=PU(e),!i)return vU(e,s)}else{var y=OU(e),g=y==Ly||y==VU;if(UU(e))return TU(e,i);if(y==Cy||y==Py||g&&!n){if(s=p||g?{}:CU(e),!i)return p?RU(e,wU(s,e)):EU(e,SU(s,e))}else{if(!D[y])return n?e:{};s=LU(e,y,i)}}o||(o=new AU);var S=o.get(e);if(S)return S;o.set(e,s),BU(e)?e.forEach(function(R){s.add(Dn(R,t,r,R,e,o))}):DU(e)&&e.forEach(function(R,E){s.set(E,Dn(R,t,r,E,e,o))});var P=f?p?_U:xU:p?GU:MU,x=m?void 0:P(e);return bU(x||e,function(R,E){x&&(E=R,R=e[E]),IU(s,E,Dn(R,t,r,E,e,o))}),s}qy.exports=Dn});var Dy=u((SW,Uy)=>{"use strict";var dD=Ai(),fD=4;function mD(e){return dD(e,fD)}Uy.exports=mD});var By=u((wW,Ny)=>{"use strict";var gD=qn(),yD=8;function bi(e,t,r){t=r?void 0:t;var a=gD(e,yD,void 0,void 0,void 0,void 0,void 0,t);return a.placeholder=bi.placeholder,a}bi.placeholder={};Ny.exports=bi});var Gy=u((TW,My)=>{"use strict";var hD=dt(),AD=ge(),bD=Mo(),ID="[object DOMException]",SD="[object Error]";function wD(e){if(!AD(e))return!1;var t=hD(e);return t==SD||t==ID||typeof e.message=="string"&&typeof e.name=="string"&&!bD(e)}My.exports=wD});var Fy=u((vW,ky)=>{"use strict";var TD=yr(),vD=ge(),ED="[object WeakMap]";function RD(e){return vD(e)&&TD(e)==ED}ky.exports=RD});var jy=u((EW,Qy)=>{"use strict";function xD(e,t){for(var r=-1,a=e==null?0:e.length;++r<a;)if(t(e[r],r,e))return!0;return!1}Qy.exports=xD});var Ii=u((RW,Wy)=>{"use strict";var _D=vo(),OD=jy(),PD=Ro(),LD=1,CD=2;function qD(e,t,r,a,n,o){var s=r&LD,i=e.length,p=t.length;if(i!=p&&!(s&&p>i))return!1;var f=o.get(e),m=o.get(t);if(f&&m)return f==t&&m==e;var y=-1,g=!0,S=r&CD?new _D:void 0;for(o.set(e,t),o.set(t,e);++y<i;){var P=e[y],x=t[y];if(a)var R=s?a(x,P,y,t,e,o):a(P,x,y,e,t,o);if(R!==void 0){if(R)continue;g=!1;break}if(S){if(!OD(t,function(E,q){if(!PD(S,q)&&(P===E||n(P,E,r,a,o)))return S.push(q)})){g=!1;break}}else if(!(P===x||n(P,x,r,a,o))){g=!1;break}}return o.delete(e),o.delete(t),g}Wy.exports=qD});var Ky=u((xW,$y)=>{"use strict";function UD(e){var t=-1,r=Array(e.size);return e.forEach(function(a,n){r[++t]=[n,a]}),r}$y.exports=UD});var Jy=u((_W,zy)=>{"use strict";var Vy=Rt(),Yy=Uo(),DD=Yt(),ND=Ii(),BD=Ky(),MD=Za(),GD=1,kD=2,FD="[object Boolean]",QD="[object Date]",jD="[object Error]",WD="[object Map]",$D="[object Number]",KD="[object RegExp]",VD="[object Set]",YD="[object String]",HD="[object Symbol]",zD="[object ArrayBuffer]",JD="[object DataView]",Hy=Vy?Vy.prototype:void 0,Si=Hy?Hy.valueOf:void 0;function XD(e,t,r,a,n,o,s){switch(r){case JD:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case zD:return!(e.byteLength!=t.byteLength||!o(new Yy(e),new Yy(t)));case FD:case QD:case $D:return DD(+e,+t);case jD:return e.name==t.name&&e.message==t.message;case KD:case YD:return e==t+"";case WD:var i=BD;case VD:var p=a&GD;if(i||(i=MD),e.size!=t.size&&!p)return!1;var f=s.get(e);if(f)return f==t;a|=kD,s.set(e,t);var m=ND(i(e),i(t),a,n,o,s);return s.delete(e),m;case HD:if(Si)return Si.call(e)==Si.call(t)}return!1}zy.exports=XD});var eh=u((OW,Zy)=>{"use strict";var Xy=di(),ZD=1,eN=Object.prototype,tN=eN.hasOwnProperty;function rN(e,t,r,a,n,o){var s=r&ZD,i=Xy(e),p=i.length,f=Xy(t),m=f.length;if(p!=m&&!s)return!1;for(var y=p;y--;){var g=i[y];if(!(s?g in t:tN.call(t,g)))return!1}var S=o.get(e),P=o.get(t);if(S&&P)return S==t&&P==e;var x=!0;o.set(e,t),o.set(t,e);for(var R=s;++y<p;){g=i[y];var E=e[g],q=t[g];if(a)var xe=s?a(q,E,g,t,e,o):a(E,q,g,e,t,o);if(!(xe===void 0?E===q||n(E,q,r,a,o):xe)){x=!1;break}R||(R=g=="constructor")}if(x&&!R){var be=e.constructor,it=t.constructor;be!=it&&"constructor"in e&&"constructor"in t&&!(typeof be=="function"&&be instanceof be&&typeof it=="function"&&it instanceof it)&&(x=!1)}return o.delete(e),o.delete(t),x}Zy.exports=rN});var uh=u((PW,ih)=>{"use strict";var wi=ta(),aN=Ii(),nN=Jy(),oN=eh(),th=yr(),rh=ee(),ah=sa(),sN=sn(),iN=1,nh="[object Arguments]",oh="[object Array]",Nn="[object Object]",uN=Object.prototype,sh=uN.hasOwnProperty;function pN(e,t,r,a,n,o){var s=rh(e),i=rh(t),p=s?oh:th(e),f=i?oh:th(t);p=p==nh?Nn:p,f=f==nh?Nn:f;var m=p==Nn,y=f==Nn,g=p==f;if(g&&ah(e)){if(!ah(t))return!1;s=!0,m=!1}if(g&&!m)return o||(o=new wi),s||sN(e)?aN(e,t,r,a,n,o):nN(e,t,p,r,a,n,o);if(!(r&iN)){var S=m&&sh.call(e,"__wrapped__"),P=y&&sh.call(t,"__wrapped__");if(S||P){var x=S?e.value():e,R=P?t.value():t;return o||(o=new wi),n(x,R,r,a,o)}}return g?(o||(o=new wi),oN(e,t,r,a,n,o)):!1}ih.exports=pN});var Ti=u((LW,lh)=>{"use strict";var cN=uh(),ph=ge();function ch(e,t,r,a,n){return e===t?!0:e==null||t==null||!ph(e)&&!ph(t)?e!==e&&t!==t:cN(e,t,r,a,ch,n)}lh.exports=ch});var fh=u((CW,dh)=>{"use strict";var lN=ta(),dN=Ti(),fN=1,mN=2;function gN(e,t,r,a){var n=r.length,o=n,s=!a;if(e==null)return!o;for(e=Object(e);n--;){var i=r[n];if(s&&i[2]?i[1]!==e[i[0]]:!(i[0]in e))return!1}for(;++n<o;){i=r[n];var p=i[0],f=e[p],m=i[1];if(s&&i[2]){if(f===void 0&&!(p in e))return!1}else{var y=new lN;if(a)var g=a(f,m,p,e,t,y);if(!(g===void 0?dN(m,f,fN|mN,a,y):g))return!1}}return!0}dh.exports=gN});var vi=u((qW,mh)=>{"use strict";var yN=Te();function hN(e){return e===e&&!yN(e)}mh.exports=hN});var yh=u((UW,gh)=>{"use strict";var AN=vi(),bN=mr();function IN(e){for(var t=bN(e),r=t.length;r--;){var a=t[r],n=e[a];t[r]=[a,n,AN(n)]}return t}gh.exports=IN});var Ei=u((DW,hh)=>{"use strict";function SN(e,t){return function(r){return r==null?!1:r[e]===t&&(t!==void 0||e in Object(r))}}hh.exports=SN});var bh=u((NW,Ah)=>{"use strict";var wN=fh(),TN=yh(),vN=Ei();function EN(e){var t=TN(e);return t.length==1&&t[0][2]?vN(t[0][0],t[0][1]):function(r){return r===e||wN(r,e,t)}}Ah.exports=EN});var Bn=u((BW,Ih)=>{"use strict";var RN=ee(),xN=fr(),_N=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,ON=/^\w*$/;function PN(e,t){if(RN(e))return!1;var r=typeof e;return r=="number"||r=="symbol"||r=="boolean"||e==null||xN(e)?!0:ON.test(e)||!_N.test(e)||t!=null&&e in Object(t)}Ih.exports=PN});var Th=u((MW,wh)=>{"use strict";var Sh=Ja(),LN="Expected a function";function Ri(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(LN);var r=function(){var a=arguments,n=t?t.apply(this,a):a[0],o=r.cache;if(o.has(n))return o.get(n);var s=e.apply(this,a);return r.cache=o.set(n,s)||o,s};return r.cache=new(Ri.Cache||Sh),r}Ri.Cache=Sh;wh.exports=Ri});var Eh=u((GW,vh)=>{"use strict";var CN=Th(),qN=500;function UN(e){var t=CN(e,function(a){return r.size===qN&&r.clear(),a}),r=t.cache;return t}vh.exports=UN});var xi=u((kW,Rh)=>{"use strict";var DN=Eh(),NN=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,BN=/\\(\\)?/g,MN=DN(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(NN,function(r,a,n,o){t.push(n?o.replace(BN,"$1"):a||r)}),t});Rh.exports=MN});var _i=u((FW,xh)=>{"use strict";function GN(e,t){for(var r=-1,a=e==null?0:e.length,n=Array(a);++r<a;)n[r]=t(e[r],r,e);return n}xh.exports=GN});var qh=u((QW,Ch)=>{"use strict";var _h=Rt(),kN=_i(),FN=ee(),QN=fr(),jN=1/0,Oh=_h?_h.prototype:void 0,Ph=Oh?Oh.toString:void 0;function Lh(e){if(typeof e=="string")return e;if(FN(e))return kN(e,Lh)+"";if(QN(e))return Ph?Ph.call(e):"";var t=e+"";return t=="0"&&1/e==-jN?"-0":t}Ch.exports=Lh});var Oi=u((jW,Uh)=>{"use strict";var WN=qh();function $N(e){return e==null?"":WN(e)}Uh.exports=$N});var Pi=u((WW,Dh)=>{"use strict";var KN=ee(),VN=Bn(),YN=xi(),HN=Oi();function zN(e,t){return KN(e)?e:VN(e,t)?[e]:YN(HN(e))}Dh.exports=zN});var hr=u(($W,Nh)=>{"use strict";var JN=fr(),XN=1/0;function ZN(e){if(typeof e=="string"||JN(e))return e;var t=e+"";return t=="0"&&1/e==-XN?"-0":t}Nh.exports=ZN});var Li=u((KW,Bh)=>{"use strict";var eB=Pi(),tB=hr();function rB(e,t){t=eB(t,e);for(var r=0,a=t.length;e!=null&&r<a;)e=e[tB(t[r++])];return r&&r==a?e:void 0}Bh.exports=rB});var Gh=u((VW,Mh)=>{"use strict";var aB=Li();function nB(e,t,r){var a=e==null?void 0:aB(e,t);return a===void 0?r:a}Mh.exports=nB});var Fh=u((YW,kh)=>{"use strict";function oB(e,t){return e!=null&&t in Object(e)}kh.exports=oB});var jh=u((HW,Qh)=>{"use strict";var sB=Pi(),iB=Yr(),uB=ee(),pB=pa(),cB=en(),lB=hr();function dB(e,t,r){t=sB(t,e);for(var a=-1,n=t.length,o=!1;++a<n;){var s=lB(t[a]);if(!(o=e!=null&&r(e,s)))break;e=e[s]}return o||++a!=n?o:(n=e==null?0:e.length,!!n&&cB(n)&&pB(s,n)&&(uB(e)||iB(e)))}Qh.exports=dB});var $h=u((zW,Wh)=>{"use strict";var fB=Fh(),mB=jh();function gB(e,t){return e!=null&&mB(e,t,fB)}Wh.exports=gB});var Vh=u((JW,Kh)=>{"use strict";var yB=Ti(),hB=Gh(),AB=$h(),bB=Bn(),IB=vi(),SB=Ei(),wB=hr(),TB=1,vB=2;function EB(e,t){return bB(e)&&IB(t)?SB(wB(e),t):function(r){var a=hB(r,e);return a===void 0&&a===t?AB(r,e):yB(t,a,TB|vB)}}Kh.exports=EB});var Hh=u((XW,Yh)=>{"use strict";function RB(e){return function(t){return t?.[e]}}Yh.exports=RB});var Jh=u((ZW,zh)=>{"use strict";var xB=Li();function _B(e){return function(t){return xB(t,e)}}zh.exports=_B});var Zh=u((e$,Xh)=>{"use strict";var OB=Hh(),PB=Jh(),LB=Bn(),CB=hr();function qB(e){return LB(e)?OB(CB(e)):PB(e)}Xh.exports=qB});var Ci=u((t$,eA)=>{"use strict";var UB=bh(),DB=Vh(),NB=Hr(),BB=ee(),MB=Zh();function GB(e){return typeof e=="function"?e:e==null?NB:typeof e=="object"?BB(e)?DB(e[0],e[1]):UB(e):MB(e)}eA.exports=GB});var rA=u((r$,tA)=>{"use strict";var kB=Ai(),FB=Ci(),QB=1;function jB(e){return FB(typeof e=="function"?e:kB(e,QB))}tA.exports=jB});var nA=u((a$,aA)=>{"use strict";var WB=ho();function $B(e){var t=e==null?0:e.length;return t?WB(e,1):[]}aA.exports=$B});var sA=u((n$,oA)=>{"use strict";var KB=nA(),VB=Ao(),YB=Ha();function HB(e){return YB(VB(e,void 0,KB),e+"")}oA.exports=HB});var uA=u((o$,iA)=>{"use strict";var zB=qn(),JB=sA(),XB=256,ZB=JB(function(e,t){return zB(e,XB,void 0,void 0,void 0,t)});iA.exports=ZB});var cA=u((s$,pA)=>{"use strict";var eM=_i(),tM=er(),rM=ee(),aM=fr(),nM=xi(),oM=hr(),sM=Oi();function iM(e){return rM(e)?eM(e,oM):aM(e)?[e]:tM(nM(sM(e)))}pA.exports=iM});var dA=u((i$,lA)=>{"use strict";lA.exports={ary:Rg(),assign:ui(),clone:Dy(),curry:By(),forEach:Ln(),isArray:ee(),isError:Gy(),isFunction:zr(),isWeakMap:Fy(),iteratee:rA(),keys:ii(),rearg:uA(),toInteger:ai(),toPath:cA()}});var mA=u((u$,fA)=>{"use strict";var uM=tm(),pM=dA();function cM(e,t,r){return uM(pM,e,t,r)}fA.exports=cM});var qi=u((p$,yA)=>{"use strict";var lM=mA(),gA=lM("merge",jo());gA.placeholder=Gs();yA.exports=gA});var hb=u((tK,yb)=>{"use strict";function LM(e,t,r,a){for(var n=-1,o=e==null?0:e.length;++n<o;){var s=e[n];t(a,s,r(s),e)}return a}yb.exports=LM});var bb=u((rK,Ab)=>{"use strict";var CM=Co(),qM=mr();function UM(e,t){return e&&CM(e,t,qM)}Ab.exports=UM});var Sb=u((aK,Ib)=>{"use strict";var DM=Jt();function NM(e,t){return function(r,a){if(r==null)return r;if(!DM(r))return e(r,a);for(var n=r.length,o=t?n:-1,s=Object(r);(t?o--:++o<n)&&a(s[o],o,s)!==!1;);return r}}Ib.exports=NM});var Tb=u((nK,wb)=>{"use strict";var BM=bb(),MM=Sb(),GM=MM(BM);wb.exports=GM});var Eb=u((oK,vb)=>{"use strict";var kM=Tb();function FM(e,t,r,a){return kM(e,function(n,o,s){t(a,n,r(n),s)}),a}vb.exports=FM});var xb=u((sK,Rb)=>{"use strict";var QM=hb(),jM=Eb(),WM=Ci(),$M=ee();function KM(e,t){return function(r,a){var n=$M(r)?QM:jM,o=t?t():{};return n(r,e,WM(a,2),o)}}Rb.exports=KM});var Ob=u((iK,_b)=>{"use strict";var VM=ra(),YM=xb(),HM=Object.prototype,zM=HM.hasOwnProperty,JM=YM(function(e,t,r){zM.call(e,r)?e[r].push(t):VM(e,r,[t])});_b.exports=JM});var IG={};w(IG,{Method:()=>zn,ai:()=>Iu,api:()=>Hi,auditLogs:()=>gt,automations:()=>In,backups:()=>ve,branding:()=>dn,constants:()=>Qr,environmentVariables:()=>Ke,features:()=>Le,groups:()=>Q,init:()=>Hf,licensing:()=>Fe,logger:()=>Nt,mappers:()=>K,middleware:()=>ki,plugins:()=>Sn,publicApi:()=>vn,quotas:()=>We,scimGroups:()=>Ar,scimUsers:()=>de,sdk:()=>Di,users:()=>tt,utils:()=>Kt});module.exports=bI(IG);var zn=(o=>(o.POST="POST",o.GET="GET",o.PATCH="PATCH",o.DELETE="DELETE",o.PUT="PUT",o))(zn||{});var Di={};w(Di,{ai:()=>is,auditLogs:()=>gt,automations:()=>In,backups:()=>ve,branding:()=>dn,environmentVariables:()=>Ke,features:()=>Le,groups:()=>Q,init:()=>Hf,licensing:()=>Fe,logger:()=>Nt,plugins:()=>Sn,publicApi:()=>vn,quotas:()=>We,scimGroups:()=>Ar,scimUsers:()=>de,users:()=>tt,utils:()=>Kt});var dn={};w(dn,{getBrandingConfig:()=>p_});var Le={};w(Le,{checkBackups:()=>ye,checkFeature:()=>cn,checkFeatures:()=>ts,checkSCIM:()=>os,isAppBuildersEnabled:()=>Pt,isAuditLogsEnabled:()=>ln,isBackupsEnabled:()=>rs,isBrandingEnabled:()=>as,isEnforceableSSO:()=>pf,isExpandedPublicApiEnabled:()=>Ze,isPWAEnabled:()=>n_,isSSOEnforced:()=>o_,isSyncAutomationsEnabled:()=>r_,isTriggerAutomationRunEnabled:()=>a_,isUserGroupsEnabled:()=>ns,isViewPermissionEnabled:()=>s_,isViewReadonlyColumnsEnabled:()=>i_});var oe=require("@budibase/types"),Xe=require("@budibase/backend-core");var Fe={};w(Fe,{cache:()=>Oe,client:()=>lt,features:()=>$a,getFreeLicense:()=>Jo,getLicense:()=>Ho,getLicenseFromKey:()=>zo,keys:()=>es,offline:()=>un,quotas:()=>Ka});var Oe={};w(Oe,{getCachedLicense:()=>sf,invalidate:()=>uf,refresh:()=>xt});var Ca=require("@budibase/backend-core"),Tr,II=async()=>{Tr=await Ca.RedisClient.init(Ca.redis.utils.Databases.LICENSES)},SI=async()=>{Tr&&await Tr.finish()};process.on("exit",async()=>{await SI()});var Jn=async()=>(Tr||await II(),Tr);var lt={};w(lt,{activateLicenseKey:()=>lo,getLicense:()=>Wt,getLicenseFromKey:()=>co,triggerQuota:()=>sS});var Ou=C(require("node-fetch"));var Pu=require("@budibase/backend-core"),Xn=class{constructor(t){this.apiCall=t=>async(r="",a={})=>{a.headers||(a.headers={}),a.headers["Content-Type"]||(a.headers={"Content-Type":"application/json",Accept:"application/json",...a.headers});let n=a.headers["Content-Type"]==="application/json";Pu.logging.correlation.setHeader(a.headers);let o={method:t,body:n?JSON.stringify(a.body):a.body,headers:a.headers,credentials:"include"};return(0,Ou.default)(`${this.host}${r}`,o)};this.post=this.apiCall("POST");this.get=this.apiCall("GET");this.patch=this.apiCall("PATCH");this.del=this.apiCall("DELETE");this.put=this.apiCall("PUT");this.host=t}},Zn=Xn;var Qa=require("@budibase/types"),L=require("@budibase/backend-core");var Me={};w(Me,{bustCache:()=>ro,getCurrentUsageValues:()=>Mu,getQuotaUsage:()=>wt,setAllUsage:()=>no,setAppUsageValue:()=>ao,setUsage:()=>Du,setUsagePerApp:()=>Nu,utils:()=>Rr});var re=require("@budibase/types"),pe=require("@budibase/backend-core");var Rr={};w(Rr,{generateBaseQuotaUsage:()=>qa,generateNewMonthlyQuotas:()=>Er,generateNewQuotaUsage:()=>to,getBreakdownName:()=>Da,getCurrentMonthString:()=>ut,getQuotaDocId:()=>vr,setCurrentMonth:()=>Ua,setQuotaReset:()=>eo});var X=require("@budibase/types"),St=require("@budibase/backend-core"),vr=()=>St.context.isSelfHostUsingCloud()?`quota_usage_${St.context.getTenantId()}`:St.db.StaticDatabases.GLOBAL.docs.usageQuota,Lu=()=>{let e=new Date;return new Date(e.getFullYear(),e.getMonth()+1,1).toISOString()},eo=e=>{e.quotaReset=Lu()},ut=()=>{let e=new Date,t=e.getMonth()+1,r=e.getFullYear();return`${t}-${r}`},qa=()=>({usageQuota:{[X.StaticQuotaName.APPS]:0,[X.StaticQuotaName.ROWS]:0,[X.StaticQuotaName.PLUGINS]:0,[X.StaticQuotaName.USERS]:0,[X.StaticQuotaName.CREATORS]:0,[X.StaticQuotaName.USER_GROUPS]:0,[X.StaticQuotaName.AI_CUSTOM_CONFIGS]:0,triggers:{}},monthly:{[ut()]:Er()}}),to=()=>{let e={_id:vr(),quotaReset:Lu(),...qa(),apps:{}};return Ua(e),e},Er=()=>({[X.MonthlyQuotaName.QUERIES]:0,[X.MonthlyQuotaName.AUTOMATIONS]:0,[X.MonthlyQuotaName.BUDIBASE_AI_CREDITS]:0,triggers:{}}),Ua=e=>{let t=ut();e.monthly||(e.monthly={}),e.monthly[t]||(e.monthly[t]=Er()),e.monthly.current=e.monthly[t]},Da=(e,t)=>{if(!(!t||!e))switch(e){case X.MonthlyQuotaName.AUTOMATIONS:return X.BreakdownQuotaName.AUTOMATIONS;case X.MonthlyQuotaName.QUERIES:return St.db.isTableId(t)?X.BreakdownQuotaName.ROW_QUERIES:St.db.isDatasourceId(t)?X.BreakdownQuotaName.DATASOURCE_QUERIES:void 0}};var Cu=pe.Duration.fromSeconds(60).toMs(),{Writethrough:qu}=pe.cache.writethrough;function TI(e){return delete e.usageLimits,delete e.usageQuota.automationRuns,delete e.usageQuota.emails,delete e.usageQuota.storage,delete e.usageQuota.views,delete e.usageQuota.publishedApps,delete e.usageQuota.developers,e}var Na=()=>pe.tenancy.isSelfHostUsingCloud()?new qu(pe.tenancy.getSelfHostCloudDB(),Cu):new qu(pe.tenancy.getGlobalDB(),Cu);async function ro(e=0){let r=Na(),a=vr(),n=await r.tryGet(a);n&&n._rev&&await r.remove(a,n._rev).catch(async o=>{if(e<1)return await ro(e+1);throw o})}var wt=async()=>{let e=Na(),t=await e.tryGet(vr());if(!t){t=to();let{rev:r}=await e.put(t);t._rev=r}return Ua(t),eo(t),TI(t)},Du=async(e,t,r)=>no({name:t,type:r,values:{total:e}}),Nu=async(e,t,r)=>{let a=Na(),n=await wt(),o=Object.values(e).reduce((i,p)=>i+p,0);for(let[i,p]of Object.entries(e))n=Bu(n,t,r,{total:o,app:p},{appId:i});let s=await a.put(n);return n._rev=s.rev,n},vI=(e,t,r,a)=>{let n=Da(t,r);if(!n||!a?.breakdown)return e;e.breakdown||(e.breakdown={}),e.breakdown[n]||(e.breakdown[n]={parent:t,values:{}});let o=e.breakdown[n];return o.values[r]=a.breakdown,e},ao=(e,t,r,a={},n)=>{let o;try{o=pe.db.getProdAppID(a?.appId||pe.context.getAppId())}catch{}if(!o||!n.app||!re.APP_QUOTA_NAMES.includes(t))return e;e.apps?.[o]||(e.apps={...e.apps,[o]:qa()});let s=e.apps[o];switch(r){case re.QuotaUsageType.STATIC:s.usageQuota[t]=n.app;break;case re.QuotaUsageType.MONTHLY:{let i=ut(),p=t,f=s.monthly[i];f||(s.monthly[i]=Er(),f=s.monthly[i]),f[p]=n.app,re.BREAKDOWN_QUOTA_NAMES.includes(p)&&a?.id&&(f=vI(f,p,a.id,n));break}}return e},Uu=(e,t,r,a)=>{if(!re.APP_QUOTA_NAMES.includes(r))return{};let n;try{n=pe.db.getProdAppID(pe.context.getAppId())}catch{}if(!n||!e.apps||!e.apps[n])return{app:0};let o=e.apps[n];switch(t){case re.QuotaUsageType.STATIC:if(o.usageQuota?.[r])return{app:o.usageQuota[r]};break;case re.QuotaUsageType.MONTHLY:{let s=ut(),i=r;if(!o.monthly?.[s]?.[i])break;let p=o.monthly[s],f=p[i],m,y=Da(i,a);return y&&a&&p.breakdown?.[y]&&(m=p.breakdown[y]?.values[a]),{app:f,breakdown:m||0}}}return{app:0}},EI=(e,t,r)=>{t.usageQuota.triggers||(t.usageQuota.triggers={}),r&&(t.usageQuota.triggers[e]=r)},RI=(e,t,r,a)=>{r.monthly[t].triggers||(r.monthly[t].triggers={}),a&&(r.monthly[t].triggers[e]=a)},Bu=(e,t,r,a,n={})=>{if(r===re.QuotaUsageType.STATIC)t=t,e.usageQuota[t]=a.total,EI(t,e,a.triggers);else if(r===re.QuotaUsageType.MONTHLY){t=t;let o=ut();e.monthly[o][t]=a.total,RI(t,o,e,a.triggers)}else throw new Error(`Invalid usage type: ${r}`);return ao(e,t,r,n,a)},no=async e=>{let t=Array.isArray(e)?e:[e],r=Na(),a=await wt();for(let o of t)a=Bu(a,o.name,o.type,o.values,o.opts);let n=await r.put(a,0);return a._rev=n.rev,a},Mu=async(e,t,r)=>{let a=await wt(),n=0,o={};switch(e){case re.QuotaUsageType.STATIC:if(a.usageQuota[t]){let s=t;n=a.usageQuota[s],o=Uu(a,e,t,r)}break;case re.QuotaUsageType.MONTHLY:{let s=ut(),i=t;a.monthly[s][i]&&(n=a.monthly[s][i],o=Uu(a,e,t,r));break}default:throw new Error(`Invalid usage type: ${e}`)}return re.APP_QUOTA_NAMES.includes(t)&&!(o.app||o.breakdown)&&(o.app=o.app||0,o.breakdown=o.breakdown||0),{total:n,app:o.app,breakdown:o.breakdown}};var Se={};w(Se,{destroy:()=>OI,get:()=>oo,save:()=>_I});var pt=require("@budibase/backend-core"),xI=()=>({_id:pt.StaticDatabases.GLOBAL.docs.licenseInfo}),_I=async e=>{let t=await oo();t={...t,...e};let a=await pt.tenancy.getGlobalDB().put(t);return t._rev=a.rev,t},oo=async()=>{let e=pt.tenancy.getGlobalDB();try{return await e.get(pt.StaticDatabases.GLOBAL.docs.licenseInfo)}catch(t){if(t.status===404)return xI();throw t}},OI=async()=>{let e=pt.tenancy.getGlobalDB(),t=await oo();t&&t._rev&&await e.remove(pt.StaticDatabases.GLOBAL.docs.licenseInfo,t._rev)};var M={};w(M,{bulkSave:()=>FI,destroy:()=>QI,fetch:()=>BI,generateUserGroupID:()=>DI,get:()=>MI,getBulk:()=>GI,getByName:()=>so,getGroupUsers:()=>Ma,getGroupUsersParams:()=>ju,getUserGroupsParams:()=>Qu,save:()=>kI});var N=require("@budibase/backend-core");var _e=require("@budibase/types"),Ft=require("@budibase/backend-core");async function Gu(){let e=Ft.sql.designDoc.base("type");e.sql.tables={[_e.AUDIT_LOG_TYPE]:{fields:{appId:_e.SQLiteType.TEXT,event:_e.SQLiteType.TEXT,userId:_e.SQLiteType.TEXT,timestamp:_e.SQLiteType.TEXT,metadata:_e.SQLiteType.TEXT,name:_e.SQLiteType.TEXT,type:_e.SQLiteType.TEXT,fallback:_e.SQLiteType.TEXT}}};let t=Ft.context.getAuditLogsDB(),r;try{r=await t.get(Ft.SQLITE_DESIGN_DOC_ID),r={...r,...e}}catch(a){if(a.status===404)r=e;else throw a}await t.put(r)}var Ba=require("@budibase/backend-core"),{ViewName:PI,SEPARATOR:LI,DocumentType:CI,createView:qI}=Ba.db,UI=CI.USER+LI;async function ku(){let e=Ba.tenancy.getGlobalDB(),t=`function(doc) {
4
- if (doc._id.startsWith("${UI}") && Array.isArray(doc.userGroups)) {
3
+ `)}Fm.exports=qL});var Dn=u((Gj,jm)=>{"use strict";function DL(e,t){for(var r=-1,a=e==null?0:e.length;++r<a&&t(e[r],r,e)!==!1;);return e}jm.exports=DL});var $m=u((kj,Wm)=>{"use strict";var NL=Dn(),BL=Po(),ML=1,GL=2,kL=8,FL=16,QL=32,jL=64,WL=128,$L=256,KL=512,VL=[["ary",WL],["bind",ML],["bindKey",GL],["curry",kL],["curryRight",FL],["flip",KL],["partial",QL],["partialRight",jL],["rearg",$L]];function YL(e,t){return NL(VL,function(r){var a="_."+r[0];t&r[1]&&!BL(e,a)&&e.push(a)}),e.sort()}Wm.exports=YL});var ni=u((Fj,Km)=>{"use strict";var HL=km(),zL=Qm(),JL=Xa(),XL=$m();function ZL(e,t,r){var a=t+"";return JL(e,zL(a,XL(HL(a),r)))}Km.exports=ZL});var oi=u((Qj,Hm)=>{"use strict";var eO=Bm(),tO=ai(),rO=ni(),aO=1,nO=2,oO=4,sO=8,Vm=32,Ym=64;function iO(e,t,r,a,n,o,s,i,p,m){var f=t&sO,h=f?s:void 0,g=f?void 0:s,S=f?o:void 0,L=f?void 0:o;t|=f?Vm:Ym,t&=~(f?Ym:Vm),t&oO||(t&=~(aO|nO));var _=[e,t,n,S,h,L,g,i,p,m],R=r.apply(void 0,_);return eO(e)&&tO(R,_),R.placeholder=a,rO(R,e,t)}Hm.exports=iO});var si=u((jj,zm)=>{"use strict";function uO(e){var t=e;return t.placeholder}zm.exports=uO});var Xm=u((Wj,Jm)=>{"use strict";var pO=tr(),cO=la(),lO=Math.min;function dO(e,t){for(var r=e.length,a=lO(t.length,r),n=pO(e);a--;){var o=t[a];e[a]=cO(o,r)?n[o]:void 0}return e}Jm.exports=dO});var Nn=u(($j,eg)=>{"use strict";var Zm="__lodash_placeholder__";function fO(e,t){for(var r=-1,a=e.length,n=0,o=[];++r<a;){var s=e[r];(s===t||s===Zm)&&(e[r]=Zm,o[n++]=r)}return o}eg.exports=fO});var ii=u((Kj,ag)=>{"use strict";var mO=Zs(),gO=ei(),hO=Im(),tg=wa(),yO=oi(),AO=si(),bO=Xm(),IO=Nn(),SO=oe(),wO=1,TO=2,vO=8,EO=16,RO=128,_O=512;function rg(e,t,r,a,n,o,s,i,p,m){var f=t&RO,h=t&wO,g=t&TO,S=t&(vO|EO),L=t&_O,_=g?void 0:tg(e);function R(){for(var E=arguments.length,U=Array(E),Ce=E;Ce--;)U[Ce]=arguments[Ce];if(S)var Ie=AO(R),pt=hO(U,Ie);if(a&&(U=mO(U,a,n,S)),o&&(U=gO(U,o,s,S)),E-=pt,S&&E<m){var Ft=IO(U,Ie);return yO(e,t,rg,R.placeholder,r,U,Ft,i,p,m-E)}var Sr=h?r:this,wr=g?Sr[e]:e;return E=U.length,i?U=bO(U,i):L&&E>1&&U.reverse(),f&&p<E&&(U.length=p),this&&this!==SO&&this instanceof R&&(wr=_||tg(wr)),wr.apply(Sr,U)}return R}ag.exports=rg});var og=u((Vj,ng)=>{"use strict";var xO=Ja(),CO=wa(),LO=ii(),OO=oi(),PO=si(),UO=Nn(),qO=oe();function DO(e,t,r){var a=CO(e);function n(){for(var o=arguments.length,s=Array(o),i=o,p=PO(n);i--;)s[i]=arguments[i];var m=o<3&&s[0]!==p&&s[o-1]!==p?[]:UO(s,p);if(o-=m.length,o<r)return OO(e,t,LO,n.placeholder,void 0,s,m,void 0,void 0,r-o);var f=this&&this!==qO&&this instanceof n?a:e;return xO(f,this,s)}return n}ng.exports=DO});var ig=u((Yj,sg)=>{"use strict";var NO=Ja(),BO=wa(),MO=oe(),GO=1;function kO(e,t,r,a){var n=t&GO,o=BO(e);function s(){for(var i=-1,p=arguments.length,m=-1,f=a.length,h=Array(f+p),g=this&&this!==MO&&this instanceof s?o:e;++m<f;)h[m]=a[m];for(;p--;)h[m++]=arguments[++i];return NO(g,n?r:this,h)}return s}sg.exports=kO});var fg=u((Hj,dg)=>{"use strict";var FO=Zs(),QO=ei(),ug=Nn(),pg="__lodash_placeholder__",ui=1,jO=2,WO=4,cg=8,Ta=128,lg=256,$O=Math.min;function KO(e,t){var r=e[1],a=t[1],n=r|a,o=n<(ui|jO|Ta),s=a==Ta&&r==cg||a==Ta&&r==lg&&e[7].length<=t[8]||a==(Ta|lg)&&t[7].length<=t[8]&&r==cg;if(!(o||s))return e;a&ui&&(e[2]=t[2],n|=r&ui?0:WO);var i=t[3];if(i){var p=e[3];e[3]=p?FO(p,i,t[4]):i,e[4]=p?ug(e[3],pg):t[4]}return i=t[5],i&&(p=e[5],e[5]=p?QO(p,i,t[6]):i,e[6]=p?ug(e[5],pg):t[6]),i=t[7],i&&(e[7]=i),a&Ta&&(e[8]=e[8]==null?t[8]:$O(e[8],t[8])),e[9]==null&&(e[9]=t[9]),e[0]=t[0],e[1]=n,e}dg.exports=KO});var gg=u((zj,mg)=>{"use strict";var VO=/\s/;function YO(e){for(var t=e.length;t--&&VO.test(e.charAt(t)););return t}mg.exports=YO});var yg=u((Jj,hg)=>{"use strict";var HO=gg(),zO=/^\s+/;function JO(e){return e&&e.slice(0,HO(e)+1).replace(zO,"")}hg.exports=JO});var mr=u((Xj,Ag)=>{"use strict";var XO=mt(),ZO=he(),eP="[object Symbol]";function tP(e){return typeof e=="symbol"||ZO(e)&&XO(e)==eP}Ag.exports=tP});var wg=u((Zj,Sg)=>{"use strict";var rP=yg(),bg=ve(),aP=mr(),Ig=0/0,nP=/^[-+]0x[0-9a-f]+$/i,oP=/^0b[01]+$/i,sP=/^0o[0-7]+$/i,iP=parseInt;function uP(e){if(typeof e=="number")return e;if(aP(e))return Ig;if(bg(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=bg(t)?t+"":t}if(typeof e!="string")return e===0?e:+e;e=rP(e);var r=oP.test(e);return r||sP.test(e)?iP(e.slice(2),r?2:8):nP.test(e)?Ig:+e}Sg.exports=uP});var Eg=u((eW,vg)=>{"use strict";var pP=wg(),Tg=1/0,cP=17976931348623157e292;function lP(e){if(!e)return e===0?e:0;if(e=pP(e),e===Tg||e===-Tg){var t=e<0?-1:1;return t*cP}return e===e?e:0}vg.exports=lP});var pi=u((tW,Rg)=>{"use strict";var dP=Eg();function fP(e){var t=dP(e),r=t%1;return t===t?r?t-r:t:0}Rg.exports=fP});var Bn=u((rW,Og)=>{"use strict";var mP=Xs(),gP=hm(),hP=og(),yP=ii(),AP=ig(),bP=ti(),IP=fg(),SP=ai(),wP=ni(),_g=pi(),TP="Expected a function",xg=1,vP=2,ci=8,li=16,di=32,Cg=64,Lg=Math.max;function EP(e,t,r,a,n,o,s,i){var p=t&vP;if(!p&&typeof e!="function")throw new TypeError(TP);var m=a?a.length:0;if(m||(t&=~(di|Cg),a=n=void 0),s=s===void 0?s:Lg(_g(s),0),i=i===void 0?i:_g(i),m-=n?n.length:0,t&Cg){var f=a,h=n;a=n=void 0}var g=p?void 0:bP(e),S=[e,t,r,a,n,f,h,o,s,i];if(g&&IP(S,g),e=S[0],t=S[1],r=S[2],a=S[3],n=S[4],i=S[9]=S[9]===void 0?p?0:e.length:Lg(S[9]-m,0),!i&&t&(ci|li)&&(t&=~(ci|li)),!t||t==xg)var L=gP(e,t,r);else t==ci||t==li?L=hP(e,t,i):(t==di||t==(xg|di))&&!n.length?L=AP(e,t,r,a):L=yP.apply(void 0,S);var _=g?mP:SP;return wP(_(L,S),e,t)}Og.exports=EP});var Ug=u((aW,Pg)=>{"use strict";var RP=Bn(),_P=128;function xP(e,t,r){return t=r?void 0:t,t=e&&t==null?e.length:t,RP(e,_P,void 0,void 0,void 0,void 0,t)}Pg.exports=xP});var Dg=u((nW,qg)=>{"use strict";var CP=jo(),LP=CP(Object.keys,Object);qg.exports=LP});var fi=u((oW,Ng)=>{"use strict";var OP=sn(),PP=Dg(),UP=Object.prototype,qP=UP.hasOwnProperty;function DP(e){if(!OP(e))return PP(e);var t=[];for(var r in Object(e))qP.call(e,r)&&r!="constructor"&&t.push(r);return t}Ng.exports=DP});var gr=u((sW,Bg)=>{"use strict";var NP=Ho(),BP=fi(),MP=Xt();function GP(e){return MP(e)?NP(e):BP(e)}Bg.exports=GP});var mi=u((iW,Mg)=>{"use strict";var kP=nr(),FP=gr();function QP(e,t){return e&&kP(t,FP(t),e)}Mg.exports=QP});var kg=u((uW,Gg)=>{"use strict";var jP=nr(),WP=or();function $P(e,t){return e&&jP(t,WP(t),e)}Gg.exports=$P});var Qg=u((pW,Fg)=>{"use strict";function KP(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}Fg.exports=KP});var gi=u((cW,jg)=>{"use strict";function VP(){return[]}jg.exports=VP});var Mn=u((lW,$g)=>{"use strict";var YP=Qg(),HP=gi(),zP=Object.prototype,JP=zP.propertyIsEnumerable,Wg=Object.getOwnPropertySymbols,XP=Wg?function(e){return e==null?[]:(e=Object(e),YP(Wg(e),function(t){return JP.call(e,t)}))}:HP;$g.exports=XP});var Vg=u((dW,Kg)=>{"use strict";var ZP=nr(),eU=Mn();function tU(e,t){return ZP(e,eU(e),t)}Kg.exports=tU});var hi=u((fW,Yg)=>{"use strict";var rU=za(),aU=on(),nU=Mn(),oU=gi(),sU=Object.getOwnPropertySymbols,iU=sU?function(e){for(var t=[];e;)rU(t,nU(e)),e=aU(e);return t}:oU;Yg.exports=iU});var zg=u((mW,Hg)=>{"use strict";var uU=nr(),pU=hi();function cU(e,t){return uU(e,pU(e),t)}Hg.exports=cU});var yi=u((gW,Jg)=>{"use strict";var lU=za(),dU=re();function fU(e,t,r){var a=t(e);return dU(e)?a:lU(a,r(e))}Jg.exports=fU});var Ai=u((hW,Xg)=>{"use strict";var mU=yi(),gU=Mn(),hU=gr();function yU(e){return mU(e,hU,gU)}Xg.exports=yU});var eh=u((yW,Zg)=>{"use strict";var AU=yi(),bU=hi(),IU=or();function SU(e){return AU(e,IU,bU)}Zg.exports=SU});var rh=u((AW,th)=>{"use strict";var wU=gt(),TU=oe(),vU=wU(TU,"DataView");th.exports=vU});var nh=u((bW,ah)=>{"use strict";var EU=gt(),RU=oe(),_U=EU(RU,"Promise");ah.exports=_U});var yr=u((IW,lh)=>{"use strict";var bi=rh(),Ii=Za(),Si=nh(),wi=qo(),Ti=zs(),ch=mt(),hr=_o(),oh="[object Map]",xU="[object Object]",sh="[object Promise]",ih="[object Set]",uh="[object WeakMap]",ph="[object DataView]",CU=hr(bi),LU=hr(Ii),OU=hr(Si),PU=hr(wi),UU=hr(Ti),Nt=ch;(bi&&Nt(new bi(new ArrayBuffer(1)))!=ph||Ii&&Nt(new Ii)!=oh||Si&&Nt(Si.resolve())!=sh||wi&&Nt(new wi)!=ih||Ti&&Nt(new Ti)!=uh)&&(Nt=function(e){var t=ch(e),r=t==xU?e.constructor:void 0,a=r?hr(r):"";if(a)switch(a){case CU:return ph;case LU:return oh;case OU:return sh;case PU:return ih;case UU:return uh}return t});lh.exports=Nt});var fh=u((SW,dh)=>{"use strict";var qU=Object.prototype,DU=qU.hasOwnProperty;function NU(e){var t=e.length,r=new e.constructor(t);return t&&typeof e[0]=="string"&&DU.call(e,"index")&&(r.index=e.index,r.input=e.input),r}dh.exports=NU});var gh=u((wW,mh)=>{"use strict";var BU=nn();function MU(e,t){var r=t?BU(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.byteLength)}mh.exports=MU});var yh=u((TW,hh)=>{"use strict";var GU=/\w*$/;function kU(e){var t=new e.constructor(e.source,GU.exec(e));return t.lastIndex=e.lastIndex,t}hh.exports=kU});var wh=u((vW,Sh)=>{"use strict";var Ah=_t(),bh=Ah?Ah.prototype:void 0,Ih=bh?bh.valueOf:void 0;function FU(e){return Ih?Object(Ih.call(e)):{}}Sh.exports=FU});var vh=u((EW,Th)=>{"use strict";var QU=nn(),jU=gh(),WU=yh(),$U=wh(),KU=Qo(),VU="[object Boolean]",YU="[object Date]",HU="[object Map]",zU="[object Number]",JU="[object RegExp]",XU="[object Set]",ZU="[object String]",eq="[object Symbol]",tq="[object ArrayBuffer]",rq="[object DataView]",aq="[object Float32Array]",nq="[object Float64Array]",oq="[object Int8Array]",sq="[object Int16Array]",iq="[object Int32Array]",uq="[object Uint8Array]",pq="[object Uint8ClampedArray]",cq="[object Uint16Array]",lq="[object Uint32Array]";function dq(e,t,r){var a=e.constructor;switch(t){case tq:return QU(e);case VU:case YU:return new a(+e);case rq:return jU(e,r);case aq:case nq:case oq:case sq:case iq:case uq:case pq:case cq:case lq:return KU(e,r);case HU:return new a;case zU:case ZU:return new a(e);case JU:return WU(e);case XU:return new a;case eq:return $U(e)}}Th.exports=dq});var Rh=u((RW,Eh)=>{"use strict";var fq=yr(),mq=he(),gq="[object Map]";function hq(e){return mq(e)&&fq(e)==gq}Eh.exports=hq});var Lh=u((_W,Ch)=>{"use strict";var yq=Rh(),Aq=un(),_h=pn(),xh=_h&&_h.isMap,bq=xh?Aq(xh):yq;Ch.exports=bq});var Ph=u((xW,Oh)=>{"use strict";var Iq=yr(),Sq=he(),wq="[object Set]";function Tq(e){return Sq(e)&&Iq(e)==wq}Oh.exports=Tq});var Nh=u((CW,Dh)=>{"use strict";var vq=Ph(),Eq=un(),Uh=pn(),qh=Uh&&Uh.isSet,Rq=qh?Eq(qh):vq;Dh.exports=Rq});var vi=u((LW,kh)=>{"use strict";var _q=aa(),xq=Dn(),Cq=Yo(),Lq=mi(),Oq=kg(),Pq=ko(),Uq=tr(),qq=Vg(),Dq=zg(),Nq=Ai(),Bq=eh(),Mq=yr(),Gq=fh(),kq=vh(),Fq=Wo(),Qq=re(),jq=ua(),Wq=Lh(),$q=ve(),Kq=Nh(),Vq=gr(),Yq=or(),Hq=1,zq=2,Jq=4,Bh="[object Arguments]",Xq="[object Array]",Zq="[object Boolean]",eD="[object Date]",tD="[object Error]",Mh="[object Function]",rD="[object GeneratorFunction]",aD="[object Map]",nD="[object Number]",Gh="[object Object]",oD="[object RegExp]",sD="[object Set]",iD="[object String]",uD="[object Symbol]",pD="[object WeakMap]",cD="[object ArrayBuffer]",lD="[object DataView]",dD="[object Float32Array]",fD="[object Float64Array]",mD="[object Int8Array]",gD="[object Int16Array]",hD="[object Int32Array]",yD="[object Uint8Array]",AD="[object Uint8ClampedArray]",bD="[object Uint16Array]",ID="[object Uint32Array]",D={};D[Bh]=D[Xq]=D[cD]=D[lD]=D[Zq]=D[eD]=D[dD]=D[fD]=D[mD]=D[gD]=D[hD]=D[aD]=D[nD]=D[Gh]=D[oD]=D[sD]=D[iD]=D[uD]=D[yD]=D[AD]=D[bD]=D[ID]=!0;D[tD]=D[Mh]=D[pD]=!1;function Gn(e,t,r,a,n,o){var s,i=t&Hq,p=t&zq,m=t&Jq;if(r&&(s=n?r(e,a,n,o):r(e)),s!==void 0)return s;if(!$q(e))return e;var f=Qq(e);if(f){if(s=Gq(e),!i)return Uq(e,s)}else{var h=Mq(e),g=h==Mh||h==rD;if(jq(e))return Pq(e,i);if(h==Gh||h==Bh||g&&!n){if(s=p||g?{}:Fq(e),!i)return p?Dq(e,Oq(s,e)):qq(e,Lq(s,e))}else{if(!D[h])return n?e:{};s=kq(e,h,i)}}o||(o=new _q);var S=o.get(e);if(S)return S;o.set(e,s),Kq(e)?e.forEach(function(R){s.add(Gn(R,t,r,R,e,o))}):Wq(e)&&e.forEach(function(R,E){s.set(E,Gn(R,t,r,E,e,o))});var L=m?p?Bq:Nq:p?Yq:Vq,_=f?void 0:L(e);return xq(_||e,function(R,E){_&&(E=R,R=e[E]),Cq(s,E,Gn(R,t,r,E,e,o))}),s}kh.exports=Gn});var Qh=u((OW,Fh)=>{"use strict";var SD=vi(),wD=4;function TD(e){return SD(e,wD)}Fh.exports=TD});var Wh=u((PW,jh)=>{"use strict";var vD=Bn(),ED=8;function Ei(e,t,r){t=r?void 0:t;var a=vD(e,ED,void 0,void 0,void 0,void 0,void 0,t);return a.placeholder=Ei.placeholder,a}Ei.placeholder={};jh.exports=Ei});var Kh=u((UW,$h)=>{"use strict";var RD=mt(),_D=he(),xD=$o(),CD="[object DOMException]",LD="[object Error]";function OD(e){if(!_D(e))return!1;var t=RD(e);return t==LD||t==CD||typeof e.message=="string"&&typeof e.name=="string"&&!xD(e)}$h.exports=OD});var Yh=u((qW,Vh)=>{"use strict";var PD=yr(),UD=he(),qD="[object WeakMap]";function DD(e){return UD(e)&&PD(e)==qD}Vh.exports=DD});var zh=u((DW,Hh)=>{"use strict";function ND(e,t){for(var r=-1,a=e==null?0:e.length;++r<a;)if(t(e[r],r,e))return!0;return!1}Hh.exports=ND});var Ri=u((NW,Jh)=>{"use strict";var BD=Oo(),MD=zh(),GD=Uo(),kD=1,FD=2;function QD(e,t,r,a,n,o){var s=r&kD,i=e.length,p=t.length;if(i!=p&&!(s&&p>i))return!1;var m=o.get(e),f=o.get(t);if(m&&f)return m==t&&f==e;var h=-1,g=!0,S=r&FD?new BD:void 0;for(o.set(e,t),o.set(t,e);++h<i;){var L=e[h],_=t[h];if(a)var R=s?a(_,L,h,t,e,o):a(L,_,h,e,t,o);if(R!==void 0){if(R)continue;g=!1;break}if(S){if(!MD(t,function(E,U){if(!GD(S,U)&&(L===E||n(L,E,r,a,o)))return S.push(U)})){g=!1;break}}else if(!(L===_||n(L,_,r,a,o))){g=!1;break}}return o.delete(e),o.delete(t),g}Jh.exports=QD});var Zh=u((BW,Xh)=>{"use strict";function jD(e){var t=-1,r=Array(e.size);return e.forEach(function(a,n){r[++t]=[n,a]}),r}Xh.exports=jD});var ny=u((MW,ay)=>{"use strict";var ey=_t(),ty=Fo(),WD=Ht(),$D=Ri(),KD=Zh(),VD=rn(),YD=1,HD=2,zD="[object Boolean]",JD="[object Date]",XD="[object Error]",ZD="[object Map]",eN="[object Number]",tN="[object RegExp]",rN="[object Set]",aN="[object String]",nN="[object Symbol]",oN="[object ArrayBuffer]",sN="[object DataView]",ry=ey?ey.prototype:void 0,_i=ry?ry.valueOf:void 0;function iN(e,t,r,a,n,o,s){switch(r){case sN:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case oN:return!(e.byteLength!=t.byteLength||!o(new ty(e),new ty(t)));case zD:case JD:case eN:return WD(+e,+t);case XD:return e.name==t.name&&e.message==t.message;case tN:case aN:return e==t+"";case ZD:var i=KD;case rN:var p=a&YD;if(i||(i=VD),e.size!=t.size&&!p)return!1;var m=s.get(e);if(m)return m==t;a|=HD,s.set(e,t);var f=$D(i(e),i(t),a,n,o,s);return s.delete(e),f;case nN:if(_i)return _i.call(e)==_i.call(t)}return!1}ay.exports=iN});var iy=u((GW,sy)=>{"use strict";var oy=Ai(),uN=1,pN=Object.prototype,cN=pN.hasOwnProperty;function lN(e,t,r,a,n,o){var s=r&uN,i=oy(e),p=i.length,m=oy(t),f=m.length;if(p!=f&&!s)return!1;for(var h=p;h--;){var g=i[h];if(!(s?g in t:cN.call(t,g)))return!1}var S=o.get(e),L=o.get(t);if(S&&L)return S==t&&L==e;var _=!0;o.set(e,t),o.set(t,e);for(var R=s;++h<p;){g=i[h];var E=e[g],U=t[g];if(a)var Ce=s?a(U,E,g,t,e,o):a(E,U,g,e,t,o);if(!(Ce===void 0?E===U||n(E,U,r,a,o):Ce)){_=!1;break}R||(R=g=="constructor")}if(_&&!R){var Ie=e.constructor,pt=t.constructor;Ie!=pt&&"constructor"in e&&"constructor"in t&&!(typeof Ie=="function"&&Ie instanceof Ie&&typeof pt=="function"&&pt instanceof pt)&&(_=!1)}return o.delete(e),o.delete(t),_}sy.exports=lN});var gy=u((kW,my)=>{"use strict";var xi=aa(),dN=Ri(),fN=ny(),mN=iy(),uy=yr(),py=re(),cy=ua(),gN=cn(),hN=1,ly="[object Arguments]",dy="[object Array]",kn="[object Object]",yN=Object.prototype,fy=yN.hasOwnProperty;function AN(e,t,r,a,n,o){var s=py(e),i=py(t),p=s?dy:uy(e),m=i?dy:uy(t);p=p==ly?kn:p,m=m==ly?kn:m;var f=p==kn,h=m==kn,g=p==m;if(g&&cy(e)){if(!cy(t))return!1;s=!0,f=!1}if(g&&!f)return o||(o=new xi),s||gN(e)?dN(e,t,r,a,n,o):fN(e,t,p,r,a,n,o);if(!(r&hN)){var S=f&&fy.call(e,"__wrapped__"),L=h&&fy.call(t,"__wrapped__");if(S||L){var _=S?e.value():e,R=L?t.value():t;return o||(o=new xi),n(_,R,r,a,o)}}return g?(o||(o=new xi),mN(e,t,r,a,n,o)):!1}my.exports=AN});var Ci=u((FW,Ay)=>{"use strict";var bN=gy(),hy=he();function yy(e,t,r,a,n){return e===t?!0:e==null||t==null||!hy(e)&&!hy(t)?e!==e&&t!==t:bN(e,t,r,a,yy,n)}Ay.exports=yy});var Iy=u((QW,by)=>{"use strict";var IN=aa(),SN=Ci(),wN=1,TN=2;function vN(e,t,r,a){var n=r.length,o=n,s=!a;if(e==null)return!o;for(e=Object(e);n--;){var i=r[n];if(s&&i[2]?i[1]!==e[i[0]]:!(i[0]in e))return!1}for(;++n<o;){i=r[n];var p=i[0],m=e[p],f=i[1];if(s&&i[2]){if(m===void 0&&!(p in e))return!1}else{var h=new IN;if(a)var g=a(m,f,p,e,t,h);if(!(g===void 0?SN(f,m,wN|TN,a,h):g))return!1}}return!0}by.exports=vN});var Li=u((jW,Sy)=>{"use strict";var EN=ve();function RN(e){return e===e&&!EN(e)}Sy.exports=RN});var Ty=u((WW,wy)=>{"use strict";var _N=Li(),xN=gr();function CN(e){for(var t=xN(e),r=t.length;r--;){var a=t[r],n=e[a];t[r]=[a,n,_N(n)]}return t}wy.exports=CN});var Oi=u(($W,vy)=>{"use strict";function LN(e,t){return function(r){return r==null?!1:r[e]===t&&(t!==void 0||e in Object(r))}}vy.exports=LN});var Ry=u((KW,Ey)=>{"use strict";var ON=Iy(),PN=Ty(),UN=Oi();function qN(e){var t=PN(e);return t.length==1&&t[0][2]?UN(t[0][0],t[0][1]):function(r){return r===e||ON(r,e,t)}}Ey.exports=qN});var Fn=u((VW,_y)=>{"use strict";var DN=re(),NN=mr(),BN=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,MN=/^\w*$/;function GN(e,t){if(DN(e))return!1;var r=typeof e;return r=="number"||r=="symbol"||r=="boolean"||e==null||NN(e)?!0:MN.test(e)||!BN.test(e)||t!=null&&e in Object(t)}_y.exports=GN});var Ly=u((YW,Cy)=>{"use strict";var xy=en(),kN="Expected a function";function Pi(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(kN);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(Pi.Cache||xy),r}Pi.Cache=xy;Cy.exports=Pi});var Py=u((HW,Oy)=>{"use strict";var FN=Ly(),QN=500;function jN(e){var t=FN(e,function(a){return r.size===QN&&r.clear(),a}),r=t.cache;return t}Oy.exports=jN});var Ui=u((zW,Uy)=>{"use strict";var WN=Py(),$N=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,KN=/\\(\\)?/g,VN=WN(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace($N,function(r,a,n,o){t.push(n?o.replace(KN,"$1"):a||r)}),t});Uy.exports=VN});var qi=u((JW,qy)=>{"use strict";function YN(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}qy.exports=YN});var ky=u((XW,Gy)=>{"use strict";var Dy=_t(),HN=qi(),zN=re(),JN=mr(),XN=1/0,Ny=Dy?Dy.prototype:void 0,By=Ny?Ny.toString:void 0;function My(e){if(typeof e=="string")return e;if(zN(e))return HN(e,My)+"";if(JN(e))return By?By.call(e):"";var t=e+"";return t=="0"&&1/e==-XN?"-0":t}Gy.exports=My});var Di=u((ZW,Fy)=>{"use strict";var ZN=ky();function eB(e){return e==null?"":ZN(e)}Fy.exports=eB});var Ni=u((e$,Qy)=>{"use strict";var tB=re(),rB=Fn(),aB=Ui(),nB=Di();function oB(e,t){return tB(e)?e:rB(e,t)?[e]:aB(nB(e))}Qy.exports=oB});var Ar=u((t$,jy)=>{"use strict";var sB=mr(),iB=1/0;function uB(e){if(typeof e=="string"||sB(e))return e;var t=e+"";return t=="0"&&1/e==-iB?"-0":t}jy.exports=uB});var Bi=u((r$,Wy)=>{"use strict";var pB=Ni(),cB=Ar();function lB(e,t){t=pB(t,e);for(var r=0,a=t.length;e!=null&&r<a;)e=e[cB(t[r++])];return r&&r==a?e:void 0}Wy.exports=lB});var Ky=u((a$,$y)=>{"use strict";var dB=Bi();function fB(e,t,r){var a=e==null?void 0:dB(e,t);return a===void 0?r:a}$y.exports=fB});var Yy=u((n$,Vy)=>{"use strict";function mB(e,t){return e!=null&&t in Object(e)}Vy.exports=mB});var zy=u((o$,Hy)=>{"use strict";var gB=Ni(),hB=zr(),yB=re(),AB=la(),bB=an(),IB=Ar();function SB(e,t,r){t=gB(t,e);for(var a=-1,n=t.length,o=!1;++a<n;){var s=IB(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&&bB(n)&&AB(s,n)&&(yB(e)||hB(e)))}Hy.exports=SB});var Xy=u((s$,Jy)=>{"use strict";var wB=Yy(),TB=zy();function vB(e,t){return e!=null&&TB(e,t,wB)}Jy.exports=vB});var eA=u((i$,Zy)=>{"use strict";var EB=Ci(),RB=Ky(),_B=Xy(),xB=Fn(),CB=Li(),LB=Oi(),OB=Ar(),PB=1,UB=2;function qB(e,t){return xB(e)&&CB(t)?LB(OB(e),t):function(r){var a=RB(r,e);return a===void 0&&a===t?_B(r,e):EB(t,a,PB|UB)}}Zy.exports=qB});var rA=u((u$,tA)=>{"use strict";function DB(e){return function(t){return t?.[e]}}tA.exports=DB});var nA=u((p$,aA)=>{"use strict";var NB=Bi();function BB(e){return function(t){return NB(t,e)}}aA.exports=BB});var sA=u((c$,oA)=>{"use strict";var MB=rA(),GB=nA(),kB=Fn(),FB=Ar();function QB(e){return kB(e)?MB(FB(e)):GB(e)}oA.exports=QB});var Mi=u((l$,iA)=>{"use strict";var jB=Ry(),WB=eA(),$B=Jr(),KB=re(),VB=sA();function YB(e){return typeof e=="function"?e:e==null?$B:typeof e=="object"?KB(e)?WB(e[0],e[1]):jB(e):VB(e)}iA.exports=YB});var pA=u((d$,uA)=>{"use strict";var HB=vi(),zB=Mi(),JB=1;function XB(e){return zB(typeof e=="function"?e:HB(e,JB))}uA.exports=XB});var lA=u((f$,cA)=>{"use strict";var ZB=vo();function eM(e){var t=e==null?0:e.length;return t?ZB(e,1):[]}cA.exports=eM});var fA=u((m$,dA)=>{"use strict";var tM=lA(),rM=Eo(),aM=Xa();function nM(e){return aM(rM(e,void 0,tM),e+"")}dA.exports=nM});var gA=u((g$,mA)=>{"use strict";var oM=Bn(),sM=fA(),iM=256,uM=sM(function(e,t){return oM(e,iM,void 0,void 0,void 0,t)});mA.exports=uM});var yA=u((h$,hA)=>{"use strict";var pM=qi(),cM=tr(),lM=re(),dM=mr(),fM=Ui(),mM=Ar(),gM=Di();function hM(e){return lM(e)?pM(e,mM):dM(e)?[e]:cM(fM(gM(e)))}hA.exports=hM});var bA=u((y$,AA)=>{"use strict";AA.exports={ary:Ug(),assign:mi(),clone:Qh(),curry:Wh(),forEach:Dn(),isArray:re(),isError:Kh(),isFunction:Xr(),isWeakMap:Yh(),iteratee:pA(),keys:fi(),rearg:gA(),toInteger:pi(),toPath:yA()}});var SA=u((A$,IA)=>{"use strict";var yM=um(),AM=bA();function bM(e,t,r){return yM(AM,e,t,r)}IA.exports=bM});var Gi=u((b$,TA)=>{"use strict";var IM=SA(),wA=IM("merge",zo());wA.placeholder=Ks();TA.exports=wA});var vb=u((lK,Tb)=>{"use strict";function kM(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}Tb.exports=kM});var Rb=u((dK,Eb)=>{"use strict";var FM=Go(),QM=gr();function jM(e,t){return e&&FM(e,t,QM)}Eb.exports=jM});var xb=u((fK,_b)=>{"use strict";var WM=Xt();function $M(e,t){return function(r,a){if(r==null)return r;if(!WM(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}}_b.exports=$M});var Lb=u((mK,Cb)=>{"use strict";var KM=Rb(),VM=xb(),YM=VM(KM);Cb.exports=YM});var Pb=u((gK,Ob)=>{"use strict";var HM=Lb();function zM(e,t,r,a){return HM(e,function(n,o,s){t(a,n,r(n),s)}),a}Ob.exports=zM});var qb=u((hK,Ub)=>{"use strict";var JM=vb(),XM=Pb(),ZM=Mi(),eG=re();function tG(e,t){return function(r,a){var n=eG(r)?JM:XM,o=t?t():{};return n(r,e,ZM(a,2),o)}}Ub.exports=tG});var Nb=u((yK,Db)=>{"use strict";var rG=na(),aG=qb(),nG=Object.prototype,oG=nG.hasOwnProperty,sG=aG(function(e,t,r){oG.call(e,r)?e[r].push(t):rG(e,r,[t])});Db.exports=sG});var LG={};w(LG,{Method:()=>ao,ai:()=>_u,api:()=>tu,auditLogs:()=>yt,automations:()=>vn,backups:()=>Ee,branding:()=>hn,constants:()=>Wr,environmentVariables:()=>Ye,features:()=>Ue,groups:()=>j,init:()=>rm,licensing:()=>je,logger:()=>Bt,mappers:()=>V,middleware:()=>Ki,plugins:()=>En,publicApi:()=>xn,quotas:()=>Ke,scimGroups:()=>br,scimUsers:()=>fe,sdk:()=>Fi,users:()=>at,utils:()=>Vt});module.exports=xI(LG);var ao=(o=>(o.POST="POST",o.GET="GET",o.PATCH="PATCH",o.DELETE="DELETE",o.PUT="PUT",o))(ao||{});var Fi={};w(Fi,{ai:()=>fs,auditLogs:()=>yt,automations:()=>vn,backups:()=>Ee,branding:()=>hn,environmentVariables:()=>Ye,features:()=>Ue,groups:()=>j,init:()=>rm,licensing:()=>je,logger:()=>Bt,plugins:()=>En,publicApi:()=>xn,quotas:()=>Ke,scimGroups:()=>br,scimUsers:()=>fe,users:()=>at,utils:()=>Vt});var hn={};w(hn,{getBrandingConfig:()=>Ax});var Ue={};w(Ue,{checkBackups:()=>ye,checkFeature:()=>mn,checkFeatures:()=>is,checkSCIM:()=>ls,isAppBuildersEnabled:()=>Ot,isAuditLogsEnabled:()=>gn,isBackupsEnabled:()=>us,isBrandingEnabled:()=>ps,isEnforceableSSO:()=>hf,isExpandedPublicApiEnabled:()=>tt,isPWAEnabled:()=>fx,isSSOEnforced:()=>mx,isSyncAutomationsEnabled:()=>lx,isTriggerAutomationRunEnabled:()=>dx,isUserGroupsEnabled:()=>cs,isViewPermissionEnabled:()=>gx,isViewReadonlyColumnsEnabled:()=>hx});var se=require("@budibase/types"),et=require("@budibase/backend-core");var je={};w(je,{cache:()=>Oe,client:()=>ft,features:()=>Ya,getFreeLicense:()=>ns,getLicense:()=>rs,getLicenseFromKey:()=>as,keys:()=>ss,offline:()=>ln,quotas:()=>Ha});var Oe={};w(Oe,{getCachedLicense:()=>mf,invalidate:()=>gf,refresh:()=>xt});var Da=require("@budibase/backend-core"),vr,CI=async()=>{vr=await Da.RedisClient.init(Da.redis.utils.Databases.LICENSES)},LI=async()=>{vr&&await vr.finish()};process.on("exit",async()=>{await LI()});var no=async()=>(vr||await CI(),vr);var ft={};w(ft,{activateLicenseKey:()=>bo,getLicense:()=>$t,getLicenseFromKey:()=>Ao,triggerQuota:()=>gS});var Nu=P(require("node-fetch"));var Bu=require("@budibase/backend-core"),oo=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";Bu.logging.correlation.setHeader(a.headers);let o={method:t,body:n?JSON.stringify(a.body):a.body,headers:a.headers,credentials:"include"};return(0,Nu.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}},so=oo;var $a=require("@budibase/types"),O=require("@budibase/backend-core");var ke={};w(ke,{bustCache:()=>po,getCurrentUsageValues:()=>$u,getQuotaUsage:()=>Tt,setAllUsage:()=>lo,setAppUsageValue:()=>co,setUsage:()=>Qu,setUsagePerApp:()=>ju,utils:()=>_r});var ne=require("@budibase/types"),ce=require("@budibase/backend-core");var _r={};w(_r,{generateBaseQuotaUsage:()=>Na,generateNewMonthlyQuotas:()=>Rr,generateNewQuotaUsage:()=>uo,getBreakdownName:()=>Ma,getCurrentMonthString:()=>ct,getQuotaDocId:()=>Er,setCurrentMonth:()=>Ba,setQuotaReset:()=>io});var Y=require("@budibase/types"),wt=require("@budibase/backend-core"),Er=()=>wt.context.isSelfHostUsingCloud()?`quota_usage_${wt.context.getTenantId()}`:wt.db.StaticDatabases.GLOBAL.docs.usageQuota,Mu=()=>{let e=new Date;return new Date(e.getFullYear(),e.getMonth()+1,1).toISOString()},io=e=>{e.quotaReset=Mu()},ct=()=>{let e=new Date,t=e.getMonth()+1,r=e.getFullYear();return`${t}-${r}`},Na=()=>({usageQuota:{[Y.StaticQuotaName.APPS]:0,[Y.StaticQuotaName.ROWS]:0,[Y.StaticQuotaName.PLUGINS]:0,[Y.StaticQuotaName.USERS]:0,[Y.StaticQuotaName.CREATORS]:0,[Y.StaticQuotaName.USER_GROUPS]:0,[Y.StaticQuotaName.AI_CUSTOM_CONFIGS]:0,triggers:{}},monthly:{[ct()]:Rr()}}),uo=()=>{let e={_id:Er(),quotaReset:Mu(),...Na(),apps:{}};return Ba(e),e},Rr=()=>({[Y.MonthlyQuotaName.QUERIES]:0,[Y.MonthlyQuotaName.AUTOMATIONS]:0,[Y.MonthlyQuotaName.BUDIBASE_AI_CREDITS]:0,[Y.MonthlyQuotaName.ACTIONS]:0,triggers:{}}),Ba=e=>{let t=ct();e.monthly||(e.monthly={}),e.monthly[t]||(e.monthly[t]=Rr()),e.monthly.current=e.monthly[t]},Ma=(e,t)=>{if(!(!t||!e))switch(e){case Y.MonthlyQuotaName.AUTOMATIONS:return Y.BreakdownQuotaName.AUTOMATIONS;case Y.MonthlyQuotaName.QUERIES:return wt.db.isTableId(t)?Y.BreakdownQuotaName.ROW_QUERIES:wt.db.isDatasourceId(t)?Y.BreakdownQuotaName.DATASOURCE_QUERIES:void 0}};var Gu=ce.Duration.fromSeconds(60).toMs(),{Writethrough:ku}=ce.cache.writethrough;function PI(e){return delete e.usageLimits,delete e.usageQuota.automationRuns,delete e.usageQuota.emails,delete e.usageQuota.storage,delete e.usageQuota.views,delete e.usageQuota.publishedApps,delete e.usageQuota.developers,e}var Ga=()=>ce.tenancy.isSelfHostUsingCloud()?new ku(ce.tenancy.getSelfHostCloudDB(),Gu):new ku(ce.tenancy.getGlobalDB(),Gu);async function po(e=0){let r=Ga(),a=Er(),n=await r.tryGet(a);n&&n._rev&&await r.remove(a,n._rev).catch(async o=>{if(e<1)return await po(e+1);throw o})}var Tt=async()=>{let e=Ga(),t=await e.tryGet(Er());if(!t){t=uo();let{rev:r}=await e.put(t);t._rev=r}return Ba(t),io(t),PI(t)},Qu=async(e,t,r)=>lo({name:t,type:r,values:{total:e}}),ju=async(e,t,r)=>{let a=Ga(),n=await Tt(),o=Object.values(e).reduce((i,p)=>i+p,0);for(let[i,p]of Object.entries(e))n=Wu(n,t,r,{total:o,app:p},{appId:i});let s=await a.put(n);return n._rev=s.rev,n},UI=(e,t,r,a)=>{let n=Ma(t,r);if(!n||!a?.breakdown)return e;e.breakdown||(e.breakdown={}),e.breakdown[n]||(e.breakdown[n]={parent:t,values:{}});let o=e.breakdown[n];return o.values[r]=a.breakdown,e},co=(e,t,r,a={},n)=>{let o;try{o=ce.db.getProdAppID(a?.appId||ce.context.getAppId())}catch{}if(!o||!n.app||!ne.APP_QUOTA_NAMES.includes(t))return e;e.apps?.[o]||(e.apps={...e.apps,[o]:Na()});let s=e.apps[o];switch(r){case ne.QuotaUsageType.STATIC:s.usageQuota[t]=n.app;break;case ne.QuotaUsageType.MONTHLY:{let i=ct(),p=t,m=s.monthly[i];m||(s.monthly[i]=Rr(),m=s.monthly[i]),m[p]=n.app,ne.BREAKDOWN_QUOTA_NAMES.includes(p)&&a?.id&&(m=UI(m,p,a.id,n));break}}return e},Fu=(e,t,r,a)=>{if(!ne.APP_QUOTA_NAMES.includes(r))return{};let n;try{n=ce.db.getProdAppID(ce.context.getAppId())}catch{}if(!n||!e.apps||!e.apps[n])return{app:0};let o=e.apps[n];switch(t){case ne.QuotaUsageType.STATIC:if(o.usageQuota?.[r])return{app:o.usageQuota[r]};break;case ne.QuotaUsageType.MONTHLY:{let s=ct(),i=r;if(!o.monthly?.[s]?.[i])break;let p=o.monthly[s],m=p[i],f,h=Ma(i,a);return h&&a&&p.breakdown?.[h]&&(f=p.breakdown[h]?.values[a]),{app:m,breakdown:f||0}}}return{app:0}},qI=(e,t,r)=>{t.usageQuota.triggers||(t.usageQuota.triggers={}),r&&(t.usageQuota.triggers[e]=r)},DI=(e,t,r,a)=>{r.monthly[t].triggers||(r.monthly[t].triggers={}),a&&(r.monthly[t].triggers[e]=a)},Wu=(e,t,r,a,n={})=>{if(r===ne.QuotaUsageType.STATIC)t=t,e.usageQuota[t]=a.total,qI(t,e,a.triggers);else if(r===ne.QuotaUsageType.MONTHLY){t=t;let o=ct();e.monthly[o][t]=a.total,DI(t,o,e,a.triggers)}else throw new Error(`Invalid usage type: ${r}`);return co(e,t,r,n,a)},lo=async e=>{let t=Array.isArray(e)?e:[e],r=Ga(),a=await Tt();for(let o of t)a=Wu(a,o.name,o.type,o.values,o.opts);let n=await r.put(a,0);return a._rev=n.rev,a},$u=async(e,t,r)=>{let a=await Tt(),n=0,o={};switch(e){case ne.QuotaUsageType.STATIC:if(a.usageQuota[t]){let s=t;n=a.usageQuota[s],o=Fu(a,e,t,r)}break;case ne.QuotaUsageType.MONTHLY:{let s=ct(),i=t;a.monthly[s][i]&&(n=a.monthly[s][i],o=Fu(a,e,t,r));break}default:throw new Error(`Invalid usage type: ${e}`)}return ne.APP_QUOTA_NAMES.includes(t)&&!(o.app||o.breakdown)&&(o.app=o.app||0,o.breakdown=o.breakdown||0),{total:n,app:o.app,breakdown:o.breakdown}};var we={};w(we,{destroy:()=>MI,get:()=>fo,save:()=>BI});var lt=require("@budibase/backend-core"),NI=()=>({_id:lt.StaticDatabases.GLOBAL.docs.licenseInfo}),BI=async e=>{let t=await fo();t={...t,...e};let a=await lt.tenancy.getGlobalDB().put(t);return t._rev=a.rev,t},fo=async()=>{let e=lt.tenancy.getGlobalDB();try{return await e.get(lt.StaticDatabases.GLOBAL.docs.licenseInfo)}catch(t){if(t.status===404)return NI();throw t}},MI=async()=>{let e=lt.tenancy.getGlobalDB(),t=await fo();t&&t._rev&&await e.remove(lt.StaticDatabases.GLOBAL.docs.licenseInfo,t._rev)};var M={};w(M,{bulkSave:()=>zI,destroy:()=>JI,fetch:()=>KI,generateUserGroupID:()=>WI,get:()=>VI,getBulk:()=>YI,getByName:()=>mo,getGroupUsers:()=>Fa,getGroupUsersParams:()=>zu,getUserGroupsParams:()=>Hu,save:()=>HI});var N=require("@budibase/backend-core");var Le=require("@budibase/types"),Qt=require("@budibase/backend-core");async function Ku(){let e=Qt.sql.designDoc.base("type");e.sql.tables={[Le.AUDIT_LOG_TYPE]:{fields:{appId:Le.SQLiteType.TEXT,event:Le.SQLiteType.TEXT,userId:Le.SQLiteType.TEXT,timestamp:Le.SQLiteType.TEXT,metadata:Le.SQLiteType.TEXT,name:Le.SQLiteType.TEXT,type:Le.SQLiteType.TEXT,fallback:Le.SQLiteType.TEXT}}};let t=Qt.context.getAuditLogsDB(),r;try{r=await t.get(Qt.SQLITE_DESIGN_DOC_ID),r={...r,...e}}catch(a){if(a.status===404)r=e;else throw a}await t.put(r)}var ka=require("@budibase/backend-core"),{ViewName:GI,SEPARATOR:kI,DocumentType:FI,createView:QI}=ka.db,jI=FI.USER+kI;async function Vu(){let e=ka.tenancy.getGlobalDB(),t=`function(doc) {
4
+ if (doc._id.startsWith("${jI}") && Array.isArray(doc.userGroups)) {
5
5
  for (let groupId of doc.userGroups) {
6
6
  emit("g_" + groupId, { email: doc.email, userId: doc._id })
7
7
  emit("e_" + groupId + doc.email, { email: doc.email, userId: doc._id })
8
8
  }
9
9
  }
10
- }`;await qI(e,t,PI.USER_BY_GROUP)}var Fu=`${N.DocumentType.GROUP}${N.SEPARATOR}`;function Qu(e,t={}){e||(e="");let r=e?.startsWith(N.DocumentType.GROUP)?"":Fu;return{...t,startkey:`${r}${e}`,endkey:`${r}${e}${N.UNICODE_MAX}`}}function ju(e,t={}){e||(e="");let{emailSearch:r,bookmark:a,...n}=t;return r?{...n,startkey:`e_${e}${a||r}`,endkey:`e_${e}${r}${N.UNICODE_MAX}`}:{...t,startkey:`g_${e}`,endkey:`g_${e}${N.UNICODE_MAX}`,startkey_docid:a}}function DI(){return`${Fu}${N.utils.newid()}`}async function Ma(e,t){let r=N.tenancy.getGlobalDB();return(await N.db.queryView(N.db.ViewName.USER_BY_GROUP,ju(e,t),r,ku,{arrayResponse:!0})).map(n=>({_id:n.userId,email:n.email}))||[]}async function xr(e){return e.users=await Ma(e._id),e}async function NI(e){let r=(await xr(e)).users?.map(o=>o._id),a=await N.users.bulkGetGlobalUsersById(r),n=[];for(let o of a){if(!o.userGroups)continue;let s=o.userGroups.length;o.userGroups=o.userGroups.filter(i=>i!==e._id),o.userGroups.length!==s&&n.push(o)}n.length&&await N.users.bulkUpdateGlobalUsers(n)}async function Wu(){return(await N.tenancy.getGlobalDB().allDocs(Qu(null,{include_docs:!0}))).rows.map(t=>t.doc)}async function BI(){let e=await Wu(),t=[];for(let r of e)t.push(xr(r));return await Promise.all(t)}async function MI(e){let r=await N.tenancy.getGlobalDB().get(e);return await xr(r)}async function GI(e,t={enriched:!0}){let a=await N.tenancy.getGlobalDB().getMultiple(e,{allowMissing:!0});if(t?.enriched){let n=[];for(let o of a)n.push(xr(o));return await Promise.all(n)}else return a}async function kI(e){return await N.tenancy.getGlobalDB().put(e)}async function FI(e){return await N.tenancy.getGlobalDB().bulkDocs(e)}async function QI(e,t){let r=N.tenancy.getGlobalDB(),a=await r.get(e),n=await r.remove(e,t);return await NI(a),n}async function so(e){let t=e.toLowerCase(),a=(await Wu()).find(n=>n.name.toLowerCase()===t);if(a)return await xr(a)}var we={};w(we,{deleteAppBackupMetadata:()=>tS,fetchAppBackups:()=>XI,generateAppBackupID:()=>np,getAppBackupMetadata:()=>rS,oldestBackupDate:()=>rp,storeAppBackupMetadata:()=>ZI,updateAppBackupMetadata:()=>eS});var F=require("@budibase/backend-core"),tp=require("@budibase/types");function _r(e,t){let r=e.rows.map(n=>n.doc?n.doc:n);if(!t?.paginate)return{data:r,hasNextPage:!1};let a=r.length>t?.pageSize;return{data:r.slice(0,t?.pageSize),hasNextPage:a,nextPage:a?e.rows[t?.pageSize]?.key:void 0}}var Qt=require("@budibase/backend-core"),{ViewName:Ku,AutomationViewMode:io,SEPARATOR:Ge,DocumentType:Vu,createView:Yu}=Qt.db,jI=Vu.AUTOMATION_LOG+Ge,$u=Vu.APP_BACKUP+Ge;async function Hu(){let e=Qt.context.getProdAppDB(),t=`function(doc) {
11
- if (doc._id.startsWith("${jI}")) {
12
- let autoId = doc.automationId + "${Ge}"
13
- let status = doc.status + "${Ge}"
14
- let autoKey = "${io.AUTOMATION}${Ge}" + autoId + doc.createdAt
15
- let statusKey = "${io.STATUS}${Ge}" + status + doc.createdAt
16
- let allKey = "${io.ALL}${Ge}" + status + autoId + doc.createdAt
10
+ }`;await QI(e,t,GI.USER_BY_GROUP)}var Yu=`${N.DocumentType.GROUP}${N.SEPARATOR}`;function Hu(e,t={}){e||(e="");let r=e?.startsWith(N.DocumentType.GROUP)?"":Yu;return{...t,startkey:`${r}${e}`,endkey:`${r}${e}${N.UNICODE_MAX}`}}function zu(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 WI(){return`${Yu}${N.utils.newid()}`}async function Fa(e,t){let r=N.tenancy.getGlobalDB();return(await N.db.queryView(N.db.ViewName.USER_BY_GROUP,zu(e,t),r,Vu,{arrayResponse:!0})).map(n=>({_id:n.userId,email:n.email}))||[]}async function xr(e){return e.users=await Fa(e._id),e}async function $I(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(Hu(null,{include_docs:!0}))).rows.map(t=>t.doc)}async function KI(){let e=await Ju(),t=[];for(let r of e)t.push(xr(r));return await Promise.all(t)}async function VI(e){let r=await N.tenancy.getGlobalDB().get(e);return await xr(r)}async function YI(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 HI(e){return await N.tenancy.getGlobalDB().put(e)}async function zI(e){return await N.tenancy.getGlobalDB().bulkDocs(e)}async function JI(e,t){let r=N.tenancy.getGlobalDB(),a=await r.get(e),n=await r.remove(e,t);return await $I(a),n}async function mo(e){let t=e.toLowerCase(),a=(await Ju()).find(n=>n.name.toLowerCase()===t);if(a)return await xr(a)}var Te={};w(Te,{deleteAppBackupMetadata:()=>cS,fetchAppBackups:()=>iS,generateAppBackupID:()=>lp,getAppBackupMetadata:()=>lS,oldestBackupDate:()=>pp,storeAppBackupMetadata:()=>uS,updateAppBackupMetadata:()=>pS});var Q=require("@budibase/backend-core"),up=require("@budibase/types");function Cr(e,t){let r=e.rows.map(n=>n.doc?n.doc:n);if(!t?.paginate)return{data:r,hasNextPage:!1};let a=r.length>t?.pageSize;return{data:r.slice(0,t?.pageSize),hasNextPage:a,nextPage:a?e.rows[t?.pageSize]?.key:void 0}}var jt=require("@budibase/backend-core"),{ViewName:Zu,AutomationViewMode:go,SEPARATOR:Fe,DocumentType:ep,createView:tp}=jt.db,XI=ep.AUTOMATION_LOG+Fe,Xu=ep.APP_BACKUP+Fe;async function rp(){let e=jt.context.getProdAppDB(),t=`function(doc) {
11
+ if (doc._id.startsWith("${XI}")) {
12
+ let autoId = doc.automationId + "${Fe}"
13
+ let status = doc.status + "${Fe}"
14
+ let autoKey = "${go.AUTOMATION}${Fe}" + autoId + doc.createdAt
15
+ let statusKey = "${go.STATUS}${Fe}" + status + doc.createdAt
16
+ let allKey = "${go.ALL}${Fe}" + status + autoId + doc.createdAt
17
17
  emit(statusKey)
18
18
  emit(autoKey)
19
19
  emit(allKey)
20
20
  }
21
- }`;await Yu(e,t,Ku.AUTOMATION_LOGS)}async function zu(){let e=Qt.tenancy.getGlobalDB(),t=`function(doc) {
22
- if (doc._id.startsWith("${$u}") && doc.type && doc.trigger) {
23
- let full = doc.appId + "${Ge}"
24
- full += doc.trigger.toLowerCase() + "${Ge}"
25
- full += doc.type.toLowerCase() + "${Ge}"
26
- emit("${$u}" + full + doc.timestamp)
21
+ }`;await tp(e,t,Zu.AUTOMATION_LOGS)}async function ap(){let e=jt.tenancy.getGlobalDB(),t=`function(doc) {
22
+ if (doc._id.startsWith("${Xu}") && doc.type && doc.trigger) {
23
+ let full = doc.appId + "${Fe}"
24
+ full += doc.trigger.toLowerCase() + "${Fe}"
25
+ full += doc.type.toLowerCase() + "${Fe}"
26
+ emit("${Xu}" + full + doc.timestamp)
27
27
  }
28
- }`;await Yu(e,t,Ku.APP_BACKUP_BY_TRIGGER)}var ep=require("@budibase/types");var Qr={};w(Qr,{GENERIC_PAGE_SIZE:()=>ke,auditLogs:()=>jt,licenses:()=>me,quotas:()=>Je,versions:()=>Fr});var me={};w(me,{CLOUD_FREE_LICENSE:()=>$I,SELF_FREE_LICENSE:()=>uo,UNLIMITED:()=>W,UNLIMITED_LICENSE:()=>KI});var ct=require("@budibase/types");var Je={};w(Je,{UNLIMITED:()=>WI,appBackupRetentionDays:()=>Gr,apps:()=>Pr,automationLogRetentionDays:()=>Mr,automations:()=>Nr,budibaseAICredits:()=>Br,creators:()=>Cr,customAIConfigurations:()=>kr,plugins:()=>Ur,queries:()=>Dr,rows:()=>Or,userGroups:()=>qr,users:()=>Lr});var ae=require("@budibase/types"),WI=-1,Or=e=>({[ae.StaticQuotaName.ROWS]:{name:"Rows",value:e,triggers:[90,100]}}),Pr=e=>({[ae.StaticQuotaName.APPS]:{name:"Apps",value:e,triggers:[100]}}),Lr=e=>({[ae.StaticQuotaName.USERS]:{name:"Users",value:e,triggers:[80,100]}}),Cr=e=>({[ae.StaticQuotaName.CREATORS]:{name:"Creators",value:e,triggers:[]}}),qr=e=>({[ae.StaticQuotaName.USER_GROUPS]:{name:"User Groups",value:e,triggers:[80,100]}}),Ur=e=>({[ae.StaticQuotaName.PLUGINS]:{name:"Plugins",value:e,triggers:[90,100]}}),Dr=e=>({[ae.MonthlyQuotaName.QUERIES]:{name:"Queries",value:e,triggers:[]}}),Nr=e=>({[ae.MonthlyQuotaName.AUTOMATIONS]:{name:"Automations",value:e,triggers:[80,90,100]}}),Br=e=>({[ae.MonthlyQuotaName.BUDIBASE_AI_CREDITS]:{name:"Budibase AI Credits",value:e,triggers:[80,90,100]}}),Mr=e=>({[ae.ConstantQuotaName.AUTOMATION_LOG_RETENTION_DAYS]:{name:"Automation Logs",value:e,triggers:[]}}),Gr=e=>({[ae.ConstantQuotaName.APP_BACKUPS_RETENTION_DAYS]:{name:"App Backups",value:e,triggers:[]}}),kr=e=>({[ae.StaticQuotaName.AI_CUSTOM_CONFIGS]:{name:"Custom AI Configuration",value:e,triggers:[]}});var W=-1,$I={features:[],quotas:{usage:{monthly:{...Dr(W),...Nr(200),...Br(5e4)},static:{...Pr(W),...Or(2e3),...Lr(5),...Cr(5),...qr(0),...Ur(10),...kr(0)}},constant:{...Mr(1),...Gr(0)}},plan:{type:ct.PlanType.FREE,usesInvoicing:!1,model:ct.PlanModel.PER_USER}},uo={features:[],quotas:{usage:{monthly:{...Dr(W),...Nr(W),...Br(5e4)},static:{...Or(W),...Pr(W),...Lr(20),...Cr(W),...qr(0),...Ur(10),...kr(0)}},constant:{...Mr(1),...Gr(0)}},plan:{type:ct.PlanType.FREE,usesInvoicing:!1,model:ct.PlanModel.PER_USER}},KI={features:[],quotas:{usage:{monthly:{...Dr(W),...Nr(W),...Br(W)},static:{...Pr(W),...Or(W),...Lr(W),...Cr(W),...qr(W),...Ur(W),...kr(W)}},constant:{...Mr(W),...Gr(W)}},plan:{type:ct.PlanType.FREE,usesInvoicing:!1,model:ct.PlanModel.PER_USER}};var Fr={};w(Fr,{getLicenseVersion:()=>VI,getProVersion:()=>Xu});var Tt=require("@budibase/backend-core"),Ga=C(require("fs")),Ju=C(require("path")),VI=()=>{if(Tt.env.isDev()){let e="dev-version.txt",t=Ju.default.join(Tt.objectStore.budibaseTempDir(),e);if(Ga.default.existsSync(t))return Ga.default.readFileSync(t,"utf8");{let r=Tt.utils.newid();return Ga.default.writeFileSync(t,r),r}}else return Xu()},Xu=()=>{let e=Tt.env.VERSION;if(!e)throw new Error("No budibase pro version was specified");return e};var jt={};w(jt,{searchTable:()=>YI});var vt=require("@budibase/types"),Zu=require("@budibase/backend-core");function YI(){return{type:"table",sourceType:vt.TableSourceType.INTERNAL,name:vt.AUDIT_LOG_TYPE,sourceId:Zu.SQS_DATASOURCE_INTERNAL,primary:["_id"],schema:{metadata:{name:"metadata",type:vt.FieldType.JSON},fallback:{name:"fallback",type:vt.FieldType.JSON}}}}var ke=9;var HI=new Date(864e13).toISOString(),zI=1e3*60*60*24;async function ka(e){let r=(await Oe.getCachedLicense()).quotas?.[ep.QuotaType.CONSTANT]?.[e]?.value||0;return r===me.UNLIMITED?new Date(HI).toISOString():new Date(new Date().getTime()-zI*r).toISOString()}async function rp(){return ka(tp.ConstantQuotaName.APP_BACKUPS_RETENTION_DAYS)}var po=`${F.db.DocumentType.APP_BACKUP}${F.db.SEPARATOR}`;async function JI(e,t,r={}){let a=await rp(),n=F.db.getProdAppID(e),o=n,s=n;if(t.trigger&&t.type){let i=`${F.db.SEPARATOR}${t.trigger}`;i+=`${F.db.SEPARATOR}${t.type}`,o+=i,s+=i}return(!t.startDate||t.startDate<a)&&(t.startDate=a),t.startDate&&(s+=`${F.db.SEPARATOR}${t.startDate}`),t.endDate&&(o+=`${F.db.SEPARATOR}${t.endDate}`),{...r,descending:!0,startkey:`${po}${o}${F.db.UNICODE_MAX}`,endkey:`${po}${s}`}}async function ap(e,t){try{let r=F.db.getQueryIndex(F.db.ViewName.APP_BACKUP_BY_TRIGGER);return await e.query(r,t)}catch(r){if(r!=null&&r.error==="not_found")return await zu(),ap(e,t);throw r}}function np(e,t){return`${po}${e}${F.db.SEPARATOR}${t}`}async function XI(e,t={}){let r=F.tenancy.getGlobalDB(),a,n=t.limit||9,o=await JI(e,t,{include_docs:!0,limit:n+1});t.page&&(o.startkey=t.page),!t.trigger||!t.type?a=await r.allDocs(o):a=await ap(r,o);let s=_r(a,{paginate:t.paginate,pageSize:n}),i=[...new Set(s.data.filter(f=>f.createdBy).map(f=>f.createdBy))],p=await F.users.bulkGetGlobalUsersById(i,{cleanup:!0});for(let f of p)for(let m of s.data)f?._id===m.createdBy&&(m.createdBy=f);return s}async function ZI(e,t={}){let r=F.tenancy.getGlobalDB(),a=F.db.getProdAppID(e.appId),n=np(a,e.timestamp),o={...e,_id:n,appId:a,name:e.name};return o._id=t.docId||o._id,o._rev=t.docRev||o._rev,t.filename&&(o.filename=t.filename),e.createdBy&&(o.createdBy=F.db.getGlobalIDFromUserMetadataID(e.createdBy)),await r.put(o)}async function eS(e,t){let r=F.tenancy.getGlobalDB(),a=await r.get(e);return a.name=t,await r.put(a)}async function tS(e){let t=F.tenancy.getGlobalDB(),r=await t.get(e);await t.remove(r._id,r._rev)}async function rS(e){return await F.tenancy.getGlobalDB().get(e)}var Et={};w(Et,{get:()=>nS,getCacheEnvVarID:()=>ip,getEnvVarID:()=>Fa,update:()=>oS});var Pe=require("@budibase/backend-core"),sp=C(require("lru-cache")),aS=1e3,op=new sp.default({max:aS});function Fa(){return Pe.StaticDatabases.GLOBAL.docs.environmentVariables}function ip(e){return`${Pe.tenancy.getTenantId()}/${Fa()}/${e||""}`}async function nS(){let e=Fa(),t=Pe.tenancy.getGlobalDB(),r,a=!1;try{r=await t.get(e)}catch(i){if(i.status==404)a=!0;else throw i}let n=ip(r?._rev),o=op.get(n);if(o)return o;let s;return!a&&r?s={...r,variables:JSON.parse(Pe.encryption.decrypt(r.variables,Pe.encryption.SecretOption.ENCRYPTION))}:s={_id:e,variables:{}},op.set(n,s),s}async function oS(e){let t=Fa();return await Pe.tenancy.getGlobalDB().put({_id:e._id||t,_rev:e._rev||void 0,variables:Pe.encryption.encrypt(JSON.stringify(e.variables),Pe.encryption.SecretOption.ENCRYPTION)})}var up=require("dd-trace"),ja=new Zn(L.env.ACCOUNT_PORTAL_URL),Wa=async e=>{try{let t=await e.json();if(t.message)return t.message}catch{}try{let t=await e.text();if(t)return t}catch{}},pp=async e=>{let t,r;if(L.env.SELF_HOSTED){if(t=await Se.get(),!t.licenseKey)return;r={[L.constants.Header.LICENSE_KEY]:t.licenseKey}}else{let a=L.tenancy.getTenantId();r={[L.constants.Header.API_KEY]:L.env.ACCOUNT_PORTAL_API_KEY,[L.constants.Header.TENANT_ID]:a}}return e(r)},cp=async()=>pp(async e=>{let t=await Me.getQuotaUsage();if(t.usageQuota.users==null){let i=await L.users.getUserCount();console.info(`Syncing user count quota to ${i}`),t.usageQuota.users=i,await Me.setUsage(i,Qa.StaticQuotaName.USERS,Qa.QuotaUsageType.STATIC)}let r=await L.installation.getInstallFromDB(),a=L.tenancy.getTenantId(),n=await L.events.identification.getUniqueTenantId(a),o=Fr.getProVersion(),s={quotaUsage:t,tenantId:a,install:{id:r.installId,tenantId:n,version:o}};try{let i=await ja.post("/api/license",{headers:{...e},body:s});if(i.status===404||i.status===403)return;if(i.status!==200){let p=await Wa(i);throw new L.HTTPError(`Error getting license: ${p}`,i.status)}return i.json()}catch(i){if(L.env.DISABLE_ACCOUNT_PORTAL)return;throw i}});L.env.isJest()&&(cp=jest.fn());var Wt=cp;async function co(e){return await up.tracer.trace("getLicenseFromKey",async t=>{let r;if(!L.env.ACCOUNT_PORTAL_API_KEY)throw new Error("getLicenseFromKey requires ACCOUNT_PORTAL_API_KEY to be set");try{r=await ja.get(`/api/license/${e}`,{headers:{[L.constants.Header.API_KEY]:L.env.ACCOUNT_PORTAL_API_KEY}})}catch(a){if(L.env.DISABLE_ACCOUNT_PORTAL)return;throw a}if(r.status===404||r.status===403){t.addTags({licenseFound:!1});return}if(r.status!==200){let a=await Wa(r);throw new L.HTTPError(`Error getting license: ${a}`,r.status)}return r.json()})}var sS=e=>pp(async t=>{let r=await ja.post("/api/license/usage/triggered",{headers:{...t},body:e});if(r.status!==200){let a=await Wa(r);L.logging.logAlert(`Error triggering quota usage: ${a}`)}}),lo=async e=>{let t=await L.installation.getInstall(),r={installVersion:t.version,installId:t.installId},a=await ja.post("/api/license/activate",{headers:{[L.constants.Header.LICENSE_KEY]:e},body:r});if(a.status===403)throw new L.HTTPError("Invalid license key",400);if(a.status===409)throw new L.HTTPError("License key has already been activated",409);if(a.status!==200){let n=await Wa(a);throw new L.HTTPError(`Error activating license key: ${n}`,a.status)}return a.json()};var Yo=require("@budibase/backend-core");var un={};w(un,{activateOfflineLicenseToken:()=>Wx,deleteOfflineLicenseToken:()=>$x,dev:()=>la,enrichLicense:()=>tf,getIdentifier:()=>Wo,getIdentifierBase64:()=>Kx,getIdentifierFromBase64:()=>Vx,getOfflineLicense:()=>$o,getOfflineLicenseToken:()=>Xd,signing:()=>$r,verifyExpiry:()=>Zd,verifyInstallation:()=>ef});var $r={};w($r,{sign:()=>uS,verifyLicenseToken:()=>Wr});var fo=C(require("jsonwebtoken")),iS=`-----BEGIN PUBLIC KEY-----
28
+ }`;await tp(e,t,Zu.APP_BACKUP_BY_TRIGGER)}var ip=require("@budibase/types");var Wr={};w(Wr,{GENERIC_PAGE_SIZE:()=>Qe,auditLogs:()=>Wt,licenses:()=>ge,quotas:()=>Ze,versions:()=>jr});var ge={};w(ge,{CLOUD_FREE_LICENSE:()=>eS,SELF_FREE_LICENSE:()=>ho,UNLIMITED:()=>F,UNLIMITED_LICENSE:()=>tS});var dt=require("@budibase/types");var Ze={};w(Ze,{UNLIMITED:()=>ZI,actions:()=>Gr,appBackupRetentionDays:()=>Fr,apps:()=>Or,automationLogRetentionDays:()=>kr,automations:()=>Br,budibaseAICredits:()=>Mr,creators:()=>Ur,customAIConfigurations:()=>Qr,plugins:()=>Dr,queries:()=>Nr,rows:()=>Lr,userGroups:()=>qr,users:()=>Pr});var te=require("@budibase/types"),ZI=-1,Lr=e=>({[te.StaticQuotaName.ROWS]:{name:"Rows",value:e,triggers:[90,100]}}),Or=e=>({[te.StaticQuotaName.APPS]:{name:"Apps",value:e,triggers:[100]}}),Pr=e=>({[te.StaticQuotaName.USERS]:{name:"Users",value:e,triggers:[80,100]}}),Ur=e=>({[te.StaticQuotaName.CREATORS]:{name:"Creators",value:e,triggers:[]}}),qr=e=>({[te.StaticQuotaName.USER_GROUPS]:{name:"User Groups",value:e,triggers:[80,100]}}),Dr=e=>({[te.StaticQuotaName.PLUGINS]:{name:"Plugins",value:e,triggers:[90,100]}}),Nr=e=>({[te.MonthlyQuotaName.QUERIES]:{name:"Queries",value:e,triggers:[]}}),Br=e=>({[te.MonthlyQuotaName.AUTOMATIONS]:{name:"Automations",value:e,triggers:[80,90,100]}}),Mr=e=>({[te.MonthlyQuotaName.BUDIBASE_AI_CREDITS]:{name:"Budibase AI Credits",value:e,triggers:[80,90,100]}}),Gr=e=>({[te.MonthlyQuotaName.ACTIONS]:{name:"Actions",value:e,triggers:[80,90,100]}}),kr=e=>({[te.ConstantQuotaName.AUTOMATION_LOG_RETENTION_DAYS]:{name:"Automation Logs",value:e,triggers:[]}}),Fr=e=>({[te.ConstantQuotaName.APP_BACKUPS_RETENTION_DAYS]:{name:"App Backups",value:e,triggers:[]}}),Qr=e=>({[te.StaticQuotaName.AI_CUSTOM_CONFIGS]:{name:"Custom AI Configuration",value:e,triggers:[]}});var F=-1,eS={features:[],quotas:{usage:{monthly:{...Nr(F),...Br(200),...Mr(5e4),...Gr(F)},static:{...Or(F),...Lr(2e3),...Pr(5),...Ur(5),...qr(0),...Dr(10),...Qr(0)}},constant:{...kr(1),...Fr(0)}},plan:{type:dt.PlanType.FREE,usesInvoicing:!1,model:dt.PlanModel.PER_USER}},ho={features:[],quotas:{usage:{monthly:{...Nr(F),...Br(F),...Mr(5e4),...Gr(F)},static:{...Lr(F),...Or(F),...Pr(20),...Ur(F),...qr(0),...Dr(10),...Qr(0)}},constant:{...kr(1),...Fr(0)}},plan:{type:dt.PlanType.FREE,usesInvoicing:!1,model:dt.PlanModel.PER_USER}},tS={features:[],quotas:{usage:{monthly:{...Nr(F),...Br(F),...Mr(F),...Gr(F)},static:{...Or(F),...Lr(F),...Pr(F),...Ur(F),...qr(F),...Dr(F),...Qr(F)}},constant:{...kr(F),...Fr(F)}},plan:{type:dt.PlanType.FREE,usesInvoicing:!1,model:dt.PlanModel.PER_USER}};var jr={};w(jr,{getLicenseVersion:()=>rS,getProVersion:()=>op});var vt=require("@budibase/backend-core"),Qa=P(require("fs")),np=P(require("path")),rS=()=>{if(vt.env.isDev()){let e="dev-version.txt",t=np.default.join(vt.objectStore.budibaseTempDir(),e);if(Qa.default.existsSync(t))return Qa.default.readFileSync(t,"utf8");{let r=vt.utils.newid();return Qa.default.writeFileSync(t,r),r}}else return op()},op=()=>{let e=vt.env.VERSION;if(!e)throw new Error("No budibase pro version was specified");return e};var Wt={};w(Wt,{searchTable:()=>aS});var Et=require("@budibase/types"),sp=require("@budibase/backend-core");function aS(){return{type:"table",sourceType:Et.TableSourceType.INTERNAL,name:Et.AUDIT_LOG_TYPE,sourceId:sp.SQS_DATASOURCE_INTERNAL,primary:["_id"],schema:{metadata:{name:"metadata",type:Et.FieldType.JSON},fallback:{name:"fallback",type:Et.FieldType.JSON}}}}var Qe=9;var nS=new Date(864e13).toISOString(),oS=1e3*60*60*24;async function ja(e){let r=(await Oe.getCachedLicense()).quotas?.[ip.QuotaType.CONSTANT]?.[e]?.value||0;return r===ge.UNLIMITED?new Date(nS).toISOString():new Date(new Date().getTime()-oS*r).toISOString()}async function pp(){return ja(up.ConstantQuotaName.APP_BACKUPS_RETENTION_DAYS)}var yo=`${Q.db.DocumentType.APP_BACKUP}${Q.db.SEPARATOR}`;async function sS(e,t,r={}){let a=await pp(),n=Q.db.getProdAppID(e),o=n,s=n;if(t.trigger&&t.type){let i=`${Q.db.SEPARATOR}${t.trigger}`;i+=`${Q.db.SEPARATOR}${t.type}`,o+=i,s+=i}return(!t.startDate||t.startDate<a)&&(t.startDate=a),t.startDate&&(s+=`${Q.db.SEPARATOR}${t.startDate}`),t.endDate&&(o+=`${Q.db.SEPARATOR}${t.endDate}`),{...r,descending:!0,startkey:`${yo}${o}${Q.db.UNICODE_MAX}`,endkey:`${yo}${s}`}}async function cp(e,t){try{let r=Q.db.getQueryIndex(Q.db.ViewName.APP_BACKUP_BY_TRIGGER);return await e.query(r,t)}catch(r){if(r!=null&&r.error==="not_found")return await ap(),cp(e,t);throw r}}function lp(e,t){return`${yo}${e}${Q.db.SEPARATOR}${t}`}async function iS(e,t={}){let r=Q.tenancy.getGlobalDB(),a,n=t.limit||9,o=await sS(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 cp(r,o);let s=Cr(a,{paginate:t.paginate,pageSize:n}),i=[...new Set(s.data.filter(m=>m.createdBy).map(m=>m.createdBy))],p=await Q.users.bulkGetGlobalUsersById(i,{cleanup:!0});for(let m of p)for(let f of s.data)m?._id===f.createdBy&&(f.createdBy=m);return s}async function uS(e,t={}){let r=Q.tenancy.getGlobalDB(),a=Q.db.getProdAppID(e.appId),n=lp(a,e.timestamp),o={...e,_id:n,appId:a,name:e.name};return o._id=t.docId||o._id,o._rev=t.docRev||o._rev,t.filename&&(o.filename=t.filename),e.createdBy&&(o.createdBy=Q.db.getGlobalIDFromUserMetadataID(e.createdBy)),await r.put(o)}async function pS(e,t){let r=Q.tenancy.getGlobalDB(),a=await r.get(e);return a.name=t,await r.put(a)}async function cS(e){let t=Q.tenancy.getGlobalDB(),r=await t.get(e);await t.remove(r._id,r._rev)}async function lS(e){return await Q.tenancy.getGlobalDB().get(e)}var Rt={};w(Rt,{get:()=>fS,getCacheEnvVarID:()=>mp,getEnvVarID:()=>Wa,update:()=>mS});var Pe=require("@budibase/backend-core"),fp=P(require("lru-cache")),dS=1e3,dp=new fp.default({max:dS});function Wa(){return Pe.StaticDatabases.GLOBAL.docs.environmentVariables}function mp(e){return`${Pe.tenancy.getTenantId()}/${Wa()}/${e||""}`}async function fS(){let e=Wa(),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=mp(r?._rev),o=dp.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:{}},dp.set(n,s),s}async function mS(e){let t=Wa();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 gp=require("dd-trace"),Ka=new so(O.env.ACCOUNT_PORTAL_URL),Va=async e=>{try{let t=await e.json();if(t.message)return t.message}catch{}try{let t=await e.text();if(t)return t}catch{}},hp=async e=>{let t,r;if(O.env.SELF_HOSTED){if(t=await we.get(),!t.licenseKey)return;r={[O.constants.Header.LICENSE_KEY]:t.licenseKey}}else{let a=O.tenancy.getTenantId();r={[O.constants.Header.API_KEY]:O.env.ACCOUNT_PORTAL_API_KEY,[O.constants.Header.TENANT_ID]:a}}return e(r)},yp=async()=>hp(async e=>{let t=await ke.getQuotaUsage();if(t.usageQuota.users==null){let i=await O.users.getUserCount();console.info(`Syncing user count quota to ${i}`),t.usageQuota.users=i,await ke.setUsage(i,$a.StaticQuotaName.USERS,$a.QuotaUsageType.STATIC)}let r=await O.installation.getInstallFromDB(),a=O.tenancy.getTenantId(),n=await O.events.identification.getUniqueTenantId(a),o=jr.getProVersion(),s={quotaUsage:t,tenantId:a,install:{id:r.installId,tenantId:n,version:o}};try{let i=await Ka.post("/api/license",{headers:{...e},body:s});if(i.status===404||i.status===403)return;if(i.status!==200){let p=await Va(i);throw new O.HTTPError(`Error getting license: ${p}`,i.status)}return i.json()}catch(i){if(O.env.DISABLE_ACCOUNT_PORTAL)return;throw i}});O.env.isJest()&&(yp=jest.fn());var $t=yp;async function Ao(e){return await gp.tracer.trace("getLicenseFromKey",async t=>{let r;if(!O.env.ACCOUNT_PORTAL_API_KEY)throw new Error("getLicenseFromKey requires ACCOUNT_PORTAL_API_KEY to be set");try{r=await Ka.get(`/api/license/${e}`,{headers:{[O.constants.Header.API_KEY]:O.env.ACCOUNT_PORTAL_API_KEY}})}catch(a){if(O.env.DISABLE_ACCOUNT_PORTAL)return;throw a}if(r.status===404||r.status===403){t.addTags({licenseFound:!1});return}if(r.status!==200){let a=await Va(r);throw new O.HTTPError(`Error getting license: ${a}`,r.status)}return r.json()})}var gS=e=>hp(async t=>{let r=await Ka.post("/api/license/usage/triggered",{headers:{...t},body:e});if(r.status!==200){let a=await Va(r);O.logging.logAlert(`Error triggering quota usage: ${a}`)}}),bo=async e=>{let t=await O.installation.getInstall(),r={installVersion:t.version,installId:t.installId},a=await Ka.post("/api/license/activate",{headers:{[O.constants.Header.LICENSE_KEY]:e},body:r});if(a.status===403)throw new O.HTTPError("Invalid license key",400);if(a.status===409)throw new O.HTTPError("License key has already been activated",409);if(a.status!==200){let n=await Va(a);throw new O.HTTPError(`Error activating license key: ${n}`,a.status)}return a.json()};var ts=require("@budibase/backend-core");var ln={};w(ln,{activateOfflineLicenseToken:()=>Z_,deleteOfflineLicenseToken:()=>ex,dev:()=>fa,enrichLicense:()=>pf,getIdentifier:()=>Jo,getIdentifierBase64:()=>tx,getIdentifierFromBase64:()=>rx,getOfflineLicense:()=>Xo,getOfflineLicenseToken:()=>of,signing:()=>Vr,verifyExpiry:()=>sf,verifyInstallation:()=>uf});var Vr={};w(Vr,{sign:()=>yS,verifyLicenseToken:()=>Kr});var Io=P(require("jsonwebtoken")),hS=`-----BEGIN PUBLIC KEY-----
29
29
  MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvz3jePLCFBXZ19c8Dpkv
30
30
  XtSgOhKFOcvQdo/LV0KJRUzQWDPWuO4ILtBtnqhjtIzZH4CH0qCYBet5L6Qr4CM1
31
31
  l2HXiAD1Q2rlHNW9wDaYyKb1F5f+v4RyqCAyzlkwRdksmkLeECTboojNnmRCrE3C
@@ -34,24 +34,28 @@ l2HXiAD1Q2rlHNW9wDaYyKb1F5f+v4RyqCAyzlkwRdksmkLeECTboojNnmRCrE3C
34
34
  d/o3ZWE1TTj1zYwlCLN5qRKr3hU8nC3xEYNEbkB9SfTRaOq9Q7P8WmfLkoCPm3pR
35
35
  mwIDAQAB
36
36
  -----END PUBLIC KEY-----
37
- `;function Wr(e){return fo.default.verify(e,iS,{algorithms:["RS256"]})}function uS(e,t){return fo.default.sign(t,e,{encoding:"utf-8",algorithm:"RS256"})}var $a={};w($a,{getFeatures:()=>mo});var c=require("@budibase/types");var pS={[c.PlanType.FREE]:[...me.SELF_FREE_LICENSE.features],[c.PlanType.PREMIUM]:void 0,[c.PlanType.PREMIUM_PLUS]:[c.Feature.APP_BACKUPS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.AI_CUSTOM_CONFIGS,c.Feature.PDF,c.Feature.BUDIBASE_AI],[c.PlanType.PREMIUM_PLUS_TRIAL]:[c.Feature.APP_BACKUPS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.AI_CUSTOM_CONFIGS,c.Feature.PDF,c.Feature.BUDIBASE_AI],[c.PlanType.PRO]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS],[c.PlanType.TEAM]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS],[c.PlanType.BUSINESS]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.ENVIRONMENT_VARIABLES,c.Feature.AUDIT_LOGS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.EXPANDED_PUBLIC_API,c.Feature.VIEW_PERMISSIONS,c.Feature.PDF,c.Feature.BUDIBASE_AI],[c.PlanType.ENTERPRISE_BASIC]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.ENVIRONMENT_VARIABLES,c.Feature.ENFORCEABLE_SSO,c.Feature.AUDIT_LOGS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.OFFLINE,c.Feature.APP_BUILDERS,c.Feature.EXPANDED_PUBLIC_API,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.SCIM,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.AI_CUSTOM_CONFIGS,c.Feature.PWA,c.Feature.CUSTOM_APP_SCRIPTS,c.Feature.PDF,c.Feature.BUDIBASE_AI],[c.PlanType.ENTERPRISE_BASIC_TRIAL]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.ENVIRONMENT_VARIABLES,c.Feature.ENFORCEABLE_SSO,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.EXPANDED_PUBLIC_API,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.SCIM,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.AI_CUSTOM_CONFIGS,c.Feature.PWA,c.Feature.CUSTOM_APP_SCRIPTS,c.Feature.PDF,c.Feature.BUDIBASE_AI],[c.PlanType.ENTERPRISE]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.ENVIRONMENT_VARIABLES,c.Feature.ENFORCEABLE_SSO,c.Feature.AUDIT_LOGS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.OFFLINE,c.Feature.APP_BUILDERS,c.Feature.EXPANDED_PUBLIC_API,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.SCIM,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.AI_CUSTOM_CONFIGS,c.Feature.PWA,c.Feature.CUSTOM_APP_SCRIPTS,c.Feature.PDF,c.Feature.BUDIBASE_AI]},cS={[c.PlanType.FREE]:[...me.CLOUD_FREE_LICENSE.features],[c.PlanType.PREMIUM]:[c.Feature.APP_BACKUPS,c.Feature.BRANDING,c.Feature.APP_BUILDERS,c.Feature.VIEW_PERMISSIONS,c.Feature.PDF],[c.PlanType.PREMIUM_PLUS]:[c.Feature.APP_BACKUPS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.BUDIBASE_AI,c.Feature.PDF],[c.PlanType.PREMIUM_PLUS_TRIAL]:[c.Feature.APP_BACKUPS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.BUDIBASE_AI,c.Feature.PDF],[c.PlanType.PRO]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.BRANDING],[c.PlanType.TEAM]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.BRANDING],[c.PlanType.BUSINESS]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.ENVIRONMENT_VARIABLES,c.Feature.AUDIT_LOGS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.EXPANDED_PUBLIC_API,c.Feature.VIEW_PERMISSIONS,c.Feature.BUDIBASE_AI,c.Feature.PDF],[c.PlanType.ENTERPRISE_BASIC]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.ENVIRONMENT_VARIABLES,c.Feature.ENFORCEABLE_SSO,c.Feature.AUDIT_LOGS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.OFFLINE,c.Feature.APP_BUILDERS,c.Feature.EXPANDED_PUBLIC_API,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.SCIM,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.AI_CUSTOM_CONFIGS,c.Feature.BUDIBASE_AI,c.Feature.PWA,c.Feature.CUSTOM_APP_SCRIPTS,c.Feature.PDF],[c.PlanType.ENTERPRISE_BASIC_TRIAL]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.ENVIRONMENT_VARIABLES,c.Feature.ENFORCEABLE_SSO,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.EXPANDED_PUBLIC_API,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.SCIM,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.AI_CUSTOM_CONFIGS,c.Feature.BUDIBASE_AI,c.Feature.PWA,c.Feature.CUSTOM_APP_SCRIPTS,c.Feature.PDF],[c.PlanType.ENTERPRISE]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.ENVIRONMENT_VARIABLES,c.Feature.ENFORCEABLE_SSO,c.Feature.AUDIT_LOGS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.EXPANDED_PUBLIC_API,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.SCIM,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.AI_CUSTOM_CONFIGS,c.Feature.BUDIBASE_AI,c.Feature.PWA,c.Feature.CUSTOM_APP_SCRIPTS,c.Feature.PDF]};function mo(e,t){let r=[];function a(n){let o=n[t];if(!o)throw new Error(`Features do not exist for planType=${t} and hosting=${e}`);return o}switch(e){case c.Hosting.SELF:r=a(pS);break;case c.Hosting.CLOUD:r=a(cS);break}return r}var Ka={};w(Ka,{UNLIMITED:()=>d,getQuotas:()=>go});var G=require("@budibase/types");var l=Je,lp=me,d=-1,Kr=e=>e*1e6,lS={[G.PlanType.FREE]:{...lp.CLOUD_FREE_LICENSE.quotas},[G.PlanType.PREMIUM]:{usage:{monthly:{...l.queries(d),...l.automations(1e3),...l.budibaseAICredits(0)},static:{...l.rows(1e4),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(0),...l.plugins(d),...l.customAIConfigurations(0)}},constant:{...l.automationLogRetentionDays(7),...l.appBackupRetentionDays(7)}},[G.PlanType.PREMIUM_PLUS]:{usage:{monthly:{...l.queries(d),...l.automations(5e3),...l.budibaseAICredits(Kr(2))},static:{...l.rows(25e3),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(0),...l.plugins(d),...l.customAIConfigurations(1)}},constant:{...l.automationLogRetentionDays(30),...l.appBackupRetentionDays(30)}},[G.PlanType.PREMIUM_PLUS_TRIAL]:{usage:{monthly:{...l.queries(d),...l.automations(5e3),...l.budibaseAICredits(Kr(2))},static:{...l.rows(25e3),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(0),...l.plugins(d),...l.customAIConfigurations(1)}},constant:{...l.automationLogRetentionDays(30),...l.appBackupRetentionDays(30)}},[G.PlanType.PRO]:{usage:{monthly:{...l.queries(d),...l.automations(1e3),...l.budibaseAICredits(0)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(5),...l.plugins(d),...l.customAIConfigurations(0)}},constant:{...l.automationLogRetentionDays(7),...l.appBackupRetentionDays(7)}},[G.PlanType.TEAM]:{usage:{monthly:{...l.queries(d),...l.automations(5e3),...l.budibaseAICredits(0)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(10),...l.plugins(d),...l.customAIConfigurations(0)}},constant:{...l.automationLogRetentionDays(30),...l.appBackupRetentionDays(90)}},[G.PlanType.BUSINESS]:{usage:{monthly:{...l.queries(d),...l.automations(1e4),...l.budibaseAICredits(0)},static:{...l.rows(5e4),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(50),...l.plugins(d),...l.customAIConfigurations(0)}},constant:{...l.automationLogRetentionDays(365),...l.appBackupRetentionDays(365)}},[G.PlanType.ENTERPRISE_BASIC]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(Kr(4))},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(d),...l.plugins(d),...l.customAIConfigurations(d)}},constant:{...l.automationLogRetentionDays(d),...l.appBackupRetentionDays(d)}},[G.PlanType.ENTERPRISE_BASIC_TRIAL]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(Kr(4))},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(d),...l.plugins(d),...l.customAIConfigurations(d)}},constant:{...l.automationLogRetentionDays(15),...l.appBackupRetentionDays(15)}},[G.PlanType.ENTERPRISE]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(Kr(4))},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(d),...l.plugins(d),...l.customAIConfigurations(d)}},constant:{...l.automationLogRetentionDays(d),...l.appBackupRetentionDays(d)}}},dS={[G.PlanType.FREE]:{...lp.SELF_FREE_LICENSE.quotas},[G.PlanType.PREMIUM]:void 0,[G.PlanType.PREMIUM_PLUS]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(0),...l.plugins(d),...l.customAIConfigurations(1)}},constant:{...l.automationLogRetentionDays(30),...l.appBackupRetentionDays(30)}},[G.PlanType.PREMIUM_PLUS_TRIAL]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(0),...l.plugins(d),...l.customAIConfigurations(1)}},constant:{...l.automationLogRetentionDays(30),...l.appBackupRetentionDays(30)}},[G.PlanType.PRO]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(5),...l.plugins(d),...l.customAIConfigurations(0)}},constant:{...l.automationLogRetentionDays(7),...l.appBackupRetentionDays(7)}},[G.PlanType.TEAM]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(10),...l.plugins(d),...l.customAIConfigurations(0)}},constant:{...l.automationLogRetentionDays(30),...l.appBackupRetentionDays(90)}},[G.PlanType.BUSINESS]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(50),...l.plugins(d),...l.customAIConfigurations(0)}},constant:{...l.automationLogRetentionDays(90),...l.appBackupRetentionDays(365)}},[G.PlanType.ENTERPRISE_BASIC]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(d),...l.plugins(d),...l.customAIConfigurations(d)}},constant:{...l.automationLogRetentionDays(d),...l.appBackupRetentionDays(d)}},[G.PlanType.ENTERPRISE_BASIC_TRIAL]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(d),...l.plugins(d),...l.customAIConfigurations(d)}},constant:{...l.automationLogRetentionDays(15),...l.appBackupRetentionDays(15)}},[G.PlanType.ENTERPRISE]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(d),...l.plugins(d),...l.customAIConfigurations(d)}},constant:{...l.automationLogRetentionDays(d),...l.appBackupRetentionDays(d)}}};function go(e,t){let r;function a(n){let o=n[t];if(!o)throw new Error(`Quotas do not exist for planType=${t} and hosting=${e}`);return o}switch(e){case G.Hosting.SELF:r=a(dS);break;case G.Hosting.CLOUD:r=a(lS);break}return JSON.parse(JSON.stringify(r))}var Kt={};w(Kt,{appExists:()=>fS,encoding:()=>$t});var dp=require("@budibase/backend-core");async function fS(e){return(await dp.db.getAllApps({all:!0,idsOnly:!0})).includes(e)}var $t={};w($t,{base64ToObject:()=>gS,objectToBase64:()=>mS});function mS(e){let t=JSON.stringify(e);return Buffer.from(t).toString("base64")}function gS(e){let t=Buffer.from(e,"base64").toString();return JSON.parse(t)}var Hd=require("@budibase/types"),or=require("@budibase/backend-core"),zd=C(_l()),Jd=C(jo());async function Wx(e){await Se.save({offlineLicenseToken:e}),await xt()}async function $x(){await Se.save({offlineLicenseToken:void 0}),await xt()}async function Xd(){return(await Se.get()).offlineLicenseToken}async function Wo(){let t=(await or.installation.getInstall()).installId,r=or.context.getTenantId(),a=await or.events.identification.getUniqueTenantId(r);return{installId:t,tenantId:a}}async function Kx(){let e=await Wo();return $t.objectToBase64(e)}function Vx(e){return $t.base64ToObject(e)}function Zd(e){let t=Date.now(),r=new Date(e.expireAt).getTime();if(t>r)throw new Error(`Offline license has expired. expireAt=${e.expireAt}`)}async function ef(e){let t=await Wo();if(e.identifier.installId!==t.installId||e.identifier.tenantId!==t.tenantId)throw new Error("Invalid offline license")}function tf(e){let t=e.plan.type,r=Hd.Hosting.SELF,a=mo(r,t),n=go(r,t);return e.features=(0,zd.default)(e.features,a),e.quotas=(0,Jd.default)(e.quotas,n),e}async function $o(){try{let e=await Xd();if(e){let t=await Wr(e);return Zd(t),await ef(t),tf(t)}}catch(e){console.error("Error retrieving offline license",e)}}var la={};w(la,{deleteDevLicense:()=>Xx,getOfflineLicense:()=>zx,writeDevLicenseToDisk:()=>Jx});var rf=require("@budibase/backend-core"),Vo=require("path"),af=require("os"),_t=C(require("fs"));var Yx=rf.env.isTest()?".budibase-test":".budibase",Ko=(0,Vo.join)((0,af.tmpdir)(),Yx),Hx="dev_license.txt",ca=(0,Vo.join)(Ko,Hx);if(!_t.default.existsSync(Ko))try{_t.default.mkdirSync(Ko)}catch{}function zx(){try{if(_t.default.existsSync(ca)){let e=_t.default.readFileSync(ca,{encoding:"utf-8"});return Wr(e)}}catch(e){console.error("Error retrieving offline license from disk",e)}}function Jx(e){console.log(`Writing license to: ${ca}`),_t.default.writeFileSync(ca,e,{encoding:"utf-8"})}function Xx(){_t.default.rmSync(ca,{force:!0})}var Ho=async()=>{if(Yo.env.OFFLINE_MODE)return $o();let e=await Wt();return e||(e=la.getOfflineLicense()),e},zo=e=>co(e),Jo=()=>Yo.env.SELF_HOSTED?me.SELF_FREE_LICENSE:me.CLOUD_FREE_LICENSE;var es={};w(es,{activateLicenseKey:()=>Zx,deleteLicenseKey:()=>e_,getLicenseKey:()=>Zo});var Xo=C(require("dd-trace"));async function Zx(e){await lo(e),await Se.save({licenseKey:e}),await xt()}async function Zo(){return await Xo.default.trace("getLicenseKey",async e=>{let t=await Se.get();return e.addTags({licenseKey:t.licenseKey}),t.licenseKey})}async function e_(){return await Xo.default.trace("deleteLicenseKey",async()=>{await Se.save({licenseKey:void 0}),await xt()})}var Ot=require("@budibase/backend-core"),pn=C(require("dd-trace")),nf=3600,xt=async()=>{await uf(),await sf()},of=async(e,t)=>{let{populateLicense:r=Ho,populateFreeLicense:a=Jo}=t||{};return await pn.default.trace("getCachedLicense",async n=>{let o=Ot.context.getLicense();if(o)return n.addTags({foundInContext:!0,features:o.features,plan:o.plan,quotas:o.quotas}),o;let s=Ot.tenancy.getTenantId(),i=await Jn(),p=await i.get(s);return n.addTags({tenantId:s,foundInCache:!!p}),p?(n.addTags({foundInCache:!0,refreshedAt:p.refreshedAt,features:p.features,plan:p.plan,quotas:p.quotas}),p):(p=await pn.default.trace("populateLicense",async()=>await r(s)),n.addTags({populatedLicense:!!p}),p||(p=pn.default.trace("populateFreeLicense",()=>a(e,s)),n.addTags({populatedFreeLicense:!!p})),p.refreshedAt=new Date().toISOString(),n.addTags({refreshedAt:p.refreshedAt,features:p.features,plan:p.plan,quotas:p.quotas,expirySeconds:nf}),await i.store(s,p,nf),p)})};Ot.env.isJest()&&(of=jest.fn());var sf=of,uf=async()=>{let e=Ot.tenancy.getTenantId();await(await Jn()).delete(e)};async function se(e,t){Array.isArray(e)||(e=[e]),t||(t=await Oe.getCachedLicense());for(let r of e)if(!t?.features.includes(r))return!1;return!0}async function cn(e,t){if(!await se(e,t))throw new Xe.FeatureDisabledError(`${e} is not currently enabled`,e)}async function ts(e,t){if(!await se(e,t)){let r=e.join(", ");throw new Xe.FeatureDisabledError(`${r} are not currently enabled`,r)}}function ye(e){return async(...t)=>(await cn(oe.Feature.APP_BACKUPS),e(...t))}async function rs(){return se(oe.Feature.APP_BACKUPS)}async function as(){return se(oe.Feature.BRANDING)}async function pf(){return se(oe.Feature.ENFORCEABLE_SSO)}async function r_(){return se(oe.Feature.SYNC_AUTOMATIONS)}async function a_(){return se(oe.Feature.TRIGGER_AUTOMATION_RUN)}async function Pt(){return se(oe.Feature.APP_BUILDERS)}async function ln(){return se(oe.Feature.AUDIT_LOGS)}async function ns(){return se(oe.Feature.USER_GROUPS)}function n_(){return se(oe.Feature.PWA)}async function Ze(){return se(oe.Feature.EXPANDED_PUBLIC_API)}async function o_(e){if(Xe.env.ENABLE_SSO_MAINTENANCE_MODE||!await pf())return!1;let r;return e?.config?r=e.config:r=await Xe.configs.getSettingsConfig(),!!r.isSSOEnforced}var os=async()=>{let e=oe.Feature.SCIM,t=await se(e),r=await Xe.configs.getSCIMConfig();if(!t||!r?.enabled)throw new Xe.FeatureDisabledError(`${e} is not currently enabled`,e);return!0};async function s_(){return se(oe.Feature.VIEW_PERMISSIONS)}async function i_(){return se(oe.Feature.VIEW_READONLY_COLUMNS)}var u_={faviconUrl:void 0,faviconUrlEtag:void 0,emailBrandingEnabled:!0,testimonialsEnabled:!0,platformTitle:void 0,loginHeading:void 0,loginButton:void 0,metaDescription:void 0,metaImageUrl:void 0,metaTitle:void 0};async function p_(e){return await as()?{faviconUrl:e.faviconUrl,faviconUrlEtag:e.faviconUrlEtag,emailBrandingEnabled:e.emailBrandingEnabled,testimonialsEnabled:e.testimonialsEnabled,platformTitle:e.platformTitle,loginHeading:e.loginHeading,loginButton:e.loginButton,metaDescription:e.metaDescription,metaImageUrl:e.metaImageUrl,metaTitle:e.metaTitle}:u_}var is={};w(is,{enrichAIConfig:()=>ss});var cf=require("@budibase/backend-core"),c_="budibase_ai";async function ss(e){if(cf.env.SELF_HOSTED)return e;for(let t of Object.values(e.config))if(t.provider==="BudibaseAI")return e;return e.config[c_]={provider:"BudibaseAI",active:!0,isDefault:Object.keys(e.config).every(t=>!e.config[t].isDefault),defaultModel:process.env.BUDIBASE_AI_DEFAULT_MODEL||"gpt-4o-mini",name:"Budibase AI"},e}var We={};w(We,{addApp:()=>g_,addAutomation:()=>S_,addGroup:()=>ps,addPlugin:()=>ls,addRow:()=>h_,addRows:()=>b_,addUsers:()=>mn,bustCache:()=>ro,decrement:()=>et,decrementMany:()=>da,getCurrentUsageValues:()=>Mu,getLicensedQuota:()=>df,getQuotaUsage:()=>wt,increment:()=>qe,incrementBudibaseAICredits:()=>yn,incrementMany:()=>Lt,removeApp:()=>y_,removeGroup:()=>cs,removePlugin:()=>ds,removeRow:()=>A_,removeRows:()=>I_,removeUsers:()=>cr,set:()=>us,setAllUsage:()=>no,setAppUsageValue:()=>ao,setUsage:()=>Du,setUsagePerApp:()=>Nu,updatePluginCount:()=>fs,updateUsage:()=>ir,usageLimitIsExceeded:()=>m_,utils:()=>Rr});var Y=require("@budibase/types");var Ce=require("@budibase/backend-core");var sr=require("dd-trace"),qe=(e,t,r)=>lf({change:1,name:e,type:t,opts:r}),Lt=e=>sr.tracer.trace("quotas.incrementMany",async()=>lf(e)),lf=async e=>await sr.tracer.trace("quotas.tryIncrement",async t=>{let r=Array.isArray(e)?e:[e];t.addTags({numActions:r.length}),await ir(r.map(n=>({usageChange:n.change,name:n.name,type:n.type,opts:{dryRun:!0,suppressErrorLog:n.opts?.suppressErrorLog,id:n.opts?.id}})));let a=[];for(let n of r)await sr.tracer.trace("quotas.incrementMany.fn",async o=>{o.addTags({actionName:n.name,actionType:n.type,actionChange:n.change});let s=n.opts?.fn;s&&a.push(await s())});return await ir(r.map(n=>({usageChange:n.change,name:n.name,type:n.type,opts:{dryRun:!1,valueFn:n.opts?.valueFn,suppressErrorLog:n.opts?.suppressErrorLog,id:n.opts?.id}}))),a[0]}),et=(e,t,r={})=>ir({usageChange:-1,name:e,type:t,opts:r}),da=e=>{let t=Array.isArray(e)?e:[e];return ir(t.map(r=>({usageChange:-r.change,name:r.name,type:r.type,opts:r.opts})))},us=async(e,t,r)=>Me.setUsage(r,e,t),l_=(e,t,r)=>{if(e==Y.QuotaUsageType.STATIC){let a=r.usageQuota.triggers;return a?a[t]||{}:{}}else{let a=Me.utils.getCurrentMonthString(),n=r.monthly[a].triggers;return n?n[t]||{}:{}}},d_=async(e,t,r,a)=>{try{await Ce.locks.doWithLock({type:Y.LockType.TRY_ONCE,name:Y.LockName.TRIGGER_QUOTA,resource:e,ttl:1e4},async()=>{let n={percentage:r,name:t.name};a&&(n.resetDate=a),await lt.triggerQuota(n)})}catch(n){Ce.logging.logAlert("Error triggering quota",n)}},f_=async(e,t,r,a)=>{let n=await wt(),o=e===Y.QuotaUsageType.MONTHLY?n.quotaReset:void 0,s=await l_(e,t,n),i=a.triggers,p=r/a.value*100;p>100&&(p=100);for(let[f,m]of i.entries())if(p>=m&&a.value!==Je.UNLIMITED){if(!s[m]){s[m]=new Date().toISOString();let g=i[f+1]||100;(!(p>=g)||p===m)&&await d_(t,a,p,o)}}else s[m]=void 0;return s},ir=async e=>{await sr.tracer.trace("quotas.updateUsage",async t=>{let r=Ce.tenancy.getTenantId(),a=Array.isArray(e)?e:[e];t.addTags({numActions:a.length,tenantId:r});let n,o,s=[],i={},p={},f={},m={};for(let g of a)await sr.tracer.trace("quotas.updateUsage.action",async S=>{S.addTags({actionName:g.name,actionType:g.type,actionUsageChange:g.usageChange});try{n=Ce.context.getAppId()}catch{}if(Y.APP_QUOTA_NAMES.includes(g.name)&&!n)throw new Error("App context required for quota update");try{o=await df(Y.QuotaType.USAGE,g.name,g.type),s.push(o);let{total:x,app:R,breakdown:E}=await Me.getCurrentUsageValues(g.type,g.name,g.opts?.id);x+=g.usageChange,R!=null&&(R+=g.usageChange),E!=null&&(E+=g.usageChange);let q={};if(g.opts?.dryRun||(q=await f_(g.type,g.name,x,o),m={...m,[g.name]:q}),o.value!==Je.UNLIMITED&&x>o.value&&g.usageChange>0)throw new Ce.UsageLimitError(`Licensed ${o.name} of ${o.value} has been exceeded`,o.name);if(x=Math.max(0,x),R&&(R=Math.max(0,R)),E&&(E=Math.max(0,E),f={...f,[g.name]:E}),!g.opts?.dryRun){let xe=g.opts?.valueFn;xe&&(x=await xe(),R=x),i={...i,[g.name]:x},p={...p,[g.name]:R}}}catch(x){throw g.opts?.suppressErrorLog||console.error(`Error updating usage quotas for ${g.name}`,x),x}});let y=a.filter(g=>!g.opts?.dryRun).map(g=>({name:g.name,type:g.type,values:{total:i[g.name],app:p[g.name],breakdown:f[g.name],triggers:m[g.name]},opts:{...g.opts,tenantId:r}}));y.length>0&&await Me.setAllUsage(y)})},df=async(e,t,r)=>{let a=await Oe.getCachedLicense();if(!a){let n=Ce.tenancy.getTenantId();throw new Error("License not found for tenant id "+n)}if(r&&(0,Y.isStaticQuota)(e,r,t))return a.quotas[e][r][t];if(r&&(0,Y.isMonthlyQuota)(e,r,t))return a.quotas[e][r][t];if((0,Y.isConstantQuota)(e,t))return a.quotas[e][t];throw new Error("Invalid quota type")},m_=async(e,t)=>{try{return await ir({usageChange:1,name:e,type:t,opts:{dryRun:!0}}),!1}catch(r){if(r.code===Y.ErrorCode.USAGE_LIMIT_EXCEEDED)return!0;throw r}};var ur=require("@budibase/types"),ff=require("@budibase/backend-core"),mf=async()=>{let e=await ff.db.getAllApps({dev:!0});return e?e.length:0},g_=async(e,{appId:t}={})=>qe(ur.StaticQuotaName.APPS,ur.QuotaUsageType.STATIC,{fn:e,valueFn:mf,id:t}),y_=async({appId:e}={})=>et(ur.StaticQuotaName.APPS,ur.QuotaUsageType.STATIC,{valueFn:mf,id:e});var Qe=require("@budibase/types"),h_=async(e,{tableId:t}={})=>qe(Qe.StaticQuotaName.ROWS,Qe.QuotaUsageType.STATIC,{fn:e,id:t}),A_=async({tableId:e}={})=>et(Qe.StaticQuotaName.ROWS,Qe.QuotaUsageType.STATIC,{id:e}),b_=async(e,t,{tableId:r}={})=>Lt({change:e,name:Qe.StaticQuotaName.ROWS,type:Qe.QuotaUsageType.STATIC,opts:{fn:t,id:r}}),I_=async(e,{tableId:t}={})=>da({change:e,name:Qe.StaticQuotaName.ROWS,type:Qe.QuotaUsageType.STATIC,opts:{id:t}});var fn=require("@budibase/types"),S_=async(e,{automationId:t}={})=>qe(fn.MonthlyQuotaName.AUTOMATIONS,fn.QuotaUsageType.MONTHLY,{fn:e,id:t});var pr=require("@budibase/types"),ps=async e=>qe(pr.StaticQuotaName.USER_GROUPS,pr.QuotaUsageType.STATIC,{fn:e}),cs=async()=>et(pr.StaticQuotaName.USER_GROUPS,pr.QuotaUsageType.STATIC);var mt=require("@budibase/types"),ls=async e=>qe(mt.StaticQuotaName.PLUGINS,mt.QuotaUsageType.STATIC,{fn:e}),ds=async()=>et(mt.StaticQuotaName.PLUGINS,mt.QuotaUsageType.STATIC),fs=async e=>us(mt.StaticQuotaName.PLUGINS,mt.QuotaUsageType.STATIC,e);var je=require("@budibase/types"),fa=require("@budibase/backend-core");var mn=async(e,t,r)=>{let a=[{change:e,name:je.StaticQuotaName.USERS,type:je.QuotaUsageType.STATIC,opts:{fn:r,valueFn:fa.users.getUserCount}}];t>0&&a.push({change:t,name:je.StaticQuotaName.CREATORS,type:je.QuotaUsageType.STATIC,opts:{valueFn:fa.users.getCreatorCount}});let n=await Lt(a);return await Wt(),n},cr=async(e,t)=>{let r=[{change:e,name:je.StaticQuotaName.USERS,type:je.QuotaUsageType.STATIC,opts:{valueFn:fa.users.getUserCount}}];t>0&&r.push({change:t,name:je.StaticQuotaName.CREATORS,type:je.QuotaUsageType.STATIC,opts:{valueFn:fa.users.getCreatorCount}}),await da(r),await Wt()};var gn=require("@budibase/types"),yn=async e=>Lt({change:e,name:gn.MonthlyQuotaName.BUDIBASE_AI_CREDITS,type:gn.QuotaUsageType.MONTHLY});var tt={};w(tt,{addAppBuilder:()=>R_,db:()=>$e,removeAppBuilder:()=>x_});var ga=require("@budibase/backend-core");var Q={};w(Q,{addAppBuilder:()=>As,addUsers:()=>gs,adjustGroupCreatorsQuotas:()=>E_,cleanupApp:()=>v_,enrichUserRolesFromGroups:()=>T_,fetch:()=>ma,get:()=>qt,getBulk:()=>Sf,getGroupBuilderAppIds:()=>If,getGroupRoleId:()=>w_,remove:()=>ms,removeAppBuilder:()=>bs,removeUsers:()=>ys,save:()=>lr,updateGroupApps:()=>hs});var _=require("@budibase/backend-core");var gf=require("@budibase/backend-core"),hn=class extends gf.HTTPError{constructor(t){super(`Group name "${t}" is unavailable`,409)}};async function Af(e,t){try{let r=[];for(let i of e)if(i.roles){let p=i.roles[_.db.getProdAppID(t)];p&&r.push(p)}let a=await Promise.all(r.map(async i=>({[i]:await _.roles.roleToNumber(i)}))),n,o,s={};a.forEach(i=>{let[p,f]=Object.entries(i)[0];s[p]={roleId:p,roleNum:f}});for(let{roleId:i,roleNum:p}of Object.values(s))(o===void 0||p>o)&&(o=p,n=i);return n}catch(r){throw _.logging.logAlert(`Error finding higest role for ${e.length} on app ${t}`,r),r}}async function bf(e,t){return t?t=t.filter(r=>e.includes(r._id)):t=await M.getBulk(e,{enriched:!1}),t}async function If(e,t){if(!e.userGroups)return[];let r=await bf(e.userGroups,t?.groups),a=t?.appId?_.db.getProdAppID(t?.appId):null,n=[];for(let o of r){let s=o.builder?.apps;a&&s?.includes(a)?n.push(a):a||(n=n.concat(s||[]))}return[...new Set(n)]}async function w_(e,t,r){if(!e.userGroups)return null;let a=await bf(e.userGroups,r?.groups),n=_.db.getProdAppID(t);return e.roles?.[n]?e.roles[n]:(a=a.filter(o=>o?.roles?Object.keys(o.roles).includes(n):!1),await Af(a,t))}async function T_(e){if(!e||!e.userGroups)return e;let t=await Sf(e.userGroups,{enriched:!1}),r=[];for(let n of t)n?.roles&&(r=r.concat(Object.keys(n.roles)));r=[...new Set(r)];for(let n of r)await _.context.doInAppContext(n,async()=>{if(e.roles[n])return;let o=await Af(t,n);o&&(e.roles[n]=o)});let a=await If(e,{groups:t});if(a.length&&!e.builder?.global){let n=e.builder?.apps||[];e.builder={apps:n.concat(a)}}return e}async function ma(){return await M.fetch()}async function qt(e){return await M.get(e)}async function Sf(e,t={enriched:!0}){return await M.getBulk(e,t)}async function yf(e){if(await M.getByName(e))throw new hn(e)}async function hf(e){let t=await M.getGroupUsers(e._id);if(!t.length)return 0;let a=await _.tenancy.getGlobalDB().getMultiple(t.map(o=>o._id));return(await _.userUtils.creatorsInList(a)).filter(o=>o).length}async function lr(e){let t=[],r=!e._id,a=0;if(delete e.users,!e._id)e._id=M.generateUserGroupID(),await yf(e.name),t.push(_.events.group.created(e));else{let o=await M.get(e._id);if(o.name!==e.name&&await yf(e.name),t.push(_.events.group.updated(e)),JSON.stringify(o.roles)!==JSON.stringify(e.roles)){let s=o.users?.length||0,i=0;s>0&&(i=await hf(o)),Object.values(e.roles).includes("CREATOR")?a=s-i:a=-s,t.push(_.events.group.permissionsEdited(e))}}await Promise.all(t);let n=()=>M.save(e);if(r)return await ps(n);{let o=await n();if(a>0)await mn(0,a);else if(a<0){let s=await hf(e),i=Math.abs(a)-s;i>0&&await cr(0,i)}return o}}async function ms(e,t){let r;try{r=await M.get(e)}catch{throw new Error("Group not found")}let a=Object.values(r.roles||{}).includes("CREATOR"),n=()=>{};if(a){let s=_.tenancy.getGlobalDB(),i=await M.getGroupUsers(e),f=(await Promise.all(i.map(S=>s.get(S._id)))).map(S=>({...S,userGroups:S.userGroups.filter(P=>P!==e)})),y=(await _.userUtils.creatorsInList(f)).filter(S=>S).length,g=i.length-y;g&&(n=()=>cr(0,g))}let o=await M.destroy(e,t);return await _.events.group.deleted(r),await cs(),await n(),o}async function gs(e,t){let r=await M.get(e),a=await _.users.bulkGetGlobalUsersById(t),n=[];for(let p of a)p.userGroups||(p.userGroups=[]),p.userGroups.includes(e)||n.push(p);if(!n.length)return n;let o=n.map(p=>({...p,userGroups:[...p?.userGroups||[],e]}));if(await _.users.bulkUpdateGlobalUsers(o),Object.values(r.roles||{}).includes("CREATOR")){let f=(await _.userUtils.creatorsInList(n)).filter(y=>y).length,m=n.length-f;m&&await mn(0,m)}let i=[];for(let p of t)i.push(_.cache.user.invalidateUser(p));return await Promise.all(i),await _.events.group.usersAdded(o.length,r),o}async function ys(e,t){let r=await M.get(e),a=await _.users.bulkGetGlobalUsersById(t),n=[];for(let i of a){if(!i.userGroups||!i.userGroups.includes(e))continue;let p=i.userGroups.indexOf(e);i.userGroups.splice(p,1),n.push(i)}if(await _.users.bulkUpdateGlobalUsers(n),Object.values(r.roles||{}).includes("CREATOR")){let p=(await _.userUtils.creatorsInList(n)).filter(m=>m).length,f=n.length-p;f&&await cr(0,f)}let s=[];for(let i of t)s.push(_.cache.user.invalidateUser(i));return await Promise.all(s),n.length&&await _.events.group.usersDeleted(n.length,r),n}async function hs(e,t){let r=await qt(e);if(r.roles||(r.roles={}),t.appsToAdd)for(let a of t.appsToAdd)r.roles[a.appId]=a.roleId;if(t.appsToRemove)for(let a of t.appsToRemove)delete r.roles[a.appId];return await lr(r)}async function v_(e){let t=await ma(),r=[];for(let a of t)!a.roles||!a.roles[e]||(delete a.roles[e],r.push(a));return await M.bulkSave(r)}async function As(e,t){if(!await Pt())throw new Error("Feature not enabled, please check license");let r=_.db.getProdAppID(t),a=await qt(e);a.builder??={apps:[]},a.builder.apps.includes(t)||(a.builder.apps.push(r),await lr(a))}async function bs(e,t){if(!await Pt())throw new Error("Feature not enabled, please check license");let r=_.db.getProdAppID(t),a=await qt(e);a.builder?.apps.includes(t)&&(a.builder.apps=a.builder.apps.filter(n=>n!==r),await lr(a))}async function E_(){if(!await ns()){let e=_.tenancy.getGlobalDB(),r=(await ma()||[]).filter(a=>Object.values(a?.roles||{}).includes("CREATOR"));for(let a of r){let n=await M.getGroupUsers(a._id),s=(await Promise.all(n.map(m=>e.get(m._id)))).map(m=>({...m,userGroups:m.userGroups.filter(y=>y!==a._id)})),p=(await _.userUtils.creatorsInList(s)).filter(m=>m).length,f=n.length-p;await M.save({...a,roles:{}}),f&&await cr(0,f)}}}ga.users.UserDB.init(We,Q,Le);var $e=ga.users.UserDB;async function R_(e,t){if(!await Pt())throw new Error("Feature not enabled, please check license");await ga.users.addAppBuilder(e,t)}async function x_(e,t){if(!await Pt())throw new Error("Feature not enabled, please check license");await ga.users.removeAppBuilder(e,t)}var In={};w(In,{logs:()=>Rs});var Rs={};w(Rs,{logSearch:()=>N_,oldestLogDate:()=>_f,storeLog:()=>B_});var xf=require("@budibase/types"),bn=require("@budibase/backend-core");var An=require("@budibase/types");var Z=require("@budibase/backend-core");var wf=require("@budibase/backend-core");async function Tf(e,t){let r,a=5,n=!1,o,s=!0;for(;a>0;a--)try{s?o=await e():o=await exports.randomDelay(e),n=!0;break}catch(i){r=i}return n||wf.logging.logWarn(`Failed to backoff: ${t}`,r),o}var{SEPARATOR:rt,UNICODE_MAX:__,DocumentType:vf,AutomationViewMode:Is,ViewName:O_,getQueryIndex:P_}=Z.db,L_=new Date(0).toISOString(),C_=100,Ss=async()=>ka(An.ConstantQuotaName.AUTOMATION_LOG_RETENTION_DAYS);function Ef(e,t,{status:r,automationId:a}={},n={}){let o=a?`${a}${rt}`:"",s=r?`${r}${rt}`:"",i;return r&&a?i=`${Is.ALL}${rt}${s}${o}`:r?i=`${Is.STATUS}${rt}${s}`:a?i=`${Is.AUTOMATION}${rt}${o}`:i=`${vf.AUTOMATION_LOG}${rt}`,{...n,descending:!0,startkey:`${i}${t}${__}`,endkey:`${i}${e}`}}function q_(e,t,r){return`${vf.AUTOMATION_LOG}${rt}${e}${rt}${r}${rt}${t}`}async function ws(e,t,r={docs:!0}){let a=Z.context.getProdAppDB();await a.exists()||(a=Z.context.getDevAppDB());let n={status:r.status},o=r?.limit?r.limit:r?.paginate?9+1:void 0,s=Ef(e,t,n,{include_docs:r.docs,limit:o});r?.page&&(s.startkey=r.page);let i=await a.allDocs(s);return _r(i,{paginate:r?.paginate,pageSize:9})}async function Ts(e,t,r={}){let a=Z.context.getProdAppDB();await a.exists()||(a=Z.context.getDevAppDB());let n;try{let o={automationId:r?.automationId,status:r?.status},s=Ef(e,t,o,{include_docs:!0,limit:9+1});r?.page&&(s.startkey=r.page),n=await a.query(P_(O_.AUTOMATION_LOGS),s)}catch(o){if(o!=null&&(o.name==="not_found"||o.error==="not_found"))return await Hu(),Ts(e,t,r);throw o}return _r(n,{paginate:!0,pageSize:9})}async function Rf(e,t){let r=Z.context.getProdAppDB(),a=e._id,n=e.name,o=new Date().toISOString(),s=q_(o,t.status,a),i={...t,automationId:a,status:t.status,automationName:n,createdAt:o,_id:s};return await r.put(i),s}async function vs(e,{clearing:t}={clearing:!1}){let r=Z.context.getProdAppDB();await Tf(async()=>{let a=await r.get(Z.db.DocumentType.APP_METADATA);for(let n of e){let o=n.split(Z.db.SEPARATOR),s=`${o[o.length-3]}${Z.db.SEPARATOR}${o[o.length-2]}`,i={};a.automationErrors&&(i=a.automationErrors),Array.isArray(i[s])||(i[s]=[]);let p=i[s].indexOf(n);t&&p!==-1?i[s].splice(p,1):i[s].push(n),i[s].length===0&&delete i[s],a.automationErrors=i}await r.put(a),await Z.cache.app.invalidateAppMetadata(a.appId,a)},"Failed to update app metadata with automation log error")}async function U_(){let e=await Ss();try{return await ws(L_,e,{docs:!1,paginate:!1,limit:C_})}catch{return{data:[],hasNextPage:!1}}}async function Es(){let e=Z.context.getProdAppDB();try{let t=await U_();if(!t.data||t.data.length===0)return;let r=t.data.map(n=>({_id:n.id,_rev:n.value.rev,_deleted:!0})),a=t.data.filter(n=>{let o=n.id.split(Z.db.SEPARATOR);return o[o.length-1]===An.AutomationStatus.ERROR}).map(n=>n.id);await e.bulkDocs(r),a.length&&await vs(a,{clearing:!0})}catch(t){Z.logging.logAlert(`Failed to cleanup automation log history - Database "${e.name}"`,t)}}var _f=Ss;async function D_(e,t,r,a){let n,o=new Date().toISOString(),s=await _f();return(!e||e<s)&&(e=s),r||t?n=await Ts(e,o,{automationId:r,status:t,page:a}):n=await ws(e,o,{status:t,page:a,docs:!0,paginate:!0}),n}async function N_(e){return await Es(),await D_(e.startDate,e.status,e.automationId,e.page)}async function B_(e,t){if(!bn.db.isProdAppID(bn.context.getAppId()))return;let r=await Rf(e,t);t.status===xf.AutomationStatus.ERROR&&await vs([r]),await Es()}var Sn={};w(Sn,{checkPluginQuotas:()=>k_,deletePlugin:()=>G_,storePlugin:()=>M_});var Cf=require("@budibase/types"),H=require("@budibase/backend-core");var Of=C(require("fs")),Pf=require("path");function Lf(e,t){return Of.default.readFileSync((0,Pf.join)(e,t),"utf8")}async function M_(metadata,directory,source){let db=H.tenancy.getGlobalDB(),version=metadata.package.version,name=metadata.package.name,description=metadata.package.description,hash=metadata.schema.hash,bucketPath=H.objectStore.getPluginS3Dir(name),files=await H.objectStore.uploadDirectory(H.objectStore.ObjectStoreBuckets.PLUGINS,directory,bucketPath),jsFile=files.find(e=>e.name.endsWith(".js")),iconFile=files.find(e=>e.name.endsWith(".svg"));if(!jsFile)throw new Error("Plugin missing .js file.");if(metadata.schema.type===Cf.PluginType.DATASOURCE){let js=Lf(directory,jsFile.name);try{eval(js)}catch(e){let t=e?.message?e.message:JSON.stringify(e);throw new Error(`JS invalid: ${t}`)}}let iconFileName=iconFile?iconFile.name:null,pluginId=H.db.generatePluginID(name),rev;try{rev=(await db.get(pluginId))._rev}catch(e){rev=void 0}let doc={_id:pluginId,_rev:rev,...metadata,name,version,hash,description,source};iconFileName&&(doc.iconFileName=iconFileName),source&&(doc={...doc,source});let write=async()=>{let e=await db.put(doc);return await H.events.plugin.imported(doc),{...doc,_rev:e.rev}};return rev?await write():await ls(write)}async function G_(e){let t=H.tenancy.getGlobalDB();try{let r=await t.get(e),a=H.objectStore.getPluginS3Dir(r.name);await H.objectStore.deleteFolder(H.objectStore.ObjectStoreBuckets.PLUGINS,a),await t.remove(e,r._rev),await H.events.plugin.deleted(r),await ds()}catch(r){let a=r?.message?r?.message:r;throw new Error(`Failed to delete plugin: ${a}`)}}async function k_(){let e=H.tenancy.getGlobalDB();try{let r=(await e.allDocs(H.db.getPluginParams())).rows.length;console.log(`Syncing plugin count: ${r}`),await fs(r)}catch(t){H.logging.logAlert("Unable to retrieve plugins for quota check",t)}}var Ke={};w(Ke,{fetch:()=>Q_,fetchValues:()=>j_,isEncryptionKeyAvailable:()=>F_,isValid:()=>Df,remove:()=>$_,update:()=>W_});var ya=require("@budibase/types"),qf=require("@budibase/backend-core");function F_(){return!!qf.env.ENCRYPTION_KEY}async function Q_(){let e=await Et.get();return Object.keys(e.variables)}async function j_(e){let r=(await Et.get()).variables,a={};for(let[n,o]of Object.entries(r))switch(e){case ya.AppEnvironment.DEVELOPMENT:a[n]=o.development;break;case ya.AppEnvironment.PRODUCTION:default:a[n]=o.production;break}return a}async function Uf(e){if(!(await Fe.cache.getCachedLicense()).features.includes(ya.Feature.ENVIRONMENT_VARIABLES))throw new Error("User does not have access to environment variables feature.");let r=await Et.get();r.variables=e(r.variables),await Et.update(r)}async function W_(e,t){if(Df(e))await Uf(a=>(a[e]=t,a));else throw new Error("Variable name has characters that are not allowed")}async function $_(e){await Uf(t=>(delete t[e],t))}function Df(e){return/^[a-zA-Z0-9-_]+$/.test(e)}var gt={};w(gt,{definitions:()=>rO,download:()=>tO,fetch:()=>eO,write:()=>X_});var Tn=require("@budibase/types");var $=require("@budibase/backend-core"),Ue=require("@budibase/types");var Nf=require("memorystream"),Bf=new $.sql.Sql(Ue.SqlClient.SQL_LITE);async function K_(e,t,r){let a={operation:Ue.Operation.READ,table:jt.searchTable(),tables:{},paginate:{limit:r||9,page:t},filters:e,resource:{fields:[]},sort:{timestamp:{direction:Ue.SortOrder.DESCENDING,type:Ue.SortType.STRING}}},n=Bf._query(a);if(Array.isArray(n))throw new Error("Cannot execute multiple queries for audit log search");return{sql:n.sql,bindings:n.bindings}}function V_(e){return`${$.DocumentType.AUDIT_LOG}${$.SEPARATOR}${e}${$.SEPARATOR}${$.utils.newid()}`}async function Mf(e){e._id||(e._id=V_(e.timestamp)),e.type||(e.type=Ue.AUDIT_LOG_TYPE);try{let r=await $.context.getAuditLogsDB().put(e);return{...e,_rev:r.rev}}catch(t){$.logging.logAlert("Failed to write audit log",t)}}async function xs(e,t,r){t||(t=1);let a=$.context.getAuditLogsDB();try{let n=9+1,o=await K_(e,t,n),s=jt.searchTable(),i=Bf.convertJsonStringColumns(s,await a.sql(o.sql,o.bindings)),p;i.length>n&&(p=i.pop());let f={rows:i,hasNextPage:!!p};return f.hasNextPage&&(f.bookmark=t+1),f}catch(n){if(n.status===404&&!r?.isRetry)return await Y_(),await Gu(),await xs(e,t,{isRetry:!0});throw n}}async function Y_(){let e=$.context.getAuditLogsDB(),r=(await e.allDocs($.db.getDocParams($.DocumentType.AUDIT_LOG,null,{include_docs:!0}))).rows.map(a=>a.doc).filter(a=>a&&!a.type).map(a=>({...a,type:Ue.AUDIT_LOG_TYPE}));await e.bulkDocs(r)}function Gf(e){let t=$.context.getAuditLogsDB(),r=new Nf,a=t.dump(r,{filter:o=>{let s=o;if(!s._id?.startsWith($.DocumentType.AUDIT_LOG))return!1;let i=!0,p=(f,m)=>{!f||f.length===0||(i=!!(i&&m&&f.includes(m)))};if(p(e.userIds,s.userId),p(e.appIds,s.appId),p(e.events,s.event),(e.startDate||e.endDate)&&(i=i&&s.timestamp>=e.startDate&&s.timestamp<=e.endDate),e.fullSearch){let f=JSON.stringify(o);i=i&&f.includes(e.fullSearch)}return i}}),n=new Nf;return r.on("data",o=>{let s=JSON.parse(Buffer.from(o).toString());if(Array.isArray(s.docs)){let i="";for(let p of s.docs)i+=JSON.stringify(p)+`
38
- `;n.write(i)}}),r.on("end",()=>{n.end()}),{promise:a,stream:n}}var ce=require("@budibase/backend-core");var wn=require("@budibase/types"),ha=require("@budibase/string-templates"),Aa=require("@budibase/backend-core"),z_=Aa.constants.MIN_VALID_DATE.toISOString(),J_=Aa.constants.MAX_VALID_DATE.toISOString();function _s(e){return(e.startDate||e.endDate)&&(e.startDate=e.startDate||z_,e.endDate=e.endDate||J_),e}async function kf(e){Array.isArray(e.appIds)&&(e.appIds=e.appIds.map(a=>Aa.db.getProdAppID(a)));let t={};function r(a,n){n?.length&&(t.oneOf={...t.oneOf,[a]:n})}return r("userId",e.userIds),r("appId",e.appIds),r("event",e.events),e.fullSearch&&(t.fuzzyOr=!0,t.fuzzy={name:e.fullSearch,fallback:e.fullSearch}),(e.startDate||e.endDate)&&(e=_s(e),t.range={timestamp:{high:e.endDate,low:e.startDate}}),Object.keys(t).length===0&&(t.notEmpty={event:!0}),t}function Os(e,t,r){let a={_id:e,status:wn.AuditLogResourceStatus.DELETED};switch(t){case"app":a.name=r?.appName;break;case"user":a.email=r?.email;break}return a}function Ps(e){let t=(0,ha.findHBSBlocks)(e);for(let r of t){let a=` "${r}"`;e=e.replace(e.includes(a)?a:` ${r}`,""),e=(0,ha.processStringSync)(e,{})}return e}function Ff(e,t){let r=wn.AuditedEventFriendlyName[e];if(!r)throw new Error("No friendly name found.");let a=(0,ha.processStringSync)(r,t);return a.includes('""')&&(a=Ps(r)),a}async function X_(e,t,r){if(!await ln()||!ce.utils.isAudited(e))return;let a=Ff(e,t),n=new Date;r?.timestamp&&(n=new Date(r.timestamp));let o={timestamp:n.toISOString(),event:e,name:a,userId:r?.userId||Tn.AuditLogSystemUser,metadata:{...t,...r?.hostInfo}},s={};try{if(r?.appId){o.appId=ce.db.getProdAppID(r.appId);let i=await ce.cache.app.getAppMetadata(r.appId);"name"in i&&(s.appName=i.name)}if(r?.userId){let i=await ce.users.getById(r?.userId);s.email=i.email}}catch(i){ce.logging.logAlert("Failed to retrieve fallback information for audit log",i)}return o.fallback=s,await Mf(o)}async function Z_(e){let t=e.map(i=>i.userId),a=e.filter(i=>i.appId).map(i=>ce.db.getDevAppID(i.appId)),n=await ce.users.bulkGetGlobalUsersById([...new Set(t)],{cleanup:!0}),o=await ce.db.getAppsByIDs([...new Set(a)]),s=[];for(let i of e){let p=n.find(y=>y?._id===i.userId),f=o.find(y=>ce.db.isSameAppID(y?.appId,i.appId)),m={event:i.event,timestamp:i.timestamp,name:i.name,metadata:i.metadata,user:p||Os(i.userId,"user",i.fallback)};i.appId&&(m.app=f||Os(i.appId,"app",i.fallback)),s.push(m)}return s}async function eO(e){if(!await ln())throw new Error("Audit logs not available - license required.");let t=await kf(e);if(typeof e.bookmark=="string")throw new Error("String based bookmark not supported.");let r=await xs(t,e.bookmark);return{hasNextPage:r.hasNextPage,bookmark:r.bookmark,data:await Z_(r.rows)}}function tO(e){return e=_s(e),Gf(e)}function rO(){let e=Object.entries(Tn.AuditedEventFriendlyName).filter(r=>r[1]!=null),t={};for(let r of e)t[r[0]]=Ps(r[1]);return t}var vn={};w(vn,{applications:()=>Us,roles:()=>Cs,users:()=>Ls});var Ls={};w(Ls,{roleCheck:()=>nO});function aO(e,t){let r=e.request.body;return r.builder&&(r.builder=t?.builder||void 0),r.admin&&(r.admin=t?.admin||void 0),r.roles&&(r.roles=t?.roles||{}),e.request.body=r,e}async function nO(e,t){return await Ze()||aO(e,t),e}var Cs={};w(Cs,{assign:()=>oO,unAssign:()=>sO});var ba=require("@budibase/backend-core");async function oO(e,t){if(!await Ze())throw new Error("Unable to assign roles - license required.");let r=await $e.bulkGet(e);for(let a of r){if(t.role&&t.role.roleId){let n=ba.db.getProdAppID(t.role.appId);a.roles[n]=t.role.roleId}if(t.appBuilder){let n=ba.db.getProdAppID(t.appBuilder.appId),o=a.builder?.apps||[];a.builder={apps:o.concat([n])}}t.builder&&(a.builder={global:!0}),t.admin&&(a.admin={global:!0}),a.roles}await $e.bulkUpdate(r)}async function sO(e,t){if(!await Ze())throw new Error("Unable to un-assign roles - license required.");let r=await $e.bulkGet(e);for(let a of r){if(t.role){let n=ba.db.getProdAppID(t.role?.appId);a.roles[n]===t.role.roleId&&delete a.roles[n]}if(t.appBuilder&&a.builder?.apps){let n=ba.db.getProdAppID(t.appBuilder.appId);a.builder.apps=a.builder.apps.filter(o=>o!==n)}t.builder&&a.builder&&delete a.builder,t.admin&&a.admin&&delete a.admin}}var Us={};w(Us,{buildExportFn:()=>uO,buildImportFn:()=>iO});var qs=require("@budibase/backend-core");function iO(e){return async(t,r)=>{await Ze()||t.throw(403,"Endpoint unavailable, license required."),t.request.files?.appExport||t.throw(400,"Must provide app export file for import."),await qs.context.doInAppContext(t.params.appId,async()=>{await e(t),t.body=void 0,t.status=204,await r()})}}function uO(e){return async(t,r)=>{await Ze()||t.throw(403,"Endpoint unavailable, license required.");let{encryptPassword:a,excludeRows:n}=t.request.body;await qs.context.doInAppContext(t.params.appId,async()=>{t.request.body={encryptPassword:a,excludeRows:n},t.query.appId=t.params.appId,await e(t),await r()})}}var Ve=require("@budibase/backend-core"),ie=require("@budibase/types");var Ds=require("@budibase/backend-core"),Qf;function jf(){Qf=new Ds.queue.BudibaseQueue(Ds.queue.JobQueue.APP_BACKUP,{maxStalledCount:3,jobOptions:{attempts:3,removeOnFail:!0,removeOnComplete:!0}})}function Ut(){return Qf}var Wf=require("path"),$f=C(require("fs"));async function Ns(e,t={}){return we.storeAppBackupMetadata(e,t)}function Kf(e){let t=new Date().toISOString();switch(e){case ie.AppBackupStatus.COMPLETE:case ie.AppBackupStatus.FAILED:return{timestamp:t,finishedAt:t};case ie.AppBackupStatus.STARTED:return{timestamp:t,startedAt:t};case ie.AppBackupStatus.PENDING:return{timestamp:t,createdAt:t}}}async function pO(e,t,r,a){let n=await En(e);return await we.storeAppBackupMetadata({...n,...Kf(t),contents:r,status:t,type:ie.AppBackupType.BACKUP},{filename:a,docId:e})}async function cO(e,t,r){let a=await En(e);return await we.storeAppBackupMetadata({...a,...Kf(r),status:r,type:ie.AppBackupType.RESTORE,trigger:ie.AppBackupTrigger.MANUAL},{docId:e,docRev:t})}async function En(e){return we.getAppBackupMetadata(e)}async function lO(e,t){return we.updateAppBackupMetadata(e,t)}async function dO(e){let t=await we.getAppBackupMetadata(e);return t.filename&&await Ve.objectStore.deleteFile(Ve.objectStore.ObjectStoreBuckets.BACKUPS,t.filename),we.deleteAppBackupMetadata(e)}async function fO(e,t){return we.fetchAppBackups(e,t)}async function Vf(e){let t=await we.getAppBackupMetadata(e);if(!t.filename)throw new Error("Backup incomplete - cannot download.");let r=await Ve.objectStore.getReadStream(Ve.objectStore.ObjectStoreBuckets.BACKUPS,t.filename);return{metadata:t,stream:r}}async function mO(e){let{stream:t}=await Vf(e),r=(0,Wf.join)(Ve.objectStore.budibaseTempDir(),Ve.utils.newid()),a=$f.default.createWriteStream(r);return new Promise((n,o)=>{t.on("error",o),a.on("error",o),t.pipe(a).on("close",()=>n(r))})}async function gO(e,t,r={}){let a;try{a=await Ns({appId:e,trigger:t,timestamp:new Date().toISOString(),status:ie.AppBackupStatus.PENDING,type:ie.AppBackupType.BACKUP,...r})}catch(n){if(n.status===409)return;throw n}return await Ut().add({docId:a.id,docRev:a.rev,appId:e,export:{trigger:t,...r}}),await Ve.events.backup.appBackupTriggered(e,a.id,ie.AppBackupType.BACKUP,t,r?.name),a.id}async function yO(e,t,r,a){let n=await En(t),o;try{o=await Ns({appId:e,timestamp:new Date().toISOString(),status:ie.AppBackupStatus.PENDING,type:ie.AppBackupType.RESTORE,createdBy:a})}catch(s){if(s?.status===409)return;throw s}return await Ut().add({appId:e,docId:o.id,docRev:o.rev,import:{nameForBackup:r,backupId:t,createdBy:a}}),{restoreId:o.id,metadata:n}}var hO={isEnabled:rs,triggerAppRestore:ye(yO),triggerAppBackup:ye(gO),getBackupDownloadStream:ye(Vf),downloadAppBackup:ye(mO),fetchAppBackups:ye(fO),storeAppBackupMetadata:ye(Ns),updateBackupStatus:ye(pO),updateRestoreStatus:ye(cO),getAppBackup:ye(En),updateAppBackup:ye(lO),deleteAppBackup:ye(dO)},at=hO;var Ms={};w(Ms,{init:()=>Bs});var z=require("@budibase/backend-core");var De=require("@budibase/types");var dr=C(require("fs"));async function Bs(e){Ut().process(async t=>{let r=t.data;try{if(r.export)return IO(t,e);if(r.import)return bO(t,e)}catch(a){z.logging.logAlert(`Failed to perform backup for app ID: ${r.appId}`,a)}})}async function AO(e){await z.db.getDB(e,{skip_setup:!0}).destroy()}async function Yf(e,t,r,a){let n=z.db.getDevAppID(r),o=z.db.getProdAppID(r),s=new Date().toISOString(),i=async(p,f)=>{a?.doc?await at.updateBackupStatus(a.doc.id,p,f?.contents,f?.filename):await at.storeAppBackupMetadata({appId:o,timestamp:s,trigger:e,status:p,name:a?.name,type:De.AppBackupType.BACKUP,contents:f?.contents,createdBy:a?.createdBy},{filename:f?.filename})};try{let p=await a.processing.exportAppFn(n,{tar:!0}),f=await a.processing.statsFn(n),m=`${o}/backup-${s}.tar.gz`,y=z.objectStore.ObjectStoreBuckets.BACKUPS,g=dr.default.createReadStream(p);await z.objectStore.streamUpload({bucket:y,filename:m,stream:g,extra:{type:"application/gzip",metadata:{name:a?.name,trigger:e,timestamp:s,appId:o}}}),await i(De.AppBackupStatus.COMPLETE,{filename:m,contents:f}),dr.default.existsSync(p)&&dr.default.rmSync(p)}catch(p){z.logging.logAlert("App backup error",p),await i(De.AppBackupStatus.FAILED)}}async function bO(e,t){let r=e.data,a=r.appId,n=r.import.backupId,o=r.import.nameForBackup,s=r.import.createdBy,i=z.tenancy.getTenantIDFromAppID(a);return z.tenancy.doInTenant(i,async()=>{let p=z.db.getDevAppID(a),{rev:f}=await at.updateRestoreStatus(r.docId,r.docRev,De.AppBackupStatus.STARTED);await Yf(De.AppBackupTrigger.RESTORING,i,a,{processing:t,createdBy:s,name:o});let m=await at.downloadAppBackup(n);await AO(p);let y=De.AppBackupStatus.COMPLETE;try{await t.importAppFn(p,z.db.getDB(p),{file:{type:"application/gzip",path:m},key:m})}catch(g){z.logging.logAlert("App restore error",g),y=De.AppBackupStatus.FAILED}await at.updateRestoreStatus(r.docId,f,y),dr.default.existsSync(m)&&dr.default.rmSync(m,{force:!0})})}async function IO(e,t){let r=e.data,a=r.appId,n=r.export.trigger,o=r.export.name,s=z.tenancy.getTenantIDFromAppID(a);await z.tenancy.doInTenant(s,async()=>{try{let{rev:i}=await at.updateBackupStatus(r.docId,De.AppBackupStatus.STARTED);return Yf(n,s,a,{processing:t,doc:{id:r.docId,rev:i},name:o})}catch(i){z.logging.logAlert("App backup error",i)}})}var SO=async e=>{jf(),await Bs(e.processing)},ve={...at,processing:Ms,init:SO,getBackupQueue:Ut};var Hf=async e=>{e.backups&&await ve.init(e.backups)};var de={};w(de,{create:()=>mM,find:()=>fM,get:()=>dM,remove:()=>yM,update:()=>gM});var hA=C(qi()),nt=require("@budibase/backend-core");var AA=require("@budibase/types");async function dM(e){let t=nt.tenancy.getGlobalDB(),r=new nt.db.QueryBuilder(t.name,AA.SearchIndex.USER);r.setIndexBuilder(nt.db.searchIndexes.createUserIndex),r.setLimit(e.pageSize),r.addEqual("scimInfo.isSync",!0);for(let[n,o]of Object.entries(e.filters?.equal??{}))r.addEqual(n,o);r.setSort("_id"),r.setSkip(e.skip);let a=await r.run();return{users:a.rows,total:a.totalRows}}async function fM(e){return await nt.users.getById(e)}async function mM(e){let t=await $e.getUserByEmail(e.email);if(t){if(t.scimInfo?.isSync)throw new nt.HTTPError("User is already synched",409);e={...t,scimInfo:(0,hA.default)(t.scimInfo,e.scimInfo),password:void 0,firstName:e.firstName,lastName:e.lastName,updatedAt:e.updatedAt}}return await $e.save(e,{requirePassword:!1})}async function gM(e,t){return await $e.save(e,{requirePassword:!1,allowChangingEmail:t?.allowChangingEmail})}async function yM(e){return await $e.destroy(e)}var Ar={};w(Ar,{create:()=>hM});var bA=C(qi());var IA=require("@budibase/backend-core");async function hM(e){let t=await so(e.name),r;if(!t)r=(await Q.save(e)).id;else{if(t.scimInfo?.isSync)throw new IA.HTTPError("Group is already synched",409);r=t._id,t.users&&(await Q.removeUsers(r,t.users.map(n=>n._id)),delete t.users),t.scimInfo=(0,bA.default)(t.scimInfo,e.scimInfo),await Q.save(t)}return await Q.get(r)}var Nt={};w(Nt,{logRequest:()=>AM,logResponse:()=>bM});var Ui=require("@budibase/backend-core");async function AM(e){Ui.logging.logWarn("SCIM request log",e)}async function bM(e){Ui.logging.logWarn("SCIM response error",e)}var ki={};w(ki,{doInScimContext:()=>Ni,feature:()=>j,internalGroupOnly:()=>kn,licenseAuth:()=>TA,licensing:()=>SA,requireSCIM:()=>Bi,scimGroupOnly:()=>Ta,scimUserOnly:()=>wa});var yt=require("@budibase/backend-core");var Mn=require("@budibase/types"),IM=(e={checkUsersLimit:!0})=>async(t,r)=>{if((e.licensingCheck?e.licensingCheck:()=>!!t.user)(t)){if(yt.env.SELF_HOSTED&&yt.env.DEFAULT_LICENSE)return t.user.license=uo,r();t.user.license=await Fe.cache.getCachedLicense(t,{populateLicense:e.populateLicense,populateFreeLicense:e.populateFreeLicense}),e.checkUsersLimit&&(yt.utils.isServingApp(t)||yt.utils.isServingBuilder(t)||yt.utils.isServingBuilderPreview(t)||yt.utils.isPublicApiRequest(t))&&await We.usageLimitIsExceeded(Mn.StaticQuotaName.USERS,Mn.QuotaUsageType.STATIC)}return r()},SA=IM;var j={};w(j,{requireFeature:()=>SM,requireFeatures:()=>wM});var SM=e=>async(t,r)=>{await cn(e),await r()},wM=(...e)=>async(t,r)=>{await ts(e),await r()};var Gn=require("@budibase/backend-core");var Ni=async(e,t)=>(Gn.env.DISABLE_SCIM_CALLS||await Nt.logRequest({...e.request.toJSON(),body:e.request.body}),await Gn.context.doInScimContext(async()=>{let r=await t();return await Nt.logResponse({...e.response.toJSON(),body:e.response.body}),r}));var Bi=async(e,t)=>{await os(),await t()};var wA=require("@budibase/backend-core");var wa=e=>Mi(wA.users.getById,e,!0),Ta=e=>Mi(M.get,e,!0),kn=e=>Mi(M.get,e,!1);function Mi(e,t,r){return async(a,n)=>{let o=a.params[t];return typeof o!="string"&&a.throw(404),!!(await e(o)).scimInfo?.isSync!==r&&a.throw(404),n()}}var va=require("@budibase/backend-core");var Gi=require("dd-trace");async function TA(e,t){await Gi.tracer.trace("licenseAuth",async r=>{let a=e.request.headers[va.constants.Header.LICENSE_KEY];Array.isArray(a)&&(a=a[0]),r.addTags({licenseKey:a}),a||e.throw(403,"License key not provided");let n=await zo(a);n||(r.addTags({licenseFound:!1}),e.throw(403,"License not found or invalid")),n.tenantId||e.throw(403,"License does not have a tenant ID"),Gi.tracer.setUser({id:"anonymous",tenantId:n.tenantId}),await va.context.doInSelfHostTenantUsingCloud(n.tenantId,async()=>{await va.context.doInLicenseContext(n,async()=>{await t()})})})}var Hi={};w(Hi,{appBackups:()=>ub,auditLogs:()=>XA,environmentVariables:()=>WA,groups:()=>DA,scim:()=>Gb,users:()=>Wb});async function vA(e){let t=e.request.body;if(t.name=t.name.trim(),delete t.roles,t._id){let a=await qt(t._id);t.roles=a.roles,t.scimInfo=a.scimInfo}let r=await lr(t);e.body={_id:r.id,_rev:r.rev}}async function EA(e){let t=e.params.groupId,r=e.request.body.add,a=e.request.body.remove;(r&&!Array.isArray(r)||a&&!Array.isArray(a))&&e.throw(400,"Must supply a list of users to add or to remove");let n,o;r&&(n=await gs(t,r)),a&&(o=await ys(t,a)),e.body={added:n,removed:o}}async function RA(e){let t=e.params.groupId,r=e.request.body.add,a=e.request.body.remove;(r&&!Array.isArray(r)||a&&!Array.isArray(a))&&e.throw(400,"Must supply a list of objects, with appId and roleId to add or remove"),e.body=await hs(t,{appsToAdd:r,appsToRemove:a})}async function xA(e){e.body={data:await ma()}}async function _A(e){let{groupId:t,rev:r}=e.params;try{await ms(t,r),e.body={message:"Group deleted successfully"}}catch(a){e.throw(a.status,a)}}async function OA(e){try{e.body=await qt(e.params.groupId)}catch(t){e.throw(t.status,t)}}async function PA(e){let{pageSize:t=10,bookmark:r,emailSearch:a}=e.request.query,n=e.params.groupId,o={limit:t+1},s=await Ma(n,{...o,emailSearch:a,bookmark:r}),i=a?s[t]?.email:s[t]?._id,p=!!i;e.body={users:s.slice(0,t),bookmark:i,hasNextPage:p}}async function LA(e){let{groupId:t,appId:r}=e.params;await As(t,r),e.body={message:"Group app builder access updated."}}async function CA(e){let{groupId:t,appId:r}=e.params;await bs(t,r),e.body={message:"group app builder access removed."}}var qA=C(require("@koa/router")),he=C(require("joi"));var Ee=require("@budibase/types"),Ye=require("@budibase/backend-core"),UA=new qA.default;function vM(){return Ye.auth.joiValidator.body(he.default.object({_id:he.default.string().optional(),_rev:he.default.string().optional(),color:he.default.string().required(),icon:he.default.string().required(),name:he.default.string().trim().required().max(50),role:he.default.string().optional(),users:he.default.array().optional(),apps:he.default.array().optional(),roles:he.default.object().optional(),createdAt:he.default.string().optional(),updatedAt:he.default.string().optional()}).required())}UA.post("/api/global/groups",Ye.auth.adminOnly,j.requireFeature(Ee.Feature.USER_GROUPS),vM(),vA).get("/api/global/groups",j.requireFeature(Ee.Feature.USER_GROUPS),xA).delete("/api/global/groups/:groupId/:rev",j.requireFeature(Ee.Feature.USER_GROUPS),Ye.auth.adminOnly,kn("groupId"),_A).get("/api/global/groups/:groupId",j.requireFeature(Ee.Feature.USER_GROUPS),Ye.auth.builderOrAdmin,OA).get("/api/global/groups/:groupId/users",j.requireFeature(Ee.Feature.USER_GROUPS),Ye.auth.builderOrAdmin,PA).post("/api/global/groups/:groupId/users",Ye.auth.adminOnly,j.requireFeature(Ee.Feature.USER_GROUPS),kn("groupId"),EA).post("/api/global/groups/:groupId/apps",Ye.auth.builderOrAdmin,j.requireFeature(Ee.Feature.USER_GROUPS),RA).post("/api/global/groups/:groupId/app/:appId/builder",Ye.auth.builderOrAdmin,j.requireFeatures(Ee.Feature.USER_GROUPS,Ee.Feature.APP_BUILDERS),LA).delete("/api/global/groups/:groupId/app/:appId/builder",Ye.auth.builderOrAdmin,j.requireFeatures(Ee.Feature.USER_GROUPS,Ee.Feature.APP_BUILDERS),CA);var DA=UA;var Fi=require("@budibase/types");var Qi=require("@budibase/backend-core");async function NA(e){e.body={encryptionKeyAvailable:Ke.isEncryptionKeyAvailable()}}async function BA(e){e.body={variables:await Ke.fetch()}}async function MA(e){let{name:t,production:r,development:a}=e.request.body;await Ke.update(t,{production:r,development:a});let n=[Fi.AppEnvironment.PRODUCTION];r!==a&&n.push(Fi.AppEnvironment.DEVELOPMENT),await Qi.events.environmentVariable.created(t,n),e.body={message:`Environment variable "${t}" created.`}}async function GA(e){let{production:t,development:r}=e.request.body,a=e.params.varName;await Ke.update(a,{production:t,development:r}),e.body={message:`Environment variable "${a}" updated.`}}async function kA(e){let t=e.params.varName;await Ke.remove(t),await Qi.events.environmentVariable.deleted(t),e.body={message:`Environment variable "${t}" deleted.`}}var Bt=require("@budibase/backend-core"),QA=C(require("@koa/router")),Ea=C(require("joi")),jA=new QA.default;function FA(){return Bt.auth.joiValidator.body(Ea.default.object({name:Ea.default.string().optional(),production:Ea.default.string().required(),development:Ea.default.string().required()}))}jA.get("/api/env/variables/status",Bt.auth.builderOrAdmin,NA).get("/api/env/variables",Bt.auth.builderOrAdmin,BA).post("/api/env/variables",Bt.auth.builderOrAdmin,FA(),MA).patch("/api/env/variables/:varName",Bt.auth.builderOrAdmin,FA(),GA).delete("/api/env/variables/:varName",Bt.auth.builderOrAdmin,kA);var WA=jA;var ji=require("@budibase/backend-core");async function $A(e){let t=e.request.body,r=await gt.fetch(t);await ji.events.auditLog.filtered(t),e.body=r}async function KA(e){let t=e.request.body,{stream:r}=gt.download(t);await ji.events.auditLog.downloaded(t),e.attachment(`audit-logs-${Date.now()}.log`),e.body=r}async function VA(e){e.body={events:gt.definitions()}}var HA=require("@budibase/types"),Mt=require("@budibase/backend-core"),zA=C(require("@koa/router")),Re=C(require("joi"));function YA(){return Mt.auth.joiValidator.body(Re.default.object({userIds:Re.default.array().items(Re.default.string()).optional(),appIds:Re.default.array().items(Re.default.string()).optional(),events:Re.default.array().items(Re.default.string().valid(...Object.values(HA.Event))).optional(),startDate:Re.default.string().optional().allow(""),endDate:Re.default.string().optional().allow(""),fullSearch:Re.default.string().optional().allow(""),bookmark:Re.default.number()}))}var JA=new zA.default;JA.post("/api/global/auditlogs/search",Mt.auth.adminOnly,YA(),$A).get("/api/global/auditlogs/download",Mt.auth.adminOnly,Mt.middleware.querystringToBody,YA(),KA).get("/api/global/auditlogs/definitions",Mt.auth.adminOnly,VA);var XA=JA;var Wi=require("@budibase/types");var ZA=require("@budibase/backend-core");async function br(e,t){await Kt.appExists(t)||e.throw(400,`Provided app ID: ${t} - is invalid.`)}async function eb(e){let t=e.params.appId;await br(e,t);let r=e.request.body,a=e.user?._id,n=await ve.triggerAppBackup(t,Wi.AppBackupTrigger.MANUAL,{name:r.name,createdBy:a});n||e.throw(500,"Unable to start backup."),e.body={backupId:n,message:"Backup triggered - process starting."}}async function tb(e){let t=e.params.appId;await br(e,t);let r=e.params.backupId,a=e.request.body.name,n=await ve.triggerAppRestore(t,r,a,e.user?._id);n||e.throw(500,"Unable to start restore."),await ZA.events.backup.appBackupRestored(n.metadata),e.body={restoredId:n?.restoreId,message:"Restore triggered - process starting."}}async function rb(e){let t=e.params.appId;await br(e,t);let r=e.params.backupId;await ve.deleteAppBackup(r),e.body={message:"Backup deleted successfully."}}async function ab(e){let t=e.params.appId;await br(e,t);let r=e.request.body;r?.trigger&&(r.trigger=r.trigger.toLowerCase(),Object.values(Wi.AppBackupTrigger).includes(r.trigger)||e.throw(400,"Provided trigger is not a valid option.")),e.body=await ve.fetchAppBackups(t,{paginate:!0,...r})}async function nb(e){let t=e.params.appId;await br(e,t);let r=e.params.backupId,a=e.request.body;e.body=await ve.updateAppBackup(r,a.name)}async function ob(e){let t=e.params.appId;await br(e,t);let r=e.params.backupId,{metadata:a,stream:n}=await ve.getBackupDownloadStream(r);e.attachment(`backup-${a.timestamp}.tar.gz`),e.body=n}var sb=C(require("@koa/router")),Gt=C(require("joi")),Fn=require("@budibase/types"),ht=require("@budibase/backend-core"),ib=new sb.default;function _M(){return ht.auth.joiValidator.body(Gt.default.object({trigger:Gt.default.string().valid(...Object.values(Fn.AppBackupTrigger)),type:Gt.default.string().valid(...Object.values(Fn.AppBackupType)),startDate:Gt.default.date(),endDate:Gt.default.date(),page:Gt.default.string()}))}ib.post("/api/apps/:appId/backups",ht.auth.builderOrAdmin,eb).post("/api/apps/:appId/backups/search",ht.auth.builderOrAdmin,_M(),ab).get("/api/apps/:appId/backups/:backupId/file",ht.auth.builderOrAdmin,ob).patch("/api/apps/:appId/backups/:backupId",ht.auth.builderOrAdmin,nb).delete("/api/apps/:appId/backups/:backupId",ht.auth.builderOrAdmin,rb).post("/api/apps/:appId/backups/:backupId/import",ht.auth.builderOrAdmin,tb);var ub=ib;var Mb=C(require("@koa/router"));var Qn=require("scim-patch");var cb=require("@budibase/backend-core");function pb(e,t){let r=e.request.query[t];if(r!==void 0)return+r}var lb=async e=>{let t=pb(e,"pageSize")??20,r=pb(e,"startIndex"),a;e.request.query.filter&&(a=K.user.userFilters(e.request.query.filter));let n=await de.get({pageSize:t,skip:r,filters:a});e.body={schemas:["urn:ietf:params:scim:api:messages:2.0:ListResponse"],totalResults:n.total,Resources:n.users.map(K.user.toScimUserResponse),startIndex:(r||0)+1,itemsPerPage:t}},fb=async e=>{let{id:t}=e.params;typeof t!="string"&&e.throw(404);let r=await de.find(t);e.body=K.user.toScimUserResponse(r)},mb=async e=>{let t=K.user.fromScimUser(e.request.body);try{let r=await de.create(t);e.body=K.user.toScimUserResponse(r)}catch(r){throw r instanceof cb.EmailUnavailableError&&e.throw(409,"Email already in use"),r}};function OM(e){let t=e.Operations.find(r=>(r.op==="Replace"||r.op==="replace")&&r.path==="active");return t?t.value===!1||t.value?.toLowerCase?.()==="false":!1}var gb=async e=>{let t=await de.find(e.params.id);t||e.throw(404);let r=K.user.toScimUserResponse(t),a=e.request.body;try{(0,Qn.patchBodyValidation)(a)}catch{}if(OM(a))return $i(e);let n;try{n=(0,Qn.scimPatch)(r,a.Operations)}catch{}n||e.throw(500);let o=K.user.fromScimUser(n);await de.update(o,{allowChangingEmail:!0}),e.body=K.user.toScimUserResponse(o)},$i=async e=>{let{id:t}=e.params;typeof t!="string"&&e.throw(404),await de.remove(t),e.status=204};var Pb=C(Ob()),Lb=require("@budibase/shared-core"),jn=require("scim-patch");var Wn=require("scim2-parse-filter");function Cb(e,t){for(let r of t.split(","))delete e[r]}var qb=async e=>{let r=(await Q.fetch()).filter(o=>o.scimInfo?.isSync).map(K.group.toScimGroupResponse),{filter:a,excludedAttributes:n}=e.request.query;if(a){let o=(0,Wn.filter)((0,Wn.parse)(a));r=r.filter(o)}n&&r.forEach(o=>{Cb(o,n)}),e.body={schemas:["urn:ietf:params:scim:api:messages:2.0:ListResponse"],totalResults:r.length,Resources:r,startIndex:1,itemsPerPage:r.length}},Ub=async e=>{let t=K.group.fromScimGroup(e.request.body),r=await Ar.create(t);e.body=K.group.toScimGroupResponse(r)},Db=async e=>{let{id:t}=e.params,r=await Q.get(t),a=K.group.toScimGroupResponse(r),{excludedAttributes:n}=e.request.query;n&&Cb(a,n),e.body=a},Nb=async e=>{let{id:t}=e.params,r=await Q.get(t);await Q.remove(t,r._rev),e.status=204},Bb=async e=>{let{id:t}=e.params,r=await Q.get(t),a=K.group.toScimGroupResponse(r),n=e.request.body;try{(0,jn.patchBodyValidation)(n)}catch{e.throw(400)}let{true:o,false:s}=(0,Pb.default)(n.Operations,i=>i.path==="members");if(s?.length){let i=(0,jn.scimPatch)(a,s);i||e.throw(500);let p={...K.group.fromScimGroup(i),_rev:r._rev};await Q.save(p)}if(o?.length){let i=[],p=[];for(let{op:f,value:m}of o)switch(f){case"add":case"Add":for(let y of m)i.push(await de.find(y.value));break;case"remove":case"Remove":for(let y of m)p.push(await de.find(y.value));break;case"replace":case"Replace":throw new Error("Replacing members is not allowed");default:Lb.utils.unreachable(f)}i.length&&await Q.addUsers(t,i.map(f=>f._id)),p.length&&await Q.removeUsers(t,p.map(f=>f._id))}e.body=K.group.toScimGroupResponse(await Q.get(t))};var Ra=require("@budibase/types"),Ae=new Mb.default({prefix:"/api/global/scim/v2"});Ae.use(Bi);Ae.use(Ni);Ae.get("/users",lb);Ae.get("/users/:id",wa("id"),fb);Ae.post("/users",mb);Ae.patch("/users/:id",wa("id"),gb);Ae.delete("/users/:id",wa("id"),$i);Ae.get("/groups",qb);Ae.post("/groups",j.requireFeature(Ra.Feature.USER_GROUPS),Ub);Ae.get("/groups/:id",j.requireFeature(Ra.Feature.USER_GROUPS),Ta("id"),Db);Ae.delete("/groups/:id",j.requireFeature(Ra.Feature.USER_GROUPS),Ta("id"),Nb);Ae.patch("/groups/:id",j.requireFeature(Ra.Feature.USER_GROUPS),Ta("id"),Bb);var Gb=Ae;var Qb=C(require("@koa/router"));var Ki=require("@budibase/backend-core");async function kb(e){let{userId:t,appId:r}=e.params,a=await tt.db.getUser(t);if(Ki.users.isGlobalBuilder(a)){e.body={message:"User already admin - no permissions updated."};return}await tt.addAppBuilder(a,r),e.body={message:`User "${a.email}" app builder access updated.`}}async function Fb(e){let{userId:t,appId:r}=e.params,a=await tt.db.getUser(t);if(Ki.users.isGlobalBuilder(a)){e.body={message:"User already admin - no permissions removed."};return}await tt.removeAppBuilder(a,r),e.body={message:`User "${a.email}" app builder access removed.`}}var Vi=require("@budibase/types"),Yi=require("@budibase/backend-core"),jb=new Qb.default;jb.post("/api/global/users/:userId/app/:appId/builder",Yi.auth.builderOrAdmin,j.requireFeatures(Vi.Feature.APP_BUILDERS),kb).delete("/api/global/users/:userId/app/:appId/builder",Yi.auth.builderOrAdmin,j.requireFeatures(Vi.Feature.APP_BUILDERS),Fb);var Wb=jb;var K={};w(K,{group:()=>Ji,user:()=>zi});var zi={};w(zi,{fromScimUser:()=>nG,toScimUserResponse:()=>tG,userFilters:()=>oG});var $n=require("@budibase/types"),$b=require("scim2-parse-filter"),Kb=require("@budibase/backend-core"),Vb=require("@budibase/shared-core"),{unreachable:eG}=Vb.utils,tG=e=>{let{isSync:t,roles:r,...a}=e.scimInfo||{},n={...a,schemas:["urn:ietf:params:scim:schemas:core:2.0:User"],id:e._id,meta:{resourceType:"User",created:new Date(e.createdAt),lastModified:new Date(e.updatedAt)},active:e.status===$n.UserStatus.ACTIVE};return(e.firstName||e.lastName)&&(n.name={formatted:[e.firstName,e.lastName].filter(o=>o).join(" "),familyName:e.lastName,givenName:e.firstName}),n},rG=e=>!!e?.id;function aG(e){if(Kb.utils.validEmail(e.userName))return e.userName;if(e.emails)return e.emails.find(t=>t.primary)?.value||e.emails[0]?.value}var nG=e=>{let t=rG(e)?e:void 0,r=aG(e);if(!r)throw new Error("Email is required");let a;switch(e.active){case"True":case"true":case!0:a=!0;break;case"False":case"false":case!1:a=!1;break;default:eG(e.active)}let n,o;return e.name?.givenName?(n=e.name?.givenName,o=e.name?.familyName):n=e.displayName,{tenantId:"",_id:t?.id,userId:t?.id,email:r,firstName:n,lastName:o,scimInfo:{...e,isSync:!0},roles:{},status:a?$n.UserStatus.ACTIVE:$n.UserStatus.INACTIVE,createdAt:t?.meta.created.getTime(),updatedAt:t?.meta.lastModified.toISOString()}},oG=e=>{let t={equal:{}},r=(0,$b.parse)(e);function a(n){switch(n.op){case"eq":{let o=n.attrPath,s;switch(o){case"emails.value":s="email";break;default:s=`scimInfo.${o}`}t.equal[s]=n.compValue;break}case"and":for(let o of n.filters)a(o);break;default:console.warn("Filter not handled",{filter:n})}}return a(r),t};var Ji={};w(Ji,{fromScimGroup:()=>uG,toScimGroupResponse:()=>sG});var sG=e=>({schemas:["urn:ietf:params:scim:schemas:core:2.0:Group"],id:e._id,externalId:e.scimInfo.externalId,meta:{resourceType:"Group",created:new Date(e.createdAt),lastModified:new Date(e.updatedAt)},displayName:e.name,members:e.users?.map(t=>({value:t._id}))}),iG=e=>!!e?.id,uG=e=>{let t=iG(e)?e:void 0;return{_id:t?.id,name:e.displayName,scimInfo:{externalId:e.externalId,isSync:!0},icon:"UserGroup",color:"var(--spectrum-global-color-blue-600)",createdAt:t?.meta.created.getTime(),updatedAt:t?.meta.lastModified.toISOString()}};var Iu={};w(Iu,{LLMRequest:()=>V,TableGeneration:()=>bu,agentHistoryTitleSystemPrompt:()=>AG,agentSystemPrompt:()=>hG,aiColumnSchemas:()=>hu,aiTableResponseToTableSchema:()=>fu,appendAIColumns:()=>mu,classifyText:()=>Zi,cleanData:()=>eu,generateAIColumns:()=>lu,generateCode:()=>yG,generateCronExpression:()=>tu,generateData:()=>du,generateJs:()=>ou,generateSQL:()=>gG,generateTables:()=>cu,generationStructure:()=>yu,getLLM:()=>_a,getLLMConfig:()=>pu,getLLMOrThrow:()=>tI,parseResponseFormat:()=>su,sanitiseToolName:()=>pG,searchWeb:()=>nu,sentimentAnalysis:()=>au,summarizeText:()=>Kn,tableDataStructuredOutput:()=>Au,translate:()=>ru});function pG(e){if(e.length>64)throw new Error("Tool name must be under 64 characters long");return e.replace(/[^a-zA-Z0-9_-]/g,"_")}var Hn=require("@budibase/types");var ze=require("@budibase/backend-core"),Jb=require("@budibase/types");var Hb=C(require("openai"));var At=require("@budibase/types");var Yb=require("@budibase/shared-core");var bt=C(require("dd-trace"));function Xi(e,t){return t.map(r=>e[r]).join(" ")}var It=class{constructor({model:t,apiKey:r,maxTokens:a}){this._model=t,this._apiKey=r,this._maxTokens=a??parseInt(process.env.BUDIBASE_AI_MAX_PROMPT_TOKENS||"300")}get model(){return this._model}get apiKey(){return this._apiKey}get maxTokens(){return this._maxTokens}async prompt(t){return await bt.default.trace("prompt",async()=>{let r=typeof t=="string"?new V().addUserMessage(t):t,{messages:a,tokensUsed:n}=await bt.default.trace("chatCompletion",()=>this.chatCompletion(r));return!a||a.length===0?{message:"",tokensUsed:n}:{message:a[a.length-1].content||"",tokensUsed:n}})}async chat(t){return await bt.default.trace("chat",async()=>await this.chatCompletion(t))}async summarizeText(t){return bt.default.trace("summarizeText",()=>this.prompt(Kn(t)))}async generateCronExpression(t){return bt.default.trace("generateCronExpression",()=>this.prompt(tu(t)))}async operation(t,r){return bt.default.trace("operation",a=>{a.addTags({operation:t.operation,rowId:r.id});let n=this.promptForOperation(t,r);return this.prompt(n)})}promptForOperation(t,r){let{operation:a,column:n,columns:o,language:s,categories:i,prompt:p}=t;switch(a){case At.AIOperationEnum.SUMMARISE_TEXT:return Kn(Xi(r,o));case At.AIOperationEnum.CLEAN_DATA:return eu(r[n]);case At.AIOperationEnum.TRANSLATE:return ru(r[n],s);case At.AIOperationEnum.CATEGORISE_TEXT:if(!i)throw Error("No categories provided for categorise text operation. Please provide categories.");return Zi(Xi(r,o),i.split(","));case At.AIOperationEnum.SENTIMENT_ANALYSIS:return au(r[n]);case At.AIOperationEnum.PROMPT:return p;case At.AIOperationEnum.SEARCH_WEB:return nu(Xi(r,o));default:throw Yb.utils.unreachable(a)}}async generateJs(t,r){return await bt.default.trace("generateJs",async()=>{let{bindings:a=[],snippets:n=[]}=r||{};return await this.prompt(ou(a,n).addUserMessage(t))})}};var zb=require("openai/helpers/zod");function su(e){if(e)return e==="text"?{type:"text"}:e==="json"?{type:"json_object"}:e}function cG(e){if(!e)return 0;let t=e.prompt_tokens;return e.completion_tokens*3+t}var ot=class extends It{constructor(r){super(r);if(!r.apiKey)throw new Error("No OpenAI API key found");this.client=new Hb.default({apiKey:r.apiKey})}async chatCompletion(r){let a={model:this.model,messages:r.messages,max_tokens:this.maxTokens,response_format:su(r.format)};r.tools&&r.tools.length>0&&(a.tool_choice="auto",a.tools=r.tools.map(zb.zodFunction));let n=await this.client.chat.completions.create(a),o=n.choices[0]?.message;if(o?.tool_calls){r.addMessage(o);let s=[];for(let i of o.tool_calls){let p=r.findTool(i.function.name);if(!p)throw new Error(`Tool ${i.function.name} not found in prompt tools`);let f=JSON.parse(i.function.arguments);s.push(p.handler(f).then(m=>({role:"tool",tool_call_id:i.id,content:m})))}return r.addMessages(await Promise.all(s)),this.chatCompletion(r)}else{if(o?.content)return{messages:[...r.messages,{role:o.role,content:o.content}],tokensUsed:cG(n.usage)};throw new Error("No response found")}}};var He=require("@budibase/backend-core");var iu=require("dd-trace"),Vn=class extends It{async prompt(t){let r=await super.prompt(t);return r.tokensUsed&&await yn(r.tokensUsed),r}async chat(t){let r=await super.chat(t);return r.tokensUsed&&await yn(r.tokensUsed),r}async chatCompletion(t){return He.env.SELF_HOSTED?this.chatCompletionSelfHost(t):this.chatCompletionCloud(t)}async chatCompletionCloud(t){return await iu.tracer.trace("chatCompletionCloud",async()=>await new ot({apiKey:He.env.OPENAI_API_KEY,model:this.model,maxTokens:this.maxTokens}).chatCompletion(t))}async chatCompletionSelfHost(t){return await iu.tracer.trace("chatCompletionSelfHost",async r=>{if(!He.env.BUDICLOUD_URL)throw new Error("No Budibase URL found");if(r.addTags({budicloudUrl:He.env.BUDICLOUD_URL}),!this._apiKey){let o=await Zo();if(!o)throw new Error("No license key found");this._apiKey=o,r.addTags({licenseKey:this._apiKey})}let a={messages:t.messages,format:t.format,useTools:t.tools.length>0},n=await fetch(`${He.env.BUDICLOUD_URL}/api/ai/chat`,{method:"POST",headers:{"Content-Type":"application/json",[He.constants.Header.LICENSE_KEY]:this._apiKey},body:JSON.stringify(a)});if(!n.ok)throw await He.HTTPError.fromResponse(n);return await n.json()})}};var xa=require("dd-trace");var uu=C(require("@anthropic-ai/sdk"));function lG(e){if(!e)return 0;let t=e.input_tokens;return e.output_tokens*3+t}var Yn=class extends It{constructor(r){super(r);this.client=new uu.default({apiKey:r.apiKey})}firstTextBlock(r){for(let a of r.content)if(a.type==="text")return a.text}async chatCompletion(r){try{let a=await this.client.messages.create({model:this.model,messages:r.messages.map(({content:o})=>({role:"user",content:o||""})),max_tokens:this.maxTokens}),n=this.firstTextBlock(a)||"";return{messages:[...r.messages,{role:"assistant",content:n}],tokensUsed:lG(a.usage)}}catch(a){throw a instanceof uu.default.APIError&&console.error(`Anthropic Prompt failed with error ${a.name} and status: ${a.status}`),a}}};var Xb=require("zod"),Zb=require("openai/helpers/zod"),eI="gpt-4o-mini",dG={OpenAI:ot,TogetherAI:ot,AzureOpenAI:ot,Custom:ot,Anthropic:Yn,BudibaseAI:Vn};async function fG(){return await xa.tracer.trace("getAIConfig",async e=>{let t={type:Jb.ConfigType.AI,config:{}};if(!ze.context.isSelfHostUsingCloud()){let a=await ze.configs.getAIConfig();a&&(t=a)}await ss(t);let r=Object.values(t.config).find(a=>a.active&&a.isDefault);if(!r){e.addTags({enabled:!1,reason:"no provider found"});return}return e.addTags({enabled:!0}),{provider:r.provider,model:r.defaultModel||eI,apiKey:r.apiKey}})}async function mG(){return xa.tracer.trace("getSelfHostOpenAIKeyConfig",e=>{if(!ze.env.SELF_HOSTED){e.addTags({enabled:!1,reason:"not self host"});return}if(!ze.env.OPENAI_API_KEY){e.addTags({enabled:!1,reason:"no OPENAI_API_KEY"});return}return e.addTags({enabled:!0}),{provider:"OpenAI",model:eI,apiKey:ze.env.OPENAI_API_KEY}})}async function pu(){return xa.tracer.trace("getLLMConfig",async()=>await fG()||await mG())}async function _a(e){return await xa.tracer.trace("getLLM",async t=>{let{model:r,maxTokens:a}=e||{},n=await pu();if(!n){t.addTags({enabled:!1,reason:"no config found"});return}r&&(n.model=r),a&&(n.maxTokens=a);let o=dG[n.provider];if(!o){t.addTags({enabled:!1,reason:"no provider found",provider:n.provider});return}return new o(n)})}async function tI(){let e=await _a();if(!e)throw new ze.HTTPError("No available LLM configurations",500);return e}var V=class e{constructor(){this.messages=[];this.tools=[]}addTool(t){return this.tools.push(t),this}addTools(t){return this.tools.push(...t),this}findTool(t){return this.tools.find(r=>r.name===t)}withFormat(t){return t instanceof Xb.z.ZodType?this.format=(0,Zb.zodResponseFormat)(t,"key"):this.format=t,this}addMessage(t){return this.messages.push(t),this}addMessages(t){return this.messages.push(...t),this}addUserMessage(t){return this.messages.push({role:"user",content:t}),this}addSystemMessage(t){return this.messages.push({role:"system",content:t}),this}static fromRequest(t){let r=new e;return t.messages&&r.addMessages(t.messages),t.format&&r.withFormat(t.format),r}};function Kn(e,t){let r=`Summarize this text:
39
- ${e}`,a="";if(t)switch(t){case Hn.SummariseLength.SHORT:a="In 1-2 concise sentences, ";break;case Hn.SummariseLength.MEDIUM:a="In 2-3 paragraphs, ";break;case Hn.SummariseLength.LONG:a="In multiple detailed paragraphs, ";break}return new V().addUserMessage(`${a}${r}.
40
- Only return the summary.`)}function Zi(e,t){return new V().addUserMessage(`Return the category of this text: "${e}". Based on these categories: ${t.join(", ")}. Only return the category. Do not add any extra punctuation or fix spelling mistakes. It should exactly match one of the categories. `)}function eu(e){return new V().addUserMessage(`Clean the following string: "${e}". Remove any spelling mistakes or data issues. Only return the cleaned string itself and nothing else.`)}function gG(e,t){return new V().addUserMessage(`Given the table schema:
37
+ `;function Kr(e){return Io.default.verify(e,hS,{algorithms:["RS256"]})}function yS(e,t){return Io.default.sign(t,e,{encoding:"utf-8",algorithm:"RS256"})}var Ya={};w(Ya,{getFeatures:()=>So});var l=require("@budibase/types");var AS={[l.PlanType.FREE]:[...ge.SELF_FREE_LICENSE.features],[l.PlanType.PREMIUM]:void 0,[l.PlanType.PREMIUM_PLUS]:[l.Feature.APP_BACKUPS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.PDF,l.Feature.BUDIBASE_AI],[l.PlanType.PREMIUM_PLUS_TRIAL]:[l.Feature.APP_BACKUPS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.PDF,l.Feature.BUDIBASE_AI],[l.PlanType.PRO]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS],[l.PlanType.TEAM]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS],[l.PlanType.BUSINESS]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.AUDIT_LOGS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.PDF,l.Feature.BUDIBASE_AI],[l.PlanType.ENTERPRISE_BASIC]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.ENFORCEABLE_SSO,l.Feature.AUDIT_LOGS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.OFFLINE,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.SCIM,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.PWA,l.Feature.CUSTOM_APP_SCRIPTS,l.Feature.PDF,l.Feature.BUDIBASE_AI],[l.PlanType.ENTERPRISE_BASIC_TRIAL]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.ENFORCEABLE_SSO,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.SCIM,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.PWA,l.Feature.CUSTOM_APP_SCRIPTS,l.Feature.PDF,l.Feature.BUDIBASE_AI],[l.PlanType.ENTERPRISE]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.ENFORCEABLE_SSO,l.Feature.AUDIT_LOGS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.OFFLINE,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.SCIM,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.PWA,l.Feature.CUSTOM_APP_SCRIPTS,l.Feature.PDF,l.Feature.BUDIBASE_AI]},bS={[l.PlanType.FREE]:[...ge.CLOUD_FREE_LICENSE.features],[l.PlanType.PREMIUM]:[l.Feature.APP_BACKUPS,l.Feature.BRANDING,l.Feature.APP_BUILDERS,l.Feature.VIEW_PERMISSIONS,l.Feature.PDF],[l.PlanType.PREMIUM_PLUS]:[l.Feature.APP_BACKUPS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.BUDIBASE_AI,l.Feature.PDF],[l.PlanType.PREMIUM_PLUS_TRIAL]:[l.Feature.APP_BACKUPS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.BUDIBASE_AI,l.Feature.PDF],[l.PlanType.PRO]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS,l.Feature.BRANDING],[l.PlanType.TEAM]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS,l.Feature.BRANDING],[l.PlanType.BUSINESS]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.AUDIT_LOGS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.BUDIBASE_AI,l.Feature.PDF],[l.PlanType.ENTERPRISE_BASIC]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.ENFORCEABLE_SSO,l.Feature.AUDIT_LOGS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.OFFLINE,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.SCIM,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.BUDIBASE_AI,l.Feature.PWA,l.Feature.CUSTOM_APP_SCRIPTS,l.Feature.PDF],[l.PlanType.ENTERPRISE_BASIC_TRIAL]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.ENFORCEABLE_SSO,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.SCIM,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.BUDIBASE_AI,l.Feature.PWA,l.Feature.CUSTOM_APP_SCRIPTS,l.Feature.PDF],[l.PlanType.ENTERPRISE]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.ENFORCEABLE_SSO,l.Feature.AUDIT_LOGS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.SCIM,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.BUDIBASE_AI,l.Feature.PWA,l.Feature.CUSTOM_APP_SCRIPTS,l.Feature.PDF]};function So(e,t){let r=[];function a(n){let o=n[t];if(!o)throw new Error(`Features do not exist for planType=${t} and hosting=${e}`);return o}switch(e){case l.Hosting.SELF:r=a(AS);break;case l.Hosting.CLOUD:r=a(bS);break}return r}var Ha={};w(Ha,{UNLIMITED:()=>d,getQuotas:()=>wo});var G=require("@budibase/types");var c=Ze,Ap=ge,d=-1,Yr=e=>e*1e6,IS={[G.PlanType.FREE]:{...Ap.CLOUD_FREE_LICENSE.quotas},[G.PlanType.PREMIUM]:{usage:{monthly:{...c.queries(d),...c.automations(1e3),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(1e4),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(0),...c.plugins(d),...c.customAIConfigurations(0)}},constant:{...c.automationLogRetentionDays(7),...c.appBackupRetentionDays(7)}},[G.PlanType.PREMIUM_PLUS]:{usage:{monthly:{...c.queries(d),...c.automations(5e3),...c.budibaseAICredits(Yr(2)),...c.actions(d)},static:{...c.rows(25e3),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(0),...c.plugins(d),...c.customAIConfigurations(1)}},constant:{...c.automationLogRetentionDays(30),...c.appBackupRetentionDays(30)}},[G.PlanType.PREMIUM_PLUS_TRIAL]:{usage:{monthly:{...c.queries(d),...c.automations(5e3),...c.budibaseAICredits(Yr(2)),...c.actions(d)},static:{...c.rows(25e3),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(0),...c.plugins(d),...c.customAIConfigurations(1)}},constant:{...c.automationLogRetentionDays(30),...c.appBackupRetentionDays(30)}},[G.PlanType.PRO]:{usage:{monthly:{...c.queries(d),...c.automations(1e3),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(5),...c.plugins(d),...c.customAIConfigurations(0)}},constant:{...c.automationLogRetentionDays(7),...c.appBackupRetentionDays(7)}},[G.PlanType.TEAM]:{usage:{monthly:{...c.queries(d),...c.automations(5e3),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(10),...c.plugins(d),...c.customAIConfigurations(0)}},constant:{...c.automationLogRetentionDays(30),...c.appBackupRetentionDays(90)}},[G.PlanType.BUSINESS]:{usage:{monthly:{...c.queries(d),...c.automations(1e4),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(5e4),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(50),...c.plugins(d),...c.customAIConfigurations(0)}},constant:{...c.automationLogRetentionDays(365),...c.appBackupRetentionDays(365)}},[G.PlanType.ENTERPRISE_BASIC]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(Yr(4)),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(d),...c.plugins(d),...c.customAIConfigurations(d)}},constant:{...c.automationLogRetentionDays(d),...c.appBackupRetentionDays(d)}},[G.PlanType.ENTERPRISE_BASIC_TRIAL]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(Yr(4)),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(d),...c.plugins(d),...c.customAIConfigurations(d)}},constant:{...c.automationLogRetentionDays(15),...c.appBackupRetentionDays(15)}},[G.PlanType.ENTERPRISE]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(Yr(4)),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(d),...c.plugins(d),...c.customAIConfigurations(d)}},constant:{...c.automationLogRetentionDays(d),...c.appBackupRetentionDays(d)}}},SS={[G.PlanType.FREE]:{...Ap.SELF_FREE_LICENSE.quotas},[G.PlanType.PREMIUM]:void 0,[G.PlanType.PREMIUM_PLUS]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(0),...c.plugins(d),...c.customAIConfigurations(1)}},constant:{...c.automationLogRetentionDays(30),...c.appBackupRetentionDays(30)}},[G.PlanType.PREMIUM_PLUS_TRIAL]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(0),...c.plugins(d),...c.customAIConfigurations(1)}},constant:{...c.automationLogRetentionDays(30),...c.appBackupRetentionDays(30)}},[G.PlanType.PRO]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(5),...c.plugins(d),...c.customAIConfigurations(0)}},constant:{...c.automationLogRetentionDays(7),...c.appBackupRetentionDays(7)}},[G.PlanType.TEAM]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(10),...c.plugins(d),...c.customAIConfigurations(0)}},constant:{...c.automationLogRetentionDays(30),...c.appBackupRetentionDays(90)}},[G.PlanType.BUSINESS]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(50),...c.plugins(d),...c.customAIConfigurations(0)}},constant:{...c.automationLogRetentionDays(90),...c.appBackupRetentionDays(365)}},[G.PlanType.ENTERPRISE_BASIC]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(d),...c.plugins(d),...c.customAIConfigurations(d)}},constant:{...c.automationLogRetentionDays(d),...c.appBackupRetentionDays(d)}},[G.PlanType.ENTERPRISE_BASIC_TRIAL]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(d),...c.plugins(d),...c.customAIConfigurations(d)}},constant:{...c.automationLogRetentionDays(15),...c.appBackupRetentionDays(15)}},[G.PlanType.ENTERPRISE]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(d),...c.plugins(d),...c.customAIConfigurations(d)}},constant:{...c.automationLogRetentionDays(d),...c.appBackupRetentionDays(d)}}};function wo(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(SS);break;case G.Hosting.CLOUD:r=a(IS);break}return JSON.parse(JSON.stringify(r))}var Vt={};w(Vt,{appExists:()=>wS,encoding:()=>Kt});var bp=require("@budibase/backend-core");async function wS(e){return(await bp.db.getAllApps({all:!0,idsOnly:!0})).includes(e)}var Kt={};w(Kt,{base64ToObject:()=>vS,objectToBase64:()=>TS});function TS(e){let t=JSON.stringify(e);return Buffer.from(t).toString("base64")}function vS(e){let t=Buffer.from(e,"base64").toString();return JSON.parse(t)}var rf=require("@budibase/types"),sr=require("@budibase/backend-core"),af=P(Dl()),nf=P(zo());async function Z_(e){await we.save({offlineLicenseToken:e}),await xt()}async function ex(){await we.save({offlineLicenseToken:void 0}),await xt()}async function of(){return(await we.get()).offlineLicenseToken}async function Jo(){let t=(await sr.installation.getInstall()).installId,r=sr.context.getTenantId(),a=await sr.events.identification.getUniqueTenantId(r);return{installId:t,tenantId:a}}async function tx(){let e=await Jo();return Kt.objectToBase64(e)}function rx(e){return Kt.base64ToObject(e)}function sf(e){let t=Date.now(),r=new Date(e.expireAt).getTime();if(t>r)throw new Error(`Offline license has expired. expireAt=${e.expireAt}`)}async function uf(e){let t=await Jo();if(e.identifier.installId!==t.installId||e.identifier.tenantId!==t.tenantId)throw new Error("Invalid offline license")}function pf(e){let t=e.plan.type,r=rf.Hosting.SELF,a=So(r,t),n=wo(r,t);return e.features=(0,af.default)(e.features,a),e.quotas=(0,nf.default)(e.quotas,n),e}async function Xo(){try{let e=await of();if(e){let t=await Kr(e);return sf(t),await uf(t),pf(t)}}catch(e){console.error("Error retrieving offline license",e)}}var fa={};w(fa,{deleteDevLicense:()=>ix,getOfflineLicense:()=>ox,writeDevLicenseToDisk:()=>sx});var cf=require("@budibase/backend-core"),es=require("path"),lf=require("os"),Ct=P(require("fs"));var ax=cf.env.isTest()?".budibase-test":".budibase",Zo=(0,es.join)((0,lf.tmpdir)(),ax),nx="dev_license.txt",da=(0,es.join)(Zo,nx);if(!Ct.default.existsSync(Zo))try{Ct.default.mkdirSync(Zo)}catch{}function ox(){try{if(Ct.default.existsSync(da)){let e=Ct.default.readFileSync(da,{encoding:"utf-8"});return Kr(e)}}catch(e){console.error("Error retrieving offline license from disk",e)}}function sx(e){console.log(`Writing license to: ${da}`),Ct.default.writeFileSync(da,e,{encoding:"utf-8"})}function ix(){Ct.default.rmSync(da,{force:!0})}var rs=async()=>{if(ts.env.OFFLINE_MODE)return Xo();let e=await $t();return e||(e=fa.getOfflineLicense()),e},as=e=>Ao(e),ns=()=>ts.env.SELF_HOSTED?ge.SELF_FREE_LICENSE:ge.CLOUD_FREE_LICENSE;var ss={};w(ss,{activateLicenseKey:()=>ux,deleteLicenseKey:()=>px,getLicenseKey:()=>dn});var os=P(require("dd-trace"));async function ux(e){await bo(e),await we.save({licenseKey:e}),await xt()}async function dn(){return await os.default.trace("getLicenseKey",async e=>{let t=await we.get();return e.addTags({licenseKey:t.licenseKey}),t.licenseKey})}async function px(){return await os.default.trace("deleteLicenseKey",async()=>{await we.save({licenseKey:void 0}),await xt()})}var Lt=require("@budibase/backend-core"),fn=P(require("dd-trace")),df=3600,xt=async()=>{await gf(),await mf()},ff=async(e,t)=>{let{populateLicense:r=rs,populateFreeLicense:a=ns}=t||{};return await fn.default.trace("getCachedLicense",async n=>{let o=Lt.context.getLicense();if(o)return n.addTags({foundInContext:!0,features:o.features,plan:o.plan,quotas:o.quotas}),o;let s=Lt.tenancy.getTenantId(),i=await no(),p=await i.get(s);return n.addTags({tenantId:s,foundInCache:!!p}),p?(n.addTags({foundInCache:!0,refreshedAt:p.refreshedAt,features:p.features,plan:p.plan,quotas:p.quotas}),p):(p=await fn.default.trace("populateLicense",async()=>await r(s)),n.addTags({populatedLicense:!!p}),p||(p=fn.default.trace("populateFreeLicense",()=>a(e,s)),n.addTags({populatedFreeLicense:!!p})),p.refreshedAt=new Date().toISOString(),n.addTags({refreshedAt:p.refreshedAt,features:p.features,plan:p.plan,quotas:p.quotas,expirySeconds:df}),await i.store(s,p,df),p)})};Lt.env.isJest()&&(ff=jest.fn());var mf=ff,gf=async()=>{let e=Lt.tenancy.getTenantId();await(await no()).delete(e)};async function ie(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 mn(e,t){if(!await ie(e,t))throw new et.FeatureDisabledError(`${e} is not currently enabled`,e)}async function is(e,t){if(!await ie(e,t)){let r=e.join(", ");throw new et.FeatureDisabledError(`${r} are not currently enabled`,r)}}function ye(e){return async(...t)=>(await mn(se.Feature.APP_BACKUPS),e(...t))}async function us(){return ie(se.Feature.APP_BACKUPS)}async function ps(){return ie(se.Feature.BRANDING)}async function hf(){return ie(se.Feature.ENFORCEABLE_SSO)}async function lx(){return ie(se.Feature.SYNC_AUTOMATIONS)}async function dx(){return ie(se.Feature.TRIGGER_AUTOMATION_RUN)}async function Ot(){return ie(se.Feature.APP_BUILDERS)}async function gn(){return ie(se.Feature.AUDIT_LOGS)}async function cs(){return ie(se.Feature.USER_GROUPS)}function fx(){return ie(se.Feature.PWA)}async function tt(){return ie(se.Feature.EXPANDED_PUBLIC_API)}async function mx(e){if(et.env.ENABLE_SSO_MAINTENANCE_MODE||!await hf())return!1;let r;return e?.config?r=e.config:r=await et.configs.getSettingsConfig(),!!r.isSSOEnforced}var ls=async()=>{let e=se.Feature.SCIM,t=await ie(e),r=await et.configs.getSCIMConfig();if(!t||!r?.enabled)throw new et.FeatureDisabledError(`${e} is not currently enabled`,e);return!0};async function gx(){return ie(se.Feature.VIEW_PERMISSIONS)}async function hx(){return ie(se.Feature.VIEW_READONLY_COLUMNS)}var yx={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 Ax(e){return await ps()?{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}:yx}var fs={};w(fs,{enrichAIConfig:()=>ds});var yf=require("@budibase/backend-core"),bx="budibase_ai";async function ds(e){if(yf.env.SELF_HOSTED)return e;for(let t of Object.values(e.config))if(t.provider==="BudibaseAI")return e;return e.config[bx]={provider:"BudibaseAI",active:!0,isDefault:Object.keys(e.config).every(t=>!e.config[t].isDefault),defaultModel:process.env.BUDIBASE_AI_DEFAULT_MODEL||"gpt-4o-mini",name:"Budibase AI"},e}var Ke={};w(Ke,{addApp:()=>vx,addAutomation:()=>Lx,addGroup:()=>gs,addPlugin:()=>ys,addRow:()=>Rx,addRows:()=>xx,addUsers:()=>An,bustCache:()=>po,decrement:()=>rt,decrementMany:()=>ma,getCurrentUsageValues:()=>$u,getLicensedQuota:()=>bf,getQuotaUsage:()=>Tt,increment:()=>De,incrementBudibaseAICredits:()=>In,incrementMany:()=>Pt,removeApp:()=>Ex,removeGroup:()=>hs,removePlugin:()=>As,removeRow:()=>_x,removeRows:()=>Cx,removeUsers:()=>lr,set:()=>ms,setAllUsage:()=>lo,setAppUsageValue:()=>co,setUsage:()=>Qu,setUsagePerApp:()=>ju,updatePluginCount:()=>bs,updateUsage:()=>ur,usageLimitIsExceeded:()=>Tx,utils:()=>_r});var H=require("@budibase/types");var qe=require("@budibase/backend-core");var ir=require("dd-trace"),De=(e,t,r)=>Af({change:1,name:e,type:t,opts:r}),Pt=e=>ir.tracer.trace("quotas.incrementMany",async()=>Af(e)),Af=async e=>await ir.tracer.trace("quotas.tryIncrement",async t=>{let r=Array.isArray(e)?e:[e];t.addTags({numActions:r.length}),await ur(r.map(n=>({usageChange:n.change,name:n.name,type:n.type,opts:{dryRun:!0,suppressErrorLog:n.opts?.suppressErrorLog,id:n.opts?.id}})));let a=[];for(let n of r)await ir.tracer.trace("quotas.incrementMany.fn",async o=>{o.addTags({actionName:n.name,actionType:n.type,actionChange:n.change});let s=n.opts?.fn;s&&a.push(await s())});return await ur(r.map(n=>({usageChange:n.change,name:n.name,type:n.type,opts:{dryRun:!1,valueFn:n.opts?.valueFn,suppressErrorLog:n.opts?.suppressErrorLog,id:n.opts?.id}}))),a[0]}),rt=(e,t,r={})=>ur({usageChange:-1,name:e,type:t,opts:r}),ma=e=>{let t=Array.isArray(e)?e:[e];return ur(t.map(r=>({usageChange:-r.change,name:r.name,type:r.type,opts:r.opts})))},ms=async(e,t,r)=>ke.setUsage(r,e,t),Ix=(e,t,r)=>{if(e==H.QuotaUsageType.STATIC){let a=r.usageQuota.triggers;return a?a[t]||{}:{}}else{let a=ke.utils.getCurrentMonthString(),n=r.monthly[a].triggers;return n?n[t]||{}:{}}},Sx=async(e,t,r,a)=>{try{await qe.locks.doWithLock({type:H.LockType.TRY_ONCE,name:H.LockName.TRIGGER_QUOTA,resource:e,ttl:1e4},async()=>{let n={percentage:r,name:t.name};a&&(n.resetDate=a),await ft.triggerQuota(n)})}catch(n){qe.logging.logAlert("Error triggering quota",n)}},wx=async(e,t,r,a)=>{let n=await Tt(),o=e===H.QuotaUsageType.MONTHLY?n.quotaReset:void 0,s=await Ix(e,t,n),i=a.triggers,p=r/a.value*100;p>100&&(p=100);for(let[m,f]of i.entries())if(p>=f&&a.value!==Ze.UNLIMITED){if(!s[f]){s[f]=new Date().toISOString();let g=i[m+1]||100;(!(p>=g)||p===f)&&await Sx(t,a,p,o)}}else s[f]=void 0;return s},ur=async e=>{await ir.tracer.trace("quotas.updateUsage",async t=>{let r=qe.tenancy.getTenantId(),a=Array.isArray(e)?e:[e];t.addTags({numActions:a.length,tenantId:r});let n,o,s=[],i={},p={},m={},f={};for(let g of a)await ir.tracer.trace("quotas.updateUsage.action",async S=>{S.addTags({actionName:g.name,actionType:g.type,actionUsageChange:g.usageChange});try{n=qe.context.getAppId()}catch{}if(H.APP_QUOTA_NAMES.includes(g.name)&&!n)throw new Error("App context required for quota update");try{o=await bf(H.QuotaType.USAGE,g.name,g.type),s.push(o);let{total:_,app:R,breakdown:E}=await ke.getCurrentUsageValues(g.type,g.name,g.opts?.id);_+=g.usageChange,R!=null&&(R+=g.usageChange),E!=null&&(E+=g.usageChange);let U={};if(g.opts?.dryRun||(U=await wx(g.type,g.name,_,o),f={...f,[g.name]:U}),o.value!==Ze.UNLIMITED&&_>o.value&&g.usageChange>0)throw new qe.UsageLimitError(`Licensed ${o.name} of ${o.value} has been exceeded`,o.name);if(_=Math.max(0,_),R&&(R=Math.max(0,R)),E&&(E=Math.max(0,E),m={...m,[g.name]:E}),!g.opts?.dryRun){let Ce=g.opts?.valueFn;Ce&&(_=await Ce(),R=_),i={...i,[g.name]:_},p={...p,[g.name]:R}}}catch(_){throw g.opts?.suppressErrorLog||console.error(`Error updating usage quotas for ${g.name}`,_),_}});let h=a.filter(g=>!g.opts?.dryRun).map(g=>({name:g.name,type:g.type,values:{total:i[g.name],app:p[g.name],breakdown:m[g.name],triggers:f[g.name]},opts:{...g.opts,tenantId:r}}));h.length>0&&await ke.setAllUsage(h)})},bf=async(e,t,r)=>{let a=await Oe.getCachedLicense();if(!a){let n=qe.tenancy.getTenantId();throw new Error("License not found for tenant id "+n)}if(r&&(0,H.isStaticQuota)(e,r,t))return a.quotas[e][r][t];if(r&&(0,H.isMonthlyQuota)(e,r,t))return a.quotas[e][r][t];if((0,H.isConstantQuota)(e,t))return a.quotas[e][t];throw new Error("Invalid quota type")},Tx=async(e,t)=>{try{return await ur({usageChange:1,name:e,type:t,opts:{dryRun:!0}}),!1}catch(r){if(r.code===H.ErrorCode.USAGE_LIMIT_EXCEEDED)return!0;throw r}};var pr=require("@budibase/types"),If=require("@budibase/backend-core"),Sf=async()=>{let e=await If.db.getAllApps({dev:!0});return e?e.length:0},vx=async(e,{appId:t}={})=>De(pr.StaticQuotaName.APPS,pr.QuotaUsageType.STATIC,{fn:e,valueFn:Sf,id:t}),Ex=async({appId:e}={})=>rt(pr.StaticQuotaName.APPS,pr.QuotaUsageType.STATIC,{valueFn:Sf,id:e});var We=require("@budibase/types"),Rx=async(e,{tableId:t}={})=>De(We.StaticQuotaName.ROWS,We.QuotaUsageType.STATIC,{fn:e,id:t}),_x=async({tableId:e}={})=>rt(We.StaticQuotaName.ROWS,We.QuotaUsageType.STATIC,{id:e}),xx=async(e,t,{tableId:r}={})=>Pt({change:e,name:We.StaticQuotaName.ROWS,type:We.QuotaUsageType.STATIC,opts:{fn:t,id:r}}),Cx=async(e,{tableId:t}={})=>ma({change:e,name:We.StaticQuotaName.ROWS,type:We.QuotaUsageType.STATIC,opts:{id:t}});var yn=require("@budibase/types"),Lx=async(e,{automationId:t}={})=>De(yn.MonthlyQuotaName.AUTOMATIONS,yn.QuotaUsageType.MONTHLY,{fn:e,id:t});var cr=require("@budibase/types"),gs=async e=>De(cr.StaticQuotaName.USER_GROUPS,cr.QuotaUsageType.STATIC,{fn:e}),hs=async()=>rt(cr.StaticQuotaName.USER_GROUPS,cr.QuotaUsageType.STATIC);var ht=require("@budibase/types"),ys=async e=>De(ht.StaticQuotaName.PLUGINS,ht.QuotaUsageType.STATIC,{fn:e}),As=async()=>rt(ht.StaticQuotaName.PLUGINS,ht.QuotaUsageType.STATIC),bs=async e=>ms(ht.StaticQuotaName.PLUGINS,ht.QuotaUsageType.STATIC,e);var $e=require("@budibase/types"),ga=require("@budibase/backend-core");var An=async(e,t,r)=>{let a=[{change:e,name:$e.StaticQuotaName.USERS,type:$e.QuotaUsageType.STATIC,opts:{fn:r,valueFn:ga.users.getUserCount}}];t>0&&a.push({change:t,name:$e.StaticQuotaName.CREATORS,type:$e.QuotaUsageType.STATIC,opts:{valueFn:ga.users.getCreatorCount}});let n=await Pt(a);return await $t(),n},lr=async(e,t)=>{let r=[{change:e,name:$e.StaticQuotaName.USERS,type:$e.QuotaUsageType.STATIC,opts:{valueFn:ga.users.getUserCount}}];t>0&&r.push({change:t,name:$e.StaticQuotaName.CREATORS,type:$e.QuotaUsageType.STATIC,opts:{valueFn:ga.users.getCreatorCount}}),await ma(r),await $t()};var bn=require("@budibase/types"),In=async e=>Pt({change:e,name:bn.MonthlyQuotaName.BUDIBASE_AI_CREDITS,type:bn.QuotaUsageType.MONTHLY});var at={};w(at,{addAppBuilder:()=>Dx,db:()=>Ve,removeAppBuilder:()=>Nx});var ya=require("@budibase/backend-core");var j={};w(j,{addAppBuilder:()=>vs,addUsers:()=>Ss,adjustGroupCreatorsQuotas:()=>qx,cleanupApp:()=>Ux,enrichUserRolesFromGroups:()=>Px,fetch:()=>ha,get:()=>qt,getBulk:()=>xf,getGroupBuilderAppIds:()=>_f,getGroupRoleId:()=>Ox,remove:()=>Is,removeAppBuilder:()=>Es,removeUsers:()=>ws,save:()=>dr,updateGroupApps:()=>Ts});var x=require("@budibase/backend-core");var wf=require("@budibase/backend-core"),Sn=class extends wf.HTTPError{constructor(t){super(`Group name "${t}" is unavailable`,409)}};async function Ef(e,t){try{let r=[];for(let i of e)if(i.roles){let p=i.roles[x.db.getProdAppID(t)];p&&r.push(p)}let a=await Promise.all(r.map(async i=>({[i]:await x.roles.roleToNumber(i)}))),n,o,s={};a.forEach(i=>{let[p,m]=Object.entries(i)[0];s[p]={roleId:p,roleNum:m}});for(let{roleId:i,roleNum:p}of Object.values(s))(o===void 0||p>o)&&(o=p,n=i);return n}catch(r){throw x.logging.logAlert(`Error finding higest role for ${e.length} on app ${t}`,r),r}}async function Rf(e,t){return t?t=t.filter(r=>e.includes(r._id)):t=await M.getBulk(e,{enriched:!1}),t}async function _f(e,t){if(!e.userGroups)return[];let r=await Rf(e.userGroups,t?.groups),a=t?.appId?x.db.getProdAppID(t?.appId):null,n=[];for(let o of r){let s=o.builder?.apps;a&&s?.includes(a)?n.push(a):a||(n=n.concat(s||[]))}return[...new Set(n)]}async function Ox(e,t,r){if(!e.userGroups)return null;let a=await Rf(e.userGroups,r?.groups),n=x.db.getProdAppID(t);return e.roles?.[n]?e.roles[n]:(a=a.filter(o=>o?.roles?Object.keys(o.roles).includes(n):!1),await Ef(a,t))}async function Px(e){if(!e||!e.userGroups)return e;let t=await xf(e.userGroups,{enriched:!1}),r=[];for(let n of t)n?.roles&&(r=r.concat(Object.keys(n.roles)));r=[...new Set(r)];for(let n of r)await x.context.doInAppContext(n,async()=>{if(e.roles[n])return;let o=await Ef(t,n);o&&(e.roles[n]=o)});let a=await _f(e,{groups:t});if(a.length&&!e.builder?.global){let n=e.builder?.apps||[];e.builder={apps:n.concat(a)}}return e}async function ha(){return await M.fetch()}async function qt(e){return await M.get(e)}async function xf(e,t={enriched:!0}){return await M.getBulk(e,t)}async function Tf(e){if(await M.getByName(e))throw new Sn(e)}async function vf(e){let t=await M.getGroupUsers(e._id);if(!t.length)return 0;let a=await x.tenancy.getGlobalDB().getMultiple(t.map(o=>o._id));return(await x.userUtils.creatorsInList(a)).filter(o=>o).length}async function dr(e){let t=[],r=!e._id,a=0;if(delete e.users,!e._id)e._id=M.generateUserGroupID(),await Tf(e.name),t.push(x.events.group.created(e));else{let o=await M.get(e._id);if(o.name!==e.name&&await Tf(e.name),t.push(x.events.group.updated(e)),JSON.stringify(o.roles)!==JSON.stringify(e.roles)){let s=o.users?.length||0,i=0;s>0&&(i=await vf(o)),Object.values(e.roles).includes("CREATOR")?a=s-i:a=-s,t.push(x.events.group.permissionsEdited(e))}}await Promise.all(t);let n=()=>M.save(e);if(r)return await gs(n);{let o=await n();if(a>0)await An(0,a);else if(a<0){let s=await vf(e),i=Math.abs(a)-s;i>0&&await lr(0,i)}return o}}async function Is(e,t){let r;try{r=await M.get(e)}catch{throw new Error("Group not found")}let a=Object.values(r.roles||{}).includes("CREATOR"),n=()=>{};if(a){let s=x.tenancy.getGlobalDB(),i=await M.getGroupUsers(e),m=(await Promise.all(i.map(S=>s.get(S._id)))).map(S=>({...S,userGroups:S.userGroups.filter(L=>L!==e)})),h=(await x.userUtils.creatorsInList(m)).filter(S=>S).length,g=i.length-h;g&&(n=()=>lr(0,g))}let o=await M.destroy(e,t);return await x.events.group.deleted(r),await hs(),await n(),o}async function Ss(e,t){let r=await M.get(e),a=await x.users.bulkGetGlobalUsersById(t),n=[];for(let p of a)p.userGroups||(p.userGroups=[]),p.userGroups.includes(e)||n.push(p);if(!n.length)return n;let o=n.map(p=>({...p,userGroups:[...p?.userGroups||[],e]}));if(await x.users.bulkUpdateGlobalUsers(o),Object.values(r.roles||{}).includes("CREATOR")){let m=(await x.userUtils.creatorsInList(n)).filter(h=>h).length,f=n.length-m;f&&await An(0,f)}let i=[];for(let p of t)i.push(x.cache.user.invalidateUser(p));return await Promise.all(i),await x.events.group.usersAdded(o.length,r),o}async function ws(e,t){let r=await M.get(e),a=await x.users.bulkGetGlobalUsersById(t),n=[];for(let i of a){if(!i.userGroups||!i.userGroups.includes(e))continue;let p=i.userGroups.indexOf(e);i.userGroups.splice(p,1),n.push(i)}if(await x.users.bulkUpdateGlobalUsers(n),Object.values(r.roles||{}).includes("CREATOR")){let p=(await x.userUtils.creatorsInList(n)).filter(f=>f).length,m=n.length-p;m&&await lr(0,m)}let s=[];for(let i of t)s.push(x.cache.user.invalidateUser(i));return await Promise.all(s),n.length&&await x.events.group.usersDeleted(n.length,r),n}async function Ts(e,t){let r=await qt(e);if(r.roles||(r.roles={}),t.appsToAdd)for(let a of t.appsToAdd)r.roles[a.appId]=a.roleId;if(t.appsToRemove)for(let a of t.appsToRemove)delete r.roles[a.appId];return await dr(r)}async function Ux(e){let t=await ha(),r=[];for(let a of t)!a.roles||!a.roles[e]||(delete a.roles[e],r.push(a));return await M.bulkSave(r)}async function vs(e,t){if(!await Ot())throw new Error("Feature not enabled, please check license");let r=x.db.getProdAppID(t),a=await qt(e);a.builder??={apps:[]},a.builder.apps.includes(t)||(a.builder.apps.push(r),await dr(a))}async function Es(e,t){if(!await Ot())throw new Error("Feature not enabled, please check license");let r=x.db.getProdAppID(t),a=await qt(e);a.builder?.apps.includes(t)&&(a.builder.apps=a.builder.apps.filter(n=>n!==r),await dr(a))}async function qx(){if(!await cs()){let e=x.tenancy.getGlobalDB(),r=(await ha()||[]).filter(a=>Object.values(a?.roles||{}).includes("CREATOR"));for(let a of r){let n=await M.getGroupUsers(a._id),s=(await Promise.all(n.map(f=>e.get(f._id)))).map(f=>({...f,userGroups:f.userGroups.filter(h=>h!==a._id)})),p=(await x.userUtils.creatorsInList(s)).filter(f=>f).length,m=n.length-p;await M.save({...a,roles:{}}),m&&await lr(0,m)}}}ya.users.UserDB.init(Ke,j,Ue);var Ve=ya.users.UserDB;async function Dx(e,t){if(!await Ot())throw new Error("Feature not enabled, please check license");await ya.users.addAppBuilder(e,t)}async function Nx(e,t){if(!await Ot())throw new Error("Feature not enabled, please check license");await ya.users.removeAppBuilder(e,t)}var vn={};w(vn,{logs:()=>Ps});var Ps={};w(Ps,{logSearch:()=>$x,oldestLogDate:()=>Df,storeLog:()=>Kx});var qf=require("@budibase/types"),Tn=require("@budibase/backend-core");var wn=require("@budibase/types");var Z=require("@budibase/backend-core");var Cf=require("@budibase/backend-core");async function Lf(e,t){let r,a=5,n=!1,o,s=!0;for(;a>0;a--)try{s?o=await e():o=await exports.randomDelay(e),n=!0;break}catch(i){r=i}return n||Cf.logging.logWarn(`Failed to backoff: ${t}`,r),o}var{SEPARATOR:nt,UNICODE_MAX:Bx,DocumentType:Of,AutomationViewMode:Rs,ViewName:Mx,getQueryIndex:Gx}=Z.db,kx=new Date(0).toISOString(),Fx=100,_s=async()=>ja(wn.ConstantQuotaName.AUTOMATION_LOG_RETENTION_DAYS);function Pf(e,t,{status:r,automationId:a}={},n={}){let o=a?`${a}${nt}`:"",s=r?`${r}${nt}`:"",i;return r&&a?i=`${Rs.ALL}${nt}${s}${o}`:r?i=`${Rs.STATUS}${nt}${s}`:a?i=`${Rs.AUTOMATION}${nt}${o}`:i=`${Of.AUTOMATION_LOG}${nt}`,{...n,descending:!0,startkey:`${i}${t}${Bx}`,endkey:`${i}${e}`}}function Qx(e,t,r){return`${Of.AUTOMATION_LOG}${nt}${e}${nt}${r}${nt}${t}`}async function xs(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=Pf(e,t,n,{include_docs:r.docs,limit:o});r?.page&&(s.startkey=r.page);let i=await a.allDocs(s);return Cr(i,{paginate:r?.paginate,pageSize:9})}async function Cs(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=Pf(e,t,o,{include_docs:!0,limit:9+1});r?.page&&(s.startkey=r.page),n=await a.query(Gx(Mx.AUTOMATION_LOGS),s)}catch(o){if(o!=null&&(o.name==="not_found"||o.error==="not_found"))return await rp(),Cs(e,t,r);throw o}return Cr(n,{paginate:!0,pageSize:9})}async function Uf(e,t){let r=Z.context.getProdAppDB(),a=e._id,n=e.name,o=new Date().toISOString(),s=Qx(o,t.status,a),i={...t,automationId:a,status:t.status,automationName:n,createdAt:o,_id:s};return await r.put(i),s}async function Ls(e,{clearing:t}={clearing:!1}){let r=Z.context.getProdAppDB();await Lf(async()=>{let a=await r.get(Z.db.DocumentType.APP_METADATA);for(let n of e){let o=n.split(Z.db.SEPARATOR),s=`${o[o.length-3]}${Z.db.SEPARATOR}${o[o.length-2]}`,i={};a.automationErrors&&(i=a.automationErrors),Array.isArray(i[s])||(i[s]=[]);let p=i[s].indexOf(n);t&&p!==-1?i[s].splice(p,1):i[s].push(n),i[s].length===0&&delete i[s],a.automationErrors=i}await r.put(a),await Z.cache.app.invalidateAppMetadata(a.appId,a)},"Failed to update app metadata with automation log error")}async function jx(){let e=await _s();try{return await xs(kx,e,{docs:!1,paginate:!1,limit:Fx})}catch{return{data:[],hasNextPage:!1}}}async function Os(){let e=Z.context.getProdAppDB();try{let t=await jx();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]===wn.AutomationStatus.ERROR}).map(n=>n.id);await e.bulkDocs(r),a.length&&await Ls(a,{clearing:!0})}catch(t){Z.logging.logAlert(`Failed to cleanup automation log history - Database "${e.name}"`,t)}}var Df=_s;async function Wx(e,t,r,a){let n,o=new Date().toISOString(),s=await Df();return(!e||e<s)&&(e=s),r||t?n=await Cs(e,o,{automationId:r,status:t,page:a}):n=await xs(e,o,{status:t,page:a,docs:!0,paginate:!0}),n}async function $x(e){return await Os(),await Wx(e.startDate,e.status,e.automationId,e.page)}async function Kx(e,t){if(!Tn.db.isProdAppID(Tn.context.getAppId()))return;let r=await Uf(e,t);t.status===qf.AutomationStatus.ERROR&&await Ls([r]),await Os()}var En={};w(En,{checkPluginQuotas:()=>Hx,deletePlugin:()=>Yx,storePlugin:()=>Vx});var Gf=require("@budibase/types"),z=require("@budibase/backend-core");var Nf=P(require("fs")),Bf=require("path");function Mf(e,t){return Nf.default.readFileSync((0,Bf.join)(e,t),"utf8")}async function Vx(metadata,directory,source){let db=z.tenancy.getGlobalDB(),version=metadata.package.version,name=metadata.package.name,description=metadata.package.description,hash=metadata.schema.hash,bucketPath=z.objectStore.getPluginS3Dir(name),files=await z.objectStore.uploadDirectory(z.objectStore.ObjectStoreBuckets.PLUGINS,directory,bucketPath),jsFile=files.find(e=>e.name.endsWith(".js")),iconFile=files.find(e=>e.name.endsWith(".svg"));if(!jsFile)throw new Error("Plugin missing .js file.");if(metadata.schema.type===Gf.PluginType.DATASOURCE){let js=Mf(directory,jsFile.name);try{eval(js)}catch(e){let t=e?.message?e.message:JSON.stringify(e);throw new Error(`JS invalid: ${t}`)}}let iconFileName=iconFile?iconFile.name:null,pluginId=z.db.generatePluginID(name),rev;try{rev=(await db.get(pluginId))._rev}catch(e){rev=void 0}let doc={_id:pluginId,_rev:rev,...metadata,name,version,hash,description,source};iconFileName&&(doc.iconFileName=iconFileName),source&&(doc={...doc,source});let write=async()=>{let e=await db.put(doc);return await z.events.plugin.imported(doc),{...doc,_rev:e.rev}};return rev?await write():await ys(write)}async function Yx(e){let t=z.tenancy.getGlobalDB();try{let r=await t.get(e),a=z.objectStore.getPluginS3Dir(r.name);await z.objectStore.deleteFolder(z.objectStore.ObjectStoreBuckets.PLUGINS,a),await t.remove(e,r._rev),await z.events.plugin.deleted(r),await As()}catch(r){let a=r?.message?r?.message:r;throw new Error(`Failed to delete plugin: ${a}`)}}async function Hx(){let e=z.tenancy.getGlobalDB();try{let r=(await e.allDocs(z.db.getPluginParams())).rows.length;console.log(`Syncing plugin count: ${r}`),await bs(r)}catch(t){z.logging.logAlert("Unable to retrieve plugins for quota check",t)}}var Ye={};w(Ye,{fetch:()=>Jx,fetchValues:()=>Xx,isEncryptionKeyAvailable:()=>zx,isValid:()=>Qf,remove:()=>eC,update:()=>Zx});var Aa=require("@budibase/types"),kf=require("@budibase/backend-core");function zx(){return!!kf.env.ENCRYPTION_KEY}async function Jx(){let e=await Rt.get();return Object.keys(e.variables)}async function Xx(e){let r=(await Rt.get()).variables,a={};for(let[n,o]of Object.entries(r))switch(e){case Aa.AppEnvironment.DEVELOPMENT:a[n]=o.development;break;case Aa.AppEnvironment.PRODUCTION:default:a[n]=o.production;break}return a}async function Ff(e){if(!(await je.cache.getCachedLicense()).features.includes(Aa.Feature.ENVIRONMENT_VARIABLES))throw new Error("User does not have access to environment variables feature.");let r=await Rt.get();r.variables=e(r.variables),await Rt.update(r)}async function Zx(e,t){if(Qf(e))await Ff(a=>(a[e]=t,a));else throw new Error("Variable name has characters that are not allowed")}async function eC(e){await Ff(t=>(delete t[e],t))}function Qf(e){return/^[a-zA-Z0-9-_]+$/.test(e)}var yt={};w(yt,{definitions:()=>lC,download:()=>cC,fetch:()=>pC,write:()=>iC});var _n=require("@budibase/types");var K=require("@budibase/backend-core"),Ne=require("@budibase/types");var jf=require("memorystream"),Wf=new K.sql.Sql(Ne.SqlClient.SQL_LITE);async function tC(e,t,r){let a={operation:Ne.Operation.READ,table:Wt.searchTable(),tables:{},paginate:{limit:r||9,page:t},filters:e,resource:{fields:[]},sort:{timestamp:{direction:Ne.SortOrder.DESCENDING,type:Ne.SortType.STRING}}},n=Wf._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 rC(e){return`${K.DocumentType.AUDIT_LOG}${K.SEPARATOR}${e}${K.SEPARATOR}${K.utils.newid()}`}async function $f(e){e._id||(e._id=rC(e.timestamp)),e.type||(e.type=Ne.AUDIT_LOG_TYPE);try{let r=await K.context.getAuditLogsDB().put(e);return{...e,_rev:r.rev}}catch(t){K.logging.logAlert("Failed to write audit log",t)}}async function Us(e,t,r){t||(t=1);let a=K.context.getAuditLogsDB();try{let n=9+1,o=await tC(e,t,n),s=Wt.searchTable(),i=Wf.convertJsonStringColumns(s,await a.sql(o.sql,o.bindings)),p;i.length>n&&(p=i.pop());let m={rows:i,hasNextPage:!!p};return m.hasNextPage&&(m.bookmark=t+1),m}catch(n){if(n.status===404&&!r?.isRetry)return await aC(),await Ku(),await Us(e,t,{isRetry:!0});throw n}}async function aC(){let e=K.context.getAuditLogsDB(),r=(await e.allDocs(K.db.getDocParams(K.DocumentType.AUDIT_LOG,null,{include_docs:!0}))).rows.map(a=>a.doc).filter(a=>a&&!a.type).map(a=>({...a,type:Ne.AUDIT_LOG_TYPE}));await e.bulkDocs(r)}function Kf(e){let t=K.context.getAuditLogsDB(),r=new jf,a=t.dump(r,{filter:o=>{let s=o;if(!s._id?.startsWith(K.DocumentType.AUDIT_LOG))return!1;let i=!0,p=(m,f)=>{!m||m.length===0||(i=!!(i&&f&&m.includes(f)))};if(p(e.userIds,s.userId),p(e.appIds,s.appId),p(e.events,s.event),(e.startDate||e.endDate)&&(i=i&&s.timestamp>=e.startDate&&s.timestamp<=e.endDate),e.fullSearch){let m=JSON.stringify(o);i=i&&m.includes(e.fullSearch)}return i}}),n=new jf;return r.on("data",o=>{let s=JSON.parse(Buffer.from(o).toString());if(Array.isArray(s.docs)){let i="";for(let p of s.docs)i+=JSON.stringify(p)+`
38
+ `;n.write(i)}}),r.on("end",()=>{n.end()}),{promise:a,stream:n}}var le=require("@budibase/backend-core");var Rn=require("@budibase/types"),ba=require("@budibase/string-templates"),Ia=require("@budibase/backend-core"),oC=Ia.constants.MIN_VALID_DATE.toISOString(),sC=Ia.constants.MAX_VALID_DATE.toISOString();function qs(e){return(e.startDate||e.endDate)&&(e.startDate=e.startDate||oC,e.endDate=e.endDate||sC),e}async function Vf(e){Array.isArray(e.appIds)&&(e.appIds=e.appIds.map(a=>Ia.db.getProdAppID(a)));let t={};function r(a,n){n?.length&&(t.oneOf={...t.oneOf,[a]:n})}return r("userId",e.userIds),r("appId",e.appIds),r("event",e.events),e.fullSearch&&(t.fuzzyOr=!0,t.fuzzy={name:e.fullSearch,fallback:e.fullSearch}),(e.startDate||e.endDate)&&(e=qs(e),t.range={timestamp:{high:e.endDate,low:e.startDate}}),Object.keys(t).length===0&&(t.notEmpty={event:!0}),t}function Ds(e,t,r){let a={_id:e,status:Rn.AuditLogResourceStatus.DELETED};switch(t){case"app":a.name=r?.appName;break;case"user":a.email=r?.email;break}return a}function Ns(e){let t=(0,ba.findHBSBlocks)(e);for(let r of t){let a=` "${r}"`;e=e.replace(e.includes(a)?a:` ${r}`,""),e=(0,ba.processStringSync)(e,{})}return e}function Yf(e,t){let r=Rn.AuditedEventFriendlyName[e];if(!r)throw new Error("No friendly name found.");let a=(0,ba.processStringSync)(r,t);return a.includes('""')&&(a=Ns(r)),a}async function iC(e,t,r){if(!await gn()||!le.utils.isAudited(e))return;let a=Yf(e,t),n=new Date;r?.timestamp&&(n=new Date(r.timestamp));let o={timestamp:n.toISOString(),event:e,name:a,userId:r?.userId||_n.AuditLogSystemUser,metadata:{...t,...r?.hostInfo}},s={};try{if(r?.appId){o.appId=le.db.getProdAppID(r.appId);let i=await le.cache.app.getAppMetadata(r.appId);"name"in i&&(s.appName=i.name)}if(r?.userId){let i=await le.users.getById(r?.userId);s.email=i.email}}catch(i){le.logging.logAlert("Failed to retrieve fallback information for audit log",i)}return o.fallback=s,await $f(o)}async function uC(e){let t=e.map(i=>i.userId),a=e.filter(i=>i.appId).map(i=>le.db.getDevAppID(i.appId)),n=await le.users.bulkGetGlobalUsersById([...new Set(t)],{cleanup:!0}),o=await le.db.getAppsByIDs([...new Set(a)]),s=[];for(let i of e){let p=n.find(h=>h?._id===i.userId),m=o.find(h=>le.db.isSameAppID(h?.appId,i.appId)),f={event:i.event,timestamp:i.timestamp,name:i.name,metadata:i.metadata,user:p||Ds(i.userId,"user",i.fallback)};i.appId&&(f.app=m||Ds(i.appId,"app",i.fallback)),s.push(f)}return s}async function pC(e){if(!await gn())throw new Error("Audit logs not available - license required.");let t=await Vf(e);if(typeof e.bookmark=="string")throw new Error("String based bookmark not supported.");let r=await Us(t,e.bookmark);return{hasNextPage:r.hasNextPage,bookmark:r.bookmark,data:await uC(r.rows)}}function cC(e){return e=qs(e),Kf(e)}function lC(){let e=Object.entries(_n.AuditedEventFriendlyName).filter(r=>r[1]!=null),t={};for(let r of e)t[r[0]]=Ns(r[1]);return t}var xn={};w(xn,{applications:()=>ks,roles:()=>Ms,users:()=>Bs});var Bs={};w(Bs,{roleCheck:()=>fC});function dC(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 fC(e,t){return await tt()||dC(e,t),e}var Ms={};w(Ms,{assign:()=>mC,unAssign:()=>gC});var Sa=require("@budibase/backend-core");async function mC(e,t){if(!await tt())throw new Error("Unable to assign roles - license required.");let r=await Ve.bulkGet(e);for(let a of r){if(t.role&&t.role.roleId){let n=Sa.db.getProdAppID(t.role.appId);a.roles[n]=t.role.roleId}if(t.appBuilder){let n=Sa.db.getProdAppID(t.appBuilder.appId),o=a.builder?.apps||[];a.builder={apps:o.concat([n])}}t.builder&&(a.builder={global:!0}),t.admin&&(a.admin={global:!0}),a.roles}await Ve.bulkUpdate(r)}async function gC(e,t){if(!await tt())throw new Error("Unable to un-assign roles - license required.");let r=await Ve.bulkGet(e);for(let a of r){if(t.role){let n=Sa.db.getProdAppID(t.role?.appId);a.roles[n]===t.role.roleId&&delete a.roles[n]}if(t.appBuilder&&a.builder?.apps){let n=Sa.db.getProdAppID(t.appBuilder.appId);a.builder.apps=a.builder.apps.filter(o=>o!==n)}t.builder&&a.builder&&delete a.builder,t.admin&&a.admin&&delete a.admin}}var ks={};w(ks,{buildExportFn:()=>yC,buildImportFn:()=>hC});var Gs=require("@budibase/backend-core");function hC(e){return async(t,r)=>{await tt()||t.throw(403,"Endpoint unavailable, license required."),t.request.files?.appExport||t.throw(400,"Must provide app export file for import."),await Gs.context.doInAppContext(t.params.appId,async()=>{await e(t),t.body=void 0,t.status=204,await r()})}}function yC(e){return async(t,r)=>{await tt()||t.throw(403,"Endpoint unavailable, license required.");let{encryptPassword:a,excludeRows:n}=t.request.body;await Gs.context.doInAppContext(t.params.appId,async()=>{t.request.body={encryptPassword:a,excludeRows:n},t.query.appId=t.params.appId,await e(t),await r()})}}var He=require("@budibase/backend-core"),ue=require("@budibase/types");var Fs=require("@budibase/backend-core"),Hf;function zf(){Hf=new Fs.queue.BudibaseQueue(Fs.queue.JobQueue.APP_BACKUP,{maxStalledCount:3,jobOptions:{attempts:3,removeOnFail:!0,removeOnComplete:!0}})}function Dt(){return Hf}var Jf=require("path"),Xf=P(require("fs"));async function Qs(e,t={}){return Te.storeAppBackupMetadata(e,t)}function Zf(e){let t=new Date().toISOString();switch(e){case ue.AppBackupStatus.COMPLETE:case ue.AppBackupStatus.FAILED:return{timestamp:t,finishedAt:t};case ue.AppBackupStatus.STARTED:return{timestamp:t,startedAt:t};case ue.AppBackupStatus.PENDING:return{timestamp:t,createdAt:t}}}async function AC(e,t,r,a){let n=await Cn(e);return await Te.storeAppBackupMetadata({...n,...Zf(t),contents:r,status:t,type:ue.AppBackupType.BACKUP},{filename:a,docId:e})}async function bC(e,t,r){let a=await Cn(e);return await Te.storeAppBackupMetadata({...a,...Zf(r),status:r,type:ue.AppBackupType.RESTORE,trigger:ue.AppBackupTrigger.MANUAL},{docId:e,docRev:t})}async function Cn(e){return Te.getAppBackupMetadata(e)}async function IC(e,t){return Te.updateAppBackupMetadata(e,t)}async function SC(e){let t=await Te.getAppBackupMetadata(e);return t.filename&&await He.objectStore.deleteFile(He.objectStore.ObjectStoreBuckets.BACKUPS,t.filename),Te.deleteAppBackupMetadata(e)}async function wC(e,t){return Te.fetchAppBackups(e,t)}async function em(e){let t=await Te.getAppBackupMetadata(e);if(!t.filename)throw new Error("Backup incomplete - cannot download.");let r=await He.objectStore.getReadStream(He.objectStore.ObjectStoreBuckets.BACKUPS,t.filename);return{metadata:t,stream:r}}async function TC(e){let{stream:t}=await em(e),r=(0,Jf.join)(He.objectStore.budibaseTempDir(),He.utils.newid()),a=Xf.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 vC(e,t,r={}){let a;try{a=await Qs({appId:e,trigger:t,timestamp:new Date().toISOString(),status:ue.AppBackupStatus.PENDING,type:ue.AppBackupType.BACKUP,...r})}catch(n){if(n.status===409)return;throw n}return await Dt().add({docId:a.id,docRev:a.rev,appId:e,export:{trigger:t,...r}}),await He.events.backup.appBackupTriggered(e,a.id,ue.AppBackupType.BACKUP,t,r?.name),a.id}async function EC(e,t,r,a){let n=await Cn(t),o;try{o=await Qs({appId:e,timestamp:new Date().toISOString(),status:ue.AppBackupStatus.PENDING,type:ue.AppBackupType.RESTORE,createdBy:a})}catch(s){if(s?.status===409)return;throw s}return await Dt().add({appId:e,docId:o.id,docRev:o.rev,import:{nameForBackup:r,backupId:t,createdBy:a}}),{restoreId:o.id,metadata:n}}var RC={isEnabled:us,triggerAppRestore:ye(EC),triggerAppBackup:ye(vC),getBackupDownloadStream:ye(em),downloadAppBackup:ye(TC),fetchAppBackups:ye(wC),storeAppBackupMetadata:ye(Qs),updateBackupStatus:ye(AC),updateRestoreStatus:ye(bC),getAppBackup:ye(Cn),updateAppBackup:ye(IC),deleteAppBackup:ye(SC)},ot=RC;var $s={};w($s,{init:()=>Ws});var J=require("@budibase/backend-core");var Be=require("@budibase/types");var fr=P(require("fs"));async function Ws(e){Dt().process(async t=>{let r=t.data;try{if(r.export)return CC(t,e);if(r.import)return xC(t,e)}catch(a){J.logging.logAlert(`Failed to perform backup for app ID: ${r.appId}`,a)}})}async function _C(e){await J.db.getDB(e,{skip_setup:!0}).destroy()}async function tm(e,t,r,a){let n=J.db.getDevAppID(r),o=J.db.getProdAppID(r),s=new Date().toISOString(),i=async(p,m)=>{a?.doc?await ot.updateBackupStatus(a.doc.id,p,m?.contents,m?.filename):await ot.storeAppBackupMetadata({appId:o,timestamp:s,trigger:e,status:p,name:a?.name,type:Be.AppBackupType.BACKUP,contents:m?.contents,createdBy:a?.createdBy},{filename:m?.filename})};try{let p=await a.processing.exportAppFn(n,{tar:!0}),m=await a.processing.statsFn(n),f=`${o}/backup-${s}.tar.gz`,h=J.objectStore.ObjectStoreBuckets.BACKUPS,g=fr.default.createReadStream(p);await J.objectStore.streamUpload({bucket:h,filename:f,stream:g,extra:{type:"application/gzip",metadata:{name:a?.name,trigger:e,timestamp:s,appId:o}}}),await i(Be.AppBackupStatus.COMPLETE,{filename:f,contents:m}),fr.default.existsSync(p)&&fr.default.rmSync(p)}catch(p){J.logging.logAlert("App backup error",p),await i(Be.AppBackupStatus.FAILED)}}async function xC(e,t){let r=e.data,a=r.appId,n=r.import.backupId,o=r.import.nameForBackup,s=r.import.createdBy,i=J.tenancy.getTenantIDFromAppID(a);return J.tenancy.doInTenant(i,async()=>{let p=J.db.getDevAppID(a),{rev:m}=await ot.updateRestoreStatus(r.docId,r.docRev,Be.AppBackupStatus.STARTED);await tm(Be.AppBackupTrigger.RESTORING,i,a,{processing:t,createdBy:s,name:o});let f=await ot.downloadAppBackup(n);await _C(p);let h=Be.AppBackupStatus.COMPLETE;try{await t.importAppFn(p,J.db.getDB(p),{file:{type:"application/gzip",path:f},key:f})}catch(g){J.logging.logAlert("App restore error",g),h=Be.AppBackupStatus.FAILED}await ot.updateRestoreStatus(r.docId,m,h),fr.default.existsSync(f)&&fr.default.rmSync(f,{force:!0})})}async function CC(e,t){let r=e.data,a=r.appId,n=r.export.trigger,o=r.export.name,s=J.tenancy.getTenantIDFromAppID(a);await J.tenancy.doInTenant(s,async()=>{try{let{rev:i}=await ot.updateBackupStatus(r.docId,Be.AppBackupStatus.STARTED);return tm(n,s,a,{processing:t,doc:{id:r.docId,rev:i},name:o})}catch(i){J.logging.logAlert("App backup error",i)}})}var LC=async e=>{zf(),await Ws(e.processing)},Ee={...ot,processing:$s,init:LC,getBackupQueue:Dt};var rm=async e=>{e.backups&&await Ee.init(e.backups)};var fe={};w(fe,{create:()=>TM,find:()=>wM,get:()=>SM,remove:()=>EM,update:()=>vM});var vA=P(Gi()),st=require("@budibase/backend-core");var EA=require("@budibase/types");async function SM(e){let t=st.tenancy.getGlobalDB(),r=new st.db.QueryBuilder(t.name,EA.SearchIndex.USER);r.setIndexBuilder(st.db.searchIndexes.createUserIndex),r.setLimit(e.pageSize),r.addEqual("scimInfo.isSync",!0);for(let[n,o]of Object.entries(e.filters?.equal??{}))r.addEqual(n,o);r.setSort("_id"),r.setSkip(e.skip);let a=await r.run();return{users:a.rows,total:a.totalRows}}async function wM(e){return await st.users.getById(e)}async function TM(e){let t=await Ve.getUserByEmail(e.email);if(t){if(t.scimInfo?.isSync)throw new st.HTTPError("User is already synched",409);e={...t,scimInfo:(0,vA.default)(t.scimInfo,e.scimInfo),password:void 0,firstName:e.firstName,lastName:e.lastName,updatedAt:e.updatedAt}}return await Ve.save(e,{requirePassword:!1})}async function vM(e,t){return await Ve.save(e,{requirePassword:!1,allowChangingEmail:t?.allowChangingEmail})}async function EM(e){return await Ve.destroy(e)}var br={};w(br,{create:()=>RM});var RA=P(Gi());var _A=require("@budibase/backend-core");async function RM(e){let t=await mo(e.name),r;if(!t)r=(await j.save(e)).id;else{if(t.scimInfo?.isSync)throw new _A.HTTPError("Group is already synched",409);r=t._id,t.users&&(await j.removeUsers(r,t.users.map(n=>n._id)),delete t.users),t.scimInfo=(0,RA.default)(t.scimInfo,e.scimInfo),await j.save(t)}return await j.get(r)}var Bt={};w(Bt,{logRequest:()=>_M,logResponse:()=>xM});var ki=require("@budibase/backend-core");async function _M(e){ki.logging.logWarn("SCIM request log",e)}async function xM(e){ki.logging.logWarn("SCIM response error",e)}var Ki={};w(Ki,{doInScimContext:()=>Qi,feature:()=>W,internalGroupOnly:()=>Wn,licenseAuth:()=>LA,licensing:()=>xA,requireSCIM:()=>ji,scimGroupOnly:()=>Ea,scimUserOnly:()=>va});var At=require("@budibase/backend-core");var Qn=require("@budibase/types"),CM=(e={checkUsersLimit:!0})=>async(t,r)=>{if((e.licensingCheck?e.licensingCheck:()=>!!t.user)(t)){if(At.env.SELF_HOSTED&&At.env.DEFAULT_LICENSE)return t.user.license=ho,r();t.user.license=await je.cache.getCachedLicense(t,{populateLicense:e.populateLicense,populateFreeLicense:e.populateFreeLicense}),e.checkUsersLimit&&(At.utils.isServingApp(t)||At.utils.isServingBuilder(t)||At.utils.isServingBuilderPreview(t)||At.utils.isPublicApiRequest(t))&&await Ke.usageLimitIsExceeded(Qn.StaticQuotaName.USERS,Qn.QuotaUsageType.STATIC)}return r()},xA=CM;var W={};w(W,{requireFeature:()=>LM,requireFeatures:()=>OM});var LM=e=>async(t,r)=>{await mn(e),await r()},OM=(...e)=>async(t,r)=>{await is(e),await r()};var jn=require("@budibase/backend-core");var Qi=async(e,t)=>(jn.env.DISABLE_SCIM_CALLS||await Bt.logRequest({...e.request.toJSON(),body:e.request.body}),await jn.context.doInScimContext(async()=>{let r=await t();return await Bt.logResponse({...e.response.toJSON(),body:e.response.body}),r}));var ji=async(e,t)=>{await ls(),await t()};var CA=require("@budibase/backend-core");var va=e=>Wi(CA.users.getById,e,!0),Ea=e=>Wi(M.get,e,!0),Wn=e=>Wi(M.get,e,!1);function Wi(e,t,r){return async(a,n)=>{let o=a.params[t];return typeof o!="string"&&a.throw(404),!!(await e(o)).scimInfo?.isSync!==r&&a.throw(404),n()}}var Ra=require("@budibase/backend-core");var $i=require("dd-trace");async function LA(e,t){await $i.tracer.trace("licenseAuth",async r=>{let a=e.request.headers[Ra.constants.Header.LICENSE_KEY];Array.isArray(a)&&(a=a[0]),r.addTags({licenseKey:a}),a||e.throw(403,"License key not provided");let n=await as(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"),$i.tracer.setUser({id:"anonymous",tenantId:n.tenantId}),await Ra.context.doInSelfHostTenantUsingCloud(n.tenantId,async()=>{await Ra.context.doInLicenseContext(n,async()=>{await t()})})})}var tu={};w(tu,{appBackups:()=>hb,auditLogs:()=>ob,environmentVariables:()=>JA,groups:()=>QA,scim:()=>Kb,users:()=>Jb});async function OA(e){let t=e.request.body;if(t.name=t.name.trim(),delete t.roles,t._id){let a=await qt(t._id);t.roles=a.roles,t.scimInfo=a.scimInfo}let r=await dr(t);e.body={_id:r.id,_rev:r.rev}}async function PA(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 Ss(t,r)),a&&(o=await ws(t,a)),e.body={added:n,removed:o}}async function UA(e){let t=e.params.groupId,r=e.request.body.add,a=e.request.body.remove;(r&&!Array.isArray(r)||a&&!Array.isArray(a))&&e.throw(400,"Must supply a list of objects, with appId and roleId to add or remove"),e.body=await Ts(t,{appsToAdd:r,appsToRemove:a})}async function qA(e){e.body={data:await ha()}}async function DA(e){let{groupId:t,rev:r}=e.params;try{await Is(t,r),e.body={message:"Group deleted successfully"}}catch(a){e.throw(a.status,a)}}async function NA(e){try{e.body=await qt(e.params.groupId)}catch(t){e.throw(t.status,t)}}async function BA(e){let{pageSize:t=10,bookmark:r,emailSearch:a}=e.request.query,n=e.params.groupId,o={limit:t+1},s=await Fa(n,{...o,emailSearch:a,bookmark:r}),i=a?s[t]?.email:s[t]?._id,p=!!i;e.body={users:s.slice(0,t),bookmark:i,hasNextPage:p}}async function MA(e){let{groupId:t,appId:r}=e.params;await vs(t,r),e.body={message:"Group app builder access updated."}}async function GA(e){let{groupId:t,appId:r}=e.params;await Es(t,r),e.body={message:"group app builder access removed."}}var kA=P(require("@koa/router")),Ae=P(require("joi"));var Re=require("@budibase/types"),ze=require("@budibase/backend-core"),FA=new kA.default;function UM(){return ze.auth.joiValidator.body(Ae.default.object({_id:Ae.default.string().optional(),_rev:Ae.default.string().optional(),color:Ae.default.string().required(),icon:Ae.default.string().required(),name:Ae.default.string().trim().required().max(50),role:Ae.default.string().optional(),users:Ae.default.array().optional(),apps:Ae.default.array().optional(),roles:Ae.default.object().optional(),createdAt:Ae.default.string().optional(),updatedAt:Ae.default.string().optional()}).required())}FA.post("/api/global/groups",ze.auth.adminOnly,W.requireFeature(Re.Feature.USER_GROUPS),UM(),OA).get("/api/global/groups",W.requireFeature(Re.Feature.USER_GROUPS),qA).delete("/api/global/groups/:groupId/:rev",W.requireFeature(Re.Feature.USER_GROUPS),ze.auth.adminOnly,Wn("groupId"),DA).get("/api/global/groups/:groupId",W.requireFeature(Re.Feature.USER_GROUPS),ze.auth.builderOrAdmin,NA).get("/api/global/groups/:groupId/users",W.requireFeature(Re.Feature.USER_GROUPS),ze.auth.builderOrAdmin,BA).post("/api/global/groups/:groupId/users",ze.auth.adminOnly,W.requireFeature(Re.Feature.USER_GROUPS),Wn("groupId"),PA).post("/api/global/groups/:groupId/apps",ze.auth.builderOrAdmin,W.requireFeature(Re.Feature.USER_GROUPS),UA).post("/api/global/groups/:groupId/app/:appId/builder",ze.auth.builderOrAdmin,W.requireFeatures(Re.Feature.USER_GROUPS,Re.Feature.APP_BUILDERS),MA).delete("/api/global/groups/:groupId/app/:appId/builder",ze.auth.builderOrAdmin,W.requireFeatures(Re.Feature.USER_GROUPS,Re.Feature.APP_BUILDERS),GA);var QA=FA;var Vi=require("@budibase/types");var Yi=require("@budibase/backend-core");async function jA(e){e.body={encryptionKeyAvailable:Ye.isEncryptionKeyAvailable()}}async function WA(e){e.body={variables:await Ye.fetch()}}async function $A(e){let{name:t,production:r,development:a}=e.request.body;await Ye.update(t,{production:r,development:a});let n=[Vi.AppEnvironment.PRODUCTION];r!==a&&n.push(Vi.AppEnvironment.DEVELOPMENT),await Yi.events.environmentVariable.created(t,n),e.body={message:`Environment variable "${t}" created.`}}async function KA(e){let{production:t,development:r}=e.request.body,a=e.params.varName;await Ye.update(a,{production:t,development:r}),e.body={message:`Environment variable "${a}" updated.`}}async function VA(e){let t=e.params.varName;await Ye.remove(t),await Yi.events.environmentVariable.deleted(t),e.body={message:`Environment variable "${t}" deleted.`}}var Mt=require("@budibase/backend-core"),HA=P(require("@koa/router")),_a=P(require("joi")),zA=new HA.default;function YA(){return Mt.auth.joiValidator.body(_a.default.object({name:_a.default.string().optional(),production:_a.default.string().required(),development:_a.default.string().required()}))}zA.get("/api/env/variables/status",Mt.auth.builderOrAdmin,jA).get("/api/env/variables",Mt.auth.builderOrAdmin,WA).post("/api/env/variables",Mt.auth.builderOrAdmin,YA(),$A).patch("/api/env/variables/:varName",Mt.auth.builderOrAdmin,YA(),KA).delete("/api/env/variables/:varName",Mt.auth.builderOrAdmin,VA);var JA=zA;var Hi=require("@budibase/backend-core");async function XA(e){let t=e.request.body,r=await yt.fetch(t);await Hi.events.auditLog.filtered(t),e.body=r}async function ZA(e){let t=e.request.body,{stream:r}=yt.download(t);await Hi.events.auditLog.downloaded(t),e.attachment(`audit-logs-${Date.now()}.log`),e.body=r}async function eb(e){e.body={events:yt.definitions()}}var rb=require("@budibase/types"),Gt=require("@budibase/backend-core"),ab=P(require("@koa/router")),_e=P(require("joi"));function tb(){return Gt.auth.joiValidator.body(_e.default.object({userIds:_e.default.array().items(_e.default.string()).optional(),appIds:_e.default.array().items(_e.default.string()).optional(),events:_e.default.array().items(_e.default.string().valid(...Object.values(rb.Event))).optional(),startDate:_e.default.string().optional().allow(""),endDate:_e.default.string().optional().allow(""),fullSearch:_e.default.string().optional().allow(""),bookmark:_e.default.number()}))}var nb=new ab.default;nb.post("/api/global/auditlogs/search",Gt.auth.adminOnly,tb(),XA).get("/api/global/auditlogs/download",Gt.auth.adminOnly,Gt.middleware.querystringToBody,tb(),ZA).get("/api/global/auditlogs/definitions",Gt.auth.adminOnly,eb);var ob=nb;var zi=require("@budibase/types");var sb=require("@budibase/backend-core");async function Ir(e,t){await Vt.appExists(t)||e.throw(400,`Provided app ID: ${t} - is invalid.`)}async function ib(e){let t=e.params.appId;await Ir(e,t);let r=e.request.body,a=e.user?._id,n=await Ee.triggerAppBackup(t,zi.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 ub(e){let t=e.params.appId;await Ir(e,t);let r=e.params.backupId,a=e.request.body.name,n=await Ee.triggerAppRestore(t,r,a,e.user?._id);n||e.throw(500,"Unable to start restore."),await sb.events.backup.appBackupRestored(n.metadata),e.body={restoredId:n?.restoreId,message:"Restore triggered - process starting."}}async function pb(e){let t=e.params.appId;await Ir(e,t);let r=e.params.backupId;await Ee.deleteAppBackup(r),e.body={message:"Backup deleted successfully."}}async function cb(e){let t=e.params.appId;await Ir(e,t);let r=e.request.body;r?.trigger&&(r.trigger=r.trigger.toLowerCase(),Object.values(zi.AppBackupTrigger).includes(r.trigger)||e.throw(400,"Provided trigger is not a valid option.")),e.body=await Ee.fetchAppBackups(t,{paginate:!0,...r})}async function lb(e){let t=e.params.appId;await Ir(e,t);let r=e.params.backupId,a=e.request.body;e.body=await Ee.updateAppBackup(r,a.name)}async function fb(e){let t=e.params.appId;await Ir(e,t);let r=e.params.backupId,{metadata:a,stream:n}=await Ee.getBackupDownloadStream(r);e.attachment(`backup-${a.timestamp}.tar.gz`),e.body=n}var mb=P(require("@koa/router")),kt=P(require("joi")),$n=require("@budibase/types"),bt=require("@budibase/backend-core"),gb=new mb.default;function BM(){return bt.auth.joiValidator.body(kt.default.object({trigger:kt.default.string().valid(...Object.values($n.AppBackupTrigger)),type:kt.default.string().valid(...Object.values($n.AppBackupType)),startDate:kt.default.date(),endDate:kt.default.date(),page:kt.default.string()}))}gb.post("/api/apps/:appId/backups",bt.auth.builderOrAdmin,ib).post("/api/apps/:appId/backups/search",bt.auth.builderOrAdmin,BM(),cb).get("/api/apps/:appId/backups/:backupId/file",bt.auth.builderOrAdmin,fb).patch("/api/apps/:appId/backups/:backupId",bt.auth.builderOrAdmin,lb).delete("/api/apps/:appId/backups/:backupId",bt.auth.builderOrAdmin,pb).post("/api/apps/:appId/backups/:backupId/import",bt.auth.builderOrAdmin,ub);var hb=gb;var $b=P(require("@koa/router"));var Kn=require("scim-patch");var Ab=require("@budibase/backend-core");function yb(e,t){let r=e.request.query[t];if(r!==void 0)return+r}var bb=async e=>{let t=yb(e,"pageSize")??20,r=yb(e,"startIndex"),a;e.request.query.filter&&(a=V.user.userFilters(e.request.query.filter));let n=await fe.get({pageSize:t,skip:r,filters:a});e.body={schemas:["urn:ietf:params:scim:api:messages:2.0:ListResponse"],totalResults:n.total,Resources:n.users.map(V.user.toScimUserResponse),startIndex:(r||0)+1,itemsPerPage:t}},Ib=async e=>{let{id:t}=e.params;typeof t!="string"&&e.throw(404);let r=await fe.find(t);e.body=V.user.toScimUserResponse(r)},Sb=async e=>{let t=V.user.fromScimUser(e.request.body);try{let r=await fe.create(t);e.body=V.user.toScimUserResponse(r)}catch(r){throw r instanceof Ab.EmailUnavailableError&&e.throw(409,"Email already in use"),r}};function MM(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 wb=async e=>{let t=await fe.find(e.params.id);t||e.throw(404);let r=V.user.toScimUserResponse(t),a=e.request.body;try{(0,Kn.patchBodyValidation)(a)}catch{}if(MM(a))return Ji(e);let n;try{n=(0,Kn.scimPatch)(r,a.Operations)}catch{}n||e.throw(500);let o=V.user.fromScimUser(n);await fe.update(o,{allowChangingEmail:!0}),e.body=V.user.toScimUserResponse(o)},Ji=async e=>{let{id:t}=e.params;typeof t!="string"&&e.throw(404),await fe.remove(t),e.status=204};var Bb=P(Nb()),Mb=require("@budibase/shared-core"),Vn=require("scim-patch");var Yn=require("scim2-parse-filter");function Gb(e,t){for(let r of t.split(","))delete e[r]}var kb=async e=>{let r=(await j.fetch()).filter(o=>o.scimInfo?.isSync).map(V.group.toScimGroupResponse),{filter:a,excludedAttributes:n}=e.request.query;if(a){let o=(0,Yn.filter)((0,Yn.parse)(a));r=r.filter(o)}n&&r.forEach(o=>{Gb(o,n)}),e.body={schemas:["urn:ietf:params:scim:api:messages:2.0:ListResponse"],totalResults:r.length,Resources:r,startIndex:1,itemsPerPage:r.length}},Fb=async e=>{let t=V.group.fromScimGroup(e.request.body),r=await br.create(t);e.body=V.group.toScimGroupResponse(r)},Qb=async e=>{let{id:t}=e.params,r=await j.get(t),a=V.group.toScimGroupResponse(r),{excludedAttributes:n}=e.request.query;n&&Gb(a,n),e.body=a},jb=async e=>{let{id:t}=e.params,r=await j.get(t);await j.remove(t,r._rev),e.status=204},Wb=async e=>{let{id:t}=e.params,r=await j.get(t),a=V.group.toScimGroupResponse(r),n=e.request.body;try{(0,Vn.patchBodyValidation)(n)}catch{e.throw(400)}let{true:o,false:s}=(0,Bb.default)(n.Operations,i=>i.path==="members");if(s?.length){let i=(0,Vn.scimPatch)(a,s);i||e.throw(500);let p={...V.group.fromScimGroup(i),_rev:r._rev};await j.save(p)}if(o?.length){let i=[],p=[];for(let{op:m,value:f}of o)switch(m){case"add":case"Add":for(let h of f)i.push(await fe.find(h.value));break;case"remove":case"Remove":for(let h of f)p.push(await fe.find(h.value));break;case"replace":case"Replace":throw new Error("Replacing members is not allowed");default:Mb.utils.unreachable(m)}i.length&&await j.addUsers(t,i.map(m=>m._id)),p.length&&await j.removeUsers(t,p.map(m=>m._id))}e.body=V.group.toScimGroupResponse(await j.get(t))};var xa=require("@budibase/types"),be=new $b.default({prefix:"/api/global/scim/v2"});be.use(ji);be.use(Qi);be.get("/users",bb);be.get("/users/:id",va("id"),Ib);be.post("/users",Sb);be.patch("/users/:id",va("id"),wb);be.delete("/users/:id",va("id"),Ji);be.get("/groups",kb);be.post("/groups",W.requireFeature(xa.Feature.USER_GROUPS),Fb);be.get("/groups/:id",W.requireFeature(xa.Feature.USER_GROUPS),Ea("id"),Qb);be.delete("/groups/:id",W.requireFeature(xa.Feature.USER_GROUPS),Ea("id"),jb);be.patch("/groups/:id",W.requireFeature(xa.Feature.USER_GROUPS),Ea("id"),Wb);var Kb=be;var Hb=P(require("@koa/router"));var Xi=require("@budibase/backend-core");async function Vb(e){let{userId:t,appId:r}=e.params,a=await at.db.getUser(t);if(Xi.users.isGlobalBuilder(a)){e.body={message:"User already admin - no permissions updated."};return}await at.addAppBuilder(a,r),e.body={message:`User "${a.email}" app builder access updated.`}}async function Yb(e){let{userId:t,appId:r}=e.params,a=await at.db.getUser(t);if(Xi.users.isGlobalBuilder(a)){e.body={message:"User already admin - no permissions removed."};return}await at.removeAppBuilder(a,r),e.body={message:`User "${a.email}" app builder access removed.`}}var Zi=require("@budibase/types"),eu=require("@budibase/backend-core"),zb=new Hb.default;zb.post("/api/global/users/:userId/app/:appId/builder",eu.auth.builderOrAdmin,W.requireFeatures(Zi.Feature.APP_BUILDERS),Vb).delete("/api/global/users/:userId/app/:appId/builder",eu.auth.builderOrAdmin,W.requireFeatures(Zi.Feature.APP_BUILDERS),Yb);var Jb=zb;var V={};w(V,{group:()=>au,user:()=>ru});var ru={};w(ru,{fromScimUser:()=>fG,toScimUserResponse:()=>cG,userFilters:()=>mG});var Hn=require("@budibase/types"),Xb=require("scim2-parse-filter"),Zb=require("@budibase/backend-core"),eI=require("@budibase/shared-core"),{unreachable:pG}=eI.utils,cG=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===Hn.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},lG=e=>!!e?.id;function dG(e){if(Zb.utils.validEmail(e.userName))return e.userName;if(e.emails)return e.emails.find(t=>t.primary)?.value||e.emails[0]?.value}var fG=e=>{let t=lG(e)?e:void 0,r=dG(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:pG(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?Hn.UserStatus.ACTIVE:Hn.UserStatus.INACTIVE,createdAt:t?.meta.created.getTime(),updatedAt:t?.meta.lastModified.toISOString()}},mG=e=>{let t={equal:{}},r=(0,Xb.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 au={};w(au,{fromScimGroup:()=>yG,toScimGroupResponse:()=>gG});var gG=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}))}),hG=e=>!!e?.id,yG=e=>{let t=hG(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 _u={};w(_u,{LLM:()=>Je,LLMRequest:()=>$,TableGeneration:()=>Ru,agentHistoryTitleSystemPrompt:()=>xG,agentSystemPrompt:()=>_G,aiColumnSchemas:()=>vu,aiTableResponseToTableSchema:()=>Iu,appendAIColumns:()=>Su,classifyText:()=>su,cleanData:()=>iu,extractFileData:()=>TG,generateAIColumns:()=>Au,generateCode:()=>RG,generateCronExpression:()=>uu,generateData:()=>bu,generateJs:()=>du,generateSQL:()=>EG,generateTables:()=>yu,generationStructure:()=>Tu,getLLM:()=>Oa,getLLMConfig:()=>hu,getLLMOrThrow:()=>cI,normalizeContentType:()=>nu,parseResponseFormat:()=>Jn,sanitiseToolName:()=>AG,searchWeb:()=>lu,sentimentAnalysis:()=>cu,summarizeText:()=>zn,tableDataStructuredOutput:()=>Eu,translate:()=>pu});var Ca=require("@budibase/types");function AG(e){if(e.length>64)throw new Error("Tool name must be under 64 characters long");return e.replace(/[^a-zA-Z0-9_-]/g,"_")}function nu(e){return e?e.includes("/")?e:{[Ca.SupportedFileType.PDF]:"application/pdf",[Ca.SupportedFileType.JPG]:"image/jpeg",[Ca.SupportedFileType.JPEG]:"image/jpeg",[Ca.SupportedFileType.PNG]:"image/png"}[e.toLowerCase()]||"application/octet-stream":"application/octet-stream"}var ro=require("@budibase/types");var Xe=require("@budibase/backend-core"),sI=require("@budibase/types");var Xn=P(require("openai"));var It=require("@budibase/types");var tI=require("@budibase/shared-core");var St=P(require("dd-trace"));function ou(e,t){return t.map(r=>e[r]).join(" ")}var Je=class{constructor({model:t,apiKey:r,maxTokens:a}){this._model=t,this._apiKey=r,this._maxTokens=a??parseInt(process.env.BUDIBASE_AI_MAX_PROMPT_TOKENS||"300")}get model(){return this._model}get apiKey(){return this._apiKey}get maxTokens(){return this._maxTokens}async prompt(t){return await St.default.trace("prompt",async()=>{let r=typeof t=="string"?new $().addUserMessage(t):t,{messages:a,tokensUsed:n}=await St.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 St.default.trace("chat",async()=>await this.chatCompletion(t))}async*chatStream(t){yield*this.chatCompletionStream(t)}async summarizeText(t){return St.default.trace("summarizeText",()=>this.prompt(zn(t)))}async generateCronExpression(t){return St.default.trace("generateCronExpression",()=>this.prompt(uu(t)))}async operation(t,r){return St.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 It.AIOperationEnum.SUMMARISE_TEXT:return zn(ou(r,o));case It.AIOperationEnum.CLEAN_DATA:return iu(r[n]);case It.AIOperationEnum.TRANSLATE:return pu(r[n],s);case It.AIOperationEnum.CATEGORISE_TEXT:if(!i)throw Error("No categories provided for categorise text operation. Please provide categories.");return su(ou(r,o),i.split(","));case It.AIOperationEnum.SENTIMENT_ANALYSIS:return cu(r[n]);case It.AIOperationEnum.PROMPT:return p;case It.AIOperationEnum.SEARCH_WEB:return lu(ou(r,o));default:throw tI.utils.unreachable(a)}}async generateJs(t,r){return await St.default.trace("generateJs",async()=>{let{bindings:a=[],snippets:n=[]}=r||{};return await this.prompt(du(a,n).addUserMessage(t))})}};var aI=require("@budibase/types"),fu=require("openai/helpers/zod");function Jn(e){if(e)return e==="text"?{type:"text"}:e==="json"?{type:"json_object"}:e}function rI(e){if(!e)return 0;let t=e.prompt_tokens;return e.completion_tokens*3+t}var xe=class extends Je{constructor(r){super(r);this.client=this.getClient(r)}getClient(r){if(!r.apiKey)throw new Error("No OpenAI API key found");return new Xn.default({apiKey:r.apiKey})}async uploadFile(r,a,n){let o=nu(n);if(aI.ImageContentTypes.includes(o.toLowerCase())){let p;if(Buffer.isBuffer(r))p=r;else{let f=[];for await(let h of r)f.push(h);p=Buffer.concat(f)}let m=p.toString("base64");return`data:${o};base64,${m}`}let s=await(0,Xn.toFile)(r,a);return(await this.client.files.create({file:s,purpose:"assistants"})).id}async chatCompletion(r){let a={model:this.model,messages:r.messages,max_tokens:this.maxTokens,response_format:Jn(r.format)};r.tools&&r.tools.length>0&&(a.tool_choice="auto",a.tools=r.tools.map(fu.zodFunction));let n=await this.client.chat.completions.create(a),o=n.choices[0]?.message;if(o?.tool_calls){r.addMessage(o);let s=[];for(let i of o.tool_calls){let p=r.findTool(i.function.name);if(!p)throw new Error(`Tool ${i.function.name} not found in prompt tools`);let m=JSON.parse(i.function.arguments);s.push(p.handler(m).then(f=>({role:"tool",tool_call_id:i.id,content:f})).catch(f=>(console.error(`[OPENAI TOOL ERROR] Tool ${i.function.name} failed in OpenAI handler:`,f),{role:"tool",tool_call_id:i.id,content:`Error: ${f.message}`})))}return r.addMessages(await Promise.all(s)),this.chatCompletion(r)}else{if(o?.content)return{messages:[...r.messages,{role:o.role,content:o.content}],tokensUsed:rI(n.usage)};throw new Error("No response found")}}async*chatCompletionStream(r){let a={model:this.model,messages:r.messages,max_tokens:this.maxTokens,response_format:Jn(r.format),stream:!0};r.tools&&r.tools.length>0&&(a.tool_choice="auto",a.tools=r.tools.map(fu.zodFunction));try{let n=await this.client.chat.completions.create(a),o=null,s="",i=null;for await(let m of n){let f=m.choices[0]?.delta;if(f){if(f.content&&(s+=f.content,yield{type:"content",content:f.content}),f.tool_calls&&f.tool_calls.length>0){let h=f.tool_calls[0];h.id?(o={id:h.id,name:h.function?.name||"",arguments:h.function?.arguments||""},yield{type:"tool_call_start",toolCall:{id:o.id,name:o.name,arguments:o.arguments}}):o&&h.function?.arguments&&(o.arguments+=h.function.arguments,yield{type:"tool_call_start",toolCall:{id:o.id,name:o.name,arguments:o.arguments}})}m.usage&&(i=m.usage)}}let p=i?rI(i):0;if(o){r.addMessage({role:"assistant",content:"",tool_calls:[{id:o.id,type:"function",function:{name:o.name,arguments:o.arguments}}]});let m=r.findTool(o.name);if(m)try{let f=JSON.parse(o.arguments),h=await m.handler(f);yield{type:"tool_call_result",toolResult:{id:o.id,result:h}},r.addMessage({role:"tool",tool_call_id:o.id,content:h}),yield*this.chatCompletionStream(r);return}catch(f){yield{type:"tool_call_result",toolResult:{id:o.id,result:`Error: ${f.message}`,error:f.message}},r.addMessage({role:"tool",tool_call_id:o.id,content:`Error: ${f.message}`}),yield*this.chatCompletionStream(r);return}else{let f=`Tool '${o.name}' not found`;yield{type:"tool_call_result",toolResult:{id:o.id,result:f,error:f}},r.addMessage({role:"tool",tool_call_id:o.id,content:f}),yield*this.chatCompletionStream(r);return}}s&&r.addMessage({role:"assistant",content:s}),yield{type:"done",messages:r.messages,tokensUsed:p}}catch(n){yield{type:"error",content:n.message}}}};var ee=require("@budibase/backend-core"),nI=require("@budibase/types");var mu=require("dd-trace"),Zn=class extends Je{async prompt(t){let r=await super.prompt(t);return r.tokensUsed&&await In(r.tokensUsed),r}async chat(t){let r=await super.chat(t);return r.tokensUsed&&await In(r.tokensUsed),r}async uploadFile(t,r,a){return ee.env.SELF_HOSTED?this.uploadFileSelfHost(t,r,a):this.uploadFileCloud(t,r,a)}async uploadFileCloud(t,r,a){return new xe({apiKey:ee.env.OPENAI_API_KEY,model:this.model,maxTokens:this.maxTokens}).uploadFile(t,r,a)}async uploadFileSelfHost(t,r,a){let n;if(Buffer.isBuffer(t))n=t;else{let p=[];for await(let m of t)p.push(m);n=Buffer.concat(p)}let o=n.toString("base64");if(a&&nI.ImageContentTypes.includes(a.toLowerCase()))return`data:image/jpeg;base64,${o}`;if(!ee.env.BUDICLOUD_URL)throw new Error("No Budibase URL found");if(!this._apiKey){let p=await dn();if(!p)throw new Error("No license key found");this._apiKey=p}let s=await fetch(`${ee.env.BUDICLOUD_URL}/api/ai/upload-file`,{method:"POST",headers:{"Content-Type":"application/json",[ee.constants.Header.LICENSE_KEY]:this._apiKey},body:JSON.stringify({data:o,filename:r,contentType:a})});if(!s.ok)throw await ee.HTTPError.fromResponse(s);return(await s.json()).fileId}async chatCompletion(t){return ee.env.SELF_HOSTED?this.chatCompletionSelfHost(t):this.chatCompletionCloud(t)}async chatCompletionCloud(t){return await mu.tracer.trace("chatCompletionCloud",async()=>await new xe({apiKey:ee.env.OPENAI_API_KEY,model:this.model,maxTokens:this.maxTokens}).chatCompletion(t))}async chatCompletionSelfHost(t){return await mu.tracer.trace("chatCompletionSelfHost",async r=>{if(!ee.env.BUDICLOUD_URL)throw new Error("No Budibase URL found");if(r.addTags({budicloudUrl:ee.env.BUDICLOUD_URL}),!this._apiKey){let o=await dn();if(!o)throw new Error("No license key found");this._apiKey=o,r.addTags({licenseKey:this._apiKey})}let a={messages:t.messages,format:t.format,useTools:t.tools.length>0},n=await fetch(`${ee.env.BUDICLOUD_URL}/api/ai/chat`,{method:"POST",headers:{"Content-Type":"application/json",[ee.constants.Header.LICENSE_KEY]:this._apiKey},body:JSON.stringify(a)});if(!n.ok)throw await ee.HTTPError.fromResponse(n);return await n.json()})}async*chatCompletionStream(t){ee.env.SELF_HOSTED?yield*this.chatCompletionStreamSelfHost(t):yield*this.chatCompletionStreamCloud(t)}async*chatCompletionStreamCloud(t){yield*new xe({apiKey:ee.env.OPENAI_API_KEY,model:this.model,maxTokens:this.maxTokens}).chatCompletionStream(t)}async*chatCompletionStreamSelfHost(t){try{let r=await this.chatCompletionSelfHost(t);if(r.messages.length>0){let a=r.messages[r.messages.length-1];a.content&&(yield{type:"content",content:a.content})}yield{type:"done",messages:r.messages,tokensUsed:r.tokensUsed}}catch(r){yield{type:"error",content:r.message}}}};var La=require("dd-trace");var gu=P(require("@anthropic-ai/sdk"));function bG(e){if(!e)return 0;let t=e.input_tokens;return e.output_tokens*3+t}var eo=class extends Je{constructor(r){super(r);this.client=new gu.default({apiKey:r.apiKey})}firstTextBlock(r){for(let a of r.content)if(a.type==="text")return a.text}async uploadFile(r,a,n){throw new Error("File upload not supported for this LLM provider")}async chatCompletion(r){try{let a=await this.client.messages.create({model:this.model,messages:r.messages.map(({content:o})=>{if(o==null)return{role:"user",content:""};if(typeof o=="string")return{role:"user",content:o};let s="";for(let i of o)i.type==="text"?s+=i.text:["image_url","input_audio","file"].includes(i.type);return{role:"user",content:s}}),max_tokens:this.maxTokens}),n=this.firstTextBlock(a)||"";return{messages:[...r.messages,{role:"assistant",content:n}],tokensUsed:bG(a.usage)}}catch(a){throw a instanceof gu.default.APIError&&console.error(`Anthropic Prompt failed with error ${a.name} and status: ${a.status}`),a}}async*chatCompletionStream(r){try{let a=await this.chatCompletion(r);if(a.messages.length>0){let n=a.messages[a.messages.length-1];n.content&&(yield{type:"content",content:n.content})}yield{type:"done",messages:a.messages,tokensUsed:a.tokensUsed}}catch(a){yield{type:"error",content:a.message}}}};var iI=require("zod"),uI=require("openai/helpers/zod");var oI=require("openai"),to=class extends xe{getClient(t){if(!t.apiKey)throw new Error("No Azure OpenAI API key found");if(!t.model)throw new Error("No Azure OpenAI model specified");return new oI.AzureOpenAI({apiKey:t.apiKey,apiVersion:"2024-10-01-preview",deployment:t.model,baseURL:t.baseUrl})}};var pI="gpt-4o-mini",IG={OpenAI:xe,TogetherAI:xe,AzureOpenAI:to,Custom:xe,Anthropic:eo,BudibaseAI:Zn};async function SG(){return await La.tracer.trace("getAIConfig",async e=>{let t={type:sI.ConfigType.AI,config:{}};if(!Xe.context.isSelfHostUsingCloud()){let a=await Xe.configs.getAIConfig();a&&(t=a)}await ds(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||pI,apiKey:r.apiKey,baseUrl:r.baseUrl}})}async function wG(){return La.tracer.trace("getSelfHostOpenAIKeyConfig",e=>{if(!Xe.env.SELF_HOSTED){e.addTags({enabled:!1,reason:"not self host"});return}if(!Xe.env.OPENAI_API_KEY){e.addTags({enabled:!1,reason:"no OPENAI_API_KEY"});return}return e.addTags({enabled:!0}),{provider:"OpenAI",model:pI,apiKey:Xe.env.OPENAI_API_KEY}})}async function hu(){return La.tracer.trace("getLLMConfig",async()=>await SG()||await wG())}async function Oa(e){return await La.tracer.trace("getLLM",async t=>{let{model:r,maxTokens:a}=e||{},n=await hu();if(!n){t.addTags({enabled:!1,reason:"no config found"});return}r&&(n.model=r),a&&(n.maxTokens=a);let o=IG[n.provider];if(!o){t.addTags({enabled:!1,reason:"no provider found",provider:n.provider});return}return new o(n)})}async function cI(){let e=await Oa();if(!e)throw new Xe.HTTPError("No available LLM configurations",500);return e}var $=class e{constructor(){this.messages=[];this.tools=[]}addTool(t){return this.tools.push(t),this}addTools(t){return this.tools.push(...t),this}findTool(t){return this.tools.find(r=>r.name===t)}withFormat(t){return t instanceof iI.z.ZodType?this.format=(0,uI.zodResponseFormat)(t,"key"):this.format=t,this}addMessage(t){return this.messages.push(t),this}addMessages(t){return this.messages.push(...t),this}addUserMessage(t){return this.messages.push({role:"user",content:t}),this}addSystemMessage(t){return this.messages.push({role:"system",content:t}),this}static fromRequest(t){let r=new e;return t.messages&&r.addMessages(t.messages),t.format&&r.withFormat(t.format),r}};var it=require("zod");function zn(e,t){let r=`Summarize this text:
39
+ ${e}`,a="";if(t)switch(t){case ro.SummariseLength.SHORT:a="In 1-2 concise sentences, ";break;case ro.SummariseLength.MEDIUM:a="In 2-3 paragraphs, ";break;case ro.SummariseLength.LONG:a="In multiple detailed paragraphs, ";break}return new $().addUserMessage(`${a}${r}.
40
+ Only return the summary.`)}function TG(e,t){let r=["You are a data extraction assistant.","Extract data from the attached document/image that matches the provided schema.","The schema defines the structure where values like 'string', 'number', 'boolean' indicate the expected data types.","Extract all items that match the schema from the document.","Return the data in json format","If no matching data is found, return an empty data array."].join(`
41
+
42
+ `),n=t.startsWith("data:")?[{type:"image_url",image_url:{url:t}},{type:"text",text:r}]:[{type:"text",text:`${r}
43
+
44
+ File ID: ${t}`}],o=vG(e),s=it.z.object({data:it.z.array(o)});return new $().addMessages([{role:"user",content:n}]).withFormat(s)}function vG(e){let t={};for(let[r,a]of Object.entries(e))if(typeof a=="string")switch(a.toLowerCase()){case"string":t[r]=it.z.string();break;case"number":t[r]=it.z.number();break;case"boolean":t[r]=it.z.boolean();break;default:t[r]=it.z.string()}else t[r]=it.z.string();return it.z.object(t)}function su(e,t){return new $().addUserMessage(`Return the category of this text: "${e}". Based on these categories: ${t.join(", ")}. Only return the category. Do not add any extra punctuation or fix spelling mistakes. It should exactly match one of the categories. `)}function iu(e){return new $().addUserMessage(`Clean the following string: "${e}". Remove any spelling mistakes or data issues. Only return the cleaned string itself and nothing else.`)}function EG(e,t){return new $().addUserMessage(`Given the table schema:
41
45
  ${t}
42
46
 
43
47
  Generate a SQL query for the following request:
44
48
  ${e}.
45
- Only provide the SQL.`)}function yG(e){return new V().addUserMessage(`Generate JavaScript code for the following request:
49
+ Only provide the SQL.`)}function RG(e){return new $().addUserMessage(`Generate JavaScript code for the following request:
46
50
  ${e}.
47
- Only provide the JS and nothing else.`)}function tu(e){return new V().addUserMessage(`Generate a node-cron compatible expression based on the following prompt. Return only the cron expression (without backticks), and if not possible return only 'Error generating cron' with a short explanation:
48
- ${e}`)}function ru(e,t){return new V().addUserMessage(`Translate the following text: "${e}" into ${t}. Only return the translation.`)}function au(e){return new V().addUserMessage(`Return the sentiment of this text: "${e}". Only return the sentiment.`)}function nu(e){return new V().addUserMessage(`Search the web for the following: "${e}". Only return the top results.`)}function ou(e,t){let r="You do not have access to any bindings in this request.";e&&e.length>0&&(r=`The bindings you have access to are:
51
+ Only provide the JS and nothing else.`)}function uu(e){return new $().addUserMessage(`Generate a node-cron compatible expression based on the following prompt. Return only the cron expression (without backticks), and if not possible return only 'Error generating cron' with a short explanation:
52
+ ${e}`)}function pu(e,t){return new $().addUserMessage(`Translate the following text: "${e}" into ${t}. Only return the translation.`)}function cu(e){return new $().addUserMessage(`Return the sentiment of this text: "${e}". Only return the sentiment.`)}function lu(e){return new $().addUserMessage(`Search the web for the following: "${e}". Only return the top results.`)}function du(e,t){let r="You do not have access to any bindings in this request.";e&&e.length>0&&(r=`The bindings you have access to are:
49
53
 
50
54
  ${e.map(({readableBinding:n})=>`- $("${n}")`).join(`
51
55
  `)}`);let a="You do not have access to any snippets in this request.";return t.length>0&&(a=`The snippets you have access to are:
52
56
 
53
57
  ${t.map(({name:n,code:o})=>{let s=o.replace(/^\s*return /g,"");return`- snippets.${n} = ${s.trim()}`}).join(`
54
- `)}`),new V().addSystemMessage(`
58
+ `)}`),new $().addSystemMessage(`
55
59
  You are a helpful expert in writing JavaScript. A user is asking you for help
56
60
  writing some JavaScript for their application.
57
61
 
@@ -140,7 +144,7 @@ a variable, it will be provided to you as a binding.
140
144
 
141
145
  ${a}
142
146
 
143
- ${r}`)}function cu(){let e=`
147
+ ${r}`)}function yu(){let e=`
144
148
  You are generating Budibase table schemas from user prompts.
145
149
  Always return at least 2 tables, and define only one side of relationships using a link field.
146
150
  Exclude id, created_at, and updated_at (Budibase adds them).
@@ -148,35 +152,32 @@ Include a variety of column types: text, dropdown, date, number.
148
152
  Add at least one formula column, one attachment, and one multi-attachment column across the tables.
149
153
  Budibase handles reverse relationships and many-to-many links \u2014 never define join tables or reverse fields.
150
154
  You may specify foreignColumnName, but do not create that field manually.
151
- `;return new V().addSystemMessage(e)}function lu(){let e='Given the generated schema, add only one field of type "AI" to relevant tables to add value to the Budibase user.';return new V().addSystemMessage(e)}function du(){let e=`
155
+ `;return new $().addSystemMessage(e)}function Au(){let e='Given the generated schema, add only one field of type "AI" to relevant tables to add value to the Budibase user.';return new $().addSystemMessage(e)}function bu(){let e=`
152
156
  For each table, populate the data field with realistic-looking sample records.
153
157
  Avoid placeholder values like "foo" or "bar". Use real names, emails, etc., and ensure values are unique across rows.
154
- `;return new V().addSystemMessage(e)}function hG(e){return`You are a helpful support agent, using workflows to solve problems for users.
155
- The user is asking you for help with a support query.
156
-
157
- Your reply MUST be short and concise, answering the user's query as quickly and
158
- easily as possible.
159
-
160
- You MUST use markdown for any formatting in your response message.
161
-
162
- Do not tell the user about the format of the parameters, for example if a date is required to be
163
- supplied in ISO format, you should convert it to that, allowing the user to provide the date
164
- in any human readable format.
165
-
166
- If asked you can supply the list of "automations" to the user, this is the list of tool names available.
158
+ `;return new $().addSystemMessage(e)}function _G(e){return`You are a helpful support agent who uses workflows to resolve user issues efficiently.
159
+
160
+ - The user will ask support queries.
161
+ - Your replies MUST be short, concise, and directly answer the user's question as quickly and clearly as possible.
162
+ - Use Markdown formatting in your responses.
163
+ - When receiving truncated or paginated results, automatically make follow-up requests to retrieve all pages
164
+ - If you aren't entirely sure which tool to call, make sure to ask for confirmation rather than assume. If there's any ambiguity, get user confirmation.
165
+ - When a tool call fails, show the detailed error status and message in the UI to provide the user further information as to how to debug.
166
+
167
+
168
+ User information is provided below for context:
167
169
 
168
- Information about the user making the request can be found below:
169
170
  \`\`\`
170
171
  ${JSON.stringify(e)}
171
- \`\`\``}function AG(){return`You will be provided with a set of history, a conversation between a user and an AI. Using this
172
+ \`\`\``}function xG(){return`You will be provided with a set of history, a conversation between a user and an AI. Using this
172
173
  information generate a title for the conversation, this should start with a capital letter and MUST be
173
- less than five words.`}var Oa=require("@budibase/backend-core"),nI=require("@budibase/shared-core");var st=require("@budibase/types"),rI=require("@budibase/backend-core");function fu(e){let t=[],r=[];for(let a of e.tables){let n=a.schema.reduce((o,s)=>{if(s.type===st.FieldType.LINK){if(!r.includes(s.relationshipId)){let i={[st.RelationshipType.MANY_TO_ONE]:st.RelationshipType.ONE_TO_MANY,[st.RelationshipType.ONE_TO_MANY]:st.RelationshipType.MANY_TO_ONE,[st.RelationshipType.MANY_TO_MANY]:st.RelationshipType.MANY_TO_MANY},{reverseFieldName:p,relationshipId:f,...m}=s;o[s.name]={...m,fieldName:p,relationshipType:i[s.relationshipType]},r.push(f)}}else o[s.name]=s;return o},{});t.push({_id:rI.docIds.generateTableID(),name:a.name,primaryDisplay:a.primaryDisplay,schema:n})}return t}function mu(e,t){let r=[];for(let a of e)r.push({...a,schema:{...a.schema,...t[a.name]?.reduce((n,o)=>(n[o.name]=o,n),{})}});return r}var T=require("@budibase/types"),A=require("zod"),ue=A.z.object({name:A.z.string().describe("A human readable name for the field. It MUST be alpha-numeric and capitalised.")}),gu=ue.extend({type:A.z.literal(T.FieldType.LINK),tableId:A.z.string().describe("This must match one of the generated table names"),reverseFieldName:A.z.string().describe("Only the *name* of the field that will appear in the foreign table. Budibase creates this automatically. Do not define the column yourself."),relationshipId:A.z.string().describe("The ID of the relationship. It must be used in pairs, paring many-to-ones and one-to-manys, or many-to-manys with each other.")}),bG=A.z.array(A.z.union([ue.extend({type:A.z.enum([T.FieldType.STRING,T.FieldType.NUMBER,T.FieldType.BOOLEAN,T.FieldType.LONGFORM]),constraints:A.z.object({presence:A.z.boolean()}).optional()}),gu.extend({relationshipType:A.z.enum([T.RelationshipType.MANY_TO_ONE])}).describe("Many-to-one relationship, where the current table is the 'many' side. Defines the initiating side of the relationship. Only this side should be defined. The reverse column will be created automatically."),gu.extend({relationshipType:A.z.enum([T.RelationshipType.ONE_TO_MANY])}).describe("One-to-many relationship, where the current table is the 'one' side. Defines the initiating side of the relationship. Only this side should be defined. The reverse column will be created automatically."),gu.extend({relationshipType:A.z.enum([T.RelationshipType.MANY_TO_MANY])}).describe("Many to many relationship. Defines the initiating side of the relationship. Only this side should be defined. The reverse column will be created automatically."),ue.extend({type:A.z.literal(T.FieldType.OPTIONS),constraints:A.z.object({inclusion:A.z.array(A.z.string()).describe("The options for the field"),presence:A.z.boolean()})}).describe("A single option from closed set of options"),ue.extend({type:A.z.literal(T.FieldType.ARRAY),constraints:A.z.object({inclusion:A.z.array(A.z.string()).describe("The options for the field"),presence:A.z.boolean(),type:A.z.literal(T.JsonFieldSubType.ARRAY)}).describe("Multiple selected options from closed set of options")}),ue.extend({type:A.z.literal(T.FieldType.FORMULA),formula:A.z.string().describe(`
174
+ less than five words.`}var Pa=require("@budibase/backend-core"),fI=require("@budibase/shared-core");var ut=require("@budibase/types"),lI=require("@budibase/backend-core");function Iu(e){let t=[],r=[];for(let a of e.tables){let n=a.schema.reduce((o,s)=>{if(s.type===ut.FieldType.LINK){if(!r.includes(s.relationshipId)){let i={[ut.RelationshipType.MANY_TO_ONE]:ut.RelationshipType.ONE_TO_MANY,[ut.RelationshipType.ONE_TO_MANY]:ut.RelationshipType.MANY_TO_ONE,[ut.RelationshipType.MANY_TO_MANY]:ut.RelationshipType.MANY_TO_MANY},{reverseFieldName:p,relationshipId:m,...f}=s;o[s.name]={...f,fieldName:p,relationshipType:i[s.relationshipType]},r.push(m)}}else o[s.name]=s;return o},{});t.push({_id:lI.docIds.generateTableID(),name:a.name,primaryDisplay:a.primaryDisplay,schema:n})}return t}function Su(e,t){let r=[];for(let a of e)r.push({...a,schema:{...a.schema,...t[a.name]?.reduce((n,o)=>(n[o.name]=o,n),{})}});return r}var T=require("@budibase/types"),A=require("zod"),pe=A.z.object({name:A.z.string().describe("A human readable name for the field. It MUST be alpha-numeric and capitalised.")}),wu=pe.extend({type:A.z.literal(T.FieldType.LINK),tableId:A.z.string().describe("This must match one of the generated table names"),reverseFieldName:A.z.string().describe("Only the *name* of the field that will appear in the foreign table. Budibase creates this automatically. Do not define the column yourself."),relationshipId:A.z.string().describe("The ID of the relationship. It must be used in pairs, paring many-to-ones and one-to-manys, or many-to-manys with each other.")}),CG=A.z.array(A.z.union([pe.extend({type:A.z.enum([T.FieldType.STRING,T.FieldType.NUMBER,T.FieldType.BOOLEAN,T.FieldType.LONGFORM]),constraints:A.z.object({presence:A.z.boolean()}).optional()}),wu.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."),wu.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."),wu.extend({relationshipType:A.z.enum([T.RelationshipType.MANY_TO_MANY])}).describe("Many to many relationship. Defines the initiating side of the relationship. Only this side should be defined. The reverse column will be created automatically."),pe.extend({type:A.z.literal(T.FieldType.OPTIONS),constraints:A.z.object({inclusion:A.z.array(A.z.string()).describe("The options for the field"),presence:A.z.boolean()})}).describe("A single option from closed set of options"),pe.extend({type:A.z.literal(T.FieldType.ARRAY),constraints:A.z.object({inclusion:A.z.array(A.z.string()).describe("The options for the field"),presence:A.z.boolean(),type:A.z.literal(T.JsonFieldSubType.ARRAY)}).describe("Multiple selected options from closed set of options")}),pe.extend({type:A.z.literal(T.FieldType.FORMULA),formula:A.z.string().describe(`
174
175
  A JavaScript expression using only previously defined fields.
175
176
  Reference fields using $("Field name"). Must end with: return ...
176
177
  Example: return $("Score") + $("Weight")
177
- `),responseType:A.z.enum([T.FieldType.STRING,T.FieldType.NUMBER,T.FieldType.BOOLEAN,T.FieldType.DATETIME])}).describe("Define these types after the other types"),ue.extend({type:A.z.literal(T.FieldType.DATETIME),ignoreTimezones:A.z.boolean()}).describe("A datetime field, storing date and time"),ue.extend({type:A.z.literal(T.FieldType.DATETIME),ignoreTimezones:A.z.boolean(),timeOnly:A.z.literal(!0)}).describe("A time only field"),ue.extend({type:A.z.literal(T.FieldType.DATETIME),ignoreTimezones:A.z.boolean(),dateOnly:A.z.literal(!0)}).describe("A date only field"),ue.extend({type:A.z.literal(T.FieldType.ATTACHMENT_SINGLE),subtype:A.z.literal(T.AttachmentSubType.IMAGE)}).describe("Single image column"),ue.extend({type:A.z.literal(T.FieldType.ATTACHMENT_SINGLE)}).describe("Single attachment column. It stores a single document: pdf, word, etc. Use an appropriate name for the column, like 'Invoice', 'Document', etc."),ue.extend({type:A.z.literal(T.FieldType.ATTACHMENTS),subtype:A.z.literal(T.AttachmentSubType.IMAGE)}).describe("Multiple images column. Use an appropiate name for the columns, like 'Gallery', 'Photos', etc."),ue.extend({type:A.z.literal(T.FieldType.ATTACHMENTS)}).describe("Multiple attachments column. It might hold different kind of documents mixed up: pdf, txt, etc. Use an appropiate name for the columns, like 'Invoices', 'Documents', 'Attachments', etc.")])),yu=A.z.object({tables:A.z.array(A.z.object({name:A.z.string(),schema:bG,primaryDisplay:A.z.string().describe("The column will be used as display, so pick the clearer option. This must match EXACTLY one of the created fields names in the schema.")}))});function hu(e){let t=A.z.object({});for(let r of e){let a=Object.values(r.schema),n=[ue.extend({type:A.z.literal(T.FieldType.AI),operation:A.z.literal(T.AIOperationEnum.TRANSLATE),column:A.z.enum(a.filter(o=>[T.FieldType.STRING,T.FieldType.LONGFORM].includes(o.type)).map(o=>o.name)).describe("The columns to translate"),language:A.z.string()}).describe("This column will be autogenerated via AI to translate one column. Use it for reasonable cases, like translating descriptions or similar."),ue.extend({type:A.z.literal(T.FieldType.AI),operation:A.z.literal(T.AIOperationEnum.CATEGORISE_TEXT),columns:A.z.array(A.z.enum(a.filter(o=>[T.FieldType.STRING,T.FieldType.LONGFORM,T.FieldType.BOOLEAN,T.FieldType.NUMBER,T.FieldType.DATETIME].includes(o.type)).map(o=>o.name))).describe("The columns to be used as context"),categories:A.z.string().describe("CSV list of categories")}).describe("This column will be autogenerated via AI to categorise a row based on one or many columns.")];a.some(o=>o.type===T.FieldType.LONGFORM)&&n.push(ue.extend({type:A.z.literal(T.FieldType.AI),operation:A.z.literal(T.AIOperationEnum.SUMMARISE_TEXT),columns:A.z.array(A.z.enum(a.filter(o=>[T.FieldType.STRING,T.FieldType.LONGFORM].includes(o.type)).map(o=>o.name))).describe("Columns, from the current table, to be passed in the context. Use at least one.")}).describe("This column will be autogenerated via AI to summarise one or many columns.")),t=t.extend({[r.name]:A.z.array(A.z.union(n))})}return t}var k=require("zod"),aI=require("@budibase/shared-core"),U=require("@budibase/types");function Au(e){let t=k.z.object({});for(let r of e){let a={_id:k.z.string().describe("Unique ID for the row")},n=k.z.union([k.z.literal("https://picsum.photos/600/600").describe("For profile pictures and similar"),k.z.literal("https://picsum.photos/1920/1080").describe("For anything else")]),o=k.z.object({fileName:k.z.string(),extension:k.z.enum([".pdf",".txt"]),content:k.z.string().describe("Random content for the file")});for(let s of Object.values(r.schema)){let{type:i}=s;switch(i){case U.FieldType.STRING:case U.FieldType.LONGFORM:a[s.name]=k.z.string();break;case U.FieldType.NUMBER:case U.FieldType.BIGINT:a[s.name]=k.z.number();break;case U.FieldType.BOOLEAN:a[s.name]=k.z.boolean();break;case U.FieldType.DATETIME:a[s.name]=k.z.string().describe(`ISO datetime. Use realistic dates, based on today's date, ${new Date().toISOString()}`);break;case U.FieldType.ATTACHMENT_SINGLE:s.subtype===U.AttachmentSubType.IMAGE?a[s.name]=n:a[s.name]=o;break;case U.FieldType.ATTACHMENTS:s.subtype===U.AttachmentSubType.IMAGE?a[s.name]=k.z.array(n):a[s.name]=k.z.array(o),a[s.name]=a[s.name].describe("Between 2 and 5 items.");break;case U.FieldType.OPTIONS:a[s.name]=k.z.enum(s.constraints.inclusion);break;case U.FieldType.LINK:{let p=k.z.string().describe(`Match one of the _ids created for table "${s.tableId}"`);s.relationshipType===U.RelationshipType.ONE_TO_MANY?a[s.name]=k.z.array(p).describe("Array with a single item"):s.relationshipType===U.RelationshipType.MANY_TO_MANY&&(a[s.name]=k.z.array(p).describe("Array with a one or many items. You can repeat the same ids between rows"))}break;case U.FieldType.ARRAY:a[s.name]=k.z.array(k.z.enum(s.constraints.inclusion));break;case U.FieldType.AI:case U.FieldType.AUTO:case U.FieldType.SIGNATURE_SINGLE:case U.FieldType.BB_REFERENCE:case U.FieldType.JSON:case U.FieldType.FORMULA:case U.FieldType.INTERNAL:case U.FieldType.BARCODEQR:case U.FieldType.BB_REFERENCE_SINGLE:break;default:throw aI.utils.unreachable(i)}}t=t.extend({[r.name]:k.z.array(k.z.object(a))}).describe(`Each table should include at least a few items (min 3, max 18). The number of items should not be evenly distributed. Instead, follow natural relationships and usage patterns based on the tables nature. For example:
178
+ `),responseType:A.z.enum([T.FieldType.STRING,T.FieldType.NUMBER,T.FieldType.BOOLEAN,T.FieldType.DATETIME])}).describe("Define these types after the other types"),pe.extend({type:A.z.literal(T.FieldType.DATETIME),ignoreTimezones:A.z.boolean()}).describe("A datetime field, storing date and time"),pe.extend({type:A.z.literal(T.FieldType.DATETIME),ignoreTimezones:A.z.boolean(),timeOnly:A.z.literal(!0)}).describe("A time only field"),pe.extend({type:A.z.literal(T.FieldType.DATETIME),ignoreTimezones:A.z.boolean(),dateOnly:A.z.literal(!0)}).describe("A date only field"),pe.extend({type:A.z.literal(T.FieldType.ATTACHMENT_SINGLE),subtype:A.z.literal(T.AttachmentSubType.IMAGE)}).describe("Single image column"),pe.extend({type:A.z.literal(T.FieldType.ATTACHMENT_SINGLE)}).describe("Single attachment column. It stores a single document: pdf, word, etc. Use an appropriate name for the column, like 'Invoice', 'Document', etc."),pe.extend({type:A.z.literal(T.FieldType.ATTACHMENTS),subtype:A.z.literal(T.AttachmentSubType.IMAGE)}).describe("Multiple images column. Use an appropiate name for the columns, like 'Gallery', 'Photos', etc."),pe.extend({type:A.z.literal(T.FieldType.ATTACHMENTS)}).describe("Multiple attachments column. It might hold different kind of documents mixed up: pdf, txt, etc. Use an appropiate name for the columns, like 'Invoices', 'Documents', 'Attachments', etc.")])),Tu=A.z.object({tables:A.z.array(A.z.object({name:A.z.string(),schema:CG,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 vu(e){let t=A.z.object({});for(let r of e){let a=Object.values(r.schema),n=[pe.extend({type:A.z.literal(T.FieldType.AI),operation:A.z.literal(T.AIOperationEnum.TRANSLATE),column:A.z.enum(a.filter(o=>[T.FieldType.STRING,T.FieldType.LONGFORM].includes(o.type)).map(o=>o.name)).describe("The columns to translate"),language:A.z.string()}).describe("This column will be autogenerated via AI to translate one column. Use it for reasonable cases, like translating descriptions or similar."),pe.extend({type:A.z.literal(T.FieldType.AI),operation:A.z.literal(T.AIOperationEnum.CATEGORISE_TEXT),columns:A.z.array(A.z.enum(a.filter(o=>[T.FieldType.STRING,T.FieldType.LONGFORM,T.FieldType.BOOLEAN,T.FieldType.NUMBER,T.FieldType.DATETIME].includes(o.type)).map(o=>o.name))).describe("The columns to be used as context"),categories:A.z.string().describe("CSV list of categories")}).describe("This column will be autogenerated via AI to categorise a row based on one or many columns.")];a.some(o=>o.type===T.FieldType.LONGFORM)&&n.push(pe.extend({type:A.z.literal(T.FieldType.AI),operation:A.z.literal(T.AIOperationEnum.SUMMARISE_TEXT),columns:A.z.array(A.z.enum(a.filter(o=>[T.FieldType.STRING,T.FieldType.LONGFORM].includes(o.type)).map(o=>o.name))).describe("Columns, from the current table, to be passed in the context. Use at least one.")}).describe("This column will be autogenerated via AI to summarise one or many columns.")),t=t.extend({[r.name]:A.z.array(A.z.union(n))})}return t}var k=require("zod"),dI=require("@budibase/shared-core"),q=require("@budibase/types");function Eu(e){let t=k.z.object({});for(let r of e){let a={_id:k.z.string().describe("Unique ID for the row")},n=k.z.union([k.z.literal("https://picsum.photos/600/600").describe("For profile pictures and similar"),k.z.literal("https://picsum.photos/1920/1080").describe("For anything else")]),o=k.z.object({fileName:k.z.string(),extension:k.z.enum([".pdf",".txt"]),content:k.z.string().describe("Random content for the file")});for(let s of Object.values(r.schema)){let{type:i}=s;switch(i){case q.FieldType.STRING:case q.FieldType.LONGFORM:a[s.name]=k.z.string();break;case q.FieldType.NUMBER:case q.FieldType.BIGINT:a[s.name]=k.z.number();break;case q.FieldType.BOOLEAN:a[s.name]=k.z.boolean();break;case q.FieldType.DATETIME:a[s.name]=k.z.string().describe(`ISO datetime. Use realistic dates, based on today's date, ${new Date().toISOString()}`);break;case q.FieldType.ATTACHMENT_SINGLE:s.subtype===q.AttachmentSubType.IMAGE?a[s.name]=n:a[s.name]=o;break;case q.FieldType.ATTACHMENTS:s.subtype===q.AttachmentSubType.IMAGE?a[s.name]=k.z.array(n):a[s.name]=k.z.array(o),a[s.name]=a[s.name].describe("Between 2 and 5 items.");break;case q.FieldType.OPTIONS:a[s.name]=k.z.enum(s.constraints.inclusion);break;case q.FieldType.LINK:{let p=k.z.string().describe(`Match one of the _ids created for table "${s.tableId}"`);s.relationshipType===q.RelationshipType.ONE_TO_MANY?a[s.name]=k.z.array(p).describe("Array with a single item"):s.relationshipType===q.RelationshipType.MANY_TO_MANY&&(a[s.name]=k.z.array(p).describe("Array with a one or many items. You can repeat the same ids between rows"))}break;case q.FieldType.ARRAY:a[s.name]=k.z.array(k.z.enum(s.constraints.inclusion));break;case q.FieldType.AI:case q.FieldType.AUTO:case q.FieldType.SIGNATURE_SINGLE:case q.FieldType.BB_REFERENCE:case q.FieldType.JSON:case q.FieldType.FORMULA:case q.FieldType.INTERNAL:case q.FieldType.BARCODEQR:case q.FieldType.BB_REFERENCE_SINGLE:break;default:throw dI.utils.unreachable(i)}}t=t.extend({[r.name]:k.z.array(k.z.object(a))}).describe(`Each table should include at least a few items (min 3, max 18). The number of items should not be evenly distributed. Instead, follow natural relationships and usage patterns based on the tables nature. For example:
178
179
  1. If we have posts and comments, there should be more posts than users, and more comments than posts.
179
180
  2. If it's a ticketing system, there may be more tickets than users, and some users may have submitted several tickets.
180
181
  3. In a CRM, there are fewer users than customers, and customers may have many deals.
181
- 4. In a project management tool, projects might have many tasks, and tasks might have multiple comments.`)}return t}var Pa=C(require("dd-trace")),bu=class e{constructor(t,r){this.llmFunctions={getTableStructure:async t=>Pa.default.trace("llm.getTableStructure",async()=>{let r=await this.llm.prompt(cu().addUserMessage(t).withFormat(yu));try{let a=JSON.parse(r.message);return fu(a)}catch{throw new Oa.HTTPError("Error generating tables",500)}}),generateAIColumns:(t,r)=>Pa.default.trace("llm.generateAIColumns",async()=>this.generateAIColumns(t,r)),generateData:async(t,r)=>Pa.default.trace("llm.generateData",async()=>{let a=await this.llm.prompt(du().addUserMessage(t).withFormat(Au(r)));try{return JSON.parse(a.message)}catch{throw new Oa.HTTPError("Error generating data",500)}})};this.llm=t,this.delegates=r}static async init(t){let r=await _a({model:"gpt-4o",maxTokens:2e3});if(!r)throw new Oa.HTTPError("LLM not available",422);return new e(r,t)}async generate(t,r){return Pa.default.trace("tableGeneration.generate",async a=>{let n=await this.generateTables(t,r);return a.addTags({table_count:n.length}),n})}async generateTables(t,r){let a=await this.llmFunctions.getTableStructure(t),n=this.llmFunctions.generateAIColumns(t,a).then(i=>this.delegates.generateTablesDelegate(mu(a,i))),o=await this.llmFunctions.generateData(t,a),s=await n;return await this.delegates.generateDataDelegate(o,r,nI.utils.toMap("name",a)),s}async generateAIColumns(t,r){let a=await this.llm.prompt(lu().addUserMessage(`This is the initial user prompt that generated the given schema:
182
- "${t}"`).withFormat(hu(r)));try{return JSON.parse(a.message)}catch{throw new Oa.HTTPError("Error generating columns",500)}}};0&&(module.exports={Method,ai,api,auditLogs,automations,backups,branding,constants,environmentVariables,features,groups,init,licensing,logger,mappers,middleware,plugins,publicApi,quotas,scimGroups,scimUsers,sdk,users,utils});
182
+ 4. In a project management tool, projects might have many tasks, and tasks might have multiple comments.`)}return t}var Ua=P(require("dd-trace")),Ru=class e{constructor(t,r){this.llmFunctions={getTableStructure:async t=>Ua.default.trace("llm.getTableStructure",async()=>{let r=await this.llm.prompt(yu().addUserMessage(t).withFormat(Tu));try{let a=JSON.parse(r.message);return Iu(a)}catch{throw new Pa.HTTPError("Error generating tables",500)}}),generateAIColumns:(t,r)=>Ua.default.trace("llm.generateAIColumns",async()=>this.generateAIColumns(t,r)),generateData:async(t,r)=>Ua.default.trace("llm.generateData",async()=>{let a=await this.llm.prompt(bu().addUserMessage(t).withFormat(Eu(r)));try{return JSON.parse(a.message)}catch{throw new Pa.HTTPError("Error generating data",500)}})};this.llm=t,this.delegates=r}static async init(t){let r=await Oa({model:"gpt-4o",maxTokens:2e3});if(!r)throw new Pa.HTTPError("LLM not available",422);return new e(r,t)}async generate(t,r){return Ua.default.trace("tableGeneration.generate",async a=>{let n=await this.generateTables(t,r);return a.addTags({table_count:n.length}),n})}async generateTables(t,r){let a=await this.llmFunctions.getTableStructure(t),n=this.llmFunctions.generateAIColumns(t,a).then(i=>this.delegates.generateTablesDelegate(Su(a,i))),o=await this.llmFunctions.generateData(t,a),s=await n;return await this.delegates.generateDataDelegate(o,r,fI.utils.toMap("name",a)),s}async generateAIColumns(t,r){let a=await this.llm.prompt(Au().addUserMessage(`This is the initial user prompt that generated the given schema:
183
+ "${t}"`).withFormat(vu(r)));try{return JSON.parse(a.message)}catch{throw new Pa.HTTPError("Error generating columns",500)}}};0&&(module.exports={Method,ai,api,auditLogs,automations,backups,branding,constants,environmentVariables,features,groups,init,licensing,logger,mappers,middleware,plugins,publicApi,quotas,scimGroups,scimUsers,sdk,users,utils});