@budibase/pro 3.18.4 → 3.18.6

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 qI=Object.create;var Na=Object.defineProperty;var DI=Object.getOwnPropertyDescriptor;var NI=Object.getOwnPropertyNames;var BI=Object.getPrototypeOf,MI=Object.prototype.hasOwnProperty;var u=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),w=(e,t)=>{for(var r in t)Na(e,r,{get:t[r],enumerable:!0})},Fu=(e,t,r,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of NI(t))!MI.call(e,n)&&n!==r&&Na(e,n,{get:()=>t[n],enumerable:!(a=DI(t,n))||a.enumerable});return e};var P=(e,t,r)=>(r=e!=null?qI(BI(e)):{},Fu(t||!e||!e.__esModule?Na(r,"default",{value:e,enumerable:!0}):r,e)),kI=e=>Fu(Na({},"__esModule",{value:!0}),e);var Za=u((i0,vp)=>{"use strict";function NS(e,t){for(var r=-1,a=t.length,n=e.length;++r<a;)e[n+r]=t[r];return e}vp.exports=NS});var Oo=u((u0,_p)=>{"use strict";var BS=typeof global=="object"&&global&&global.Object===Object&&global;_p.exports=BS});var pe=u((p0,xp)=>{"use strict";var MS=Oo(),kS=typeof self=="object"&&self&&self.Object===Object&&self,GS=MS||kS||Function("return this")();xp.exports=GS});var xt=u((c0,Cp)=>{"use strict";var FS=pe(),jS=FS.Symbol;Cp.exports=jS});var Up=u((l0,Pp)=>{"use strict";var Op=xt(),Lp=Object.prototype,QS=Lp.hasOwnProperty,WS=Lp.toString,zr=Op?Op.toStringTag:void 0;function $S(e){var t=QS.call(e,zr),r=e[zr];try{e[zr]=void 0;var a=!0}catch{}var n=WS.call(e);return a&&(t?e[zr]=r:delete e[zr]),n}Pp.exports=$S});var Dp=u((d0,qp)=>{"use strict";var KS=Object.prototype,VS=KS.toString;function YS(e){return VS.call(e)}qp.exports=YS});var gt=u((f0,Mp)=>{"use strict";var Np=xt(),HS=Up(),zS=Dp(),JS="[object Null]",XS="[object Undefined]",Bp=Np?Np.toStringTag:void 0;function ZS(e){return e==null?e===void 0?XS:JS:Bp&&Bp in Object(e)?HS(e):zS(e)}Mp.exports=ZS});var be=u((m0,kp)=>{"use strict";function ew(e){return e!=null&&typeof e=="object"}kp.exports=ew});var Fp=u((g0,Gp)=>{"use strict";var tw=gt(),rw=be(),aw="[object Arguments]";function nw(e){return rw(e)&&tw(e)==aw}Gp.exports=nw});var Jr=u((y0,Wp)=>{"use strict";var jp=Fp(),ow=be(),Qp=Object.prototype,sw=Qp.hasOwnProperty,iw=Qp.propertyIsEnumerable,uw=jp(function(){return arguments}())?jp:function(e){return ow(e)&&sw.call(e,"callee")&&!iw.call(e,"callee")};Wp.exports=uw});var se=u((h0,$p)=>{"use strict";var pw=Array.isArray;$p.exports=pw});var Hp=u((A0,Yp)=>{"use strict";var Kp=xt(),cw=Jr(),lw=se(),Vp=Kp?Kp.isConcatSpreadable:void 0;function dw(e){return lw(e)||cw(e)||!!(Vp&&e&&e[Vp])}Yp.exports=dw});var Lo=u((b0,Jp)=>{"use strict";var fw=Za(),mw=Hp();function zp(e,t,r,a,n){var o=-1,s=e.length;for(r||(r=mw),n||(n=[]);++o<s;){var i=e[o];t>0&&r(i)?t>1?zp(i,t-1,r,a,n):fw(n,i):a||(n[n.length]=i)}return n}Jp.exports=zp});var Xr=u((I0,Xp)=>{"use strict";function gw(e){return e}Xp.exports=gw});var en=u((S0,Zp)=>{"use strict";function yw(e,t,r){switch(r.length){case 0:return e.call(t);case 1:return e.call(t,r[0]);case 2:return e.call(t,r[0],r[1]);case 3:return e.call(t,r[0],r[1],r[2])}return e.apply(t,r)}Zp.exports=yw});var Po=u((w0,tc)=>{"use strict";var hw=en(),ec=Math.max;function Aw(e,t,r){return t=ec(t===void 0?e.length-1:t,0),function(){for(var a=arguments,n=-1,o=ec(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),hw(e,this,i)}}tc.exports=Aw});var ac=u((T0,rc)=>{"use strict";function bw(e){return function(){return e}}rc.exports=bw});var xe=u((E0,nc)=>{"use strict";function Iw(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}nc.exports=Iw});var Zr=u((R0,oc)=>{"use strict";var Sw=gt(),ww=xe(),Tw="[object AsyncFunction]",Ew="[object Function]",Rw="[object GeneratorFunction]",vw="[object Proxy]";function _w(e){if(!ww(e))return!1;var t=Sw(e);return t==Ew||t==Rw||t==Tw||t==vw}oc.exports=_w});var ic=u((v0,sc)=>{"use strict";var xw=pe(),Cw=xw["__core-js_shared__"];sc.exports=Cw});var cc=u((_0,pc)=>{"use strict";var Uo=ic(),uc=function(){var e=/[^.]+$/.exec(Uo&&Uo.keys&&Uo.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function Ow(e){return!!uc&&uc in e}pc.exports=Ow});var qo=u((x0,lc)=>{"use strict";var Lw=Function.prototype,Pw=Lw.toString;function Uw(e){if(e!=null){try{return Pw.call(e)}catch{}try{return e+""}catch{}}return""}lc.exports=Uw});var fc=u((C0,dc)=>{"use strict";var qw=Zr(),Dw=cc(),Nw=xe(),Bw=qo(),Mw=/[\\^$.*+?()[\]{}|]/g,kw=/^\[object .+?Constructor\]$/,Gw=Function.prototype,Fw=Object.prototype,jw=Gw.toString,Qw=Fw.hasOwnProperty,Ww=RegExp("^"+jw.call(Qw).replace(Mw,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function $w(e){if(!Nw(e)||Dw(e))return!1;var t=qw(e)?Ww:kw;return t.test(Bw(e))}dc.exports=$w});var gc=u((O0,mc)=>{"use strict";function Kw(e,t){return e?.[t]}mc.exports=Kw});var yt=u((L0,yc)=>{"use strict";var Vw=fc(),Yw=gc();function Hw(e,t){var r=Yw(e,t);return Vw(r)?r:void 0}yc.exports=Hw});var Do=u((P0,hc)=>{"use strict";var zw=yt(),Jw=function(){try{var e=zw(Object,"defineProperty");return e({},"",{}),e}catch{}}();hc.exports=Jw});var Ic=u((U0,bc)=>{"use strict";var Xw=ac(),Ac=Do(),Zw=Xr(),eT=Ac?function(e,t){return Ac(e,"toString",{configurable:!0,enumerable:!1,value:Xw(t),writable:!0})}:Zw;bc.exports=eT});var No=u((q0,Sc)=>{"use strict";var tT=800,rT=16,aT=Date.now;function nT(e){var t=0,r=0;return function(){var a=aT(),n=rT-(a-r);if(r=a,n>0){if(++t>=tT)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}Sc.exports=nT});var tn=u((D0,wc)=>{"use strict";var oT=Ic(),sT=No(),iT=sT(oT);wc.exports=iT});var Bo=u((N0,Tc)=>{"use strict";var uT=Xr(),pT=Po(),cT=tn();function lT(e,t){return cT(pT(e,t,uT),e+"")}Tc.exports=lT});var ea=u((B0,Ec)=>{"use strict";var dT=yt(),fT=dT(Object,"create");Ec.exports=fT});var _c=u((M0,vc)=>{"use strict";var Rc=ea();function mT(){this.__data__=Rc?Rc(null):{},this.size=0}vc.exports=mT});var Cc=u((k0,xc)=>{"use strict";function gT(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}xc.exports=gT});var Lc=u((G0,Oc)=>{"use strict";var yT=ea(),hT="__lodash_hash_undefined__",AT=Object.prototype,bT=AT.hasOwnProperty;function IT(e){var t=this.__data__;if(yT){var r=t[e];return r===hT?void 0:r}return bT.call(t,e)?t[e]:void 0}Oc.exports=IT});var Uc=u((F0,Pc)=>{"use strict";var ST=ea(),wT=Object.prototype,TT=wT.hasOwnProperty;function ET(e){var t=this.__data__;return ST?t[e]!==void 0:TT.call(t,e)}Pc.exports=ET});var Dc=u((j0,qc)=>{"use strict";var RT=ea(),vT="__lodash_hash_undefined__";function _T(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=RT&&t===void 0?vT:t,this}qc.exports=_T});var Bc=u((Q0,Nc)=>{"use strict";var xT=_c(),CT=Cc(),OT=Lc(),LT=Uc(),PT=Dc();function Ht(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var a=e[t];this.set(a[0],a[1])}}Ht.prototype.clear=xT;Ht.prototype.delete=CT;Ht.prototype.get=OT;Ht.prototype.has=LT;Ht.prototype.set=PT;Nc.exports=Ht});var kc=u((W0,Mc)=>{"use strict";function UT(){this.__data__=[],this.size=0}Mc.exports=UT});var zt=u(($0,Gc)=>{"use strict";function qT(e,t){return e===t||e!==e&&t!==t}Gc.exports=qT});var ta=u((K0,Fc)=>{"use strict";var DT=zt();function NT(e,t){for(var r=e.length;r--;)if(DT(e[r][0],t))return r;return-1}Fc.exports=NT});var Qc=u((V0,jc)=>{"use strict";var BT=ta(),MT=Array.prototype,kT=MT.splice;function GT(e){var t=this.__data__,r=BT(t,e);if(r<0)return!1;var a=t.length-1;return r==a?t.pop():kT.call(t,r,1),--this.size,!0}jc.exports=GT});var $c=u((Y0,Wc)=>{"use strict";var FT=ta();function jT(e){var t=this.__data__,r=FT(t,e);return r<0?void 0:t[r][1]}Wc.exports=jT});var Vc=u((H0,Kc)=>{"use strict";var QT=ta();function WT(e){return QT(this.__data__,e)>-1}Kc.exports=WT});var Hc=u((z0,Yc)=>{"use strict";var $T=ta();function KT(e,t){var r=this.__data__,a=$T(r,e);return a<0?(++this.size,r.push([e,t])):r[a][1]=t,this}Yc.exports=KT});var ra=u((J0,zc)=>{"use strict";var VT=kc(),YT=Qc(),HT=$c(),zT=Vc(),JT=Hc();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=VT;Jt.prototype.delete=YT;Jt.prototype.get=HT;Jt.prototype.has=zT;Jt.prototype.set=JT;zc.exports=Jt});var rn=u((X0,Jc)=>{"use strict";var XT=yt(),ZT=pe(),eE=XT(ZT,"Map");Jc.exports=eE});var el=u((Z0,Zc)=>{"use strict";var Xc=Bc(),tE=ra(),rE=rn();function aE(){this.size=0,this.__data__={hash:new Xc,map:new(rE||tE),string:new Xc}}Zc.exports=aE});var rl=u((eF,tl)=>{"use strict";function nE(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}tl.exports=nE});var aa=u((tF,al)=>{"use strict";var oE=rl();function sE(e,t){var r=e.__data__;return oE(t)?r[typeof t=="string"?"string":"hash"]:r.map}al.exports=sE});var ol=u((rF,nl)=>{"use strict";var iE=aa();function uE(e){var t=iE(this,e).delete(e);return this.size-=t?1:0,t}nl.exports=uE});var il=u((aF,sl)=>{"use strict";var pE=aa();function cE(e){return pE(this,e).get(e)}sl.exports=cE});var pl=u((nF,ul)=>{"use strict";var lE=aa();function dE(e){return lE(this,e).has(e)}ul.exports=dE});var ll=u((oF,cl)=>{"use strict";var fE=aa();function mE(e,t){var r=fE(this,e),a=r.size;return r.set(e,t),this.size+=r.size==a?0:1,this}cl.exports=mE});var an=u((sF,dl)=>{"use strict";var gE=el(),yE=ol(),hE=il(),AE=pl(),bE=ll();function Xt(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])}}Xt.prototype.clear=gE;Xt.prototype.delete=yE;Xt.prototype.get=hE;Xt.prototype.has=AE;Xt.prototype.set=bE;dl.exports=Xt});var ml=u((iF,fl)=>{"use strict";var IE="__lodash_hash_undefined__";function SE(e){return this.__data__.set(e,IE),this}fl.exports=SE});var yl=u((uF,gl)=>{"use strict";function wE(e){return this.__data__.has(e)}gl.exports=wE});var Mo=u((pF,hl)=>{"use strict";var TE=an(),EE=ml(),RE=yl();function nn(e){var t=-1,r=e==null?0:e.length;for(this.__data__=new TE;++t<r;)this.add(e[t])}nn.prototype.add=nn.prototype.push=EE;nn.prototype.has=RE;hl.exports=nn});var bl=u((cF,Al)=>{"use strict";function vE(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}Al.exports=vE});var Sl=u((lF,Il)=>{"use strict";function _E(e){return e!==e}Il.exports=_E});var Tl=u((dF,wl)=>{"use strict";function xE(e,t,r){for(var a=r-1,n=e.length;++a<n;)if(e[a]===t)return a;return-1}wl.exports=xE});var Rl=u((fF,El)=>{"use strict";var CE=bl(),OE=Sl(),LE=Tl();function PE(e,t,r){return t===t?LE(e,t,r):CE(e,OE,r)}El.exports=PE});var ko=u((mF,vl)=>{"use strict";var UE=Rl();function qE(e,t){var r=e==null?0:e.length;return!!r&&UE(e,t,0)>-1}vl.exports=qE});var xl=u((gF,_l)=>{"use strict";function DE(e,t,r){for(var a=-1,n=e==null?0:e.length;++a<n;)if(r(t,e[a]))return!0;return!1}_l.exports=DE});var Go=u((yF,Cl)=>{"use strict";function NE(e,t){return e.has(t)}Cl.exports=NE});var Fo=u((hF,Ol)=>{"use strict";var BE=yt(),ME=pe(),kE=BE(ME,"Set");Ol.exports=kE});var jo=u((AF,Ll)=>{"use strict";function GE(){}Ll.exports=GE});var on=u((bF,Pl)=>{"use strict";function FE(e){var t=-1,r=Array(e.size);return e.forEach(function(a){r[++t]=a}),r}Pl.exports=FE});var ql=u((IF,Ul)=>{"use strict";var Qo=Fo(),jE=jo(),QE=on(),WE=1/0,$E=Qo&&1/QE(new Qo([,-0]))[1]==WE?function(e){return new Qo(e)}:jE;Ul.exports=$E});var Nl=u((SF,Dl)=>{"use strict";var KE=Mo(),VE=ko(),YE=xl(),HE=Go(),zE=ql(),JE=on(),XE=200;function ZE(e,t,r){var a=-1,n=VE,o=e.length,s=!0,i=[],p=i;if(r)s=!1,n=YE;else if(o>=XE){var f=t?null:zE(e);if(f)return JE(f);s=!1,n=HE,p=new KE}else p=t?[]:i;e:for(;++a<o;){var m=e[a],g=t?t(m):m;if(m=r||m!==0?m:0,s&&g===g){for(var y=p.length;y--;)if(p[y]===g)continue e;t&&p.push(g),i.push(m)}else n(p,g,r)||(p!==i&&p.push(g),i.push(m))}return i}Dl.exports=ZE});var sn=u((wF,Bl)=>{"use strict";var eR=9007199254740991;function tR(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=eR}Bl.exports=tR});var Zt=u((TF,Ml)=>{"use strict";var rR=Zr(),aR=sn();function nR(e){return e!=null&&aR(e.length)&&!rR(e)}Ml.exports=nR});var Wo=u((EF,kl)=>{"use strict";var oR=Zt(),sR=be();function iR(e){return sR(e)&&oR(e)}kl.exports=iR});var Fl=u((RF,Gl)=>{"use strict";var uR=Lo(),pR=Bo(),cR=Nl(),lR=Wo(),dR=pR(function(e){return cR(uR(e,1,lR,!0))});Gl.exports=dR});var Ql=u((vF,jl)=>{"use strict";var fR=ra();function mR(){this.__data__=new fR,this.size=0}jl.exports=mR});var $l=u((_F,Wl)=>{"use strict";function gR(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r}Wl.exports=gR});var Vl=u((xF,Kl)=>{"use strict";function yR(e){return this.__data__.get(e)}Kl.exports=yR});var Hl=u((CF,Yl)=>{"use strict";function hR(e){return this.__data__.has(e)}Yl.exports=hR});var Jl=u((OF,zl)=>{"use strict";var AR=ra(),bR=rn(),IR=an(),SR=200;function wR(e,t){var r=this.__data__;if(r instanceof AR){var a=r.__data__;if(!bR||a.length<SR-1)return a.push([e,t]),this.size=++r.size,this;r=this.__data__=new IR(a)}return r.set(e,t),this.size=r.size,this}zl.exports=wR});var na=u((LF,Xl)=>{"use strict";var TR=ra(),ER=Ql(),RR=$l(),vR=Vl(),_R=Hl(),xR=Jl();function er(e){var t=this.__data__=new TR(e);this.size=t.size}er.prototype.clear=ER;er.prototype.delete=RR;er.prototype.get=vR;er.prototype.has=_R;er.prototype.set=xR;Xl.exports=er});var oa=u((PF,ed)=>{"use strict";var Zl=Do();function CR(e,t,r){t=="__proto__"&&Zl?Zl(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}ed.exports=CR});var $o=u((UF,td)=>{"use strict";var OR=oa(),LR=zt();function PR(e,t,r){(r!==void 0&&!LR(e[t],r)||r===void 0&&!(t in e))&&OR(e,t,r)}td.exports=PR});var ad=u((qF,rd)=>{"use strict";function UR(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}}rd.exports=UR});var Ko=u((DF,nd)=>{"use strict";var qR=ad(),DR=qR();nd.exports=DR});var Vo=u((sa,tr)=>{"use strict";var NR=pe(),ud=typeof sa=="object"&&sa&&!sa.nodeType&&sa,od=ud&&typeof tr=="object"&&tr&&!tr.nodeType&&tr,BR=od&&od.exports===ud,sd=BR?NR.Buffer:void 0,id=sd?sd.allocUnsafe:void 0;function MR(e,t){if(t)return e.slice();var r=e.length,a=id?id(r):new e.constructor(r);return e.copy(a),a}tr.exports=MR});var Yo=u((NF,pd)=>{"use strict";var kR=pe(),GR=kR.Uint8Array;pd.exports=GR});var un=u((BF,ld)=>{"use strict";var cd=Yo();function FR(e){var t=new e.constructor(e.byteLength);return new cd(t).set(new cd(e)),t}ld.exports=FR});var Ho=u((MF,dd)=>{"use strict";var jR=un();function QR(e,t){var r=t?jR(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.length)}dd.exports=QR});var rr=u((kF,fd)=>{"use strict";function WR(e,t){var r=-1,a=e.length;for(t||(t=Array(a));++r<a;)t[r]=e[r];return t}fd.exports=WR});var ia=u((GF,gd)=>{"use strict";var $R=xe(),md=Object.create,KR=function(){function e(){}return function(t){if(!$R(t))return{};if(md)return md(t);e.prototype=t;var r=new e;return e.prototype=void 0,r}}();gd.exports=KR});var zo=u((FF,yd)=>{"use strict";function VR(e,t){return function(r){return e(t(r))}}yd.exports=VR});var pn=u((jF,hd)=>{"use strict";var YR=zo(),HR=YR(Object.getPrototypeOf,Object);hd.exports=HR});var cn=u((QF,Ad)=>{"use strict";var zR=Object.prototype;function JR(e){var t=e&&e.constructor,r=typeof t=="function"&&t.prototype||zR;return e===r}Ad.exports=JR});var Jo=u((WF,bd)=>{"use strict";var XR=ia(),ZR=pn(),ev=cn();function tv(e){return typeof e.constructor=="function"&&!ev(e)?XR(ZR(e)):{}}bd.exports=tv});var Sd=u(($F,Id)=>{"use strict";function rv(){return!1}Id.exports=rv});var pa=u((ua,ar)=>{"use strict";var av=pe(),nv=Sd(),Ed=typeof ua=="object"&&ua&&!ua.nodeType&&ua,wd=Ed&&typeof ar=="object"&&ar&&!ar.nodeType&&ar,ov=wd&&wd.exports===Ed,Td=ov?av.Buffer:void 0,sv=Td?Td.isBuffer:void 0,iv=sv||nv;ar.exports=iv});var Xo=u((KF,vd)=>{"use strict";var uv=gt(),pv=pn(),cv=be(),lv="[object Object]",dv=Function.prototype,fv=Object.prototype,Rd=dv.toString,mv=fv.hasOwnProperty,gv=Rd.call(Object);function yv(e){if(!cv(e)||uv(e)!=lv)return!1;var t=pv(e);if(t===null)return!0;var r=mv.call(t,"constructor")&&t.constructor;return typeof r=="function"&&r instanceof r&&Rd.call(r)==gv}vd.exports=yv});var xd=u((VF,_d)=>{"use strict";var hv=gt(),Av=sn(),bv=be(),Iv="[object Arguments]",Sv="[object Array]",wv="[object Boolean]",Tv="[object Date]",Ev="[object Error]",Rv="[object Function]",vv="[object Map]",_v="[object Number]",xv="[object Object]",Cv="[object RegExp]",Ov="[object Set]",Lv="[object String]",Pv="[object WeakMap]",Uv="[object ArrayBuffer]",qv="[object DataView]",Dv="[object Float32Array]",Nv="[object Float64Array]",Bv="[object Int8Array]",Mv="[object Int16Array]",kv="[object Int32Array]",Gv="[object Uint8Array]",Fv="[object Uint8ClampedArray]",jv="[object Uint16Array]",Qv="[object Uint32Array]",B={};B[Dv]=B[Nv]=B[Bv]=B[Mv]=B[kv]=B[Gv]=B[Fv]=B[jv]=B[Qv]=!0;B[Iv]=B[Sv]=B[Uv]=B[wv]=B[qv]=B[Tv]=B[Ev]=B[Rv]=B[vv]=B[_v]=B[xv]=B[Cv]=B[Ov]=B[Lv]=B[Pv]=!1;function Wv(e){return bv(e)&&Av(e.length)&&!!B[hv(e)]}_d.exports=Wv});var ln=u((YF,Cd)=>{"use strict";function $v(e){return function(t){return e(t)}}Cd.exports=$v});var dn=u((ca,nr)=>{"use strict";var Kv=Oo(),Od=typeof ca=="object"&&ca&&!ca.nodeType&&ca,la=Od&&typeof nr=="object"&&nr&&!nr.nodeType&&nr,Vv=la&&la.exports===Od,Zo=Vv&&Kv.process,Yv=function(){try{var e=la&&la.require&&la.require("util").types;return e||Zo&&Zo.binding&&Zo.binding("util")}catch{}}();nr.exports=Yv});var fn=u((HF,Ud)=>{"use strict";var Hv=xd(),zv=ln(),Ld=dn(),Pd=Ld&&Ld.isTypedArray,Jv=Pd?zv(Pd):Hv;Ud.exports=Jv});var es=u((zF,qd)=>{"use strict";function Xv(e,t){if(!(t==="constructor"&&typeof e[t]=="function")&&t!="__proto__")return e[t]}qd.exports=Xv});var ts=u((JF,Dd)=>{"use strict";var Zv=oa(),e_=zt(),t_=Object.prototype,r_=t_.hasOwnProperty;function a_(e,t,r){var a=e[t];(!(r_.call(e,t)&&e_(a,r))||r===void 0&&!(t in e))&&Zv(e,t,r)}Dd.exports=a_});var or=u((XF,Nd)=>{"use strict";var n_=ts(),o_=oa();function s_(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?o_(r,i,p):n_(r,i,p)}return r}Nd.exports=s_});var Md=u((ZF,Bd)=>{"use strict";function i_(e,t){for(var r=-1,a=Array(e);++r<e;)a[r]=t(r);return a}Bd.exports=i_});var da=u((e1,kd)=>{"use strict";var u_=9007199254740991,p_=/^(?:0|[1-9]\d*)$/;function c_(e,t){var r=typeof e;return t=t??u_,!!t&&(r=="number"||r!="symbol"&&p_.test(e))&&e>-1&&e%1==0&&e<t}kd.exports=c_});var rs=u((t1,Gd)=>{"use strict";var l_=Md(),d_=Jr(),f_=se(),m_=pa(),g_=da(),y_=fn(),h_=Object.prototype,A_=h_.hasOwnProperty;function b_(e,t){var r=f_(e),a=!r&&d_(e),n=!r&&!a&&m_(e),o=!r&&!a&&!n&&y_(e),s=r||a||n||o,i=s?l_(e.length,String):[],p=i.length;for(var f in e)(t||A_.call(e,f))&&!(s&&(f=="length"||n&&(f=="offset"||f=="parent")||o&&(f=="buffer"||f=="byteLength"||f=="byteOffset")||g_(f,p)))&&i.push(f);return i}Gd.exports=b_});var jd=u((r1,Fd)=>{"use strict";function I_(e){var t=[];if(e!=null)for(var r in Object(e))t.push(r);return t}Fd.exports=I_});var Wd=u((a1,Qd)=>{"use strict";var S_=xe(),w_=cn(),T_=jd(),E_=Object.prototype,R_=E_.hasOwnProperty;function v_(e){if(!S_(e))return T_(e);var t=w_(e),r=[];for(var a in e)a=="constructor"&&(t||!R_.call(e,a))||r.push(a);return r}Qd.exports=v_});var sr=u((n1,$d)=>{"use strict";var __=rs(),x_=Wd(),C_=Zt();function O_(e){return C_(e)?__(e,!0):x_(e)}$d.exports=O_});var Vd=u((o1,Kd)=>{"use strict";var L_=or(),P_=sr();function U_(e){return L_(e,P_(e))}Kd.exports=U_});var Zd=u((s1,Xd)=>{"use strict";var Yd=$o(),q_=Vo(),D_=Ho(),N_=rr(),B_=Jo(),Hd=Jr(),zd=se(),M_=Wo(),k_=pa(),G_=Zr(),F_=xe(),j_=Xo(),Q_=fn(),Jd=es(),W_=Vd();function $_(e,t,r,a,n,o,s){var i=Jd(e,r),p=Jd(t,r),f=s.get(p);if(f){Yd(e,r,f);return}var m=o?o(i,p,r+"",e,t,s):void 0,g=m===void 0;if(g){var y=zd(p),I=!y&&k_(p),C=!y&&!I&&Q_(p);m=p,y||I||C?zd(i)?m=i:M_(i)?m=N_(i):I?(g=!1,m=q_(p,!0)):C?(g=!1,m=D_(p,!0)):m=[]:j_(p)||Hd(p)?(m=i,Hd(i)?m=W_(i):(!F_(i)||G_(i))&&(m=B_(p))):g=!1}g&&(s.set(p,m),n(m,p,a,o,s),s.delete(p)),Yd(e,r,m)}Xd.exports=$_});var rf=u((i1,tf)=>{"use strict";var K_=na(),V_=$o(),Y_=Ko(),H_=Zd(),z_=xe(),J_=sr(),X_=es();function ef(e,t,r,a,n){e!==t&&Y_(t,function(o,s){if(n||(n=new K_),z_(o))H_(e,t,s,r,ef,a,n);else{var i=a?a(X_(e,s),o,s+"",e,t,n):void 0;i===void 0&&(i=o),V_(e,s,i)}},J_)}tf.exports=ef});var nf=u((u1,af)=>{"use strict";var Z_=zt(),ex=Zt(),tx=da(),rx=xe();function ax(e,t,r){if(!rx(r))return!1;var a=typeof t;return(a=="number"?ex(r)&&tx(t,r.length):a=="string"&&t in r)?Z_(r[t],e):!1}af.exports=ax});var sf=u((p1,of)=>{"use strict";var nx=Bo(),ox=nf();function sx(e){return nx(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&&ox(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})}of.exports=sx});var as=u((c1,uf)=>{"use strict";var ix=rf(),ux=sf(),px=ux(function(e,t,r){ix(e,t,r)});uf.exports=px});var lm=u(ge=>{"use strict";ge.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"};ge.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"]};ge.aryRearg={2:[1,0],3:[2,0,1],4:[3,2,0,1]};ge.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};ge.iterateeRearg={mapKeys:[1],reduceRight:[1,0]};ge.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]};ge.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}};ge.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}};ge.realToAlias=function(){var e=Object.prototype.hasOwnProperty,t=ge.aliasToReal,r={};for(var a in t){var n=t[a];e.call(r,n)?r[n].push(a):r[n]=[a]}return r}();ge.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"};ge.skipFixed={castArray:!0,flow:!0,flowRight:!0,iteratee:!0,mixin:!0,rearg:!0,runInContext:!0};ge.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 Xs=u((DQ,dm)=>{"use strict";dm.exports={}});var ym=u((NQ,gm)=>{"use strict";var X=lm(),KC=Xs(),fm=Array.prototype.push;function VC(e,t){return t==2?function(r,a){return e.apply(void 0,arguments)}:function(r){return e.apply(void 0,arguments)}}function Zs(e,t){return t==2?function(r,a){return e(r,a)}:function(r){return e(r)}}function mm(e){for(var t=e?e.length:0,r=Array(t);t--;)r[t]=e[t];return r}function YC(e){return function(t){return e({},t)}}function HC(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&&fm.apply(s,o),t!=a&&fm.apply(s,n.slice(t+1)),e.apply(this,s)}}function ei(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 ti(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:KC,p="curry"in a&&a.curry,f="fixed"in a&&a.fixed,m="rearg"in a&&a.rearg,g=n?r.runInContext():void 0,y=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},I=y.ary,C=y.assign,_=y.clone,v=y.curry,R=y.forEach,U=y.isArray,qe=y.isError,Ee=y.isFunction,ct=y.isWeakMap,jt=y.keys,Ir=y.rearg,Sr=y.toInteger,RI=y.toPath,qu=jt(X.aryMethod),vI={castArray:function(S){return function(){var h=arguments[0];return U(h)?S(mm(h)):S.apply(void 0,arguments)}},iteratee:function(S){return function(){var h=arguments[0],b=arguments[1],E=S(h,b),O=E.length;return s.cap&&typeof b=="number"?(b=b>2?b-2:1,O&&O<=b?E:Zs(E,b)):E}},mixin:function(S){return function(h){var b=this;if(!Ee(b))return S(b,Object(h));var E=[];return R(jt(h),function(O){Ee(h[O])&&E.push([O,b.prototype[O]])}),S(b,Object(h)),R(E,function(O){var ie=O[1];Ee(ie)?b.prototype[O[0]]=ie:delete b.prototype[O[0]]}),b}},nthArg:function(S){return function(h){var b=h<0?1:Sr(h)+1;return v(S(h),b)}},rearg:function(S){return function(h,b){var E=b?b.length:0;return v(S(h,b),E)}},runInContext:function(S){return function(h){return ti(e,S(h),a)}}};function _I(S,h){if(s.cap){var b=X.iterateeRearg[S];if(b)return PI(h,b);var E=!n&&X.iterateeAry[S];if(E)return LI(h,E)}return h}function xI(S,h,b){return p||s.curry&&b>1?v(h,b):h}function Du(S,h,b){if(s.fixed&&(f||!X.skipFixed[S])){var E=X.methodSpread[S],O=E&&E.start;return O===void 0?I(h,b):HC(h,O)}return h}function Nu(S,h,b){return s.rearg&&b>1&&(m||!X.skipRearg[S])?Ir(h,X.methodRearg[S]||X.aryRearg[b]):h}function CI(S,h){h=RI(h);for(var b=-1,E=h.length,O=E-1,ie=_(Object(S)),je=ie;je!=null&&++b<E;){var Re=h[b],Qe=je[Re];Qe!=null&&!(Ee(Qe)||qe(Qe)||ct(Qe))&&(je[Re]=_(b==O?Qe:Object(Qe))),je=je[Re]}return ie}function OI(S){return he.runInContext.convert(S)(void 0)}function Bu(S,h){var b=X.aliasToReal[S]||S,E=X.remap[b]||b,O=a;return function(ie){var je=n?g:y,Re=n?g[E]:h,Qe=C(C({},O),ie);return ti(je,b,Re,Qe)}}function LI(S,h){return Mu(S,function(b){return typeof b=="function"?Zs(b,h):b})}function PI(S,h){return Mu(S,function(b){var E=h.length;return VC(Ir(Zs(b,E),h),E)})}function Mu(S,h){return function(){var b=arguments.length;if(!b)return S();for(var E=Array(b);b--;)E[b]=arguments[b];var O=s.rearg?0:b-1;return E[O]=h(E[O]),S.apply(void 0,E)}}function ku(S,h,b){var E,O=X.aliasToReal[S]||S,ie=h,je=vI[O];return je?ie=je(h):s.immutable&&(X.mutate.array[O]?ie=ei(h,mm):X.mutate.object[O]?ie=ei(h,YC(h)):X.mutate.set[O]&&(ie=ei(h,CI))),R(qu,function(Re){return R(X.aryMethod[Re],function(Qe){if(O==Qe){var Gu=X.methodSpread[O],UI=Gu&&Gu.afterRearg;return E=UI?Du(O,Nu(O,ie,Re),Re):Nu(O,Du(O,ie,Re),Re),E=_I(O,E),E=xI(O,E,Re),!1}}),!E}),E||(E=ie),E==h&&(E=p?v(E,1):function(){return h.apply(this,arguments)}),E.convert=Bu(O,h),E.placeholder=h.placeholder=b,E}if(!o)return ku(t,r,i);var he=r,wr=[];return R(qu,function(S){R(X.aryMethod[S],function(h){var b=he[X.remap[h]||h];b&&wr.push([h,ku(h,b,he)])})}),R(jt(he),function(S){var h=he[S];if(typeof h=="function"){for(var b=wr.length;b--;)if(wr[b][0]==S)return;h.convert=Bu(S,h),wr.push([S,h])}}),R(wr,function(S){he[S[0]]=S[1]}),he.convert=OI,he.placeholder=he,R(jt(he),function(S){R(X.realToAlias[S]||[],function(h){he[h]=he[S]})}),he}gm.exports=ti});var ri=u((BQ,hm)=>{"use strict";var zC=yt(),JC=pe(),XC=zC(JC,"WeakMap");hm.exports=XC});var ai=u((MQ,bm)=>{"use strict";var Am=ri(),ZC=Am&&new Am;bm.exports=ZC});var ni=u((kQ,Sm)=>{"use strict";var eO=Xr(),Im=ai(),tO=Im?function(e,t){return Im.set(e,t),e}:eO;Sm.exports=tO});var Ta=u((GQ,wm)=>{"use strict";var rO=ia(),aO=xe();function nO(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=rO(e.prototype),a=e.apply(r,t);return aO(a)?a:r}}wm.exports=nO});var Em=u((FQ,Tm)=>{"use strict";var oO=Ta(),sO=pe(),iO=1;function uO(e,t,r){var a=t&iO,n=oO(e);function o(){var s=this&&this!==sO&&this instanceof o?n:e;return s.apply(a?r:this,arguments)}return o}Tm.exports=uO});var oi=u((jQ,Rm)=>{"use strict";var pO=Math.max;function cO(e,t,r,a){for(var n=-1,o=e.length,s=r.length,i=-1,p=t.length,f=pO(o-s,0),m=Array(p+f),g=!a;++i<p;)m[i]=t[i];for(;++n<s;)(g||n<o)&&(m[r[n]]=e[n]);for(;f--;)m[i++]=e[n++];return m}Rm.exports=cO});var si=u((QQ,vm)=>{"use strict";var lO=Math.max;function dO(e,t,r,a){for(var n=-1,o=e.length,s=-1,i=r.length,p=-1,f=t.length,m=lO(o-i,0),g=Array(m+f),y=!a;++n<m;)g[n]=e[n];for(var I=n;++p<f;)g[I+p]=t[p];for(;++s<i;)(y||n<o)&&(g[I+r[s]]=e[n++]);return g}vm.exports=dO});var xm=u((WQ,_m)=>{"use strict";function fO(e,t){for(var r=e.length,a=0;r--;)e[r]===t&&++a;return a}_m.exports=fO});var Dn=u(($Q,Cm)=>{"use strict";function mO(){}Cm.exports=mO});var Bn=u((KQ,Om)=>{"use strict";var gO=ia(),yO=Dn(),hO=4294967295;function Nn(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=hO,this.__views__=[]}Nn.prototype=gO(yO.prototype);Nn.prototype.constructor=Nn;Om.exports=Nn});var ii=u((VQ,Pm)=>{"use strict";var Lm=ai(),AO=jo(),bO=Lm?function(e){return Lm.get(e)}:AO;Pm.exports=bO});var qm=u((YQ,Um)=>{"use strict";var IO={};Um.exports=IO});var Bm=u((HQ,Nm)=>{"use strict";var Dm=qm(),SO=Object.prototype,wO=SO.hasOwnProperty;function TO(e){for(var t=e.name+"",r=Dm[t],a=wO.call(Dm,t)?r.length:0;a--;){var n=r[a],o=n.func;if(o==null||o==e)return n.name}return t}Nm.exports=TO});var ui=u((zQ,Mm)=>{"use strict";var EO=ia(),RO=Dn();function Mn(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=void 0}Mn.prototype=EO(RO.prototype);Mn.prototype.constructor=Mn;Mm.exports=Mn});var Gm=u((JQ,km)=>{"use strict";var vO=Bn(),_O=ui(),xO=rr();function CO(e){if(e instanceof vO)return e.clone();var t=new _O(e.__wrapped__,e.__chain__);return t.__actions__=xO(e.__actions__),t.__index__=e.__index__,t.__values__=e.__values__,t}km.exports=CO});var Qm=u((XQ,jm)=>{"use strict";var OO=Bn(),Fm=ui(),LO=Dn(),PO=se(),UO=be(),qO=Gm(),DO=Object.prototype,NO=DO.hasOwnProperty;function kn(e){if(UO(e)&&!PO(e)&&!(e instanceof OO)){if(e instanceof Fm)return e;if(NO.call(e,"__wrapped__"))return qO(e)}return new Fm(e)}kn.prototype=LO.prototype;kn.prototype.constructor=kn;jm.exports=kn});var $m=u((ZQ,Wm)=>{"use strict";var BO=Bn(),MO=ii(),kO=Bm(),GO=Qm();function FO(e){var t=kO(e),r=GO[t];if(typeof r!="function"||!(t in BO.prototype))return!1;if(e===r)return!0;var a=MO(r);return!!a&&e===a[0]}Wm.exports=FO});var pi=u((eW,Km)=>{"use strict";var jO=ni(),QO=No(),WO=QO(jO);Km.exports=WO});var Ym=u((tW,Vm)=>{"use strict";var $O=/\{\n\/\* \[wrapped with (.+)\] \*/,KO=/,? & /;function VO(e){var t=e.match($O);return t?t[1].split(KO):[]}Vm.exports=VO});var zm=u((rW,Hm)=>{"use strict";var YO=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/;function HO(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(YO,`{
1
+ "use strict";var qI=Object.create;var Na=Object.defineProperty;var DI=Object.getOwnPropertyDescriptor;var NI=Object.getOwnPropertyNames;var BI=Object.getPrototypeOf,MI=Object.prototype.hasOwnProperty;var u=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),w=(e,t)=>{for(var r in t)Na(e,r,{get:t[r],enumerable:!0})},Fu=(e,t,r,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of NI(t))!MI.call(e,n)&&n!==r&&Na(e,n,{get:()=>t[n],enumerable:!(a=DI(t,n))||a.enumerable});return e};var P=(e,t,r)=>(r=e!=null?qI(BI(e)):{},Fu(t||!e||!e.__esModule?Na(r,"default",{value:e,enumerable:!0}):r,e)),kI=e=>Fu(Na({},"__esModule",{value:!0}),e);var Za=u((i0,vc)=>{"use strict";function NS(e,t){for(var r=-1,a=t.length,n=e.length;++r<a;)e[n+r]=t[r];return e}vc.exports=NS});var Oo=u((u0,_c)=>{"use strict";var BS=typeof global=="object"&&global&&global.Object===Object&&global;_c.exports=BS});var ce=u((c0,xc)=>{"use strict";var MS=Oo(),kS=typeof self=="object"&&self&&self.Object===Object&&self,GS=MS||kS||Function("return this")();xc.exports=GS});var xt=u((p0,Cc)=>{"use strict";var FS=ce(),WS=FS.Symbol;Cc.exports=WS});var Uc=u((l0,Pc)=>{"use strict";var Oc=xt(),Lc=Object.prototype,jS=Lc.hasOwnProperty,QS=Lc.toString,zr=Oc?Oc.toStringTag:void 0;function $S(e){var t=jS.call(e,zr),r=e[zr];try{e[zr]=void 0;var a=!0}catch{}var n=QS.call(e);return a&&(t?e[zr]=r:delete e[zr]),n}Pc.exports=$S});var Dc=u((d0,qc)=>{"use strict";var KS=Object.prototype,VS=KS.toString;function YS(e){return VS.call(e)}qc.exports=YS});var gt=u((f0,Mc)=>{"use strict";var Nc=xt(),HS=Uc(),zS=Dc(),JS="[object Null]",XS="[object Undefined]",Bc=Nc?Nc.toStringTag:void 0;function ZS(e){return e==null?e===void 0?XS:JS:Bc&&Bc in Object(e)?HS(e):zS(e)}Mc.exports=ZS});var be=u((m0,kc)=>{"use strict";function ew(e){return e!=null&&typeof e=="object"}kc.exports=ew});var Fc=u((g0,Gc)=>{"use strict";var tw=gt(),rw=be(),aw="[object Arguments]";function nw(e){return rw(e)&&tw(e)==aw}Gc.exports=nw});var Jr=u((y0,Qc)=>{"use strict";var Wc=Fc(),ow=be(),jc=Object.prototype,sw=jc.hasOwnProperty,iw=jc.propertyIsEnumerable,uw=Wc(function(){return arguments}())?Wc:function(e){return ow(e)&&sw.call(e,"callee")&&!iw.call(e,"callee")};Qc.exports=uw});var se=u((h0,$c)=>{"use strict";var cw=Array.isArray;$c.exports=cw});var Hc=u((A0,Yc)=>{"use strict";var Kc=xt(),pw=Jr(),lw=se(),Vc=Kc?Kc.isConcatSpreadable:void 0;function dw(e){return lw(e)||pw(e)||!!(Vc&&e&&e[Vc])}Yc.exports=dw});var Lo=u((b0,Jc)=>{"use strict";var fw=Za(),mw=Hc();function zc(e,t,r,a,n){var o=-1,s=e.length;for(r||(r=mw),n||(n=[]);++o<s;){var i=e[o];t>0&&r(i)?t>1?zc(i,t-1,r,a,n):fw(n,i):a||(n[n.length]=i)}return n}Jc.exports=zc});var Xr=u((I0,Xc)=>{"use strict";function gw(e){return e}Xc.exports=gw});var en=u((S0,Zc)=>{"use strict";function yw(e,t,r){switch(r.length){case 0:return e.call(t);case 1:return e.call(t,r[0]);case 2:return e.call(t,r[0],r[1]);case 3:return e.call(t,r[0],r[1],r[2])}return e.apply(t,r)}Zc.exports=yw});var Po=u((w0,tp)=>{"use strict";var hw=en(),ep=Math.max;function Aw(e,t,r){return t=ep(t===void 0?e.length-1:t,0),function(){for(var a=arguments,n=-1,o=ep(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),hw(e,this,i)}}tp.exports=Aw});var ap=u((T0,rp)=>{"use strict";function bw(e){return function(){return e}}rp.exports=bw});var xe=u((E0,np)=>{"use strict";function Iw(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}np.exports=Iw});var Zr=u((R0,op)=>{"use strict";var Sw=gt(),ww=xe(),Tw="[object AsyncFunction]",Ew="[object Function]",Rw="[object GeneratorFunction]",vw="[object Proxy]";function _w(e){if(!ww(e))return!1;var t=Sw(e);return t==Ew||t==Rw||t==Tw||t==vw}op.exports=_w});var ip=u((v0,sp)=>{"use strict";var xw=ce(),Cw=xw["__core-js_shared__"];sp.exports=Cw});var pp=u((_0,cp)=>{"use strict";var Uo=ip(),up=function(){var e=/[^.]+$/.exec(Uo&&Uo.keys&&Uo.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function Ow(e){return!!up&&up in e}cp.exports=Ow});var qo=u((x0,lp)=>{"use strict";var Lw=Function.prototype,Pw=Lw.toString;function Uw(e){if(e!=null){try{return Pw.call(e)}catch{}try{return e+""}catch{}}return""}lp.exports=Uw});var fp=u((C0,dp)=>{"use strict";var qw=Zr(),Dw=pp(),Nw=xe(),Bw=qo(),Mw=/[\\^$.*+?()[\]{}|]/g,kw=/^\[object .+?Constructor\]$/,Gw=Function.prototype,Fw=Object.prototype,Ww=Gw.toString,jw=Fw.hasOwnProperty,Qw=RegExp("^"+Ww.call(jw).replace(Mw,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function $w(e){if(!Nw(e)||Dw(e))return!1;var t=qw(e)?Qw:kw;return t.test(Bw(e))}dp.exports=$w});var gp=u((O0,mp)=>{"use strict";function Kw(e,t){return e?.[t]}mp.exports=Kw});var yt=u((L0,yp)=>{"use strict";var Vw=fp(),Yw=gp();function Hw(e,t){var r=Yw(e,t);return Vw(r)?r:void 0}yp.exports=Hw});var Do=u((P0,hp)=>{"use strict";var zw=yt(),Jw=function(){try{var e=zw(Object,"defineProperty");return e({},"",{}),e}catch{}}();hp.exports=Jw});var Ip=u((U0,bp)=>{"use strict";var Xw=ap(),Ap=Do(),Zw=Xr(),eT=Ap?function(e,t){return Ap(e,"toString",{configurable:!0,enumerable:!1,value:Xw(t),writable:!0})}:Zw;bp.exports=eT});var No=u((q0,Sp)=>{"use strict";var tT=800,rT=16,aT=Date.now;function nT(e){var t=0,r=0;return function(){var a=aT(),n=rT-(a-r);if(r=a,n>0){if(++t>=tT)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}Sp.exports=nT});var tn=u((D0,wp)=>{"use strict";var oT=Ip(),sT=No(),iT=sT(oT);wp.exports=iT});var Bo=u((N0,Tp)=>{"use strict";var uT=Xr(),cT=Po(),pT=tn();function lT(e,t){return pT(cT(e,t,uT),e+"")}Tp.exports=lT});var ea=u((B0,Ep)=>{"use strict";var dT=yt(),fT=dT(Object,"create");Ep.exports=fT});var _p=u((M0,vp)=>{"use strict";var Rp=ea();function mT(){this.__data__=Rp?Rp(null):{},this.size=0}vp.exports=mT});var Cp=u((k0,xp)=>{"use strict";function gT(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}xp.exports=gT});var Lp=u((G0,Op)=>{"use strict";var yT=ea(),hT="__lodash_hash_undefined__",AT=Object.prototype,bT=AT.hasOwnProperty;function IT(e){var t=this.__data__;if(yT){var r=t[e];return r===hT?void 0:r}return bT.call(t,e)?t[e]:void 0}Op.exports=IT});var Up=u((F0,Pp)=>{"use strict";var ST=ea(),wT=Object.prototype,TT=wT.hasOwnProperty;function ET(e){var t=this.__data__;return ST?t[e]!==void 0:TT.call(t,e)}Pp.exports=ET});var Dp=u((W0,qp)=>{"use strict";var RT=ea(),vT="__lodash_hash_undefined__";function _T(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=RT&&t===void 0?vT:t,this}qp.exports=_T});var Bp=u((j0,Np)=>{"use strict";var xT=_p(),CT=Cp(),OT=Lp(),LT=Up(),PT=Dp();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=CT;Ht.prototype.get=OT;Ht.prototype.has=LT;Ht.prototype.set=PT;Np.exports=Ht});var kp=u((Q0,Mp)=>{"use strict";function UT(){this.__data__=[],this.size=0}Mp.exports=UT});var zt=u(($0,Gp)=>{"use strict";function qT(e,t){return e===t||e!==e&&t!==t}Gp.exports=qT});var ta=u((K0,Fp)=>{"use strict";var DT=zt();function NT(e,t){for(var r=e.length;r--;)if(DT(e[r][0],t))return r;return-1}Fp.exports=NT});var jp=u((V0,Wp)=>{"use strict";var BT=ta(),MT=Array.prototype,kT=MT.splice;function GT(e){var t=this.__data__,r=BT(t,e);if(r<0)return!1;var a=t.length-1;return r==a?t.pop():kT.call(t,r,1),--this.size,!0}Wp.exports=GT});var $p=u((Y0,Qp)=>{"use strict";var FT=ta();function WT(e){var t=this.__data__,r=FT(t,e);return r<0?void 0:t[r][1]}Qp.exports=WT});var Vp=u((H0,Kp)=>{"use strict";var jT=ta();function QT(e){return jT(this.__data__,e)>-1}Kp.exports=QT});var Hp=u((z0,Yp)=>{"use strict";var $T=ta();function KT(e,t){var r=this.__data__,a=$T(r,e);return a<0?(++this.size,r.push([e,t])):r[a][1]=t,this}Yp.exports=KT});var ra=u((J0,zp)=>{"use strict";var VT=kp(),YT=jp(),HT=$p(),zT=Vp(),JT=Hp();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=VT;Jt.prototype.delete=YT;Jt.prototype.get=HT;Jt.prototype.has=zT;Jt.prototype.set=JT;zp.exports=Jt});var rn=u((X0,Jp)=>{"use strict";var XT=yt(),ZT=ce(),eE=XT(ZT,"Map");Jp.exports=eE});var el=u((Z0,Zp)=>{"use strict";var Xp=Bp(),tE=ra(),rE=rn();function aE(){this.size=0,this.__data__={hash:new Xp,map:new(rE||tE),string:new Xp}}Zp.exports=aE});var rl=u((eF,tl)=>{"use strict";function nE(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}tl.exports=nE});var aa=u((tF,al)=>{"use strict";var oE=rl();function sE(e,t){var r=e.__data__;return oE(t)?r[typeof t=="string"?"string":"hash"]:r.map}al.exports=sE});var ol=u((rF,nl)=>{"use strict";var iE=aa();function uE(e){var t=iE(this,e).delete(e);return this.size-=t?1:0,t}nl.exports=uE});var il=u((aF,sl)=>{"use strict";var cE=aa();function pE(e){return cE(this,e).get(e)}sl.exports=pE});var cl=u((nF,ul)=>{"use strict";var lE=aa();function dE(e){return lE(this,e).has(e)}ul.exports=dE});var ll=u((oF,pl)=>{"use strict";var fE=aa();function mE(e,t){var r=fE(this,e),a=r.size;return r.set(e,t),this.size+=r.size==a?0:1,this}pl.exports=mE});var an=u((sF,dl)=>{"use strict";var gE=el(),yE=ol(),hE=il(),AE=cl(),bE=ll();function Xt(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])}}Xt.prototype.clear=gE;Xt.prototype.delete=yE;Xt.prototype.get=hE;Xt.prototype.has=AE;Xt.prototype.set=bE;dl.exports=Xt});var ml=u((iF,fl)=>{"use strict";var IE="__lodash_hash_undefined__";function SE(e){return this.__data__.set(e,IE),this}fl.exports=SE});var yl=u((uF,gl)=>{"use strict";function wE(e){return this.__data__.has(e)}gl.exports=wE});var Mo=u((cF,hl)=>{"use strict";var TE=an(),EE=ml(),RE=yl();function nn(e){var t=-1,r=e==null?0:e.length;for(this.__data__=new TE;++t<r;)this.add(e[t])}nn.prototype.add=nn.prototype.push=EE;nn.prototype.has=RE;hl.exports=nn});var bl=u((pF,Al)=>{"use strict";function vE(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}Al.exports=vE});var Sl=u((lF,Il)=>{"use strict";function _E(e){return e!==e}Il.exports=_E});var Tl=u((dF,wl)=>{"use strict";function xE(e,t,r){for(var a=r-1,n=e.length;++a<n;)if(e[a]===t)return a;return-1}wl.exports=xE});var Rl=u((fF,El)=>{"use strict";var CE=bl(),OE=Sl(),LE=Tl();function PE(e,t,r){return t===t?LE(e,t,r):CE(e,OE,r)}El.exports=PE});var ko=u((mF,vl)=>{"use strict";var UE=Rl();function qE(e,t){var r=e==null?0:e.length;return!!r&&UE(e,t,0)>-1}vl.exports=qE});var xl=u((gF,_l)=>{"use strict";function DE(e,t,r){for(var a=-1,n=e==null?0:e.length;++a<n;)if(r(t,e[a]))return!0;return!1}_l.exports=DE});var Go=u((yF,Cl)=>{"use strict";function NE(e,t){return e.has(t)}Cl.exports=NE});var Fo=u((hF,Ol)=>{"use strict";var BE=yt(),ME=ce(),kE=BE(ME,"Set");Ol.exports=kE});var Wo=u((AF,Ll)=>{"use strict";function GE(){}Ll.exports=GE});var on=u((bF,Pl)=>{"use strict";function FE(e){var t=-1,r=Array(e.size);return e.forEach(function(a){r[++t]=a}),r}Pl.exports=FE});var ql=u((IF,Ul)=>{"use strict";var jo=Fo(),WE=Wo(),jE=on(),QE=1/0,$E=jo&&1/jE(new jo([,-0]))[1]==QE?function(e){return new jo(e)}:WE;Ul.exports=$E});var Nl=u((SF,Dl)=>{"use strict";var KE=Mo(),VE=ko(),YE=xl(),HE=Go(),zE=ql(),JE=on(),XE=200;function ZE(e,t,r){var a=-1,n=VE,o=e.length,s=!0,i=[],c=i;if(r)s=!1,n=YE;else if(o>=XE){var f=t?null:zE(e);if(f)return JE(f);s=!1,n=HE,c=new KE}else c=t?[]:i;e:for(;++a<o;){var m=e[a],g=t?t(m):m;if(m=r||m!==0?m:0,s&&g===g){for(var y=c.length;y--;)if(c[y]===g)continue e;t&&c.push(g),i.push(m)}else n(c,g,r)||(c!==i&&c.push(g),i.push(m))}return i}Dl.exports=ZE});var sn=u((wF,Bl)=>{"use strict";var eR=9007199254740991;function tR(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=eR}Bl.exports=tR});var Zt=u((TF,Ml)=>{"use strict";var rR=Zr(),aR=sn();function nR(e){return e!=null&&aR(e.length)&&!rR(e)}Ml.exports=nR});var Qo=u((EF,kl)=>{"use strict";var oR=Zt(),sR=be();function iR(e){return sR(e)&&oR(e)}kl.exports=iR});var Fl=u((RF,Gl)=>{"use strict";var uR=Lo(),cR=Bo(),pR=Nl(),lR=Qo(),dR=cR(function(e){return pR(uR(e,1,lR,!0))});Gl.exports=dR});var jl=u((vF,Wl)=>{"use strict";var fR=ra();function mR(){this.__data__=new fR,this.size=0}Wl.exports=mR});var $l=u((_F,Ql)=>{"use strict";function gR(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r}Ql.exports=gR});var Vl=u((xF,Kl)=>{"use strict";function yR(e){return this.__data__.get(e)}Kl.exports=yR});var Hl=u((CF,Yl)=>{"use strict";function hR(e){return this.__data__.has(e)}Yl.exports=hR});var Jl=u((OF,zl)=>{"use strict";var AR=ra(),bR=rn(),IR=an(),SR=200;function wR(e,t){var r=this.__data__;if(r instanceof AR){var a=r.__data__;if(!bR||a.length<SR-1)return a.push([e,t]),this.size=++r.size,this;r=this.__data__=new IR(a)}return r.set(e,t),this.size=r.size,this}zl.exports=wR});var na=u((LF,Xl)=>{"use strict";var TR=ra(),ER=jl(),RR=$l(),vR=Vl(),_R=Hl(),xR=Jl();function er(e){var t=this.__data__=new TR(e);this.size=t.size}er.prototype.clear=ER;er.prototype.delete=RR;er.prototype.get=vR;er.prototype.has=_R;er.prototype.set=xR;Xl.exports=er});var oa=u((PF,ed)=>{"use strict";var Zl=Do();function CR(e,t,r){t=="__proto__"&&Zl?Zl(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}ed.exports=CR});var $o=u((UF,td)=>{"use strict";var OR=oa(),LR=zt();function PR(e,t,r){(r!==void 0&&!LR(e[t],r)||r===void 0&&!(t in e))&&OR(e,t,r)}td.exports=PR});var ad=u((qF,rd)=>{"use strict";function UR(e){return function(t,r,a){for(var n=-1,o=Object(t),s=a(t),i=s.length;i--;){var c=s[e?i:++n];if(r(o[c],c,o)===!1)break}return t}}rd.exports=UR});var Ko=u((DF,nd)=>{"use strict";var qR=ad(),DR=qR();nd.exports=DR});var Vo=u((sa,tr)=>{"use strict";var NR=ce(),ud=typeof sa=="object"&&sa&&!sa.nodeType&&sa,od=ud&&typeof tr=="object"&&tr&&!tr.nodeType&&tr,BR=od&&od.exports===ud,sd=BR?NR.Buffer:void 0,id=sd?sd.allocUnsafe:void 0;function MR(e,t){if(t)return e.slice();var r=e.length,a=id?id(r):new e.constructor(r);return e.copy(a),a}tr.exports=MR});var Yo=u((NF,cd)=>{"use strict";var kR=ce(),GR=kR.Uint8Array;cd.exports=GR});var un=u((BF,ld)=>{"use strict";var pd=Yo();function FR(e){var t=new e.constructor(e.byteLength);return new pd(t).set(new pd(e)),t}ld.exports=FR});var Ho=u((MF,dd)=>{"use strict";var WR=un();function jR(e,t){var r=t?WR(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.length)}dd.exports=jR});var rr=u((kF,fd)=>{"use strict";function QR(e,t){var r=-1,a=e.length;for(t||(t=Array(a));++r<a;)t[r]=e[r];return t}fd.exports=QR});var ia=u((GF,gd)=>{"use strict";var $R=xe(),md=Object.create,KR=function(){function e(){}return function(t){if(!$R(t))return{};if(md)return md(t);e.prototype=t;var r=new e;return e.prototype=void 0,r}}();gd.exports=KR});var zo=u((FF,yd)=>{"use strict";function VR(e,t){return function(r){return e(t(r))}}yd.exports=VR});var cn=u((WF,hd)=>{"use strict";var YR=zo(),HR=YR(Object.getPrototypeOf,Object);hd.exports=HR});var pn=u((jF,Ad)=>{"use strict";var zR=Object.prototype;function JR(e){var t=e&&e.constructor,r=typeof t=="function"&&t.prototype||zR;return e===r}Ad.exports=JR});var Jo=u((QF,bd)=>{"use strict";var XR=ia(),ZR=cn(),ev=pn();function tv(e){return typeof e.constructor=="function"&&!ev(e)?XR(ZR(e)):{}}bd.exports=tv});var Sd=u(($F,Id)=>{"use strict";function rv(){return!1}Id.exports=rv});var ca=u((ua,ar)=>{"use strict";var av=ce(),nv=Sd(),Ed=typeof ua=="object"&&ua&&!ua.nodeType&&ua,wd=Ed&&typeof ar=="object"&&ar&&!ar.nodeType&&ar,ov=wd&&wd.exports===Ed,Td=ov?av.Buffer:void 0,sv=Td?Td.isBuffer:void 0,iv=sv||nv;ar.exports=iv});var Xo=u((KF,vd)=>{"use strict";var uv=gt(),cv=cn(),pv=be(),lv="[object Object]",dv=Function.prototype,fv=Object.prototype,Rd=dv.toString,mv=fv.hasOwnProperty,gv=Rd.call(Object);function yv(e){if(!pv(e)||uv(e)!=lv)return!1;var t=cv(e);if(t===null)return!0;var r=mv.call(t,"constructor")&&t.constructor;return typeof r=="function"&&r instanceof r&&Rd.call(r)==gv}vd.exports=yv});var xd=u((VF,_d)=>{"use strict";var hv=gt(),Av=sn(),bv=be(),Iv="[object Arguments]",Sv="[object Array]",wv="[object Boolean]",Tv="[object Date]",Ev="[object Error]",Rv="[object Function]",vv="[object Map]",_v="[object Number]",xv="[object Object]",Cv="[object RegExp]",Ov="[object Set]",Lv="[object String]",Pv="[object WeakMap]",Uv="[object ArrayBuffer]",qv="[object DataView]",Dv="[object Float32Array]",Nv="[object Float64Array]",Bv="[object Int8Array]",Mv="[object Int16Array]",kv="[object Int32Array]",Gv="[object Uint8Array]",Fv="[object Uint8ClampedArray]",Wv="[object Uint16Array]",jv="[object Uint32Array]",B={};B[Dv]=B[Nv]=B[Bv]=B[Mv]=B[kv]=B[Gv]=B[Fv]=B[Wv]=B[jv]=!0;B[Iv]=B[Sv]=B[Uv]=B[wv]=B[qv]=B[Tv]=B[Ev]=B[Rv]=B[vv]=B[_v]=B[xv]=B[Cv]=B[Ov]=B[Lv]=B[Pv]=!1;function Qv(e){return bv(e)&&Av(e.length)&&!!B[hv(e)]}_d.exports=Qv});var ln=u((YF,Cd)=>{"use strict";function $v(e){return function(t){return e(t)}}Cd.exports=$v});var dn=u((pa,nr)=>{"use strict";var Kv=Oo(),Od=typeof pa=="object"&&pa&&!pa.nodeType&&pa,la=Od&&typeof nr=="object"&&nr&&!nr.nodeType&&nr,Vv=la&&la.exports===Od,Zo=Vv&&Kv.process,Yv=function(){try{var e=la&&la.require&&la.require("util").types;return e||Zo&&Zo.binding&&Zo.binding("util")}catch{}}();nr.exports=Yv});var fn=u((HF,Ud)=>{"use strict";var Hv=xd(),zv=ln(),Ld=dn(),Pd=Ld&&Ld.isTypedArray,Jv=Pd?zv(Pd):Hv;Ud.exports=Jv});var es=u((zF,qd)=>{"use strict";function Xv(e,t){if(!(t==="constructor"&&typeof e[t]=="function")&&t!="__proto__")return e[t]}qd.exports=Xv});var ts=u((JF,Dd)=>{"use strict";var Zv=oa(),e_=zt(),t_=Object.prototype,r_=t_.hasOwnProperty;function a_(e,t,r){var a=e[t];(!(r_.call(e,t)&&e_(a,r))||r===void 0&&!(t in e))&&Zv(e,t,r)}Dd.exports=a_});var or=u((XF,Nd)=>{"use strict";var n_=ts(),o_=oa();function s_(e,t,r,a){var n=!r;r||(r={});for(var o=-1,s=t.length;++o<s;){var i=t[o],c=a?a(r[i],e[i],i,r,e):void 0;c===void 0&&(c=e[i]),n?o_(r,i,c):n_(r,i,c)}return r}Nd.exports=s_});var Md=u((ZF,Bd)=>{"use strict";function i_(e,t){for(var r=-1,a=Array(e);++r<e;)a[r]=t(r);return a}Bd.exports=i_});var da=u((e1,kd)=>{"use strict";var u_=9007199254740991,c_=/^(?:0|[1-9]\d*)$/;function p_(e,t){var r=typeof e;return t=t??u_,!!t&&(r=="number"||r!="symbol"&&c_.test(e))&&e>-1&&e%1==0&&e<t}kd.exports=p_});var rs=u((t1,Gd)=>{"use strict";var l_=Md(),d_=Jr(),f_=se(),m_=ca(),g_=da(),y_=fn(),h_=Object.prototype,A_=h_.hasOwnProperty;function b_(e,t){var r=f_(e),a=!r&&d_(e),n=!r&&!a&&m_(e),o=!r&&!a&&!n&&y_(e),s=r||a||n||o,i=s?l_(e.length,String):[],c=i.length;for(var f in e)(t||A_.call(e,f))&&!(s&&(f=="length"||n&&(f=="offset"||f=="parent")||o&&(f=="buffer"||f=="byteLength"||f=="byteOffset")||g_(f,c)))&&i.push(f);return i}Gd.exports=b_});var Wd=u((r1,Fd)=>{"use strict";function I_(e){var t=[];if(e!=null)for(var r in Object(e))t.push(r);return t}Fd.exports=I_});var Qd=u((a1,jd)=>{"use strict";var S_=xe(),w_=pn(),T_=Wd(),E_=Object.prototype,R_=E_.hasOwnProperty;function v_(e){if(!S_(e))return T_(e);var t=w_(e),r=[];for(var a in e)a=="constructor"&&(t||!R_.call(e,a))||r.push(a);return r}jd.exports=v_});var sr=u((n1,$d)=>{"use strict";var __=rs(),x_=Qd(),C_=Zt();function O_(e){return C_(e)?__(e,!0):x_(e)}$d.exports=O_});var Vd=u((o1,Kd)=>{"use strict";var L_=or(),P_=sr();function U_(e){return L_(e,P_(e))}Kd.exports=U_});var Zd=u((s1,Xd)=>{"use strict";var Yd=$o(),q_=Vo(),D_=Ho(),N_=rr(),B_=Jo(),Hd=Jr(),zd=se(),M_=Qo(),k_=ca(),G_=Zr(),F_=xe(),W_=Xo(),j_=fn(),Jd=es(),Q_=Vd();function $_(e,t,r,a,n,o,s){var i=Jd(e,r),c=Jd(t,r),f=s.get(c);if(f){Yd(e,r,f);return}var m=o?o(i,c,r+"",e,t,s):void 0,g=m===void 0;if(g){var y=zd(c),I=!y&&k_(c),C=!y&&!I&&j_(c);m=c,y||I||C?zd(i)?m=i:M_(i)?m=N_(i):I?(g=!1,m=q_(c,!0)):C?(g=!1,m=D_(c,!0)):m=[]:W_(c)||Hd(c)?(m=i,Hd(i)?m=Q_(i):(!F_(i)||G_(i))&&(m=B_(c))):g=!1}g&&(s.set(c,m),n(m,c,a,o,s),s.delete(c)),Yd(e,r,m)}Xd.exports=$_});var rf=u((i1,tf)=>{"use strict";var K_=na(),V_=$o(),Y_=Ko(),H_=Zd(),z_=xe(),J_=sr(),X_=es();function ef(e,t,r,a,n){e!==t&&Y_(t,function(o,s){if(n||(n=new K_),z_(o))H_(e,t,s,r,ef,a,n);else{var i=a?a(X_(e,s),o,s+"",e,t,n):void 0;i===void 0&&(i=o),V_(e,s,i)}},J_)}tf.exports=ef});var nf=u((u1,af)=>{"use strict";var Z_=zt(),ex=Zt(),tx=da(),rx=xe();function ax(e,t,r){if(!rx(r))return!1;var a=typeof t;return(a=="number"?ex(r)&&tx(t,r.length):a=="string"&&t in r)?Z_(r[t],e):!1}af.exports=ax});var sf=u((c1,of)=>{"use strict";var nx=Bo(),ox=nf();function sx(e){return nx(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&&ox(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})}of.exports=sx});var as=u((p1,uf)=>{"use strict";var ix=rf(),ux=sf(),cx=ux(function(e,t,r){ix(e,t,r)});uf.exports=cx});var lm=u(ge=>{"use strict";ge.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"};ge.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"]};ge.aryRearg={2:[1,0],3:[2,0,1],4:[3,2,0,1]};ge.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};ge.iterateeRearg={mapKeys:[1],reduceRight:[1,0]};ge.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]};ge.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}};ge.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}};ge.realToAlias=function(){var e=Object.prototype.hasOwnProperty,t=ge.aliasToReal,r={};for(var a in t){var n=t[a];e.call(r,n)?r[n].push(a):r[n]=[a]}return r}();ge.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"};ge.skipFixed={castArray:!0,flow:!0,flowRight:!0,iteratee:!0,mixin:!0,rearg:!0,runInContext:!0};ge.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 Xs=u((Dj,dm)=>{"use strict";dm.exports={}});var ym=u((Nj,gm)=>{"use strict";var X=lm(),KC=Xs(),fm=Array.prototype.push;function VC(e,t){return t==2?function(r,a){return e.apply(void 0,arguments)}:function(r){return e.apply(void 0,arguments)}}function Zs(e,t){return t==2?function(r,a){return e(r,a)}:function(r){return e(r)}}function mm(e){for(var t=e?e.length:0,r=Array(t);t--;)r[t]=e[t];return r}function YC(e){return function(t){return e({},t)}}function HC(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&&fm.apply(s,o),t!=a&&fm.apply(s,n.slice(t+1)),e.apply(this,s)}}function ei(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 ti(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:KC,c="curry"in a&&a.curry,f="fixed"in a&&a.fixed,m="rearg"in a&&a.rearg,g=n?r.runInContext():void 0,y=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},I=y.ary,C=y.assign,_=y.clone,v=y.curry,R=y.forEach,U=y.isArray,qe=y.isError,Ee=y.isFunction,pt=y.isWeakMap,Wt=y.keys,Ir=y.rearg,Sr=y.toInteger,RI=y.toPath,qu=Wt(X.aryMethod),vI={castArray:function(S){return function(){var h=arguments[0];return U(h)?S(mm(h)):S.apply(void 0,arguments)}},iteratee:function(S){return function(){var h=arguments[0],b=arguments[1],E=S(h,b),O=E.length;return s.cap&&typeof b=="number"?(b=b>2?b-2:1,O&&O<=b?E:Zs(E,b)):E}},mixin:function(S){return function(h){var b=this;if(!Ee(b))return S(b,Object(h));var E=[];return R(Wt(h),function(O){Ee(h[O])&&E.push([O,b.prototype[O]])}),S(b,Object(h)),R(E,function(O){var ie=O[1];Ee(ie)?b.prototype[O[0]]=ie:delete b.prototype[O[0]]}),b}},nthArg:function(S){return function(h){var b=h<0?1:Sr(h)+1;return v(S(h),b)}},rearg:function(S){return function(h,b){var E=b?b.length:0;return v(S(h,b),E)}},runInContext:function(S){return function(h){return ti(e,S(h),a)}}};function _I(S,h){if(s.cap){var b=X.iterateeRearg[S];if(b)return PI(h,b);var E=!n&&X.iterateeAry[S];if(E)return LI(h,E)}return h}function xI(S,h,b){return c||s.curry&&b>1?v(h,b):h}function Du(S,h,b){if(s.fixed&&(f||!X.skipFixed[S])){var E=X.methodSpread[S],O=E&&E.start;return O===void 0?I(h,b):HC(h,O)}return h}function Nu(S,h,b){return s.rearg&&b>1&&(m||!X.skipRearg[S])?Ir(h,X.methodRearg[S]||X.aryRearg[b]):h}function CI(S,h){h=RI(h);for(var b=-1,E=h.length,O=E-1,ie=_(Object(S)),We=ie;We!=null&&++b<E;){var Re=h[b],je=We[Re];je!=null&&!(Ee(je)||qe(je)||pt(je))&&(We[Re]=_(b==O?je:Object(je))),We=We[Re]}return ie}function OI(S){return he.runInContext.convert(S)(void 0)}function Bu(S,h){var b=X.aliasToReal[S]||S,E=X.remap[b]||b,O=a;return function(ie){var We=n?g:y,Re=n?g[E]:h,je=C(C({},O),ie);return ti(We,b,Re,je)}}function LI(S,h){return Mu(S,function(b){return typeof b=="function"?Zs(b,h):b})}function PI(S,h){return Mu(S,function(b){var E=h.length;return VC(Ir(Zs(b,E),h),E)})}function Mu(S,h){return function(){var b=arguments.length;if(!b)return S();for(var E=Array(b);b--;)E[b]=arguments[b];var O=s.rearg?0:b-1;return E[O]=h(E[O]),S.apply(void 0,E)}}function ku(S,h,b){var E,O=X.aliasToReal[S]||S,ie=h,We=vI[O];return We?ie=We(h):s.immutable&&(X.mutate.array[O]?ie=ei(h,mm):X.mutate.object[O]?ie=ei(h,YC(h)):X.mutate.set[O]&&(ie=ei(h,CI))),R(qu,function(Re){return R(X.aryMethod[Re],function(je){if(O==je){var Gu=X.methodSpread[O],UI=Gu&&Gu.afterRearg;return E=UI?Du(O,Nu(O,ie,Re),Re):Nu(O,Du(O,ie,Re),Re),E=_I(O,E),E=xI(O,E,Re),!1}}),!E}),E||(E=ie),E==h&&(E=c?v(E,1):function(){return h.apply(this,arguments)}),E.convert=Bu(O,h),E.placeholder=h.placeholder=b,E}if(!o)return ku(t,r,i);var he=r,wr=[];return R(qu,function(S){R(X.aryMethod[S],function(h){var b=he[X.remap[h]||h];b&&wr.push([h,ku(h,b,he)])})}),R(Wt(he),function(S){var h=he[S];if(typeof h=="function"){for(var b=wr.length;b--;)if(wr[b][0]==S)return;h.convert=Bu(S,h),wr.push([S,h])}}),R(wr,function(S){he[S[0]]=S[1]}),he.convert=OI,he.placeholder=he,R(Wt(he),function(S){R(X.realToAlias[S]||[],function(h){he[h]=he[S]})}),he}gm.exports=ti});var ri=u((Bj,hm)=>{"use strict";var zC=yt(),JC=ce(),XC=zC(JC,"WeakMap");hm.exports=XC});var ai=u((Mj,bm)=>{"use strict";var Am=ri(),ZC=Am&&new Am;bm.exports=ZC});var ni=u((kj,Sm)=>{"use strict";var eO=Xr(),Im=ai(),tO=Im?function(e,t){return Im.set(e,t),e}:eO;Sm.exports=tO});var Ta=u((Gj,wm)=>{"use strict";var rO=ia(),aO=xe();function nO(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=rO(e.prototype),a=e.apply(r,t);return aO(a)?a:r}}wm.exports=nO});var Em=u((Fj,Tm)=>{"use strict";var oO=Ta(),sO=ce(),iO=1;function uO(e,t,r){var a=t&iO,n=oO(e);function o(){var s=this&&this!==sO&&this instanceof o?n:e;return s.apply(a?r:this,arguments)}return o}Tm.exports=uO});var oi=u((Wj,Rm)=>{"use strict";var cO=Math.max;function pO(e,t,r,a){for(var n=-1,o=e.length,s=r.length,i=-1,c=t.length,f=cO(o-s,0),m=Array(c+f),g=!a;++i<c;)m[i]=t[i];for(;++n<s;)(g||n<o)&&(m[r[n]]=e[n]);for(;f--;)m[i++]=e[n++];return m}Rm.exports=pO});var si=u((jj,vm)=>{"use strict";var lO=Math.max;function dO(e,t,r,a){for(var n=-1,o=e.length,s=-1,i=r.length,c=-1,f=t.length,m=lO(o-i,0),g=Array(m+f),y=!a;++n<m;)g[n]=e[n];for(var I=n;++c<f;)g[I+c]=t[c];for(;++s<i;)(y||n<o)&&(g[I+r[s]]=e[n++]);return g}vm.exports=dO});var xm=u((Qj,_m)=>{"use strict";function fO(e,t){for(var r=e.length,a=0;r--;)e[r]===t&&++a;return a}_m.exports=fO});var Dn=u(($j,Cm)=>{"use strict";function mO(){}Cm.exports=mO});var Bn=u((Kj,Om)=>{"use strict";var gO=ia(),yO=Dn(),hO=4294967295;function Nn(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=hO,this.__views__=[]}Nn.prototype=gO(yO.prototype);Nn.prototype.constructor=Nn;Om.exports=Nn});var ii=u((Vj,Pm)=>{"use strict";var Lm=ai(),AO=Wo(),bO=Lm?function(e){return Lm.get(e)}:AO;Pm.exports=bO});var qm=u((Yj,Um)=>{"use strict";var IO={};Um.exports=IO});var Bm=u((Hj,Nm)=>{"use strict";var Dm=qm(),SO=Object.prototype,wO=SO.hasOwnProperty;function TO(e){for(var t=e.name+"",r=Dm[t],a=wO.call(Dm,t)?r.length:0;a--;){var n=r[a],o=n.func;if(o==null||o==e)return n.name}return t}Nm.exports=TO});var ui=u((zj,Mm)=>{"use strict";var EO=ia(),RO=Dn();function Mn(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=void 0}Mn.prototype=EO(RO.prototype);Mn.prototype.constructor=Mn;Mm.exports=Mn});var Gm=u((Jj,km)=>{"use strict";var vO=Bn(),_O=ui(),xO=rr();function CO(e){if(e instanceof vO)return e.clone();var t=new _O(e.__wrapped__,e.__chain__);return t.__actions__=xO(e.__actions__),t.__index__=e.__index__,t.__values__=e.__values__,t}km.exports=CO});var jm=u((Xj,Wm)=>{"use strict";var OO=Bn(),Fm=ui(),LO=Dn(),PO=se(),UO=be(),qO=Gm(),DO=Object.prototype,NO=DO.hasOwnProperty;function kn(e){if(UO(e)&&!PO(e)&&!(e instanceof OO)){if(e instanceof Fm)return e;if(NO.call(e,"__wrapped__"))return qO(e)}return new Fm(e)}kn.prototype=LO.prototype;kn.prototype.constructor=kn;Wm.exports=kn});var $m=u((Zj,Qm)=>{"use strict";var BO=Bn(),MO=ii(),kO=Bm(),GO=jm();function FO(e){var t=kO(e),r=GO[t];if(typeof r!="function"||!(t in BO.prototype))return!1;if(e===r)return!0;var a=MO(r);return!!a&&e===a[0]}Qm.exports=FO});var ci=u((eQ,Km)=>{"use strict";var WO=ni(),jO=No(),QO=jO(WO);Km.exports=QO});var Ym=u((tQ,Vm)=>{"use strict";var $O=/\{\n\/\* \[wrapped with (.+)\] \*/,KO=/,? & /;function VO(e){var t=e.match($O);return t?t[1].split(KO):[]}Vm.exports=VO});var zm=u((rQ,Hm)=>{"use strict";var YO=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/;function HO(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(YO,`{
2
2
  /* [wrapped with `+t+`] */
3
- `)}Hm.exports=HO});var Gn=u((aW,Jm)=>{"use strict";function zO(e,t){for(var r=-1,a=e==null?0:e.length;++r<a&&t(e[r],r,e)!==!1;);return e}Jm.exports=zO});var Zm=u((nW,Xm)=>{"use strict";var JO=Gn(),XO=ko(),ZO=1,eL=2,tL=8,rL=16,aL=32,nL=64,oL=128,sL=256,iL=512,uL=[["ary",oL],["bind",ZO],["bindKey",eL],["curry",tL],["curryRight",rL],["flip",iL],["partial",aL],["partialRight",nL],["rearg",sL]];function pL(e,t){return JO(uL,function(r){var a="_."+r[0];t&r[1]&&!XO(e,a)&&e.push(a)}),e.sort()}Xm.exports=pL});var ci=u((oW,eg)=>{"use strict";var cL=Ym(),lL=zm(),dL=tn(),fL=Zm();function mL(e,t,r){var a=t+"";return dL(e,lL(a,fL(cL(a),r)))}eg.exports=mL});var li=u((sW,ag)=>{"use strict";var gL=$m(),yL=pi(),hL=ci(),AL=1,bL=2,IL=4,SL=8,tg=32,rg=64;function wL(e,t,r,a,n,o,s,i,p,f){var m=t&SL,g=m?s:void 0,y=m?void 0:s,I=m?o:void 0,C=m?void 0:o;t|=m?tg:rg,t&=~(m?rg:tg),t&IL||(t&=~(AL|bL));var _=[e,t,n,I,g,C,y,i,p,f],v=r.apply(void 0,_);return gL(e)&&yL(v,_),v.placeholder=a,hL(v,e,t)}ag.exports=wL});var di=u((iW,ng)=>{"use strict";function TL(e){var t=e;return t.placeholder}ng.exports=TL});var sg=u((uW,og)=>{"use strict";var EL=rr(),RL=da(),vL=Math.min;function _L(e,t){for(var r=e.length,a=vL(t.length,r),n=EL(e);a--;){var o=t[a];e[a]=RL(o,r)?n[o]:void 0}return e}og.exports=_L});var Fn=u((pW,ug)=>{"use strict";var ig="__lodash_placeholder__";function xL(e,t){for(var r=-1,a=e.length,n=0,o=[];++r<a;){var s=e[r];(s===t||s===ig)&&(e[r]=ig,o[n++]=r)}return o}ug.exports=xL});var fi=u((cW,lg)=>{"use strict";var CL=oi(),OL=si(),LL=xm(),pg=Ta(),PL=li(),UL=di(),qL=sg(),DL=Fn(),NL=pe(),BL=1,ML=2,kL=8,GL=16,FL=128,jL=512;function cg(e,t,r,a,n,o,s,i,p,f){var m=t&FL,g=t&BL,y=t&ML,I=t&(kL|GL),C=t&jL,_=y?void 0:pg(e);function v(){for(var R=arguments.length,U=Array(R),qe=R;qe--;)U[qe]=arguments[qe];if(I)var Ee=UL(v),ct=LL(U,Ee);if(a&&(U=CL(U,a,n,I)),o&&(U=OL(U,o,s,I)),R-=ct,I&&R<f){var jt=DL(U,Ee);return PL(e,t,cg,v.placeholder,r,U,jt,i,p,f-R)}var Ir=g?r:this,Sr=y?Ir[e]:e;return R=U.length,i?U=qL(U,i):C&&R>1&&U.reverse(),m&&p<R&&(U.length=p),this&&this!==NL&&this instanceof v&&(Sr=_||pg(Sr)),Sr.apply(Ir,U)}return v}lg.exports=cg});var fg=u((lW,dg)=>{"use strict";var QL=en(),WL=Ta(),$L=fi(),KL=li(),VL=di(),YL=Fn(),HL=pe();function zL(e,t,r){var a=WL(e);function n(){for(var o=arguments.length,s=Array(o),i=o,p=VL(n);i--;)s[i]=arguments[i];var f=o<3&&s[0]!==p&&s[o-1]!==p?[]:YL(s,p);if(o-=f.length,o<r)return KL(e,t,$L,n.placeholder,void 0,s,f,void 0,void 0,r-o);var m=this&&this!==HL&&this instanceof n?a:e;return QL(m,this,s)}return n}dg.exports=zL});var gg=u((dW,mg)=>{"use strict";var JL=en(),XL=Ta(),ZL=pe(),eP=1;function tP(e,t,r,a){var n=t&eP,o=XL(e);function s(){for(var i=-1,p=arguments.length,f=-1,m=a.length,g=Array(m+p),y=this&&this!==ZL&&this instanceof s?o:e;++f<m;)g[f]=a[f];for(;p--;)g[f++]=arguments[++i];return JL(y,n?r:this,g)}return s}mg.exports=tP});var Sg=u((fW,Ig)=>{"use strict";var rP=oi(),aP=si(),yg=Fn(),hg="__lodash_placeholder__",mi=1,nP=2,oP=4,Ag=8,Ea=128,bg=256,sP=Math.min;function iP(e,t){var r=e[1],a=t[1],n=r|a,o=n<(mi|nP|Ea),s=a==Ea&&r==Ag||a==Ea&&r==bg&&e[7].length<=t[8]||a==(Ea|bg)&&t[7].length<=t[8]&&r==Ag;if(!(o||s))return e;a&mi&&(e[2]=t[2],n|=r&mi?0:oP);var i=t[3];if(i){var p=e[3];e[3]=p?rP(p,i,t[4]):i,e[4]=p?yg(e[3],hg):t[4]}return i=t[5],i&&(p=e[5],e[5]=p?aP(p,i,t[6]):i,e[6]=p?yg(e[5],hg):t[6]),i=t[7],i&&(e[7]=i),a&Ea&&(e[8]=e[8]==null?t[8]:sP(e[8],t[8])),e[9]==null&&(e[9]=t[9]),e[0]=t[0],e[1]=n,e}Ig.exports=iP});var Tg=u((mW,wg)=>{"use strict";var uP=/\s/;function pP(e){for(var t=e.length;t--&&uP.test(e.charAt(t)););return t}wg.exports=pP});var Rg=u((gW,Eg)=>{"use strict";var cP=Tg(),lP=/^\s+/;function dP(e){return e&&e.slice(0,cP(e)+1).replace(lP,"")}Eg.exports=dP});var mr=u((yW,vg)=>{"use strict";var fP=gt(),mP=be(),gP="[object Symbol]";function yP(e){return typeof e=="symbol"||mP(e)&&fP(e)==gP}vg.exports=yP});var Og=u((hW,Cg)=>{"use strict";var hP=Rg(),_g=xe(),AP=mr(),xg=0/0,bP=/^[-+]0x[0-9a-f]+$/i,IP=/^0b[01]+$/i,SP=/^0o[0-7]+$/i,wP=parseInt;function TP(e){if(typeof e=="number")return e;if(AP(e))return xg;if(_g(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=_g(t)?t+"":t}if(typeof e!="string")return e===0?e:+e;e=hP(e);var r=IP.test(e);return r||SP.test(e)?wP(e.slice(2),r?2:8):bP.test(e)?xg:+e}Cg.exports=TP});var Ug=u((AW,Pg)=>{"use strict";var EP=Og(),Lg=1/0,RP=17976931348623157e292;function vP(e){if(!e)return e===0?e:0;if(e=EP(e),e===Lg||e===-Lg){var t=e<0?-1:1;return t*RP}return e===e?e:0}Pg.exports=vP});var gi=u((bW,qg)=>{"use strict";var _P=Ug();function xP(e){var t=_P(e),r=t%1;return t===t?r?t-r:t:0}qg.exports=xP});var jn=u((IW,kg)=>{"use strict";var CP=ni(),OP=Em(),LP=fg(),PP=fi(),UP=gg(),qP=ii(),DP=Sg(),NP=pi(),BP=ci(),Dg=gi(),MP="Expected a function",Ng=1,kP=2,yi=8,hi=16,Ai=32,Bg=64,Mg=Math.max;function GP(e,t,r,a,n,o,s,i){var p=t&kP;if(!p&&typeof e!="function")throw new TypeError(MP);var f=a?a.length:0;if(f||(t&=~(Ai|Bg),a=n=void 0),s=s===void 0?s:Mg(Dg(s),0),i=i===void 0?i:Dg(i),f-=n?n.length:0,t&Bg){var m=a,g=n;a=n=void 0}var y=p?void 0:qP(e),I=[e,t,r,a,n,m,g,o,s,i];if(y&&DP(I,y),e=I[0],t=I[1],r=I[2],a=I[3],n=I[4],i=I[9]=I[9]===void 0?p?0:e.length:Mg(I[9]-f,0),!i&&t&(yi|hi)&&(t&=~(yi|hi)),!t||t==Ng)var C=OP(e,t,r);else t==yi||t==hi?C=LP(e,t,i):(t==Ai||t==(Ng|Ai))&&!n.length?C=UP(e,t,r,a):C=PP.apply(void 0,I);var _=y?CP:NP;return BP(_(C,I),e,t)}kg.exports=GP});var Fg=u((SW,Gg)=>{"use strict";var FP=jn(),jP=128;function QP(e,t,r){return t=r?void 0:t,t=e&&t==null?e.length:t,FP(e,jP,void 0,void 0,void 0,void 0,t)}Gg.exports=QP});var Qg=u((wW,jg)=>{"use strict";var WP=zo(),$P=WP(Object.keys,Object);jg.exports=$P});var bi=u((TW,Wg)=>{"use strict";var KP=cn(),VP=Qg(),YP=Object.prototype,HP=YP.hasOwnProperty;function zP(e){if(!KP(e))return VP(e);var t=[];for(var r in Object(e))HP.call(e,r)&&r!="constructor"&&t.push(r);return t}Wg.exports=zP});var gr=u((EW,$g)=>{"use strict";var JP=rs(),XP=bi(),ZP=Zt();function eU(e){return ZP(e)?JP(e):XP(e)}$g.exports=eU});var Ii=u((RW,Kg)=>{"use strict";var tU=or(),rU=gr();function aU(e,t){return e&&tU(t,rU(t),e)}Kg.exports=aU});var Yg=u((vW,Vg)=>{"use strict";var nU=or(),oU=sr();function sU(e,t){return e&&nU(t,oU(t),e)}Vg.exports=sU});var zg=u((_W,Hg)=>{"use strict";function iU(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}Hg.exports=iU});var Si=u((xW,Jg)=>{"use strict";function uU(){return[]}Jg.exports=uU});var Qn=u((CW,Zg)=>{"use strict";var pU=zg(),cU=Si(),lU=Object.prototype,dU=lU.propertyIsEnumerable,Xg=Object.getOwnPropertySymbols,fU=Xg?function(e){return e==null?[]:(e=Object(e),pU(Xg(e),function(t){return dU.call(e,t)}))}:cU;Zg.exports=fU});var ty=u((OW,ey)=>{"use strict";var mU=or(),gU=Qn();function yU(e,t){return mU(e,gU(e),t)}ey.exports=yU});var wi=u((LW,ry)=>{"use strict";var hU=Za(),AU=pn(),bU=Qn(),IU=Si(),SU=Object.getOwnPropertySymbols,wU=SU?function(e){for(var t=[];e;)hU(t,bU(e)),e=AU(e);return t}:IU;ry.exports=wU});var ny=u((PW,ay)=>{"use strict";var TU=or(),EU=wi();function RU(e,t){return TU(e,EU(e),t)}ay.exports=RU});var Ti=u((UW,oy)=>{"use strict";var vU=Za(),_U=se();function xU(e,t,r){var a=t(e);return _U(e)?a:vU(a,r(e))}oy.exports=xU});var Ei=u((qW,sy)=>{"use strict";var CU=Ti(),OU=Qn(),LU=gr();function PU(e){return CU(e,LU,OU)}sy.exports=PU});var uy=u((DW,iy)=>{"use strict";var UU=Ti(),qU=wi(),DU=sr();function NU(e){return UU(e,DU,qU)}iy.exports=NU});var cy=u((NW,py)=>{"use strict";var BU=yt(),MU=pe(),kU=BU(MU,"DataView");py.exports=kU});var dy=u((BW,ly)=>{"use strict";var GU=yt(),FU=pe(),jU=GU(FU,"Promise");ly.exports=jU});var hr=u((MW,by)=>{"use strict";var Ri=cy(),vi=rn(),_i=dy(),xi=Fo(),Ci=ri(),Ay=gt(),yr=qo(),fy="[object Map]",QU="[object Object]",my="[object Promise]",gy="[object Set]",yy="[object WeakMap]",hy="[object DataView]",WU=yr(Ri),$U=yr(vi),KU=yr(_i),VU=yr(xi),YU=yr(Ci),Nt=Ay;(Ri&&Nt(new Ri(new ArrayBuffer(1)))!=hy||vi&&Nt(new vi)!=fy||_i&&Nt(_i.resolve())!=my||xi&&Nt(new xi)!=gy||Ci&&Nt(new Ci)!=yy)&&(Nt=function(e){var t=Ay(e),r=t==QU?e.constructor:void 0,a=r?yr(r):"";if(a)switch(a){case WU:return hy;case $U:return fy;case KU:return my;case VU:return gy;case YU:return yy}return t});by.exports=Nt});var Sy=u((kW,Iy)=>{"use strict";var HU=Object.prototype,zU=HU.hasOwnProperty;function JU(e){var t=e.length,r=new e.constructor(t);return t&&typeof e[0]=="string"&&zU.call(e,"index")&&(r.index=e.index,r.input=e.input),r}Iy.exports=JU});var Ty=u((GW,wy)=>{"use strict";var XU=un();function ZU(e,t){var r=t?XU(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.byteLength)}wy.exports=ZU});var Ry=u((FW,Ey)=>{"use strict";var eq=/\w*$/;function tq(e){var t=new e.constructor(e.source,eq.exec(e));return t.lastIndex=e.lastIndex,t}Ey.exports=tq});var Oy=u((jW,Cy)=>{"use strict";var vy=xt(),_y=vy?vy.prototype:void 0,xy=_y?_y.valueOf:void 0;function rq(e){return xy?Object(xy.call(e)):{}}Cy.exports=rq});var Py=u((QW,Ly)=>{"use strict";var aq=un(),nq=Ty(),oq=Ry(),sq=Oy(),iq=Ho(),uq="[object Boolean]",pq="[object Date]",cq="[object Map]",lq="[object Number]",dq="[object RegExp]",fq="[object Set]",mq="[object String]",gq="[object Symbol]",yq="[object ArrayBuffer]",hq="[object DataView]",Aq="[object Float32Array]",bq="[object Float64Array]",Iq="[object Int8Array]",Sq="[object Int16Array]",wq="[object Int32Array]",Tq="[object Uint8Array]",Eq="[object Uint8ClampedArray]",Rq="[object Uint16Array]",vq="[object Uint32Array]";function _q(e,t,r){var a=e.constructor;switch(t){case yq:return aq(e);case uq:case pq:return new a(+e);case hq:return nq(e,r);case Aq:case bq:case Iq:case Sq:case wq:case Tq:case Eq:case Rq:case vq:return iq(e,r);case cq:return new a;case lq:case mq:return new a(e);case dq:return oq(e);case fq:return new a;case gq:return sq(e)}}Ly.exports=_q});var qy=u((WW,Uy)=>{"use strict";var xq=hr(),Cq=be(),Oq="[object Map]";function Lq(e){return Cq(e)&&xq(e)==Oq}Uy.exports=Lq});var My=u(($W,By)=>{"use strict";var Pq=qy(),Uq=ln(),Dy=dn(),Ny=Dy&&Dy.isMap,qq=Ny?Uq(Ny):Pq;By.exports=qq});var Gy=u((KW,ky)=>{"use strict";var Dq=hr(),Nq=be(),Bq="[object Set]";function Mq(e){return Nq(e)&&Dq(e)==Bq}ky.exports=Mq});var Wy=u((VW,Qy)=>{"use strict";var kq=Gy(),Gq=ln(),Fy=dn(),jy=Fy&&Fy.isSet,Fq=jy?Gq(jy):kq;Qy.exports=Fq});var Oi=u((YW,Yy)=>{"use strict";var jq=na(),Qq=Gn(),Wq=ts(),$q=Ii(),Kq=Yg(),Vq=Vo(),Yq=rr(),Hq=ty(),zq=ny(),Jq=Ei(),Xq=uy(),Zq=hr(),eD=Sy(),tD=Py(),rD=Jo(),aD=se(),nD=pa(),oD=My(),sD=xe(),iD=Wy(),uD=gr(),pD=sr(),cD=1,lD=2,dD=4,$y="[object Arguments]",fD="[object Array]",mD="[object Boolean]",gD="[object Date]",yD="[object Error]",Ky="[object Function]",hD="[object GeneratorFunction]",AD="[object Map]",bD="[object Number]",Vy="[object Object]",ID="[object RegExp]",SD="[object Set]",wD="[object String]",TD="[object Symbol]",ED="[object WeakMap]",RD="[object ArrayBuffer]",vD="[object DataView]",_D="[object Float32Array]",xD="[object Float64Array]",CD="[object Int8Array]",OD="[object Int16Array]",LD="[object Int32Array]",PD="[object Uint8Array]",UD="[object Uint8ClampedArray]",qD="[object Uint16Array]",DD="[object Uint32Array]",N={};N[$y]=N[fD]=N[RD]=N[vD]=N[mD]=N[gD]=N[_D]=N[xD]=N[CD]=N[OD]=N[LD]=N[AD]=N[bD]=N[Vy]=N[ID]=N[SD]=N[wD]=N[TD]=N[PD]=N[UD]=N[qD]=N[DD]=!0;N[yD]=N[Ky]=N[ED]=!1;function Wn(e,t,r,a,n,o){var s,i=t&cD,p=t&lD,f=t&dD;if(r&&(s=n?r(e,a,n,o):r(e)),s!==void 0)return s;if(!sD(e))return e;var m=aD(e);if(m){if(s=eD(e),!i)return Yq(e,s)}else{var g=Zq(e),y=g==Ky||g==hD;if(nD(e))return Vq(e,i);if(g==Vy||g==$y||y&&!n){if(s=p||y?{}:rD(e),!i)return p?zq(e,Kq(s,e)):Hq(e,$q(s,e))}else{if(!N[g])return n?e:{};s=tD(e,g,i)}}o||(o=new jq);var I=o.get(e);if(I)return I;o.set(e,s),iD(e)?e.forEach(function(v){s.add(Wn(v,t,r,v,e,o))}):oD(e)&&e.forEach(function(v,R){s.set(R,Wn(v,t,r,R,e,o))});var C=f?p?Xq:Jq:p?pD:uD,_=m?void 0:C(e);return Qq(_||e,function(v,R){_&&(R=v,v=e[R]),Wq(s,R,Wn(v,t,r,R,e,o))}),s}Yy.exports=Wn});var zy=u((HW,Hy)=>{"use strict";var ND=Oi(),BD=4;function MD(e){return ND(e,BD)}Hy.exports=MD});var Xy=u((zW,Jy)=>{"use strict";var kD=jn(),GD=8;function Li(e,t,r){t=r?void 0:t;var a=kD(e,GD,void 0,void 0,void 0,void 0,void 0,t);return a.placeholder=Li.placeholder,a}Li.placeholder={};Jy.exports=Li});var eh=u((JW,Zy)=>{"use strict";var FD=gt(),jD=be(),QD=Xo(),WD="[object DOMException]",$D="[object Error]";function KD(e){if(!jD(e))return!1;var t=FD(e);return t==$D||t==WD||typeof e.message=="string"&&typeof e.name=="string"&&!QD(e)}Zy.exports=KD});var rh=u((XW,th)=>{"use strict";var VD=hr(),YD=be(),HD="[object WeakMap]";function zD(e){return YD(e)&&VD(e)==HD}th.exports=zD});var nh=u((ZW,ah)=>{"use strict";function JD(e,t){for(var r=-1,a=e==null?0:e.length;++r<a;)if(t(e[r],r,e))return!0;return!1}ah.exports=JD});var Pi=u((e$,oh)=>{"use strict";var XD=Mo(),ZD=nh(),eN=Go(),tN=1,rN=2;function aN(e,t,r,a,n,o){var s=r&tN,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 g=-1,y=!0,I=r&rN?new XD:void 0;for(o.set(e,t),o.set(t,e);++g<i;){var C=e[g],_=t[g];if(a)var v=s?a(_,C,g,t,e,o):a(C,_,g,e,t,o);if(v!==void 0){if(v)continue;y=!1;break}if(I){if(!ZD(t,function(R,U){if(!eN(I,U)&&(C===R||n(C,R,r,a,o)))return I.push(U)})){y=!1;break}}else if(!(C===_||n(C,_,r,a,o))){y=!1;break}}return o.delete(e),o.delete(t),y}oh.exports=aN});var ih=u((t$,sh)=>{"use strict";function nN(e){var t=-1,r=Array(e.size);return e.forEach(function(a,n){r[++t]=[n,a]}),r}sh.exports=nN});var dh=u((r$,lh)=>{"use strict";var uh=xt(),ph=Yo(),oN=zt(),sN=Pi(),iN=ih(),uN=on(),pN=1,cN=2,lN="[object Boolean]",dN="[object Date]",fN="[object Error]",mN="[object Map]",gN="[object Number]",yN="[object RegExp]",hN="[object Set]",AN="[object String]",bN="[object Symbol]",IN="[object ArrayBuffer]",SN="[object DataView]",ch=uh?uh.prototype:void 0,Ui=ch?ch.valueOf:void 0;function wN(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 IN:return!(e.byteLength!=t.byteLength||!o(new ph(e),new ph(t)));case lN:case dN:case gN:return oN(+e,+t);case fN:return e.name==t.name&&e.message==t.message;case yN:case AN:return e==t+"";case mN:var i=iN;case hN:var p=a&pN;if(i||(i=uN),e.size!=t.size&&!p)return!1;var f=s.get(e);if(f)return f==t;a|=cN,s.set(e,t);var m=sN(i(e),i(t),a,n,o,s);return s.delete(e),m;case bN:if(Ui)return Ui.call(e)==Ui.call(t)}return!1}lh.exports=wN});var gh=u((a$,mh)=>{"use strict";var fh=Ei(),TN=1,EN=Object.prototype,RN=EN.hasOwnProperty;function vN(e,t,r,a,n,o){var s=r&TN,i=fh(e),p=i.length,f=fh(t),m=f.length;if(p!=m&&!s)return!1;for(var g=p;g--;){var y=i[g];if(!(s?y in t:RN.call(t,y)))return!1}var I=o.get(e),C=o.get(t);if(I&&C)return I==t&&C==e;var _=!0;o.set(e,t),o.set(t,e);for(var v=s;++g<p;){y=i[g];var R=e[y],U=t[y];if(a)var qe=s?a(U,R,y,t,e,o):a(R,U,y,e,t,o);if(!(qe===void 0?R===U||n(R,U,r,a,o):qe)){_=!1;break}v||(v=y=="constructor")}if(_&&!v){var Ee=e.constructor,ct=t.constructor;Ee!=ct&&"constructor"in e&&"constructor"in t&&!(typeof Ee=="function"&&Ee instanceof Ee&&typeof ct=="function"&&ct instanceof ct)&&(_=!1)}return o.delete(e),o.delete(t),_}mh.exports=vN});var Th=u((n$,wh)=>{"use strict";var qi=na(),_N=Pi(),xN=dh(),CN=gh(),yh=hr(),hh=se(),Ah=pa(),ON=fn(),LN=1,bh="[object Arguments]",Ih="[object Array]",$n="[object Object]",PN=Object.prototype,Sh=PN.hasOwnProperty;function UN(e,t,r,a,n,o){var s=hh(e),i=hh(t),p=s?Ih:yh(e),f=i?Ih:yh(t);p=p==bh?$n:p,f=f==bh?$n:f;var m=p==$n,g=f==$n,y=p==f;if(y&&Ah(e)){if(!Ah(t))return!1;s=!0,m=!1}if(y&&!m)return o||(o=new qi),s||ON(e)?_N(e,t,r,a,n,o):xN(e,t,p,r,a,n,o);if(!(r&LN)){var I=m&&Sh.call(e,"__wrapped__"),C=g&&Sh.call(t,"__wrapped__");if(I||C){var _=I?e.value():e,v=C?t.value():t;return o||(o=new qi),n(_,v,r,a,o)}}return y?(o||(o=new qi),CN(e,t,r,a,n,o)):!1}wh.exports=UN});var Di=u((o$,vh)=>{"use strict";var qN=Th(),Eh=be();function Rh(e,t,r,a,n){return e===t?!0:e==null||t==null||!Eh(e)&&!Eh(t)?e!==e&&t!==t:qN(e,t,r,a,Rh,n)}vh.exports=Rh});var xh=u((s$,_h)=>{"use strict";var DN=na(),NN=Di(),BN=1,MN=2;function kN(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 g=new DN;if(a)var y=a(f,m,p,e,t,g);if(!(y===void 0?NN(m,f,BN|MN,a,g):y))return!1}}return!0}_h.exports=kN});var Ni=u((i$,Ch)=>{"use strict";var GN=xe();function FN(e){return e===e&&!GN(e)}Ch.exports=FN});var Lh=u((u$,Oh)=>{"use strict";var jN=Ni(),QN=gr();function WN(e){for(var t=QN(e),r=t.length;r--;){var a=t[r],n=e[a];t[r]=[a,n,jN(n)]}return t}Oh.exports=WN});var Bi=u((p$,Ph)=>{"use strict";function $N(e,t){return function(r){return r==null?!1:r[e]===t&&(t!==void 0||e in Object(r))}}Ph.exports=$N});var qh=u((c$,Uh)=>{"use strict";var KN=xh(),VN=Lh(),YN=Bi();function HN(e){var t=VN(e);return t.length==1&&t[0][2]?YN(t[0][0],t[0][1]):function(r){return r===e||KN(r,e,t)}}Uh.exports=HN});var Kn=u((l$,Dh)=>{"use strict";var zN=se(),JN=mr(),XN=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,ZN=/^\w*$/;function eB(e,t){if(zN(e))return!1;var r=typeof e;return r=="number"||r=="symbol"||r=="boolean"||e==null||JN(e)?!0:ZN.test(e)||!XN.test(e)||t!=null&&e in Object(t)}Dh.exports=eB});var Mh=u((d$,Bh)=>{"use strict";var Nh=an(),tB="Expected a function";function Mi(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(tB);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(Mi.Cache||Nh),r}Mi.Cache=Nh;Bh.exports=Mi});var Gh=u((f$,kh)=>{"use strict";var rB=Mh(),aB=500;function nB(e){var t=rB(e,function(a){return r.size===aB&&r.clear(),a}),r=t.cache;return t}kh.exports=nB});var ki=u((m$,Fh)=>{"use strict";var oB=Gh(),sB=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,iB=/\\(\\)?/g,uB=oB(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(sB,function(r,a,n,o){t.push(n?o.replace(iB,"$1"):a||r)}),t});Fh.exports=uB});var Gi=u((g$,jh)=>{"use strict";function pB(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}jh.exports=pB});var Yh=u((y$,Vh)=>{"use strict";var Qh=xt(),cB=Gi(),lB=se(),dB=mr(),fB=1/0,Wh=Qh?Qh.prototype:void 0,$h=Wh?Wh.toString:void 0;function Kh(e){if(typeof e=="string")return e;if(lB(e))return cB(e,Kh)+"";if(dB(e))return $h?$h.call(e):"";var t=e+"";return t=="0"&&1/e==-fB?"-0":t}Vh.exports=Kh});var Fi=u((h$,Hh)=>{"use strict";var mB=Yh();function gB(e){return e==null?"":mB(e)}Hh.exports=gB});var ji=u((A$,zh)=>{"use strict";var yB=se(),hB=Kn(),AB=ki(),bB=Fi();function IB(e,t){return yB(e)?e:hB(e,t)?[e]:AB(bB(e))}zh.exports=IB});var Ar=u((b$,Jh)=>{"use strict";var SB=mr(),wB=1/0;function TB(e){if(typeof e=="string"||SB(e))return e;var t=e+"";return t=="0"&&1/e==-wB?"-0":t}Jh.exports=TB});var Qi=u((I$,Xh)=>{"use strict";var EB=ji(),RB=Ar();function vB(e,t){t=EB(t,e);for(var r=0,a=t.length;e!=null&&r<a;)e=e[RB(t[r++])];return r&&r==a?e:void 0}Xh.exports=vB});var eA=u((S$,Zh)=>{"use strict";var _B=Qi();function xB(e,t,r){var a=e==null?void 0:_B(e,t);return a===void 0?r:a}Zh.exports=xB});var rA=u((w$,tA)=>{"use strict";function CB(e,t){return e!=null&&t in Object(e)}tA.exports=CB});var nA=u((T$,aA)=>{"use strict";var OB=ji(),LB=Jr(),PB=se(),UB=da(),qB=sn(),DB=Ar();function NB(e,t,r){t=OB(t,e);for(var a=-1,n=t.length,o=!1;++a<n;){var s=DB(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&&qB(n)&&UB(s,n)&&(PB(e)||LB(e)))}aA.exports=NB});var sA=u((E$,oA)=>{"use strict";var BB=rA(),MB=nA();function kB(e,t){return e!=null&&MB(e,t,BB)}oA.exports=kB});var uA=u((R$,iA)=>{"use strict";var GB=Di(),FB=eA(),jB=sA(),QB=Kn(),WB=Ni(),$B=Bi(),KB=Ar(),VB=1,YB=2;function HB(e,t){return QB(e)&&WB(t)?$B(KB(e),t):function(r){var a=FB(r,e);return a===void 0&&a===t?jB(r,e):GB(t,a,VB|YB)}}iA.exports=HB});var cA=u((v$,pA)=>{"use strict";function zB(e){return function(t){return t?.[e]}}pA.exports=zB});var dA=u((_$,lA)=>{"use strict";var JB=Qi();function XB(e){return function(t){return JB(t,e)}}lA.exports=XB});var mA=u((x$,fA)=>{"use strict";var ZB=cA(),eM=dA(),tM=Kn(),rM=Ar();function aM(e){return tM(e)?ZB(rM(e)):eM(e)}fA.exports=aM});var Wi=u((C$,gA)=>{"use strict";var nM=qh(),oM=uA(),sM=Xr(),iM=se(),uM=mA();function pM(e){return typeof e=="function"?e:e==null?sM:typeof e=="object"?iM(e)?oM(e[0],e[1]):nM(e):uM(e)}gA.exports=pM});var hA=u((O$,yA)=>{"use strict";var cM=Oi(),lM=Wi(),dM=1;function fM(e){return lM(typeof e=="function"?e:cM(e,dM))}yA.exports=fM});var bA=u((L$,AA)=>{"use strict";var mM=Lo();function gM(e){var t=e==null?0:e.length;return t?mM(e,1):[]}AA.exports=gM});var SA=u((P$,IA)=>{"use strict";var yM=bA(),hM=Po(),AM=tn();function bM(e){return AM(hM(e,void 0,yM),e+"")}IA.exports=bM});var TA=u((U$,wA)=>{"use strict";var IM=jn(),SM=SA(),wM=256,TM=SM(function(e,t){return IM(e,wM,void 0,void 0,void 0,t)});wA.exports=TM});var RA=u((q$,EA)=>{"use strict";var EM=Gi(),RM=rr(),vM=se(),_M=mr(),xM=ki(),CM=Ar(),OM=Fi();function LM(e){return vM(e)?EM(e,CM):_M(e)?[e]:RM(xM(OM(e)))}EA.exports=LM});var _A=u((D$,vA)=>{"use strict";vA.exports={ary:Fg(),assign:Ii(),clone:zy(),curry:Xy(),forEach:Gn(),isArray:se(),isError:eh(),isFunction:Zr(),isWeakMap:rh(),iteratee:hA(),keys:bi(),rearg:TA(),toInteger:gi(),toPath:RA()}});var CA=u((N$,xA)=>{"use strict";var PM=ym(),UM=_A();function qM(e,t,r){return PM(UM,e,t,r)}xA.exports=qM});var $i=u((B$,LA)=>{"use strict";var DM=CA(),OA=DM("merge",as());OA.placeholder=Xs();LA.exports=OA});var qb=u((PK,Ub)=>{"use strict";function tk(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}Ub.exports=tk});var Nb=u((UK,Db)=>{"use strict";var rk=Ko(),ak=gr();function nk(e,t){return e&&rk(e,t,ak)}Db.exports=nk});var Mb=u((qK,Bb)=>{"use strict";var ok=Zt();function sk(e,t){return function(r,a){if(r==null)return r;if(!ok(r))return e(r,a);for(var n=r.length,o=t?n:-1,s=Object(r);(t?o--:++o<n)&&a(s[o],o,s)!==!1;);return r}}Bb.exports=sk});var Gb=u((DK,kb)=>{"use strict";var ik=Nb(),uk=Mb(),pk=uk(ik);kb.exports=pk});var jb=u((NK,Fb)=>{"use strict";var ck=Gb();function lk(e,t,r,a){return ck(e,function(n,o,s){t(a,n,r(n),s)}),a}Fb.exports=lk});var Wb=u((BK,Qb)=>{"use strict";var dk=qb(),fk=jb(),mk=Wi(),gk=se();function yk(e,t){return function(r,a){var n=gk(r)?dk:fk,o=t?t():{};return n(r,e,mk(a,2),o)}}Qb.exports=yk});var Kb=u((MK,$b)=>{"use strict";var hk=oa(),Ak=Wb(),bk=Object.prototype,Ik=bk.hasOwnProperty,Sk=Ak(function(e,t,r){Ik.call(e,r)?e[r].push(t):hk(e,r,[t])});$b.exports=Sk});var $k={};w($k,{Method:()=>uo,ai:()=>Uu,api:()=>iu,auditLogs:()=>It,automations:()=>Cn,backups:()=>Se,branding:()=>bn,constants:()=>$r,environmentVariables:()=>Je,features:()=>Me,groups:()=>Q,init:()=>cm,licensing:()=>Ve,logger:()=>Bt,mappers:()=>Y,middleware:()=>Xi,plugins:()=>On,publicApi:()=>Un,quotas:()=>ze,scimGroups:()=>br,scimUsers:()=>ye,sdk:()=>Vi,users:()=>nt,utils:()=>Yt});module.exports=kI($k);var uo=(o=>(o.POST="POST",o.GET="GET",o.PATCH="PATCH",o.DELETE="DELETE",o.PUT="PUT",o))(uo||{});var Vi={};w(Vi,{ai:()=>Is,auditLogs:()=>It,automations:()=>Cn,backups:()=>Se,branding:()=>bn,environmentVariables:()=>Je,features:()=>Me,groups:()=>Q,init:()=>cm,licensing:()=>Ve,logger:()=>Bt,plugins:()=>On,publicApi:()=>Un,quotas:()=>ze,scimGroups:()=>br,scimUsers:()=>ye,users:()=>nt,utils:()=>Yt});var bn={};w(bn,{getBrandingConfig:()=>Lx});var Me={};w(Me,{checkBackups:()=>ce,checkFeature:()=>hn,checkFeatures:()=>ms,checkSCIM:()=>As,isAppBuildersEnabled:()=>Pt,isAuditLogsEnabled:()=>An,isBackupsEnabled:()=>gs,isBrandingEnabled:()=>ys,isEnforceableSSO:()=>Tf,isExpandedPublicApiEnabled:()=>rt,isPWAEnabled:()=>Ex,isPkceOidcEnabled:()=>vx,isRecaptchaEnabled:()=>Rx,isSSOEnforced:()=>_x,isSyncAutomationsEnabled:()=>wx,isTriggerAutomationRunEnabled:()=>Tx,isUserGroupsEnabled:()=>hs,isViewPermissionEnabled:()=>xx,isViewReadonlyColumnsEnabled:()=>Cx});var te=require("@budibase/types"),tt=require("@budibase/backend-core");var Ve={};w(Ve,{cache:()=>Ne,client:()=>mt,features:()=>Ja,getFreeLicense:()=>ls,getLicense:()=>ps,getLicenseFromKey:()=>cs,keys:()=>fs,offline:()=>mn,quotas:()=>Xa});var Ne={};w(Ne,{getCachedLicense:()=>Sf,invalidate:()=>wf,refresh:()=>Ct});var Ba=require("@budibase/backend-core"),Tr,GI=async()=>{Tr=await Ba.RedisClient.init(Ba.redis.utils.Databases.LICENSES)},FI=async()=>{Tr&&await Tr.finish()};process.on("exit",async()=>{await FI()});var po=async()=>(Tr||await GI(),Tr);var mt={};w(mt,{activateLicenseKey:()=>vo,getLicense:()=>Kt,getLicenseFromKey:()=>Ro,triggerQuota:()=>vS});var ju=P(require("node-fetch"));var Qu=require("@budibase/backend-core"),co=require("dd-trace"),Wu=require("dd-trace/ext/formats"),lo=class{constructor(t){this.apiCall=t=>async(r="",a={})=>await co.tracer.trace(`api.${t}`,async n=>{n.setTag("url",r);let o={...a.headers};o["Content-Type"]||(o["Content-Type"]="application/json",o.Accept="application/json");let s=o["Content-Type"]==="application/json";Qu.logging.correlation.setHeader(o),co.tracer.inject(n,Wu.HTTP_HEADERS,o);let i={method:t,body:s?JSON.stringify(a.body):a.body,headers:o,credentials:"include"};return(0,ju.default)(`${this.host}${r}`,i)});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}},fo=lo;var Ya=require("@budibase/types"),L=require("@budibase/backend-core");var We={};w(We,{bustCache:()=>yo,getCurrentUsageValues:()=>Xu,getQuotaUsage:()=>Et,setAllUsage:()=>Ao,setAppUsageValue:()=>ho,setUsage:()=>Hu,setUsagePerApp:()=>zu,utils:()=>_r});var ue=require("@budibase/types"),fe=require("@budibase/backend-core");var _r={};w(_r,{generateBaseQuotaUsage:()=>ka,generateNewMonthlyQuotas:()=>vr,generateNewQuotaUsage:()=>go,getBreakdownName:()=>Fa,getCurrentMonthString:()=>lt,getQuotaDocId:()=>Rr,setCurrentMonth:()=>Ga,setQuotaReset:()=>mo});var H=require("@budibase/types"),Er=require("@budibase/backend-core"),Ma=require("@budibase/shared-core"),Rr=()=>Er.context.isSelfHostUsingCloud()?`quota_usage_${Er.context.getTenantId()}`:Er.db.StaticDatabases.GLOBAL.docs.usageQuota,$u=()=>{let e=new Date;return new Date(e.getFullYear(),e.getMonth()+1,1).toISOString()},mo=e=>{e.quotaReset=$u()},lt=()=>{let e=new Date,t=e.getMonth()+1,r=e.getFullYear();return`${t}-${r}`},ka=()=>({usageQuota:{[H.StaticQuotaName.APPS]:0,[H.StaticQuotaName.ROWS]:0,[H.StaticQuotaName.PLUGINS]:0,[H.StaticQuotaName.USERS]:0,[H.StaticQuotaName.CREATORS]:0,[H.StaticQuotaName.USER_GROUPS]:0,[H.StaticQuotaName.AI_CUSTOM_CONFIGS]:0,triggers:{}},monthly:{[lt()]:vr()}}),go=()=>{let e={_id:Rr(),quotaReset:$u(),...ka(),apps:{}};return Ga(e),e},vr=()=>({[H.MonthlyQuotaName.QUERIES]:0,[H.MonthlyQuotaName.AUTOMATIONS]:0,[H.MonthlyQuotaName.BUDIBASE_AI_CREDITS]:0,[H.MonthlyQuotaName.ACTIONS]:0,triggers:{}}),Ga=e=>{let t=lt();e.monthly||(e.monthly={}),e.monthly[t]||(e.monthly[t]=vr()),e.monthly.current=e.monthly[t]},Fa=(e,t)=>{if(!(!t||!e))switch(e){case H.MonthlyQuotaName.AUTOMATIONS:return H.BreakdownQuotaName.AUTOMATIONS;case H.MonthlyQuotaName.QUERIES:return(0,Ma.isTableIdOrExternalTableId)(t)?H.BreakdownQuotaName.ROW_QUERIES:(0,Ma.isDatasourceOrDatasourcePlusId)(t)?H.BreakdownQuotaName.DATASOURCE_QUERIES:void 0}};var Ku=fe.Duration.fromSeconds(60).toMs(),{Writethrough:Vu}=fe.cache.writethrough;function QI(e){return delete e.usageLimits,delete e.usageQuota.automationRuns,delete e.usageQuota.emails,delete e.usageQuota.storage,delete e.usageQuota.views,delete e.usageQuota.publishedApps,delete e.usageQuota.developers,e}var ja=()=>fe.tenancy.isSelfHostUsingCloud()?new Vu(fe.tenancy.getSelfHostCloudDB(),Ku):new Vu(fe.tenancy.getGlobalDB(),Ku);async function yo(e=0){let r=ja(),a=Rr(),n=await r.tryGet(a);n&&n._rev&&await r.remove(a,n._rev).catch(async o=>{if(e<1)return await yo(e+1);throw o})}var Et=async()=>{let e=ja(),t=await e.tryGet(Rr());if(!t){t=go();let{rev:r}=await e.put(t);t._rev=r}return Ga(t),mo(t),QI(t)},Hu=async(e,t,r)=>Ao({name:t,type:r,values:{total:e}}),zu=async(e,t,r)=>{let a=ja(),n=await Et(),o=Object.values(e).reduce((i,p)=>i+p,0);for(let[i,p]of Object.entries(e))n=Ju(n,t,r,{total:o,app:p},{appId:i});let s=await a.put(n);return n._rev=s.rev,n},WI=(e,t,r,a)=>{let n=Fa(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},ho=(e,t,r,a={},n)=>{let o;try{o=fe.db.getProdAppID(a?.appId||fe.context.getAppId())}catch{}if(!o||!n.app||!ue.APP_QUOTA_NAMES.includes(t))return e;e.apps?.[o]||(e.apps={...e.apps,[o]:ka()});let s=e.apps[o];switch(r){case ue.QuotaUsageType.STATIC:s.usageQuota[t]=n.app;break;case ue.QuotaUsageType.MONTHLY:{let i=lt(),p=t,f=s.monthly[i];f||(s.monthly[i]=vr(),f=s.monthly[i]),f[p]=n.app,ue.BREAKDOWN_QUOTA_NAMES.includes(p)&&a?.id&&(f=WI(f,p,a.id,n));break}}return e},Yu=(e,t,r,a)=>{if(!ue.APP_QUOTA_NAMES.includes(r))return{};let n;try{n=fe.db.getProdAppID(fe.context.getAppId())}catch{}if(!n||!e.apps||!e.apps[n])return{app:0};let o=e.apps[n];switch(t){case ue.QuotaUsageType.STATIC:if(o.usageQuota?.[r])return{app:o.usageQuota[r]};break;case ue.QuotaUsageType.MONTHLY:{let s=lt(),i=r;if(!o.monthly?.[s]?.[i])break;let p=o.monthly[s],f=p[i],m,g=Fa(i,a);return g&&a&&p.breakdown?.[g]&&(m=p.breakdown[g]?.values[a]),{app:f,breakdown:m||0}}}return{app:0}},$I=(e,t,r)=>{t.usageQuota.triggers||(t.usageQuota.triggers={}),r&&(t.usageQuota.triggers[e]=r)},KI=(e,t,r,a)=>{r.monthly[t].triggers||(r.monthly[t].triggers={}),a&&(r.monthly[t].triggers[e]=a)},Ju=(e,t,r,a,n={})=>{if(r===ue.QuotaUsageType.STATIC)t=t,e.usageQuota[t]=a.total,$I(t,e,a.triggers);else if(r===ue.QuotaUsageType.MONTHLY){t=t;let o=lt();e.monthly[o][t]=a.total,KI(t,o,e,a.triggers)}else throw new Error(`Invalid usage type: ${r}`);return ho(e,t,r,n,a)},Ao=async e=>{let t=Array.isArray(e)?e:[e],r=ja(),a=await Et();for(let o of t)a=Ju(a,o.name,o.type,o.values,o.opts);let n=await r.put(a,0);return a._rev=n.rev,a},Xu=async(e,t,r)=>{let a=await Et(),n=0,o={};switch(e){case ue.QuotaUsageType.STATIC:if(a.usageQuota[t]){let s=t;n=a.usageQuota[s],o=Yu(a,e,t,r)}break;case ue.QuotaUsageType.MONTHLY:{let s=lt(),i=t;a.monthly[s][i]&&(n=a.monthly[s][i],o=Yu(a,e,t,r));break}default:throw new Error(`Invalid usage type: ${e}`)}return ue.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 ve={};w(ve,{destroy:()=>HI,get:()=>bo,save:()=>YI});var dt=require("@budibase/backend-core"),VI=()=>({_id:dt.StaticDatabases.GLOBAL.docs.licenseInfo}),YI=async e=>{let t=await bo();t={...t,...e};let a=await dt.tenancy.getGlobalDB().put(t);return t._rev=a.rev,t},bo=async()=>{let e=dt.tenancy.getGlobalDB();try{return await e.get(dt.StaticDatabases.GLOBAL.docs.licenseInfo)}catch(t){if(t.status===404)return VI();throw t}},HI=async()=>{let e=dt.tenancy.getGlobalDB(),t=await bo();t&&t._rev&&await e.remove(dt.StaticDatabases.GLOBAL.docs.licenseInfo,t._rev)};var M={};w(M,{bulkSave:()=>iS,destroy:()=>uS,fetch:()=>aS,generateUserGroupID:()=>tS,get:()=>nS,getBulk:()=>oS,getByName:()=>Io,getGroupUsers:()=>Wa,getGroupUsersParams:()=>ap,getUserGroupsParams:()=>rp,save:()=>sS});var q=require("@budibase/backend-core");var De=require("@budibase/types"),Qt=require("@budibase/backend-core");async function Zu(){let e=Qt.sql.designDoc.base("type");e.sql.tables={[De.AUDIT_LOG_TYPE]:{fields:{appId:De.SQLiteType.TEXT,event:De.SQLiteType.TEXT,userId:De.SQLiteType.TEXT,timestamp:De.SQLiteType.TEXT,metadata:De.SQLiteType.TEXT,name:De.SQLiteType.TEXT,type:De.SQLiteType.TEXT,fallback:De.SQLiteType.TEXT}}};let t=Qt.context.getAuditLogsDB(),r;try{r=await t.get(Qt.SQLITE_DESIGN_DOC_ID),r={...r,...e}}catch(a){if(a.status===404)r=e;else throw a}await t.put(r)}var Qa=require("@budibase/backend-core"),{ViewName:zI,SEPARATOR:JI,DocumentType:XI,createView:ZI}=Qa.db,eS=XI.USER+JI;async function ep(){let e=Qa.tenancy.getGlobalDB(),t=`function(doc) {
3
+ `)}Hm.exports=HO});var Gn=u((aQ,Jm)=>{"use strict";function zO(e,t){for(var r=-1,a=e==null?0:e.length;++r<a&&t(e[r],r,e)!==!1;);return e}Jm.exports=zO});var Zm=u((nQ,Xm)=>{"use strict";var JO=Gn(),XO=ko(),ZO=1,eL=2,tL=8,rL=16,aL=32,nL=64,oL=128,sL=256,iL=512,uL=[["ary",oL],["bind",ZO],["bindKey",eL],["curry",tL],["curryRight",rL],["flip",iL],["partial",aL],["partialRight",nL],["rearg",sL]];function cL(e,t){return JO(uL,function(r){var a="_."+r[0];t&r[1]&&!XO(e,a)&&e.push(a)}),e.sort()}Xm.exports=cL});var pi=u((oQ,eg)=>{"use strict";var pL=Ym(),lL=zm(),dL=tn(),fL=Zm();function mL(e,t,r){var a=t+"";return dL(e,lL(a,fL(pL(a),r)))}eg.exports=mL});var li=u((sQ,ag)=>{"use strict";var gL=$m(),yL=ci(),hL=pi(),AL=1,bL=2,IL=4,SL=8,tg=32,rg=64;function wL(e,t,r,a,n,o,s,i,c,f){var m=t&SL,g=m?s:void 0,y=m?void 0:s,I=m?o:void 0,C=m?void 0:o;t|=m?tg:rg,t&=~(m?rg:tg),t&IL||(t&=~(AL|bL));var _=[e,t,n,I,g,C,y,i,c,f],v=r.apply(void 0,_);return gL(e)&&yL(v,_),v.placeholder=a,hL(v,e,t)}ag.exports=wL});var di=u((iQ,ng)=>{"use strict";function TL(e){var t=e;return t.placeholder}ng.exports=TL});var sg=u((uQ,og)=>{"use strict";var EL=rr(),RL=da(),vL=Math.min;function _L(e,t){for(var r=e.length,a=vL(t.length,r),n=EL(e);a--;){var o=t[a];e[a]=RL(o,r)?n[o]:void 0}return e}og.exports=_L});var Fn=u((cQ,ug)=>{"use strict";var ig="__lodash_placeholder__";function xL(e,t){for(var r=-1,a=e.length,n=0,o=[];++r<a;){var s=e[r];(s===t||s===ig)&&(e[r]=ig,o[n++]=r)}return o}ug.exports=xL});var fi=u((pQ,lg)=>{"use strict";var CL=oi(),OL=si(),LL=xm(),cg=Ta(),PL=li(),UL=di(),qL=sg(),DL=Fn(),NL=ce(),BL=1,ML=2,kL=8,GL=16,FL=128,WL=512;function pg(e,t,r,a,n,o,s,i,c,f){var m=t&FL,g=t&BL,y=t&ML,I=t&(kL|GL),C=t&WL,_=y?void 0:cg(e);function v(){for(var R=arguments.length,U=Array(R),qe=R;qe--;)U[qe]=arguments[qe];if(I)var Ee=UL(v),pt=LL(U,Ee);if(a&&(U=CL(U,a,n,I)),o&&(U=OL(U,o,s,I)),R-=pt,I&&R<f){var Wt=DL(U,Ee);return PL(e,t,pg,v.placeholder,r,U,Wt,i,c,f-R)}var Ir=g?r:this,Sr=y?Ir[e]:e;return R=U.length,i?U=qL(U,i):C&&R>1&&U.reverse(),m&&c<R&&(U.length=c),this&&this!==NL&&this instanceof v&&(Sr=_||cg(Sr)),Sr.apply(Ir,U)}return v}lg.exports=pg});var fg=u((lQ,dg)=>{"use strict";var jL=en(),QL=Ta(),$L=fi(),KL=li(),VL=di(),YL=Fn(),HL=ce();function zL(e,t,r){var a=QL(e);function n(){for(var o=arguments.length,s=Array(o),i=o,c=VL(n);i--;)s[i]=arguments[i];var f=o<3&&s[0]!==c&&s[o-1]!==c?[]:YL(s,c);if(o-=f.length,o<r)return KL(e,t,$L,n.placeholder,void 0,s,f,void 0,void 0,r-o);var m=this&&this!==HL&&this instanceof n?a:e;return jL(m,this,s)}return n}dg.exports=zL});var gg=u((dQ,mg)=>{"use strict";var JL=en(),XL=Ta(),ZL=ce(),eP=1;function tP(e,t,r,a){var n=t&eP,o=XL(e);function s(){for(var i=-1,c=arguments.length,f=-1,m=a.length,g=Array(m+c),y=this&&this!==ZL&&this instanceof s?o:e;++f<m;)g[f]=a[f];for(;c--;)g[f++]=arguments[++i];return JL(y,n?r:this,g)}return s}mg.exports=tP});var Sg=u((fQ,Ig)=>{"use strict";var rP=oi(),aP=si(),yg=Fn(),hg="__lodash_placeholder__",mi=1,nP=2,oP=4,Ag=8,Ea=128,bg=256,sP=Math.min;function iP(e,t){var r=e[1],a=t[1],n=r|a,o=n<(mi|nP|Ea),s=a==Ea&&r==Ag||a==Ea&&r==bg&&e[7].length<=t[8]||a==(Ea|bg)&&t[7].length<=t[8]&&r==Ag;if(!(o||s))return e;a&mi&&(e[2]=t[2],n|=r&mi?0:oP);var i=t[3];if(i){var c=e[3];e[3]=c?rP(c,i,t[4]):i,e[4]=c?yg(e[3],hg):t[4]}return i=t[5],i&&(c=e[5],e[5]=c?aP(c,i,t[6]):i,e[6]=c?yg(e[5],hg):t[6]),i=t[7],i&&(e[7]=i),a&Ea&&(e[8]=e[8]==null?t[8]:sP(e[8],t[8])),e[9]==null&&(e[9]=t[9]),e[0]=t[0],e[1]=n,e}Ig.exports=iP});var Tg=u((mQ,wg)=>{"use strict";var uP=/\s/;function cP(e){for(var t=e.length;t--&&uP.test(e.charAt(t)););return t}wg.exports=cP});var Rg=u((gQ,Eg)=>{"use strict";var pP=Tg(),lP=/^\s+/;function dP(e){return e&&e.slice(0,pP(e)+1).replace(lP,"")}Eg.exports=dP});var mr=u((yQ,vg)=>{"use strict";var fP=gt(),mP=be(),gP="[object Symbol]";function yP(e){return typeof e=="symbol"||mP(e)&&fP(e)==gP}vg.exports=yP});var Og=u((hQ,Cg)=>{"use strict";var hP=Rg(),_g=xe(),AP=mr(),xg=0/0,bP=/^[-+]0x[0-9a-f]+$/i,IP=/^0b[01]+$/i,SP=/^0o[0-7]+$/i,wP=parseInt;function TP(e){if(typeof e=="number")return e;if(AP(e))return xg;if(_g(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=_g(t)?t+"":t}if(typeof e!="string")return e===0?e:+e;e=hP(e);var r=IP.test(e);return r||SP.test(e)?wP(e.slice(2),r?2:8):bP.test(e)?xg:+e}Cg.exports=TP});var Ug=u((AQ,Pg)=>{"use strict";var EP=Og(),Lg=1/0,RP=17976931348623157e292;function vP(e){if(!e)return e===0?e:0;if(e=EP(e),e===Lg||e===-Lg){var t=e<0?-1:1;return t*RP}return e===e?e:0}Pg.exports=vP});var gi=u((bQ,qg)=>{"use strict";var _P=Ug();function xP(e){var t=_P(e),r=t%1;return t===t?r?t-r:t:0}qg.exports=xP});var Wn=u((IQ,kg)=>{"use strict";var CP=ni(),OP=Em(),LP=fg(),PP=fi(),UP=gg(),qP=ii(),DP=Sg(),NP=ci(),BP=pi(),Dg=gi(),MP="Expected a function",Ng=1,kP=2,yi=8,hi=16,Ai=32,Bg=64,Mg=Math.max;function GP(e,t,r,a,n,o,s,i){var c=t&kP;if(!c&&typeof e!="function")throw new TypeError(MP);var f=a?a.length:0;if(f||(t&=~(Ai|Bg),a=n=void 0),s=s===void 0?s:Mg(Dg(s),0),i=i===void 0?i:Dg(i),f-=n?n.length:0,t&Bg){var m=a,g=n;a=n=void 0}var y=c?void 0:qP(e),I=[e,t,r,a,n,m,g,o,s,i];if(y&&DP(I,y),e=I[0],t=I[1],r=I[2],a=I[3],n=I[4],i=I[9]=I[9]===void 0?c?0:e.length:Mg(I[9]-f,0),!i&&t&(yi|hi)&&(t&=~(yi|hi)),!t||t==Ng)var C=OP(e,t,r);else t==yi||t==hi?C=LP(e,t,i):(t==Ai||t==(Ng|Ai))&&!n.length?C=UP(e,t,r,a):C=PP.apply(void 0,I);var _=y?CP:NP;return BP(_(C,I),e,t)}kg.exports=GP});var Fg=u((SQ,Gg)=>{"use strict";var FP=Wn(),WP=128;function jP(e,t,r){return t=r?void 0:t,t=e&&t==null?e.length:t,FP(e,WP,void 0,void 0,void 0,void 0,t)}Gg.exports=jP});var jg=u((wQ,Wg)=>{"use strict";var QP=zo(),$P=QP(Object.keys,Object);Wg.exports=$P});var bi=u((TQ,Qg)=>{"use strict";var KP=pn(),VP=jg(),YP=Object.prototype,HP=YP.hasOwnProperty;function zP(e){if(!KP(e))return VP(e);var t=[];for(var r in Object(e))HP.call(e,r)&&r!="constructor"&&t.push(r);return t}Qg.exports=zP});var gr=u((EQ,$g)=>{"use strict";var JP=rs(),XP=bi(),ZP=Zt();function eU(e){return ZP(e)?JP(e):XP(e)}$g.exports=eU});var Ii=u((RQ,Kg)=>{"use strict";var tU=or(),rU=gr();function aU(e,t){return e&&tU(t,rU(t),e)}Kg.exports=aU});var Yg=u((vQ,Vg)=>{"use strict";var nU=or(),oU=sr();function sU(e,t){return e&&nU(t,oU(t),e)}Vg.exports=sU});var zg=u((_Q,Hg)=>{"use strict";function iU(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}Hg.exports=iU});var Si=u((xQ,Jg)=>{"use strict";function uU(){return[]}Jg.exports=uU});var jn=u((CQ,Zg)=>{"use strict";var cU=zg(),pU=Si(),lU=Object.prototype,dU=lU.propertyIsEnumerable,Xg=Object.getOwnPropertySymbols,fU=Xg?function(e){return e==null?[]:(e=Object(e),cU(Xg(e),function(t){return dU.call(e,t)}))}:pU;Zg.exports=fU});var ty=u((OQ,ey)=>{"use strict";var mU=or(),gU=jn();function yU(e,t){return mU(e,gU(e),t)}ey.exports=yU});var wi=u((LQ,ry)=>{"use strict";var hU=Za(),AU=cn(),bU=jn(),IU=Si(),SU=Object.getOwnPropertySymbols,wU=SU?function(e){for(var t=[];e;)hU(t,bU(e)),e=AU(e);return t}:IU;ry.exports=wU});var ny=u((PQ,ay)=>{"use strict";var TU=or(),EU=wi();function RU(e,t){return TU(e,EU(e),t)}ay.exports=RU});var Ti=u((UQ,oy)=>{"use strict";var vU=Za(),_U=se();function xU(e,t,r){var a=t(e);return _U(e)?a:vU(a,r(e))}oy.exports=xU});var Ei=u((qQ,sy)=>{"use strict";var CU=Ti(),OU=jn(),LU=gr();function PU(e){return CU(e,LU,OU)}sy.exports=PU});var uy=u((DQ,iy)=>{"use strict";var UU=Ti(),qU=wi(),DU=sr();function NU(e){return UU(e,DU,qU)}iy.exports=NU});var py=u((NQ,cy)=>{"use strict";var BU=yt(),MU=ce(),kU=BU(MU,"DataView");cy.exports=kU});var dy=u((BQ,ly)=>{"use strict";var GU=yt(),FU=ce(),WU=GU(FU,"Promise");ly.exports=WU});var hr=u((MQ,by)=>{"use strict";var Ri=py(),vi=rn(),_i=dy(),xi=Fo(),Ci=ri(),Ay=gt(),yr=qo(),fy="[object Map]",jU="[object Object]",my="[object Promise]",gy="[object Set]",yy="[object WeakMap]",hy="[object DataView]",QU=yr(Ri),$U=yr(vi),KU=yr(_i),VU=yr(xi),YU=yr(Ci),Nt=Ay;(Ri&&Nt(new Ri(new ArrayBuffer(1)))!=hy||vi&&Nt(new vi)!=fy||_i&&Nt(_i.resolve())!=my||xi&&Nt(new xi)!=gy||Ci&&Nt(new Ci)!=yy)&&(Nt=function(e){var t=Ay(e),r=t==jU?e.constructor:void 0,a=r?yr(r):"";if(a)switch(a){case QU:return hy;case $U:return fy;case KU:return my;case VU:return gy;case YU:return yy}return t});by.exports=Nt});var Sy=u((kQ,Iy)=>{"use strict";var HU=Object.prototype,zU=HU.hasOwnProperty;function JU(e){var t=e.length,r=new e.constructor(t);return t&&typeof e[0]=="string"&&zU.call(e,"index")&&(r.index=e.index,r.input=e.input),r}Iy.exports=JU});var Ty=u((GQ,wy)=>{"use strict";var XU=un();function ZU(e,t){var r=t?XU(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.byteLength)}wy.exports=ZU});var Ry=u((FQ,Ey)=>{"use strict";var eq=/\w*$/;function tq(e){var t=new e.constructor(e.source,eq.exec(e));return t.lastIndex=e.lastIndex,t}Ey.exports=tq});var Oy=u((WQ,Cy)=>{"use strict";var vy=xt(),_y=vy?vy.prototype:void 0,xy=_y?_y.valueOf:void 0;function rq(e){return xy?Object(xy.call(e)):{}}Cy.exports=rq});var Py=u((jQ,Ly)=>{"use strict";var aq=un(),nq=Ty(),oq=Ry(),sq=Oy(),iq=Ho(),uq="[object Boolean]",cq="[object Date]",pq="[object Map]",lq="[object Number]",dq="[object RegExp]",fq="[object Set]",mq="[object String]",gq="[object Symbol]",yq="[object ArrayBuffer]",hq="[object DataView]",Aq="[object Float32Array]",bq="[object Float64Array]",Iq="[object Int8Array]",Sq="[object Int16Array]",wq="[object Int32Array]",Tq="[object Uint8Array]",Eq="[object Uint8ClampedArray]",Rq="[object Uint16Array]",vq="[object Uint32Array]";function _q(e,t,r){var a=e.constructor;switch(t){case yq:return aq(e);case uq:case cq:return new a(+e);case hq:return nq(e,r);case Aq:case bq:case Iq:case Sq:case wq:case Tq:case Eq:case Rq:case vq:return iq(e,r);case pq:return new a;case lq:case mq:return new a(e);case dq:return oq(e);case fq:return new a;case gq:return sq(e)}}Ly.exports=_q});var qy=u((QQ,Uy)=>{"use strict";var xq=hr(),Cq=be(),Oq="[object Map]";function Lq(e){return Cq(e)&&xq(e)==Oq}Uy.exports=Lq});var My=u(($Q,By)=>{"use strict";var Pq=qy(),Uq=ln(),Dy=dn(),Ny=Dy&&Dy.isMap,qq=Ny?Uq(Ny):Pq;By.exports=qq});var Gy=u((KQ,ky)=>{"use strict";var Dq=hr(),Nq=be(),Bq="[object Set]";function Mq(e){return Nq(e)&&Dq(e)==Bq}ky.exports=Mq});var Qy=u((VQ,jy)=>{"use strict";var kq=Gy(),Gq=ln(),Fy=dn(),Wy=Fy&&Fy.isSet,Fq=Wy?Gq(Wy):kq;jy.exports=Fq});var Oi=u((YQ,Yy)=>{"use strict";var Wq=na(),jq=Gn(),Qq=ts(),$q=Ii(),Kq=Yg(),Vq=Vo(),Yq=rr(),Hq=ty(),zq=ny(),Jq=Ei(),Xq=uy(),Zq=hr(),eD=Sy(),tD=Py(),rD=Jo(),aD=se(),nD=ca(),oD=My(),sD=xe(),iD=Qy(),uD=gr(),cD=sr(),pD=1,lD=2,dD=4,$y="[object Arguments]",fD="[object Array]",mD="[object Boolean]",gD="[object Date]",yD="[object Error]",Ky="[object Function]",hD="[object GeneratorFunction]",AD="[object Map]",bD="[object Number]",Vy="[object Object]",ID="[object RegExp]",SD="[object Set]",wD="[object String]",TD="[object Symbol]",ED="[object WeakMap]",RD="[object ArrayBuffer]",vD="[object DataView]",_D="[object Float32Array]",xD="[object Float64Array]",CD="[object Int8Array]",OD="[object Int16Array]",LD="[object Int32Array]",PD="[object Uint8Array]",UD="[object Uint8ClampedArray]",qD="[object Uint16Array]",DD="[object Uint32Array]",N={};N[$y]=N[fD]=N[RD]=N[vD]=N[mD]=N[gD]=N[_D]=N[xD]=N[CD]=N[OD]=N[LD]=N[AD]=N[bD]=N[Vy]=N[ID]=N[SD]=N[wD]=N[TD]=N[PD]=N[UD]=N[qD]=N[DD]=!0;N[yD]=N[Ky]=N[ED]=!1;function Qn(e,t,r,a,n,o){var s,i=t&pD,c=t&lD,f=t&dD;if(r&&(s=n?r(e,a,n,o):r(e)),s!==void 0)return s;if(!sD(e))return e;var m=aD(e);if(m){if(s=eD(e),!i)return Yq(e,s)}else{var g=Zq(e),y=g==Ky||g==hD;if(nD(e))return Vq(e,i);if(g==Vy||g==$y||y&&!n){if(s=c||y?{}:rD(e),!i)return c?zq(e,Kq(s,e)):Hq(e,$q(s,e))}else{if(!N[g])return n?e:{};s=tD(e,g,i)}}o||(o=new Wq);var I=o.get(e);if(I)return I;o.set(e,s),iD(e)?e.forEach(function(v){s.add(Qn(v,t,r,v,e,o))}):oD(e)&&e.forEach(function(v,R){s.set(R,Qn(v,t,r,R,e,o))});var C=f?c?Xq:Jq:c?cD:uD,_=m?void 0:C(e);return jq(_||e,function(v,R){_&&(R=v,v=e[R]),Qq(s,R,Qn(v,t,r,R,e,o))}),s}Yy.exports=Qn});var zy=u((HQ,Hy)=>{"use strict";var ND=Oi(),BD=4;function MD(e){return ND(e,BD)}Hy.exports=MD});var Xy=u((zQ,Jy)=>{"use strict";var kD=Wn(),GD=8;function Li(e,t,r){t=r?void 0:t;var a=kD(e,GD,void 0,void 0,void 0,void 0,void 0,t);return a.placeholder=Li.placeholder,a}Li.placeholder={};Jy.exports=Li});var eh=u((JQ,Zy)=>{"use strict";var FD=gt(),WD=be(),jD=Xo(),QD="[object DOMException]",$D="[object Error]";function KD(e){if(!WD(e))return!1;var t=FD(e);return t==$D||t==QD||typeof e.message=="string"&&typeof e.name=="string"&&!jD(e)}Zy.exports=KD});var rh=u((XQ,th)=>{"use strict";var VD=hr(),YD=be(),HD="[object WeakMap]";function zD(e){return YD(e)&&VD(e)==HD}th.exports=zD});var nh=u((ZQ,ah)=>{"use strict";function JD(e,t){for(var r=-1,a=e==null?0:e.length;++r<a;)if(t(e[r],r,e))return!0;return!1}ah.exports=JD});var Pi=u((e$,oh)=>{"use strict";var XD=Mo(),ZD=nh(),eN=Go(),tN=1,rN=2;function aN(e,t,r,a,n,o){var s=r&tN,i=e.length,c=t.length;if(i!=c&&!(s&&c>i))return!1;var f=o.get(e),m=o.get(t);if(f&&m)return f==t&&m==e;var g=-1,y=!0,I=r&rN?new XD:void 0;for(o.set(e,t),o.set(t,e);++g<i;){var C=e[g],_=t[g];if(a)var v=s?a(_,C,g,t,e,o):a(C,_,g,e,t,o);if(v!==void 0){if(v)continue;y=!1;break}if(I){if(!ZD(t,function(R,U){if(!eN(I,U)&&(C===R||n(C,R,r,a,o)))return I.push(U)})){y=!1;break}}else if(!(C===_||n(C,_,r,a,o))){y=!1;break}}return o.delete(e),o.delete(t),y}oh.exports=aN});var ih=u((t$,sh)=>{"use strict";function nN(e){var t=-1,r=Array(e.size);return e.forEach(function(a,n){r[++t]=[n,a]}),r}sh.exports=nN});var dh=u((r$,lh)=>{"use strict";var uh=xt(),ch=Yo(),oN=zt(),sN=Pi(),iN=ih(),uN=on(),cN=1,pN=2,lN="[object Boolean]",dN="[object Date]",fN="[object Error]",mN="[object Map]",gN="[object Number]",yN="[object RegExp]",hN="[object Set]",AN="[object String]",bN="[object Symbol]",IN="[object ArrayBuffer]",SN="[object DataView]",ph=uh?uh.prototype:void 0,Ui=ph?ph.valueOf:void 0;function wN(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 IN:return!(e.byteLength!=t.byteLength||!o(new ch(e),new ch(t)));case lN:case dN:case gN:return oN(+e,+t);case fN:return e.name==t.name&&e.message==t.message;case yN:case AN:return e==t+"";case mN:var i=iN;case hN:var c=a&cN;if(i||(i=uN),e.size!=t.size&&!c)return!1;var f=s.get(e);if(f)return f==t;a|=pN,s.set(e,t);var m=sN(i(e),i(t),a,n,o,s);return s.delete(e),m;case bN:if(Ui)return Ui.call(e)==Ui.call(t)}return!1}lh.exports=wN});var gh=u((a$,mh)=>{"use strict";var fh=Ei(),TN=1,EN=Object.prototype,RN=EN.hasOwnProperty;function vN(e,t,r,a,n,o){var s=r&TN,i=fh(e),c=i.length,f=fh(t),m=f.length;if(c!=m&&!s)return!1;for(var g=c;g--;){var y=i[g];if(!(s?y in t:RN.call(t,y)))return!1}var I=o.get(e),C=o.get(t);if(I&&C)return I==t&&C==e;var _=!0;o.set(e,t),o.set(t,e);for(var v=s;++g<c;){y=i[g];var R=e[y],U=t[y];if(a)var qe=s?a(U,R,y,t,e,o):a(R,U,y,e,t,o);if(!(qe===void 0?R===U||n(R,U,r,a,o):qe)){_=!1;break}v||(v=y=="constructor")}if(_&&!v){var Ee=e.constructor,pt=t.constructor;Ee!=pt&&"constructor"in e&&"constructor"in t&&!(typeof Ee=="function"&&Ee instanceof Ee&&typeof pt=="function"&&pt instanceof pt)&&(_=!1)}return o.delete(e),o.delete(t),_}mh.exports=vN});var Th=u((n$,wh)=>{"use strict";var qi=na(),_N=Pi(),xN=dh(),CN=gh(),yh=hr(),hh=se(),Ah=ca(),ON=fn(),LN=1,bh="[object Arguments]",Ih="[object Array]",$n="[object Object]",PN=Object.prototype,Sh=PN.hasOwnProperty;function UN(e,t,r,a,n,o){var s=hh(e),i=hh(t),c=s?Ih:yh(e),f=i?Ih:yh(t);c=c==bh?$n:c,f=f==bh?$n:f;var m=c==$n,g=f==$n,y=c==f;if(y&&Ah(e)){if(!Ah(t))return!1;s=!0,m=!1}if(y&&!m)return o||(o=new qi),s||ON(e)?_N(e,t,r,a,n,o):xN(e,t,c,r,a,n,o);if(!(r&LN)){var I=m&&Sh.call(e,"__wrapped__"),C=g&&Sh.call(t,"__wrapped__");if(I||C){var _=I?e.value():e,v=C?t.value():t;return o||(o=new qi),n(_,v,r,a,o)}}return y?(o||(o=new qi),CN(e,t,r,a,n,o)):!1}wh.exports=UN});var Di=u((o$,vh)=>{"use strict";var qN=Th(),Eh=be();function Rh(e,t,r,a,n){return e===t?!0:e==null||t==null||!Eh(e)&&!Eh(t)?e!==e&&t!==t:qN(e,t,r,a,Rh,n)}vh.exports=Rh});var xh=u((s$,_h)=>{"use strict";var DN=na(),NN=Di(),BN=1,MN=2;function kN(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 c=i[0],f=e[c],m=i[1];if(s&&i[2]){if(f===void 0&&!(c in e))return!1}else{var g=new DN;if(a)var y=a(f,m,c,e,t,g);if(!(y===void 0?NN(m,f,BN|MN,a,g):y))return!1}}return!0}_h.exports=kN});var Ni=u((i$,Ch)=>{"use strict";var GN=xe();function FN(e){return e===e&&!GN(e)}Ch.exports=FN});var Lh=u((u$,Oh)=>{"use strict";var WN=Ni(),jN=gr();function QN(e){for(var t=jN(e),r=t.length;r--;){var a=t[r],n=e[a];t[r]=[a,n,WN(n)]}return t}Oh.exports=QN});var Bi=u((c$,Ph)=>{"use strict";function $N(e,t){return function(r){return r==null?!1:r[e]===t&&(t!==void 0||e in Object(r))}}Ph.exports=$N});var qh=u((p$,Uh)=>{"use strict";var KN=xh(),VN=Lh(),YN=Bi();function HN(e){var t=VN(e);return t.length==1&&t[0][2]?YN(t[0][0],t[0][1]):function(r){return r===e||KN(r,e,t)}}Uh.exports=HN});var Kn=u((l$,Dh)=>{"use strict";var zN=se(),JN=mr(),XN=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,ZN=/^\w*$/;function eB(e,t){if(zN(e))return!1;var r=typeof e;return r=="number"||r=="symbol"||r=="boolean"||e==null||JN(e)?!0:ZN.test(e)||!XN.test(e)||t!=null&&e in Object(t)}Dh.exports=eB});var Mh=u((d$,Bh)=>{"use strict";var Nh=an(),tB="Expected a function";function Mi(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(tB);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(Mi.Cache||Nh),r}Mi.Cache=Nh;Bh.exports=Mi});var Gh=u((f$,kh)=>{"use strict";var rB=Mh(),aB=500;function nB(e){var t=rB(e,function(a){return r.size===aB&&r.clear(),a}),r=t.cache;return t}kh.exports=nB});var ki=u((m$,Fh)=>{"use strict";var oB=Gh(),sB=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,iB=/\\(\\)?/g,uB=oB(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(sB,function(r,a,n,o){t.push(n?o.replace(iB,"$1"):a||r)}),t});Fh.exports=uB});var Gi=u((g$,Wh)=>{"use strict";function cB(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}Wh.exports=cB});var Yh=u((y$,Vh)=>{"use strict";var jh=xt(),pB=Gi(),lB=se(),dB=mr(),fB=1/0,Qh=jh?jh.prototype:void 0,$h=Qh?Qh.toString:void 0;function Kh(e){if(typeof e=="string")return e;if(lB(e))return pB(e,Kh)+"";if(dB(e))return $h?$h.call(e):"";var t=e+"";return t=="0"&&1/e==-fB?"-0":t}Vh.exports=Kh});var Fi=u((h$,Hh)=>{"use strict";var mB=Yh();function gB(e){return e==null?"":mB(e)}Hh.exports=gB});var Wi=u((A$,zh)=>{"use strict";var yB=se(),hB=Kn(),AB=ki(),bB=Fi();function IB(e,t){return yB(e)?e:hB(e,t)?[e]:AB(bB(e))}zh.exports=IB});var Ar=u((b$,Jh)=>{"use strict";var SB=mr(),wB=1/0;function TB(e){if(typeof e=="string"||SB(e))return e;var t=e+"";return t=="0"&&1/e==-wB?"-0":t}Jh.exports=TB});var ji=u((I$,Xh)=>{"use strict";var EB=Wi(),RB=Ar();function vB(e,t){t=EB(t,e);for(var r=0,a=t.length;e!=null&&r<a;)e=e[RB(t[r++])];return r&&r==a?e:void 0}Xh.exports=vB});var eA=u((S$,Zh)=>{"use strict";var _B=ji();function xB(e,t,r){var a=e==null?void 0:_B(e,t);return a===void 0?r:a}Zh.exports=xB});var rA=u((w$,tA)=>{"use strict";function CB(e,t){return e!=null&&t in Object(e)}tA.exports=CB});var nA=u((T$,aA)=>{"use strict";var OB=Wi(),LB=Jr(),PB=se(),UB=da(),qB=sn(),DB=Ar();function NB(e,t,r){t=OB(t,e);for(var a=-1,n=t.length,o=!1;++a<n;){var s=DB(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&&qB(n)&&UB(s,n)&&(PB(e)||LB(e)))}aA.exports=NB});var sA=u((E$,oA)=>{"use strict";var BB=rA(),MB=nA();function kB(e,t){return e!=null&&MB(e,t,BB)}oA.exports=kB});var uA=u((R$,iA)=>{"use strict";var GB=Di(),FB=eA(),WB=sA(),jB=Kn(),QB=Ni(),$B=Bi(),KB=Ar(),VB=1,YB=2;function HB(e,t){return jB(e)&&QB(t)?$B(KB(e),t):function(r){var a=FB(r,e);return a===void 0&&a===t?WB(r,e):GB(t,a,VB|YB)}}iA.exports=HB});var pA=u((v$,cA)=>{"use strict";function zB(e){return function(t){return t?.[e]}}cA.exports=zB});var dA=u((_$,lA)=>{"use strict";var JB=ji();function XB(e){return function(t){return JB(t,e)}}lA.exports=XB});var mA=u((x$,fA)=>{"use strict";var ZB=pA(),eM=dA(),tM=Kn(),rM=Ar();function aM(e){return tM(e)?ZB(rM(e)):eM(e)}fA.exports=aM});var Qi=u((C$,gA)=>{"use strict";var nM=qh(),oM=uA(),sM=Xr(),iM=se(),uM=mA();function cM(e){return typeof e=="function"?e:e==null?sM:typeof e=="object"?iM(e)?oM(e[0],e[1]):nM(e):uM(e)}gA.exports=cM});var hA=u((O$,yA)=>{"use strict";var pM=Oi(),lM=Qi(),dM=1;function fM(e){return lM(typeof e=="function"?e:pM(e,dM))}yA.exports=fM});var bA=u((L$,AA)=>{"use strict";var mM=Lo();function gM(e){var t=e==null?0:e.length;return t?mM(e,1):[]}AA.exports=gM});var SA=u((P$,IA)=>{"use strict";var yM=bA(),hM=Po(),AM=tn();function bM(e){return AM(hM(e,void 0,yM),e+"")}IA.exports=bM});var TA=u((U$,wA)=>{"use strict";var IM=Wn(),SM=SA(),wM=256,TM=SM(function(e,t){return IM(e,wM,void 0,void 0,void 0,t)});wA.exports=TM});var RA=u((q$,EA)=>{"use strict";var EM=Gi(),RM=rr(),vM=se(),_M=mr(),xM=ki(),CM=Ar(),OM=Fi();function LM(e){return vM(e)?EM(e,CM):_M(e)?[e]:RM(xM(OM(e)))}EA.exports=LM});var _A=u((D$,vA)=>{"use strict";vA.exports={ary:Fg(),assign:Ii(),clone:zy(),curry:Xy(),forEach:Gn(),isArray:se(),isError:eh(),isFunction:Zr(),isWeakMap:rh(),iteratee:hA(),keys:bi(),rearg:TA(),toInteger:gi(),toPath:RA()}});var CA=u((N$,xA)=>{"use strict";var PM=ym(),UM=_A();function qM(e,t,r){return PM(UM,e,t,r)}xA.exports=qM});var $i=u((B$,LA)=>{"use strict";var DM=CA(),OA=DM("merge",as());OA.placeholder=Xs();LA.exports=OA});var qb=u((PK,Ub)=>{"use strict";function tk(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}Ub.exports=tk});var Nb=u((UK,Db)=>{"use strict";var rk=Ko(),ak=gr();function nk(e,t){return e&&rk(e,t,ak)}Db.exports=nk});var Mb=u((qK,Bb)=>{"use strict";var ok=Zt();function sk(e,t){return function(r,a){if(r==null)return r;if(!ok(r))return e(r,a);for(var n=r.length,o=t?n:-1,s=Object(r);(t?o--:++o<n)&&a(s[o],o,s)!==!1;);return r}}Bb.exports=sk});var Gb=u((DK,kb)=>{"use strict";var ik=Nb(),uk=Mb(),ck=uk(ik);kb.exports=ck});var Wb=u((NK,Fb)=>{"use strict";var pk=Gb();function lk(e,t,r,a){return pk(e,function(n,o,s){t(a,n,r(n),s)}),a}Fb.exports=lk});var Qb=u((BK,jb)=>{"use strict";var dk=qb(),fk=Wb(),mk=Qi(),gk=se();function yk(e,t){return function(r,a){var n=gk(r)?dk:fk,o=t?t():{};return n(r,e,mk(a,2),o)}}jb.exports=yk});var Kb=u((MK,$b)=>{"use strict";var hk=oa(),Ak=Qb(),bk=Object.prototype,Ik=bk.hasOwnProperty,Sk=Ak(function(e,t,r){Ik.call(e,r)?e[r].push(t):hk(e,r,[t])});$b.exports=Sk});var $k={};w($k,{Method:()=>uo,ai:()=>Uu,api:()=>iu,auditLogs:()=>It,automations:()=>Cn,backups:()=>Se,branding:()=>bn,constants:()=>Qr,environmentVariables:()=>Je,features:()=>Me,groups:()=>j,init:()=>pm,licensing:()=>Ke,logger:()=>Bt,mappers:()=>Y,middleware:()=>Xi,plugins:()=>On,publicApi:()=>Un,quotas:()=>ze,scimGroups:()=>br,scimUsers:()=>ye,sdk:()=>Vi,users:()=>nt,utils:()=>Yt});module.exports=kI($k);var uo=(o=>(o.POST="POST",o.GET="GET",o.PATCH="PATCH",o.DELETE="DELETE",o.PUT="PUT",o))(uo||{});var Vi={};w(Vi,{ai:()=>Is,auditLogs:()=>It,automations:()=>Cn,backups:()=>Se,branding:()=>bn,environmentVariables:()=>Je,features:()=>Me,groups:()=>j,init:()=>pm,licensing:()=>Ke,logger:()=>Bt,plugins:()=>On,publicApi:()=>Un,quotas:()=>ze,scimGroups:()=>br,scimUsers:()=>ye,users:()=>nt,utils:()=>Yt});var bn={};w(bn,{getBrandingConfig:()=>Lx});var Me={};w(Me,{checkBackups:()=>pe,checkFeature:()=>hn,checkFeatures:()=>ms,checkSCIM:()=>As,isAppBuildersEnabled:()=>Pt,isAuditLogsEnabled:()=>An,isBackupsEnabled:()=>gs,isBrandingEnabled:()=>ys,isEnforceableSSO:()=>Tf,isExpandedPublicApiEnabled:()=>rt,isPWAEnabled:()=>Ex,isPkceOidcEnabled:()=>vx,isRecaptchaEnabled:()=>Rx,isSSOEnforced:()=>_x,isSyncAutomationsEnabled:()=>wx,isTriggerAutomationRunEnabled:()=>Tx,isUserGroupsEnabled:()=>hs,isViewPermissionEnabled:()=>xx,isViewReadonlyColumnsEnabled:()=>Cx});var te=require("@budibase/types"),tt=require("@budibase/backend-core");var Ke={};w(Ke,{cache:()=>Ne,client:()=>mt,features:()=>Ja,getFreeLicense:()=>ls,getLicense:()=>cs,getLicenseFromKey:()=>ps,keys:()=>fs,offline:()=>mn,quotas:()=>Xa});var Ne={};w(Ne,{getCachedLicense:()=>Sf,invalidate:()=>wf,refresh:()=>Ct});var Ba=require("@budibase/backend-core"),Tr,GI=async()=>{Tr=await Ba.RedisClient.init(Ba.redis.utils.Databases.LICENSES)},FI=async()=>{Tr&&await Tr.finish()};process.on("exit",async()=>{await FI()});var co=async()=>(Tr||await GI(),Tr);var mt={};w(mt,{activateLicenseKey:()=>vo,getLicense:()=>Kt,getLicenseFromKey:()=>Ro,triggerQuota:()=>vS});var Wu=P(require("node-fetch"));var ju=require("@budibase/backend-core"),po=require("dd-trace"),Qu=require("dd-trace/ext/formats"),lo=class{constructor(t){this.apiCall=t=>async(r="",a={})=>await po.tracer.trace(`api.${t}`,async n=>{n.setTag("url",r);let o={...a.headers};o["Content-Type"]||(o["Content-Type"]="application/json",o.Accept="application/json");let s=o["Content-Type"]==="application/json";ju.logging.correlation.setHeader(o),po.tracer.inject(n,Qu.HTTP_HEADERS,o);let i={method:t,body:s?JSON.stringify(a.body):a.body,headers:o,credentials:"include"};return(0,Wu.default)(`${this.host}${r}`,i)});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}},fo=lo;var Ya=require("@budibase/types"),L=require("@budibase/backend-core");var Qe={};w(Qe,{bustCache:()=>yo,getCurrentUsageValues:()=>Xu,getQuotaUsage:()=>Et,setAllUsage:()=>Ao,setAppUsageValue:()=>ho,setUsage:()=>Hu,setUsagePerApp:()=>zu,utils:()=>_r});var fe=require("@budibase/backend-core"),ue=require("@budibase/types");var _r={};w(_r,{generateBaseQuotaUsage:()=>ka,generateNewMonthlyQuotas:()=>vr,generateNewQuotaUsage:()=>go,getBreakdownName:()=>Fa,getCurrentMonthString:()=>lt,getQuotaDocId:()=>Rr,setCurrentMonth:()=>Ga,setQuotaReset:()=>mo});var H=require("@budibase/types"),Er=require("@budibase/backend-core"),Ma=require("@budibase/shared-core"),Rr=()=>Er.context.isSelfHostUsingCloud()?`quota_usage_${Er.context.getTenantId()}`:Er.db.StaticDatabases.GLOBAL.docs.usageQuota,$u=()=>{let e=new Date;return new Date(e.getFullYear(),e.getMonth()+1,1).toISOString()},mo=e=>{e.quotaReset=$u()},lt=()=>{let e=new Date,t=e.getMonth()+1,r=e.getFullYear();return`${t}-${r}`},ka=()=>({usageQuota:{[H.StaticQuotaName.APPS]:0,[H.StaticQuotaName.ROWS]:0,[H.StaticQuotaName.PLUGINS]:0,[H.StaticQuotaName.USERS]:0,[H.StaticQuotaName.CREATORS]:0,[H.StaticQuotaName.USER_GROUPS]:0,[H.StaticQuotaName.AI_CUSTOM_CONFIGS]:0,triggers:{}},monthly:{[lt()]:vr()}}),go=()=>{let e={_id:Rr(),quotaReset:$u(),...ka(),apps:{}};return Ga(e),e},vr=()=>({[H.MonthlyQuotaName.QUERIES]:0,[H.MonthlyQuotaName.AUTOMATIONS]:0,[H.MonthlyQuotaName.BUDIBASE_AI_CREDITS]:0,[H.MonthlyQuotaName.ACTIONS]:0,triggers:{}}),Ga=e=>{let t=lt();e.monthly||(e.monthly={}),e.monthly[t]||(e.monthly[t]=vr()),e.monthly.current=e.monthly[t]},Fa=(e,t)=>{if(!(!t||!e))switch(e){case H.MonthlyQuotaName.AUTOMATIONS:return H.BreakdownQuotaName.AUTOMATIONS;case H.MonthlyQuotaName.QUERIES:return(0,Ma.isTableIdOrExternalTableId)(t)?H.BreakdownQuotaName.ROW_QUERIES:(0,Ma.isDatasourceOrDatasourcePlusId)(t)?H.BreakdownQuotaName.DATASOURCE_QUERIES:void 0}};var Ku=fe.Duration.fromSeconds(60).toMs(),{Writethrough:Vu}=fe.cache.writethrough;function jI(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 Wa=()=>fe.tenancy.isSelfHostUsingCloud()?new Vu(fe.tenancy.getSelfHostCloudDB(),Ku):new Vu(fe.tenancy.getGlobalDB(),Ku);async function yo(e=0){let r=Wa(),a=Rr(),n=await r.tryGet(a);n&&n._rev&&await r.remove(a,n._rev).catch(async o=>{if(e<1)return await yo(e+1);throw o})}var Et=async()=>{let e=Wa(),t=await e.tryGet(Rr());if(!t){t=go();let{rev:r}=await e.put(t);t._rev=r}return Ga(t),mo(t),jI(t)},Hu=async(e,t,r)=>Ao({name:t,type:r,values:{total:e}}),zu=async(e,t,r)=>{let a=Wa(),n=await Et(),o=Object.values(e).reduce((i,c)=>i+c,0);for(let[i,c]of Object.entries(e))n=Ju(n,t,r,{total:o,app:c},{appId:i});let s=await a.put(n);return n._rev=s.rev,n},QI=(e,t,r,a)=>{let n=Fa(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},ho=(e,t,r,a={},n)=>{let o;try{o=fe.db.getProdWorkspaceID(a?.appId||fe.context.getWorkspaceId())}catch{}if(!o||!n.app||!ue.APP_QUOTA_NAMES.includes(t))return e;e.apps?.[o]||(e.apps={...e.apps,[o]:ka()});let s=e.apps[o];switch(r){case ue.QuotaUsageType.STATIC:s.usageQuota[t]=n.app;break;case ue.QuotaUsageType.MONTHLY:{let i=lt(),c=t,f=s.monthly[i];f||(s.monthly[i]=vr(),f=s.monthly[i]),f[c]=n.app,ue.BREAKDOWN_QUOTA_NAMES.includes(c)&&a?.id&&(f=QI(f,c,a.id,n));break}}return e},Yu=(e,t,r,a)=>{if(!ue.APP_QUOTA_NAMES.includes(r))return{};let n;try{n=fe.db.getProdWorkspaceID(fe.context.getWorkspaceId())}catch{}if(!n||!e.apps||!e.apps[n])return{app:0};let o=e.apps[n];switch(t){case ue.QuotaUsageType.STATIC:if(o.usageQuota?.[r])return{app:o.usageQuota[r]};break;case ue.QuotaUsageType.MONTHLY:{let s=lt(),i=r;if(!o.monthly?.[s]?.[i])break;let c=o.monthly[s],f=c[i],m,g=Fa(i,a);return g&&a&&c.breakdown?.[g]&&(m=c.breakdown[g]?.values[a]),{app:f,breakdown:m||0}}}return{app:0}},$I=(e,t,r)=>{t.usageQuota.triggers||(t.usageQuota.triggers={}),r&&(t.usageQuota.triggers[e]=r)},KI=(e,t,r,a)=>{r.monthly[t].triggers||(r.monthly[t].triggers={}),a&&(r.monthly[t].triggers[e]=a)},Ju=(e,t,r,a,n={})=>{if(r===ue.QuotaUsageType.STATIC)t=t,e.usageQuota[t]=a.total,$I(t,e,a.triggers);else if(r===ue.QuotaUsageType.MONTHLY){t=t;let o=lt();e.monthly[o][t]=a.total,KI(t,o,e,a.triggers)}else throw new Error(`Invalid usage type: ${r}`);return ho(e,t,r,n,a)},Ao=async e=>{let t=Array.isArray(e)?e:[e],r=Wa(),a=await Et();for(let o of t)a=Ju(a,o.name,o.type,o.values,o.opts);let n=await r.put(a,0);return a._rev=n.rev,a},Xu=async(e,t,r)=>{let a=await Et(),n=0,o={};switch(e){case ue.QuotaUsageType.STATIC:if(a.usageQuota[t]){let s=t;n=a.usageQuota[s],o=Yu(a,e,t,r)}break;case ue.QuotaUsageType.MONTHLY:{let s=lt(),i=t;a.monthly[s][i]&&(n=a.monthly[s][i],o=Yu(a,e,t,r));break}default:throw new Error(`Invalid usage type: ${e}`)}return ue.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 ve={};w(ve,{destroy:()=>HI,get:()=>bo,save:()=>YI});var dt=require("@budibase/backend-core"),VI=()=>({_id:dt.StaticDatabases.GLOBAL.docs.licenseInfo}),YI=async e=>{let t=await bo();t={...t,...e};let a=await dt.tenancy.getGlobalDB().put(t);return t._rev=a.rev,t},bo=async()=>{let e=dt.tenancy.getGlobalDB();try{return await e.get(dt.StaticDatabases.GLOBAL.docs.licenseInfo)}catch(t){if(t.status===404)return VI();throw t}},HI=async()=>{let e=dt.tenancy.getGlobalDB(),t=await bo();t&&t._rev&&await e.remove(dt.StaticDatabases.GLOBAL.docs.licenseInfo,t._rev)};var M={};w(M,{bulkSave:()=>iS,destroy:()=>uS,fetch:()=>aS,generateUserGroupID:()=>tS,get:()=>nS,getBulk:()=>oS,getByName:()=>Io,getGroupUsers:()=>Qa,getGroupUsersParams:()=>ac,getUserGroupsParams:()=>rc,save:()=>sS});var q=require("@budibase/backend-core");var De=require("@budibase/types"),jt=require("@budibase/backend-core");async function Zu(){let e=jt.sql.designDoc.base("type");e.sql.tables={[De.AUDIT_LOG_TYPE]:{fields:{appId:De.SQLiteType.TEXT,event:De.SQLiteType.TEXT,userId:De.SQLiteType.TEXT,timestamp:De.SQLiteType.TEXT,metadata:De.SQLiteType.TEXT,name:De.SQLiteType.TEXT,type:De.SQLiteType.TEXT,fallback:De.SQLiteType.TEXT}}};let t=jt.context.getAuditLogsDB(),r;try{r=await t.get(jt.SQLITE_DESIGN_DOC_ID),r={...r,...e}}catch(a){if(a.status===404)r=e;else throw a}await t.put(r)}var ja=require("@budibase/backend-core"),{ViewName:zI,SEPARATOR:JI,DocumentType:XI,createView:ZI}=ja.db,eS=XI.USER+JI;async function ec(){let e=ja.tenancy.getGlobalDB(),t=`function(doc) {
4
4
  if (doc._id.startsWith("${eS}") && 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 ZI(e,t,zI.USER_BY_GROUP)}var tp=`${q.DocumentType.GROUP}${q.SEPARATOR}`,xr=async()=>(await q.db.getAllApps({dev:!0,efficient:!0,idsOnly:!0})).map(t=>q.db.getProdAppID(t));function rp(e,t={}){e||(e="");let r=e?.startsWith(q.DocumentType.GROUP)?"":tp;return{...t,startkey:`${r}${e}`,endkey:`${r}${e}${q.UNICODE_MAX}`}}function ap(e,t={}){e||(e="");let{emailSearch:r,bookmark:a,...n}=t;return r?{...n,startkey:`e_${e}${a||r}`,endkey:`e_${e}${r}${q.UNICODE_MAX}`}:{...t,startkey:`g_${e}`,endkey:`g_${e}${q.UNICODE_MAX}`,startkey_docid:a}}function tS(){return`${tp}${q.utils.newid()}`}async function Wa(e,t){let r=q.tenancy.getGlobalDB();return(await q.db.queryView(q.db.ViewName.USER_BY_GROUP,ap(e,t),r,ep,{arrayResponse:!0})).map(n=>({_id:n.userId,email:n.email}))||[]}async function Cr(e,t){return e.users=await Wa(e._id),e.roles&&(e.roles=Object.fromEntries(Object.entries(e.roles).filter(([r])=>t.includes(r)))),e}async function rS(e){let r=(await Cr(e,await xr())).users?.map(o=>o._id),a=await q.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 q.users.bulkUpdateGlobalUsers(n)}async function np(){return(await q.tenancy.getGlobalDB().allDocs(rp(null,{include_docs:!0}))).rows.map(t=>t.doc)}async function aS(){let[e,t]=await Promise.all([np(),xr()]),r=[];for(let a of e)r.push(Cr(a,t));return await Promise.all(r)}async function nS(e){let t=q.tenancy.getGlobalDB(),[r,a]=await Promise.all([t.get(e),xr()]);return await Cr(r,a)}async function oS(e,t={enriched:!0}){let r=q.tenancy.getGlobalDB(),[a,n]=await Promise.all([r.getMultiple(e,{allowMissing:!0}),xr()]);if(t?.enriched){let o=[];for(let s of a)o.push(Cr(s,n));return await Promise.all(o)}else return a}async function sS(e){return await q.tenancy.getGlobalDB().put(e)}async function iS(e){return await q.tenancy.getGlobalDB().bulkDocs(e)}async function uS(e,t){let r=q.tenancy.getGlobalDB(),a=await r.get(e),n=await r.remove(e,t);return await rS(a),n}async function Io(e){let t=e.toLowerCase(),[r,a]=await Promise.all([np(),xr()]),n=r.find(o=>o.name.toLowerCase()===t);if(n)return await Cr(n,a)}var _e={};w(_e,{deleteAppBackupMetadata:()=>SS,fetchAppBackups:()=>AS,generateAppBackupID:()=>Ap,getAppBackupMetadata:()=>wS,oldestBackupDate:()=>yp,storeAppBackupMetadata:()=>bS,updateAppBackupMetadata:()=>IS});var j=require("@budibase/backend-core"),gp=require("@budibase/types");function Or(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 Wt=require("@budibase/backend-core"),{ViewName:sp,AutomationViewMode:So,SEPARATOR:$e,DocumentType:ip,createView:up}=Wt.db,pS=ip.AUTOMATION_LOG+$e,op=ip.APP_BACKUP+$e;async function pp(){let e=Wt.context.getProdAppDB(),t=`function(doc) {
11
- if (doc._id.startsWith("${pS}")) {
12
- let autoId = doc.automationId + "${$e}"
13
- let status = doc.status + "${$e}"
14
- let autoKey = "${So.AUTOMATION}${$e}" + autoId + doc.createdAt
15
- let statusKey = "${So.STATUS}${$e}" + status + doc.createdAt
16
- let allKey = "${So.ALL}${$e}" + status + autoId + doc.createdAt
10
+ }`;await ZI(e,t,zI.USER_BY_GROUP)}var tc=`${q.DocumentType.GROUP}${q.SEPARATOR}`,xr=async()=>(await q.db.getAllWorkspaces({dev:!0,efficient:!0,idsOnly:!0})).map(t=>q.db.getProdWorkspaceID(t));function rc(e,t={}){e||(e="");let r=e?.startsWith(q.DocumentType.GROUP)?"":tc;return{...t,startkey:`${r}${e}`,endkey:`${r}${e}${q.UNICODE_MAX}`}}function ac(e,t={}){e||(e="");let{emailSearch:r,bookmark:a,...n}=t;return r?{...n,startkey:`e_${e}${a||r}`,endkey:`e_${e}${r}${q.UNICODE_MAX}`}:{...t,startkey:`g_${e}`,endkey:`g_${e}${q.UNICODE_MAX}`,startkey_docid:a}}function tS(){return`${tc}${q.utils.newid()}`}async function Qa(e,t){let r=q.tenancy.getGlobalDB();return(await q.db.queryView(q.db.ViewName.USER_BY_GROUP,ac(e,t),r,ec,{arrayResponse:!0})).map(n=>({_id:n.userId,email:n.email}))||[]}async function Cr(e,t){return e.users=await Qa(e._id),e.roles&&(e.roles=Object.fromEntries(Object.entries(e.roles).filter(([r])=>t.includes(r)))),e}async function rS(e){let r=(await Cr(e,await xr())).users?.map(o=>o._id),a=await q.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 q.users.bulkUpdateGlobalUsers(n)}async function nc(){return(await q.tenancy.getGlobalDB().allDocs(rc(null,{include_docs:!0}))).rows.map(t=>t.doc)}async function aS(){let[e,t]=await Promise.all([nc(),xr()]),r=[];for(let a of e)r.push(Cr(a,t));return await Promise.all(r)}async function nS(e){let t=q.tenancy.getGlobalDB(),[r,a]=await Promise.all([t.get(e),xr()]);return await Cr(r,a)}async function oS(e,t={enriched:!0}){let r=q.tenancy.getGlobalDB(),[a,n]=await Promise.all([r.getMultiple(e,{allowMissing:!0}),xr()]);if(t?.enriched){let o=[];for(let s of a)o.push(Cr(s,n));return await Promise.all(o)}else return a}async function sS(e){return await q.tenancy.getGlobalDB().put(e)}async function iS(e){return await q.tenancy.getGlobalDB().bulkDocs(e)}async function uS(e,t){let r=q.tenancy.getGlobalDB(),a=await r.get(e),n=await r.remove(e,t);return await rS(a),n}async function Io(e){let t=e.toLowerCase(),[r,a]=await Promise.all([nc(),xr()]),n=r.find(o=>o.name.toLowerCase()===t);if(n)return await Cr(n,a)}var _e={};w(_e,{deleteAppBackupMetadata:()=>SS,fetchAppBackups:()=>AS,generateAppBackupID:()=>Ac,getAppBackupMetadata:()=>wS,oldestBackupDate:()=>yc,storeAppBackupMetadata:()=>bS,updateAppBackupMetadata:()=>IS});var W=require("@budibase/backend-core"),gc=require("@budibase/types");var Qr={};w(Qr,{GENERIC_PAGE_SIZE:()=>$e,auditLogs:()=>Qt,licenses:()=>Ae,quotas:()=>et,versions:()=>jr});var Ae={};w(Ae,{CLOUD_FREE_LICENSE:()=>pS,SELF_FREE_LICENSE:()=>So,UNLIMITED:()=>F,UNLIMITED_LICENSE:()=>lS});var ft=require("@budibase/types");var et={};w(et,{UNLIMITED:()=>cS,actions:()=>kr,appBackupRetentionDays:()=>Fr,apps:()=>Lr,automationLogRetentionDays:()=>Gr,automations:()=>Br,budibaseAICredits:()=>Mr,creators:()=>Ur,customAIConfigurations:()=>Wr,plugins:()=>Dr,queries:()=>Nr,rows:()=>Or,userGroups:()=>qr,users:()=>Pr});var oe=require("@budibase/types"),cS=-1,Or=e=>({[oe.StaticQuotaName.ROWS]:{name:"Rows",value:e,triggers:[90,100]}}),Lr=e=>({[oe.StaticQuotaName.APPS]:{name:"Workspaces",value:e,triggers:[100]}}),Pr=e=>({[oe.StaticQuotaName.USERS]:{name:"Users",value:e,triggers:[80,100]}}),Ur=e=>({[oe.StaticQuotaName.CREATORS]:{name:"Creators",value:e,triggers:[]}}),qr=e=>({[oe.StaticQuotaName.USER_GROUPS]:{name:"User Groups",value:e,triggers:[80,100]}}),Dr=e=>({[oe.StaticQuotaName.PLUGINS]:{name:"Plugins",value:e,triggers:[90,100]}}),Nr=e=>({[oe.MonthlyQuotaName.QUERIES]:{name:"Queries",value:e,triggers:[]}}),Br=e=>({[oe.MonthlyQuotaName.AUTOMATIONS]:{name:"Automations",value:e,triggers:[80,90,100]}}),Mr=e=>({[oe.MonthlyQuotaName.BUDIBASE_AI_CREDITS]:{name:"Budibase AI Credits",value:e,triggers:[80,90,100]}}),kr=e=>({[oe.MonthlyQuotaName.ACTIONS]:{name:"Actions",value:e,triggers:[80,90,100]}}),Gr=e=>({[oe.ConstantQuotaName.AUTOMATION_LOG_RETENTION_DAYS]:{name:"Automation Logs",value:e,triggers:[]}}),Fr=e=>({[oe.ConstantQuotaName.APP_BACKUPS_RETENTION_DAYS]:{name:"App Backups",value:e,triggers:[]}}),Wr=e=>({[oe.StaticQuotaName.AI_CUSTOM_CONFIGS]:{name:"Custom AI Configuration",value:e,triggers:[]}});var F=-1,pS={features:[],quotas:{usage:{monthly:{...Nr(F),...Br(200),...Mr(5e4),...kr(F)},static:{...Lr(F),...Or(2e3),...Pr(5),...Ur(5),...qr(0),...Dr(10),...Wr(0)}},constant:{...Gr(1),...Fr(0)}},plan:{type:ft.PlanType.FREE,usesInvoicing:!1,model:ft.PlanModel.PER_USER}},So={features:[],quotas:{usage:{monthly:{...Nr(F),...Br(F),...Mr(5e4),...kr(F)},static:{...Or(F),...Lr(F),...Pr(20),...Ur(F),...qr(0),...Dr(10),...Wr(0)}},constant:{...Gr(1),...Fr(0)}},plan:{type:ft.PlanType.FREE,usesInvoicing:!1,model:ft.PlanModel.PER_USER}},lS={features:[],quotas:{usage:{monthly:{...Nr(F),...Br(F),...Mr(F),...kr(F)},static:{...Lr(F),...Or(F),...Pr(F),...Ur(F),...qr(F),...Dr(F),...Wr(F)}},constant:{...Gr(F),...Fr(F)}},plan:{type:ft.PlanType.FREE,usesInvoicing:!1,model:ft.PlanModel.PER_USER}};var jr={};w(jr,{getLicenseVersion:()=>dS,getProVersion:()=>sc});var Rt=require("@budibase/backend-core"),$a=P(require("fs")),oc=P(require("path")),dS=()=>{if(Rt.env.isDev()){let e="dev-version.txt",t=oc.default.join(Rt.objectStore.budibaseTempDir(),e);if($a.default.existsSync(t))return $a.default.readFileSync(t,"utf8");{let r=Rt.utils.newid();return $a.default.writeFileSync(t,r),r}}else return sc()},sc=()=>{let e=Rt.env.VERSION;if(!e)throw new Error("No budibase pro version was specified");return e};var Qt={};w(Qt,{searchTable:()=>fS});var vt=require("@budibase/types"),ic=require("@budibase/backend-core");function fS(){return{type:"table",sourceType:vt.TableSourceType.INTERNAL,name:vt.AUDIT_LOG_TYPE,sourceId:ic.SQS_DATASOURCE_INTERNAL,primary:["_id"],schema:{metadata:{name:"metadata",type:vt.FieldType.JSON},fallback:{name:"fallback",type:vt.FieldType.JSON}}}}var $e=9;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 uc=require("@budibase/types");var mS=new Date(864e13).toISOString(),gS=1e3*60*60*24;async function Ka(e){let r=(await Ne.getCachedLicense()).quotas?.[uc.QuotaType.CONSTANT]?.[e]?.value||0;return r===Ae.UNLIMITED?new Date(mS).toISOString():new Date(new Date().getTime()-gS*r).toISOString()}var $t=require("@budibase/backend-core"),{ViewName:pc,AutomationViewMode:wo,SEPARATOR:Ve,DocumentType:lc,createView:dc}=$t.db,yS=lc.AUTOMATION_LOG+Ve,cc=lc.APP_BACKUP+Ve;async function fc(){let e=$t.context.getProdWorkspaceDB(),t=`function(doc) {
11
+ if (doc._id.startsWith("${yS}")) {
12
+ let autoId = doc.automationId + "${Ve}"
13
+ let status = doc.status + "${Ve}"
14
+ let autoKey = "${wo.AUTOMATION}${Ve}" + autoId + doc.createdAt
15
+ let statusKey = "${wo.STATUS}${Ve}" + status + doc.createdAt
16
+ let allKey = "${wo.ALL}${Ve}" + status + autoId + doc.createdAt
17
17
  emit(statusKey)
18
18
  emit(autoKey)
19
19
  emit(allKey)
20
20
  }
21
- }`;await up(e,t,sp.AUTOMATION_LOGS)}async function cp(){let e=Wt.tenancy.getGlobalDB(),t=`function(doc) {
22
- if (doc._id.startsWith("${op}") && doc.type && doc.trigger) {
23
- let full = doc.appId + "${$e}"
24
- full += doc.trigger.toLowerCase() + "${$e}"
25
- full += doc.type.toLowerCase() + "${$e}"
26
- emit("${op}" + full + doc.timestamp)
21
+ }`;await dc(e,t,pc.AUTOMATION_LOGS)}async function mc(){let e=$t.tenancy.getGlobalDB(),t=`function(doc) {
22
+ if (doc._id.startsWith("${cc}") && doc.type && doc.trigger) {
23
+ let full = doc.appId + "${Ve}"
24
+ full += doc.trigger.toLowerCase() + "${Ve}"
25
+ full += doc.type.toLowerCase() + "${Ve}"
26
+ emit("${cc}" + full + doc.timestamp)
27
27
  }
28
- }`;await up(e,t,sp.APP_BACKUP_BY_TRIGGER)}var mp=require("@budibase/types");var $r={};w($r,{GENERIC_PAGE_SIZE:()=>Ke,auditLogs:()=>$t,licenses:()=>Ae,quotas:()=>et,versions:()=>Wr});var Ae={};w(Ae,{CLOUD_FREE_LICENSE:()=>lS,SELF_FREE_LICENSE:()=>wo,UNLIMITED:()=>F,UNLIMITED_LICENSE:()=>dS});var ft=require("@budibase/types");var et={};w(et,{UNLIMITED:()=>cS,actions:()=>Gr,appBackupRetentionDays:()=>jr,apps:()=>Pr,automationLogRetentionDays:()=>Fr,automations:()=>Mr,budibaseAICredits:()=>kr,creators:()=>qr,customAIConfigurations:()=>Qr,plugins:()=>Nr,queries:()=>Br,rows:()=>Lr,userGroups:()=>Dr,users:()=>Ur});var oe=require("@budibase/types"),cS=-1,Lr=e=>({[oe.StaticQuotaName.ROWS]:{name:"Rows",value:e,triggers:[90,100]}}),Pr=e=>({[oe.StaticQuotaName.APPS]:{name:"Workspaces",value:e,triggers:[100]}}),Ur=e=>({[oe.StaticQuotaName.USERS]:{name:"Users",value:e,triggers:[80,100]}}),qr=e=>({[oe.StaticQuotaName.CREATORS]:{name:"Creators",value:e,triggers:[]}}),Dr=e=>({[oe.StaticQuotaName.USER_GROUPS]:{name:"User Groups",value:e,triggers:[80,100]}}),Nr=e=>({[oe.StaticQuotaName.PLUGINS]:{name:"Plugins",value:e,triggers:[90,100]}}),Br=e=>({[oe.MonthlyQuotaName.QUERIES]:{name:"Queries",value:e,triggers:[]}}),Mr=e=>({[oe.MonthlyQuotaName.AUTOMATIONS]:{name:"Automations",value:e,triggers:[80,90,100]}}),kr=e=>({[oe.MonthlyQuotaName.BUDIBASE_AI_CREDITS]:{name:"Budibase AI Credits",value:e,triggers:[80,90,100]}}),Gr=e=>({[oe.MonthlyQuotaName.ACTIONS]:{name:"Actions",value:e,triggers:[80,90,100]}}),Fr=e=>({[oe.ConstantQuotaName.AUTOMATION_LOG_RETENTION_DAYS]:{name:"Automation Logs",value:e,triggers:[]}}),jr=e=>({[oe.ConstantQuotaName.APP_BACKUPS_RETENTION_DAYS]:{name:"App Backups",value:e,triggers:[]}}),Qr=e=>({[oe.StaticQuotaName.AI_CUSTOM_CONFIGS]:{name:"Custom AI Configuration",value:e,triggers:[]}});var F=-1,lS={features:[],quotas:{usage:{monthly:{...Br(F),...Mr(200),...kr(5e4),...Gr(F)},static:{...Pr(F),...Lr(2e3),...Ur(5),...qr(5),...Dr(0),...Nr(10),...Qr(0)}},constant:{...Fr(1),...jr(0)}},plan:{type:ft.PlanType.FREE,usesInvoicing:!1,model:ft.PlanModel.PER_USER}},wo={features:[],quotas:{usage:{monthly:{...Br(F),...Mr(F),...kr(5e4),...Gr(F)},static:{...Lr(F),...Pr(F),...Ur(20),...qr(F),...Dr(0),...Nr(10),...Qr(0)}},constant:{...Fr(1),...jr(0)}},plan:{type:ft.PlanType.FREE,usesInvoicing:!1,model:ft.PlanModel.PER_USER}},dS={features:[],quotas:{usage:{monthly:{...Br(F),...Mr(F),...kr(F),...Gr(F)},static:{...Pr(F),...Lr(F),...Ur(F),...qr(F),...Dr(F),...Nr(F),...Qr(F)}},constant:{...Fr(F),...jr(F)}},plan:{type:ft.PlanType.FREE,usesInvoicing:!1,model:ft.PlanModel.PER_USER}};var Wr={};w(Wr,{getLicenseVersion:()=>fS,getProVersion:()=>dp});var Rt=require("@budibase/backend-core"),$a=P(require("fs")),lp=P(require("path")),fS=()=>{if(Rt.env.isDev()){let e="dev-version.txt",t=lp.default.join(Rt.objectStore.budibaseTempDir(),e);if($a.default.existsSync(t))return $a.default.readFileSync(t,"utf8");{let r=Rt.utils.newid();return $a.default.writeFileSync(t,r),r}}else return dp()},dp=()=>{let e=Rt.env.VERSION;if(!e)throw new Error("No budibase pro version was specified");return e};var $t={};w($t,{searchTable:()=>mS});var vt=require("@budibase/types"),fp=require("@budibase/backend-core");function mS(){return{type:"table",sourceType:vt.TableSourceType.INTERNAL,name:vt.AUDIT_LOG_TYPE,sourceId:fp.SQS_DATASOURCE_INTERNAL,primary:["_id"],schema:{metadata:{name:"metadata",type:vt.FieldType.JSON},fallback:{name:"fallback",type:vt.FieldType.JSON}}}}var Ke=9;var gS=new Date(864e13).toISOString(),yS=1e3*60*60*24;async function Ka(e){let r=(await Ne.getCachedLicense()).quotas?.[mp.QuotaType.CONSTANT]?.[e]?.value||0;return r===Ae.UNLIMITED?new Date(gS).toISOString():new Date(new Date().getTime()-yS*r).toISOString()}async function yp(){return Ka(gp.ConstantQuotaName.APP_BACKUPS_RETENTION_DAYS)}var To=`${j.db.DocumentType.APP_BACKUP}${j.db.SEPARATOR}`;async function hS(e,t,r={}){let a=await yp(),n=j.db.getProdAppID(e),o=n,s=n;if(t.trigger&&t.type){let i=`${j.db.SEPARATOR}${t.trigger}`;i+=`${j.db.SEPARATOR}${t.type}`,o+=i,s+=i}return(!t.startDate||t.startDate<a)&&(t.startDate=a),t.startDate&&(s+=`${j.db.SEPARATOR}${t.startDate}`),t.endDate&&(o+=`${j.db.SEPARATOR}${t.endDate}`),{...r,descending:!0,startkey:`${To}${o}${j.db.UNICODE_MAX}`,endkey:`${To}${s}`}}async function hp(e,t){try{let r=j.db.getQueryIndex(j.db.ViewName.APP_BACKUP_BY_TRIGGER);return await e.query(r,t)}catch(r){if(r!=null&&r.error==="not_found")return await cp(),hp(e,t);throw r}}function Ap(e,t){return`${To}${e}${j.db.SEPARATOR}${t}`}async function AS(e,t={}){let r=j.tenancy.getGlobalDB(),a,n=t.limit||9,o=await hS(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 hp(r,o);let s=Or(a,{paginate:t.paginate,pageSize:n}),i=[...new Set(s.data.filter(f=>f.createdBy).map(f=>f.createdBy))],p=await j.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 bS(e,t={}){let r=j.tenancy.getGlobalDB(),a=j.db.getProdAppID(e.appId),n=Ap(a,e.timestamp),o={...e,_id:n,appId:a,name:e.name};return o._id=t.docId||o._id,o._rev=t.docRev||o._rev,t.filename&&(o.filename=t.filename),e.createdBy&&(o.createdBy=j.db.getGlobalIDFromUserMetadataID(e.createdBy)),await r.put(o)}async function IS(e,t){let r=j.tenancy.getGlobalDB(),a=await r.get(e);return a.name=t,await r.put(a)}async function SS(e){let t=j.tenancy.getGlobalDB(),r=await t.get(e);await t.remove(r._id,r._rev)}async function wS(e){return await j.tenancy.getGlobalDB().get(e)}var _t={};w(_t,{get:()=>ES,getCacheEnvVarID:()=>Sp,getEnvVarID:()=>Va,update:()=>RS});var Be=require("@budibase/backend-core"),Ip=P(require("lru-cache")),TS=1e3,bp=new Ip.default({max:TS});function Va(){return Be.StaticDatabases.GLOBAL.docs.environmentVariables}function Sp(e){return`${Be.tenancy.getTenantId()}/${Va()}/${e||""}`}async function ES(){let e=Va(),t=Be.tenancy.getGlobalDB(),r,a=!1;try{r=await t.get(e)}catch(i){if(i.status==404)a=!0;else throw i}let n=Sp(r?._rev),o=bp.get(n);if(o)return o;let s;return!a&&r?s={...r,variables:JSON.parse(Be.encryption.decrypt(r.variables,Be.encryption.SecretOption.ENCRYPTION))}:s={_id:e,variables:{}},bp.set(n,s),s}async function RS(e){let t=Va();return await Be.tenancy.getGlobalDB().put({_id:e._id||t,_rev:e._rev||void 0,variables:Be.encryption.encrypt(JSON.stringify(e.variables),Be.encryption.SecretOption.ENCRYPTION)})}var Eo=require("dd-trace"),Ha=new fo(L.env.INTERNAL_ACCOUNT_PORTAL_URL),za=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{}},wp=async e=>{let t,r;if(L.env.SELF_HOSTED){if(t=await ve.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)},Tp=async()=>await Eo.tracer.trace("_getLicense",async()=>await wp(async e=>{let t=await We.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 We.setUsage(i,Ya.StaticQuotaName.USERS,Ya.QuotaUsageType.STATIC)}let r=await L.installation.getInstallFromDB(),a=L.tenancy.getTenantId(),n=await L.events.identification.getUniqueTenantId(a),o=Wr.getProVersion(),s={quotaUsage:t,tenantId:a,install:{id:r.installId,tenantId:n,version:o}};try{let i=await Ha.post("/api/license",{headers:{...e},body:s});if(i.status===404||i.status===403)return;if(i.status!==200){let p=await za(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()&&(Tp=jest.fn());var Kt=Tp;async function Ro(e){return await Eo.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 Ha.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 za(r);throw new L.HTTPError(`Error getting license: ${a}`,r.status)}return r.json()})}var vS=e=>wp(async t=>{let r=await Ha.post("/api/license/usage/triggered",{headers:{...t},body:e});if(r.status!==200){let a=await za(r);L.logging.logAlert(`Error triggering quota usage: ${a}`)}}),vo=async e=>{let t=await L.installation.getInstall(),r={installVersion:t.version,installId:t.installId},a=await Ha.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 za(a);throw new L.HTTPError(`Error activating license key: ${n}`,a.status)}return a.json()};var us=require("@budibase/backend-core");var mn={};w(mn,{activateOfflineLicenseToken:()=>cx,deleteOfflineLicenseToken:()=>lx,dev:()=>ma,enrichLicense:()=>gf,getIdentifier:()=>ns,getIdentifierBase64:()=>dx,getIdentifierFromBase64:()=>fx,getOfflineLicense:()=>os,getOfflineLicenseToken:()=>df,signing:()=>Yr,verifyExpiry:()=>ff,verifyInstallation:()=>mf});var Yr={};w(Yr,{sign:()=>xS,verifyLicenseToken:()=>Vr});var _o=P(require("jsonwebtoken")),_S=`-----BEGIN PUBLIC KEY-----
28
+ }`;await dc(e,t,pc.WORKSPACE_BACKUP_BY_TRIGGER)}async function yc(){return Ka(gc.ConstantQuotaName.APP_BACKUPS_RETENTION_DAYS)}var To=`${W.db.DocumentType.APP_BACKUP}${W.db.SEPARATOR}`;async function hS(e,t,r={}){let a=await yc(),n=W.db.getProdWorkspaceID(e),o=n,s=n;if(t.trigger&&t.type){let i=`${W.db.SEPARATOR}${t.trigger}`;i+=`${W.db.SEPARATOR}${t.type}`,o+=i,s+=i}return(!t.startDate||t.startDate<a)&&(t.startDate=a),t.startDate&&(s+=`${W.db.SEPARATOR}${t.startDate}`),t.endDate&&(o+=`${W.db.SEPARATOR}${t.endDate}`),{...r,descending:!0,startkey:`${To}${o}${W.db.UNICODE_MAX}`,endkey:`${To}${s}`}}async function hc(e,t){try{let r=W.db.getQueryIndex(W.db.ViewName.WORKSPACE_BACKUP_BY_TRIGGER);return await e.query(r,t)}catch(r){if(r!=null&&r.error==="not_found")return await mc(),hc(e,t);throw r}}function Ac(e,t){return`${To}${e}${W.db.SEPARATOR}${t}`}async function AS(e,t={}){let r=W.tenancy.getGlobalDB(),a,n=t.limit||9,o=await hS(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 hc(r,o);let s=$r(a,{paginate:t.paginate,pageSize:n}),i=[...new Set(s.data.filter(f=>f.createdBy).map(f=>f.createdBy))],c=await W.users.bulkGetGlobalUsersById(i,{cleanup:!0});for(let f of c)for(let m of s.data)f?._id===m.createdBy&&(m.createdBy=f);return s}async function bS(e,t={}){let r=W.tenancy.getGlobalDB(),a=W.db.getProdWorkspaceID(e.appId),n=Ac(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=W.db.getGlobalIDFromUserMetadataID(e.createdBy)),await r.put(o)}async function IS(e,t){let r=W.tenancy.getGlobalDB(),a=await r.get(e);return a.name=t,await r.put(a)}async function SS(e){let t=W.tenancy.getGlobalDB(),r=await t.get(e);await t.remove(r._id,r._rev)}async function wS(e){return await W.tenancy.getGlobalDB().get(e)}var _t={};w(_t,{get:()=>ES,getCacheEnvVarID:()=>Sc,getEnvVarID:()=>Va,update:()=>RS});var Be=require("@budibase/backend-core"),Ic=P(require("lru-cache")),TS=1e3,bc=new Ic.default({max:TS});function Va(){return Be.StaticDatabases.GLOBAL.docs.environmentVariables}function Sc(e){return`${Be.tenancy.getTenantId()}/${Va()}/${e||""}`}async function ES(){let e=Va(),t=Be.tenancy.getGlobalDB(),r,a=!1;try{r=await t.get(e)}catch(i){if(i.status==404)a=!0;else throw i}let n=Sc(r?._rev),o=bc.get(n);if(o)return o;let s;return!a&&r?s={...r,variables:JSON.parse(Be.encryption.decrypt(r.variables,Be.encryption.SecretOption.ENCRYPTION))}:s={_id:e,variables:{}},bc.set(n,s),s}async function RS(e){let t=Va();return await Be.tenancy.getGlobalDB().put({_id:e._id||t,_rev:e._rev||void 0,variables:Be.encryption.encrypt(JSON.stringify(e.variables),Be.encryption.SecretOption.ENCRYPTION)})}var Eo=require("dd-trace"),Ha=new fo(L.env.INTERNAL_ACCOUNT_PORTAL_URL),za=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{}},wc=async e=>{let t,r;if(L.env.SELF_HOSTED){if(t=await ve.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)},Tc=async()=>await Eo.tracer.trace("_getLicense",async()=>await wc(async e=>{let t=await Qe.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 Qe.setUsage(i,Ya.StaticQuotaName.USERS,Ya.QuotaUsageType.STATIC)}let r=await L.installation.getInstallFromDB(),a=L.tenancy.getTenantId(),n=await L.events.identification.getUniqueTenantId(a),o=jr.getProVersion(),s={quotaUsage:t,tenantId:a,install:{id:r.installId,tenantId:n,version:o}};try{let i=await Ha.post("/api/license",{headers:{...e},body:s});if(i.status===404||i.status===403)return;if(i.status!==200){let c=await za(i);throw new L.HTTPError(`Error getting license: ${c}`,i.status)}return i.json()}catch(i){if(L.env.DISABLE_ACCOUNT_PORTAL)return;throw i}}));L.env.isJest()&&(Tc=jest.fn());var Kt=Tc;async function Ro(e){return await Eo.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 Ha.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 za(r);throw new L.HTTPError(`Error getting license: ${a}`,r.status)}return r.json()})}var vS=e=>wc(async t=>{let r=await Ha.post("/api/license/usage/triggered",{headers:{...t},body:e});if(r.status!==200){let a=await za(r);L.logging.logAlert(`Error triggering quota usage: ${a}`)}}),vo=async e=>{let t=await L.installation.getInstall(),r={installVersion:t.version,installId:t.installId},a=await Ha.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 za(a);throw new L.HTTPError(`Error activating license key: ${n}`,a.status)}return a.json()};var us=require("@budibase/backend-core");var mn={};w(mn,{activateOfflineLicenseToken:()=>px,deleteOfflineLicenseToken:()=>lx,dev:()=>ma,enrichLicense:()=>gf,getIdentifier:()=>ns,getIdentifierBase64:()=>dx,getIdentifierFromBase64:()=>fx,getOfflineLicense:()=>os,getOfflineLicenseToken:()=>df,signing:()=>Yr,verifyExpiry:()=>ff,verifyInstallation:()=>mf});var Yr={};w(Yr,{sign:()=>xS,verifyLicenseToken:()=>Vr});var _o=P(require("jsonwebtoken")),_S=`-----BEGIN PUBLIC KEY-----
29
29
  MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvz3jePLCFBXZ19c8Dpkv
30
30
  XtSgOhKFOcvQdo/LV0KJRUzQWDPWuO4ILtBtnqhjtIzZH4CH0qCYBet5L6Qr4CM1
31
31
  l2HXiAD1Q2rlHNW9wDaYyKb1F5f+v4RyqCAyzlkwRdksmkLeECTboojNnmRCrE3C
@@ -34,8 +34,8 @@ l2HXiAD1Q2rlHNW9wDaYyKb1F5f+v4RyqCAyzlkwRdksmkLeECTboojNnmRCrE3C
34
34
  d/o3ZWE1TTj1zYwlCLN5qRKr3hU8nC3xEYNEbkB9SfTRaOq9Q7P8WmfLkoCPm3pR
35
35
  mwIDAQAB
36
36
  -----END PUBLIC KEY-----
37
- `;function Vr(e){return _o.default.verify(e,_S,{algorithms:["RS256"]})}function xS(e,t){return _o.default.sign(t,e,{encoding:"utf-8",algorithm:"RS256"})}var Ja={};w(Ja,{getFeatures:()=>xo});var c=require("@budibase/types");var CS={[c.PlanType.FREE]:[...Ae.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.Feature.RECAPTCHA,c.Feature.PKCE_OIDC],[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.Feature.RECAPTCHA,c.Feature.PKCE_OIDC],[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,c.Feature.RECAPTCHA,c.Feature.PKCE_OIDC]},OS={[c.PlanType.FREE]:[...Ae.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.Feature.RECAPTCHA,c.Feature.PKCE_OIDC],[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.Feature.RECAPTCHA,c.Feature.PKCE_OIDC],[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,c.Feature.RECAPTCHA,c.Feature.PKCE_OIDC]};function xo(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(CS);break;case c.Hosting.CLOUD:r=a(OS);break}return r}var Xa={};w(Xa,{UNLIMITED:()=>d,getQuotas:()=>Co});var k=require("@budibase/types");var l=et,Ep=Ae,d=-1,Hr=e=>e*1e6,LS={[k.PlanType.FREE]:{...Ep.CLOUD_FREE_LICENSE.quotas},[k.PlanType.PREMIUM]:{usage:{monthly:{...l.queries(d),...l.automations(1e3),...l.budibaseAICredits(0),...l.actions(d)},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)}},[k.PlanType.PREMIUM_PLUS]:{usage:{monthly:{...l.queries(d),...l.automations(5e3),...l.budibaseAICredits(Hr(2)),...l.actions(d)},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)}},[k.PlanType.PREMIUM_PLUS_TRIAL]:{usage:{monthly:{...l.queries(d),...l.automations(5e3),...l.budibaseAICredits(Hr(2)),...l.actions(d)},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)}},[k.PlanType.PRO]:{usage:{monthly:{...l.queries(d),...l.automations(1e3),...l.budibaseAICredits(0),...l.actions(d)},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)}},[k.PlanType.TEAM]:{usage:{monthly:{...l.queries(d),...l.automations(5e3),...l.budibaseAICredits(0),...l.actions(d)},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)}},[k.PlanType.BUSINESS]:{usage:{monthly:{...l.queries(d),...l.automations(1e4),...l.budibaseAICredits(0),...l.actions(d)},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)}},[k.PlanType.ENTERPRISE_BASIC]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(Hr(4)),...l.actions(d)},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)}},[k.PlanType.ENTERPRISE_BASIC_TRIAL]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(Hr(4)),...l.actions(d)},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)}},[k.PlanType.ENTERPRISE]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(Hr(4)),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(d),...l.plugins(d),...l.customAIConfigurations(d)}},constant:{...l.automationLogRetentionDays(d),...l.appBackupRetentionDays(d)}}},PS={[k.PlanType.FREE]:{...Ep.SELF_FREE_LICENSE.quotas},[k.PlanType.PREMIUM]:void 0,[k.PlanType.PREMIUM_PLUS]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0),...l.actions(d)},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)}},[k.PlanType.PREMIUM_PLUS_TRIAL]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0),...l.actions(d)},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)}},[k.PlanType.PRO]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0),...l.actions(d)},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)}},[k.PlanType.TEAM]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0),...l.actions(d)},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)}},[k.PlanType.BUSINESS]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0),...l.actions(d)},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)}},[k.PlanType.ENTERPRISE_BASIC]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0),...l.actions(d)},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)}},[k.PlanType.ENTERPRISE_BASIC_TRIAL]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0),...l.actions(d)},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)}},[k.PlanType.ENTERPRISE]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0),...l.actions(d)},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 Co(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 k.Hosting.SELF:r=a(PS);break;case k.Hosting.CLOUD:r=a(LS);break}return JSON.parse(JSON.stringify(r))}var Yt={};w(Yt,{appExists:()=>US,encoding:()=>Vt});var Rp=require("@budibase/backend-core");async function US(e){return(await Rp.db.getAllApps({all:!0,idsOnly:!0})).includes(e)}var Vt={};w(Vt,{base64ToObject:()=>DS,objectToBase64:()=>qS});function qS(e){let t=JSON.stringify(e);return Buffer.from(t).toString("base64")}function DS(e){let t=Buffer.from(e,"base64").toString();return JSON.parse(t)}var pf=require("@budibase/types"),ir=require("@budibase/backend-core"),cf=P(Fl()),lf=P(as());async function cx(e){await ve.save({offlineLicenseToken:e}),await Ct()}async function lx(){await ve.save({offlineLicenseToken:void 0}),await Ct()}async function df(){return(await ve.get()).offlineLicenseToken}async function ns(){let t=(await ir.installation.getInstall()).installId,r=ir.context.getTenantId(),a=await ir.events.identification.getUniqueTenantId(r);return{installId:t,tenantId:a}}async function dx(){let e=await ns();return Vt.objectToBase64(e)}function fx(e){return Vt.base64ToObject(e)}function ff(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 mf(e){let t=await ns();if(e.identifier.installId!==t.installId||e.identifier.tenantId!==t.tenantId)throw new Error("Invalid offline license")}function gf(e){let t=e.plan.type,r=pf.Hosting.SELF,a=xo(r,t),n=Co(r,t);return e.features=(0,cf.default)(e.features,a),e.quotas=(0,lf.default)(e.quotas,n),e}async function os(){try{let e=await df();if(e){let t=await Vr(e);return ff(t),await mf(t),gf(t)}}catch(e){console.error("Error retrieving offline license",e)}}var ma={};w(ma,{deleteDevLicense:()=>Ax,getOfflineLicense:()=>yx,writeDevLicenseToDisk:()=>hx});var yf=require("@budibase/backend-core"),is=require("path"),hf=require("os"),Ot=P(require("fs"));var mx=yf.env.isTest()?".budibase-test":".budibase",ss=(0,is.join)((0,hf.tmpdir)(),mx),gx="dev_license.txt",fa=(0,is.join)(ss,gx);if(!Ot.default.existsSync(ss))try{Ot.default.mkdirSync(ss)}catch{}function yx(){try{if(Ot.default.existsSync(fa)){let e=Ot.default.readFileSync(fa,{encoding:"utf-8"});return Vr(e)}}catch(e){console.error("Error retrieving offline license from disk",e)}}function hx(e){console.log(`Writing license to: ${fa}`),Ot.default.writeFileSync(fa,e,{encoding:"utf-8"})}function Ax(){Ot.default.rmSync(fa,{force:!0})}var Af=require("dd-trace"),ps=async()=>await Af.tracer.trace("getLicense",async e=>{if(us.env.OFFLINE_MODE)return e.addTags({offline:!0}),os();let t=await Kt();return t||(e.addTags({offlineFallback:!0}),t=ma.getOfflineLicense()),t}),cs=e=>Ro(e),ls=()=>us.env.SELF_HOSTED?Ae.SELF_FREE_LICENSE:Ae.CLOUD_FREE_LICENSE;var fs={};w(fs,{activateLicenseKey:()=>bx,deleteLicenseKey:()=>Ix,getLicenseKey:()=>gn});var ds=P(require("dd-trace"));async function bx(e){await vo(e),await ve.save({licenseKey:e}),await Ct()}async function gn(){return await ds.default.trace("getLicenseKey",async e=>{let t=await ve.get();return e.addTags({licenseKey:t.licenseKey}),t.licenseKey})}async function Ix(){return await ds.default.trace("deleteLicenseKey",async()=>{await ve.save({licenseKey:void 0}),await Ct()})}var Lt=require("@budibase/backend-core"),yn=P(require("dd-trace")),bf=3600,Ct=async()=>{await wf(),await Sf()},If=async(e,t)=>{let{populateLicense:r=ps,populateFreeLicense:a=ls}=t||{};return await yn.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 po(),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 yn.default.trace("populateLicense",async()=>await r(s)),n.addTags({populatedLicense:!!p}),p||(p=yn.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:bf}),await i.store(s,p,bf),p)})};Lt.env.isJest()&&(If=jest.fn());var Sf=If,wf=async()=>{let e=Lt.tenancy.getTenantId();await(await po()).delete(e)};async function re(e,t){Array.isArray(e)||(e=[e]),t||(t=await Ne.getCachedLicense());for(let r of e)if(!t?.features.includes(r))return!1;return!0}async function hn(e,t){if(!await re(e,t))throw new tt.FeatureDisabledError(`${e} is not currently enabled`,e)}async function ms(e,t){if(!await re(e,t)){let r=e.join(", ");throw new tt.FeatureDisabledError(`${r} are not currently enabled`,r)}}function ce(e){return async(...t)=>(await hn(te.Feature.APP_BACKUPS),e(...t))}async function gs(){return re(te.Feature.APP_BACKUPS)}async function ys(){return re(te.Feature.BRANDING)}async function Tf(){return re(te.Feature.ENFORCEABLE_SSO)}async function wx(){return re(te.Feature.SYNC_AUTOMATIONS)}async function Tx(){return re(te.Feature.TRIGGER_AUTOMATION_RUN)}async function Pt(){return re(te.Feature.APP_BUILDERS)}async function An(){return re(te.Feature.AUDIT_LOGS)}async function hs(){return re(te.Feature.USER_GROUPS)}function Ex(){return re(te.Feature.PWA)}function Rx(){return re(te.Feature.RECAPTCHA)}var vx=()=>re(te.Feature.PKCE_OIDC);async function rt(){return re(te.Feature.EXPANDED_PUBLIC_API)}async function _x(e){if(tt.env.ENABLE_SSO_MAINTENANCE_MODE||!await Tf())return!1;let r;return e?.config?r=e.config:r=await tt.configs.getSettingsConfig(),!!r.isSSOEnforced}var As=async()=>{let e=te.Feature.SCIM,t=await re(e),r=await tt.configs.getSCIMConfig();if(!t||!r?.enabled)throw new tt.FeatureDisabledError(`${e} is not currently enabled`,e);return!0};async function xx(){return re(te.Feature.VIEW_PERMISSIONS)}async function Cx(){return re(te.Feature.VIEW_READONLY_COLUMNS)}var Ox={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 Lx(e){return await ys()?{faviconUrl:e.faviconUrl,faviconUrlEtag:e.faviconUrlEtag,emailBrandingEnabled:e.emailBrandingEnabled,testimonialsEnabled:e.testimonialsEnabled,platformTitle:e.platformTitle,loginHeading:e.loginHeading,loginButton:e.loginButton,metaDescription:e.metaDescription,metaImageUrl:e.metaImageUrl,metaTitle:e.metaTitle}:Ox}var Is={};w(Is,{enrichAIConfig:()=>bs});var Ef=require("@budibase/backend-core"),Px="budibase_ai";async function bs(e){if(Ef.env.SELF_HOSTED)return e;for(let t of Object.values(e.config))if(t.provider==="BudibaseAI")return e;return e.config[Px]={provider:"BudibaseAI",active:!0,isDefault:Object.keys(e.config).every(t=>!e.config[t].isDefault),defaultModel:process.env.BUDIBASE_AI_DEFAULT_MODEL||"gpt-5-mini",name:"Budibase AI"},e}var ze={};w(ze,{addAction:()=>Bx,addApp:()=>Mx,addAutomation:()=>Wx,addGroup:()=>ws,addPlugin:()=>Es,addRow:()=>Gx,addRows:()=>jx,addUsers:()=>wn,bustCache:()=>yo,decrement:()=>at,decrementMany:()=>ga,getCurrentUsageValues:()=>Xu,getLicensedQuota:()=>vf,getQuotaUsage:()=>Et,increment:()=>Ie,incrementBudibaseAICredits:()=>En,incrementMany:()=>qt,removeApp:()=>kx,removeGroup:()=>Ts,removePlugin:()=>Rs,removeRow:()=>Fx,removeRows:()=>Qx,removeUsers:()=>lr,set:()=>Ss,setAllUsage:()=>Ao,setAppUsageValue:()=>ho,setUsage:()=>Hu,setUsagePerApp:()=>zu,updatePluginCount:()=>vs,updateUsage:()=>ur,usageLimitIsExceeded:()=>Nx,utils:()=>_r});var In=require("@budibase/types");var z=require("@budibase/types");var ke=require("@budibase/backend-core");var Ut=require("dd-trace"),Ie=async(e,t,r)=>await Ut.tracer.trace("quotas.increment",async a=>(a.addTags({name:e,type:t}),await Rf({change:1,name:e,type:t,opts:r}))),qt=e=>Ut.tracer.trace("quotas.incrementMany",async()=>Rf(e)),Rf=async e=>await Ut.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 Ut.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]}),at=(e,t,r={})=>ur({usageChange:-1,name:e,type:t,opts:r}),ga=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})))},Ss=async(e,t,r)=>We.setUsage(r,e,t),Ux=(e,t,r)=>{if(e==z.QuotaUsageType.STATIC){let a=r.usageQuota.triggers;return a?a[t]||{}:{}}else{let a=We.utils.getCurrentMonthString(),n=r.monthly[a].triggers;return n?n[t]||{}:{}}},qx=async(e,t,r,a)=>{try{await ke.locks.doWithLock({type:z.LockType.TRY_ONCE,name:z.LockName.TRIGGER_QUOTA,resource:e,ttl:1e4},async()=>{let n={percentage:r,name:t.name};a&&(n.resetDate=a),await mt.triggerQuota(n)})}catch(n){ke.logging.logAlert("Error triggering quota",n)}},Dx=async(e,t,r,a)=>{let n=await Et(),o=e===z.QuotaUsageType.MONTHLY?n.quotaReset:void 0,s=await Ux(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!==et.UNLIMITED){if(!s[m]){s[m]=new Date().toISOString();let y=i[f+1]||100;(!(p>=y)||p===m)&&await qx(t,a,p,o)}}else s[m]=void 0;return s},ur=async e=>{await Ut.tracer.trace("quotas.updateUsage",async t=>{let r=ke.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 y of a)await Ut.tracer.trace("quotas.updateUsage.action",async I=>{I.addTags({actionName:y.name,actionType:y.type,actionUsageChange:y.usageChange});try{n=ke.context.getAppId()}catch{}if(z.APP_QUOTA_NAMES.includes(y.name)&&!n)throw new Error("App context required for quota update");try{o=await vf(z.QuotaType.USAGE,y.name,y.type),s.push(o);let{total:_,app:v,breakdown:R}=await We.getCurrentUsageValues(y.type,y.name,y.opts?.id);_+=y.usageChange,v!=null&&(v+=y.usageChange),R!=null&&(R+=y.usageChange);let U={};if(y.opts?.dryRun||(U=await Dx(y.type,y.name,_,o),m={...m,[y.name]:U}),o.value!==et.UNLIMITED&&_>o.value&&y.usageChange>0)throw new ke.UsageLimitError(`Licensed ${o.name} of ${o.value} has been exceeded`,o.name);if(_=Math.max(0,_),v&&(v=Math.max(0,v)),R&&(R=Math.max(0,R),f={...f,[y.name]:R}),!y.opts?.dryRun){let qe=y.opts?.valueFn;qe&&(_=await qe(),v=_),i={...i,[y.name]:_},p={...p,[y.name]:v}}}catch(_){throw y.opts?.suppressErrorLog||console.error(`Error updating usage quotas for ${y.name}`,_),_}});let g=a.filter(y=>!y.opts?.dryRun).map(y=>({name:y.name,type:y.type,values:{total:i[y.name],app:p[y.name],breakdown:f[y.name],triggers:m[y.name]},opts:{...y.opts,tenantId:r}}));g.length>0&&await We.setAllUsage(g)})},vf=async(e,t,r)=>{let a=await Ne.getCachedLicense();if(!a){let n=ke.tenancy.getTenantId();throw new Error("License not found for tenant id "+n)}if(r&&(0,z.isStaticQuota)(e,r,t))return a.quotas[e][r][t];if(r&&(0,z.isMonthlyQuota)(e,r,t))return a.quotas[e][r][t];if((0,z.isConstantQuota)(e,t))return a.quotas[e][t];throw new Error("Invalid quota type")},Nx=async({name:e,type:t,usageChange:r})=>{try{return await ur({usageChange:r,name:e,type:t,opts:{dryRun:!0}}),!1}catch(a){if(a.code===z.ErrorCode.USAGE_LIMIT_EXCEEDED)return!0;throw a}};var Bx=async e=>Ie(In.MonthlyQuotaName.ACTIONS,In.QuotaUsageType.MONTHLY,{fn:e});var pr=require("@budibase/types"),_f=require("@budibase/backend-core"),xf=async()=>{let e=await _f.db.getAllApps({dev:!0});return e?e.length:0},Mx=async(e,{appId:t}={})=>Ie(pr.StaticQuotaName.APPS,pr.QuotaUsageType.STATIC,{fn:e,valueFn:xf,id:t}),kx=async({appId:e}={})=>at(pr.StaticQuotaName.APPS,pr.QuotaUsageType.STATIC,{valueFn:xf,id:e});var Ye=require("@budibase/types"),Gx=async(e,{tableId:t}={})=>Ie(Ye.StaticQuotaName.ROWS,Ye.QuotaUsageType.STATIC,{fn:e,id:t}),Fx=async({tableId:e}={})=>at(Ye.StaticQuotaName.ROWS,Ye.QuotaUsageType.STATIC,{id:e}),jx=async(e,t,{tableId:r}={})=>qt({change:e,name:Ye.StaticQuotaName.ROWS,type:Ye.QuotaUsageType.STATIC,opts:{fn:t,id:r}}),Qx=async(e,{tableId:t}={})=>ga({change:e,name:Ye.StaticQuotaName.ROWS,type:Ye.QuotaUsageType.STATIC,opts:{id:t}});var Sn=require("@budibase/types"),Wx=async(e,{automationId:t}={})=>Ie(Sn.MonthlyQuotaName.AUTOMATIONS,Sn.QuotaUsageType.MONTHLY,{fn:e,id:t});var cr=require("@budibase/types"),ws=async e=>Ie(cr.StaticQuotaName.USER_GROUPS,cr.QuotaUsageType.STATIC,{fn:e}),Ts=async()=>at(cr.StaticQuotaName.USER_GROUPS,cr.QuotaUsageType.STATIC);var At=require("@budibase/types"),Es=async e=>Ie(At.StaticQuotaName.PLUGINS,At.QuotaUsageType.STATIC,{fn:e}),Rs=async()=>at(At.StaticQuotaName.PLUGINS,At.QuotaUsageType.STATIC),vs=async e=>Ss(At.StaticQuotaName.PLUGINS,At.QuotaUsageType.STATIC,e);var He=require("@budibase/types"),ya=require("@budibase/backend-core");var wn=async(e,t,r)=>{let a=[{change:e,name:He.StaticQuotaName.USERS,type:He.QuotaUsageType.STATIC,opts:{fn:r,valueFn:ya.users.getUserCount}}];t>0&&a.push({change:t,name:He.StaticQuotaName.CREATORS,type:He.QuotaUsageType.STATIC,opts:{valueFn:ya.users.getCreatorCount}});let n=await qt(a);return await Kt(),n},lr=async(e,t)=>{let r=[{change:e,name:He.StaticQuotaName.USERS,type:He.QuotaUsageType.STATIC,opts:{valueFn:ya.users.getUserCount}}];t>0&&r.push({change:t,name:He.StaticQuotaName.CREATORS,type:He.QuotaUsageType.STATIC,opts:{valueFn:ya.users.getCreatorCount}}),await ga(r),await Kt()};var Tn=require("@budibase/types"),En=async e=>qt({change:e,name:Tn.MonthlyQuotaName.BUDIBASE_AI_CREDITS,type:Tn.QuotaUsageType.MONTHLY});var nt={};w(nt,{addAppBuilder:()=>Hx,db:()=>Ce,removeAppBuilder:()=>zx});var Aa=require("@budibase/backend-core");var Q={};w(Q,{addAppBuilder:()=>Os,addUsers:()=>vn,adjustGroupCreatorsQuotas:()=>Yx,cleanupApp:()=>Vx,enrichUserRolesFromGroups:()=>Kx,fetch:()=>ha,get:()=>bt,getBulk:()=>Df,getGroupBuilderAppIds:()=>qf,getGroupRoleId:()=>$x,remove:()=>_s,removeAppBuilder:()=>Ls,removeUsers:()=>xs,save:()=>dr,updateGroupApps:()=>Cs});var x=require("@budibase/backend-core");var Cf=require("@budibase/backend-core"),Rn=class extends Cf.HTTPError{constructor(t){super(`Group name "${t}" is unavailable`,409)}};async function Pf(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,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 x.logging.logAlert(`Error finding higest role for ${e.length} on app ${t}`,r),r}}async function Uf(e,t){return t?t=t.filter(r=>e.includes(r._id)):t=await M.getBulk(e,{enriched:!1}),t}async function qf(e,t){if(!e.userGroups)return[];let r=await Uf(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 $x(e,t,r){if(!e.userGroups)return null;let a=await Uf(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 Pf(a,t))}async function Kx(e){if(!e||!e.userGroups)return e;let t=await Df(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 Pf(t,n);o&&(e.roles[n]=o)});let a=await qf(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 bt(e){return await M.get(e)}async function Df(e,t={enriched:!0}){return await M.getBulk(e,t)}async function Of(e){if(await M.getByName(e))throw new Rn(e)}async function Lf(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 Of(e.name),t.push(x.events.group.created(e));else{let o=await M.get(e._id);if(o.name!==e.name&&await Of(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 Lf(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 ws(n);{let o=await n();if(a>0)await wn(0,a);else if(a<0){let s=await Lf(e),i=Math.abs(a)-s;i>0&&await lr(0,i)}return o}}async function _s(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),f=(await Promise.all(i.map(I=>s.get(I._id)))).map(I=>({...I,userGroups:I.userGroups.filter(C=>C!==e)})),g=(await x.userUtils.creatorsInList(f)).filter(I=>I).length,y=i.length-g;y&&(n=()=>lr(0,y))}let o=await M.destroy(e,t);return await x.events.group.deleted(r),await Ts(),await n(),o}async function vn(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 f=(await x.userUtils.creatorsInList(n)).filter(g=>g).length,m=n.length-f;m&&await wn(0,m)}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 xs(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(m=>m).length,f=n.length-p;f&&await lr(0,f)}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 Cs(e,t){let r=await bt(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 Vx(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 Os(e,t){if(!await Pt())throw new Error("Feature not enabled, please check license");let r=x.db.getProdAppID(t),a=await bt(e);a.builder??={apps:[]},a.builder.apps.includes(t)||(a.builder.apps.push(r),await dr(a))}async function Ls(e,t){if(!await Pt())throw new Error("Feature not enabled, please check license");let r=x.db.getProdAppID(t),a=await bt(e);a.builder?.apps.includes(t)&&(a.builder.apps=a.builder.apps.filter(n=>n!==r),await dr(a))}async function Yx(){if(!await hs()){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(m=>e.get(m._id)))).map(m=>({...m,userGroups:m.userGroups.filter(g=>g!==a._id)})),p=(await x.userUtils.creatorsInList(s)).filter(m=>m).length,f=n.length-p;await M.save({...a,roles:{}}),f&&await lr(0,f)}}}Aa.users.UserDB.init(ze,Q,Me);var Ce=Aa.users.UserDB;async function Hx(e,t){if(!await Pt())throw new Error("Feature not enabled, please check license");await Aa.users.addAppBuilder(e,t)}async function zx(e,t){if(!await Pt())throw new Error("Feature not enabled, please check license");await Aa.users.removeAppBuilder(e,t)}var Cn={};w(Cn,{logs:()=>Ms});var Ms={};w(Ms,{logSearch:()=>oC,oldestLogDate:()=>jf,storeLog:()=>sC});var Ff=require("@budibase/types"),xn=require("@budibase/backend-core");var Z=require("@budibase/backend-core"),_n=require("@budibase/types");var Nf=require("@budibase/backend-core");async function Bf(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||Nf.logging.logWarn(`Failed to backoff: ${t}`,r),o}var{SEPARATOR:ot,UNICODE_MAX:Jx,DocumentType:Mf,AutomationViewMode:Ps,ViewName:Xx,getQueryIndex:Zx}=Z.db,eC=new Date(0).toISOString(),tC=100,Us=async()=>Ka(_n.ConstantQuotaName.AUTOMATION_LOG_RETENTION_DAYS);function kf(e,t,{status:r,automationId:a}={},n={}){let o=a?`${a}${ot}`:"",s=r?`${r}${ot}`:"",i;return r&&a?i=`${Ps.ALL}${ot}${s}${o}`:r?i=`${Ps.STATUS}${ot}${s}`:a?i=`${Ps.AUTOMATION}${ot}${o}`:i=`${Mf.AUTOMATION_LOG}${ot}`,{...n,descending:!0,startkey:`${i}${t}${Jx}`,endkey:`${i}${e}`}}function rC(e,t,r){return`${Mf.AUTOMATION_LOG}${ot}${e}${ot}${r}${ot}${t}`}async function qs(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=kf(e,t,n,{include_docs:r.docs,limit:o});r?.page&&(s.startkey=r.page);let i=await a.allDocs(s);return Or(i,{paginate:r?.paginate,pageSize:9})}async function Ds(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=kf(e,t,o,{include_docs:!0,limit:9+1});r?.page&&(s.startkey=r.page),n=await a.query(Zx(Xx.AUTOMATION_LOGS),s)}catch(o){if(o!=null&&(o.name==="not_found"||o.error==="not_found"))return await pp(),Ds(e,t,r);throw o}return Or(n,{paginate:!0,pageSize:9})}async function Gf(e,t){let r=Z.context.getProdAppDB(),a=e._id,n=e.name,o=new Date().toISOString(),s=rC(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 Ns(e,{clearing:t}={clearing:!1}){let r=Z.context.getProdAppDB();await Bf(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 aC(){let e=await Us();try{return await qs(eC,e,{docs:!1,paginate:!1,limit:tC})}catch{return{data:[],hasNextPage:!1}}}async function Bs(){let e=Z.context.getProdAppDB();try{let t=await aC();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]===_n.AutomationStatus.ERROR}).map(n=>n.id);await e.bulkDocs(r),a.length&&await Ns(a,{clearing:!0})}catch(t){Z.logging.logAlert(`Failed to cleanup automation log history - Database "${e.name}"`,t)}}var jf=Us;async function nC(e,t,r,a){let n,o=new Date().toISOString(),s=await jf();return(!e||e<s)&&(e=s),r||t?n=await Ds(e,o,{automationId:r,status:t,page:a}):n=await qs(e,o,{status:t,page:a,docs:!0,paginate:!0}),n}async function oC(e){return await Bs(),await nC(e.startDate,e.status,e.automationId,e.page)}async function sC(e,t){if(!xn.db.isProdAppID(xn.context.getAppId()))return;let r=await Gf(e,t);t.status===Ff.AutomationStatus.ERROR&&await Ns([r]),await Bs()}var On={};w(On,{checkPluginQuotas:()=>pC,deletePlugin:()=>uC,storePlugin:()=>iC});var Kf=require("@budibase/types"),J=require("@budibase/backend-core");var Qf=P(require("fs")),Wf=require("path");function $f(e,t){return Qf.default.readFileSync((0,Wf.join)(e,t),"utf8")}async function iC(metadata,directory,source){let db=J.tenancy.getGlobalDB(),version=metadata.package.version,name=metadata.package.name,description=metadata.package.description,hash=metadata.schema.hash,bucketPath=J.objectStore.getPluginS3Dir(name),files=await J.objectStore.uploadDirectory(J.objectStore.ObjectStoreBuckets.PLUGINS,directory,bucketPath),jsFile=files.find(e=>e.name.endsWith(".js")),iconFile=files.find(e=>e.name.endsWith(".svg"));if(!jsFile)throw new Error("Plugin missing .js file.");if(metadata.schema.type===Kf.PluginType.DATASOURCE){let js=$f(directory,jsFile.name);try{eval(js)}catch(e){let t=e?.message?e.message:JSON.stringify(e);throw new Error(`JS invalid: ${t}`)}}let iconFileName=iconFile?iconFile.name:null,pluginId=J.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 J.events.plugin.imported(doc),{...doc,_rev:e.rev}};return rev?await write():await Es(write)}async function uC(e){let t=J.tenancy.getGlobalDB();try{let r=await t.get(e),a=J.objectStore.getPluginS3Dir(r.name);await J.objectStore.deleteFolder(J.objectStore.ObjectStoreBuckets.PLUGINS,a),await t.remove(e,r._rev),await J.events.plugin.deleted(r),await Rs()}catch(r){let a=r?.message?r?.message:r;throw new Error(`Failed to delete plugin: ${a}`)}}async function pC(){let e=J.tenancy.getGlobalDB();try{let r=(await e.allDocs(J.db.getPluginParams())).rows.length;console.log(`Syncing plugin count: ${r}`),await vs(r)}catch(t){J.logging.logAlert("Unable to retrieve plugins for quota check",t)}}var Je={};w(Je,{fetch:()=>lC,fetchValues:()=>dC,isEncryptionKeyAvailable:()=>cC,isValid:()=>Hf,remove:()=>mC,update:()=>fC});var ba=require("@budibase/types"),Vf=require("@budibase/backend-core");function cC(){return!!Vf.env.ENCRYPTION_KEY}async function lC(){let e=await _t.get();return Object.keys(e.variables)}async function dC(e){let r=(await _t.get()).variables,a={};for(let[n,o]of Object.entries(r))switch(e){case ba.AppEnvironment.DEVELOPMENT:a[n]=o.development;break;case ba.AppEnvironment.PRODUCTION:default:a[n]=o.production;break}return a}async function Yf(e){if(!(await Ve.cache.getCachedLicense()).features.includes(ba.Feature.ENVIRONMENT_VARIABLES))throw new Error("User does not have access to environment variables feature.");let r=await _t.get();r.variables=e(r.variables),await _t.update(r)}async function fC(e,t){if(Hf(e))await Yf(a=>(a[e]=t,a));else throw new Error("Variable name has characters that are not allowed")}async function mC(e){await Yf(t=>(delete t[e],t))}function Hf(e){return/^[a-zA-Z0-9-_]+$/.test(e)}var It={};w(It,{definitions:()=>RC,download:()=>EC,fetch:()=>TC,write:()=>SC});var Pn=require("@budibase/types");var V=require("@budibase/backend-core"),Ge=require("@budibase/types");var zf=require("memorystream"),Jf=new V.sql.Sql(Ge.SqlClient.SQL_LITE);async function gC(e,t,r){let a={operation:Ge.Operation.READ,table:$t.searchTable(),tables:{},paginate:{limit:r||9,page:t},filters:e,resource:{fields:[]},sort:{timestamp:{direction:Ge.SortOrder.DESCENDING,type:Ge.SortType.STRING}}},n=Jf._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 yC(e){return`${V.DocumentType.AUDIT_LOG}${V.SEPARATOR}${e}${V.SEPARATOR}${V.utils.newid()}`}async function Xf(e){e._id||(e._id=yC(e.timestamp)),e.type||(e.type=Ge.AUDIT_LOG_TYPE);try{let r=await V.context.getAuditLogsDB().put(e);return{...e,_rev:r.rev}}catch(t){V.logging.logAlert("Failed to write audit log",t)}}async function ks(e,t,r){t||(t=1);let a=V.context.getAuditLogsDB();try{let n=9+1,o=await gC(e,t,n),s=$t.searchTable(),i=Jf.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 hC(),await Zu(),await ks(e,t,{isRetry:!0});throw n}}async function hC(){let e=V.context.getAuditLogsDB(),r=(await e.allDocs(V.db.getDocParams(V.DocumentType.AUDIT_LOG,null,{include_docs:!0}))).rows.map(a=>a.doc).filter(a=>a&&!a.type).map(a=>({...a,type:Ge.AUDIT_LOG_TYPE}));await e.bulkDocs(r)}function Zf(e){let t=V.context.getAuditLogsDB(),r=new zf,a=t.dump(r,{filter:o=>{let s=o;if(!s._id?.startsWith(V.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 zf;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 me=require("@budibase/backend-core");var Ln=require("@budibase/types"),Ia=require("@budibase/string-templates"),Sa=require("@budibase/backend-core"),bC=Sa.constants.MIN_VALID_DATE.toISOString(),IC=Sa.constants.MAX_VALID_DATE.toISOString();function Gs(e){return(e.startDate||e.endDate)&&(e.startDate=e.startDate||bC,e.endDate=e.endDate||IC),e}async function em(e){Array.isArray(e.appIds)&&(e.appIds=e.appIds.map(a=>Sa.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=Gs(e),t.range={timestamp:{high:e.endDate,low:e.startDate}}),Object.keys(t).length===0&&(t.notEmpty={event:!0}),t}function Fs(e,t,r){let a={_id:e,status:Ln.AuditLogResourceStatus.DELETED};switch(t){case"app":a.name=r?.appName;break;case"user":a.email=r?.email;break}return a}function Qs(e){let t=(0,Ia.findHBSBlocks)(e);for(let r of t){let a=` "${r}"`;e=e.replace(e.includes(a)?a:` ${r}`,""),e=(0,Ia.processStringSync)(e,{})}return e}function tm(e,t){let r=Ln.AuditedEventFriendlyName[e];if(!r)throw new Error("No friendly name found.");let a=(0,Ia.processStringSync)(r,t);return a.includes('""')&&(a=Qs(r)),a}async function SC(e,t,r){if(!await An()||!me.utils.isAudited(e))return;let a=tm(e,t),n=new Date;r?.timestamp&&(n=new Date(r.timestamp));let o={timestamp:n.toISOString(),event:e,name:a,userId:r?.userId||Pn.AuditLogSystemUser,metadata:{...t,...r?.hostInfo}},s={};try{if(r?.appId){o.appId=me.db.getProdAppID(r.appId);let i=await me.cache.app.getAppMetadata(r.appId);"name"in i&&(s.appName=i.name)}if(r?.userId){let i=await me.users.getById(r?.userId);s.email=i.email}}catch(i){me.logging.logAlert("Failed to retrieve fallback information for audit log",i)}return o.fallback=s,await Xf(o)}async function wC(e){let t=e.map(i=>i.userId),a=e.filter(i=>i.appId).map(i=>me.db.getDevAppID(i.appId)),n=await me.users.bulkGetGlobalUsersById([...new Set(t)],{cleanup:!0}),o=await me.db.getAppsByIDs([...new Set(a)]),s=[];for(let i of e){let p=n.find(g=>g?._id===i.userId),f=o.find(g=>me.db.isSameAppID(g?.appId,i.appId)),m={event:i.event,timestamp:i.timestamp,name:i.name,metadata:i.metadata,user:p||Fs(i.userId,"user",i.fallback)};i.appId&&(m.app=f||Fs(i.appId,"app",i.fallback)),s.push(m)}return s}async function TC(e){if(!await An())throw new Error("Audit logs not available - license required.");let t=await em(e);if(typeof e.bookmark=="string")throw new Error("String based bookmark not supported.");let r=await ks(t,e.bookmark);return{hasNextPage:r.hasNextPage,bookmark:r.bookmark,data:await wC(r.rows)}}function EC(e){return e=Gs(e),Zf(e)}function RC(){let e=Object.entries(Pn.AuditedEventFriendlyName).filter(r=>r[1]!=null),t={};for(let r of e)t[r[0]]=Qs(r[1]);return t}var Un={};w(Un,{applications:()=>Vs,roles:()=>$s,users:()=>Ws});var Ws={};w(Ws,{roleCheck:()=>_C});function vC(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 _C(e,t){return await rt()||vC(e,t),e}var $s={};w($s,{assign:()=>xC,unAssign:()=>CC});var wa=require("@budibase/backend-core");async function xC(e,t){if(!await rt())throw new Error("Unable to assign roles - license required.");let r=await Ce.bulkGet(e);for(let a of r){if(t.role&&t.role.roleId){let n=wa.db.getProdAppID(t.role.appId);a.roles[n]=t.role.roleId}if(t.appBuilder){let n=wa.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 Ce.bulkUpdate(r)}async function CC(e,t){if(!await rt())throw new Error("Unable to un-assign roles - license required.");let r=await Ce.bulkGet(e);for(let a of r){if(t.role){let n=wa.db.getProdAppID(t.role?.appId);a.roles[n]===t.role.roleId&&delete a.roles[n]}if(t.appBuilder&&a.builder?.apps){let n=wa.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 Vs={};w(Vs,{buildExportFn:()=>LC,buildImportFn:()=>OC});var Ks=require("@budibase/backend-core");function OC(e){return async(t,r)=>{await rt()||t.throw(403,"Endpoint unavailable, license required."),t.request.files?.appExport||t.throw(400,"Must provide app export file for import."),await Ks.context.doInAppContext(t.params.appId,async()=>{await e(t),t.body=void 0,t.status=204,await r()})}}function LC(e){return async(t,r)=>{await rt()||t.throw(403,"Endpoint unavailable, license required.");let{encryptPassword:a,excludeRows:n}=t.request.body;await Ks.context.doInAppContext(t.params.appId,async()=>{t.request.body={encryptPassword:a,excludeRows:n},t.query.appId=t.params.appId,await e(t),await r()})}}var ne=require("@budibase/backend-core"),ae=require("@budibase/types"),nm=P(require("fs")),om=require("path");var Ys=require("@budibase/backend-core"),rm;function am(){rm=new Ys.queue.BudibaseQueue(Ys.queue.JobQueue.APP_BACKUP,{maxStalledCount:3,jobOptions:{attempts:3,removeOnFail:!0,removeOnComplete:!0}})}function Dt(){return rm}async function Hs(e,t={}){return _e.storeAppBackupMetadata(e,t)}function sm(e){let t=new Date().toISOString();switch(e){case ae.AppBackupStatus.COMPLETE:case ae.AppBackupStatus.FAILED:return{timestamp:t,finishedAt:t};case ae.AppBackupStatus.STARTED:return{timestamp:t,startedAt:t};case ae.AppBackupStatus.PENDING:return{timestamp:t,createdAt:t}}}async function PC(e,t,r,a){let n=await qn(e);return await _e.storeAppBackupMetadata({...n,...sm(t),contents:r,status:t,type:ae.AppBackupType.BACKUP},{filename:a,docId:e})}async function UC(e,t,r){let a=await qn(e);return await _e.storeAppBackupMetadata({...a,...sm(r),status:r,type:ae.AppBackupType.RESTORE,trigger:ae.AppBackupTrigger.MANUAL},{docId:e,docRev:t})}async function qn(e){return _e.getAppBackupMetadata(e)}async function qC(e,t){return _e.updateAppBackupMetadata(e,t)}async function im(e){let t=await _e.getAppBackupMetadata(e);return t.filename&&await ne.objectStore.deleteFile(ne.objectStore.ObjectStoreBuckets.BACKUPS,t.filename),_e.deleteAppBackupMetadata(e)}async function DC(e){let t=[];for(let r of e)try{await im(r),t.push({backupId:r,success:!0})}catch(a){t.push({backupId:r,success:!1,error:a instanceof Error?a.message:"Unknown error"})}return t}async function NC(e,t){return _e.fetchAppBackups(e,t)}async function um(e){let t=await _e.getAppBackupMetadata(e);if(!t.filename)throw new Error("Backup incomplete - cannot download.");let r=await ne.objectStore.getReadStream(ne.objectStore.ObjectStoreBuckets.BACKUPS,t.filename);return{metadata:t,stream:r}}async function BC(e){let{stream:t}=await um(e),r=(0,om.join)(ne.objectStore.budibaseTempDir(),ne.utils.newid()),a=nm.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 MC(e,t,r={}){let a;try{a=await Hs({appId:e,trigger:t,timestamp:new Date().toISOString(),status:ae.AppBackupStatus.PENDING,type:ae.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 ne.events.backup.appBackupTriggered(e,a.id,ae.AppBackupType.BACKUP,t,r?.name),a.id}async function kC(e,t,r,a){let n=await qn(t),o;try{o=await Hs({appId:e,timestamp:new Date().toISOString(),status:ae.AppBackupStatus.PENDING,type:ae.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}}async function GC(e,t,r){let a=ne.db.getProdAppID(e);await ne.context.doInAppContext(a,async()=>{let n=ne.context.getProdAppDB();if(!await n.exists())return;let s=await n.tryGet(ae.DocumentType.APP_METADATA);s&&(s.backupErrors||(s.backupErrors={}),s.backupErrors[t]||(s.backupErrors[t]=[]),s.backupErrors[t].push(r),await n.put(s),await ne.cache.app.invalidateAppMetadata(s.appId,s))})}var FC={isEnabled:gs,triggerAppRestore:ce(kC),triggerAppBackup:ce(MC),getBackupDownloadStream:ce(um),downloadAppBackup:ce(BC),fetchAppBackups:ce(NC),storeAppBackupMetadata:ce(Hs),updateBackupStatus:ce(PC),updateRestoreStatus:ce(UC),getAppBackup:ce(qn),updateAppBackup:ce(qC),deleteAppBackup:ce(im),deleteAppBackups:ce(DC),trackBackupError:ce(GC)},Oe=FC;var Js={};w(Js,{init:()=>zs});var W=require("@budibase/backend-core");var Fe=require("@budibase/types");var fr=P(require("fs"));async function zs(e){Dt().process(async t=>{let r=t.data;try{if(r.export)return console.log("Exporting app backup:",r.appId,r.export.trigger),WC(t,e);if(r.import)return console.log("Importing app backup:",r.appId,r.import.backupId),QC(t,e)}catch(a){W.logging.logAlert(`Failed to perform backup for app ID: ${r.appId}`,a)}})}async function jC(e){await W.db.getDB(e,{skip_setup:!0}).destroy()}async function pm(e,t,r,a){let n=W.db.getDevAppID(r),o=W.db.getProdAppID(r),s=new Date().toISOString(),i=async(p,f)=>{a?.doc?await Oe.updateBackupStatus(a.doc.id,p,f?.contents,f?.filename):await Oe.storeAppBackupMetadata({appId:o,timestamp:s,trigger:e,status:p,name:a?.name,type:Fe.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`,g=W.objectStore.ObjectStoreBuckets.BACKUPS,y=fr.default.createReadStream(p);await W.objectStore.streamUpload({bucket:g,filename:m,stream:y,extra:{type:"application/gzip",metadata:{name:a?.name,trigger:e,timestamp:s,appId:o}}}),await i(Fe.AppBackupStatus.COMPLETE,{filename:m,contents:f}),fr.default.existsSync(p)&&fr.default.rmSync(p)}catch(p){W.logging.logAlert("App backup error",p),await i(Fe.AppBackupStatus.FAILED);let f=a?.doc?.id||`backup-${s}`,m=p instanceof Error?p.message:String(p);await Oe.trackBackupError(o,f,`Backup export failed: ${m}`)}}async function QC(e,t){let r=e.data,a=r.appId,n=r.import.backupId,o=r.import.nameForBackup,s=r.import.createdBy,i=W.tenancy.getTenantIDFromAppID(a);return W.tenancy.doInTenant(i,async()=>{let p=W.db.getDevAppID(a),f=`${p}_temp_${Date.now()}`,{rev:m}=await Oe.updateRestoreStatus(r.docId,r.docRev,Fe.AppBackupStatus.STARTED);await pm(Fe.AppBackupTrigger.RESTORING,i,a,{processing:t,createdBy:s,name:o});let g=await Oe.downloadAppBackup(n),y=Fe.AppBackupStatus.COMPLETE;try{await t.importAppFn(f,W.db.getDB(f),{file:{type:"application/gzip",path:g},key:g}),await jC(p),await new W.db.Replication({source:f,target:p}).replicate()}catch(I){W.logging.logAlert("App restore error",I),y=Fe.AppBackupStatus.FAILED;let C=I instanceof Error?I.message:String(I);await Oe.trackBackupError(a,n,`Backup restore failed: ${C}`)}finally{try{await W.db.getDB(f,{skip_setup:!0}).destroy()}catch{}}await Oe.updateRestoreStatus(r.docId,m,y),fr.default.existsSync(g)&&fr.default.rmSync(g,{force:!0})})}async function WC(e,t){let r=e.data,a=r.appId,n=r.export.trigger,o=r.export.name,s=W.tenancy.getTenantIDFromAppID(a);await W.tenancy.doInTenant(s,async()=>{try{let{rev:i}=await Oe.updateBackupStatus(r.docId,Fe.AppBackupStatus.STARTED);return pm(n,s,a,{processing:t,doc:{id:r.docId,rev:i},name:o})}catch(i){W.logging.logAlert("App backup error",i);let p=i instanceof Error?i.message:String(i);await Oe.trackBackupError(a,r.docId,`Backup export failed: ${p}`)}})}var $C=async e=>{am(),await zs(e.processing)},Se={...Oe,processing:Js,init:$C,getBackupQueue:Dt};var cm=async e=>{e.backups&&await Se.init(e.backups)};var ye={};w(ye,{create:()=>MM,find:()=>BM,get:()=>NM,remove:()=>GM,update:()=>kM});var PA=P($i()),st=require("@budibase/backend-core");var UA=require("@budibase/types");async function NM(e){let t=st.tenancy.getGlobalDB(),r=new st.db.QueryBuilder(t.name,UA.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 BM(e){return await st.users.getById(e)}async function MM(e){let t=await Ce.getUserByEmail(e.email);if(t){if(t.scimInfo?.isSync)throw new st.HTTPError("User is already synched",409);e={...t,scimInfo:(0,PA.default)(t.scimInfo,e.scimInfo),password:void 0,firstName:e.firstName,lastName:e.lastName,updatedAt:e.updatedAt}}return await Ce.save(e,{requirePassword:!1})}async function kM(e,t){return await Ce.save(e,{requirePassword:!1,allowChangingEmail:t?.allowChangingEmail})}async function GM(e){return await Ce.destroy(e)}var br={};w(br,{create:()=>FM});var qA=P($i());var DA=require("@budibase/backend-core");async function FM(e){let t=await Io(e.name),r;if(!t)r=(await Q.save(e)).id;else{if(t.scimInfo?.isSync)throw new DA.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,qA.default)(t.scimInfo,e.scimInfo),await Q.save(t)}return await Q.get(r)}var Bt={};w(Bt,{logRequest:()=>jM,logResponse:()=>QM});var Ki=require("@budibase/backend-core");async function jM(e){Ki.logging.logWarn("SCIM request log",e)}async function QM(e){Ki.logging.logWarn("SCIM response error",e)}var Xi={};w(Xi,{doInScimContext:()=>Yi,feature:()=>$,internalGroupOnly:()=>_a,licenseAuth:()=>MA,licensing:()=>NA,requireSCIM:()=>Hi,scimGroupOnly:()=>va,scimUserOnly:()=>Ra});var St=require("@budibase/backend-core");var Vn=require("@budibase/types"),WM=(e={checkUsersLimit:!0})=>async(t,r)=>{if((e.licensingCheck?e.licensingCheck:()=>!!t.user)(t)){if(St.env.SELF_HOSTED&&St.env.DEFAULT_LICENSE)return t.user.license=wo,r();t.user.license=await Ve.cache.getCachedLicense(t,{populateLicense:e.populateLicense,populateFreeLicense:e.populateFreeLicense}),e.checkUsersLimit&&(St.utils.isServingApp(t)||St.utils.isServingBuilder(t)||St.utils.isServingBuilderPreview(t)||St.utils.isPublicApiRequest(t))&&await ze.usageLimitIsExceeded({name:Vn.StaticQuotaName.USERS,type:Vn.QuotaUsageType.STATIC,usageChange:0})}return r()},NA=WM;var $={};w($,{requireFeature:()=>$M,requireFeatures:()=>KM});var $M=e=>async(t,r)=>{await hn(e),await r()},KM=(...e)=>async(t,r)=>{await ms(e),await r()};var Yn=require("@budibase/backend-core");var Yi=async(e,t)=>(Yn.env.DISABLE_SCIM_CALLS||await Bt.logRequest({...e.request.toJSON(),body:e.request.body}),await Yn.context.doInScimContext(async()=>{let r=await t();return await Bt.logResponse({...e.response.toJSON(),body:e.response.body}),r}));var Hi=async(e,t)=>{await As(),await t()};var BA=require("@budibase/backend-core");var Ra=e=>zi(BA.users.getById,e,!0),va=e=>zi(M.get,e,!0),_a=e=>zi(M.get,e,!1);function zi(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 xa=require("@budibase/backend-core");var Ji=require("dd-trace");async function MA(e,t){await Ji.tracer.trace("licenseAuth",async r=>{let a=e.request.headers[xa.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 cs(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"),Ji.tracer.setUser({id:"anonymous",tenantId:n.tenantId}),await xa.context.doInSelfHostTenantUsingCloud(n.tenantId,async()=>{await xa.context.doInLicenseContext(n,async()=>{await t()})})})}var iu={};w(iu,{appBackups:()=>vb,auditLogs:()=>yb,environmentVariables:()=>ib,groups:()=>XA,scim:()=>rI,users:()=>iI});var kA=require("@budibase/backend-core");async function GA(e){let t=e.request.body;if(t.name=t.name.trim(),delete t.roles,t._id){let a=await bt(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 FA(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 vn(t,r)),a&&(o=await xs(t,a)),e.body={added:n,removed:o}}async function jA(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 Cs(t,{appsToAdd:r,appsToRemove:a})}async function QA(e){e.body={data:await ha()}}async function WA(e){let{groupId:t,rev:r}=e.params;try{await _s(t,r),e.body={message:"Group deleted successfully"}}catch(a){e.throw(a.status,a)}}async function $A(e){try{e.body=await bt(e.params.groupId)}catch(t){e.throw(t.status,t)}}async function KA(e){let{pageSize:t=10,bookmark:r,emailSearch:a}=e.request.query,n=e.params.groupId,o={limit:t+1},s=await Wa(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 VA(e){let{groupId:t,appId:r}=e.params;await Os(t,r),e.body={message:"Group app builder access updated."}}async function YA(e){let{groupId:t,appId:r}=e.params;await Ls(t,r),e.body={message:"group app builder access removed."}}async function HA(e){let{groupId:t}=e.params,{csvContent:r}=e.request.body;(r===void 0||r.trim().length===0)&&e.throw(400,"CSV is empty");let a=await kA.csv.jsonFromCsvString(r,{allowSingleColumn:!0});(!a||a.length===0)&&e.throw(400,"CSV file is invalid");let o=Object.keys(a[0]).find(g=>/^(email|e-mail|email address|mail|e_mail)$/i.test(g.trim()));o||e.throw(400,"CSV file must contain an email column");let s=Array.from(new Set(a.map(g=>g[o]).filter(g=>g&&typeof g=="string"&&g.trim().length>0).map(g=>g.trim())));s.length===0&&e.throw(400,"No valid email addresses found in CSV");try{await bt(t)}catch(g){if(g.status===404)e.throw(404,"Group not found");else throw g}let i=[],p=[],f=[],m=await Promise.all(s.map(g=>Ce.getUserByEmail(g)));for(let g of s){let y=m.find(I=>I?.email===g);y?(i.push({_id:y._id,email:y.email}),f.push(y._id)):p.push({email:g,reason:"User not found"})}f.length>0&&await vn(t,f),e.body={added:i,skipped:p}}var zA=P(require("@koa/router")),le=P(require("joi"));var we=require("@budibase/types"),Le=require("@budibase/backend-core"),JA=new zA.default;function YM(){return Le.auth.joiValidator.body(le.default.object({_id:le.default.string().optional(),_rev:le.default.string().optional(),color:le.default.string().required(),icon:le.default.string().required(),name:le.default.string().trim().required().max(50),role:le.default.string().optional(),users:le.default.array().optional(),apps:le.default.array().optional(),roles:le.default.object().optional(),createdAt:le.default.string().optional(),updatedAt:le.default.string().optional()}).required())}JA.post("/api/global/groups",Le.auth.adminOnly,$.requireFeature(we.Feature.USER_GROUPS),YM(),GA).get("/api/global/groups",$.requireFeature(we.Feature.USER_GROUPS),QA).delete("/api/global/groups/:groupId/:rev",$.requireFeature(we.Feature.USER_GROUPS),Le.auth.adminOnly,_a("groupId"),WA).get("/api/global/groups/:groupId",$.requireFeature(we.Feature.USER_GROUPS),Le.auth.builderOrAdmin,$A).get("/api/global/groups/:groupId/users",$.requireFeature(we.Feature.USER_GROUPS),Le.auth.builderOrAdmin,KA).post("/api/global/groups/:groupId/users",Le.auth.adminOnly,$.requireFeature(we.Feature.USER_GROUPS),_a("groupId"),FA).post("/api/global/groups/:groupId/users/bulk",Le.auth.adminOnly,$.requireFeature(we.Feature.USER_GROUPS),_a("groupId"),Le.auth.joiValidator.body(le.default.object({csvContent:le.default.string().required()}).required()),HA).post("/api/global/groups/:groupId/apps",Le.auth.builderOrAdmin,$.requireFeature(we.Feature.USER_GROUPS),jA).post("/api/global/groups/:groupId/app/:appId/builder",Le.auth.builderOrAdmin,$.requireFeatures(we.Feature.USER_GROUPS,we.Feature.APP_BUILDERS),VA).delete("/api/global/groups/:groupId/app/:appId/builder",Le.auth.builderOrAdmin,$.requireFeatures(we.Feature.USER_GROUPS,we.Feature.APP_BUILDERS),YA);var XA=JA;var Zi=require("@budibase/types");var eu=require("@budibase/backend-core");async function ZA(e){e.body={encryptionKeyAvailable:Je.isEncryptionKeyAvailable()}}async function eb(e){e.body={variables:await Je.fetch()}}async function tb(e){let{name:t,production:r,development:a}=e.request.body;await Je.update(t,{production:r,development:a});let n=[Zi.AppEnvironment.PRODUCTION];r!==a&&n.push(Zi.AppEnvironment.DEVELOPMENT),await eu.events.environmentVariable.created(t,n),e.body={message:`Environment variable "${t}" created.`}}async function rb(e){let{production:t,development:r}=e.request.body,a=e.params.varName;await Je.update(a,{production:t,development:r}),e.body={message:`Environment variable "${a}" updated.`}}async function ab(e){let t=e.params.varName;await Je.remove(t),await eu.events.environmentVariable.deleted(t),e.body={message:`Environment variable "${t}" deleted.`}}var Mt=require("@budibase/backend-core"),ob=P(require("@koa/router")),Ca=P(require("joi")),sb=new ob.default;function nb(){return Mt.auth.joiValidator.body(Ca.default.object({name:Ca.default.string().optional(),production:Ca.default.string().required(),development:Ca.default.string().required()}))}sb.get("/api/env/variables/status",Mt.auth.builderOrAdmin,ZA).get("/api/env/variables",Mt.auth.builderOrAdmin,eb).post("/api/env/variables",Mt.auth.builderOrAdmin,nb(),tb).patch("/api/env/variables/:varName",Mt.auth.builderOrAdmin,nb(),rb).delete("/api/env/variables/:varName",Mt.auth.builderOrAdmin,ab);var ib=sb;var tu=require("@budibase/backend-core");async function ub(e){let t=e.request.body,r=await It.fetch(t);await tu.events.auditLog.filtered(t),e.body=r}async function pb(e){let t=e.request.body,{stream:r}=It.download(t);await tu.events.auditLog.downloaded(t),e.attachment(`audit-logs-${Date.now()}.log`),e.body=r}async function cb(e){e.body={events:It.definitions()}}var fb=require("@budibase/types"),kt=require("@budibase/backend-core"),mb=P(require("@koa/router")),Pe=P(require("joi"));function lb(){return kt.auth.joiValidator.body(Pe.default.object({userIds:Pe.default.array().items(Pe.default.string()).optional(),appIds:Pe.default.array().items(Pe.default.string()).optional(),events:Pe.default.array().items(Pe.default.string().valid(...Object.values(fb.Event))).optional(),startDate:Pe.default.string().optional().allow(""),endDate:Pe.default.string().optional().allow(""),fullSearch:Pe.default.string().optional().allow(""),bookmark:Pe.default.number()}))}var gb=new mb.default;gb.post("/api/global/auditlogs/search",kt.auth.adminOnly,lb(),ub).get("/api/global/auditlogs/download",kt.auth.adminOnly,kt.middleware.querystringToBody,lb(),pb).get("/api/global/auditlogs/definitions",kt.auth.adminOnly,cb);var yb=gb;var ru=require("@budibase/types");var Hn=require("@budibase/backend-core");async function Gt(e,t){t||e.throw(400,"App ID missing"),await Yt.appExists(t)||e.throw(400,`Provided app ID: ${t} - is invalid.`)}async function hb(e){let t=e.params.appId;await Gt(e,t);let r=e.request.body,a=e.user?._id,n=await Se.triggerAppBackup(t,ru.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 Ab(e){let t=e.params.appId;await Gt(e,t);let r=e.params.backupId,a=e.request.body.name,n=await Se.triggerAppRestore(t,r,a,e.user?._id);n||e.throw(500,"Unable to start restore."),await Hn.events.backup.appBackupRestored(n.metadata),e.body={restoredId:n?.restoreId,message:"Restore triggered - process starting."}}async function bb(e){let t=e.params.appId;await Gt(e,t);let r=e.params.backupId;await Se.deleteAppBackup(r),e.body={message:"Backup deleted successfully."}}async function Ib(e){let t=Hn.context.getAppId();await Gt(e,t);let{backupIds:r}=e.request.body;(!Array.isArray(r)||r.length===0)&&e.throw(400,"backupIds must be a non-empty array");let a=await Se.deleteAppBackups(r),n=a.filter(s=>s.success).length,o=a.length-n;e.body={message:`${n} backups deleted successfully${o>0?`, ${o} failed`:""}.`,results:a,successCount:n,failureCount:o}}async function Sb(e){let t=e.params.appId;await Gt(e,t);let r=e.request.body;r?.trigger&&(r.trigger=r.trigger.toLowerCase(),Object.values(ru.AppBackupTrigger).includes(r.trigger)||e.throw(400,"Provided trigger is not a valid option.")),e.body=await Se.fetchAppBackups(t,{paginate:!0,...r})}async function wb(e){let t=e.params.appId;await Gt(e,t);let r=e.params.backupId,a=e.request.body;e.body=await Se.updateAppBackup(r,a.name)}async function Tb(e){let t=e.params.appId;await Gt(e,t);let r=e.params.backupId,{metadata:a,stream:n}=await Se.getBackupDownloadStream(r);e.attachment(`backup-${a.timestamp}.tar.gz`),e.body=n}var Eb=P(require("@koa/router")),Ft=P(require("joi")),zn=require("@budibase/types"),it=require("@budibase/backend-core"),Rb=new Eb.default;function XM(){return it.auth.joiValidator.body(Ft.default.object({trigger:Ft.default.string().valid(...Object.values(zn.AppBackupTrigger)),type:Ft.default.string().valid(...Object.values(zn.AppBackupType)),startDate:Ft.default.date(),endDate:Ft.default.date(),page:Ft.default.string()}))}Rb.post("/api/apps/:appId/backups",it.auth.builderOrAdmin,hb).post("/api/apps/:appId/backups/search",it.auth.builderOrAdmin,XM(),Sb).get("/api/apps/:appId/backups/:backupId/file",it.auth.builderOrAdmin,Tb).patch("/api/apps/:appId/backups/:backupId",it.auth.builderOrAdmin,wb).delete("/api/apps/:appId/backups/:backupId",it.auth.builderOrAdmin,bb).delete("/api/apps/:appId/backups",it.auth.builderOrAdmin,Ib).post("/api/apps/:appId/backups/:backupId/import",it.auth.builderOrAdmin,Ab);var vb=Rb;var tI=P(require("@koa/router"));var Jn=require("scim-patch");var xb=require("@budibase/backend-core");function _b(e,t){let r=e.request.query[t];if(r!==void 0)return+r}var Cb=async e=>{let t=_b(e,"pageSize")??20,r=_b(e,"startIndex"),a;e.request.query.filter&&(a=Y.user.userFilters(e.request.query.filter));let n=await ye.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(Y.user.toScimUserResponse),startIndex:(r||0)+1,itemsPerPage:t}},Ob=async e=>{let{id:t}=e.params;typeof t!="string"&&e.throw(404);let r=await ye.find(t);e.body=Y.user.toScimUserResponse(r)},Lb=async e=>{let t=Y.user.fromScimUser(e.request.body);try{let r=await ye.create(t);e.body=Y.user.toScimUserResponse(r)}catch(r){throw r instanceof xb.EmailUnavailableError&&e.throw(409,"Email already in use"),r}};function ZM(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 Pb=async e=>{let t=await ye.find(e.params.id);t||e.throw(404);let r=Y.user.toScimUserResponse(t),a=e.request.body;try{(0,Jn.patchBodyValidation)(a)}catch{}if(ZM(a))return au(e);let n;try{n=(0,Jn.scimPatch)(r,a.Operations)}catch{}n||e.throw(500);let o=Y.user.fromScimUser(n);await ye.update(o,{allowChangingEmail:!0}),e.body=Y.user.toScimUserResponse(o)},au=async e=>{let{id:t}=e.params;typeof t!="string"&&e.throw(404),await ye.remove(t),e.status=204};var Vb=P(Kb()),Yb=require("@budibase/shared-core"),Xn=require("scim-patch");var Zn=require("scim2-parse-filter");function Hb(e,t){for(let r of t.split(","))delete e[r]}var zb=async e=>{let r=(await Q.fetch()).filter(o=>o.scimInfo?.isSync).map(Y.group.toScimGroupResponse),{filter:a,excludedAttributes:n}=e.request.query;if(a){let o=(0,Zn.filter)((0,Zn.parse)(a));r=r.filter(o)}n&&r.forEach(o=>{Hb(o,n)}),e.body={schemas:["urn:ietf:params:scim:api:messages:2.0:ListResponse"],totalResults:r.length,Resources:r,startIndex:1,itemsPerPage:r.length}},Jb=async e=>{let t=Y.group.fromScimGroup(e.request.body),r=await br.create(t);e.body=Y.group.toScimGroupResponse(r)},Xb=async e=>{let{id:t}=e.params,r=await Q.get(t),a=Y.group.toScimGroupResponse(r),{excludedAttributes:n}=e.request.query;n&&Hb(a,n),e.body=a},Zb=async e=>{let{id:t}=e.params,r=await Q.get(t);await Q.remove(t,r._rev),e.status=204},eI=async e=>{let{id:t}=e.params,r=await Q.get(t),a=Y.group.toScimGroupResponse(r),n=e.request.body;try{(0,Xn.patchBodyValidation)(n)}catch{e.throw(400)}let{true:o,false:s}=(0,Vb.default)(n.Operations,i=>i.path==="members");if(s?.length){let i=(0,Xn.scimPatch)(a,s);i||e.throw(500);let p={...Y.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 g of m)i.push(await ye.find(g.value));break;case"remove":case"Remove":for(let g of m)p.push(await ye.find(g.value));break;case"replace":case"Replace":throw new Error("Replacing members is not allowed");default:Yb.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=Y.group.toScimGroupResponse(await Q.get(t))};var Oa=require("@budibase/types"),Te=new tI.default({prefix:"/api/global/scim/v2"});Te.use(Hi);Te.use(Yi);Te.get("/users",Cb);Te.get("/users/:id",Ra("id"),Ob);Te.post("/users",Lb);Te.patch("/users/:id",Ra("id"),Pb);Te.delete("/users/:id",Ra("id"),au);Te.get("/groups",zb);Te.post("/groups",$.requireFeature(Oa.Feature.USER_GROUPS),Jb);Te.get("/groups/:id",$.requireFeature(Oa.Feature.USER_GROUPS),va("id"),Xb);Te.delete("/groups/:id",$.requireFeature(Oa.Feature.USER_GROUPS),va("id"),Zb);Te.patch("/groups/:id",$.requireFeature(Oa.Feature.USER_GROUPS),va("id"),eI);var rI=Te;var oI=P(require("@koa/router"));var nu=require("@budibase/backend-core");async function aI(e){let{userId:t,appId:r}=e.params,a=await nt.db.getUser(t);if(nu.users.isGlobalBuilder(a)){e.body={message:"User already admin - no permissions updated."};return}await nt.addAppBuilder(a,r),e.body={message:`User "${a.email}" app builder access updated.`}}async function nI(e){let{userId:t,appId:r}=e.params,a=await nt.db.getUser(t);if(nu.users.isGlobalBuilder(a)){e.body={message:"User already admin - no permissions removed."};return}await nt.removeAppBuilder(a,r),e.body={message:`User "${a.email}" app builder access removed.`}}var ou=require("@budibase/types"),su=require("@budibase/backend-core"),sI=new oI.default;sI.post("/api/global/users/:userId/app/:appId/builder",su.auth.builderOrAdmin,$.requireFeatures(ou.Feature.APP_BUILDERS),aI).delete("/api/global/users/:userId/app/:appId/builder",su.auth.builderOrAdmin,$.requireFeatures(ou.Feature.APP_BUILDERS),nI);var iI=sI;var Y={};w(Y,{group:()=>pu,user:()=>uu});var uu={};w(uu,{fromScimUser:()=>xk,toScimUserResponse:()=>Rk,userFilters:()=>Ck});var eo=require("@budibase/types"),uI=require("scim2-parse-filter"),pI=require("@budibase/backend-core"),cI=require("@budibase/shared-core"),{unreachable:Ek}=cI.utils,Rk=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===eo.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},vk=e=>!!e?.id;function _k(e){if(pI.utils.validEmail(e.userName))return e.userName;if(e.emails)return e.emails.find(t=>t.primary)?.value||e.emails[0]?.value}var xk=e=>{let t=vk(e)?e:void 0,r=_k(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:Ek(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?eo.UserStatus.ACTIVE:eo.UserStatus.INACTIVE,createdAt:t?.meta.created.getTime(),updatedAt:t?.meta.lastModified.toISOString()}},Ck=e=>{let t={equal:{}},r=(0,uI.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 pu={};w(pu,{fromScimGroup:()=>Pk,toScimGroupResponse:()=>Ok});var Ok=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}))}),Lk=e=>!!e?.id,Pk=e=>{let t=Lk(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 Uu={};w(Uu,{LLM:()=>Xe,LLMRequest:()=>K,TableGeneration:()=>Pu,agentHistoryTitleSystemPrompt:()=>Qk,agentSystemPrompt:()=>jk,aiColumnSchemas:()=>Ou,aiTableResponseToTableSchema:()=>vu,appendAIColumns:()=>_u,classifyText:()=>du,cleanData:()=>fu,extractFileData:()=>Mk,generateAIColumns:()=>Eu,generateCode:()=>Fk,generateCronExpression:()=>mu,generateData:()=>Ru,generateJs:()=>Au,generateSQL:()=>Gk,generateTables:()=>Tu,generationStructure:()=>Cu,getLLM:()=>Ua,getLLMConfig:()=>wu,getLLMOrThrow:()=>SI,normalizeContentType:()=>cu,parseResponseFormat:()=>ro,sanitiseToolName:()=>Uk,searchWeb:()=>hu,sentimentAnalysis:()=>yu,summarizeText:()=>to,tableDataStructuredOutput:()=>Lu,translate:()=>gu});var La=require("@budibase/types");function Uk(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 cu(e){return e?e.includes("/")?e:{[La.SupportedFileType.PDF]:"application/pdf",[La.SupportedFileType.JPG]:"image/jpeg",[La.SupportedFileType.JPEG]:"image/jpeg",[La.SupportedFileType.PNG]:"image/png"}[e.toLowerCase()]||"application/octet-stream":"application/octet-stream"}var io=require("@budibase/types");var Ze=require("@budibase/backend-core"),hI=require("@budibase/types");var ao=P(require("openai"));var wt=require("@budibase/types");var lI=require("@budibase/shared-core");var Tt=P(require("dd-trace"));function lu(e,t){return t.map(r=>e[r]).join(" ")}var Xe=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||"1000")}get model(){return this._model}get apiKey(){return this._apiKey}get maxTokens(){return this._maxTokens}async prompt(t){return await Tt.default.trace("prompt",async()=>{let r=typeof t=="string"?new K().addUserMessage(t):t,{messages:a,tokensUsed:n}=await Tt.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 Tt.default.trace("chat",async()=>await this.chatCompletion(t))}async*chatStream(t){yield*this.chatCompletionStream(t)}async summarizeText(t){return Tt.default.trace("summarizeText",()=>this.prompt(to(t)))}async generateCronExpression(t){return Tt.default.trace("generateCronExpression",()=>this.prompt(mu(t)))}async operation(t,r){return Tt.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 wt.AIOperationEnum.SUMMARISE_TEXT:return to(lu(r,o));case wt.AIOperationEnum.CLEAN_DATA:return fu(r[n]);case wt.AIOperationEnum.TRANSLATE:return gu(r[n],s);case wt.AIOperationEnum.CATEGORISE_TEXT:if(!i)throw Error("No categories provided for categorise text operation. Please provide categories.");return du(lu(r,o),i.split(","));case wt.AIOperationEnum.SENTIMENT_ANALYSIS:return yu(r[n]);case wt.AIOperationEnum.PROMPT:return p;case wt.AIOperationEnum.SEARCH_WEB:return hu(lu(r,o));default:throw lI.utils.unreachable(a)}}async generateJs(t,r){return await Tt.default.trace("generateJs",async()=>{let{bindings:a=[],snippets:n=[]}=r||{};return await this.prompt(Au(a,n).addUserMessage(t))})}};var fI=require("@budibase/types"),bu=require("openai/helpers/zod");var mI=(a=>(a.GPT_5_MINI="gpt-5-mini",a.GPT_5="gpt-5",a.GPT_5_NANO="gpt-5-nano",a))(mI||{});function ro(e){if(e)return e==="text"?{type:"text"}:e==="json"?{type:"json_object"}:e}function dI(e){if(!e)return 0;let t=e.prompt_tokens;return e.completion_tokens*3+t}var Ue=class extends Xe{constructor(r){super(r);this.client=this.getClient(r)}getClient(r){if(!r.apiKey)throw new Error("No OpenAI API key found");return new ao.default({apiKey:r.apiKey})}async uploadFile(r,a,n){let o=cu(n);if(fI.ImageContentTypes.includes(o.toLowerCase())){let p;if(Buffer.isBuffer(r))p=r;else{let m=[];for await(let g of r)m.push(new Uint8Array(g));p=Buffer.concat(m)}let f=p.toString("base64");return`data:${o};base64,${f}`}let s=await(0,ao.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_completion_tokens:this._maxTokens,response_format:ro(r.format)};Object.values(mI).includes(this.model)&&(a.verbosity="low",a.reasoning_effort="minimal"),r.tools&&r.tools.length>0&&(a.tool_choice="auto",a.tools=r.tools.map(bu.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){if(i.type!=="function"||!i.function){console.warn(`[OPENAI TOOL WARN] Unsupported tool call type: ${i.type}`);continue}let p=i.function.name,f=r.findTool(p);if(!f)throw new Error(`Tool ${p} not found in prompt tools`);let m=JSON.parse(i.function.arguments);s.push(f.handler(m).then(g=>({role:"tool",tool_call_id:i.id,content:g})).catch(g=>(console.error(`[OPENAI TOOL ERROR] Tool ${p} failed in OpenAI handler:`,g),{role:"tool",tool_call_id:i.id,content:`Error: ${g.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:dI(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:ro(r.format),stream:!0};r.tools&&r.tools.length>0&&(a.tool_choice="auto",a.tools=r.tools.map(bu.zodFunction));try{let n=await this.client.chat.completions.create(a),o=null,s="",i=null;for await(let f of n){let m=f?.choices?.[0]?.delta;if(m){if(m.content&&(s+=m.content,yield{type:"content",content:m.content}),m.tool_calls&&m.tool_calls.length>0){let g=m.tool_calls[0];g.id?(o={id:g.id,name:g.function?.name||"",arguments:g.function?.arguments||""},yield{type:"tool_call_start",toolCall:{id:o.id,name:o.name,arguments:o.arguments}}):o&&g.function?.arguments&&(o.arguments+=g.function.arguments,yield{type:"tool_call_start",toolCall:{id:o.id,name:o.name,arguments:o.arguments}})}f.usage&&(i=f.usage)}}let p=i?dI(i):0;if(o){r.addMessage({role:"assistant",content:"",tool_calls:[{id:o.id,type:"function",function:{name:o.name,arguments:o.arguments}}]});let f=r.findTool(o.name);if(f)try{let m=JSON.parse(o.arguments),g=await f.handler(m);yield{type:"tool_call_result",toolResult:{id:o.id,result:g}},r.addMessage({role:"tool",tool_call_id:o.id,content:g}),yield*this.chatCompletionStream(r);return}catch(m){yield{type:"tool_call_result",toolResult:{id:o.id,result:`Error: ${m.message}`,error:m.message}},r.addMessage({role:"tool",tool_call_id:o.id,content:`Error: ${m.message}`}),yield*this.chatCompletionStream(r);return}else{let m=`Tool '${o.name}' not found`;yield{type:"tool_call_result",toolResult:{id:o.id,result:m,error:m}},r.addMessage({role:"tool",tool_call_id:o.id,content:m}),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"),gI=require("@budibase/types");var Iu=require("dd-trace"),no=class extends Xe{async prompt(t){let r=await super.prompt(t);return r.tokensUsed&&await En(r.tokensUsed),r}async chat(t){let r=await super.chat(t);return r.tokensUsed&&await En(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 Ue({apiKey:ee.env.OPENAI_API_KEY,model:this.model,max_completion_tokens: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 f of t)p.push(new Uint8Array(f));n=Buffer.concat(p)}let o=n.toString("base64");if(a&&gI.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 gn();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 Iu.tracer.trace("chatCompletionCloud",async()=>await new Ue({apiKey:ee.env.OPENAI_API_KEY,model:this.model,max_completion_tokens:this.maxTokens}).chatCompletion(t))}async chatCompletionSelfHost(t){return await Iu.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 gn();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 Ue({apiKey:ee.env.OPENAI_API_KEY,model:this.model,max_completion_tokens:this.maxTokens}).chatCompletionStream(t)}async*chatCompletionStreamSelfHost(t){try{let r=await this.chatCompletionSelfHost(t);if(r.messages.length>0){let 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 Pa=require("dd-trace");var Su=P(require("@anthropic-ai/sdk"));function qk(e){if(!e)return 0;let t=e.input_tokens;return e.output_tokens*3+t}var oo=class extends Xe{constructor(r){super(r);this.client=new Su.default({apiKey:r.apiKey})}firstTextBlock(r){for(let a of r.content)if(a.type==="text")return a.text}async 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:qk(a.usage)}}catch(a){throw a instanceof Su.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 AI=require("zod"),bI=require("openai/helpers/zod");var yI=require("openai"),so=class extends Ue{getClient(t){if(!t.apiKey)throw new Error("No Azure OpenAI API key found");if(!t.model)throw new Error("No Azure OpenAI model specified");return new yI.AzureOpenAI({apiKey:t.apiKey,apiVersion:"2024-10-01-preview",baseURL:t.baseUrl})}};var II="gpt-5-mini",Dk={OpenAI:Ue,TogetherAI:Ue,AzureOpenAI:so,Custom:Ue,Anthropic:oo,BudibaseAI:no};async function Nk(){return await Pa.tracer.trace("getAIConfig",async e=>{let t={type:hI.ConfigType.AI,config:{}};if(!Ze.context.isSelfHostUsingCloud()){let a=await Ze.configs.getAIConfig();a&&(t=a)}await bs(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||II,apiKey:r.apiKey,baseUrl:r.baseUrl}})}async function Bk(){return Pa.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:II,apiKey:Ze.env.OPENAI_API_KEY}})}async function wu(){return Pa.tracer.trace("getLLMConfig",async()=>await Nk()||await Bk())}async function Ua(e){return await Pa.tracer.trace("getLLM",async t=>{let{model:r,maxTokens:a}=e||{},n=await wu();if(!n){t.addTags({enabled:!1,reason:"no config found"});return}r&&(n.model=r),a&&(n.maxTokens=a);let o=Dk[n.provider];if(!o){t.addTags({enabled:!1,reason:"no provider found",provider:n.provider});return}return new o(n)})}async function SI(){let e=await Ua();if(!e)throw new Ze.HTTPError("No available LLM configurations",500);return e}var K=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 AI.z.ZodType?this.format=(0,bI.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 ut=require("zod");function to(e,t){let r=`Summarize this text:
37
+ `;function Vr(e){return _o.default.verify(e,_S,{algorithms:["RS256"]})}function xS(e,t){return _o.default.sign(t,e,{encoding:"utf-8",algorithm:"RS256"})}var Ja={};w(Ja,{getFeatures:()=>xo});var p=require("@budibase/types");var CS={[p.PlanType.FREE]:[...Ae.SELF_FREE_LICENSE.features],[p.PlanType.PREMIUM]:void 0,[p.PlanType.PREMIUM_PLUS]:[p.Feature.APP_BACKUPS,p.Feature.BRANDING,p.Feature.SYNC_AUTOMATIONS,p.Feature.APP_BUILDERS,p.Feature.VIEW_PERMISSIONS,p.Feature.TRIGGER_AUTOMATION_RUN,p.Feature.VIEW_READONLY_COLUMNS,p.Feature.AI_CUSTOM_CONFIGS,p.Feature.PDF,p.Feature.BUDIBASE_AI],[p.PlanType.PREMIUM_PLUS_TRIAL]:[p.Feature.APP_BACKUPS,p.Feature.BRANDING,p.Feature.SYNC_AUTOMATIONS,p.Feature.APP_BUILDERS,p.Feature.VIEW_PERMISSIONS,p.Feature.TRIGGER_AUTOMATION_RUN,p.Feature.VIEW_READONLY_COLUMNS,p.Feature.AI_CUSTOM_CONFIGS,p.Feature.PDF,p.Feature.BUDIBASE_AI],[p.PlanType.PRO]:[p.Feature.USER_GROUPS,p.Feature.APP_BACKUPS],[p.PlanType.TEAM]:[p.Feature.USER_GROUPS,p.Feature.APP_BACKUPS],[p.PlanType.BUSINESS]:[p.Feature.USER_GROUPS,p.Feature.APP_BACKUPS,p.Feature.ENVIRONMENT_VARIABLES,p.Feature.AUDIT_LOGS,p.Feature.BRANDING,p.Feature.SYNC_AUTOMATIONS,p.Feature.APP_BUILDERS,p.Feature.EXPANDED_PUBLIC_API,p.Feature.VIEW_PERMISSIONS,p.Feature.PDF,p.Feature.BUDIBASE_AI],[p.PlanType.ENTERPRISE_BASIC]:[p.Feature.USER_GROUPS,p.Feature.APP_BACKUPS,p.Feature.ENVIRONMENT_VARIABLES,p.Feature.ENFORCEABLE_SSO,p.Feature.AUDIT_LOGS,p.Feature.BRANDING,p.Feature.SYNC_AUTOMATIONS,p.Feature.OFFLINE,p.Feature.APP_BUILDERS,p.Feature.EXPANDED_PUBLIC_API,p.Feature.VIEW_PERMISSIONS,p.Feature.TRIGGER_AUTOMATION_RUN,p.Feature.SCIM,p.Feature.VIEW_READONLY_COLUMNS,p.Feature.AI_CUSTOM_CONFIGS,p.Feature.PWA,p.Feature.CUSTOM_APP_SCRIPTS,p.Feature.PDF,p.Feature.BUDIBASE_AI,p.Feature.RECAPTCHA,p.Feature.PKCE_OIDC],[p.PlanType.ENTERPRISE_BASIC_TRIAL]:[p.Feature.USER_GROUPS,p.Feature.APP_BACKUPS,p.Feature.ENVIRONMENT_VARIABLES,p.Feature.ENFORCEABLE_SSO,p.Feature.BRANDING,p.Feature.SYNC_AUTOMATIONS,p.Feature.APP_BUILDERS,p.Feature.EXPANDED_PUBLIC_API,p.Feature.VIEW_PERMISSIONS,p.Feature.TRIGGER_AUTOMATION_RUN,p.Feature.SCIM,p.Feature.VIEW_READONLY_COLUMNS,p.Feature.AI_CUSTOM_CONFIGS,p.Feature.PWA,p.Feature.CUSTOM_APP_SCRIPTS,p.Feature.PDF,p.Feature.BUDIBASE_AI,p.Feature.RECAPTCHA,p.Feature.PKCE_OIDC],[p.PlanType.ENTERPRISE]:[p.Feature.USER_GROUPS,p.Feature.APP_BACKUPS,p.Feature.ENVIRONMENT_VARIABLES,p.Feature.ENFORCEABLE_SSO,p.Feature.AUDIT_LOGS,p.Feature.BRANDING,p.Feature.SYNC_AUTOMATIONS,p.Feature.OFFLINE,p.Feature.APP_BUILDERS,p.Feature.EXPANDED_PUBLIC_API,p.Feature.VIEW_PERMISSIONS,p.Feature.TRIGGER_AUTOMATION_RUN,p.Feature.SCIM,p.Feature.VIEW_READONLY_COLUMNS,p.Feature.AI_CUSTOM_CONFIGS,p.Feature.PWA,p.Feature.CUSTOM_APP_SCRIPTS,p.Feature.PDF,p.Feature.BUDIBASE_AI,p.Feature.RECAPTCHA,p.Feature.PKCE_OIDC]},OS={[p.PlanType.FREE]:[...Ae.CLOUD_FREE_LICENSE.features],[p.PlanType.PREMIUM]:[p.Feature.APP_BACKUPS,p.Feature.BRANDING,p.Feature.APP_BUILDERS,p.Feature.VIEW_PERMISSIONS,p.Feature.PDF],[p.PlanType.PREMIUM_PLUS]:[p.Feature.APP_BACKUPS,p.Feature.BRANDING,p.Feature.SYNC_AUTOMATIONS,p.Feature.APP_BUILDERS,p.Feature.VIEW_PERMISSIONS,p.Feature.TRIGGER_AUTOMATION_RUN,p.Feature.VIEW_READONLY_COLUMNS,p.Feature.BUDIBASE_AI,p.Feature.PDF],[p.PlanType.PREMIUM_PLUS_TRIAL]:[p.Feature.APP_BACKUPS,p.Feature.BRANDING,p.Feature.SYNC_AUTOMATIONS,p.Feature.APP_BUILDERS,p.Feature.VIEW_PERMISSIONS,p.Feature.TRIGGER_AUTOMATION_RUN,p.Feature.VIEW_READONLY_COLUMNS,p.Feature.BUDIBASE_AI,p.Feature.PDF],[p.PlanType.PRO]:[p.Feature.USER_GROUPS,p.Feature.APP_BACKUPS,p.Feature.BRANDING],[p.PlanType.TEAM]:[p.Feature.USER_GROUPS,p.Feature.APP_BACKUPS,p.Feature.BRANDING],[p.PlanType.BUSINESS]:[p.Feature.USER_GROUPS,p.Feature.APP_BACKUPS,p.Feature.ENVIRONMENT_VARIABLES,p.Feature.AUDIT_LOGS,p.Feature.BRANDING,p.Feature.SYNC_AUTOMATIONS,p.Feature.APP_BUILDERS,p.Feature.EXPANDED_PUBLIC_API,p.Feature.VIEW_PERMISSIONS,p.Feature.BUDIBASE_AI,p.Feature.PDF],[p.PlanType.ENTERPRISE_BASIC]:[p.Feature.USER_GROUPS,p.Feature.APP_BACKUPS,p.Feature.ENVIRONMENT_VARIABLES,p.Feature.ENFORCEABLE_SSO,p.Feature.AUDIT_LOGS,p.Feature.BRANDING,p.Feature.SYNC_AUTOMATIONS,p.Feature.OFFLINE,p.Feature.APP_BUILDERS,p.Feature.EXPANDED_PUBLIC_API,p.Feature.VIEW_PERMISSIONS,p.Feature.TRIGGER_AUTOMATION_RUN,p.Feature.SCIM,p.Feature.VIEW_READONLY_COLUMNS,p.Feature.AI_CUSTOM_CONFIGS,p.Feature.BUDIBASE_AI,p.Feature.PWA,p.Feature.CUSTOM_APP_SCRIPTS,p.Feature.PDF,p.Feature.RECAPTCHA,p.Feature.PKCE_OIDC],[p.PlanType.ENTERPRISE_BASIC_TRIAL]:[p.Feature.USER_GROUPS,p.Feature.APP_BACKUPS,p.Feature.ENVIRONMENT_VARIABLES,p.Feature.ENFORCEABLE_SSO,p.Feature.BRANDING,p.Feature.SYNC_AUTOMATIONS,p.Feature.APP_BUILDERS,p.Feature.EXPANDED_PUBLIC_API,p.Feature.VIEW_PERMISSIONS,p.Feature.TRIGGER_AUTOMATION_RUN,p.Feature.SCIM,p.Feature.VIEW_READONLY_COLUMNS,p.Feature.AI_CUSTOM_CONFIGS,p.Feature.BUDIBASE_AI,p.Feature.PWA,p.Feature.CUSTOM_APP_SCRIPTS,p.Feature.PDF,p.Feature.RECAPTCHA,p.Feature.PKCE_OIDC],[p.PlanType.ENTERPRISE]:[p.Feature.USER_GROUPS,p.Feature.APP_BACKUPS,p.Feature.ENVIRONMENT_VARIABLES,p.Feature.ENFORCEABLE_SSO,p.Feature.AUDIT_LOGS,p.Feature.BRANDING,p.Feature.SYNC_AUTOMATIONS,p.Feature.APP_BUILDERS,p.Feature.EXPANDED_PUBLIC_API,p.Feature.VIEW_PERMISSIONS,p.Feature.TRIGGER_AUTOMATION_RUN,p.Feature.SCIM,p.Feature.VIEW_READONLY_COLUMNS,p.Feature.AI_CUSTOM_CONFIGS,p.Feature.BUDIBASE_AI,p.Feature.PWA,p.Feature.CUSTOM_APP_SCRIPTS,p.Feature.PDF,p.Feature.RECAPTCHA,p.Feature.PKCE_OIDC]};function xo(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 p.Hosting.SELF:r=a(CS);break;case p.Hosting.CLOUD:r=a(OS);break}return r}var Xa={};w(Xa,{UNLIMITED:()=>d,getQuotas:()=>Co});var k=require("@budibase/types");var l=et,Ec=Ae,d=-1,Hr=e=>e*1e6,LS={[k.PlanType.FREE]:{...Ec.CLOUD_FREE_LICENSE.quotas},[k.PlanType.PREMIUM]:{usage:{monthly:{...l.queries(d),...l.automations(1e3),...l.budibaseAICredits(0),...l.actions(d)},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)}},[k.PlanType.PREMIUM_PLUS]:{usage:{monthly:{...l.queries(d),...l.automations(5e3),...l.budibaseAICredits(Hr(2)),...l.actions(d)},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)}},[k.PlanType.PREMIUM_PLUS_TRIAL]:{usage:{monthly:{...l.queries(d),...l.automations(5e3),...l.budibaseAICredits(Hr(2)),...l.actions(d)},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)}},[k.PlanType.PRO]:{usage:{monthly:{...l.queries(d),...l.automations(1e3),...l.budibaseAICredits(0),...l.actions(d)},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)}},[k.PlanType.TEAM]:{usage:{monthly:{...l.queries(d),...l.automations(5e3),...l.budibaseAICredits(0),...l.actions(d)},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)}},[k.PlanType.BUSINESS]:{usage:{monthly:{...l.queries(d),...l.automations(1e4),...l.budibaseAICredits(0),...l.actions(d)},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)}},[k.PlanType.ENTERPRISE_BASIC]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(Hr(4)),...l.actions(d)},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)}},[k.PlanType.ENTERPRISE_BASIC_TRIAL]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(Hr(4)),...l.actions(d)},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)}},[k.PlanType.ENTERPRISE]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(Hr(4)),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(d),...l.plugins(d),...l.customAIConfigurations(d)}},constant:{...l.automationLogRetentionDays(d),...l.appBackupRetentionDays(d)}}},PS={[k.PlanType.FREE]:{...Ec.SELF_FREE_LICENSE.quotas},[k.PlanType.PREMIUM]:void 0,[k.PlanType.PREMIUM_PLUS]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0),...l.actions(d)},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)}},[k.PlanType.PREMIUM_PLUS_TRIAL]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0),...l.actions(d)},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)}},[k.PlanType.PRO]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0),...l.actions(d)},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)}},[k.PlanType.TEAM]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0),...l.actions(d)},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)}},[k.PlanType.BUSINESS]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0),...l.actions(d)},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)}},[k.PlanType.ENTERPRISE_BASIC]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0),...l.actions(d)},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)}},[k.PlanType.ENTERPRISE_BASIC_TRIAL]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0),...l.actions(d)},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)}},[k.PlanType.ENTERPRISE]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0),...l.actions(d)},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 Co(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 k.Hosting.SELF:r=a(PS);break;case k.Hosting.CLOUD:r=a(LS);break}return JSON.parse(JSON.stringify(r))}var Yt={};w(Yt,{encoding:()=>Vt,workspaceExists:()=>US});var Rc=require("@budibase/backend-core");async function US(e){return(await Rc.db.getAllWorkspaces({all:!0,idsOnly:!0})).includes(e)}var Vt={};w(Vt,{base64ToObject:()=>DS,objectToBase64:()=>qS});function qS(e){let t=JSON.stringify(e);return Buffer.from(t).toString("base64")}function DS(e){let t=Buffer.from(e,"base64").toString();return JSON.parse(t)}var cf=require("@budibase/types"),ir=require("@budibase/backend-core"),pf=P(Fl()),lf=P(as());async function px(e){await ve.save({offlineLicenseToken:e}),await Ct()}async function lx(){await ve.save({offlineLicenseToken:void 0}),await Ct()}async function df(){return(await ve.get()).offlineLicenseToken}async function ns(){let t=(await ir.installation.getInstall()).installId,r=ir.context.getTenantId(),a=await ir.events.identification.getUniqueTenantId(r);return{installId:t,tenantId:a}}async function dx(){let e=await ns();return Vt.objectToBase64(e)}function fx(e){return Vt.base64ToObject(e)}function ff(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 mf(e){let t=await ns();if(e.identifier.installId!==t.installId||e.identifier.tenantId!==t.tenantId)throw new Error("Invalid offline license")}function gf(e){let t=e.plan.type,r=cf.Hosting.SELF,a=xo(r,t),n=Co(r,t);return e.features=(0,pf.default)(e.features,a),e.quotas=(0,lf.default)(e.quotas,n),e}async function os(){try{let e=await df();if(e){let t=await Vr(e);return ff(t),await mf(t),gf(t)}}catch(e){console.error("Error retrieving offline license",e)}}var ma={};w(ma,{deleteDevLicense:()=>Ax,getOfflineLicense:()=>yx,writeDevLicenseToDisk:()=>hx});var yf=require("@budibase/backend-core"),is=require("path"),hf=require("os"),Ot=P(require("fs"));var mx=yf.env.isTest()?".budibase-test":".budibase",ss=(0,is.join)((0,hf.tmpdir)(),mx),gx="dev_license.txt",fa=(0,is.join)(ss,gx);if(!Ot.default.existsSync(ss))try{Ot.default.mkdirSync(ss)}catch{}function yx(){try{if(Ot.default.existsSync(fa)){let e=Ot.default.readFileSync(fa,{encoding:"utf-8"});return Vr(e)}}catch(e){console.error("Error retrieving offline license from disk",e)}}function hx(e){console.log(`Writing license to: ${fa}`),Ot.default.writeFileSync(fa,e,{encoding:"utf-8"})}function Ax(){Ot.default.rmSync(fa,{force:!0})}var Af=require("dd-trace"),cs=async()=>await Af.tracer.trace("getLicense",async e=>{if(us.env.OFFLINE_MODE)return e.addTags({offline:!0}),os();let t=await Kt();return t||(e.addTags({offlineFallback:!0}),t=ma.getOfflineLicense()),t}),ps=e=>Ro(e),ls=()=>us.env.SELF_HOSTED?Ae.SELF_FREE_LICENSE:Ae.CLOUD_FREE_LICENSE;var fs={};w(fs,{activateLicenseKey:()=>bx,deleteLicenseKey:()=>Ix,getLicenseKey:()=>gn});var ds=P(require("dd-trace"));async function bx(e){await vo(e),await ve.save({licenseKey:e}),await Ct()}async function gn(){return await ds.default.trace("getLicenseKey",async e=>{let t=await ve.get();return e.addTags({licenseKey:t.licenseKey}),t.licenseKey})}async function Ix(){return await ds.default.trace("deleteLicenseKey",async()=>{await ve.save({licenseKey:void 0}),await Ct()})}var Lt=require("@budibase/backend-core"),yn=P(require("dd-trace")),bf=3600,Ct=async()=>{await wf(),await Sf()},If=async(e,t)=>{let{populateLicense:r=cs,populateFreeLicense:a=ls}=t||{};return await yn.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 co(),c=await i.get(s);return n.addTags({tenantId:s,foundInCache:!!c}),c?(n.addTags({foundInCache:!0,refreshedAt:c.refreshedAt,features:c.features,plan:c.plan,quotas:c.quotas}),c):(c=await yn.default.trace("populateLicense",async()=>await r(s)),n.addTags({populatedLicense:!!c}),c||(c=yn.default.trace("populateFreeLicense",()=>a(e,s)),n.addTags({populatedFreeLicense:!!c})),c.refreshedAt=new Date().toISOString(),n.addTags({refreshedAt:c.refreshedAt,features:c.features,plan:c.plan,quotas:c.quotas,expirySeconds:bf}),await i.store(s,c,bf),c)})};Lt.env.isJest()&&(If=jest.fn());var Sf=If,wf=async()=>{let e=Lt.tenancy.getTenantId();await(await co()).delete(e)};async function re(e,t){Array.isArray(e)||(e=[e]),t||(t=await Ne.getCachedLicense());for(let r of e)if(!t?.features.includes(r))return!1;return!0}async function hn(e,t){if(!await re(e,t))throw new tt.FeatureDisabledError(`${e} is not currently enabled`,e)}async function ms(e,t){if(!await re(e,t)){let r=e.join(", ");throw new tt.FeatureDisabledError(`${r} are not currently enabled`,r)}}function pe(e){return async(...t)=>(await hn(te.Feature.APP_BACKUPS),e(...t))}async function gs(){return re(te.Feature.APP_BACKUPS)}async function ys(){return re(te.Feature.BRANDING)}async function Tf(){return re(te.Feature.ENFORCEABLE_SSO)}async function wx(){return re(te.Feature.SYNC_AUTOMATIONS)}async function Tx(){return re(te.Feature.TRIGGER_AUTOMATION_RUN)}async function Pt(){return re(te.Feature.APP_BUILDERS)}async function An(){return re(te.Feature.AUDIT_LOGS)}async function hs(){return re(te.Feature.USER_GROUPS)}function Ex(){return re(te.Feature.PWA)}function Rx(){return re(te.Feature.RECAPTCHA)}var vx=()=>re(te.Feature.PKCE_OIDC);async function rt(){return re(te.Feature.EXPANDED_PUBLIC_API)}async function _x(e){if(tt.env.ENABLE_SSO_MAINTENANCE_MODE||!await Tf())return!1;let r;return e?.config?r=e.config:r=await tt.configs.getSettingsConfig(),!!r.isSSOEnforced}var As=async()=>{let e=te.Feature.SCIM,t=await re(e),r=await tt.configs.getSCIMConfig();if(!t||!r?.enabled)throw new tt.FeatureDisabledError(`${e} is not currently enabled`,e);return!0};async function xx(){return re(te.Feature.VIEW_PERMISSIONS)}async function Cx(){return re(te.Feature.VIEW_READONLY_COLUMNS)}var Ox={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 Lx(e){return await ys()?{faviconUrl:e.faviconUrl,faviconUrlEtag:e.faviconUrlEtag,emailBrandingEnabled:e.emailBrandingEnabled,testimonialsEnabled:e.testimonialsEnabled,platformTitle:e.platformTitle,loginHeading:e.loginHeading,loginButton:e.loginButton,metaDescription:e.metaDescription,metaImageUrl:e.metaImageUrl,metaTitle:e.metaTitle}:Ox}var Is={};w(Is,{enrichAIConfig:()=>bs});var Ef=require("@budibase/backend-core"),Px="budibase_ai";async function bs(e){if(Ef.env.SELF_HOSTED)return e;for(let t of Object.values(e.config))if(t.provider==="BudibaseAI")return e;return e.config[Px]={provider:"BudibaseAI",active:!0,isDefault:Object.keys(e.config).every(t=>!e.config[t].isDefault),defaultModel:process.env.BUDIBASE_AI_DEFAULT_MODEL||"gpt-5-mini",name:"Budibase AI"},e}var ze={};w(ze,{addAction:()=>Bx,addApp:()=>Mx,addAutomation:()=>Qx,addGroup:()=>ws,addPlugin:()=>Es,addRow:()=>Gx,addRows:()=>Wx,addUsers:()=>wn,bustCache:()=>yo,decrement:()=>at,decrementMany:()=>ga,getCurrentUsageValues:()=>Xu,getLicensedQuota:()=>vf,getQuotaUsage:()=>Et,increment:()=>Ie,incrementBudibaseAICredits:()=>En,incrementMany:()=>qt,removeApp:()=>kx,removeGroup:()=>Ts,removePlugin:()=>Rs,removeRow:()=>Fx,removeRows:()=>jx,removeUsers:()=>lr,set:()=>Ss,setAllUsage:()=>Ao,setAppUsageValue:()=>ho,setUsage:()=>Hu,setUsagePerApp:()=>zu,updatePluginCount:()=>vs,updateUsage:()=>ur,usageLimitIsExceeded:()=>Nx,utils:()=>_r});var In=require("@budibase/types");var ke=require("@budibase/backend-core"),z=require("@budibase/types"),Ut=require("dd-trace");var Ie=async(e,t,r)=>await Ut.tracer.trace("quotas.increment",async a=>(a.addTags({name:e,type:t}),await Rf({change:1,name:e,type:t,opts:r}))),qt=e=>Ut.tracer.trace("quotas.incrementMany",async()=>Rf(e)),Rf=async e=>await Ut.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 Ut.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]}),at=(e,t,r={})=>ur({usageChange:-1,name:e,type:t,opts:r}),ga=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})))},Ss=async(e,t,r)=>Qe.setUsage(r,e,t),Ux=(e,t,r)=>{if(e==z.QuotaUsageType.STATIC){let a=r.usageQuota.triggers;return a?a[t]||{}:{}}else{let a=Qe.utils.getCurrentMonthString(),n=r.monthly[a].triggers;return n?n[t]||{}:{}}},qx=async(e,t,r,a)=>{try{await ke.locks.doWithLock({type:z.LockType.TRY_ONCE,name:z.LockName.TRIGGER_QUOTA,resource:e,ttl:1e4},async()=>{let n={percentage:r,name:t.name};a&&(n.resetDate=a),await mt.triggerQuota(n)})}catch(n){ke.logging.logAlert("Error triggering quota",n)}},Dx=async(e,t,r,a)=>{let n=await Et(),o=e===z.QuotaUsageType.MONTHLY?n.quotaReset:void 0,s=await Ux(e,t,n),i=a.triggers,c=r/a.value*100;c>100&&(c=100);for(let[f,m]of i.entries())if(c>=m&&a.value!==et.UNLIMITED){if(!s[m]){s[m]=new Date().toISOString();let y=i[f+1]||100;(!(c>=y)||c===m)&&await qx(t,a,c,o)}}else s[m]=void 0;return s},ur=async e=>{await Ut.tracer.trace("quotas.updateUsage",async t=>{let r=ke.tenancy.getTenantId(),a=Array.isArray(e)?e:[e];t.addTags({numActions:a.length,tenantId:r});let n,o,s=[],i={},c={},f={},m={};for(let y of a)await Ut.tracer.trace("quotas.updateUsage.action",async I=>{I.addTags({actionName:y.name,actionType:y.type,actionUsageChange:y.usageChange});try{n=ke.context.getWorkspaceId()}catch{}if(z.APP_QUOTA_NAMES.includes(y.name)&&!n)throw new Error("App context required for quota update");try{o=await vf(z.QuotaType.USAGE,y.name,y.type),s.push(o);let{total:_,app:v,breakdown:R}=await Qe.getCurrentUsageValues(y.type,y.name,y.opts?.id);_+=y.usageChange,v!=null&&(v+=y.usageChange),R!=null&&(R+=y.usageChange);let U={};if(y.opts?.dryRun||(U=await Dx(y.type,y.name,_,o),m={...m,[y.name]:U}),o.value!==et.UNLIMITED&&_>o.value&&y.usageChange>0)throw new ke.UsageLimitError(`Licensed ${o.name} of ${o.value} has been exceeded`,o.name);if(_=Math.max(0,_),v&&(v=Math.max(0,v)),R&&(R=Math.max(0,R),f={...f,[y.name]:R}),!y.opts?.dryRun){let qe=y.opts?.valueFn;qe&&(_=await qe(),v=_),i={...i,[y.name]:_},c={...c,[y.name]:v}}}catch(_){throw y.opts?.suppressErrorLog||console.error(`Error updating usage quotas for ${y.name}`,_),_}});let g=a.filter(y=>!y.opts?.dryRun).map(y=>({name:y.name,type:y.type,values:{total:i[y.name],app:c[y.name],breakdown:f[y.name],triggers:m[y.name]},opts:{...y.opts,tenantId:r}}));g.length>0&&await Qe.setAllUsage(g)})},vf=async(e,t,r)=>{let a=await Ne.getCachedLicense();if(!a){let n=ke.tenancy.getTenantId();throw new Error("License not found for tenant id "+n)}if(r&&(0,z.isStaticQuota)(e,r,t))return a.quotas[e][r][t];if(r&&(0,z.isMonthlyQuota)(e,r,t))return a.quotas[e][r][t];if((0,z.isConstantQuota)(e,t))return a.quotas[e][t];throw new Error("Invalid quota type")},Nx=async({name:e,type:t,usageChange:r})=>{try{return await ur({usageChange:r,name:e,type:t,opts:{dryRun:!0}}),!1}catch(a){if(a.code===z.ErrorCode.USAGE_LIMIT_EXCEEDED)return!0;throw a}};var Bx=async e=>Ie(In.MonthlyQuotaName.ACTIONS,In.QuotaUsageType.MONTHLY,{fn:e});var _f=require("@budibase/backend-core"),cr=require("@budibase/types");var xf=async()=>{let e=await _f.db.getAllWorkspaces({dev:!0});return e?e.length:0},Mx=async(e,{appId:t}={})=>Ie(cr.StaticQuotaName.APPS,cr.QuotaUsageType.STATIC,{fn:e,valueFn:xf,id:t}),kx=async({appId:e}={})=>at(cr.StaticQuotaName.APPS,cr.QuotaUsageType.STATIC,{valueFn:xf,id:e});var Ye=require("@budibase/types"),Gx=async(e,{tableId:t}={})=>Ie(Ye.StaticQuotaName.ROWS,Ye.QuotaUsageType.STATIC,{fn:e,id:t}),Fx=async({tableId:e}={})=>at(Ye.StaticQuotaName.ROWS,Ye.QuotaUsageType.STATIC,{id:e}),Wx=async(e,t,{tableId:r}={})=>qt({change:e,name:Ye.StaticQuotaName.ROWS,type:Ye.QuotaUsageType.STATIC,opts:{fn:t,id:r}}),jx=async(e,{tableId:t}={})=>ga({change:e,name:Ye.StaticQuotaName.ROWS,type:Ye.QuotaUsageType.STATIC,opts:{id:t}});var Sn=require("@budibase/types"),Qx=async(e,{automationId:t}={})=>Ie(Sn.MonthlyQuotaName.AUTOMATIONS,Sn.QuotaUsageType.MONTHLY,{fn:e,id:t});var pr=require("@budibase/types"),ws=async e=>Ie(pr.StaticQuotaName.USER_GROUPS,pr.QuotaUsageType.STATIC,{fn:e}),Ts=async()=>at(pr.StaticQuotaName.USER_GROUPS,pr.QuotaUsageType.STATIC);var At=require("@budibase/types"),Es=async e=>Ie(At.StaticQuotaName.PLUGINS,At.QuotaUsageType.STATIC,{fn:e}),Rs=async()=>at(At.StaticQuotaName.PLUGINS,At.QuotaUsageType.STATIC),vs=async e=>Ss(At.StaticQuotaName.PLUGINS,At.QuotaUsageType.STATIC,e);var He=require("@budibase/types"),ya=require("@budibase/backend-core");var wn=async(e,t,r)=>{let a=[{change:e,name:He.StaticQuotaName.USERS,type:He.QuotaUsageType.STATIC,opts:{fn:r,valueFn:ya.users.getUserCount}}];t>0&&a.push({change:t,name:He.StaticQuotaName.CREATORS,type:He.QuotaUsageType.STATIC,opts:{valueFn:ya.users.getCreatorCount}});let n=await qt(a);return await Kt(),n},lr=async(e,t)=>{let r=[{change:e,name:He.StaticQuotaName.USERS,type:He.QuotaUsageType.STATIC,opts:{valueFn:ya.users.getUserCount}}];t>0&&r.push({change:t,name:He.StaticQuotaName.CREATORS,type:He.QuotaUsageType.STATIC,opts:{valueFn:ya.users.getCreatorCount}}),await ga(r),await Kt()};var Tn=require("@budibase/types"),En=async e=>qt({change:e,name:Tn.MonthlyQuotaName.BUDIBASE_AI_CREDITS,type:Tn.QuotaUsageType.MONTHLY});var nt={};w(nt,{addAppBuilder:()=>Hx,db:()=>Ce,removeAppBuilder:()=>zx});var Aa=require("@budibase/backend-core");var j={};w(j,{addAppBuilder:()=>Os,addUsers:()=>vn,adjustGroupCreatorsQuotas:()=>Yx,cleanupApp:()=>Vx,enrichUserRolesFromGroups:()=>Kx,fetch:()=>ha,get:()=>bt,getBulk:()=>Df,getGroupBuilderAppIds:()=>qf,getGroupRoleId:()=>$x,remove:()=>_s,removeAppBuilder:()=>Ls,removeUsers:()=>xs,save:()=>dr,updateGroupApps:()=>Cs});var x=require("@budibase/backend-core");var Cf=require("@budibase/backend-core"),Rn=class extends Cf.HTTPError{constructor(t){super(`Group name "${t}" is unavailable`,409)}};async function Pf(e,t){try{let r=[];for(let i of e)if(i.roles){let c=i.roles[x.db.getProdWorkspaceID(t)];c&&r.push(c)}let a=await Promise.all(r.map(async i=>({[i]:await x.roles.roleToNumber(i)}))),n,o,s={};a.forEach(i=>{let[c,f]=Object.entries(i)[0];s[c]={roleId:c,roleNum:f}});for(let{roleId:i,roleNum:c}of Object.values(s))(o===void 0||c>o)&&(o=c,n=i);return n}catch(r){throw x.logging.logAlert(`Error finding higest role for ${e.length} on app ${t}`,r),r}}async function Uf(e,t){return t?t=t.filter(r=>e.includes(r._id)):t=await M.getBulk(e,{enriched:!1}),t}async function qf(e,t){if(!e.userGroups)return[];let r=await Uf(e.userGroups,t?.groups),a=t?.appId?x.db.getProdWorkspaceID(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 $x(e,t,r){if(!e.userGroups)return null;let a=await Uf(e.userGroups,r?.groups),n=x.db.getProdWorkspaceID(t);return e.roles?.[n]?e.roles[n]:(a=a.filter(o=>o?.roles?Object.keys(o.roles).includes(n):!1),await Pf(a,t))}async function Kx(e){if(!e||!e.userGroups)return e;let t=await Df(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.doInWorkspaceContext(n,async()=>{if(e.roles[n])return;let o=await Pf(t,n);o&&(e.roles[n]=o)});let a=await qf(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 bt(e){return await M.get(e)}async function Df(e,t={enriched:!0}){return await M.getBulk(e,t)}async function Of(e){if(await M.getByName(e))throw new Rn(e)}async function Lf(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 Of(e.name),t.push(x.events.group.created(e));else{let o=await M.get(e._id);if(o.name!==e.name&&await Of(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 Lf(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 ws(n);{let o=await n();if(a>0)await wn(0,a);else if(a<0){let s=await Lf(e),i=Math.abs(a)-s;i>0&&await lr(0,i)}return o}}async function _s(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),f=(await Promise.all(i.map(I=>s.get(I._id)))).map(I=>({...I,userGroups:I.userGroups.filter(C=>C!==e)})),g=(await x.userUtils.creatorsInList(f)).filter(I=>I).length,y=i.length-g;y&&(n=()=>lr(0,y))}let o=await M.destroy(e,t);return await x.events.group.deleted(r),await Ts(),await n(),o}async function vn(e,t){let r=await M.get(e),a=await x.users.bulkGetGlobalUsersById(t),n=[];for(let c of a)c.userGroups||(c.userGroups=[]),c.userGroups.includes(e)||n.push(c);if(!n.length)return n;let o=n.map(c=>({...c,userGroups:[...c?.userGroups||[],e]}));if(await x.users.bulkUpdateGlobalUsers(o),Object.values(r.roles||{}).includes("CREATOR")){let f=(await x.userUtils.creatorsInList(n)).filter(g=>g).length,m=n.length-f;m&&await wn(0,m)}let i=[];for(let c of t)i.push(x.cache.user.invalidateUser(c));return await Promise.all(i),await x.events.group.usersAdded(o.length,r),o}async function xs(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 c=i.userGroups.indexOf(e);i.userGroups.splice(c,1),n.push(i)}if(await x.users.bulkUpdateGlobalUsers(n),Object.values(r.roles||{}).includes("CREATOR")){let c=(await x.userUtils.creatorsInList(n)).filter(m=>m).length,f=n.length-c;f&&await lr(0,f)}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 Cs(e,t){let r=await bt(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 Vx(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 Os(e,t){if(!await Pt())throw new Error("Feature not enabled, please check license");let r=x.db.getProdWorkspaceID(t),a=await bt(e);a.builder??={apps:[]},a.builder.apps.includes(t)||(a.builder.apps.push(r),await dr(a))}async function Ls(e,t){if(!await Pt())throw new Error("Feature not enabled, please check license");let r=x.db.getProdWorkspaceID(t),a=await bt(e);a.builder?.apps.includes(t)&&(a.builder.apps=a.builder.apps.filter(n=>n!==r),await dr(a))}async function Yx(){if(!await hs()){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(m=>e.get(m._id)))).map(m=>({...m,userGroups:m.userGroups.filter(g=>g!==a._id)})),c=(await x.userUtils.creatorsInList(s)).filter(m=>m).length,f=n.length-c;await M.save({...a,roles:{}}),f&&await lr(0,f)}}}Aa.users.UserDB.init(ze,j,Me);var Ce=Aa.users.UserDB;async function Hx(e,t){if(!await Pt())throw new Error("Feature not enabled, please check license");await Aa.users.addAppBuilder(e,t)}async function zx(e,t){if(!await Pt())throw new Error("Feature not enabled, please check license");await Aa.users.removeAppBuilder(e,t)}var Cn={};w(Cn,{logs:()=>Ms});var Ms={};w(Ms,{logSearch:()=>oC,oldestLogDate:()=>Wf,storeLog:()=>sC});var xn=require("@budibase/backend-core"),Ff=require("@budibase/types");var Z=require("@budibase/backend-core"),_n=require("@budibase/types");var Nf=require("@budibase/backend-core");async function Bf(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||Nf.logging.logWarn(`Failed to backoff: ${t}`,r),o}var{SEPARATOR:ot,UNICODE_MAX:Jx,DocumentType:Mf,AutomationViewMode:Ps,ViewName:Xx,getQueryIndex:Zx}=Z.db,eC=new Date(0).toISOString(),tC=100,Us=async()=>Ka(_n.ConstantQuotaName.AUTOMATION_LOG_RETENTION_DAYS);function kf(e,t,{status:r,automationId:a}={},n={}){let o=a?`${a}${ot}`:"",s=r?`${r}${ot}`:"",i;return r&&a?i=`${Ps.ALL}${ot}${s}${o}`:r?i=`${Ps.STATUS}${ot}${s}`:a?i=`${Ps.AUTOMATION}${ot}${o}`:i=`${Mf.AUTOMATION_LOG}${ot}`,{...n,descending:!0,startkey:`${i}${t}${Jx}`,endkey:`${i}${e}`}}function rC(e,t,r){return`${Mf.AUTOMATION_LOG}${ot}${e}${ot}${r}${ot}${t}`}async function qs(e,t,r={docs:!0}){let a=Z.context.getProdWorkspaceDB();await a.exists()||(a=Z.context.getDevWorkspaceDB());let n={status:r.status},o=r?.limit?r.limit:r?.paginate?9+1:void 0,s=kf(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 Ds(e,t,r={}){let a=Z.context.getProdWorkspaceDB();await a.exists()||(a=Z.context.getDevWorkspaceDB());let n;try{let o={automationId:r?.automationId,status:r?.status},s=kf(e,t,o,{include_docs:!0,limit:9+1});r?.page&&(s.startkey=r.page),n=await a.query(Zx(Xx.AUTOMATION_LOGS),s)}catch(o){if(o!=null&&(o.name==="not_found"||o.error==="not_found"))return await fc(),Ds(e,t,r);throw o}return $r(n,{paginate:!0,pageSize:9})}async function Gf(e,t){let r=Z.context.getProdWorkspaceDB(),a=e._id,n=e.name,o=new Date().toISOString(),s=rC(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 Ns(e,{clearing:t}={clearing:!1}){let r=Z.context.getProdWorkspaceDB();await Bf(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 c=i[s].indexOf(n);t&&c!==-1?i[s].splice(c,1):i[s].push(n),i[s].length===0&&delete i[s],a.automationErrors=i}await r.put(a),await Z.cache.workspace.invalidateWorkspaceMetadata(a.appId,a)},"Failed to update app metadata with automation log error")}async function aC(){let e=await Us();try{return await qs(eC,e,{docs:!1,paginate:!1,limit:tC})}catch{return{data:[],hasNextPage:!1}}}async function Bs(){let e=Z.context.getProdWorkspaceDB();try{let t=await aC();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]===_n.AutomationStatus.ERROR}).map(n=>n.id);await e.bulkDocs(r),a.length&&await Ns(a,{clearing:!0})}catch(t){Z.logging.logAlert(`Failed to cleanup automation log history - Database "${e.name}"`,t)}}var Wf=Us;async function nC(e,t,r,a){let n,o=new Date().toISOString(),s=await Wf();return(!e||e<s)&&(e=s),r||t?n=await Ds(e,o,{automationId:r,status:t,page:a}):n=await qs(e,o,{status:t,page:a,docs:!0,paginate:!0}),n}async function oC(e){return await Bs(),await nC(e.startDate,e.status,e.automationId,e.page)}async function sC(e,t){if(!xn.db.isProdWorkspaceID(xn.context.getWorkspaceId()))return;let r=await Gf(e,t);t.status===Ff.AutomationStatus.ERROR&&await Ns([r]),await Bs()}var On={};w(On,{checkPluginQuotas:()=>cC,deletePlugin:()=>uC,storePlugin:()=>iC});var Kf=require("@budibase/types"),J=require("@budibase/backend-core");var jf=P(require("fs")),Qf=require("path");function $f(e,t){return jf.default.readFileSync((0,Qf.join)(e,t),"utf8")}async function iC(metadata,directory,source){let db=J.tenancy.getGlobalDB(),version=metadata.package.version,name=metadata.package.name,description=metadata.package.description,hash=metadata.schema.hash,bucketPath=J.objectStore.getPluginS3Dir(name),files=await J.objectStore.uploadDirectory(J.objectStore.ObjectStoreBuckets.PLUGINS,directory,bucketPath),jsFile=files.find(e=>e.name.endsWith(".js")),iconFile=files.find(e=>e.name.endsWith(".svg"));if(!jsFile)throw new Error("Plugin missing .js file.");if(metadata.schema.type===Kf.PluginType.DATASOURCE){let js=$f(directory,jsFile.name);try{eval(js)}catch(e){let t=e?.message?e.message:JSON.stringify(e);throw new Error(`JS invalid: ${t}`)}}let iconFileName=iconFile?iconFile.name:null,pluginId=J.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 J.events.plugin.imported(doc),{...doc,_rev:e.rev}};return rev?await write():await Es(write)}async function uC(e){let t=J.tenancy.getGlobalDB();try{let r=await t.get(e),a=J.objectStore.getPluginS3Dir(r.name);await J.objectStore.deleteFolder(J.objectStore.ObjectStoreBuckets.PLUGINS,a),await t.remove(e,r._rev),await J.events.plugin.deleted(r),await Rs()}catch(r){let a=r?.message?r?.message:r;throw new Error(`Failed to delete plugin: ${a}`)}}async function cC(){let e=J.tenancy.getGlobalDB();try{let r=(await e.allDocs(J.db.getPluginParams())).rows.length;console.log(`Syncing plugin count: ${r}`),await vs(r)}catch(t){J.logging.logAlert("Unable to retrieve plugins for quota check",t)}}var Je={};w(Je,{fetch:()=>lC,fetchValues:()=>dC,isEncryptionKeyAvailable:()=>pC,isValid:()=>Hf,remove:()=>mC,update:()=>fC});var ba=require("@budibase/types"),Vf=require("@budibase/backend-core");function pC(){return!!Vf.env.ENCRYPTION_KEY}async function lC(){let e=await _t.get();return Object.keys(e.variables)}async function dC(e){let r=(await _t.get()).variables,a={};for(let[n,o]of Object.entries(r))switch(e){case ba.AppEnvironment.DEVELOPMENT:a[n]=o.development;break;case ba.AppEnvironment.PRODUCTION:default:a[n]=o.production;break}return a}async function Yf(e){if(!(await Ke.cache.getCachedLicense()).features.includes(ba.Feature.ENVIRONMENT_VARIABLES))throw new Error("User does not have access to environment variables feature.");let r=await _t.get();r.variables=e(r.variables),await _t.update(r)}async function fC(e,t){if(Hf(e))await Yf(a=>(a[e]=t,a));else throw new Error("Variable name has characters that are not allowed")}async function mC(e){await Yf(t=>(delete t[e],t))}function Hf(e){return/^[a-zA-Z0-9-_]+$/.test(e)}var It={};w(It,{definitions:()=>RC,download:()=>EC,fetch:()=>TC,write:()=>SC});var me=require("@budibase/backend-core"),Pn=require("@budibase/types");var V=require("@budibase/backend-core"),Ge=require("@budibase/types");var zf=require("memorystream"),Jf=new V.sql.Sql(Ge.SqlClient.SQL_LITE);async function gC(e,t,r){let a={operation:Ge.Operation.READ,table:Qt.searchTable(),tables:{},paginate:{limit:r||9,page:t},filters:e,resource:{fields:[]},sort:{timestamp:{direction:Ge.SortOrder.DESCENDING,type:Ge.SortType.STRING}}},n=Jf._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 yC(e){return`${V.DocumentType.AUDIT_LOG}${V.SEPARATOR}${e}${V.SEPARATOR}${V.utils.newid()}`}async function Xf(e){e._id||(e._id=yC(e.timestamp)),e.type||(e.type=Ge.AUDIT_LOG_TYPE);try{let r=await V.context.getAuditLogsDB().put(e);return{...e,_rev:r.rev}}catch(t){V.logging.logAlert("Failed to write audit log",t)}}async function ks(e,t,r){t||(t=1);let a=V.context.getAuditLogsDB();try{let n=9+1,o=await gC(e,t,n),s=Qt.searchTable(),i=Jf.convertJsonStringColumns(s,await a.sql(o.sql,o.bindings)),c;i.length>n&&(c=i.pop());let f={rows:i,hasNextPage:!!c};return f.hasNextPage&&(f.bookmark=t+1),f}catch(n){if(n.status===404&&!r?.isRetry)return await hC(),await Zu(),await ks(e,t,{isRetry:!0});throw n}}async function hC(){let e=V.context.getAuditLogsDB(),r=(await e.allDocs(V.db.getDocParams(V.DocumentType.AUDIT_LOG,null,{include_docs:!0}))).rows.map(a=>a.doc).filter(a=>a&&!a.type).map(a=>({...a,type:Ge.AUDIT_LOG_TYPE}));await e.bulkDocs(r)}function Zf(e){let t=V.context.getAuditLogsDB(),r=new zf,a=t.dump(r,{filter:o=>{let s=o;if(!s._id?.startsWith(V.DocumentType.AUDIT_LOG))return!1;let i=!0,c=(f,m)=>{!f||f.length===0||(i=!!(i&&m&&f.includes(m)))};if(c(e.userIds,s.userId),c(e.appIds,s.appId),c(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 zf;return r.on("data",o=>{let s=JSON.parse(Buffer.from(o).toString());if(Array.isArray(s.docs)){let i="";for(let c of s.docs)i+=JSON.stringify(c)+`
38
+ `;n.write(i)}}),r.on("end",()=>{n.end()}),{promise:a,stream:n}}var Ia=require("@budibase/backend-core"),Sa=require("@budibase/string-templates"),Ln=require("@budibase/types"),bC=Ia.constants.MIN_VALID_DATE.toISOString(),IC=Ia.constants.MAX_VALID_DATE.toISOString();function Gs(e){return(e.startDate||e.endDate)&&(e.startDate=e.startDate||bC,e.endDate=e.endDate||IC),e}async function em(e){Array.isArray(e.appIds)&&(e.appIds=e.appIds.map(a=>Ia.db.getProdWorkspaceID(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=Gs(e),t.range={timestamp:{high:e.endDate,low:e.startDate}}),Object.keys(t).length===0&&(t.notEmpty={event:!0}),t}function Fs(e,t,r){let a={_id:e,status:Ln.AuditLogResourceStatus.DELETED};switch(t){case"app":a.name=r?.appName;break;case"user":a.email=r?.email;break}return a}function Ws(e){let t=(0,Sa.findHBSBlocks)(e);for(let r of t){let a=` "${r}"`;e=e.replace(e.includes(a)?a:` ${r}`,""),e=(0,Sa.processStringSync)(e,{})}return e}function tm(e,t){let r=Ln.AuditedEventFriendlyName[e];if(!r)throw new Error("No friendly name found.");let a=(0,Sa.processStringSync)(r,t);return a.includes('""')&&(a=Ws(r)),a}async function SC(e,t,r){if(!await An()||!me.utils.isAudited(e))return;let a=tm(e,t),n=new Date;r?.timestamp&&(n=new Date(r.timestamp));let o={timestamp:n.toISOString(),event:e,name:a,userId:r?.userId||Pn.AuditLogSystemUser,metadata:{...t,...r?.hostInfo}},s={};try{if(r?.appId){o.appId=me.db.getProdWorkspaceID(r.appId);let i=await me.cache.workspace.getWorkspaceMetadata(r.appId);"name"in i&&(s.appName=i.name)}if(r?.userId){let i=await me.users.getById(r?.userId);s.email=i.email}}catch(i){me.logging.logAlert("Failed to retrieve fallback information for audit log",i)}return o.fallback=s,await Xf(o)}async function wC(e){let t=e.map(i=>i.userId),a=e.filter(i=>i.appId).map(i=>me.db.getDevWorkspaceID(i.appId)),n=await me.users.bulkGetGlobalUsersById([...new Set(t)],{cleanup:!0}),o=await me.db.getWorkspacesByIDs([...new Set(a)]),s=[];for(let i of e){let c=n.find(g=>g?._id===i.userId),f=o.find(g=>me.db.isSameWorkspaceID(g?.appId,i.appId)),m={event:i.event,timestamp:i.timestamp,name:i.name,metadata:i.metadata,user:c||Fs(i.userId,"user",i.fallback)};i.appId&&(m.app=f||Fs(i.appId,"app",i.fallback)),s.push(m)}return s}async function TC(e){if(!await An())throw new Error("Audit logs not available - license required.");let t=await em(e);if(typeof e.bookmark=="string")throw new Error("String based bookmark not supported.");let r=await ks(t,e.bookmark);return{hasNextPage:r.hasNextPage,bookmark:r.bookmark,data:await wC(r.rows)}}function EC(e){return e=Gs(e),Zf(e)}function RC(){let e=Object.entries(Pn.AuditedEventFriendlyName).filter(r=>r[1]!=null),t={};for(let r of e)t[r[0]]=Ws(r[1]);return t}var Un={};w(Un,{applications:()=>Vs,roles:()=>$s,users:()=>Qs});var Qs={};w(Qs,{roleCheck:()=>_C});function vC(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 _C(e,t){return await rt()||vC(e,t),e}var $s={};w($s,{assign:()=>xC,unAssign:()=>CC});var wa=require("@budibase/backend-core");async function xC(e,t){if(!await rt())throw new Error("Unable to assign roles - license required.");let r=await Ce.bulkGet(e);for(let a of r){if(t.role&&t.role.roleId){let n=wa.db.getProdWorkspaceID(t.role.appId);a.roles[n]=t.role.roleId}if(t.appBuilder){let n=wa.db.getProdWorkspaceID(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 Ce.bulkUpdate(r)}async function CC(e,t){if(!await rt())throw new Error("Unable to un-assign roles - license required.");let r=await Ce.bulkGet(e);for(let a of r){if(t.role){let n=wa.db.getProdWorkspaceID(t.role?.appId);a.roles[n]===t.role.roleId&&delete a.roles[n]}if(t.appBuilder&&a.builder?.apps){let n=wa.db.getProdWorkspaceID(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 Vs={};w(Vs,{buildExportFn:()=>LC,buildImportFn:()=>OC});var Ks=require("@budibase/backend-core");function OC(e){return async(t,r)=>{await rt()||t.throw(403,"Endpoint unavailable, license required."),t.request.files?.appExport||t.throw(400,"Must provide app export file for import."),await Ks.context.doInWorkspaceContext(t.params.appId,async()=>{await e(t),t.body=void 0,t.status=204,await r()})}}function LC(e){return async(t,r)=>{await rt()||t.throw(403,"Endpoint unavailable, license required.");let{encryptPassword:a,excludeRows:n}=t.request.body;await Ks.context.doInWorkspaceContext(t.params.appId,async()=>{t.request.body={encryptPassword:a,excludeRows:n},t.query.appId=t.params.appId,await e(t),await r()})}}var ne=require("@budibase/backend-core"),ae=require("@budibase/types"),nm=P(require("fs")),om=require("path");var Ys=require("@budibase/backend-core"),rm;function am(){rm=new Ys.queue.BudibaseQueue(Ys.queue.JobQueue.APP_BACKUP,{maxStalledCount:3,jobOptions:{attempts:3,removeOnFail:!0,removeOnComplete:!0}})}function Dt(){return rm}async function Hs(e,t={}){return _e.storeAppBackupMetadata(e,t)}function sm(e){let t=new Date().toISOString();switch(e){case ae.AppBackupStatus.COMPLETE:case ae.AppBackupStatus.FAILED:return{timestamp:t,finishedAt:t};case ae.AppBackupStatus.STARTED:return{timestamp:t,startedAt:t};case ae.AppBackupStatus.PENDING:return{timestamp:t,createdAt:t}}}async function PC(e,t,r,a){let n=await qn(e);return await _e.storeAppBackupMetadata({...n,...sm(t),contents:r,status:t,type:ae.AppBackupType.BACKUP},{filename:a,docId:e})}async function UC(e,t,r){let a=await qn(e);return await _e.storeAppBackupMetadata({...a,...sm(r),status:r,type:ae.AppBackupType.RESTORE,trigger:ae.AppBackupTrigger.MANUAL},{docId:e,docRev:t})}async function qn(e){return _e.getAppBackupMetadata(e)}async function qC(e,t){return _e.updateAppBackupMetadata(e,t)}async function im(e){let t=await _e.getAppBackupMetadata(e);return t.filename&&await ne.objectStore.deleteFile(ne.objectStore.ObjectStoreBuckets.BACKUPS,t.filename),_e.deleteAppBackupMetadata(e)}async function DC(e){let t=[];for(let r of e)try{await im(r),t.push({backupId:r,success:!0})}catch(a){t.push({backupId:r,success:!1,error:a instanceof Error?a.message:"Unknown error"})}return t}async function NC(e,t){return _e.fetchAppBackups(e,t)}async function um(e){let t=await _e.getAppBackupMetadata(e);if(!t.filename)throw new Error("Backup incomplete - cannot download.");let r=await ne.objectStore.getReadStream(ne.objectStore.ObjectStoreBuckets.BACKUPS,t.filename);return{metadata:t,stream:r}}async function BC(e){let{stream:t}=await um(e),r=(0,om.join)(ne.objectStore.budibaseTempDir(),ne.utils.newid()),a=nm.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 MC(e,t,r={}){let a;try{a=await Hs({appId:e,trigger:t,timestamp:new Date().toISOString(),status:ae.AppBackupStatus.PENDING,type:ae.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 ne.events.backup.appBackupTriggered(e,a.id,ae.AppBackupType.BACKUP,t,r?.name),a.id}async function kC(e,t,r,a){let n=await qn(t),o;try{o=await Hs({appId:e,timestamp:new Date().toISOString(),status:ae.AppBackupStatus.PENDING,type:ae.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}}async function GC(e,t,r){let a=ne.db.getProdWorkspaceID(e);await ne.context.doInWorkspaceContext(a,async()=>{let n=ne.context.getProdWorkspaceDB();if(!await n.exists())return;let s=await n.tryGet(ae.DocumentType.APP_METADATA);s&&(s.backupErrors||(s.backupErrors={}),s.backupErrors[t]||(s.backupErrors[t]=[]),s.backupErrors[t].push(r),await n.put(s),await ne.cache.workspace.invalidateWorkspaceMetadata(s.appId,s))})}var FC={isEnabled:gs,triggerAppRestore:pe(kC),triggerAppBackup:pe(MC),getBackupDownloadStream:pe(um),downloadAppBackup:pe(BC),fetchAppBackups:pe(NC),storeAppBackupMetadata:pe(Hs),updateBackupStatus:pe(PC),updateRestoreStatus:pe(UC),getAppBackup:pe(qn),updateAppBackup:pe(qC),deleteAppBackup:pe(im),deleteAppBackups:pe(DC),trackBackupError:pe(GC)},Oe=FC;var Js={};w(Js,{init:()=>zs});var Q=require("@budibase/backend-core"),Fe=require("@budibase/types"),fr=P(require("fs"));async function zs(e){Dt().process(async t=>{let r=t.data;try{if(r.export)return console.log("Exporting app backup:",r.appId,r.export.trigger),QC(t,e);if(r.import)return console.log("Importing app backup:",r.appId,r.import.backupId),jC(t,e)}catch(a){Q.logging.logAlert(`Failed to perform backup for app ID: ${r.appId}`,a)}})}async function WC(e){await Q.db.getDB(e,{skip_setup:!0}).destroy()}async function cm(e,t,r,a){let n=Q.db.getDevWorkspaceID(r),o=Q.db.getProdWorkspaceID(r),s=new Date().toISOString(),i=async(c,f)=>{a?.doc?await Oe.updateBackupStatus(a.doc.id,c,f?.contents,f?.filename):await Oe.storeAppBackupMetadata({appId:o,timestamp:s,trigger:e,status:c,name:a?.name,type:Fe.AppBackupType.BACKUP,contents:f?.contents,createdBy:a?.createdBy},{filename:f?.filename})};try{let c=await a.processing.exportAppFn(n,{tar:!0}),f=await a.processing.statsFn(n),m=`${o}/backup-${s}.tar.gz`,g=Q.objectStore.ObjectStoreBuckets.BACKUPS,y=fr.default.createReadStream(c);await Q.objectStore.streamUpload({bucket:g,filename:m,stream:y,extra:{type:"application/gzip",metadata:{name:a?.name,trigger:e,timestamp:s,appId:o}}}),await i(Fe.AppBackupStatus.COMPLETE,{filename:m,contents:f}),fr.default.existsSync(c)&&fr.default.rmSync(c)}catch(c){Q.logging.logAlert("App backup error",c),await i(Fe.AppBackupStatus.FAILED);let f=a?.doc?.id||`backup-${s}`,m=c instanceof Error?c.message:String(c);await Oe.trackBackupError(o,f,`Backup export failed: ${m}`)}}async function jC(e,t){let r=e.data,a=r.appId,n=r.import.backupId,o=r.import.nameForBackup,s=r.import.createdBy,i=Q.tenancy.getTenantIDFromWorkspaceID(a);return Q.tenancy.doInTenant(i,async()=>{let c=Q.db.getDevWorkspaceID(a),f=`${c}_temp_${Date.now()}`,{rev:m}=await Oe.updateRestoreStatus(r.docId,r.docRev,Fe.AppBackupStatus.STARTED);await cm(Fe.AppBackupTrigger.RESTORING,i,a,{processing:t,createdBy:s,name:o});let g=await Oe.downloadAppBackup(n),y=Fe.AppBackupStatus.COMPLETE;try{await t.importAppFn(f,Q.db.getDB(f),{file:{type:"application/gzip",path:g},key:g}),await WC(c),await new Q.db.Replication({source:f,target:c}).replicate()}catch(I){Q.logging.logAlert("App restore error",I),y=Fe.AppBackupStatus.FAILED;let C=I instanceof Error?I.message:String(I);await Oe.trackBackupError(a,n,`Backup restore failed: ${C}`)}finally{try{await Q.db.getDB(f,{skip_setup:!0}).destroy()}catch{}}await Oe.updateRestoreStatus(r.docId,m,y),fr.default.existsSync(g)&&fr.default.rmSync(g,{force:!0})})}async function QC(e,t){let r=e.data,a=r.appId,n=r.export.trigger,o=r.export.name,s=Q.tenancy.getTenantIDFromWorkspaceID(a);await Q.tenancy.doInTenant(s,async()=>{try{let{rev:i}=await Oe.updateBackupStatus(r.docId,Fe.AppBackupStatus.STARTED);return cm(n,s,a,{processing:t,doc:{id:r.docId,rev:i},name:o})}catch(i){Q.logging.logAlert("App backup error",i);let c=i instanceof Error?i.message:String(i);await Oe.trackBackupError(a,r.docId,`Backup export failed: ${c}`)}})}var $C=async e=>{am(),await zs(e.processing)},Se={...Oe,processing:Js,init:$C,getBackupQueue:Dt};var pm=async e=>{e.backups&&await Se.init(e.backups)};var ye={};w(ye,{create:()=>MM,find:()=>BM,get:()=>NM,remove:()=>GM,update:()=>kM});var PA=P($i()),st=require("@budibase/backend-core");var UA=require("@budibase/types");async function NM(e){let t=st.tenancy.getGlobalDB(),r=new st.db.QueryBuilder(t.name,UA.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 BM(e){return await st.users.getById(e)}async function MM(e){let t=await Ce.getUserByEmail(e.email);if(t){if(t.scimInfo?.isSync)throw new st.HTTPError("User is already synched",409);e={...t,scimInfo:(0,PA.default)(t.scimInfo,e.scimInfo),password:void 0,firstName:e.firstName,lastName:e.lastName,updatedAt:e.updatedAt}}return await Ce.save(e,{requirePassword:!1})}async function kM(e,t){return await Ce.save(e,{requirePassword:!1,allowChangingEmail:t?.allowChangingEmail})}async function GM(e){return await Ce.destroy(e)}var br={};w(br,{create:()=>FM});var qA=P($i());var DA=require("@budibase/backend-core");async function FM(e){let t=await Io(e.name),r;if(!t)r=(await j.save(e)).id;else{if(t.scimInfo?.isSync)throw new DA.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,qA.default)(t.scimInfo,e.scimInfo),await j.save(t)}return await j.get(r)}var Bt={};w(Bt,{logRequest:()=>WM,logResponse:()=>jM});var Ki=require("@budibase/backend-core");async function WM(e){Ki.logging.logWarn("SCIM request log",e)}async function jM(e){Ki.logging.logWarn("SCIM response error",e)}var Xi={};w(Xi,{doInScimContext:()=>Yi,feature:()=>$,internalGroupOnly:()=>_a,licenseAuth:()=>MA,licensing:()=>NA,requireSCIM:()=>Hi,scimGroupOnly:()=>va,scimUserOnly:()=>Ra});var St=require("@budibase/backend-core");var Vn=require("@budibase/types"),QM=(e={checkUsersLimit:!0})=>async(t,r)=>{if((e.licensingCheck?e.licensingCheck:()=>!!t.user)(t)){if(St.env.SELF_HOSTED&&St.env.DEFAULT_LICENSE)return t.user.license=So,r();t.user.license=await Ke.cache.getCachedLicense(t,{populateLicense:e.populateLicense,populateFreeLicense:e.populateFreeLicense}),e.checkUsersLimit&&(St.utils.isServingApp(t)||St.utils.isServingBuilder(t)||St.utils.isServingBuilderPreview(t)||St.utils.isPublicApiRequest(t))&&await ze.usageLimitIsExceeded({name:Vn.StaticQuotaName.USERS,type:Vn.QuotaUsageType.STATIC,usageChange:0})}return r()},NA=QM;var $={};w($,{requireFeature:()=>$M,requireFeatures:()=>KM});var $M=e=>async(t,r)=>{await hn(e),await r()},KM=(...e)=>async(t,r)=>{await ms(e),await r()};var Yn=require("@budibase/backend-core");var Yi=async(e,t)=>(Yn.env.DISABLE_SCIM_CALLS||await Bt.logRequest({...e.request.toJSON(),body:e.request.body}),await Yn.context.doInScimContext(async()=>{let r=await t();return await Bt.logResponse({...e.response.toJSON(),body:e.response.body}),r}));var Hi=async(e,t)=>{await As(),await t()};var BA=require("@budibase/backend-core");var Ra=e=>zi(BA.users.getById,e,!0),va=e=>zi(M.get,e,!0),_a=e=>zi(M.get,e,!1);function zi(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 xa=require("@budibase/backend-core");var Ji=require("dd-trace");async function MA(e,t){await Ji.tracer.trace("licenseAuth",async r=>{let a=e.request.headers[xa.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 ps(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"),Ji.tracer.setUser({id:"anonymous",tenantId:n.tenantId}),await xa.context.doInSelfHostTenantUsingCloud(n.tenantId,async()=>{await xa.context.doInLicenseContext(n,async()=>{await t()})})})}var iu={};w(iu,{appBackups:()=>vb,auditLogs:()=>yb,environmentVariables:()=>ib,groups:()=>XA,scim:()=>rI,users:()=>iI});var kA=require("@budibase/backend-core");async function GA(e){let t=e.request.body;if(t.name=t.name.trim(),delete t.roles,t._id){let a=await bt(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 FA(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 vn(t,r)),a&&(o=await xs(t,a)),e.body={added:n,removed:o}}async function WA(e){let t=e.params.groupId,r=e.request.body.add,a=e.request.body.remove;(r&&!Array.isArray(r)||a&&!Array.isArray(a))&&e.throw(400,"Must supply a list of objects, with appId and roleId to add or remove"),e.body=await Cs(t,{appsToAdd:r,appsToRemove:a})}async function jA(e){e.body={data:await ha()}}async function QA(e){let{groupId:t,rev:r}=e.params;try{await _s(t,r),e.body={message:"Group deleted successfully"}}catch(a){e.throw(a.status,a)}}async function $A(e){try{e.body=await bt(e.params.groupId)}catch(t){e.throw(t.status,t)}}async function KA(e){let{pageSize:t=10,bookmark:r,emailSearch:a}=e.request.query,n=e.params.groupId,o={limit:t+1},s=await Qa(n,{...o,emailSearch:a,bookmark:r}),i=a?s[t]?.email:s[t]?._id,c=!!i;e.body={users:s.slice(0,t),bookmark:i,hasNextPage:c}}async function VA(e){let{groupId:t,appId:r}=e.params;await Os(t,r),e.body={message:"Group app builder access updated."}}async function YA(e){let{groupId:t,appId:r}=e.params;await Ls(t,r),e.body={message:"group app builder access removed."}}async function HA(e){let{groupId:t}=e.params,{csvContent:r}=e.request.body;(r===void 0||r.trim().length===0)&&e.throw(400,"CSV is empty");let a=await kA.csv.jsonFromCsvString(r,{allowSingleColumn:!0});(!a||a.length===0)&&e.throw(400,"CSV file is invalid");let o=Object.keys(a[0]).find(g=>/^(email|e-mail|email address|mail|e_mail)$/i.test(g.trim()));o||e.throw(400,"CSV file must contain an email column");let s=Array.from(new Set(a.map(g=>g[o]).filter(g=>g&&typeof g=="string"&&g.trim().length>0).map(g=>g.trim())));s.length===0&&e.throw(400,"No valid email addresses found in CSV");try{await bt(t)}catch(g){if(g.status===404)e.throw(404,"Group not found");else throw g}let i=[],c=[],f=[],m=await Promise.all(s.map(g=>Ce.getUserByEmail(g)));for(let g of s){let y=m.find(I=>I?.email===g);y?(i.push({_id:y._id,email:y.email}),f.push(y._id)):c.push({email:g,reason:"User not found"})}f.length>0&&await vn(t,f),e.body={added:i,skipped:c}}var zA=P(require("@koa/router")),le=P(require("joi"));var we=require("@budibase/types"),Le=require("@budibase/backend-core"),JA=new zA.default;function YM(){return Le.auth.joiValidator.body(le.default.object({_id:le.default.string().optional(),_rev:le.default.string().optional(),color:le.default.string().required(),icon:le.default.string().required(),name:le.default.string().trim().required().max(50),role:le.default.string().optional(),users:le.default.array().optional(),apps:le.default.array().optional(),roles:le.default.object().optional(),createdAt:le.default.string().optional(),updatedAt:le.default.string().optional()}).required())}JA.post("/api/global/groups",Le.auth.adminOnly,$.requireFeature(we.Feature.USER_GROUPS),YM(),GA).get("/api/global/groups",$.requireFeature(we.Feature.USER_GROUPS),jA).delete("/api/global/groups/:groupId/:rev",$.requireFeature(we.Feature.USER_GROUPS),Le.auth.adminOnly,_a("groupId"),QA).get("/api/global/groups/:groupId",$.requireFeature(we.Feature.USER_GROUPS),Le.auth.builderOrAdmin,$A).get("/api/global/groups/:groupId/users",$.requireFeature(we.Feature.USER_GROUPS),Le.auth.builderOrAdmin,KA).post("/api/global/groups/:groupId/users",Le.auth.adminOnly,$.requireFeature(we.Feature.USER_GROUPS),_a("groupId"),FA).post("/api/global/groups/:groupId/users/bulk",Le.auth.adminOnly,$.requireFeature(we.Feature.USER_GROUPS),_a("groupId"),Le.auth.joiValidator.body(le.default.object({csvContent:le.default.string().required()}).required()),HA).post("/api/global/groups/:groupId/apps",Le.auth.builderOrAdmin,$.requireFeature(we.Feature.USER_GROUPS),WA).post("/api/global/groups/:groupId/app/:appId/builder",Le.auth.builderOrAdmin,$.requireFeatures(we.Feature.USER_GROUPS,we.Feature.APP_BUILDERS),VA).delete("/api/global/groups/:groupId/app/:appId/builder",Le.auth.builderOrAdmin,$.requireFeatures(we.Feature.USER_GROUPS,we.Feature.APP_BUILDERS),YA);var XA=JA;var Zi=require("@budibase/types");var eu=require("@budibase/backend-core");async function ZA(e){e.body={encryptionKeyAvailable:Je.isEncryptionKeyAvailable()}}async function eb(e){e.body={variables:await Je.fetch()}}async function tb(e){let{name:t,production:r,development:a}=e.request.body;await Je.update(t,{production:r,development:a});let n=[Zi.AppEnvironment.PRODUCTION];r!==a&&n.push(Zi.AppEnvironment.DEVELOPMENT),await eu.events.environmentVariable.created(t,n),e.body={message:`Environment variable "${t}" created.`}}async function rb(e){let{production:t,development:r}=e.request.body,a=e.params.varName;await Je.update(a,{production:t,development:r}),e.body={message:`Environment variable "${a}" updated.`}}async function ab(e){let t=e.params.varName;await Je.remove(t),await eu.events.environmentVariable.deleted(t),e.body={message:`Environment variable "${t}" deleted.`}}var Mt=require("@budibase/backend-core"),ob=P(require("@koa/router")),Ca=P(require("joi")),sb=new ob.default;function nb(){return Mt.auth.joiValidator.body(Ca.default.object({name:Ca.default.string().optional(),production:Ca.default.string().required(),development:Ca.default.string().required()}))}sb.get("/api/env/variables/status",Mt.auth.builderOrAdmin,ZA).get("/api/env/variables",Mt.auth.builderOrAdmin,eb).post("/api/env/variables",Mt.auth.builderOrAdmin,nb(),tb).patch("/api/env/variables/:varName",Mt.auth.builderOrAdmin,nb(),rb).delete("/api/env/variables/:varName",Mt.auth.builderOrAdmin,ab);var ib=sb;var tu=require("@budibase/backend-core");async function ub(e){let t=e.request.body,r=await It.fetch(t);await tu.events.auditLog.filtered(t),e.body=r}async function cb(e){let t=e.request.body,{stream:r}=It.download(t);await tu.events.auditLog.downloaded(t),e.attachment(`audit-logs-${Date.now()}.log`),e.body=r}async function pb(e){e.body={events:It.definitions()}}var fb=require("@budibase/types"),kt=require("@budibase/backend-core"),mb=P(require("@koa/router")),Pe=P(require("joi"));function lb(){return kt.auth.joiValidator.body(Pe.default.object({userIds:Pe.default.array().items(Pe.default.string()).optional(),appIds:Pe.default.array().items(Pe.default.string()).optional(),events:Pe.default.array().items(Pe.default.string().valid(...Object.values(fb.Event))).optional(),startDate:Pe.default.string().optional().allow(""),endDate:Pe.default.string().optional().allow(""),fullSearch:Pe.default.string().optional().allow(""),bookmark:Pe.default.number()}))}var gb=new mb.default;gb.post("/api/global/auditlogs/search",kt.auth.adminOnly,lb(),ub).get("/api/global/auditlogs/download",kt.auth.adminOnly,kt.middleware.querystringToBody,lb(),cb).get("/api/global/auditlogs/definitions",kt.auth.adminOnly,pb);var yb=gb;var Hn=require("@budibase/backend-core"),ru=require("@budibase/types");async function Gt(e,t){t||e.throw(400,"App ID missing"),await Yt.workspaceExists(t)||e.throw(400,`Provided app ID: ${t} - is invalid.`)}async function hb(e){let t=e.params.appId;await Gt(e,t);let r=e.request.body,a=e.user?._id,n=await Se.triggerAppBackup(t,ru.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 Ab(e){let t=e.params.appId;await Gt(e,t);let r=e.params.backupId,a=e.request.body.name,n=await Se.triggerAppRestore(t,r,a,e.user?._id);n||e.throw(500,"Unable to start restore."),await Hn.events.backup.appBackupRestored(n.metadata),e.body={restoredId:n?.restoreId,message:"Restore triggered - process starting."}}async function bb(e){let t=e.params.appId;await Gt(e,t);let r=e.params.backupId;await Se.deleteAppBackup(r),e.body={message:"Backup deleted successfully."}}async function Ib(e){let t=Hn.context.getWorkspaceId();await Gt(e,t);let{backupIds:r}=e.request.body;(!Array.isArray(r)||r.length===0)&&e.throw(400,"backupIds must be a non-empty array");let a=await Se.deleteAppBackups(r),n=a.filter(s=>s.success).length,o=a.length-n;e.body={message:`${n} backups deleted successfully${o>0?`, ${o} failed`:""}.`,results:a,successCount:n,failureCount:o}}async function Sb(e){let t=e.params.appId;await Gt(e,t);let r=e.request.body;r?.trigger&&(r.trigger=r.trigger.toLowerCase(),Object.values(ru.AppBackupTrigger).includes(r.trigger)||e.throw(400,"Provided trigger is not a valid option.")),e.body=await Se.fetchAppBackups(t,{paginate:!0,...r})}async function wb(e){let t=e.params.appId;await Gt(e,t);let r=e.params.backupId,a=e.request.body;e.body=await Se.updateAppBackup(r,a.name)}async function Tb(e){let t=e.params.appId;await Gt(e,t);let r=e.params.backupId,{metadata:a,stream:n}=await Se.getBackupDownloadStream(r);e.attachment(`backup-${a.timestamp}.tar.gz`),e.body=n}var Eb=P(require("@koa/router")),Ft=P(require("joi")),zn=require("@budibase/types"),it=require("@budibase/backend-core"),Rb=new Eb.default;function XM(){return it.auth.joiValidator.body(Ft.default.object({trigger:Ft.default.string().valid(...Object.values(zn.AppBackupTrigger)),type:Ft.default.string().valid(...Object.values(zn.AppBackupType)),startDate:Ft.default.date(),endDate:Ft.default.date(),page:Ft.default.string()}))}Rb.post("/api/apps/:appId/backups",it.auth.builderOrAdmin,hb).post("/api/apps/:appId/backups/search",it.auth.builderOrAdmin,XM(),Sb).get("/api/apps/:appId/backups/:backupId/file",it.auth.builderOrAdmin,Tb).patch("/api/apps/:appId/backups/:backupId",it.auth.builderOrAdmin,wb).delete("/api/apps/:appId/backups/:backupId",it.auth.builderOrAdmin,bb).delete("/api/apps/:appId/backups",it.auth.builderOrAdmin,Ib).post("/api/apps/:appId/backups/:backupId/import",it.auth.builderOrAdmin,Ab);var vb=Rb;var tI=P(require("@koa/router"));var Jn=require("scim-patch");var xb=require("@budibase/backend-core");function _b(e,t){let r=e.request.query[t];if(r!==void 0)return+r}var Cb=async e=>{let t=_b(e,"pageSize")??20,r=_b(e,"startIndex"),a;e.request.query.filter&&(a=Y.user.userFilters(e.request.query.filter));let n=await ye.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(Y.user.toScimUserResponse),startIndex:(r||0)+1,itemsPerPage:t}},Ob=async e=>{let{id:t}=e.params;typeof t!="string"&&e.throw(404);let r=await ye.find(t);e.body=Y.user.toScimUserResponse(r)},Lb=async e=>{let t=Y.user.fromScimUser(e.request.body);try{let r=await ye.create(t);e.body=Y.user.toScimUserResponse(r)}catch(r){throw r instanceof xb.EmailUnavailableError&&e.throw(409,"Email already in use"),r}};function ZM(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 Pb=async e=>{let t=await ye.find(e.params.id);t||e.throw(404);let r=Y.user.toScimUserResponse(t),a=e.request.body;try{(0,Jn.patchBodyValidation)(a)}catch{}if(ZM(a))return au(e);let n;try{n=(0,Jn.scimPatch)(r,a.Operations)}catch{}n||e.throw(500);let o=Y.user.fromScimUser(n);await ye.update(o,{allowChangingEmail:!0}),e.body=Y.user.toScimUserResponse(o)},au=async e=>{let{id:t}=e.params;typeof t!="string"&&e.throw(404),await ye.remove(t),e.status=204};var Vb=P(Kb()),Yb=require("@budibase/shared-core"),Xn=require("scim-patch");var Zn=require("scim2-parse-filter");function Hb(e,t){for(let r of t.split(","))delete e[r]}var zb=async e=>{let r=(await j.fetch()).filter(o=>o.scimInfo?.isSync).map(Y.group.toScimGroupResponse),{filter:a,excludedAttributes:n}=e.request.query;if(a){let o=(0,Zn.filter)((0,Zn.parse)(a));r=r.filter(o)}n&&r.forEach(o=>{Hb(o,n)}),e.body={schemas:["urn:ietf:params:scim:api:messages:2.0:ListResponse"],totalResults:r.length,Resources:r,startIndex:1,itemsPerPage:r.length}},Jb=async e=>{let t=Y.group.fromScimGroup(e.request.body),r=await br.create(t);e.body=Y.group.toScimGroupResponse(r)},Xb=async e=>{let{id:t}=e.params,r=await j.get(t),a=Y.group.toScimGroupResponse(r),{excludedAttributes:n}=e.request.query;n&&Hb(a,n),e.body=a},Zb=async e=>{let{id:t}=e.params,r=await j.get(t);await j.remove(t,r._rev),e.status=204},eI=async e=>{let{id:t}=e.params,r=await j.get(t),a=Y.group.toScimGroupResponse(r),n=e.request.body;try{(0,Xn.patchBodyValidation)(n)}catch{e.throw(400)}let{true:o,false:s}=(0,Vb.default)(n.Operations,i=>i.path==="members");if(s?.length){let i=(0,Xn.scimPatch)(a,s);i||e.throw(500);let c={...Y.group.fromScimGroup(i),_rev:r._rev};await j.save(c)}if(o?.length){let i=[],c=[];for(let{op:f,value:m}of o)switch(f){case"add":case"Add":for(let g of m)i.push(await ye.find(g.value));break;case"remove":case"Remove":for(let g of m)c.push(await ye.find(g.value));break;case"replace":case"Replace":throw new Error("Replacing members is not allowed");default:Yb.utils.unreachable(f)}i.length&&await j.addUsers(t,i.map(f=>f._id)),c.length&&await j.removeUsers(t,c.map(f=>f._id))}e.body=Y.group.toScimGroupResponse(await j.get(t))};var Oa=require("@budibase/types"),Te=new tI.default({prefix:"/api/global/scim/v2"});Te.use(Hi);Te.use(Yi);Te.get("/users",Cb);Te.get("/users/:id",Ra("id"),Ob);Te.post("/users",Lb);Te.patch("/users/:id",Ra("id"),Pb);Te.delete("/users/:id",Ra("id"),au);Te.get("/groups",zb);Te.post("/groups",$.requireFeature(Oa.Feature.USER_GROUPS),Jb);Te.get("/groups/:id",$.requireFeature(Oa.Feature.USER_GROUPS),va("id"),Xb);Te.delete("/groups/:id",$.requireFeature(Oa.Feature.USER_GROUPS),va("id"),Zb);Te.patch("/groups/:id",$.requireFeature(Oa.Feature.USER_GROUPS),va("id"),eI);var rI=Te;var oI=P(require("@koa/router"));var nu=require("@budibase/backend-core");async function aI(e){let{userId:t,appId:r}=e.params,a=await nt.db.getUser(t);if(nu.users.isGlobalBuilder(a)){e.body={message:"User already admin - no permissions updated."};return}await nt.addAppBuilder(a,r),e.body={message:`User "${a.email}" app builder access updated.`}}async function nI(e){let{userId:t,appId:r}=e.params,a=await nt.db.getUser(t);if(nu.users.isGlobalBuilder(a)){e.body={message:"User already admin - no permissions removed."};return}await nt.removeAppBuilder(a,r),e.body={message:`User "${a.email}" app builder access removed.`}}var ou=require("@budibase/types"),su=require("@budibase/backend-core"),sI=new oI.default;sI.post("/api/global/users/:userId/app/:appId/builder",su.auth.builderOrAdmin,$.requireFeatures(ou.Feature.APP_BUILDERS),aI).delete("/api/global/users/:userId/app/:appId/builder",su.auth.builderOrAdmin,$.requireFeatures(ou.Feature.APP_BUILDERS),nI);var iI=sI;var Y={};w(Y,{group:()=>cu,user:()=>uu});var uu={};w(uu,{fromScimUser:()=>xk,toScimUserResponse:()=>Rk,userFilters:()=>Ck});var eo=require("@budibase/types"),uI=require("scim2-parse-filter"),cI=require("@budibase/backend-core"),pI=require("@budibase/shared-core"),{unreachable:Ek}=pI.utils,Rk=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===eo.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},vk=e=>!!e?.id;function _k(e){if(cI.utils.validEmail(e.userName))return e.userName;if(e.emails)return e.emails.find(t=>t.primary)?.value||e.emails[0]?.value}var xk=e=>{let t=vk(e)?e:void 0,r=_k(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:Ek(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?eo.UserStatus.ACTIVE:eo.UserStatus.INACTIVE,createdAt:t?.meta.created.getTime(),updatedAt:t?.meta.lastModified.toISOString()}},Ck=e=>{let t={equal:{}},r=(0,uI.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 cu={};w(cu,{fromScimGroup:()=>Pk,toScimGroupResponse:()=>Ok});var Ok=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}))}),Lk=e=>!!e?.id,Pk=e=>{let t=Lk(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 Uu={};w(Uu,{LLM:()=>Xe,LLMRequest:()=>K,TableGeneration:()=>Pu,agentHistoryTitleSystemPrompt:()=>jk,agentSystemPrompt:()=>Wk,aiColumnSchemas:()=>Ou,aiTableResponseToTableSchema:()=>vu,appendAIColumns:()=>_u,classifyText:()=>du,cleanData:()=>fu,extractFileData:()=>Mk,generateAIColumns:()=>Eu,generateCode:()=>Fk,generateCronExpression:()=>mu,generateData:()=>Ru,generateJs:()=>Au,generateSQL:()=>Gk,generateTables:()=>Tu,generationStructure:()=>Cu,getLLM:()=>Ua,getLLMConfig:()=>wu,getLLMOrThrow:()=>SI,normalizeContentType:()=>pu,parseResponseFormat:()=>ro,sanitiseToolName:()=>Uk,searchWeb:()=>hu,sentimentAnalysis:()=>yu,summarizeText:()=>to,tableDataStructuredOutput:()=>Lu,translate:()=>gu});var La=require("@budibase/types");function Uk(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 pu(e){return e?e.includes("/")?e:{[La.SupportedFileType.PDF]:"application/pdf",[La.SupportedFileType.JPG]:"image/jpeg",[La.SupportedFileType.JPEG]:"image/jpeg",[La.SupportedFileType.PNG]:"image/png"}[e.toLowerCase()]||"application/octet-stream":"application/octet-stream"}var io=require("@budibase/types");var Ze=require("@budibase/backend-core"),hI=require("@budibase/types");var ao=P(require("openai"));var wt=require("@budibase/types");var lI=require("@budibase/shared-core");var Tt=P(require("dd-trace"));function lu(e,t){return t.map(r=>e[r]).join(" ")}var Xe=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||"1000")}get model(){return this._model}get apiKey(){return this._apiKey}get maxTokens(){return this._maxTokens}async prompt(t){return await Tt.default.trace("prompt",async()=>{let r=typeof t=="string"?new K().addUserMessage(t):t,{messages:a,tokensUsed:n}=await Tt.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 Tt.default.trace("chat",async()=>await this.chatCompletion(t))}async*chatStream(t){yield*this.chatCompletionStream(t)}async summarizeText(t){return Tt.default.trace("summarizeText",()=>this.prompt(to(t)))}async generateCronExpression(t){return Tt.default.trace("generateCronExpression",()=>this.prompt(mu(t)))}async operation(t,r){return Tt.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:c}=t;switch(a){case wt.AIOperationEnum.SUMMARISE_TEXT:return to(lu(r,o));case wt.AIOperationEnum.CLEAN_DATA:return fu(r[n]);case wt.AIOperationEnum.TRANSLATE:return gu(r[n],s);case wt.AIOperationEnum.CATEGORISE_TEXT:if(!i)throw Error("No categories provided for categorise text operation. Please provide categories.");return du(lu(r,o),i.split(","));case wt.AIOperationEnum.SENTIMENT_ANALYSIS:return yu(r[n]);case wt.AIOperationEnum.PROMPT:return c;case wt.AIOperationEnum.SEARCH_WEB:return hu(lu(r,o));default:throw lI.utils.unreachable(a)}}async generateJs(t,r){return await Tt.default.trace("generateJs",async()=>{let{bindings:a=[],snippets:n=[]}=r||{};return await this.prompt(Au(a,n).addUserMessage(t))})}};var fI=require("@budibase/types"),bu=require("openai/helpers/zod");var mI=(a=>(a.GPT_5_MINI="gpt-5-mini",a.GPT_5="gpt-5",a.GPT_5_NANO="gpt-5-nano",a))(mI||{});function ro(e){if(e)return e==="text"?{type:"text"}:e==="json"?{type:"json_object"}:e}function dI(e){if(!e)return 0;let t=e.prompt_tokens;return e.completion_tokens*3+t}var Ue=class extends Xe{constructor(r){super(r);this.client=this.getClient(r)}getClient(r){if(!r.apiKey)throw new Error("No OpenAI API key found");return new ao.default({apiKey:r.apiKey})}async uploadFile(r,a,n){let o=pu(n);if(fI.ImageContentTypes.includes(o.toLowerCase())){let c;if(Buffer.isBuffer(r))c=r;else{let m=[];for await(let g of r)m.push(new Uint8Array(g));c=Buffer.concat(m)}let f=c.toString("base64");return`data:${o};base64,${f}`}let s=await(0,ao.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_completion_tokens:this._maxTokens,response_format:ro(r.format)};Object.values(mI).includes(this.model)&&(a.verbosity="low",a.reasoning_effort="minimal"),r.tools&&r.tools.length>0&&(a.tool_choice="auto",a.tools=r.tools.map(bu.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){if(i.type!=="function"||!i.function){console.warn(`[OPENAI TOOL WARN] Unsupported tool call type: ${i.type}`);continue}let c=i.function.name,f=r.findTool(c);if(!f)throw new Error(`Tool ${c} not found in prompt tools`);let m=JSON.parse(i.function.arguments);s.push(f.handler(m).then(g=>({role:"tool",tool_call_id:i.id,content:g})).catch(g=>(console.error(`[OPENAI TOOL ERROR] Tool ${c} failed in OpenAI handler:`,g),{role:"tool",tool_call_id:i.id,content:`Error: ${g.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:dI(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:ro(r.format),stream:!0};r.tools&&r.tools.length>0&&(a.tool_choice="auto",a.tools=r.tools.map(bu.zodFunction));try{let n=await this.client.chat.completions.create(a),o=null,s="",i=null;for await(let f of n){let m=f?.choices?.[0]?.delta;if(m){if(m.content&&(s+=m.content,yield{type:"content",content:m.content}),m.tool_calls&&m.tool_calls.length>0){let g=m.tool_calls[0];g.id?(o={id:g.id,name:g.function?.name||"",arguments:g.function?.arguments||""},yield{type:"tool_call_start",toolCall:{id:o.id,name:o.name,arguments:o.arguments}}):o&&g.function?.arguments&&(o.arguments+=g.function.arguments,yield{type:"tool_call_start",toolCall:{id:o.id,name:o.name,arguments:o.arguments}})}f.usage&&(i=f.usage)}}let c=i?dI(i):0;if(o){r.addMessage({role:"assistant",content:"",tool_calls:[{id:o.id,type:"function",function:{name:o.name,arguments:o.arguments}}]});let f=r.findTool(o.name);if(f)try{let m=JSON.parse(o.arguments),g=await f.handler(m);yield{type:"tool_call_result",toolResult:{id:o.id,result:g}},r.addMessage({role:"tool",tool_call_id:o.id,content:g}),yield*this.chatCompletionStream(r);return}catch(m){yield{type:"tool_call_result",toolResult:{id:o.id,result:`Error: ${m.message}`,error:m.message}},r.addMessage({role:"tool",tool_call_id:o.id,content:`Error: ${m.message}`}),yield*this.chatCompletionStream(r);return}else{let m=`Tool '${o.name}' not found`;yield{type:"tool_call_result",toolResult:{id:o.id,result:m,error:m}},r.addMessage({role:"tool",tool_call_id:o.id,content:m}),yield*this.chatCompletionStream(r);return}}s&&r.addMessage({role:"assistant",content:s}),yield{type:"done",messages:r.messages,tokensUsed:c}}catch(n){yield{type:"error",content:n.message}}}};var ee=require("@budibase/backend-core"),gI=require("@budibase/types");var Iu=require("dd-trace"),no=class extends Xe{async prompt(t){let r=await super.prompt(t);return r.tokensUsed&&await En(r.tokensUsed),r}async chat(t){let r=await super.chat(t);return r.tokensUsed&&await En(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 Ue({apiKey:ee.env.OPENAI_API_KEY,model:this.model,max_completion_tokens:this.maxTokens}).uploadFile(t,r,a)}async uploadFileSelfHost(t,r,a){let n;if(Buffer.isBuffer(t))n=t;else{let c=[];for await(let f of t)c.push(new Uint8Array(f));n=Buffer.concat(c)}let o=n.toString("base64");if(a&&gI.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 c=await gn();if(!c)throw new Error("No license key found");this._apiKey=c}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 Iu.tracer.trace("chatCompletionCloud",async()=>await new Ue({apiKey:ee.env.OPENAI_API_KEY,model:this.model,max_completion_tokens:this.maxTokens}).chatCompletion(t))}async chatCompletionSelfHost(t){return await Iu.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 gn();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 Ue({apiKey:ee.env.OPENAI_API_KEY,model:this.model,max_completion_tokens:this.maxTokens}).chatCompletionStream(t)}async*chatCompletionStreamSelfHost(t){try{let r=await this.chatCompletionSelfHost(t);if(r.messages.length>0){let 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 Pa=require("dd-trace");var Su=P(require("@anthropic-ai/sdk"));function qk(e){if(!e)return 0;let t=e.input_tokens;return e.output_tokens*3+t}var oo=class extends Xe{constructor(r){super(r);this.client=new Su.default({apiKey:r.apiKey})}firstTextBlock(r){for(let a of r.content)if(a.type==="text")return a.text}async 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:qk(a.usage)}}catch(a){throw a instanceof Su.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 AI=require("zod"),bI=require("openai/helpers/zod");var yI=require("openai"),so=class extends Ue{getClient(t){if(!t.apiKey)throw new Error("No Azure OpenAI API key found");if(!t.model)throw new Error("No Azure OpenAI model specified");return new yI.AzureOpenAI({apiKey:t.apiKey,apiVersion:"2024-10-01-preview",baseURL:t.baseUrl})}};var II="gpt-5-mini",Dk={OpenAI:Ue,TogetherAI:Ue,AzureOpenAI:so,Custom:Ue,Anthropic:oo,BudibaseAI:no};async function Nk(){return await Pa.tracer.trace("getAIConfig",async e=>{let t={type:hI.ConfigType.AI,config:{}};if(!Ze.context.isSelfHostUsingCloud()){let a=await Ze.configs.getAIConfig();a&&(t=a)}await bs(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||II,apiKey:r.apiKey,baseUrl:r.baseUrl}})}async function Bk(){return Pa.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:II,apiKey:Ze.env.OPENAI_API_KEY}})}async function wu(){return Pa.tracer.trace("getLLMConfig",async()=>await Nk()||await Bk())}async function Ua(e){return await Pa.tracer.trace("getLLM",async t=>{let{model:r,maxTokens:a}=e||{},n=await wu();if(!n){t.addTags({enabled:!1,reason:"no config found"});return}r&&(n.model=r),a&&(n.maxTokens=a);let o=Dk[n.provider];if(!o){t.addTags({enabled:!1,reason:"no provider found",provider:n.provider});return}return new o(n)})}async function SI(){let e=await Ua();if(!e)throw new Ze.HTTPError("No available LLM configurations",500);return e}var K=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 AI.z.ZodType?this.format=(0,bI.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 ut=require("zod");function to(e,t){let r=`Summarize this text:
39
39
  ${e}`,a="";if(t)switch(t){case io.SummariseLength.SHORT:a="In 1-2 concise sentences, ";break;case io.SummariseLength.MEDIUM:a="In 2-3 paragraphs, ";break;case io.SummariseLength.LONG:a="In multiple detailed paragraphs, ";break}return new K().addUserMessage(`${a}${r}.
40
40
  Only return the summary.`)}function Mk(e,t){let r=["You are a data extraction assistant.","Extract data from the attached document/image that matches the provided schema.","The schema defines the structure where values like 'string', 'number', 'boolean' indicate the expected data types.","Extract all items that match the schema from the document.","Return the data in json format","If no matching data is found, return an empty data array."].join(`
41
41
 
@@ -155,7 +155,7 @@ You may specify foreignColumnName, but do not create that field manually.
155
155
  `;return new K().addSystemMessage(e)}function Eu(){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 K().addSystemMessage(e)}function Ru(){let e=`
156
156
  For each table, populate the data field with realistic-looking sample records.
157
157
  Avoid placeholder values like "foo" or "bar". Use real names, emails, etc., and ensure values are unique across rows.
158
- `;return new K().addSystemMessage(e)}function jk(e){return`You are a helpful support agent who uses workflows to resolve user issues efficiently.
158
+ `;return new K().addSystemMessage(e)}function Wk(e){return`You are a helpful support agent who uses workflows to resolve user issues efficiently.
159
159
 
160
160
  - The user will ask support queries.
161
161
  - Your replies MUST be short, concise, and directly answer the user's question as quickly and clearly as possible.
@@ -170,13 +170,13 @@ Avoid placeholder values like "foo" or "bar". Use real names, emails, etc., and
170
170
 
171
171
  \`\`\`
172
172
  ${JSON.stringify(e)}
173
- \`\`\``}function Qk(){return`You will be provided with a set of history, a conversation between a user and an AI. Using this
173
+ \`\`\``}function jk(){return`You will be provided with a set of history, a conversation between a user and an AI. Using this
174
174
  information generate a title for the conversation, this should start with a capital letter and MUST be
175
- less than five words.`}var qa=require("@budibase/backend-core"),EI=require("@budibase/shared-core");var pt=require("@budibase/types"),wI=require("@budibase/backend-core");function vu(e){let t=[],r=[];for(let a of e.tables){let n=a.schema.reduce((o,s)=>{if(s.type===pt.FieldType.LINK){if(!r.includes(s.relationshipId)){let i={[pt.RelationshipType.MANY_TO_ONE]:pt.RelationshipType.ONE_TO_MANY,[pt.RelationshipType.ONE_TO_MANY]:pt.RelationshipType.MANY_TO_ONE,[pt.RelationshipType.MANY_TO_MANY]:pt.RelationshipType.MANY_TO_MANY},{reverseFieldName:p,relationshipId: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:wI.docIds.generateTableID(),name:a.name,primaryDisplay:a.primaryDisplay,schema:n})}return t}function _u(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"),de=A.z.object({name:A.z.string().describe("A human readable name for the field. It MUST be alpha-numeric and capitalised.")}),xu=de.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.")}),Wk=A.z.array(A.z.union([de.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().nullable()}),xu.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."),xu.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."),xu.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."),de.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"),de.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")}),de.extend({type:A.z.literal(T.FieldType.FORMULA),formula:A.z.string().describe(`
175
+ less than five words.`}var qa=require("@budibase/backend-core"),EI=require("@budibase/shared-core");var ct=require("@budibase/types"),wI=require("@budibase/backend-core");function vu(e){let t=[],r=[];for(let a of e.tables){let n=a.schema.reduce((o,s)=>{if(s.type===ct.FieldType.LINK){if(!r.includes(s.relationshipId)){let i={[ct.RelationshipType.MANY_TO_ONE]:ct.RelationshipType.ONE_TO_MANY,[ct.RelationshipType.ONE_TO_MANY]:ct.RelationshipType.MANY_TO_ONE,[ct.RelationshipType.MANY_TO_MANY]:ct.RelationshipType.MANY_TO_MANY},{reverseFieldName:c,relationshipId:f,...m}=s;o[s.name]={...m,fieldName:c,relationshipType:i[s.relationshipType]},r.push(f)}}else o[s.name]=s;return o},{});t.push({_id:wI.docIds.generateTableID(),name:a.name,primaryDisplay:a.primaryDisplay,schema:n})}return t}function _u(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"),de=A.z.object({name:A.z.string().describe("A human readable name for the field. It MUST be alpha-numeric and capitalised.")}),xu=de.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.")}),Qk=A.z.array(A.z.union([de.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().nullable()}),xu.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."),xu.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."),xu.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."),de.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"),de.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")}),de.extend({type:A.z.literal(T.FieldType.FORMULA),formula:A.z.string().describe(`
176
176
  A JavaScript expression using only previously defined fields.
177
177
  Reference fields using $("Field name"). Must end with: return ...
178
178
  Example: return $("Score") + $("Weight")
179
- `),responseType:A.z.enum([T.FieldType.STRING,T.FieldType.NUMBER,T.FieldType.BOOLEAN,T.FieldType.DATETIME])}).describe("Define these types after the other types"),de.extend({type:A.z.literal(T.FieldType.DATETIME),ignoreTimezones:A.z.boolean()}).describe("A datetime field, storing date and time"),de.extend({type:A.z.literal(T.FieldType.DATETIME),ignoreTimezones:A.z.boolean(),timeOnly:A.z.literal(!0)}).describe("A time only field"),de.extend({type:A.z.literal(T.FieldType.DATETIME),ignoreTimezones:A.z.boolean(),dateOnly:A.z.literal(!0)}).describe("A date only field"),de.extend({type:A.z.literal(T.FieldType.ATTACHMENT_SINGLE),subtype:A.z.literal(T.AttachmentSubType.IMAGE)}).describe("Single image column"),de.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."),de.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."),de.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.")])),Cu=A.z.object({tables:A.z.array(A.z.object({name:A.z.string(),schema:Wk,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 Ou(e){let t=A.z.object({});for(let r of e){let a=Object.values(r.schema),n=[de.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."),de.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(de.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 G=require("zod"),TI=require("@budibase/shared-core"),D=require("@budibase/types");function Lu(e){let t=G.z.object({});for(let r of e){let a={_id:G.z.string().describe("Unique ID for the row")},n=G.z.union([G.z.literal("https://picsum.photos/600/600").describe("For profile pictures and similar"),G.z.literal("https://picsum.photos/1920/1080").describe("For anything else")]),o=G.z.object({fileName:G.z.string(),extension:G.z.enum([".pdf",".txt"]),content:G.z.string().describe("Random content for the file")});for(let s of Object.values(r.schema)){let{type:i}=s;switch(i){case D.FieldType.STRING:case D.FieldType.LONGFORM:a[s.name]=G.z.string();break;case D.FieldType.NUMBER:case D.FieldType.BIGINT:a[s.name]=G.z.number();break;case D.FieldType.BOOLEAN:a[s.name]=G.z.boolean();break;case D.FieldType.DATETIME:a[s.name]=G.z.string().describe(`ISO datetime. Use realistic dates, based on today's date, ${new Date().toISOString()}`);break;case D.FieldType.ATTACHMENT_SINGLE:s.subtype===D.AttachmentSubType.IMAGE?a[s.name]=n:a[s.name]=o;break;case D.FieldType.ATTACHMENTS:s.subtype===D.AttachmentSubType.IMAGE?a[s.name]=G.z.array(n):a[s.name]=G.z.array(o),a[s.name]=a[s.name].describe("Between 2 and 5 items.");break;case D.FieldType.OPTIONS:a[s.name]=G.z.enum(s.constraints.inclusion);break;case D.FieldType.LINK:{let p=G.z.string().describe(`Match one of the _ids created for table "${s.tableId}"`);s.relationshipType===D.RelationshipType.ONE_TO_MANY?a[s.name]=G.z.array(p).describe("Array with a single item"):s.relationshipType===D.RelationshipType.MANY_TO_MANY&&(a[s.name]=G.z.array(p).describe("Array with a one or many items. You can repeat the same ids between rows"))}break;case D.FieldType.ARRAY:a[s.name]=G.z.array(G.z.enum(s.constraints.inclusion));break;case D.FieldType.AI:case D.FieldType.AUTO:case D.FieldType.SIGNATURE_SINGLE:case D.FieldType.BB_REFERENCE:case D.FieldType.JSON:case D.FieldType.FORMULA:case D.FieldType.INTERNAL:case D.FieldType.BARCODEQR:case D.FieldType.BB_REFERENCE_SINGLE:break;default:throw TI.utils.unreachable(i)}}t=t.extend({[r.name]:G.z.array(G.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:
179
+ `),responseType:A.z.enum([T.FieldType.STRING,T.FieldType.NUMBER,T.FieldType.BOOLEAN,T.FieldType.DATETIME])}).describe("Define these types after the other types"),de.extend({type:A.z.literal(T.FieldType.DATETIME),ignoreTimezones:A.z.boolean()}).describe("A datetime field, storing date and time"),de.extend({type:A.z.literal(T.FieldType.DATETIME),ignoreTimezones:A.z.boolean(),timeOnly:A.z.literal(!0)}).describe("A time only field"),de.extend({type:A.z.literal(T.FieldType.DATETIME),ignoreTimezones:A.z.boolean(),dateOnly:A.z.literal(!0)}).describe("A date only field"),de.extend({type:A.z.literal(T.FieldType.ATTACHMENT_SINGLE),subtype:A.z.literal(T.AttachmentSubType.IMAGE)}).describe("Single image column"),de.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."),de.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."),de.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.")])),Cu=A.z.object({tables:A.z.array(A.z.object({name:A.z.string(),schema:Qk,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 Ou(e){let t=A.z.object({});for(let r of e){let a=Object.values(r.schema),n=[de.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."),de.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(de.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 G=require("zod"),TI=require("@budibase/shared-core"),D=require("@budibase/types");function Lu(e){let t=G.z.object({});for(let r of e){let a={_id:G.z.string().describe("Unique ID for the row")},n=G.z.union([G.z.literal("https://picsum.photos/600/600").describe("For profile pictures and similar"),G.z.literal("https://picsum.photos/1920/1080").describe("For anything else")]),o=G.z.object({fileName:G.z.string(),extension:G.z.enum([".pdf",".txt"]),content:G.z.string().describe("Random content for the file")});for(let s of Object.values(r.schema)){let{type:i}=s;switch(i){case D.FieldType.STRING:case D.FieldType.LONGFORM:a[s.name]=G.z.string();break;case D.FieldType.NUMBER:case D.FieldType.BIGINT:a[s.name]=G.z.number();break;case D.FieldType.BOOLEAN:a[s.name]=G.z.boolean();break;case D.FieldType.DATETIME:a[s.name]=G.z.string().describe(`ISO datetime. Use realistic dates, based on today's date, ${new Date().toISOString()}`);break;case D.FieldType.ATTACHMENT_SINGLE:s.subtype===D.AttachmentSubType.IMAGE?a[s.name]=n:a[s.name]=o;break;case D.FieldType.ATTACHMENTS:s.subtype===D.AttachmentSubType.IMAGE?a[s.name]=G.z.array(n):a[s.name]=G.z.array(o),a[s.name]=a[s.name].describe("Between 2 and 5 items.");break;case D.FieldType.OPTIONS:a[s.name]=G.z.enum(s.constraints.inclusion);break;case D.FieldType.LINK:{let c=G.z.string().describe(`Match one of the _ids created for table "${s.tableId}"`);s.relationshipType===D.RelationshipType.ONE_TO_MANY?a[s.name]=G.z.array(c).describe("Array with a single item"):s.relationshipType===D.RelationshipType.MANY_TO_MANY&&(a[s.name]=G.z.array(c).describe("Array with a one or many items. You can repeat the same ids between rows"))}break;case D.FieldType.ARRAY:a[s.name]=G.z.array(G.z.enum(s.constraints.inclusion));break;case D.FieldType.AI:case D.FieldType.AUTO:case D.FieldType.SIGNATURE_SINGLE:case D.FieldType.BB_REFERENCE:case D.FieldType.JSON:case D.FieldType.FORMULA:case D.FieldType.INTERNAL:case D.FieldType.BARCODEQR:case D.FieldType.BB_REFERENCE_SINGLE:break;default:throw TI.utils.unreachable(i)}}t=t.extend({[r.name]:G.z.array(G.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:
180
180
  1. If we have posts and comments, there should be more posts than users, and more comments than posts.
181
181
  2. If it's a ticketing system, there may be more tickets than users, and some users may have submitted several tickets.
182
182
  3. In a CRM, there are fewer users than customers, and customers may have many deals.
@@ -1,4 +1,4 @@
1
- import { AuditLogSearchParams, Event, SearchFilters, FallbackInfo, DeletedResourceInfo } from "@budibase/types";
1
+ import { AuditLogSearchParams, DeletedResourceInfo, Event, FallbackInfo, SearchFilters } from "@budibase/types";
2
2
  export declare enum ResourceType {
3
3
  USER = "user",
4
4
  APP = "app"
@@ -1,4 +1,4 @@
1
- import { AutomationResults, AutomationStatus, Automation, AutomationLogPage } from "@budibase/types";
1
+ import { Automation, AutomationLogPage, AutomationResults, AutomationStatus } from "@budibase/types";
2
2
  export declare const oldestLogDate: () => Promise<string>;
3
3
  export interface LogSearchOptions {
4
4
  startDate?: string;
@@ -1 +1 @@
1
- export declare function appExists(appId: string): Promise<boolean>;
1
+ export declare function workspaceExists(workspaceId: string): Promise<boolean>;
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "dist"
5
5
  ],
6
6
  "license": "UNLICENSED",
7
- "version": "3.18.4",
7
+ "version": "3.18.6",
8
8
  "description": "Budibase Pro (Backend)",
9
9
  "main": "dist/index.js",
10
10
  "types": "dist/index.d.ts",
@@ -70,5 +70,5 @@
70
70
  }
71
71
  }
72
72
  },
73
- "gitHead": "b82c05d3d0949d198b49415d20980e72cc61ca5b"
73
+ "gitHead": "0062775fce7e68e01263a9c5a5e94bf978da8746"
74
74
  }