@budibase/pro 3.13.27 → 3.13.28

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,6 +1,6 @@
1
- "use strict";var LI=Object.create;var Na=Object.defineProperty;var PI=Object.getOwnPropertyDescriptor;var UI=Object.getOwnPropertyNames;var qI=Object.getPrototypeOf,DI=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})},Gu=(e,t,r,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of UI(t))!DI.call(e,n)&&n!==r&&Na(e,n,{get:()=>t[n],enumerable:!(a=PI(t,n))||a.enumerable});return e};var P=(e,t,r)=>(r=e!=null?LI(qI(e)):{},Gu(t||!e||!e.__esModule?Na(r,"default",{value:e,enumerable:!0}):r,e)),NI=e=>Gu(Na({},"__esModule",{value:!0}),e);var Za=u((r0,vp)=>{"use strict";function US(e,t){for(var r=-1,a=t.length,n=e.length;++r<a;)e[n+r]=t[r];return e}vp.exports=US});var Co=u((a0,Rp)=>{"use strict";var qS=typeof global=="object"&&global&&global.Object===Object&&global;Rp.exports=qS});var ie=u((n0,_p)=>{"use strict";var DS=Co(),NS=typeof self=="object"&&self&&self.Object===Object&&self,BS=DS||NS||Function("return this")();_p.exports=BS});var xt=u((o0,xp)=>{"use strict";var MS=ie(),kS=MS.Symbol;xp.exports=kS});var Pp=u((s0,Lp)=>{"use strict";var Cp=xt(),Op=Object.prototype,GS=Op.hasOwnProperty,FS=Op.toString,zr=Cp?Cp.toStringTag:void 0;function QS(e){var t=GS.call(e,zr),r=e[zr];try{e[zr]=void 0;var a=!0}catch{}var n=FS.call(e);return a&&(t?e[zr]=r:delete e[zr]),n}Lp.exports=QS});var qp=u((i0,Up)=>{"use strict";var jS=Object.prototype,WS=jS.toString;function $S(e){return WS.call(e)}Up.exports=$S});var mt=u((u0,Bp)=>{"use strict";var Dp=xt(),KS=Pp(),VS=qp(),YS="[object Null]",HS="[object Undefined]",Np=Dp?Dp.toStringTag:void 0;function zS(e){return e==null?e===void 0?HS:YS:Np&&Np in Object(e)?KS(e):VS(e)}Bp.exports=zS});var be=u((p0,Mp)=>{"use strict";function JS(e){return e!=null&&typeof e=="object"}Mp.exports=JS});var Gp=u((c0,kp)=>{"use strict";var XS=mt(),ZS=be(),ew="[object Arguments]";function tw(e){return ZS(e)&&XS(e)==ew}kp.exports=tw});var Jr=u((l0,jp)=>{"use strict";var Fp=Gp(),rw=be(),Qp=Object.prototype,aw=Qp.hasOwnProperty,nw=Qp.propertyIsEnumerable,ow=Fp(function(){return arguments}())?Fp:function(e){return rw(e)&&aw.call(e,"callee")&&!nw.call(e,"callee")};jp.exports=ow});var ne=u((d0,Wp)=>{"use strict";var sw=Array.isArray;Wp.exports=sw});var Yp=u((f0,Vp)=>{"use strict";var $p=xt(),iw=Jr(),uw=ne(),Kp=$p?$p.isConcatSpreadable:void 0;function pw(e){return uw(e)||iw(e)||!!(Kp&&e&&e[Kp])}Vp.exports=pw});var Oo=u((m0,zp)=>{"use strict";var cw=Za(),lw=Yp();function Hp(e,t,r,a,n){var o=-1,s=e.length;for(r||(r=lw),n||(n=[]);++o<s;){var i=e[o];t>0&&r(i)?t>1?Hp(i,t-1,r,a,n):cw(n,i):a||(n[n.length]=i)}return n}zp.exports=Hp});var Xr=u((g0,Jp)=>{"use strict";function dw(e){return e}Jp.exports=dw});var en=u((h0,Xp)=>{"use strict";function fw(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)}Xp.exports=fw});var Lo=u((y0,ec)=>{"use strict";var mw=en(),Zp=Math.max;function gw(e,t,r){return t=Zp(t===void 0?e.length-1:t,0),function(){for(var a=arguments,n=-1,o=Zp(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),mw(e,this,i)}}ec.exports=gw});var rc=u((A0,tc)=>{"use strict";function hw(e){return function(){return e}}tc.exports=hw});var _e=u((b0,ac)=>{"use strict";function yw(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}ac.exports=yw});var Zr=u((I0,nc)=>{"use strict";var Aw=mt(),bw=_e(),Iw="[object AsyncFunction]",Sw="[object Function]",ww="[object GeneratorFunction]",Tw="[object Proxy]";function Ew(e){if(!bw(e))return!1;var t=Aw(e);return t==Sw||t==ww||t==Iw||t==Tw}nc.exports=Ew});var sc=u((S0,oc)=>{"use strict";var vw=ie(),Rw=vw["__core-js_shared__"];oc.exports=Rw});var pc=u((w0,uc)=>{"use strict";var Po=sc(),ic=function(){var e=/[^.]+$/.exec(Po&&Po.keys&&Po.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function _w(e){return!!ic&&ic in e}uc.exports=_w});var Uo=u((T0,cc)=>{"use strict";var xw=Function.prototype,Cw=xw.toString;function Ow(e){if(e!=null){try{return Cw.call(e)}catch{}try{return e+""}catch{}}return""}cc.exports=Ow});var dc=u((E0,lc)=>{"use strict";var Lw=Zr(),Pw=pc(),Uw=_e(),qw=Uo(),Dw=/[\\^$.*+?()[\]{}|]/g,Nw=/^\[object .+?Constructor\]$/,Bw=Function.prototype,Mw=Object.prototype,kw=Bw.toString,Gw=Mw.hasOwnProperty,Fw=RegExp("^"+kw.call(Gw).replace(Dw,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function Qw(e){if(!Uw(e)||Pw(e))return!1;var t=Lw(e)?Fw:Nw;return t.test(qw(e))}lc.exports=Qw});var mc=u((v0,fc)=>{"use strict";function jw(e,t){return e?.[t]}fc.exports=jw});var gt=u((R0,gc)=>{"use strict";var Ww=dc(),$w=mc();function Kw(e,t){var r=$w(e,t);return Ww(r)?r:void 0}gc.exports=Kw});var qo=u((_0,hc)=>{"use strict";var Vw=gt(),Yw=function(){try{var e=Vw(Object,"defineProperty");return e({},"",{}),e}catch{}}();hc.exports=Yw});var bc=u((x0,Ac)=>{"use strict";var Hw=rc(),yc=qo(),zw=Xr(),Jw=yc?function(e,t){return yc(e,"toString",{configurable:!0,enumerable:!1,value:Hw(t),writable:!0})}:zw;Ac.exports=Jw});var Do=u((C0,Ic)=>{"use strict";var Xw=800,Zw=16,eT=Date.now;function tT(e){var t=0,r=0;return function(){var a=eT(),n=Zw-(a-r);if(r=a,n>0){if(++t>=Xw)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}Ic.exports=tT});var tn=u((O0,Sc)=>{"use strict";var rT=bc(),aT=Do(),nT=aT(rT);Sc.exports=nT});var No=u((L0,wc)=>{"use strict";var oT=Xr(),sT=Lo(),iT=tn();function uT(e,t){return iT(sT(e,t,oT),e+"")}wc.exports=uT});var ea=u((P0,Tc)=>{"use strict";var pT=gt(),cT=pT(Object,"create");Tc.exports=cT});var Rc=u((U0,vc)=>{"use strict";var Ec=ea();function lT(){this.__data__=Ec?Ec(null):{},this.size=0}vc.exports=lT});var xc=u((q0,_c)=>{"use strict";function dT(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}_c.exports=dT});var Oc=u((D0,Cc)=>{"use strict";var fT=ea(),mT="__lodash_hash_undefined__",gT=Object.prototype,hT=gT.hasOwnProperty;function yT(e){var t=this.__data__;if(fT){var r=t[e];return r===mT?void 0:r}return hT.call(t,e)?t[e]:void 0}Cc.exports=yT});var Pc=u((N0,Lc)=>{"use strict";var AT=ea(),bT=Object.prototype,IT=bT.hasOwnProperty;function ST(e){var t=this.__data__;return AT?t[e]!==void 0:IT.call(t,e)}Lc.exports=ST});var qc=u((B0,Uc)=>{"use strict";var wT=ea(),TT="__lodash_hash_undefined__";function ET(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=wT&&t===void 0?TT:t,this}Uc.exports=ET});var Nc=u((M0,Dc)=>{"use strict";var vT=Rc(),RT=xc(),_T=Oc(),xT=Pc(),CT=qc();function Yt(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var a=e[t];this.set(a[0],a[1])}}Yt.prototype.clear=vT;Yt.prototype.delete=RT;Yt.prototype.get=_T;Yt.prototype.has=xT;Yt.prototype.set=CT;Dc.exports=Yt});var Mc=u((k0,Bc)=>{"use strict";function OT(){this.__data__=[],this.size=0}Bc.exports=OT});var Ht=u((G0,kc)=>{"use strict";function LT(e,t){return e===t||e!==e&&t!==t}kc.exports=LT});var ta=u((F0,Gc)=>{"use strict";var PT=Ht();function UT(e,t){for(var r=e.length;r--;)if(PT(e[r][0],t))return r;return-1}Gc.exports=UT});var Qc=u((Q0,Fc)=>{"use strict";var qT=ta(),DT=Array.prototype,NT=DT.splice;function BT(e){var t=this.__data__,r=qT(t,e);if(r<0)return!1;var a=t.length-1;return r==a?t.pop():NT.call(t,r,1),--this.size,!0}Fc.exports=BT});var Wc=u((j0,jc)=>{"use strict";var MT=ta();function kT(e){var t=this.__data__,r=MT(t,e);return r<0?void 0:t[r][1]}jc.exports=kT});var Kc=u((W0,$c)=>{"use strict";var GT=ta();function FT(e){return GT(this.__data__,e)>-1}$c.exports=FT});var Yc=u(($0,Vc)=>{"use strict";var QT=ta();function jT(e,t){var r=this.__data__,a=QT(r,e);return a<0?(++this.size,r.push([e,t])):r[a][1]=t,this}Vc.exports=jT});var ra=u((K0,Hc)=>{"use strict";var WT=Mc(),$T=Qc(),KT=Wc(),VT=Kc(),YT=Yc();function zt(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var a=e[t];this.set(a[0],a[1])}}zt.prototype.clear=WT;zt.prototype.delete=$T;zt.prototype.get=KT;zt.prototype.has=VT;zt.prototype.set=YT;Hc.exports=zt});var rn=u((V0,zc)=>{"use strict";var HT=gt(),zT=ie(),JT=HT(zT,"Map");zc.exports=JT});var Zc=u((Y0,Xc)=>{"use strict";var Jc=Nc(),XT=ra(),ZT=rn();function eE(){this.size=0,this.__data__={hash:new Jc,map:new(ZT||XT),string:new Jc}}Xc.exports=eE});var tl=u((H0,el)=>{"use strict";function tE(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}el.exports=tE});var aa=u((z0,rl)=>{"use strict";var rE=tl();function aE(e,t){var r=e.__data__;return rE(t)?r[typeof t=="string"?"string":"hash"]:r.map}rl.exports=aE});var nl=u((J0,al)=>{"use strict";var nE=aa();function oE(e){var t=nE(this,e).delete(e);return this.size-=t?1:0,t}al.exports=oE});var sl=u((X0,ol)=>{"use strict";var sE=aa();function iE(e){return sE(this,e).get(e)}ol.exports=iE});var ul=u((Z0,il)=>{"use strict";var uE=aa();function pE(e){return uE(this,e).has(e)}il.exports=pE});var cl=u((eF,pl)=>{"use strict";var cE=aa();function lE(e,t){var r=cE(this,e),a=r.size;return r.set(e,t),this.size+=r.size==a?0:1,this}pl.exports=lE});var an=u((tF,ll)=>{"use strict";var dE=Zc(),fE=nl(),mE=sl(),gE=ul(),hE=cl();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=dE;Jt.prototype.delete=fE;Jt.prototype.get=mE;Jt.prototype.has=gE;Jt.prototype.set=hE;ll.exports=Jt});var fl=u((rF,dl)=>{"use strict";var yE="__lodash_hash_undefined__";function AE(e){return this.__data__.set(e,yE),this}dl.exports=AE});var gl=u((aF,ml)=>{"use strict";function bE(e){return this.__data__.has(e)}ml.exports=bE});var Bo=u((nF,hl)=>{"use strict";var IE=an(),SE=fl(),wE=gl();function nn(e){var t=-1,r=e==null?0:e.length;for(this.__data__=new IE;++t<r;)this.add(e[t])}nn.prototype.add=nn.prototype.push=SE;nn.prototype.has=wE;hl.exports=nn});var Al=u((oF,yl)=>{"use strict";function TE(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}yl.exports=TE});var Il=u((sF,bl)=>{"use strict";function EE(e){return e!==e}bl.exports=EE});var wl=u((iF,Sl)=>{"use strict";function vE(e,t,r){for(var a=r-1,n=e.length;++a<n;)if(e[a]===t)return a;return-1}Sl.exports=vE});var El=u((uF,Tl)=>{"use strict";var RE=Al(),_E=Il(),xE=wl();function CE(e,t,r){return t===t?xE(e,t,r):RE(e,_E,r)}Tl.exports=CE});var Mo=u((pF,vl)=>{"use strict";var OE=El();function LE(e,t){var r=e==null?0:e.length;return!!r&&OE(e,t,0)>-1}vl.exports=LE});var _l=u((cF,Rl)=>{"use strict";function PE(e,t,r){for(var a=-1,n=e==null?0:e.length;++a<n;)if(r(t,e[a]))return!0;return!1}Rl.exports=PE});var ko=u((lF,xl)=>{"use strict";function UE(e,t){return e.has(t)}xl.exports=UE});var Go=u((dF,Cl)=>{"use strict";var qE=gt(),DE=ie(),NE=qE(DE,"Set");Cl.exports=NE});var Fo=u((fF,Ol)=>{"use strict";function BE(){}Ol.exports=BE});var on=u((mF,Ll)=>{"use strict";function ME(e){var t=-1,r=Array(e.size);return e.forEach(function(a){r[++t]=a}),r}Ll.exports=ME});var Ul=u((gF,Pl)=>{"use strict";var Qo=Go(),kE=Fo(),GE=on(),FE=1/0,QE=Qo&&1/GE(new Qo([,-0]))[1]==FE?function(e){return new Qo(e)}:kE;Pl.exports=QE});var Dl=u((hF,ql)=>{"use strict";var jE=Bo(),WE=Mo(),$E=_l(),KE=ko(),VE=Ul(),YE=on(),HE=200;function zE(e,t,r){var a=-1,n=WE,o=e.length,s=!0,i=[],p=i;if(r)s=!1,n=$E;else if(o>=HE){var f=t?null:VE(e);if(f)return YE(f);s=!1,n=KE,p=new jE}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 h=p.length;h--;)if(p[h]===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}ql.exports=zE});var sn=u((yF,Nl)=>{"use strict";var JE=9007199254740991;function XE(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=JE}Nl.exports=XE});var Xt=u((AF,Bl)=>{"use strict";var ZE=Zr(),ev=sn();function tv(e){return e!=null&&ev(e.length)&&!ZE(e)}Bl.exports=tv});var jo=u((bF,Ml)=>{"use strict";var rv=Xt(),av=be();function nv(e){return av(e)&&rv(e)}Ml.exports=nv});var Gl=u((IF,kl)=>{"use strict";var ov=Oo(),sv=No(),iv=Dl(),uv=jo(),pv=sv(function(e){return iv(ov(e,1,uv,!0))});kl.exports=pv});var Ql=u((SF,Fl)=>{"use strict";var cv=ra();function lv(){this.__data__=new cv,this.size=0}Fl.exports=lv});var Wl=u((wF,jl)=>{"use strict";function dv(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r}jl.exports=dv});var Kl=u((TF,$l)=>{"use strict";function fv(e){return this.__data__.get(e)}$l.exports=fv});var Yl=u((EF,Vl)=>{"use strict";function mv(e){return this.__data__.has(e)}Vl.exports=mv});var zl=u((vF,Hl)=>{"use strict";var gv=ra(),hv=rn(),yv=an(),Av=200;function bv(e,t){var r=this.__data__;if(r instanceof gv){var a=r.__data__;if(!hv||a.length<Av-1)return a.push([e,t]),this.size=++r.size,this;r=this.__data__=new yv(a)}return r.set(e,t),this.size=r.size,this}Hl.exports=bv});var na=u((RF,Jl)=>{"use strict";var Iv=ra(),Sv=Ql(),wv=Wl(),Tv=Kl(),Ev=Yl(),vv=zl();function Zt(e){var t=this.__data__=new Iv(e);this.size=t.size}Zt.prototype.clear=Sv;Zt.prototype.delete=wv;Zt.prototype.get=Tv;Zt.prototype.has=Ev;Zt.prototype.set=vv;Jl.exports=Zt});var oa=u((_F,Zl)=>{"use strict";var Xl=qo();function Rv(e,t,r){t=="__proto__"&&Xl?Xl(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}Zl.exports=Rv});var Wo=u((xF,ed)=>{"use strict";var _v=oa(),xv=Ht();function Cv(e,t,r){(r!==void 0&&!xv(e[t],r)||r===void 0&&!(t in e))&&_v(e,t,r)}ed.exports=Cv});var rd=u((CF,td)=>{"use strict";function Ov(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}}td.exports=Ov});var $o=u((OF,ad)=>{"use strict";var Lv=rd(),Pv=Lv();ad.exports=Pv});var Ko=u((sa,er)=>{"use strict";var Uv=ie(),id=typeof sa=="object"&&sa&&!sa.nodeType&&sa,nd=id&&typeof er=="object"&&er&&!er.nodeType&&er,qv=nd&&nd.exports===id,od=qv?Uv.Buffer:void 0,sd=od?od.allocUnsafe:void 0;function Dv(e,t){if(t)return e.slice();var r=e.length,a=sd?sd(r):new e.constructor(r);return e.copy(a),a}er.exports=Dv});var Vo=u((LF,ud)=>{"use strict";var Nv=ie(),Bv=Nv.Uint8Array;ud.exports=Bv});var un=u((PF,cd)=>{"use strict";var pd=Vo();function Mv(e){var t=new e.constructor(e.byteLength);return new pd(t).set(new pd(e)),t}cd.exports=Mv});var Yo=u((UF,ld)=>{"use strict";var kv=un();function Gv(e,t){var r=t?kv(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.length)}ld.exports=Gv});var tr=u((qF,dd)=>{"use strict";function Fv(e,t){var r=-1,a=e.length;for(t||(t=Array(a));++r<a;)t[r]=e[r];return t}dd.exports=Fv});var ia=u((DF,md)=>{"use strict";var Qv=_e(),fd=Object.create,jv=function(){function e(){}return function(t){if(!Qv(t))return{};if(fd)return fd(t);e.prototype=t;var r=new e;return e.prototype=void 0,r}}();md.exports=jv});var Ho=u((NF,gd)=>{"use strict";function Wv(e,t){return function(r){return e(t(r))}}gd.exports=Wv});var pn=u((BF,hd)=>{"use strict";var $v=Ho(),Kv=$v(Object.getPrototypeOf,Object);hd.exports=Kv});var cn=u((MF,yd)=>{"use strict";var Vv=Object.prototype;function Yv(e){var t=e&&e.constructor,r=typeof t=="function"&&t.prototype||Vv;return e===r}yd.exports=Yv});var zo=u((kF,Ad)=>{"use strict";var Hv=ia(),zv=pn(),Jv=cn();function Xv(e){return typeof e.constructor=="function"&&!Jv(e)?Hv(zv(e)):{}}Ad.exports=Xv});var Id=u((GF,bd)=>{"use strict";function Zv(){return!1}bd.exports=Zv});var pa=u((ua,rr)=>{"use strict";var eR=ie(),tR=Id(),Td=typeof ua=="object"&&ua&&!ua.nodeType&&ua,Sd=Td&&typeof rr=="object"&&rr&&!rr.nodeType&&rr,rR=Sd&&Sd.exports===Td,wd=rR?eR.Buffer:void 0,aR=wd?wd.isBuffer:void 0,nR=aR||tR;rr.exports=nR});var Jo=u((FF,vd)=>{"use strict";var oR=mt(),sR=pn(),iR=be(),uR="[object Object]",pR=Function.prototype,cR=Object.prototype,Ed=pR.toString,lR=cR.hasOwnProperty,dR=Ed.call(Object);function fR(e){if(!iR(e)||oR(e)!=uR)return!1;var t=sR(e);if(t===null)return!0;var r=lR.call(t,"constructor")&&t.constructor;return typeof r=="function"&&r instanceof r&&Ed.call(r)==dR}vd.exports=fR});var _d=u((QF,Rd)=>{"use strict";var mR=mt(),gR=sn(),hR=be(),yR="[object Arguments]",AR="[object Array]",bR="[object Boolean]",IR="[object Date]",SR="[object Error]",wR="[object Function]",TR="[object Map]",ER="[object Number]",vR="[object Object]",RR="[object RegExp]",_R="[object Set]",xR="[object String]",CR="[object WeakMap]",OR="[object ArrayBuffer]",LR="[object DataView]",PR="[object Float32Array]",UR="[object Float64Array]",qR="[object Int8Array]",DR="[object Int16Array]",NR="[object Int32Array]",BR="[object Uint8Array]",MR="[object Uint8ClampedArray]",kR="[object Uint16Array]",GR="[object Uint32Array]",B={};B[PR]=B[UR]=B[qR]=B[DR]=B[NR]=B[BR]=B[MR]=B[kR]=B[GR]=!0;B[yR]=B[AR]=B[OR]=B[bR]=B[LR]=B[IR]=B[SR]=B[wR]=B[TR]=B[ER]=B[vR]=B[RR]=B[_R]=B[xR]=B[CR]=!1;function FR(e){return hR(e)&&gR(e.length)&&!!B[mR(e)]}Rd.exports=FR});var ln=u((jF,xd)=>{"use strict";function QR(e){return function(t){return e(t)}}xd.exports=QR});var dn=u((ca,ar)=>{"use strict";var jR=Co(),Cd=typeof ca=="object"&&ca&&!ca.nodeType&&ca,la=Cd&&typeof ar=="object"&&ar&&!ar.nodeType&&ar,WR=la&&la.exports===Cd,Xo=WR&&jR.process,$R=function(){try{var e=la&&la.require&&la.require("util").types;return e||Xo&&Xo.binding&&Xo.binding("util")}catch{}}();ar.exports=$R});var fn=u((WF,Pd)=>{"use strict";var KR=_d(),VR=ln(),Od=dn(),Ld=Od&&Od.isTypedArray,YR=Ld?VR(Ld):KR;Pd.exports=YR});var Zo=u(($F,Ud)=>{"use strict";function HR(e,t){if(!(t==="constructor"&&typeof e[t]=="function")&&t!="__proto__")return e[t]}Ud.exports=HR});var es=u((KF,qd)=>{"use strict";var zR=oa(),JR=Ht(),XR=Object.prototype,ZR=XR.hasOwnProperty;function e_(e,t,r){var a=e[t];(!(ZR.call(e,t)&&JR(a,r))||r===void 0&&!(t in e))&&zR(e,t,r)}qd.exports=e_});var nr=u((VF,Dd)=>{"use strict";var t_=es(),r_=oa();function a_(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?r_(r,i,p):t_(r,i,p)}return r}Dd.exports=a_});var Bd=u((YF,Nd)=>{"use strict";function n_(e,t){for(var r=-1,a=Array(e);++r<e;)a[r]=t(r);return a}Nd.exports=n_});var da=u((HF,Md)=>{"use strict";var o_=9007199254740991,s_=/^(?:0|[1-9]\d*)$/;function i_(e,t){var r=typeof e;return t=t??o_,!!t&&(r=="number"||r!="symbol"&&s_.test(e))&&e>-1&&e%1==0&&e<t}Md.exports=i_});var ts=u((zF,kd)=>{"use strict";var u_=Bd(),p_=Jr(),c_=ne(),l_=pa(),d_=da(),f_=fn(),m_=Object.prototype,g_=m_.hasOwnProperty;function h_(e,t){var r=c_(e),a=!r&&p_(e),n=!r&&!a&&l_(e),o=!r&&!a&&!n&&f_(e),s=r||a||n||o,i=s?u_(e.length,String):[],p=i.length;for(var f in e)(t||g_.call(e,f))&&!(s&&(f=="length"||n&&(f=="offset"||f=="parent")||o&&(f=="buffer"||f=="byteLength"||f=="byteOffset")||d_(f,p)))&&i.push(f);return i}kd.exports=h_});var Fd=u((JF,Gd)=>{"use strict";function y_(e){var t=[];if(e!=null)for(var r in Object(e))t.push(r);return t}Gd.exports=y_});var jd=u((XF,Qd)=>{"use strict";var A_=_e(),b_=cn(),I_=Fd(),S_=Object.prototype,w_=S_.hasOwnProperty;function T_(e){if(!A_(e))return I_(e);var t=b_(e),r=[];for(var a in e)a=="constructor"&&(t||!w_.call(e,a))||r.push(a);return r}Qd.exports=T_});var or=u((ZF,Wd)=>{"use strict";var E_=ts(),v_=jd(),R_=Xt();function __(e){return R_(e)?E_(e,!0):v_(e)}Wd.exports=__});var Kd=u((e1,$d)=>{"use strict";var x_=nr(),C_=or();function O_(e){return x_(e,C_(e))}$d.exports=O_});var Xd=u((t1,Jd)=>{"use strict";var Vd=Wo(),L_=Ko(),P_=Yo(),U_=tr(),q_=zo(),Yd=Jr(),Hd=ne(),D_=jo(),N_=pa(),B_=Zr(),M_=_e(),k_=Jo(),G_=fn(),zd=Zo(),F_=Kd();function Q_(e,t,r,a,n,o,s){var i=zd(e,r),p=zd(t,r),f=s.get(p);if(f){Vd(e,r,f);return}var m=o?o(i,p,r+"",e,t,s):void 0,g=m===void 0;if(g){var h=Hd(p),I=!h&&N_(p),C=!h&&!I&&G_(p);m=p,h||I||C?Hd(i)?m=i:D_(i)?m=U_(i):I?(g=!1,m=L_(p,!0)):C?(g=!1,m=P_(p,!0)):m=[]:k_(p)||Yd(p)?(m=i,Yd(i)?m=F_(i):(!M_(i)||B_(i))&&(m=q_(p))):g=!1}g&&(s.set(p,m),n(m,p,a,o,s),s.delete(p)),Vd(e,r,m)}Jd.exports=Q_});var tf=u((r1,ef)=>{"use strict";var j_=na(),W_=Wo(),$_=$o(),K_=Xd(),V_=_e(),Y_=or(),H_=Zo();function Zd(e,t,r,a,n){e!==t&&$_(t,function(o,s){if(n||(n=new j_),V_(o))K_(e,t,s,r,Zd,a,n);else{var i=a?a(H_(e,s),o,s+"",e,t,n):void 0;i===void 0&&(i=o),W_(e,s,i)}},Y_)}ef.exports=Zd});var af=u((a1,rf)=>{"use strict";var z_=Ht(),J_=Xt(),X_=da(),Z_=_e();function ex(e,t,r){if(!Z_(r))return!1;var a=typeof t;return(a=="number"?J_(r)&&X_(t,r.length):a=="string"&&t in r)?z_(r[t],e):!1}rf.exports=ex});var of=u((n1,nf)=>{"use strict";var tx=No(),rx=af();function ax(e){return tx(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&&rx(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})}nf.exports=ax});var rs=u((o1,sf)=>{"use strict";var nx=tf(),ox=of(),sx=ox(function(e,t,r){nx(e,t,r)});sf.exports=sx});var pm=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 Js=u((Oj,cm)=>{"use strict";cm.exports={}});var mm=u((Lj,fm)=>{"use strict";var X=pm(),FC=Js(),lm=Array.prototype.push;function QC(e,t){return t==2?function(r,a){return e.apply(void 0,arguments)}:function(r){return e.apply(void 0,arguments)}}function Xs(e,t){return t==2?function(r,a){return e(r,a)}:function(r){return e(r)}}function dm(e){for(var t=e?e.length:0,r=Array(t);t--;)r[t]=e[t];return r}function jC(e){return function(t){return e({},t)}}function WC(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&&lm.apply(s,o),t!=a&&lm.apply(s,n.slice(t+1)),e.apply(this,s)}}function Zs(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 ei(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:FC,p="curry"in a&&a.curry,f="fixed"in a&&a.fixed,m="rearg"in a&&a.rearg,g=n?r.runInContext():void 0,h=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=h.ary,C=h.assign,_=h.clone,R=h.curry,v=h.forEach,U=h.isArray,qe=h.isError,Te=h.isFunction,pt=h.isWeakMap,Ft=h.keys,Ir=h.rearg,Sr=h.toInteger,wI=h.toPath,Uu=Ft(X.aryMethod),TI={castArray:function(S){return function(){var y=arguments[0];return U(y)?S(dm(y)):S.apply(void 0,arguments)}},iteratee:function(S){return function(){var y=arguments[0],b=arguments[1],E=S(y,b),O=E.length;return s.cap&&typeof b=="number"?(b=b>2?b-2:1,O&&O<=b?E:Xs(E,b)):E}},mixin:function(S){return function(y){var b=this;if(!Te(b))return S(b,Object(y));var E=[];return v(Ft(y),function(O){Te(y[O])&&E.push([O,b.prototype[O]])}),S(b,Object(y)),v(E,function(O){var oe=O[1];Te(oe)?b.prototype[O[0]]=oe:delete b.prototype[O[0]]}),b}},nthArg:function(S){return function(y){var b=y<0?1:Sr(y)+1;return R(S(y),b)}},rearg:function(S){return function(y,b){var E=b?b.length:0;return R(S(y,b),E)}},runInContext:function(S){return function(y){return ei(e,S(y),a)}}};function EI(S,y){if(s.cap){var b=X.iterateeRearg[S];if(b)return CI(y,b);var E=!n&&X.iterateeAry[S];if(E)return xI(y,E)}return y}function vI(S,y,b){return p||s.curry&&b>1?R(y,b):y}function qu(S,y,b){if(s.fixed&&(f||!X.skipFixed[S])){var E=X.methodSpread[S],O=E&&E.start;return O===void 0?I(y,b):WC(y,O)}return y}function Du(S,y,b){return s.rearg&&b>1&&(m||!X.skipRearg[S])?Ir(y,X.methodRearg[S]||X.aryRearg[b]):y}function RI(S,y){y=wI(y);for(var b=-1,E=y.length,O=E-1,oe=_(Object(S)),Qe=oe;Qe!=null&&++b<E;){var Ee=y[b],je=Qe[Ee];je!=null&&!(Te(je)||qe(je)||pt(je))&&(Qe[Ee]=_(b==O?je:Object(je))),Qe=Qe[Ee]}return oe}function _I(S){return ye.runInContext.convert(S)(void 0)}function Nu(S,y){var b=X.aliasToReal[S]||S,E=X.remap[b]||b,O=a;return function(oe){var Qe=n?g:h,Ee=n?g[E]:y,je=C(C({},O),oe);return ei(Qe,b,Ee,je)}}function xI(S,y){return Bu(S,function(b){return typeof b=="function"?Xs(b,y):b})}function CI(S,y){return Bu(S,function(b){var E=y.length;return QC(Ir(Xs(b,E),y),E)})}function Bu(S,y){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]=y(E[O]),S.apply(void 0,E)}}function Mu(S,y,b){var E,O=X.aliasToReal[S]||S,oe=y,Qe=TI[O];return Qe?oe=Qe(y):s.immutable&&(X.mutate.array[O]?oe=Zs(y,dm):X.mutate.object[O]?oe=Zs(y,jC(y)):X.mutate.set[O]&&(oe=Zs(y,RI))),v(Uu,function(Ee){return v(X.aryMethod[Ee],function(je){if(O==je){var ku=X.methodSpread[O],OI=ku&&ku.afterRearg;return E=OI?qu(O,Du(O,oe,Ee),Ee):Du(O,qu(O,oe,Ee),Ee),E=EI(O,E),E=vI(O,E,Ee),!1}}),!E}),E||(E=oe),E==y&&(E=p?R(E,1):function(){return y.apply(this,arguments)}),E.convert=Nu(O,y),E.placeholder=y.placeholder=b,E}if(!o)return Mu(t,r,i);var ye=r,wr=[];return v(Uu,function(S){v(X.aryMethod[S],function(y){var b=ye[X.remap[y]||y];b&&wr.push([y,Mu(y,b,ye)])})}),v(Ft(ye),function(S){var y=ye[S];if(typeof y=="function"){for(var b=wr.length;b--;)if(wr[b][0]==S)return;y.convert=Nu(S,y),wr.push([S,y])}}),v(wr,function(S){ye[S[0]]=S[1]}),ye.convert=_I,ye.placeholder=ye,v(Ft(ye),function(S){v(X.realToAlias[S]||[],function(y){ye[y]=ye[S]})}),ye}fm.exports=ei});var ti=u((Pj,gm)=>{"use strict";var $C=gt(),KC=ie(),VC=$C(KC,"WeakMap");gm.exports=VC});var ri=u((Uj,ym)=>{"use strict";var hm=ti(),YC=hm&&new hm;ym.exports=YC});var ai=u((qj,bm)=>{"use strict";var HC=Xr(),Am=ri(),zC=Am?function(e,t){return Am.set(e,t),e}:HC;bm.exports=zC});var Ta=u((Dj,Im)=>{"use strict";var JC=ia(),XC=_e();function ZC(e){return function(){var t=arguments;switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3]);case 5:return new e(t[0],t[1],t[2],t[3],t[4]);case 6:return new e(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new e(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var r=JC(e.prototype),a=e.apply(r,t);return XC(a)?a:r}}Im.exports=ZC});var wm=u((Nj,Sm)=>{"use strict";var eO=Ta(),tO=ie(),rO=1;function aO(e,t,r){var a=t&rO,n=eO(e);function o(){var s=this&&this!==tO&&this instanceof o?n:e;return s.apply(a?r:this,arguments)}return o}Sm.exports=aO});var ni=u((Bj,Tm)=>{"use strict";var nO=Math.max;function oO(e,t,r,a){for(var n=-1,o=e.length,s=r.length,i=-1,p=t.length,f=nO(o-s,0),m=Array(p+f),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}Tm.exports=oO});var oi=u((Mj,Em)=>{"use strict";var sO=Math.max;function iO(e,t,r,a){for(var n=-1,o=e.length,s=-1,i=r.length,p=-1,f=t.length,m=sO(o-i,0),g=Array(m+f),h=!a;++n<m;)g[n]=e[n];for(var I=n;++p<f;)g[I+p]=t[p];for(;++s<i;)(h||n<o)&&(g[I+r[s]]=e[n++]);return g}Em.exports=iO});var Rm=u((kj,vm)=>{"use strict";function uO(e,t){for(var r=e.length,a=0;r--;)e[r]===t&&++a;return a}vm.exports=uO});var Dn=u((Gj,_m)=>{"use strict";function pO(){}_m.exports=pO});var Bn=u((Fj,xm)=>{"use strict";var cO=ia(),lO=Dn(),dO=4294967295;function Nn(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=dO,this.__views__=[]}Nn.prototype=cO(lO.prototype);Nn.prototype.constructor=Nn;xm.exports=Nn});var si=u((Qj,Om)=>{"use strict";var Cm=ri(),fO=Fo(),mO=Cm?function(e){return Cm.get(e)}:fO;Om.exports=mO});var Pm=u((jj,Lm)=>{"use strict";var gO={};Lm.exports=gO});var Dm=u((Wj,qm)=>{"use strict";var Um=Pm(),hO=Object.prototype,yO=hO.hasOwnProperty;function AO(e){for(var t=e.name+"",r=Um[t],a=yO.call(Um,t)?r.length:0;a--;){var n=r[a],o=n.func;if(o==null||o==e)return n.name}return t}qm.exports=AO});var ii=u(($j,Nm)=>{"use strict";var bO=ia(),IO=Dn();function Mn(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=void 0}Mn.prototype=bO(IO.prototype);Mn.prototype.constructor=Mn;Nm.exports=Mn});var Mm=u((Kj,Bm)=>{"use strict";var SO=Bn(),wO=ii(),TO=tr();function EO(e){if(e instanceof SO)return e.clone();var t=new wO(e.__wrapped__,e.__chain__);return t.__actions__=TO(e.__actions__),t.__index__=e.__index__,t.__values__=e.__values__,t}Bm.exports=EO});var Fm=u((Vj,Gm)=>{"use strict";var vO=Bn(),km=ii(),RO=Dn(),_O=ne(),xO=be(),CO=Mm(),OO=Object.prototype,LO=OO.hasOwnProperty;function kn(e){if(xO(e)&&!_O(e)&&!(e instanceof vO)){if(e instanceof km)return e;if(LO.call(e,"__wrapped__"))return CO(e)}return new km(e)}kn.prototype=RO.prototype;kn.prototype.constructor=kn;Gm.exports=kn});var jm=u((Yj,Qm)=>{"use strict";var PO=Bn(),UO=si(),qO=Dm(),DO=Fm();function NO(e){var t=qO(e),r=DO[t];if(typeof r!="function"||!(t in PO.prototype))return!1;if(e===r)return!0;var a=UO(r);return!!a&&e===a[0]}Qm.exports=NO});var ui=u((Hj,Wm)=>{"use strict";var BO=ai(),MO=Do(),kO=MO(BO);Wm.exports=kO});var Km=u((zj,$m)=>{"use strict";var GO=/\{\n\/\* \[wrapped with (.+)\] \*/,FO=/,? & /;function QO(e){var t=e.match(GO);return t?t[1].split(FO):[]}$m.exports=QO});var Ym=u((Jj,Vm)=>{"use strict";var jO=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/;function WO(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(jO,`{
1
+ "use strict";var LI=Object.create;var Na=Object.defineProperty;var PI=Object.getOwnPropertyDescriptor;var UI=Object.getOwnPropertyNames;var qI=Object.getPrototypeOf,DI=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})},Gu=(e,t,r,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of UI(t))!DI.call(e,n)&&n!==r&&Na(e,n,{get:()=>t[n],enumerable:!(a=PI(t,n))||a.enumerable});return e};var P=(e,t,r)=>(r=e!=null?LI(qI(e)):{},Gu(t||!e||!e.__esModule?Na(r,"default",{value:e,enumerable:!0}):r,e)),NI=e=>Gu(Na({},"__esModule",{value:!0}),e);var Za=u((a0,vp)=>{"use strict";function US(e,t){for(var r=-1,a=t.length,n=e.length;++r<a;)e[n+r]=t[r];return e}vp.exports=US});var Co=u((n0,Rp)=>{"use strict";var qS=typeof global=="object"&&global&&global.Object===Object&&global;Rp.exports=qS});var pe=u((o0,_p)=>{"use strict";var DS=Co(),NS=typeof self=="object"&&self&&self.Object===Object&&self,BS=DS||NS||Function("return this")();_p.exports=BS});var xt=u((s0,xp)=>{"use strict";var MS=pe(),kS=MS.Symbol;xp.exports=kS});var Pp=u((i0,Lp)=>{"use strict";var Cp=xt(),Op=Object.prototype,GS=Op.hasOwnProperty,FS=Op.toString,zr=Cp?Cp.toStringTag:void 0;function QS(e){var t=GS.call(e,zr),r=e[zr];try{e[zr]=void 0;var a=!0}catch{}var n=FS.call(e);return a&&(t?e[zr]=r:delete e[zr]),n}Lp.exports=QS});var qp=u((u0,Up)=>{"use strict";var jS=Object.prototype,WS=jS.toString;function $S(e){return WS.call(e)}Up.exports=$S});var mt=u((p0,Bp)=>{"use strict";var Dp=xt(),KS=Pp(),VS=qp(),YS="[object Null]",HS="[object Undefined]",Np=Dp?Dp.toStringTag:void 0;function zS(e){return e==null?e===void 0?HS:YS:Np&&Np in Object(e)?KS(e):VS(e)}Bp.exports=zS});var be=u((c0,Mp)=>{"use strict";function JS(e){return e!=null&&typeof e=="object"}Mp.exports=JS});var Gp=u((l0,kp)=>{"use strict";var XS=mt(),ZS=be(),ew="[object Arguments]";function tw(e){return ZS(e)&&XS(e)==ew}kp.exports=tw});var Jr=u((d0,jp)=>{"use strict";var Fp=Gp(),rw=be(),Qp=Object.prototype,aw=Qp.hasOwnProperty,nw=Qp.propertyIsEnumerable,ow=Fp(function(){return arguments}())?Fp:function(e){return rw(e)&&aw.call(e,"callee")&&!nw.call(e,"callee")};jp.exports=ow});var ne=u((f0,Wp)=>{"use strict";var sw=Array.isArray;Wp.exports=sw});var Yp=u((m0,Vp)=>{"use strict";var $p=xt(),iw=Jr(),uw=ne(),Kp=$p?$p.isConcatSpreadable:void 0;function pw(e){return uw(e)||iw(e)||!!(Kp&&e&&e[Kp])}Vp.exports=pw});var Oo=u((g0,zp)=>{"use strict";var cw=Za(),lw=Yp();function Hp(e,t,r,a,n){var o=-1,s=e.length;for(r||(r=lw),n||(n=[]);++o<s;){var i=e[o];t>0&&r(i)?t>1?Hp(i,t-1,r,a,n):cw(n,i):a||(n[n.length]=i)}return n}zp.exports=Hp});var Xr=u((h0,Jp)=>{"use strict";function dw(e){return e}Jp.exports=dw});var en=u((y0,Xp)=>{"use strict";function fw(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)}Xp.exports=fw});var Lo=u((A0,ec)=>{"use strict";var mw=en(),Zp=Math.max;function gw(e,t,r){return t=Zp(t===void 0?e.length-1:t,0),function(){for(var a=arguments,n=-1,o=Zp(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),mw(e,this,i)}}ec.exports=gw});var rc=u((b0,tc)=>{"use strict";function hw(e){return function(){return e}}tc.exports=hw});var _e=u((I0,ac)=>{"use strict";function yw(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}ac.exports=yw});var Zr=u((S0,nc)=>{"use strict";var Aw=mt(),bw=_e(),Iw="[object AsyncFunction]",Sw="[object Function]",ww="[object GeneratorFunction]",Tw="[object Proxy]";function Ew(e){if(!bw(e))return!1;var t=Aw(e);return t==Sw||t==ww||t==Iw||t==Tw}nc.exports=Ew});var sc=u((w0,oc)=>{"use strict";var vw=pe(),Rw=vw["__core-js_shared__"];oc.exports=Rw});var pc=u((T0,uc)=>{"use strict";var Po=sc(),ic=function(){var e=/[^.]+$/.exec(Po&&Po.keys&&Po.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function _w(e){return!!ic&&ic in e}uc.exports=_w});var Uo=u((E0,cc)=>{"use strict";var xw=Function.prototype,Cw=xw.toString;function Ow(e){if(e!=null){try{return Cw.call(e)}catch{}try{return e+""}catch{}}return""}cc.exports=Ow});var dc=u((v0,lc)=>{"use strict";var Lw=Zr(),Pw=pc(),Uw=_e(),qw=Uo(),Dw=/[\\^$.*+?()[\]{}|]/g,Nw=/^\[object .+?Constructor\]$/,Bw=Function.prototype,Mw=Object.prototype,kw=Bw.toString,Gw=Mw.hasOwnProperty,Fw=RegExp("^"+kw.call(Gw).replace(Dw,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function Qw(e){if(!Uw(e)||Pw(e))return!1;var t=Lw(e)?Fw:Nw;return t.test(qw(e))}lc.exports=Qw});var mc=u((R0,fc)=>{"use strict";function jw(e,t){return e?.[t]}fc.exports=jw});var gt=u((_0,gc)=>{"use strict";var Ww=dc(),$w=mc();function Kw(e,t){var r=$w(e,t);return Ww(r)?r:void 0}gc.exports=Kw});var qo=u((x0,hc)=>{"use strict";var Vw=gt(),Yw=function(){try{var e=Vw(Object,"defineProperty");return e({},"",{}),e}catch{}}();hc.exports=Yw});var bc=u((C0,Ac)=>{"use strict";var Hw=rc(),yc=qo(),zw=Xr(),Jw=yc?function(e,t){return yc(e,"toString",{configurable:!0,enumerable:!1,value:Hw(t),writable:!0})}:zw;Ac.exports=Jw});var Do=u((O0,Ic)=>{"use strict";var Xw=800,Zw=16,eT=Date.now;function tT(e){var t=0,r=0;return function(){var a=eT(),n=Zw-(a-r);if(r=a,n>0){if(++t>=Xw)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}Ic.exports=tT});var tn=u((L0,Sc)=>{"use strict";var rT=bc(),aT=Do(),nT=aT(rT);Sc.exports=nT});var No=u((P0,wc)=>{"use strict";var oT=Xr(),sT=Lo(),iT=tn();function uT(e,t){return iT(sT(e,t,oT),e+"")}wc.exports=uT});var ea=u((U0,Tc)=>{"use strict";var pT=gt(),cT=pT(Object,"create");Tc.exports=cT});var Rc=u((q0,vc)=>{"use strict";var Ec=ea();function lT(){this.__data__=Ec?Ec(null):{},this.size=0}vc.exports=lT});var xc=u((D0,_c)=>{"use strict";function dT(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}_c.exports=dT});var Oc=u((N0,Cc)=>{"use strict";var fT=ea(),mT="__lodash_hash_undefined__",gT=Object.prototype,hT=gT.hasOwnProperty;function yT(e){var t=this.__data__;if(fT){var r=t[e];return r===mT?void 0:r}return hT.call(t,e)?t[e]:void 0}Cc.exports=yT});var Pc=u((B0,Lc)=>{"use strict";var AT=ea(),bT=Object.prototype,IT=bT.hasOwnProperty;function ST(e){var t=this.__data__;return AT?t[e]!==void 0:IT.call(t,e)}Lc.exports=ST});var qc=u((M0,Uc)=>{"use strict";var wT=ea(),TT="__lodash_hash_undefined__";function ET(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=wT&&t===void 0?TT:t,this}Uc.exports=ET});var Nc=u((k0,Dc)=>{"use strict";var vT=Rc(),RT=xc(),_T=Oc(),xT=Pc(),CT=qc();function Yt(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var a=e[t];this.set(a[0],a[1])}}Yt.prototype.clear=vT;Yt.prototype.delete=RT;Yt.prototype.get=_T;Yt.prototype.has=xT;Yt.prototype.set=CT;Dc.exports=Yt});var Mc=u((G0,Bc)=>{"use strict";function OT(){this.__data__=[],this.size=0}Bc.exports=OT});var Ht=u((F0,kc)=>{"use strict";function LT(e,t){return e===t||e!==e&&t!==t}kc.exports=LT});var ta=u((Q0,Gc)=>{"use strict";var PT=Ht();function UT(e,t){for(var r=e.length;r--;)if(PT(e[r][0],t))return r;return-1}Gc.exports=UT});var Qc=u((j0,Fc)=>{"use strict";var qT=ta(),DT=Array.prototype,NT=DT.splice;function BT(e){var t=this.__data__,r=qT(t,e);if(r<0)return!1;var a=t.length-1;return r==a?t.pop():NT.call(t,r,1),--this.size,!0}Fc.exports=BT});var Wc=u((W0,jc)=>{"use strict";var MT=ta();function kT(e){var t=this.__data__,r=MT(t,e);return r<0?void 0:t[r][1]}jc.exports=kT});var Kc=u(($0,$c)=>{"use strict";var GT=ta();function FT(e){return GT(this.__data__,e)>-1}$c.exports=FT});var Yc=u((K0,Vc)=>{"use strict";var QT=ta();function jT(e,t){var r=this.__data__,a=QT(r,e);return a<0?(++this.size,r.push([e,t])):r[a][1]=t,this}Vc.exports=jT});var ra=u((V0,Hc)=>{"use strict";var WT=Mc(),$T=Qc(),KT=Wc(),VT=Kc(),YT=Yc();function zt(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var a=e[t];this.set(a[0],a[1])}}zt.prototype.clear=WT;zt.prototype.delete=$T;zt.prototype.get=KT;zt.prototype.has=VT;zt.prototype.set=YT;Hc.exports=zt});var rn=u((Y0,zc)=>{"use strict";var HT=gt(),zT=pe(),JT=HT(zT,"Map");zc.exports=JT});var Zc=u((H0,Xc)=>{"use strict";var Jc=Nc(),XT=ra(),ZT=rn();function eE(){this.size=0,this.__data__={hash:new Jc,map:new(ZT||XT),string:new Jc}}Xc.exports=eE});var tl=u((z0,el)=>{"use strict";function tE(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}el.exports=tE});var aa=u((J0,rl)=>{"use strict";var rE=tl();function aE(e,t){var r=e.__data__;return rE(t)?r[typeof t=="string"?"string":"hash"]:r.map}rl.exports=aE});var nl=u((X0,al)=>{"use strict";var nE=aa();function oE(e){var t=nE(this,e).delete(e);return this.size-=t?1:0,t}al.exports=oE});var sl=u((Z0,ol)=>{"use strict";var sE=aa();function iE(e){return sE(this,e).get(e)}ol.exports=iE});var ul=u((eF,il)=>{"use strict";var uE=aa();function pE(e){return uE(this,e).has(e)}il.exports=pE});var cl=u((tF,pl)=>{"use strict";var cE=aa();function lE(e,t){var r=cE(this,e),a=r.size;return r.set(e,t),this.size+=r.size==a?0:1,this}pl.exports=lE});var an=u((rF,ll)=>{"use strict";var dE=Zc(),fE=nl(),mE=sl(),gE=ul(),hE=cl();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=dE;Jt.prototype.delete=fE;Jt.prototype.get=mE;Jt.prototype.has=gE;Jt.prototype.set=hE;ll.exports=Jt});var fl=u((aF,dl)=>{"use strict";var yE="__lodash_hash_undefined__";function AE(e){return this.__data__.set(e,yE),this}dl.exports=AE});var gl=u((nF,ml)=>{"use strict";function bE(e){return this.__data__.has(e)}ml.exports=bE});var Bo=u((oF,hl)=>{"use strict";var IE=an(),SE=fl(),wE=gl();function nn(e){var t=-1,r=e==null?0:e.length;for(this.__data__=new IE;++t<r;)this.add(e[t])}nn.prototype.add=nn.prototype.push=SE;nn.prototype.has=wE;hl.exports=nn});var Al=u((sF,yl)=>{"use strict";function TE(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}yl.exports=TE});var Il=u((iF,bl)=>{"use strict";function EE(e){return e!==e}bl.exports=EE});var wl=u((uF,Sl)=>{"use strict";function vE(e,t,r){for(var a=r-1,n=e.length;++a<n;)if(e[a]===t)return a;return-1}Sl.exports=vE});var El=u((pF,Tl)=>{"use strict";var RE=Al(),_E=Il(),xE=wl();function CE(e,t,r){return t===t?xE(e,t,r):RE(e,_E,r)}Tl.exports=CE});var Mo=u((cF,vl)=>{"use strict";var OE=El();function LE(e,t){var r=e==null?0:e.length;return!!r&&OE(e,t,0)>-1}vl.exports=LE});var _l=u((lF,Rl)=>{"use strict";function PE(e,t,r){for(var a=-1,n=e==null?0:e.length;++a<n;)if(r(t,e[a]))return!0;return!1}Rl.exports=PE});var ko=u((dF,xl)=>{"use strict";function UE(e,t){return e.has(t)}xl.exports=UE});var Go=u((fF,Cl)=>{"use strict";var qE=gt(),DE=pe(),NE=qE(DE,"Set");Cl.exports=NE});var Fo=u((mF,Ol)=>{"use strict";function BE(){}Ol.exports=BE});var on=u((gF,Ll)=>{"use strict";function ME(e){var t=-1,r=Array(e.size);return e.forEach(function(a){r[++t]=a}),r}Ll.exports=ME});var Ul=u((hF,Pl)=>{"use strict";var Qo=Go(),kE=Fo(),GE=on(),FE=1/0,QE=Qo&&1/GE(new Qo([,-0]))[1]==FE?function(e){return new Qo(e)}:kE;Pl.exports=QE});var Dl=u((yF,ql)=>{"use strict";var jE=Bo(),WE=Mo(),$E=_l(),KE=ko(),VE=Ul(),YE=on(),HE=200;function zE(e,t,r){var a=-1,n=WE,o=e.length,s=!0,i=[],p=i;if(r)s=!1,n=$E;else if(o>=HE){var f=t?null:VE(e);if(f)return YE(f);s=!1,n=KE,p=new jE}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 h=p.length;h--;)if(p[h]===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}ql.exports=zE});var sn=u((AF,Nl)=>{"use strict";var JE=9007199254740991;function XE(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=JE}Nl.exports=XE});var Xt=u((bF,Bl)=>{"use strict";var ZE=Zr(),ev=sn();function tv(e){return e!=null&&ev(e.length)&&!ZE(e)}Bl.exports=tv});var jo=u((IF,Ml)=>{"use strict";var rv=Xt(),av=be();function nv(e){return av(e)&&rv(e)}Ml.exports=nv});var Gl=u((SF,kl)=>{"use strict";var ov=Oo(),sv=No(),iv=Dl(),uv=jo(),pv=sv(function(e){return iv(ov(e,1,uv,!0))});kl.exports=pv});var Ql=u((wF,Fl)=>{"use strict";var cv=ra();function lv(){this.__data__=new cv,this.size=0}Fl.exports=lv});var Wl=u((TF,jl)=>{"use strict";function dv(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r}jl.exports=dv});var Kl=u((EF,$l)=>{"use strict";function fv(e){return this.__data__.get(e)}$l.exports=fv});var Yl=u((vF,Vl)=>{"use strict";function mv(e){return this.__data__.has(e)}Vl.exports=mv});var zl=u((RF,Hl)=>{"use strict";var gv=ra(),hv=rn(),yv=an(),Av=200;function bv(e,t){var r=this.__data__;if(r instanceof gv){var a=r.__data__;if(!hv||a.length<Av-1)return a.push([e,t]),this.size=++r.size,this;r=this.__data__=new yv(a)}return r.set(e,t),this.size=r.size,this}Hl.exports=bv});var na=u((_F,Jl)=>{"use strict";var Iv=ra(),Sv=Ql(),wv=Wl(),Tv=Kl(),Ev=Yl(),vv=zl();function Zt(e){var t=this.__data__=new Iv(e);this.size=t.size}Zt.prototype.clear=Sv;Zt.prototype.delete=wv;Zt.prototype.get=Tv;Zt.prototype.has=Ev;Zt.prototype.set=vv;Jl.exports=Zt});var oa=u((xF,Zl)=>{"use strict";var Xl=qo();function Rv(e,t,r){t=="__proto__"&&Xl?Xl(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}Zl.exports=Rv});var Wo=u((CF,ed)=>{"use strict";var _v=oa(),xv=Ht();function Cv(e,t,r){(r!==void 0&&!xv(e[t],r)||r===void 0&&!(t in e))&&_v(e,t,r)}ed.exports=Cv});var rd=u((OF,td)=>{"use strict";function Ov(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}}td.exports=Ov});var $o=u((LF,ad)=>{"use strict";var Lv=rd(),Pv=Lv();ad.exports=Pv});var Ko=u((sa,er)=>{"use strict";var Uv=pe(),id=typeof sa=="object"&&sa&&!sa.nodeType&&sa,nd=id&&typeof er=="object"&&er&&!er.nodeType&&er,qv=nd&&nd.exports===id,od=qv?Uv.Buffer:void 0,sd=od?od.allocUnsafe:void 0;function Dv(e,t){if(t)return e.slice();var r=e.length,a=sd?sd(r):new e.constructor(r);return e.copy(a),a}er.exports=Dv});var Vo=u((PF,ud)=>{"use strict";var Nv=pe(),Bv=Nv.Uint8Array;ud.exports=Bv});var un=u((UF,cd)=>{"use strict";var pd=Vo();function Mv(e){var t=new e.constructor(e.byteLength);return new pd(t).set(new pd(e)),t}cd.exports=Mv});var Yo=u((qF,ld)=>{"use strict";var kv=un();function Gv(e,t){var r=t?kv(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.length)}ld.exports=Gv});var tr=u((DF,dd)=>{"use strict";function Fv(e,t){var r=-1,a=e.length;for(t||(t=Array(a));++r<a;)t[r]=e[r];return t}dd.exports=Fv});var ia=u((NF,md)=>{"use strict";var Qv=_e(),fd=Object.create,jv=function(){function e(){}return function(t){if(!Qv(t))return{};if(fd)return fd(t);e.prototype=t;var r=new e;return e.prototype=void 0,r}}();md.exports=jv});var Ho=u((BF,gd)=>{"use strict";function Wv(e,t){return function(r){return e(t(r))}}gd.exports=Wv});var pn=u((MF,hd)=>{"use strict";var $v=Ho(),Kv=$v(Object.getPrototypeOf,Object);hd.exports=Kv});var cn=u((kF,yd)=>{"use strict";var Vv=Object.prototype;function Yv(e){var t=e&&e.constructor,r=typeof t=="function"&&t.prototype||Vv;return e===r}yd.exports=Yv});var zo=u((GF,Ad)=>{"use strict";var Hv=ia(),zv=pn(),Jv=cn();function Xv(e){return typeof e.constructor=="function"&&!Jv(e)?Hv(zv(e)):{}}Ad.exports=Xv});var Id=u((FF,bd)=>{"use strict";function Zv(){return!1}bd.exports=Zv});var pa=u((ua,rr)=>{"use strict";var eR=pe(),tR=Id(),Td=typeof ua=="object"&&ua&&!ua.nodeType&&ua,Sd=Td&&typeof rr=="object"&&rr&&!rr.nodeType&&rr,rR=Sd&&Sd.exports===Td,wd=rR?eR.Buffer:void 0,aR=wd?wd.isBuffer:void 0,nR=aR||tR;rr.exports=nR});var Jo=u((QF,vd)=>{"use strict";var oR=mt(),sR=pn(),iR=be(),uR="[object Object]",pR=Function.prototype,cR=Object.prototype,Ed=pR.toString,lR=cR.hasOwnProperty,dR=Ed.call(Object);function fR(e){if(!iR(e)||oR(e)!=uR)return!1;var t=sR(e);if(t===null)return!0;var r=lR.call(t,"constructor")&&t.constructor;return typeof r=="function"&&r instanceof r&&Ed.call(r)==dR}vd.exports=fR});var _d=u((jF,Rd)=>{"use strict";var mR=mt(),gR=sn(),hR=be(),yR="[object Arguments]",AR="[object Array]",bR="[object Boolean]",IR="[object Date]",SR="[object Error]",wR="[object Function]",TR="[object Map]",ER="[object Number]",vR="[object Object]",RR="[object RegExp]",_R="[object Set]",xR="[object String]",CR="[object WeakMap]",OR="[object ArrayBuffer]",LR="[object DataView]",PR="[object Float32Array]",UR="[object Float64Array]",qR="[object Int8Array]",DR="[object Int16Array]",NR="[object Int32Array]",BR="[object Uint8Array]",MR="[object Uint8ClampedArray]",kR="[object Uint16Array]",GR="[object Uint32Array]",B={};B[PR]=B[UR]=B[qR]=B[DR]=B[NR]=B[BR]=B[MR]=B[kR]=B[GR]=!0;B[yR]=B[AR]=B[OR]=B[bR]=B[LR]=B[IR]=B[SR]=B[wR]=B[TR]=B[ER]=B[vR]=B[RR]=B[_R]=B[xR]=B[CR]=!1;function FR(e){return hR(e)&&gR(e.length)&&!!B[mR(e)]}Rd.exports=FR});var ln=u((WF,xd)=>{"use strict";function QR(e){return function(t){return e(t)}}xd.exports=QR});var dn=u((ca,ar)=>{"use strict";var jR=Co(),Cd=typeof ca=="object"&&ca&&!ca.nodeType&&ca,la=Cd&&typeof ar=="object"&&ar&&!ar.nodeType&&ar,WR=la&&la.exports===Cd,Xo=WR&&jR.process,$R=function(){try{var e=la&&la.require&&la.require("util").types;return e||Xo&&Xo.binding&&Xo.binding("util")}catch{}}();ar.exports=$R});var fn=u(($F,Pd)=>{"use strict";var KR=_d(),VR=ln(),Od=dn(),Ld=Od&&Od.isTypedArray,YR=Ld?VR(Ld):KR;Pd.exports=YR});var Zo=u((KF,Ud)=>{"use strict";function HR(e,t){if(!(t==="constructor"&&typeof e[t]=="function")&&t!="__proto__")return e[t]}Ud.exports=HR});var es=u((VF,qd)=>{"use strict";var zR=oa(),JR=Ht(),XR=Object.prototype,ZR=XR.hasOwnProperty;function e_(e,t,r){var a=e[t];(!(ZR.call(e,t)&&JR(a,r))||r===void 0&&!(t in e))&&zR(e,t,r)}qd.exports=e_});var nr=u((YF,Dd)=>{"use strict";var t_=es(),r_=oa();function a_(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?r_(r,i,p):t_(r,i,p)}return r}Dd.exports=a_});var Bd=u((HF,Nd)=>{"use strict";function n_(e,t){for(var r=-1,a=Array(e);++r<e;)a[r]=t(r);return a}Nd.exports=n_});var da=u((zF,Md)=>{"use strict";var o_=9007199254740991,s_=/^(?:0|[1-9]\d*)$/;function i_(e,t){var r=typeof e;return t=t??o_,!!t&&(r=="number"||r!="symbol"&&s_.test(e))&&e>-1&&e%1==0&&e<t}Md.exports=i_});var ts=u((JF,kd)=>{"use strict";var u_=Bd(),p_=Jr(),c_=ne(),l_=pa(),d_=da(),f_=fn(),m_=Object.prototype,g_=m_.hasOwnProperty;function h_(e,t){var r=c_(e),a=!r&&p_(e),n=!r&&!a&&l_(e),o=!r&&!a&&!n&&f_(e),s=r||a||n||o,i=s?u_(e.length,String):[],p=i.length;for(var f in e)(t||g_.call(e,f))&&!(s&&(f=="length"||n&&(f=="offset"||f=="parent")||o&&(f=="buffer"||f=="byteLength"||f=="byteOffset")||d_(f,p)))&&i.push(f);return i}kd.exports=h_});var Fd=u((XF,Gd)=>{"use strict";function y_(e){var t=[];if(e!=null)for(var r in Object(e))t.push(r);return t}Gd.exports=y_});var jd=u((ZF,Qd)=>{"use strict";var A_=_e(),b_=cn(),I_=Fd(),S_=Object.prototype,w_=S_.hasOwnProperty;function T_(e){if(!A_(e))return I_(e);var t=b_(e),r=[];for(var a in e)a=="constructor"&&(t||!w_.call(e,a))||r.push(a);return r}Qd.exports=T_});var or=u((e1,Wd)=>{"use strict";var E_=ts(),v_=jd(),R_=Xt();function __(e){return R_(e)?E_(e,!0):v_(e)}Wd.exports=__});var Kd=u((t1,$d)=>{"use strict";var x_=nr(),C_=or();function O_(e){return x_(e,C_(e))}$d.exports=O_});var Xd=u((r1,Jd)=>{"use strict";var Vd=Wo(),L_=Ko(),P_=Yo(),U_=tr(),q_=zo(),Yd=Jr(),Hd=ne(),D_=jo(),N_=pa(),B_=Zr(),M_=_e(),k_=Jo(),G_=fn(),zd=Zo(),F_=Kd();function Q_(e,t,r,a,n,o,s){var i=zd(e,r),p=zd(t,r),f=s.get(p);if(f){Vd(e,r,f);return}var m=o?o(i,p,r+"",e,t,s):void 0,g=m===void 0;if(g){var h=Hd(p),I=!h&&N_(p),C=!h&&!I&&G_(p);m=p,h||I||C?Hd(i)?m=i:D_(i)?m=U_(i):I?(g=!1,m=L_(p,!0)):C?(g=!1,m=P_(p,!0)):m=[]:k_(p)||Yd(p)?(m=i,Yd(i)?m=F_(i):(!M_(i)||B_(i))&&(m=q_(p))):g=!1}g&&(s.set(p,m),n(m,p,a,o,s),s.delete(p)),Vd(e,r,m)}Jd.exports=Q_});var tf=u((a1,ef)=>{"use strict";var j_=na(),W_=Wo(),$_=$o(),K_=Xd(),V_=_e(),Y_=or(),H_=Zo();function Zd(e,t,r,a,n){e!==t&&$_(t,function(o,s){if(n||(n=new j_),V_(o))K_(e,t,s,r,Zd,a,n);else{var i=a?a(H_(e,s),o,s+"",e,t,n):void 0;i===void 0&&(i=o),W_(e,s,i)}},Y_)}ef.exports=Zd});var af=u((n1,rf)=>{"use strict";var z_=Ht(),J_=Xt(),X_=da(),Z_=_e();function ex(e,t,r){if(!Z_(r))return!1;var a=typeof t;return(a=="number"?J_(r)&&X_(t,r.length):a=="string"&&t in r)?z_(r[t],e):!1}rf.exports=ex});var of=u((o1,nf)=>{"use strict";var tx=No(),rx=af();function ax(e){return tx(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&&rx(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})}nf.exports=ax});var rs=u((s1,sf)=>{"use strict";var nx=tf(),ox=of(),sx=ox(function(e,t,r){nx(e,t,r)});sf.exports=sx});var pm=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 Js=u((Lj,cm)=>{"use strict";cm.exports={}});var mm=u((Pj,fm)=>{"use strict";var X=pm(),QC=Js(),lm=Array.prototype.push;function jC(e,t){return t==2?function(r,a){return e.apply(void 0,arguments)}:function(r){return e.apply(void 0,arguments)}}function Xs(e,t){return t==2?function(r,a){return e(r,a)}:function(r){return e(r)}}function dm(e){for(var t=e?e.length:0,r=Array(t);t--;)r[t]=e[t];return r}function WC(e){return function(t){return e({},t)}}function $C(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&&lm.apply(s,o),t!=a&&lm.apply(s,n.slice(t+1)),e.apply(this,s)}}function Zs(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 ei(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:QC,p="curry"in a&&a.curry,f="fixed"in a&&a.fixed,m="rearg"in a&&a.rearg,g=n?r.runInContext():void 0,h=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=h.ary,C=h.assign,_=h.clone,R=h.curry,v=h.forEach,U=h.isArray,qe=h.isError,Te=h.isFunction,pt=h.isWeakMap,Ft=h.keys,Ir=h.rearg,Sr=h.toInteger,wI=h.toPath,Uu=Ft(X.aryMethod),TI={castArray:function(S){return function(){var y=arguments[0];return U(y)?S(dm(y)):S.apply(void 0,arguments)}},iteratee:function(S){return function(){var y=arguments[0],b=arguments[1],E=S(y,b),O=E.length;return s.cap&&typeof b=="number"?(b=b>2?b-2:1,O&&O<=b?E:Xs(E,b)):E}},mixin:function(S){return function(y){var b=this;if(!Te(b))return S(b,Object(y));var E=[];return v(Ft(y),function(O){Te(y[O])&&E.push([O,b.prototype[O]])}),S(b,Object(y)),v(E,function(O){var ie=O[1];Te(ie)?b.prototype[O[0]]=ie:delete b.prototype[O[0]]}),b}},nthArg:function(S){return function(y){var b=y<0?1:Sr(y)+1;return R(S(y),b)}},rearg:function(S){return function(y,b){var E=b?b.length:0;return R(S(y,b),E)}},runInContext:function(S){return function(y){return ei(e,S(y),a)}}};function EI(S,y){if(s.cap){var b=X.iterateeRearg[S];if(b)return CI(y,b);var E=!n&&X.iterateeAry[S];if(E)return xI(y,E)}return y}function vI(S,y,b){return p||s.curry&&b>1?R(y,b):y}function qu(S,y,b){if(s.fixed&&(f||!X.skipFixed[S])){var E=X.methodSpread[S],O=E&&E.start;return O===void 0?I(y,b):$C(y,O)}return y}function Du(S,y,b){return s.rearg&&b>1&&(m||!X.skipRearg[S])?Ir(y,X.methodRearg[S]||X.aryRearg[b]):y}function RI(S,y){y=wI(y);for(var b=-1,E=y.length,O=E-1,ie=_(Object(S)),Qe=ie;Qe!=null&&++b<E;){var Ee=y[b],je=Qe[Ee];je!=null&&!(Te(je)||qe(je)||pt(je))&&(Qe[Ee]=_(b==O?je:Object(je))),Qe=Qe[Ee]}return ie}function _I(S){return ye.runInContext.convert(S)(void 0)}function Nu(S,y){var b=X.aliasToReal[S]||S,E=X.remap[b]||b,O=a;return function(ie){var Qe=n?g:h,Ee=n?g[E]:y,je=C(C({},O),ie);return ei(Qe,b,Ee,je)}}function xI(S,y){return Bu(S,function(b){return typeof b=="function"?Xs(b,y):b})}function CI(S,y){return Bu(S,function(b){var E=y.length;return jC(Ir(Xs(b,E),y),E)})}function Bu(S,y){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]=y(E[O]),S.apply(void 0,E)}}function Mu(S,y,b){var E,O=X.aliasToReal[S]||S,ie=y,Qe=TI[O];return Qe?ie=Qe(y):s.immutable&&(X.mutate.array[O]?ie=Zs(y,dm):X.mutate.object[O]?ie=Zs(y,WC(y)):X.mutate.set[O]&&(ie=Zs(y,RI))),v(Uu,function(Ee){return v(X.aryMethod[Ee],function(je){if(O==je){var ku=X.methodSpread[O],OI=ku&&ku.afterRearg;return E=OI?qu(O,Du(O,ie,Ee),Ee):Du(O,qu(O,ie,Ee),Ee),E=EI(O,E),E=vI(O,E,Ee),!1}}),!E}),E||(E=ie),E==y&&(E=p?R(E,1):function(){return y.apply(this,arguments)}),E.convert=Nu(O,y),E.placeholder=y.placeholder=b,E}if(!o)return Mu(t,r,i);var ye=r,wr=[];return v(Uu,function(S){v(X.aryMethod[S],function(y){var b=ye[X.remap[y]||y];b&&wr.push([y,Mu(y,b,ye)])})}),v(Ft(ye),function(S){var y=ye[S];if(typeof y=="function"){for(var b=wr.length;b--;)if(wr[b][0]==S)return;y.convert=Nu(S,y),wr.push([S,y])}}),v(wr,function(S){ye[S[0]]=S[1]}),ye.convert=_I,ye.placeholder=ye,v(Ft(ye),function(S){v(X.realToAlias[S]||[],function(y){ye[y]=ye[S]})}),ye}fm.exports=ei});var ti=u((Uj,gm)=>{"use strict";var KC=gt(),VC=pe(),YC=KC(VC,"WeakMap");gm.exports=YC});var ri=u((qj,ym)=>{"use strict";var hm=ti(),HC=hm&&new hm;ym.exports=HC});var ai=u((Dj,bm)=>{"use strict";var zC=Xr(),Am=ri(),JC=Am?function(e,t){return Am.set(e,t),e}:zC;bm.exports=JC});var Ta=u((Nj,Im)=>{"use strict";var XC=ia(),ZC=_e();function eO(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=XC(e.prototype),a=e.apply(r,t);return ZC(a)?a:r}}Im.exports=eO});var wm=u((Bj,Sm)=>{"use strict";var tO=Ta(),rO=pe(),aO=1;function nO(e,t,r){var a=t&aO,n=tO(e);function o(){var s=this&&this!==rO&&this instanceof o?n:e;return s.apply(a?r:this,arguments)}return o}Sm.exports=nO});var ni=u((Mj,Tm)=>{"use strict";var oO=Math.max;function sO(e,t,r,a){for(var n=-1,o=e.length,s=r.length,i=-1,p=t.length,f=oO(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}Tm.exports=sO});var oi=u((kj,Em)=>{"use strict";var iO=Math.max;function uO(e,t,r,a){for(var n=-1,o=e.length,s=-1,i=r.length,p=-1,f=t.length,m=iO(o-i,0),g=Array(m+f),h=!a;++n<m;)g[n]=e[n];for(var I=n;++p<f;)g[I+p]=t[p];for(;++s<i;)(h||n<o)&&(g[I+r[s]]=e[n++]);return g}Em.exports=uO});var Rm=u((Gj,vm)=>{"use strict";function pO(e,t){for(var r=e.length,a=0;r--;)e[r]===t&&++a;return a}vm.exports=pO});var Dn=u((Fj,_m)=>{"use strict";function cO(){}_m.exports=cO});var Bn=u((Qj,xm)=>{"use strict";var lO=ia(),dO=Dn(),fO=4294967295;function Nn(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=fO,this.__views__=[]}Nn.prototype=lO(dO.prototype);Nn.prototype.constructor=Nn;xm.exports=Nn});var si=u((jj,Om)=>{"use strict";var Cm=ri(),mO=Fo(),gO=Cm?function(e){return Cm.get(e)}:mO;Om.exports=gO});var Pm=u((Wj,Lm)=>{"use strict";var hO={};Lm.exports=hO});var Dm=u(($j,qm)=>{"use strict";var Um=Pm(),yO=Object.prototype,AO=yO.hasOwnProperty;function bO(e){for(var t=e.name+"",r=Um[t],a=AO.call(Um,t)?r.length:0;a--;){var n=r[a],o=n.func;if(o==null||o==e)return n.name}return t}qm.exports=bO});var ii=u((Kj,Nm)=>{"use strict";var IO=ia(),SO=Dn();function Mn(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=void 0}Mn.prototype=IO(SO.prototype);Mn.prototype.constructor=Mn;Nm.exports=Mn});var Mm=u((Vj,Bm)=>{"use strict";var wO=Bn(),TO=ii(),EO=tr();function vO(e){if(e instanceof wO)return e.clone();var t=new TO(e.__wrapped__,e.__chain__);return t.__actions__=EO(e.__actions__),t.__index__=e.__index__,t.__values__=e.__values__,t}Bm.exports=vO});var Fm=u((Yj,Gm)=>{"use strict";var RO=Bn(),km=ii(),_O=Dn(),xO=ne(),CO=be(),OO=Mm(),LO=Object.prototype,PO=LO.hasOwnProperty;function kn(e){if(CO(e)&&!xO(e)&&!(e instanceof RO)){if(e instanceof km)return e;if(PO.call(e,"__wrapped__"))return OO(e)}return new km(e)}kn.prototype=_O.prototype;kn.prototype.constructor=kn;Gm.exports=kn});var jm=u((Hj,Qm)=>{"use strict";var UO=Bn(),qO=si(),DO=Dm(),NO=Fm();function BO(e){var t=DO(e),r=NO[t];if(typeof r!="function"||!(t in UO.prototype))return!1;if(e===r)return!0;var a=qO(r);return!!a&&e===a[0]}Qm.exports=BO});var ui=u((zj,Wm)=>{"use strict";var MO=ai(),kO=Do(),GO=kO(MO);Wm.exports=GO});var Km=u((Jj,$m)=>{"use strict";var FO=/\{\n\/\* \[wrapped with (.+)\] \*/,QO=/,? & /;function jO(e){var t=e.match(FO);return t?t[1].split(QO):[]}$m.exports=jO});var Ym=u((Xj,Vm)=>{"use strict";var WO=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/;function $O(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(WO,`{
2
2
  /* [wrapped with `+t+`] */
3
- `)}Vm.exports=WO});var Gn=u((Xj,Hm)=>{"use strict";function $O(e,t){for(var r=-1,a=e==null?0:e.length;++r<a&&t(e[r],r,e)!==!1;);return e}Hm.exports=$O});var Jm=u((Zj,zm)=>{"use strict";var KO=Gn(),VO=Mo(),YO=1,HO=2,zO=8,JO=16,XO=32,ZO=64,eL=128,tL=256,rL=512,aL=[["ary",eL],["bind",YO],["bindKey",HO],["curry",zO],["curryRight",JO],["flip",rL],["partial",XO],["partialRight",ZO],["rearg",tL]];function nL(e,t){return KO(aL,function(r){var a="_."+r[0];t&r[1]&&!VO(e,a)&&e.push(a)}),e.sort()}zm.exports=nL});var pi=u((eW,Xm)=>{"use strict";var oL=Km(),sL=Ym(),iL=tn(),uL=Jm();function pL(e,t,r){var a=t+"";return iL(e,sL(a,uL(oL(a),r)))}Xm.exports=pL});var ci=u((tW,tg)=>{"use strict";var cL=jm(),lL=ui(),dL=pi(),fL=1,mL=2,gL=4,hL=8,Zm=32,eg=64;function yL(e,t,r,a,n,o,s,i,p,f){var m=t&hL,g=m?s:void 0,h=m?void 0:s,I=m?o:void 0,C=m?void 0:o;t|=m?Zm:eg,t&=~(m?eg:Zm),t&gL||(t&=~(fL|mL));var _=[e,t,n,I,g,C,h,i,p,f],R=r.apply(void 0,_);return cL(e)&&lL(R,_),R.placeholder=a,dL(R,e,t)}tg.exports=yL});var li=u((rW,rg)=>{"use strict";function AL(e){var t=e;return t.placeholder}rg.exports=AL});var ng=u((aW,ag)=>{"use strict";var bL=tr(),IL=da(),SL=Math.min;function wL(e,t){for(var r=e.length,a=SL(t.length,r),n=bL(e);a--;){var o=t[a];e[a]=IL(o,r)?n[o]:void 0}return e}ag.exports=wL});var Fn=u((nW,sg)=>{"use strict";var og="__lodash_placeholder__";function TL(e,t){for(var r=-1,a=e.length,n=0,o=[];++r<a;){var s=e[r];(s===t||s===og)&&(e[r]=og,o[n++]=r)}return o}sg.exports=TL});var di=u((oW,pg)=>{"use strict";var EL=ni(),vL=oi(),RL=Rm(),ig=Ta(),_L=ci(),xL=li(),CL=ng(),OL=Fn(),LL=ie(),PL=1,UL=2,qL=8,DL=16,NL=128,BL=512;function ug(e,t,r,a,n,o,s,i,p,f){var m=t&NL,g=t&PL,h=t&UL,I=t&(qL|DL),C=t&BL,_=h?void 0:ig(e);function R(){for(var v=arguments.length,U=Array(v),qe=v;qe--;)U[qe]=arguments[qe];if(I)var Te=xL(R),pt=RL(U,Te);if(a&&(U=EL(U,a,n,I)),o&&(U=vL(U,o,s,I)),v-=pt,I&&v<f){var Ft=OL(U,Te);return _L(e,t,ug,R.placeholder,r,U,Ft,i,p,f-v)}var Ir=g?r:this,Sr=h?Ir[e]:e;return v=U.length,i?U=CL(U,i):C&&v>1&&U.reverse(),m&&p<v&&(U.length=p),this&&this!==LL&&this instanceof R&&(Sr=_||ig(Sr)),Sr.apply(Ir,U)}return R}pg.exports=ug});var lg=u((sW,cg)=>{"use strict";var ML=en(),kL=Ta(),GL=di(),FL=ci(),QL=li(),jL=Fn(),WL=ie();function $L(e,t,r){var a=kL(e);function n(){for(var o=arguments.length,s=Array(o),i=o,p=QL(n);i--;)s[i]=arguments[i];var f=o<3&&s[0]!==p&&s[o-1]!==p?[]:jL(s,p);if(o-=f.length,o<r)return FL(e,t,GL,n.placeholder,void 0,s,f,void 0,void 0,r-o);var m=this&&this!==WL&&this instanceof n?a:e;return ML(m,this,s)}return n}cg.exports=$L});var fg=u((iW,dg)=>{"use strict";var KL=en(),VL=Ta(),YL=ie(),HL=1;function zL(e,t,r,a){var n=t&HL,o=VL(e);function s(){for(var i=-1,p=arguments.length,f=-1,m=a.length,g=Array(m+p),h=this&&this!==YL&&this instanceof s?o:e;++f<m;)g[f]=a[f];for(;p--;)g[f++]=arguments[++i];return KL(h,n?r:this,g)}return s}dg.exports=zL});var bg=u((uW,Ag)=>{"use strict";var JL=ni(),XL=oi(),mg=Fn(),gg="__lodash_placeholder__",fi=1,ZL=2,eP=4,hg=8,Ea=128,yg=256,tP=Math.min;function rP(e,t){var r=e[1],a=t[1],n=r|a,o=n<(fi|ZL|Ea),s=a==Ea&&r==hg||a==Ea&&r==yg&&e[7].length<=t[8]||a==(Ea|yg)&&t[7].length<=t[8]&&r==hg;if(!(o||s))return e;a&fi&&(e[2]=t[2],n|=r&fi?0:eP);var i=t[3];if(i){var p=e[3];e[3]=p?JL(p,i,t[4]):i,e[4]=p?mg(e[3],gg):t[4]}return i=t[5],i&&(p=e[5],e[5]=p?XL(p,i,t[6]):i,e[6]=p?mg(e[5],gg):t[6]),i=t[7],i&&(e[7]=i),a&Ea&&(e[8]=e[8]==null?t[8]:tP(e[8],t[8])),e[9]==null&&(e[9]=t[9]),e[0]=t[0],e[1]=n,e}Ag.exports=rP});var Sg=u((pW,Ig)=>{"use strict";var aP=/\s/;function nP(e){for(var t=e.length;t--&&aP.test(e.charAt(t)););return t}Ig.exports=nP});var Tg=u((cW,wg)=>{"use strict";var oP=Sg(),sP=/^\s+/;function iP(e){return e&&e.slice(0,oP(e)+1).replace(sP,"")}wg.exports=iP});var fr=u((lW,Eg)=>{"use strict";var uP=mt(),pP=be(),cP="[object Symbol]";function lP(e){return typeof e=="symbol"||pP(e)&&uP(e)==cP}Eg.exports=lP});var xg=u((dW,_g)=>{"use strict";var dP=Tg(),vg=_e(),fP=fr(),Rg=0/0,mP=/^[-+]0x[0-9a-f]+$/i,gP=/^0b[01]+$/i,hP=/^0o[0-7]+$/i,yP=parseInt;function AP(e){if(typeof e=="number")return e;if(fP(e))return Rg;if(vg(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=vg(t)?t+"":t}if(typeof e!="string")return e===0?e:+e;e=dP(e);var r=gP.test(e);return r||hP.test(e)?yP(e.slice(2),r?2:8):mP.test(e)?Rg:+e}_g.exports=AP});var Lg=u((fW,Og)=>{"use strict";var bP=xg(),Cg=1/0,IP=17976931348623157e292;function SP(e){if(!e)return e===0?e:0;if(e=bP(e),e===Cg||e===-Cg){var t=e<0?-1:1;return t*IP}return e===e?e:0}Og.exports=SP});var mi=u((mW,Pg)=>{"use strict";var wP=Lg();function TP(e){var t=wP(e),r=t%1;return t===t?r?t-r:t:0}Pg.exports=TP});var Qn=u((gW,Bg)=>{"use strict";var EP=ai(),vP=wm(),RP=lg(),_P=di(),xP=fg(),CP=si(),OP=bg(),LP=ui(),PP=pi(),Ug=mi(),UP="Expected a function",qg=1,qP=2,gi=8,hi=16,yi=32,Dg=64,Ng=Math.max;function DP(e,t,r,a,n,o,s,i){var p=t&qP;if(!p&&typeof e!="function")throw new TypeError(UP);var f=a?a.length:0;if(f||(t&=~(yi|Dg),a=n=void 0),s=s===void 0?s:Ng(Ug(s),0),i=i===void 0?i:Ug(i),f-=n?n.length:0,t&Dg){var m=a,g=n;a=n=void 0}var h=p?void 0:CP(e),I=[e,t,r,a,n,m,g,o,s,i];if(h&&OP(I,h),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:Ng(I[9]-f,0),!i&&t&(gi|hi)&&(t&=~(gi|hi)),!t||t==qg)var C=vP(e,t,r);else t==gi||t==hi?C=RP(e,t,i):(t==yi||t==(qg|yi))&&!n.length?C=xP(e,t,r,a):C=_P.apply(void 0,I);var _=h?EP:LP;return PP(_(C,I),e,t)}Bg.exports=DP});var kg=u((hW,Mg)=>{"use strict";var NP=Qn(),BP=128;function MP(e,t,r){return t=r?void 0:t,t=e&&t==null?e.length:t,NP(e,BP,void 0,void 0,void 0,void 0,t)}Mg.exports=MP});var Fg=u((yW,Gg)=>{"use strict";var kP=Ho(),GP=kP(Object.keys,Object);Gg.exports=GP});var Ai=u((AW,Qg)=>{"use strict";var FP=cn(),QP=Fg(),jP=Object.prototype,WP=jP.hasOwnProperty;function $P(e){if(!FP(e))return QP(e);var t=[];for(var r in Object(e))WP.call(e,r)&&r!="constructor"&&t.push(r);return t}Qg.exports=$P});var mr=u((bW,jg)=>{"use strict";var KP=ts(),VP=Ai(),YP=Xt();function HP(e){return YP(e)?KP(e):VP(e)}jg.exports=HP});var bi=u((IW,Wg)=>{"use strict";var zP=nr(),JP=mr();function XP(e,t){return e&&zP(t,JP(t),e)}Wg.exports=XP});var Kg=u((SW,$g)=>{"use strict";var ZP=nr(),eU=or();function tU(e,t){return e&&ZP(t,eU(t),e)}$g.exports=tU});var Yg=u((wW,Vg)=>{"use strict";function rU(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}Vg.exports=rU});var Ii=u((TW,Hg)=>{"use strict";function aU(){return[]}Hg.exports=aU});var jn=u((EW,Jg)=>{"use strict";var nU=Yg(),oU=Ii(),sU=Object.prototype,iU=sU.propertyIsEnumerable,zg=Object.getOwnPropertySymbols,uU=zg?function(e){return e==null?[]:(e=Object(e),nU(zg(e),function(t){return iU.call(e,t)}))}:oU;Jg.exports=uU});var Zg=u((vW,Xg)=>{"use strict";var pU=nr(),cU=jn();function lU(e,t){return pU(e,cU(e),t)}Xg.exports=lU});var Si=u((RW,eh)=>{"use strict";var dU=Za(),fU=pn(),mU=jn(),gU=Ii(),hU=Object.getOwnPropertySymbols,yU=hU?function(e){for(var t=[];e;)dU(t,mU(e)),e=fU(e);return t}:gU;eh.exports=yU});var rh=u((_W,th)=>{"use strict";var AU=nr(),bU=Si();function IU(e,t){return AU(e,bU(e),t)}th.exports=IU});var wi=u((xW,ah)=>{"use strict";var SU=Za(),wU=ne();function TU(e,t,r){var a=t(e);return wU(e)?a:SU(a,r(e))}ah.exports=TU});var Ti=u((CW,nh)=>{"use strict";var EU=wi(),vU=jn(),RU=mr();function _U(e){return EU(e,RU,vU)}nh.exports=_U});var sh=u((OW,oh)=>{"use strict";var xU=wi(),CU=Si(),OU=or();function LU(e){return xU(e,OU,CU)}oh.exports=LU});var uh=u((LW,ih)=>{"use strict";var PU=gt(),UU=ie(),qU=PU(UU,"DataView");ih.exports=qU});var ch=u((PW,ph)=>{"use strict";var DU=gt(),NU=ie(),BU=DU(NU,"Promise");ph.exports=BU});var hr=u((UW,yh)=>{"use strict";var Ei=uh(),vi=rn(),Ri=ch(),_i=Go(),xi=ti(),hh=mt(),gr=Uo(),lh="[object Map]",MU="[object Object]",dh="[object Promise]",fh="[object Set]",mh="[object WeakMap]",gh="[object DataView]",kU=gr(Ei),GU=gr(vi),FU=gr(Ri),QU=gr(_i),jU=gr(xi),Nt=hh;(Ei&&Nt(new Ei(new ArrayBuffer(1)))!=gh||vi&&Nt(new vi)!=lh||Ri&&Nt(Ri.resolve())!=dh||_i&&Nt(new _i)!=fh||xi&&Nt(new xi)!=mh)&&(Nt=function(e){var t=hh(e),r=t==MU?e.constructor:void 0,a=r?gr(r):"";if(a)switch(a){case kU:return gh;case GU:return lh;case FU:return dh;case QU:return fh;case jU:return mh}return t});yh.exports=Nt});var bh=u((qW,Ah)=>{"use strict";var WU=Object.prototype,$U=WU.hasOwnProperty;function KU(e){var t=e.length,r=new e.constructor(t);return t&&typeof e[0]=="string"&&$U.call(e,"index")&&(r.index=e.index,r.input=e.input),r}Ah.exports=KU});var Sh=u((DW,Ih)=>{"use strict";var VU=un();function YU(e,t){var r=t?VU(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.byteLength)}Ih.exports=YU});var Th=u((NW,wh)=>{"use strict";var HU=/\w*$/;function zU(e){var t=new e.constructor(e.source,HU.exec(e));return t.lastIndex=e.lastIndex,t}wh.exports=zU});var xh=u((BW,_h)=>{"use strict";var Eh=xt(),vh=Eh?Eh.prototype:void 0,Rh=vh?vh.valueOf:void 0;function JU(e){return Rh?Object(Rh.call(e)):{}}_h.exports=JU});var Oh=u((MW,Ch)=>{"use strict";var XU=un(),ZU=Sh(),eq=Th(),tq=xh(),rq=Yo(),aq="[object Boolean]",nq="[object Date]",oq="[object Map]",sq="[object Number]",iq="[object RegExp]",uq="[object Set]",pq="[object String]",cq="[object Symbol]",lq="[object ArrayBuffer]",dq="[object DataView]",fq="[object Float32Array]",mq="[object Float64Array]",gq="[object Int8Array]",hq="[object Int16Array]",yq="[object Int32Array]",Aq="[object Uint8Array]",bq="[object Uint8ClampedArray]",Iq="[object Uint16Array]",Sq="[object Uint32Array]";function wq(e,t,r){var a=e.constructor;switch(t){case lq:return XU(e);case aq:case nq:return new a(+e);case dq:return ZU(e,r);case fq:case mq:case gq:case hq:case yq:case Aq:case bq:case Iq:case Sq:return rq(e,r);case oq:return new a;case sq:case pq:return new a(e);case iq:return eq(e);case uq:return new a;case cq:return tq(e)}}Ch.exports=wq});var Ph=u((kW,Lh)=>{"use strict";var Tq=hr(),Eq=be(),vq="[object Map]";function Rq(e){return Eq(e)&&Tq(e)==vq}Lh.exports=Rq});var Nh=u((GW,Dh)=>{"use strict";var _q=Ph(),xq=ln(),Uh=dn(),qh=Uh&&Uh.isMap,Cq=qh?xq(qh):_q;Dh.exports=Cq});var Mh=u((FW,Bh)=>{"use strict";var Oq=hr(),Lq=be(),Pq="[object Set]";function Uq(e){return Lq(e)&&Oq(e)==Pq}Bh.exports=Uq});var Qh=u((QW,Fh)=>{"use strict";var qq=Mh(),Dq=ln(),kh=dn(),Gh=kh&&kh.isSet,Nq=Gh?Dq(Gh):qq;Fh.exports=Nq});var Ci=u((jW,Kh)=>{"use strict";var Bq=na(),Mq=Gn(),kq=es(),Gq=bi(),Fq=Kg(),Qq=Ko(),jq=tr(),Wq=Zg(),$q=rh(),Kq=Ti(),Vq=sh(),Yq=hr(),Hq=bh(),zq=Oh(),Jq=zo(),Xq=ne(),Zq=pa(),eD=Nh(),tD=_e(),rD=Qh(),aD=mr(),nD=or(),oD=1,sD=2,iD=4,jh="[object Arguments]",uD="[object Array]",pD="[object Boolean]",cD="[object Date]",lD="[object Error]",Wh="[object Function]",dD="[object GeneratorFunction]",fD="[object Map]",mD="[object Number]",$h="[object Object]",gD="[object RegExp]",hD="[object Set]",yD="[object String]",AD="[object Symbol]",bD="[object WeakMap]",ID="[object ArrayBuffer]",SD="[object DataView]",wD="[object Float32Array]",TD="[object Float64Array]",ED="[object Int8Array]",vD="[object Int16Array]",RD="[object Int32Array]",_D="[object Uint8Array]",xD="[object Uint8ClampedArray]",CD="[object Uint16Array]",OD="[object Uint32Array]",N={};N[jh]=N[uD]=N[ID]=N[SD]=N[pD]=N[cD]=N[wD]=N[TD]=N[ED]=N[vD]=N[RD]=N[fD]=N[mD]=N[$h]=N[gD]=N[hD]=N[yD]=N[AD]=N[_D]=N[xD]=N[CD]=N[OD]=!0;N[lD]=N[Wh]=N[bD]=!1;function Wn(e,t,r,a,n,o){var s,i=t&oD,p=t&sD,f=t&iD;if(r&&(s=n?r(e,a,n,o):r(e)),s!==void 0)return s;if(!tD(e))return e;var m=Xq(e);if(m){if(s=Hq(e),!i)return jq(e,s)}else{var g=Yq(e),h=g==Wh||g==dD;if(Zq(e))return Qq(e,i);if(g==$h||g==jh||h&&!n){if(s=p||h?{}:Jq(e),!i)return p?$q(e,Fq(s,e)):Wq(e,Gq(s,e))}else{if(!N[g])return n?e:{};s=zq(e,g,i)}}o||(o=new Bq);var I=o.get(e);if(I)return I;o.set(e,s),rD(e)?e.forEach(function(R){s.add(Wn(R,t,r,R,e,o))}):eD(e)&&e.forEach(function(R,v){s.set(v,Wn(R,t,r,v,e,o))});var C=f?p?Vq:Kq:p?nD:aD,_=m?void 0:C(e);return Mq(_||e,function(R,v){_&&(v=R,R=e[v]),kq(s,v,Wn(R,t,r,v,e,o))}),s}Kh.exports=Wn});var Yh=u((WW,Vh)=>{"use strict";var LD=Ci(),PD=4;function UD(e){return LD(e,PD)}Vh.exports=UD});var zh=u(($W,Hh)=>{"use strict";var qD=Qn(),DD=8;function Oi(e,t,r){t=r?void 0:t;var a=qD(e,DD,void 0,void 0,void 0,void 0,void 0,t);return a.placeholder=Oi.placeholder,a}Oi.placeholder={};Hh.exports=Oi});var Xh=u((KW,Jh)=>{"use strict";var ND=mt(),BD=be(),MD=Jo(),kD="[object DOMException]",GD="[object Error]";function FD(e){if(!BD(e))return!1;var t=ND(e);return t==GD||t==kD||typeof e.message=="string"&&typeof e.name=="string"&&!MD(e)}Jh.exports=FD});var ey=u((VW,Zh)=>{"use strict";var QD=hr(),jD=be(),WD="[object WeakMap]";function $D(e){return jD(e)&&QD(e)==WD}Zh.exports=$D});var ry=u((YW,ty)=>{"use strict";function KD(e,t){for(var r=-1,a=e==null?0:e.length;++r<a;)if(t(e[r],r,e))return!0;return!1}ty.exports=KD});var Li=u((HW,ay)=>{"use strict";var VD=Bo(),YD=ry(),HD=ko(),zD=1,JD=2;function XD(e,t,r,a,n,o){var s=r&zD,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,h=!0,I=r&JD?new VD:void 0;for(o.set(e,t),o.set(t,e);++g<i;){var C=e[g],_=t[g];if(a)var R=s?a(_,C,g,t,e,o):a(C,_,g,e,t,o);if(R!==void 0){if(R)continue;h=!1;break}if(I){if(!YD(t,function(v,U){if(!HD(I,U)&&(C===v||n(C,v,r,a,o)))return I.push(U)})){h=!1;break}}else if(!(C===_||n(C,_,r,a,o))){h=!1;break}}return o.delete(e),o.delete(t),h}ay.exports=XD});var oy=u((zW,ny)=>{"use strict";function ZD(e){var t=-1,r=Array(e.size);return e.forEach(function(a,n){r[++t]=[n,a]}),r}ny.exports=ZD});var cy=u((JW,py)=>{"use strict";var sy=xt(),iy=Vo(),eN=Ht(),tN=Li(),rN=oy(),aN=on(),nN=1,oN=2,sN="[object Boolean]",iN="[object Date]",uN="[object Error]",pN="[object Map]",cN="[object Number]",lN="[object RegExp]",dN="[object Set]",fN="[object String]",mN="[object Symbol]",gN="[object ArrayBuffer]",hN="[object DataView]",uy=sy?sy.prototype:void 0,Pi=uy?uy.valueOf:void 0;function yN(e,t,r,a,n,o,s){switch(r){case hN:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case gN:return!(e.byteLength!=t.byteLength||!o(new iy(e),new iy(t)));case sN:case iN:case cN:return eN(+e,+t);case uN:return e.name==t.name&&e.message==t.message;case lN:case fN:return e==t+"";case pN:var i=rN;case dN:var p=a&nN;if(i||(i=aN),e.size!=t.size&&!p)return!1;var f=s.get(e);if(f)return f==t;a|=oN,s.set(e,t);var m=tN(i(e),i(t),a,n,o,s);return s.delete(e),m;case mN:if(Pi)return Pi.call(e)==Pi.call(t)}return!1}py.exports=yN});var fy=u((XW,dy)=>{"use strict";var ly=Ti(),AN=1,bN=Object.prototype,IN=bN.hasOwnProperty;function SN(e,t,r,a,n,o){var s=r&AN,i=ly(e),p=i.length,f=ly(t),m=f.length;if(p!=m&&!s)return!1;for(var g=p;g--;){var h=i[g];if(!(s?h in t:IN.call(t,h)))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 R=s;++g<p;){h=i[g];var v=e[h],U=t[h];if(a)var qe=s?a(U,v,h,t,e,o):a(v,U,h,e,t,o);if(!(qe===void 0?v===U||n(v,U,r,a,o):qe)){_=!1;break}R||(R=h=="constructor")}if(_&&!R){var Te=e.constructor,pt=t.constructor;Te!=pt&&"constructor"in e&&"constructor"in t&&!(typeof Te=="function"&&Te instanceof Te&&typeof pt=="function"&&pt instanceof pt)&&(_=!1)}return o.delete(e),o.delete(t),_}dy.exports=SN});var Sy=u((ZW,Iy)=>{"use strict";var Ui=na(),wN=Li(),TN=cy(),EN=fy(),my=hr(),gy=ne(),hy=pa(),vN=fn(),RN=1,yy="[object Arguments]",Ay="[object Array]",$n="[object Object]",_N=Object.prototype,by=_N.hasOwnProperty;function xN(e,t,r,a,n,o){var s=gy(e),i=gy(t),p=s?Ay:my(e),f=i?Ay:my(t);p=p==yy?$n:p,f=f==yy?$n:f;var m=p==$n,g=f==$n,h=p==f;if(h&&hy(e)){if(!hy(t))return!1;s=!0,m=!1}if(h&&!m)return o||(o=new Ui),s||vN(e)?wN(e,t,r,a,n,o):TN(e,t,p,r,a,n,o);if(!(r&RN)){var I=m&&by.call(e,"__wrapped__"),C=g&&by.call(t,"__wrapped__");if(I||C){var _=I?e.value():e,R=C?t.value():t;return o||(o=new Ui),n(_,R,r,a,o)}}return h?(o||(o=new Ui),EN(e,t,r,a,n,o)):!1}Iy.exports=xN});var qi=u((e$,Ey)=>{"use strict";var CN=Sy(),wy=be();function Ty(e,t,r,a,n){return e===t?!0:e==null||t==null||!wy(e)&&!wy(t)?e!==e&&t!==t:CN(e,t,r,a,Ty,n)}Ey.exports=Ty});var Ry=u((t$,vy)=>{"use strict";var ON=na(),LN=qi(),PN=1,UN=2;function qN(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 ON;if(a)var h=a(f,m,p,e,t,g);if(!(h===void 0?LN(m,f,PN|UN,a,g):h))return!1}}return!0}vy.exports=qN});var Di=u((r$,_y)=>{"use strict";var DN=_e();function NN(e){return e===e&&!DN(e)}_y.exports=NN});var Cy=u((a$,xy)=>{"use strict";var BN=Di(),MN=mr();function kN(e){for(var t=MN(e),r=t.length;r--;){var a=t[r],n=e[a];t[r]=[a,n,BN(n)]}return t}xy.exports=kN});var Ni=u((n$,Oy)=>{"use strict";function GN(e,t){return function(r){return r==null?!1:r[e]===t&&(t!==void 0||e in Object(r))}}Oy.exports=GN});var Py=u((o$,Ly)=>{"use strict";var FN=Ry(),QN=Cy(),jN=Ni();function WN(e){var t=QN(e);return t.length==1&&t[0][2]?jN(t[0][0],t[0][1]):function(r){return r===e||FN(r,e,t)}}Ly.exports=WN});var Kn=u((s$,Uy)=>{"use strict";var $N=ne(),KN=fr(),VN=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,YN=/^\w*$/;function HN(e,t){if($N(e))return!1;var r=typeof e;return r=="number"||r=="symbol"||r=="boolean"||e==null||KN(e)?!0:YN.test(e)||!VN.test(e)||t!=null&&e in Object(t)}Uy.exports=HN});var Ny=u((i$,Dy)=>{"use strict";var qy=an(),zN="Expected a function";function Bi(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(zN);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(Bi.Cache||qy),r}Bi.Cache=qy;Dy.exports=Bi});var My=u((u$,By)=>{"use strict";var JN=Ny(),XN=500;function ZN(e){var t=JN(e,function(a){return r.size===XN&&r.clear(),a}),r=t.cache;return t}By.exports=ZN});var Mi=u((p$,ky)=>{"use strict";var eB=My(),tB=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,rB=/\\(\\)?/g,aB=eB(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(tB,function(r,a,n,o){t.push(n?o.replace(rB,"$1"):a||r)}),t});ky.exports=aB});var ki=u((c$,Gy)=>{"use strict";function nB(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}Gy.exports=nB});var Ky=u((l$,$y)=>{"use strict";var Fy=xt(),oB=ki(),sB=ne(),iB=fr(),uB=1/0,Qy=Fy?Fy.prototype:void 0,jy=Qy?Qy.toString:void 0;function Wy(e){if(typeof e=="string")return e;if(sB(e))return oB(e,Wy)+"";if(iB(e))return jy?jy.call(e):"";var t=e+"";return t=="0"&&1/e==-uB?"-0":t}$y.exports=Wy});var Gi=u((d$,Vy)=>{"use strict";var pB=Ky();function cB(e){return e==null?"":pB(e)}Vy.exports=cB});var Fi=u((f$,Yy)=>{"use strict";var lB=ne(),dB=Kn(),fB=Mi(),mB=Gi();function gB(e,t){return lB(e)?e:dB(e,t)?[e]:fB(mB(e))}Yy.exports=gB});var yr=u((m$,Hy)=>{"use strict";var hB=fr(),yB=1/0;function AB(e){if(typeof e=="string"||hB(e))return e;var t=e+"";return t=="0"&&1/e==-yB?"-0":t}Hy.exports=AB});var Qi=u((g$,zy)=>{"use strict";var bB=Fi(),IB=yr();function SB(e,t){t=bB(t,e);for(var r=0,a=t.length;e!=null&&r<a;)e=e[IB(t[r++])];return r&&r==a?e:void 0}zy.exports=SB});var Xy=u((h$,Jy)=>{"use strict";var wB=Qi();function TB(e,t,r){var a=e==null?void 0:wB(e,t);return a===void 0?r:a}Jy.exports=TB});var eA=u((y$,Zy)=>{"use strict";function EB(e,t){return e!=null&&t in Object(e)}Zy.exports=EB});var rA=u((A$,tA)=>{"use strict";var vB=Fi(),RB=Jr(),_B=ne(),xB=da(),CB=sn(),OB=yr();function LB(e,t,r){t=vB(t,e);for(var a=-1,n=t.length,o=!1;++a<n;){var s=OB(t[a]);if(!(o=e!=null&&r(e,s)))break;e=e[s]}return o||++a!=n?o:(n=e==null?0:e.length,!!n&&CB(n)&&xB(s,n)&&(_B(e)||RB(e)))}tA.exports=LB});var nA=u((b$,aA)=>{"use strict";var PB=eA(),UB=rA();function qB(e,t){return e!=null&&UB(e,t,PB)}aA.exports=qB});var sA=u((I$,oA)=>{"use strict";var DB=qi(),NB=Xy(),BB=nA(),MB=Kn(),kB=Di(),GB=Ni(),FB=yr(),QB=1,jB=2;function WB(e,t){return MB(e)&&kB(t)?GB(FB(e),t):function(r){var a=NB(r,e);return a===void 0&&a===t?BB(r,e):DB(t,a,QB|jB)}}oA.exports=WB});var uA=u((S$,iA)=>{"use strict";function $B(e){return function(t){return t?.[e]}}iA.exports=$B});var cA=u((w$,pA)=>{"use strict";var KB=Qi();function VB(e){return function(t){return KB(t,e)}}pA.exports=VB});var dA=u((T$,lA)=>{"use strict";var YB=uA(),HB=cA(),zB=Kn(),JB=yr();function XB(e){return zB(e)?YB(JB(e)):HB(e)}lA.exports=XB});var ji=u((E$,fA)=>{"use strict";var ZB=Py(),eM=sA(),tM=Xr(),rM=ne(),aM=dA();function nM(e){return typeof e=="function"?e:e==null?tM:typeof e=="object"?rM(e)?eM(e[0],e[1]):ZB(e):aM(e)}fA.exports=nM});var gA=u((v$,mA)=>{"use strict";var oM=Ci(),sM=ji(),iM=1;function uM(e){return sM(typeof e=="function"?e:oM(e,iM))}mA.exports=uM});var yA=u((R$,hA)=>{"use strict";var pM=Oo();function cM(e){var t=e==null?0:e.length;return t?pM(e,1):[]}hA.exports=cM});var bA=u((_$,AA)=>{"use strict";var lM=yA(),dM=Lo(),fM=tn();function mM(e){return fM(dM(e,void 0,lM),e+"")}AA.exports=mM});var SA=u((x$,IA)=>{"use strict";var gM=Qn(),hM=bA(),yM=256,AM=hM(function(e,t){return gM(e,yM,void 0,void 0,void 0,t)});IA.exports=AM});var TA=u((C$,wA)=>{"use strict";var bM=ki(),IM=tr(),SM=ne(),wM=fr(),TM=Mi(),EM=yr(),vM=Gi();function RM(e){return SM(e)?bM(e,EM):wM(e)?[e]:IM(TM(vM(e)))}wA.exports=RM});var vA=u((O$,EA)=>{"use strict";EA.exports={ary:kg(),assign:bi(),clone:Yh(),curry:zh(),forEach:Gn(),isArray:ne(),isError:Xh(),isFunction:Zr(),isWeakMap:ey(),iteratee:gA(),keys:Ai(),rearg:SA(),toInteger:mi(),toPath:TA()}});var _A=u((L$,RA)=>{"use strict";var _M=mm(),xM=vA();function CM(e,t,r){return _M(xM,e,t,r)}RA.exports=CM});var Wi=u((P$,CA)=>{"use strict";var OM=_A(),xA=OM("merge",rs());xA.placeholder=Js();CA.exports=xA});var Pb=u((vK,Lb)=>{"use strict";function zM(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}Lb.exports=zM});var qb=u((RK,Ub)=>{"use strict";var JM=$o(),XM=mr();function ZM(e,t){return e&&JM(e,t,XM)}Ub.exports=ZM});var Nb=u((_K,Db)=>{"use strict";var ek=Xt();function tk(e,t){return function(r,a){if(r==null)return r;if(!ek(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}}Db.exports=tk});var Mb=u((xK,Bb)=>{"use strict";var rk=qb(),ak=Nb(),nk=ak(rk);Bb.exports=nk});var Gb=u((CK,kb)=>{"use strict";var ok=Mb();function sk(e,t,r,a){return ok(e,function(n,o,s){t(a,n,r(n),s)}),a}kb.exports=sk});var Qb=u((OK,Fb)=>{"use strict";var ik=Pb(),uk=Gb(),pk=ji(),ck=ne();function lk(e,t){return function(r,a){var n=ck(r)?ik:uk,o=t?t():{};return n(r,e,pk(a,2),o)}}Fb.exports=lk});var Wb=u((LK,jb)=>{"use strict";var dk=oa(),fk=Qb(),mk=Object.prototype,gk=mk.hasOwnProperty,hk=fk(function(e,t,r){gk.call(e,r)?e[r].push(t):dk(e,r,[t])});jb.exports=hk});var Gk={};w(Gk,{Method:()=>io,ai:()=>Pu,api:()=>su,auditLogs:()=>bt,automations:()=>Cn,backups:()=>Oe,branding:()=>bn,constants:()=>$r,environmentVariables:()=>Je,features:()=>Me,groups:()=>j,init:()=>um,licensing:()=>Ve,logger:()=>Bt,mappers:()=>Y,middleware:()=>Ji,plugins:()=>On,publicApi:()=>Un,quotas:()=>ze,scimGroups:()=>Ar,scimUsers:()=>he,sdk:()=>Ki,users:()=>nt,utils:()=>Vt});module.exports=NI(Gk);var io=(o=>(o.POST="POST",o.GET="GET",o.PATCH="PATCH",o.DELETE="DELETE",o.PUT="PUT",o))(io||{});var Ki={};w(Ki,{ai:()=>bs,auditLogs:()=>bt,automations:()=>Cn,backups:()=>Oe,branding:()=>bn,environmentVariables:()=>Je,features:()=>Me,groups:()=>j,init:()=>um,licensing:()=>Ve,logger:()=>Bt,plugins:()=>On,publicApi:()=>Un,quotas:()=>ze,scimGroups:()=>Ar,scimUsers:()=>he,users:()=>nt,utils:()=>Vt});var bn={};w(bn,{getBrandingConfig:()=>Rx});var Me={};w(Me,{checkBackups:()=>fe,checkFeature:()=>yn,checkFeatures:()=>fs,checkSCIM:()=>ys,isAppBuildersEnabled:()=>Pt,isAuditLogsEnabled:()=>An,isBackupsEnabled:()=>ms,isBrandingEnabled:()=>gs,isEnforceableSSO:()=>wf,isExpandedPublicApiEnabled:()=>rt,isPWAEnabled:()=>Sx,isSSOEnforced:()=>wx,isSyncAutomationsEnabled:()=>bx,isTriggerAutomationRunEnabled:()=>Ix,isUserGroupsEnabled:()=>hs,isViewPermissionEnabled:()=>Tx,isViewReadonlyColumnsEnabled:()=>Ex});var ue=require("@budibase/types"),tt=require("@budibase/backend-core");var Ve={};w(Ve,{cache:()=>Ne,client:()=>ft,features:()=>Ja,getFreeLicense:()=>cs,getLicense:()=>us,getLicenseFromKey:()=>ps,keys:()=>ds,offline:()=>mn,quotas:()=>Xa});var Ne={};w(Ne,{getCachedLicense:()=>If,invalidate:()=>Sf,refresh:()=>Ct});var Ba=require("@budibase/backend-core"),Tr,BI=async()=>{Tr=await Ba.RedisClient.init(Ba.redis.utils.Databases.LICENSES)},MI=async()=>{Tr&&await Tr.finish()};process.on("exit",async()=>{await MI()});var uo=async()=>(Tr||await BI(),Tr);var ft={};w(ft,{activateLicenseKey:()=>vo,getLicense:()=>$t,getLicenseFromKey:()=>Eo,triggerQuota:()=>TS});var Fu=P(require("node-fetch"));var Qu=require("@budibase/backend-core"),po=require("dd-trace"),ju=require("dd-trace/ext/formats"),co=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";Qu.logging.correlation.setHeader(o),po.tracer.inject(n,ju.HTTP_HEADERS,o);let i={method:t,body:s?JSON.stringify(a.body):a.body,headers:o,credentials:"include"};return(0,Fu.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}},lo=co;var Ya=require("@budibase/types"),L=require("@budibase/backend-core");var We={};w(We,{bustCache:()=>go,getCurrentUsageValues:()=>Ju,getQuotaUsage:()=>Et,setAllUsage:()=>yo,setAppUsageValue:()=>ho,setUsage:()=>Yu,setUsagePerApp:()=>Hu,utils:()=>_r});var se=require("@budibase/types"),de=require("@budibase/backend-core");var _r={};w(_r,{generateBaseQuotaUsage:()=>ka,generateNewMonthlyQuotas:()=>Rr,generateNewQuotaUsage:()=>mo,getBreakdownName:()=>Fa,getCurrentMonthString:()=>ct,getQuotaDocId:()=>vr,setCurrentMonth:()=>Ga,setQuotaReset:()=>fo});var H=require("@budibase/types"),Er=require("@budibase/backend-core"),Ma=require("@budibase/shared-core"),vr=()=>Er.context.isSelfHostUsingCloud()?`quota_usage_${Er.context.getTenantId()}`:Er.db.StaticDatabases.GLOBAL.docs.usageQuota,Wu=()=>{let e=new Date;return new Date(e.getFullYear(),e.getMonth()+1,1).toISOString()},fo=e=>{e.quotaReset=Wu()},ct=()=>{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:{[ct()]:Rr()}}),mo=()=>{let e={_id:vr(),quotaReset:Wu(),...ka(),apps:{}};return Ga(e),e},Rr=()=>({[H.MonthlyQuotaName.QUERIES]:0,[H.MonthlyQuotaName.AUTOMATIONS]:0,[H.MonthlyQuotaName.BUDIBASE_AI_CREDITS]:0,[H.MonthlyQuotaName.ACTIONS]:0,triggers:{}}),Ga=e=>{let t=ct();e.monthly||(e.monthly={}),e.monthly[t]||(e.monthly[t]=Rr()),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 $u=de.Duration.fromSeconds(60).toMs(),{Writethrough:Ku}=de.cache.writethrough;function GI(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 Qa=()=>de.tenancy.isSelfHostUsingCloud()?new Ku(de.tenancy.getSelfHostCloudDB(),$u):new Ku(de.tenancy.getGlobalDB(),$u);async function go(e=0){let r=Qa(),a=vr(),n=await r.tryGet(a);n&&n._rev&&await r.remove(a,n._rev).catch(async o=>{if(e<1)return await go(e+1);throw o})}var Et=async()=>{let e=Qa(),t=await e.tryGet(vr());if(!t){t=mo();let{rev:r}=await e.put(t);t._rev=r}return Ga(t),fo(t),GI(t)},Yu=async(e,t,r)=>yo({name:t,type:r,values:{total:e}}),Hu=async(e,t,r)=>{let a=Qa(),n=await Et(),o=Object.values(e).reduce((i,p)=>i+p,0);for(let[i,p]of Object.entries(e))n=zu(n,t,r,{total:o,app:p},{appId:i});let s=await a.put(n);return n._rev=s.rev,n},FI=(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=de.db.getProdAppID(a?.appId||de.context.getAppId())}catch{}if(!o||!n.app||!se.APP_QUOTA_NAMES.includes(t))return e;e.apps?.[o]||(e.apps={...e.apps,[o]:ka()});let s=e.apps[o];switch(r){case se.QuotaUsageType.STATIC:s.usageQuota[t]=n.app;break;case se.QuotaUsageType.MONTHLY:{let i=ct(),p=t,f=s.monthly[i];f||(s.monthly[i]=Rr(),f=s.monthly[i]),f[p]=n.app,se.BREAKDOWN_QUOTA_NAMES.includes(p)&&a?.id&&(f=FI(f,p,a.id,n));break}}return e},Vu=(e,t,r,a)=>{if(!se.APP_QUOTA_NAMES.includes(r))return{};let n;try{n=de.db.getProdAppID(de.context.getAppId())}catch{}if(!n||!e.apps||!e.apps[n])return{app:0};let o=e.apps[n];switch(t){case se.QuotaUsageType.STATIC:if(o.usageQuota?.[r])return{app:o.usageQuota[r]};break;case se.QuotaUsageType.MONTHLY:{let s=ct(),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}},QI=(e,t,r)=>{t.usageQuota.triggers||(t.usageQuota.triggers={}),r&&(t.usageQuota.triggers[e]=r)},jI=(e,t,r,a)=>{r.monthly[t].triggers||(r.monthly[t].triggers={}),a&&(r.monthly[t].triggers[e]=a)},zu=(e,t,r,a,n={})=>{if(r===se.QuotaUsageType.STATIC)t=t,e.usageQuota[t]=a.total,QI(t,e,a.triggers);else if(r===se.QuotaUsageType.MONTHLY){t=t;let o=ct();e.monthly[o][t]=a.total,jI(t,o,e,a.triggers)}else throw new Error(`Invalid usage type: ${r}`);return ho(e,t,r,n,a)},yo=async e=>{let t=Array.isArray(e)?e:[e],r=Qa(),a=await Et();for(let o of t)a=zu(a,o.name,o.type,o.values,o.opts);let n=await r.put(a,0);return a._rev=n.rev,a},Ju=async(e,t,r)=>{let a=await Et(),n=0,o={};switch(e){case se.QuotaUsageType.STATIC:if(a.usageQuota[t]){let s=t;n=a.usageQuota[s],o=Vu(a,e,t,r)}break;case se.QuotaUsageType.MONTHLY:{let s=ct(),i=t;a.monthly[s][i]&&(n=a.monthly[s][i],o=Vu(a,e,t,r));break}default:throw new Error(`Invalid usage type: ${e}`)}return se.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:()=>KI,get:()=>Ao,save:()=>$I});var lt=require("@budibase/backend-core"),WI=()=>({_id:lt.StaticDatabases.GLOBAL.docs.licenseInfo}),$I=async e=>{let t=await Ao();t={...t,...e};let a=await lt.tenancy.getGlobalDB().put(t);return t._rev=a.rev,t},Ao=async()=>{let e=lt.tenancy.getGlobalDB();try{return await e.get(lt.StaticDatabases.GLOBAL.docs.licenseInfo)}catch(t){if(t.status===404)return WI();throw t}},KI=async()=>{let e=lt.tenancy.getGlobalDB(),t=await Ao();t&&t._rev&&await e.remove(lt.StaticDatabases.GLOBAL.docs.licenseInfo,t._rev)};var M={};w(M,{bulkSave:()=>nS,destroy:()=>oS,fetch:()=>eS,generateUserGroupID:()=>XI,get:()=>tS,getBulk:()=>rS,getByName:()=>bo,getGroupUsers:()=>Wa,getGroupUsersParams:()=>rp,getUserGroupsParams:()=>tp,save:()=>aS});var q=require("@budibase/backend-core");var De=require("@budibase/types"),Qt=require("@budibase/backend-core");async function Xu(){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 ja=require("@budibase/backend-core"),{ViewName:VI,SEPARATOR:YI,DocumentType:HI,createView:zI}=ja.db,JI=HI.USER+YI;async function Zu(){let e=ja.tenancy.getGlobalDB(),t=`function(doc) {
3
+ `)}Vm.exports=$O});var Gn=u((Zj,Hm)=>{"use strict";function KO(e,t){for(var r=-1,a=e==null?0:e.length;++r<a&&t(e[r],r,e)!==!1;);return e}Hm.exports=KO});var Jm=u((eW,zm)=>{"use strict";var VO=Gn(),YO=Mo(),HO=1,zO=2,JO=8,XO=16,ZO=32,eL=64,tL=128,rL=256,aL=512,nL=[["ary",tL],["bind",HO],["bindKey",zO],["curry",JO],["curryRight",XO],["flip",aL],["partial",ZO],["partialRight",eL],["rearg",rL]];function oL(e,t){return VO(nL,function(r){var a="_."+r[0];t&r[1]&&!YO(e,a)&&e.push(a)}),e.sort()}zm.exports=oL});var pi=u((tW,Xm)=>{"use strict";var sL=Km(),iL=Ym(),uL=tn(),pL=Jm();function cL(e,t,r){var a=t+"";return uL(e,iL(a,pL(sL(a),r)))}Xm.exports=cL});var ci=u((rW,tg)=>{"use strict";var lL=jm(),dL=ui(),fL=pi(),mL=1,gL=2,hL=4,yL=8,Zm=32,eg=64;function AL(e,t,r,a,n,o,s,i,p,f){var m=t&yL,g=m?s:void 0,h=m?void 0:s,I=m?o:void 0,C=m?void 0:o;t|=m?Zm:eg,t&=~(m?eg:Zm),t&hL||(t&=~(mL|gL));var _=[e,t,n,I,g,C,h,i,p,f],R=r.apply(void 0,_);return lL(e)&&dL(R,_),R.placeholder=a,fL(R,e,t)}tg.exports=AL});var li=u((aW,rg)=>{"use strict";function bL(e){var t=e;return t.placeholder}rg.exports=bL});var ng=u((nW,ag)=>{"use strict";var IL=tr(),SL=da(),wL=Math.min;function TL(e,t){for(var r=e.length,a=wL(t.length,r),n=IL(e);a--;){var o=t[a];e[a]=SL(o,r)?n[o]:void 0}return e}ag.exports=TL});var Fn=u((oW,sg)=>{"use strict";var og="__lodash_placeholder__";function EL(e,t){for(var r=-1,a=e.length,n=0,o=[];++r<a;){var s=e[r];(s===t||s===og)&&(e[r]=og,o[n++]=r)}return o}sg.exports=EL});var di=u((sW,pg)=>{"use strict";var vL=ni(),RL=oi(),_L=Rm(),ig=Ta(),xL=ci(),CL=li(),OL=ng(),LL=Fn(),PL=pe(),UL=1,qL=2,DL=8,NL=16,BL=128,ML=512;function ug(e,t,r,a,n,o,s,i,p,f){var m=t&BL,g=t&UL,h=t&qL,I=t&(DL|NL),C=t&ML,_=h?void 0:ig(e);function R(){for(var v=arguments.length,U=Array(v),qe=v;qe--;)U[qe]=arguments[qe];if(I)var Te=CL(R),pt=_L(U,Te);if(a&&(U=vL(U,a,n,I)),o&&(U=RL(U,o,s,I)),v-=pt,I&&v<f){var Ft=LL(U,Te);return xL(e,t,ug,R.placeholder,r,U,Ft,i,p,f-v)}var Ir=g?r:this,Sr=h?Ir[e]:e;return v=U.length,i?U=OL(U,i):C&&v>1&&U.reverse(),m&&p<v&&(U.length=p),this&&this!==PL&&this instanceof R&&(Sr=_||ig(Sr)),Sr.apply(Ir,U)}return R}pg.exports=ug});var lg=u((iW,cg)=>{"use strict";var kL=en(),GL=Ta(),FL=di(),QL=ci(),jL=li(),WL=Fn(),$L=pe();function KL(e,t,r){var a=GL(e);function n(){for(var o=arguments.length,s=Array(o),i=o,p=jL(n);i--;)s[i]=arguments[i];var f=o<3&&s[0]!==p&&s[o-1]!==p?[]:WL(s,p);if(o-=f.length,o<r)return QL(e,t,FL,n.placeholder,void 0,s,f,void 0,void 0,r-o);var m=this&&this!==$L&&this instanceof n?a:e;return kL(m,this,s)}return n}cg.exports=KL});var fg=u((uW,dg)=>{"use strict";var VL=en(),YL=Ta(),HL=pe(),zL=1;function JL(e,t,r,a){var n=t&zL,o=YL(e);function s(){for(var i=-1,p=arguments.length,f=-1,m=a.length,g=Array(m+p),h=this&&this!==HL&&this instanceof s?o:e;++f<m;)g[f]=a[f];for(;p--;)g[f++]=arguments[++i];return VL(h,n?r:this,g)}return s}dg.exports=JL});var bg=u((pW,Ag)=>{"use strict";var XL=ni(),ZL=oi(),mg=Fn(),gg="__lodash_placeholder__",fi=1,eP=2,tP=4,hg=8,Ea=128,yg=256,rP=Math.min;function aP(e,t){var r=e[1],a=t[1],n=r|a,o=n<(fi|eP|Ea),s=a==Ea&&r==hg||a==Ea&&r==yg&&e[7].length<=t[8]||a==(Ea|yg)&&t[7].length<=t[8]&&r==hg;if(!(o||s))return e;a&fi&&(e[2]=t[2],n|=r&fi?0:tP);var i=t[3];if(i){var p=e[3];e[3]=p?XL(p,i,t[4]):i,e[4]=p?mg(e[3],gg):t[4]}return i=t[5],i&&(p=e[5],e[5]=p?ZL(p,i,t[6]):i,e[6]=p?mg(e[5],gg):t[6]),i=t[7],i&&(e[7]=i),a&Ea&&(e[8]=e[8]==null?t[8]:rP(e[8],t[8])),e[9]==null&&(e[9]=t[9]),e[0]=t[0],e[1]=n,e}Ag.exports=aP});var Sg=u((cW,Ig)=>{"use strict";var nP=/\s/;function oP(e){for(var t=e.length;t--&&nP.test(e.charAt(t)););return t}Ig.exports=oP});var Tg=u((lW,wg)=>{"use strict";var sP=Sg(),iP=/^\s+/;function uP(e){return e&&e.slice(0,sP(e)+1).replace(iP,"")}wg.exports=uP});var fr=u((dW,Eg)=>{"use strict";var pP=mt(),cP=be(),lP="[object Symbol]";function dP(e){return typeof e=="symbol"||cP(e)&&pP(e)==lP}Eg.exports=dP});var xg=u((fW,_g)=>{"use strict";var fP=Tg(),vg=_e(),mP=fr(),Rg=0/0,gP=/^[-+]0x[0-9a-f]+$/i,hP=/^0b[01]+$/i,yP=/^0o[0-7]+$/i,AP=parseInt;function bP(e){if(typeof e=="number")return e;if(mP(e))return Rg;if(vg(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=vg(t)?t+"":t}if(typeof e!="string")return e===0?e:+e;e=fP(e);var r=hP.test(e);return r||yP.test(e)?AP(e.slice(2),r?2:8):gP.test(e)?Rg:+e}_g.exports=bP});var Lg=u((mW,Og)=>{"use strict";var IP=xg(),Cg=1/0,SP=17976931348623157e292;function wP(e){if(!e)return e===0?e:0;if(e=IP(e),e===Cg||e===-Cg){var t=e<0?-1:1;return t*SP}return e===e?e:0}Og.exports=wP});var mi=u((gW,Pg)=>{"use strict";var TP=Lg();function EP(e){var t=TP(e),r=t%1;return t===t?r?t-r:t:0}Pg.exports=EP});var Qn=u((hW,Bg)=>{"use strict";var vP=ai(),RP=wm(),_P=lg(),xP=di(),CP=fg(),OP=si(),LP=bg(),PP=ui(),UP=pi(),Ug=mi(),qP="Expected a function",qg=1,DP=2,gi=8,hi=16,yi=32,Dg=64,Ng=Math.max;function NP(e,t,r,a,n,o,s,i){var p=t&DP;if(!p&&typeof e!="function")throw new TypeError(qP);var f=a?a.length:0;if(f||(t&=~(yi|Dg),a=n=void 0),s=s===void 0?s:Ng(Ug(s),0),i=i===void 0?i:Ug(i),f-=n?n.length:0,t&Dg){var m=a,g=n;a=n=void 0}var h=p?void 0:OP(e),I=[e,t,r,a,n,m,g,o,s,i];if(h&&LP(I,h),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:Ng(I[9]-f,0),!i&&t&(gi|hi)&&(t&=~(gi|hi)),!t||t==qg)var C=RP(e,t,r);else t==gi||t==hi?C=_P(e,t,i):(t==yi||t==(qg|yi))&&!n.length?C=CP(e,t,r,a):C=xP.apply(void 0,I);var _=h?vP:PP;return UP(_(C,I),e,t)}Bg.exports=NP});var kg=u((yW,Mg)=>{"use strict";var BP=Qn(),MP=128;function kP(e,t,r){return t=r?void 0:t,t=e&&t==null?e.length:t,BP(e,MP,void 0,void 0,void 0,void 0,t)}Mg.exports=kP});var Fg=u((AW,Gg)=>{"use strict";var GP=Ho(),FP=GP(Object.keys,Object);Gg.exports=FP});var Ai=u((bW,Qg)=>{"use strict";var QP=cn(),jP=Fg(),WP=Object.prototype,$P=WP.hasOwnProperty;function KP(e){if(!QP(e))return jP(e);var t=[];for(var r in Object(e))$P.call(e,r)&&r!="constructor"&&t.push(r);return t}Qg.exports=KP});var mr=u((IW,jg)=>{"use strict";var VP=ts(),YP=Ai(),HP=Xt();function zP(e){return HP(e)?VP(e):YP(e)}jg.exports=zP});var bi=u((SW,Wg)=>{"use strict";var JP=nr(),XP=mr();function ZP(e,t){return e&&JP(t,XP(t),e)}Wg.exports=ZP});var Kg=u((wW,$g)=>{"use strict";var eU=nr(),tU=or();function rU(e,t){return e&&eU(t,tU(t),e)}$g.exports=rU});var Yg=u((TW,Vg)=>{"use strict";function aU(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}Vg.exports=aU});var Ii=u((EW,Hg)=>{"use strict";function nU(){return[]}Hg.exports=nU});var jn=u((vW,Jg)=>{"use strict";var oU=Yg(),sU=Ii(),iU=Object.prototype,uU=iU.propertyIsEnumerable,zg=Object.getOwnPropertySymbols,pU=zg?function(e){return e==null?[]:(e=Object(e),oU(zg(e),function(t){return uU.call(e,t)}))}:sU;Jg.exports=pU});var Zg=u((RW,Xg)=>{"use strict";var cU=nr(),lU=jn();function dU(e,t){return cU(e,lU(e),t)}Xg.exports=dU});var Si=u((_W,eh)=>{"use strict";var fU=Za(),mU=pn(),gU=jn(),hU=Ii(),yU=Object.getOwnPropertySymbols,AU=yU?function(e){for(var t=[];e;)fU(t,gU(e)),e=mU(e);return t}:hU;eh.exports=AU});var rh=u((xW,th)=>{"use strict";var bU=nr(),IU=Si();function SU(e,t){return bU(e,IU(e),t)}th.exports=SU});var wi=u((CW,ah)=>{"use strict";var wU=Za(),TU=ne();function EU(e,t,r){var a=t(e);return TU(e)?a:wU(a,r(e))}ah.exports=EU});var Ti=u((OW,nh)=>{"use strict";var vU=wi(),RU=jn(),_U=mr();function xU(e){return vU(e,_U,RU)}nh.exports=xU});var sh=u((LW,oh)=>{"use strict";var CU=wi(),OU=Si(),LU=or();function PU(e){return CU(e,LU,OU)}oh.exports=PU});var uh=u((PW,ih)=>{"use strict";var UU=gt(),qU=pe(),DU=UU(qU,"DataView");ih.exports=DU});var ch=u((UW,ph)=>{"use strict";var NU=gt(),BU=pe(),MU=NU(BU,"Promise");ph.exports=MU});var hr=u((qW,yh)=>{"use strict";var Ei=uh(),vi=rn(),Ri=ch(),_i=Go(),xi=ti(),hh=mt(),gr=Uo(),lh="[object Map]",kU="[object Object]",dh="[object Promise]",fh="[object Set]",mh="[object WeakMap]",gh="[object DataView]",GU=gr(Ei),FU=gr(vi),QU=gr(Ri),jU=gr(_i),WU=gr(xi),Nt=hh;(Ei&&Nt(new Ei(new ArrayBuffer(1)))!=gh||vi&&Nt(new vi)!=lh||Ri&&Nt(Ri.resolve())!=dh||_i&&Nt(new _i)!=fh||xi&&Nt(new xi)!=mh)&&(Nt=function(e){var t=hh(e),r=t==kU?e.constructor:void 0,a=r?gr(r):"";if(a)switch(a){case GU:return gh;case FU:return lh;case QU:return dh;case jU:return fh;case WU:return mh}return t});yh.exports=Nt});var bh=u((DW,Ah)=>{"use strict";var $U=Object.prototype,KU=$U.hasOwnProperty;function VU(e){var t=e.length,r=new e.constructor(t);return t&&typeof e[0]=="string"&&KU.call(e,"index")&&(r.index=e.index,r.input=e.input),r}Ah.exports=VU});var Sh=u((NW,Ih)=>{"use strict";var YU=un();function HU(e,t){var r=t?YU(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.byteLength)}Ih.exports=HU});var Th=u((BW,wh)=>{"use strict";var zU=/\w*$/;function JU(e){var t=new e.constructor(e.source,zU.exec(e));return t.lastIndex=e.lastIndex,t}wh.exports=JU});var xh=u((MW,_h)=>{"use strict";var Eh=xt(),vh=Eh?Eh.prototype:void 0,Rh=vh?vh.valueOf:void 0;function XU(e){return Rh?Object(Rh.call(e)):{}}_h.exports=XU});var Oh=u((kW,Ch)=>{"use strict";var ZU=un(),eq=Sh(),tq=Th(),rq=xh(),aq=Yo(),nq="[object Boolean]",oq="[object Date]",sq="[object Map]",iq="[object Number]",uq="[object RegExp]",pq="[object Set]",cq="[object String]",lq="[object Symbol]",dq="[object ArrayBuffer]",fq="[object DataView]",mq="[object Float32Array]",gq="[object Float64Array]",hq="[object Int8Array]",yq="[object Int16Array]",Aq="[object Int32Array]",bq="[object Uint8Array]",Iq="[object Uint8ClampedArray]",Sq="[object Uint16Array]",wq="[object Uint32Array]";function Tq(e,t,r){var a=e.constructor;switch(t){case dq:return ZU(e);case nq:case oq:return new a(+e);case fq:return eq(e,r);case mq:case gq:case hq:case yq:case Aq:case bq:case Iq:case Sq:case wq:return aq(e,r);case sq:return new a;case iq:case cq:return new a(e);case uq:return tq(e);case pq:return new a;case lq:return rq(e)}}Ch.exports=Tq});var Ph=u((GW,Lh)=>{"use strict";var Eq=hr(),vq=be(),Rq="[object Map]";function _q(e){return vq(e)&&Eq(e)==Rq}Lh.exports=_q});var Nh=u((FW,Dh)=>{"use strict";var xq=Ph(),Cq=ln(),Uh=dn(),qh=Uh&&Uh.isMap,Oq=qh?Cq(qh):xq;Dh.exports=Oq});var Mh=u((QW,Bh)=>{"use strict";var Lq=hr(),Pq=be(),Uq="[object Set]";function qq(e){return Pq(e)&&Lq(e)==Uq}Bh.exports=qq});var Qh=u((jW,Fh)=>{"use strict";var Dq=Mh(),Nq=ln(),kh=dn(),Gh=kh&&kh.isSet,Bq=Gh?Nq(Gh):Dq;Fh.exports=Bq});var Ci=u((WW,Kh)=>{"use strict";var Mq=na(),kq=Gn(),Gq=es(),Fq=bi(),Qq=Kg(),jq=Ko(),Wq=tr(),$q=Zg(),Kq=rh(),Vq=Ti(),Yq=sh(),Hq=hr(),zq=bh(),Jq=Oh(),Xq=zo(),Zq=ne(),eD=pa(),tD=Nh(),rD=_e(),aD=Qh(),nD=mr(),oD=or(),sD=1,iD=2,uD=4,jh="[object Arguments]",pD="[object Array]",cD="[object Boolean]",lD="[object Date]",dD="[object Error]",Wh="[object Function]",fD="[object GeneratorFunction]",mD="[object Map]",gD="[object Number]",$h="[object Object]",hD="[object RegExp]",yD="[object Set]",AD="[object String]",bD="[object Symbol]",ID="[object WeakMap]",SD="[object ArrayBuffer]",wD="[object DataView]",TD="[object Float32Array]",ED="[object Float64Array]",vD="[object Int8Array]",RD="[object Int16Array]",_D="[object Int32Array]",xD="[object Uint8Array]",CD="[object Uint8ClampedArray]",OD="[object Uint16Array]",LD="[object Uint32Array]",N={};N[jh]=N[pD]=N[SD]=N[wD]=N[cD]=N[lD]=N[TD]=N[ED]=N[vD]=N[RD]=N[_D]=N[mD]=N[gD]=N[$h]=N[hD]=N[yD]=N[AD]=N[bD]=N[xD]=N[CD]=N[OD]=N[LD]=!0;N[dD]=N[Wh]=N[ID]=!1;function Wn(e,t,r,a,n,o){var s,i=t&sD,p=t&iD,f=t&uD;if(r&&(s=n?r(e,a,n,o):r(e)),s!==void 0)return s;if(!rD(e))return e;var m=Zq(e);if(m){if(s=zq(e),!i)return Wq(e,s)}else{var g=Hq(e),h=g==Wh||g==fD;if(eD(e))return jq(e,i);if(g==$h||g==jh||h&&!n){if(s=p||h?{}:Xq(e),!i)return p?Kq(e,Qq(s,e)):$q(e,Fq(s,e))}else{if(!N[g])return n?e:{};s=Jq(e,g,i)}}o||(o=new Mq);var I=o.get(e);if(I)return I;o.set(e,s),aD(e)?e.forEach(function(R){s.add(Wn(R,t,r,R,e,o))}):tD(e)&&e.forEach(function(R,v){s.set(v,Wn(R,t,r,v,e,o))});var C=f?p?Yq:Vq:p?oD:nD,_=m?void 0:C(e);return kq(_||e,function(R,v){_&&(v=R,R=e[v]),Gq(s,v,Wn(R,t,r,v,e,o))}),s}Kh.exports=Wn});var Yh=u(($W,Vh)=>{"use strict";var PD=Ci(),UD=4;function qD(e){return PD(e,UD)}Vh.exports=qD});var zh=u((KW,Hh)=>{"use strict";var DD=Qn(),ND=8;function Oi(e,t,r){t=r?void 0:t;var a=DD(e,ND,void 0,void 0,void 0,void 0,void 0,t);return a.placeholder=Oi.placeholder,a}Oi.placeholder={};Hh.exports=Oi});var Xh=u((VW,Jh)=>{"use strict";var BD=mt(),MD=be(),kD=Jo(),GD="[object DOMException]",FD="[object Error]";function QD(e){if(!MD(e))return!1;var t=BD(e);return t==FD||t==GD||typeof e.message=="string"&&typeof e.name=="string"&&!kD(e)}Jh.exports=QD});var ey=u((YW,Zh)=>{"use strict";var jD=hr(),WD=be(),$D="[object WeakMap]";function KD(e){return WD(e)&&jD(e)==$D}Zh.exports=KD});var ry=u((HW,ty)=>{"use strict";function VD(e,t){for(var r=-1,a=e==null?0:e.length;++r<a;)if(t(e[r],r,e))return!0;return!1}ty.exports=VD});var Li=u((zW,ay)=>{"use strict";var YD=Bo(),HD=ry(),zD=ko(),JD=1,XD=2;function ZD(e,t,r,a,n,o){var s=r&JD,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,h=!0,I=r&XD?new YD:void 0;for(o.set(e,t),o.set(t,e);++g<i;){var C=e[g],_=t[g];if(a)var R=s?a(_,C,g,t,e,o):a(C,_,g,e,t,o);if(R!==void 0){if(R)continue;h=!1;break}if(I){if(!HD(t,function(v,U){if(!zD(I,U)&&(C===v||n(C,v,r,a,o)))return I.push(U)})){h=!1;break}}else if(!(C===_||n(C,_,r,a,o))){h=!1;break}}return o.delete(e),o.delete(t),h}ay.exports=ZD});var oy=u((JW,ny)=>{"use strict";function eN(e){var t=-1,r=Array(e.size);return e.forEach(function(a,n){r[++t]=[n,a]}),r}ny.exports=eN});var cy=u((XW,py)=>{"use strict";var sy=xt(),iy=Vo(),tN=Ht(),rN=Li(),aN=oy(),nN=on(),oN=1,sN=2,iN="[object Boolean]",uN="[object Date]",pN="[object Error]",cN="[object Map]",lN="[object Number]",dN="[object RegExp]",fN="[object Set]",mN="[object String]",gN="[object Symbol]",hN="[object ArrayBuffer]",yN="[object DataView]",uy=sy?sy.prototype:void 0,Pi=uy?uy.valueOf:void 0;function AN(e,t,r,a,n,o,s){switch(r){case yN:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case hN:return!(e.byteLength!=t.byteLength||!o(new iy(e),new iy(t)));case iN:case uN:case lN:return tN(+e,+t);case pN:return e.name==t.name&&e.message==t.message;case dN:case mN:return e==t+"";case cN:var i=aN;case fN:var p=a&oN;if(i||(i=nN),e.size!=t.size&&!p)return!1;var f=s.get(e);if(f)return f==t;a|=sN,s.set(e,t);var m=rN(i(e),i(t),a,n,o,s);return s.delete(e),m;case gN:if(Pi)return Pi.call(e)==Pi.call(t)}return!1}py.exports=AN});var fy=u((ZW,dy)=>{"use strict";var ly=Ti(),bN=1,IN=Object.prototype,SN=IN.hasOwnProperty;function wN(e,t,r,a,n,o){var s=r&bN,i=ly(e),p=i.length,f=ly(t),m=f.length;if(p!=m&&!s)return!1;for(var g=p;g--;){var h=i[g];if(!(s?h in t:SN.call(t,h)))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 R=s;++g<p;){h=i[g];var v=e[h],U=t[h];if(a)var qe=s?a(U,v,h,t,e,o):a(v,U,h,e,t,o);if(!(qe===void 0?v===U||n(v,U,r,a,o):qe)){_=!1;break}R||(R=h=="constructor")}if(_&&!R){var Te=e.constructor,pt=t.constructor;Te!=pt&&"constructor"in e&&"constructor"in t&&!(typeof Te=="function"&&Te instanceof Te&&typeof pt=="function"&&pt instanceof pt)&&(_=!1)}return o.delete(e),o.delete(t),_}dy.exports=wN});var Sy=u((e$,Iy)=>{"use strict";var Ui=na(),TN=Li(),EN=cy(),vN=fy(),my=hr(),gy=ne(),hy=pa(),RN=fn(),_N=1,yy="[object Arguments]",Ay="[object Array]",$n="[object Object]",xN=Object.prototype,by=xN.hasOwnProperty;function CN(e,t,r,a,n,o){var s=gy(e),i=gy(t),p=s?Ay:my(e),f=i?Ay:my(t);p=p==yy?$n:p,f=f==yy?$n:f;var m=p==$n,g=f==$n,h=p==f;if(h&&hy(e)){if(!hy(t))return!1;s=!0,m=!1}if(h&&!m)return o||(o=new Ui),s||RN(e)?TN(e,t,r,a,n,o):EN(e,t,p,r,a,n,o);if(!(r&_N)){var I=m&&by.call(e,"__wrapped__"),C=g&&by.call(t,"__wrapped__");if(I||C){var _=I?e.value():e,R=C?t.value():t;return o||(o=new Ui),n(_,R,r,a,o)}}return h?(o||(o=new Ui),vN(e,t,r,a,n,o)):!1}Iy.exports=CN});var qi=u((t$,Ey)=>{"use strict";var ON=Sy(),wy=be();function Ty(e,t,r,a,n){return e===t?!0:e==null||t==null||!wy(e)&&!wy(t)?e!==e&&t!==t:ON(e,t,r,a,Ty,n)}Ey.exports=Ty});var Ry=u((r$,vy)=>{"use strict";var LN=na(),PN=qi(),UN=1,qN=2;function DN(e,t,r,a){var n=r.length,o=n,s=!a;if(e==null)return!o;for(e=Object(e);n--;){var i=r[n];if(s&&i[2]?i[1]!==e[i[0]]:!(i[0]in e))return!1}for(;++n<o;){i=r[n];var p=i[0],f=e[p],m=i[1];if(s&&i[2]){if(f===void 0&&!(p in e))return!1}else{var g=new LN;if(a)var h=a(f,m,p,e,t,g);if(!(h===void 0?PN(m,f,UN|qN,a,g):h))return!1}}return!0}vy.exports=DN});var Di=u((a$,_y)=>{"use strict";var NN=_e();function BN(e){return e===e&&!NN(e)}_y.exports=BN});var Cy=u((n$,xy)=>{"use strict";var MN=Di(),kN=mr();function GN(e){for(var t=kN(e),r=t.length;r--;){var a=t[r],n=e[a];t[r]=[a,n,MN(n)]}return t}xy.exports=GN});var Ni=u((o$,Oy)=>{"use strict";function FN(e,t){return function(r){return r==null?!1:r[e]===t&&(t!==void 0||e in Object(r))}}Oy.exports=FN});var Py=u((s$,Ly)=>{"use strict";var QN=Ry(),jN=Cy(),WN=Ni();function $N(e){var t=jN(e);return t.length==1&&t[0][2]?WN(t[0][0],t[0][1]):function(r){return r===e||QN(r,e,t)}}Ly.exports=$N});var Kn=u((i$,Uy)=>{"use strict";var KN=ne(),VN=fr(),YN=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,HN=/^\w*$/;function zN(e,t){if(KN(e))return!1;var r=typeof e;return r=="number"||r=="symbol"||r=="boolean"||e==null||VN(e)?!0:HN.test(e)||!YN.test(e)||t!=null&&e in Object(t)}Uy.exports=zN});var Ny=u((u$,Dy)=>{"use strict";var qy=an(),JN="Expected a function";function Bi(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(JN);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(Bi.Cache||qy),r}Bi.Cache=qy;Dy.exports=Bi});var My=u((p$,By)=>{"use strict";var XN=Ny(),ZN=500;function eB(e){var t=XN(e,function(a){return r.size===ZN&&r.clear(),a}),r=t.cache;return t}By.exports=eB});var Mi=u((c$,ky)=>{"use strict";var tB=My(),rB=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,aB=/\\(\\)?/g,nB=tB(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(rB,function(r,a,n,o){t.push(n?o.replace(aB,"$1"):a||r)}),t});ky.exports=nB});var ki=u((l$,Gy)=>{"use strict";function oB(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}Gy.exports=oB});var Ky=u((d$,$y)=>{"use strict";var Fy=xt(),sB=ki(),iB=ne(),uB=fr(),pB=1/0,Qy=Fy?Fy.prototype:void 0,jy=Qy?Qy.toString:void 0;function Wy(e){if(typeof e=="string")return e;if(iB(e))return sB(e,Wy)+"";if(uB(e))return jy?jy.call(e):"";var t=e+"";return t=="0"&&1/e==-pB?"-0":t}$y.exports=Wy});var Gi=u((f$,Vy)=>{"use strict";var cB=Ky();function lB(e){return e==null?"":cB(e)}Vy.exports=lB});var Fi=u((m$,Yy)=>{"use strict";var dB=ne(),fB=Kn(),mB=Mi(),gB=Gi();function hB(e,t){return dB(e)?e:fB(e,t)?[e]:mB(gB(e))}Yy.exports=hB});var yr=u((g$,Hy)=>{"use strict";var yB=fr(),AB=1/0;function bB(e){if(typeof e=="string"||yB(e))return e;var t=e+"";return t=="0"&&1/e==-AB?"-0":t}Hy.exports=bB});var Qi=u((h$,zy)=>{"use strict";var IB=Fi(),SB=yr();function wB(e,t){t=IB(t,e);for(var r=0,a=t.length;e!=null&&r<a;)e=e[SB(t[r++])];return r&&r==a?e:void 0}zy.exports=wB});var Xy=u((y$,Jy)=>{"use strict";var TB=Qi();function EB(e,t,r){var a=e==null?void 0:TB(e,t);return a===void 0?r:a}Jy.exports=EB});var eA=u((A$,Zy)=>{"use strict";function vB(e,t){return e!=null&&t in Object(e)}Zy.exports=vB});var rA=u((b$,tA)=>{"use strict";var RB=Fi(),_B=Jr(),xB=ne(),CB=da(),OB=sn(),LB=yr();function PB(e,t,r){t=RB(t,e);for(var a=-1,n=t.length,o=!1;++a<n;){var s=LB(t[a]);if(!(o=e!=null&&r(e,s)))break;e=e[s]}return o||++a!=n?o:(n=e==null?0:e.length,!!n&&OB(n)&&CB(s,n)&&(xB(e)||_B(e)))}tA.exports=PB});var nA=u((I$,aA)=>{"use strict";var UB=eA(),qB=rA();function DB(e,t){return e!=null&&qB(e,t,UB)}aA.exports=DB});var sA=u((S$,oA)=>{"use strict";var NB=qi(),BB=Xy(),MB=nA(),kB=Kn(),GB=Di(),FB=Ni(),QB=yr(),jB=1,WB=2;function $B(e,t){return kB(e)&&GB(t)?FB(QB(e),t):function(r){var a=BB(r,e);return a===void 0&&a===t?MB(r,e):NB(t,a,jB|WB)}}oA.exports=$B});var uA=u((w$,iA)=>{"use strict";function KB(e){return function(t){return t?.[e]}}iA.exports=KB});var cA=u((T$,pA)=>{"use strict";var VB=Qi();function YB(e){return function(t){return VB(t,e)}}pA.exports=YB});var dA=u((E$,lA)=>{"use strict";var HB=uA(),zB=cA(),JB=Kn(),XB=yr();function ZB(e){return JB(e)?HB(XB(e)):zB(e)}lA.exports=ZB});var ji=u((v$,fA)=>{"use strict";var eM=Py(),tM=sA(),rM=Xr(),aM=ne(),nM=dA();function oM(e){return typeof e=="function"?e:e==null?rM:typeof e=="object"?aM(e)?tM(e[0],e[1]):eM(e):nM(e)}fA.exports=oM});var gA=u((R$,mA)=>{"use strict";var sM=Ci(),iM=ji(),uM=1;function pM(e){return iM(typeof e=="function"?e:sM(e,uM))}mA.exports=pM});var yA=u((_$,hA)=>{"use strict";var cM=Oo();function lM(e){var t=e==null?0:e.length;return t?cM(e,1):[]}hA.exports=lM});var bA=u((x$,AA)=>{"use strict";var dM=yA(),fM=Lo(),mM=tn();function gM(e){return mM(fM(e,void 0,dM),e+"")}AA.exports=gM});var SA=u((C$,IA)=>{"use strict";var hM=Qn(),yM=bA(),AM=256,bM=yM(function(e,t){return hM(e,AM,void 0,void 0,void 0,t)});IA.exports=bM});var TA=u((O$,wA)=>{"use strict";var IM=ki(),SM=tr(),wM=ne(),TM=fr(),EM=Mi(),vM=yr(),RM=Gi();function _M(e){return wM(e)?IM(e,vM):TM(e)?[e]:SM(EM(RM(e)))}wA.exports=_M});var vA=u((L$,EA)=>{"use strict";EA.exports={ary:kg(),assign:bi(),clone:Yh(),curry:zh(),forEach:Gn(),isArray:ne(),isError:Xh(),isFunction:Zr(),isWeakMap:ey(),iteratee:gA(),keys:Ai(),rearg:SA(),toInteger:mi(),toPath:TA()}});var _A=u((P$,RA)=>{"use strict";var xM=mm(),CM=vA();function OM(e,t,r){return xM(CM,e,t,r)}RA.exports=OM});var Wi=u((U$,CA)=>{"use strict";var LM=_A(),xA=LM("merge",rs());xA.placeholder=Js();CA.exports=xA});var Pb=u((RK,Lb)=>{"use strict";function JM(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}Lb.exports=JM});var qb=u((_K,Ub)=>{"use strict";var XM=$o(),ZM=mr();function ek(e,t){return e&&XM(e,t,ZM)}Ub.exports=ek});var Nb=u((xK,Db)=>{"use strict";var tk=Xt();function rk(e,t){return function(r,a){if(r==null)return r;if(!tk(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}}Db.exports=rk});var Mb=u((CK,Bb)=>{"use strict";var ak=qb(),nk=Nb(),ok=nk(ak);Bb.exports=ok});var Gb=u((OK,kb)=>{"use strict";var sk=Mb();function ik(e,t,r,a){return sk(e,function(n,o,s){t(a,n,r(n),s)}),a}kb.exports=ik});var Qb=u((LK,Fb)=>{"use strict";var uk=Pb(),pk=Gb(),ck=ji(),lk=ne();function dk(e,t){return function(r,a){var n=lk(r)?uk:pk,o=t?t():{};return n(r,e,ck(a,2),o)}}Fb.exports=dk});var Wb=u((PK,jb)=>{"use strict";var fk=oa(),mk=Qb(),gk=Object.prototype,hk=gk.hasOwnProperty,yk=mk(function(e,t,r){hk.call(e,r)?e[r].push(t):fk(e,r,[t])});jb.exports=yk});var Fk={};w(Fk,{Method:()=>io,ai:()=>Pu,api:()=>su,auditLogs:()=>bt,automations:()=>Cn,backups:()=>Oe,branding:()=>bn,constants:()=>$r,environmentVariables:()=>Je,features:()=>Me,groups:()=>j,init:()=>um,licensing:()=>Ve,logger:()=>Bt,mappers:()=>Y,middleware:()=>Ji,plugins:()=>On,publicApi:()=>Un,quotas:()=>ze,scimGroups:()=>Ar,scimUsers:()=>he,sdk:()=>Ki,users:()=>nt,utils:()=>Vt});module.exports=NI(Fk);var io=(o=>(o.POST="POST",o.GET="GET",o.PATCH="PATCH",o.DELETE="DELETE",o.PUT="PUT",o))(io||{});var Ki={};w(Ki,{ai:()=>bs,auditLogs:()=>bt,automations:()=>Cn,backups:()=>Oe,branding:()=>bn,environmentVariables:()=>Je,features:()=>Me,groups:()=>j,init:()=>um,licensing:()=>Ve,logger:()=>Bt,plugins:()=>On,publicApi:()=>Un,quotas:()=>ze,scimGroups:()=>Ar,scimUsers:()=>he,users:()=>nt,utils:()=>Vt});var bn={};w(bn,{getBrandingConfig:()=>_x});var Me={};w(Me,{checkBackups:()=>fe,checkFeature:()=>yn,checkFeatures:()=>fs,checkSCIM:()=>ys,isAppBuildersEnabled:()=>Pt,isAuditLogsEnabled:()=>An,isBackupsEnabled:()=>ms,isBrandingEnabled:()=>gs,isEnforceableSSO:()=>wf,isExpandedPublicApiEnabled:()=>rt,isPWAEnabled:()=>Sx,isRecaptchaEnabled:()=>wx,isSSOEnforced:()=>Tx,isSyncAutomationsEnabled:()=>bx,isTriggerAutomationRunEnabled:()=>Ix,isUserGroupsEnabled:()=>hs,isViewPermissionEnabled:()=>Ex,isViewReadonlyColumnsEnabled:()=>vx});var oe=require("@budibase/types"),tt=require("@budibase/backend-core");var Ve={};w(Ve,{cache:()=>Ne,client:()=>ft,features:()=>Ja,getFreeLicense:()=>cs,getLicense:()=>us,getLicenseFromKey:()=>ps,keys:()=>ds,offline:()=>mn,quotas:()=>Xa});var Ne={};w(Ne,{getCachedLicense:()=>If,invalidate:()=>Sf,refresh:()=>Ct});var Ba=require("@budibase/backend-core"),Tr,BI=async()=>{Tr=await Ba.RedisClient.init(Ba.redis.utils.Databases.LICENSES)},MI=async()=>{Tr&&await Tr.finish()};process.on("exit",async()=>{await MI()});var uo=async()=>(Tr||await BI(),Tr);var ft={};w(ft,{activateLicenseKey:()=>vo,getLicense:()=>$t,getLicenseFromKey:()=>Eo,triggerQuota:()=>TS});var Fu=P(require("node-fetch"));var Qu=require("@budibase/backend-core"),po=require("dd-trace"),ju=require("dd-trace/ext/formats"),co=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";Qu.logging.correlation.setHeader(o),po.tracer.inject(n,ju.HTTP_HEADERS,o);let i={method:t,body:s?JSON.stringify(a.body):a.body,headers:o,credentials:"include"};return(0,Fu.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}},lo=co;var Ya=require("@budibase/types"),L=require("@budibase/backend-core");var We={};w(We,{bustCache:()=>go,getCurrentUsageValues:()=>Ju,getQuotaUsage:()=>Et,setAllUsage:()=>yo,setAppUsageValue:()=>ho,setUsage:()=>Yu,setUsagePerApp:()=>Hu,utils:()=>_r});var ue=require("@budibase/types"),de=require("@budibase/backend-core");var _r={};w(_r,{generateBaseQuotaUsage:()=>ka,generateNewMonthlyQuotas:()=>Rr,generateNewQuotaUsage:()=>mo,getBreakdownName:()=>Fa,getCurrentMonthString:()=>ct,getQuotaDocId:()=>vr,setCurrentMonth:()=>Ga,setQuotaReset:()=>fo});var H=require("@budibase/types"),Er=require("@budibase/backend-core"),Ma=require("@budibase/shared-core"),vr=()=>Er.context.isSelfHostUsingCloud()?`quota_usage_${Er.context.getTenantId()}`:Er.db.StaticDatabases.GLOBAL.docs.usageQuota,Wu=()=>{let e=new Date;return new Date(e.getFullYear(),e.getMonth()+1,1).toISOString()},fo=e=>{e.quotaReset=Wu()},ct=()=>{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:{[ct()]:Rr()}}),mo=()=>{let e={_id:vr(),quotaReset:Wu(),...ka(),apps:{}};return Ga(e),e},Rr=()=>({[H.MonthlyQuotaName.QUERIES]:0,[H.MonthlyQuotaName.AUTOMATIONS]:0,[H.MonthlyQuotaName.BUDIBASE_AI_CREDITS]:0,[H.MonthlyQuotaName.ACTIONS]:0,triggers:{}}),Ga=e=>{let t=ct();e.monthly||(e.monthly={}),e.monthly[t]||(e.monthly[t]=Rr()),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 $u=de.Duration.fromSeconds(60).toMs(),{Writethrough:Ku}=de.cache.writethrough;function GI(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 Qa=()=>de.tenancy.isSelfHostUsingCloud()?new Ku(de.tenancy.getSelfHostCloudDB(),$u):new Ku(de.tenancy.getGlobalDB(),$u);async function go(e=0){let r=Qa(),a=vr(),n=await r.tryGet(a);n&&n._rev&&await r.remove(a,n._rev).catch(async o=>{if(e<1)return await go(e+1);throw o})}var Et=async()=>{let e=Qa(),t=await e.tryGet(vr());if(!t){t=mo();let{rev:r}=await e.put(t);t._rev=r}return Ga(t),fo(t),GI(t)},Yu=async(e,t,r)=>yo({name:t,type:r,values:{total:e}}),Hu=async(e,t,r)=>{let a=Qa(),n=await Et(),o=Object.values(e).reduce((i,p)=>i+p,0);for(let[i,p]of Object.entries(e))n=zu(n,t,r,{total:o,app:p},{appId:i});let s=await a.put(n);return n._rev=s.rev,n},FI=(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=de.db.getProdAppID(a?.appId||de.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=ct(),p=t,f=s.monthly[i];f||(s.monthly[i]=Rr(),f=s.monthly[i]),f[p]=n.app,ue.BREAKDOWN_QUOTA_NAMES.includes(p)&&a?.id&&(f=FI(f,p,a.id,n));break}}return e},Vu=(e,t,r,a)=>{if(!ue.APP_QUOTA_NAMES.includes(r))return{};let n;try{n=de.db.getProdAppID(de.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=ct(),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}},QI=(e,t,r)=>{t.usageQuota.triggers||(t.usageQuota.triggers={}),r&&(t.usageQuota.triggers[e]=r)},jI=(e,t,r,a)=>{r.monthly[t].triggers||(r.monthly[t].triggers={}),a&&(r.monthly[t].triggers[e]=a)},zu=(e,t,r,a,n={})=>{if(r===ue.QuotaUsageType.STATIC)t=t,e.usageQuota[t]=a.total,QI(t,e,a.triggers);else if(r===ue.QuotaUsageType.MONTHLY){t=t;let o=ct();e.monthly[o][t]=a.total,jI(t,o,e,a.triggers)}else throw new Error(`Invalid usage type: ${r}`);return ho(e,t,r,n,a)},yo=async e=>{let t=Array.isArray(e)?e:[e],r=Qa(),a=await Et();for(let o of t)a=zu(a,o.name,o.type,o.values,o.opts);let n=await r.put(a,0);return a._rev=n.rev,a},Ju=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=Vu(a,e,t,r)}break;case ue.QuotaUsageType.MONTHLY:{let s=ct(),i=t;a.monthly[s][i]&&(n=a.monthly[s][i],o=Vu(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:()=>KI,get:()=>Ao,save:()=>$I});var lt=require("@budibase/backend-core"),WI=()=>({_id:lt.StaticDatabases.GLOBAL.docs.licenseInfo}),$I=async e=>{let t=await Ao();t={...t,...e};let a=await lt.tenancy.getGlobalDB().put(t);return t._rev=a.rev,t},Ao=async()=>{let e=lt.tenancy.getGlobalDB();try{return await e.get(lt.StaticDatabases.GLOBAL.docs.licenseInfo)}catch(t){if(t.status===404)return WI();throw t}},KI=async()=>{let e=lt.tenancy.getGlobalDB(),t=await Ao();t&&t._rev&&await e.remove(lt.StaticDatabases.GLOBAL.docs.licenseInfo,t._rev)};var M={};w(M,{bulkSave:()=>nS,destroy:()=>oS,fetch:()=>eS,generateUserGroupID:()=>XI,get:()=>tS,getBulk:()=>rS,getByName:()=>bo,getGroupUsers:()=>Wa,getGroupUsersParams:()=>rp,getUserGroupsParams:()=>tp,save:()=>aS});var q=require("@budibase/backend-core");var De=require("@budibase/types"),Qt=require("@budibase/backend-core");async function Xu(){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 ja=require("@budibase/backend-core"),{ViewName:VI,SEPARATOR:YI,DocumentType:HI,createView:zI}=ja.db,JI=HI.USER+YI;async function Zu(){let e=ja.tenancy.getGlobalDB(),t=`function(doc) {
4
4
  if (doc._id.startsWith("${JI}") && Array.isArray(doc.userGroups)) {
5
5
  for (let groupId of doc.userGroups) {
6
6
  emit("g_" + groupId, { email: doc.email, userId: doc._id })
@@ -34,19 +34,19 @@ l2HXiAD1Q2rlHNW9wDaYyKb1F5f+v4RyqCAyzlkwRdksmkLeECTboojNnmRCrE3C
34
34
  d/o3ZWE1TTj1zYwlCLN5qRKr3hU8nC3xEYNEbkB9SfTRaOq9Q7P8WmfLkoCPm3pR
35
35
  mwIDAQAB
36
36
  -----END PUBLIC KEY-----
37
- `;function Vr(e){return Ro.default.verify(e,ES,{algorithms:["RS256"]})}function vS(e,t){return Ro.default.sign(t,e,{encoding:"utf-8",algorithm:"RS256"})}var Ja={};w(Ja,{getFeatures:()=>_o});var l=require("@budibase/types");var RS={[l.PlanType.FREE]:[...Ae.SELF_FREE_LICENSE.features],[l.PlanType.PREMIUM]:void 0,[l.PlanType.PREMIUM_PLUS]:[l.Feature.APP_BACKUPS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.PDF,l.Feature.BUDIBASE_AI],[l.PlanType.PREMIUM_PLUS_TRIAL]:[l.Feature.APP_BACKUPS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.PDF,l.Feature.BUDIBASE_AI],[l.PlanType.PRO]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS],[l.PlanType.TEAM]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS],[l.PlanType.BUSINESS]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.AUDIT_LOGS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.PDF,l.Feature.BUDIBASE_AI],[l.PlanType.ENTERPRISE_BASIC]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.ENFORCEABLE_SSO,l.Feature.AUDIT_LOGS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.OFFLINE,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.SCIM,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.PWA,l.Feature.CUSTOM_APP_SCRIPTS,l.Feature.PDF,l.Feature.BUDIBASE_AI],[l.PlanType.ENTERPRISE_BASIC_TRIAL]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.ENFORCEABLE_SSO,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.SCIM,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.PWA,l.Feature.CUSTOM_APP_SCRIPTS,l.Feature.PDF,l.Feature.BUDIBASE_AI],[l.PlanType.ENTERPRISE]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.ENFORCEABLE_SSO,l.Feature.AUDIT_LOGS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.OFFLINE,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.SCIM,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.PWA,l.Feature.CUSTOM_APP_SCRIPTS,l.Feature.PDF,l.Feature.BUDIBASE_AI]},_S={[l.PlanType.FREE]:[...Ae.CLOUD_FREE_LICENSE.features],[l.PlanType.PREMIUM]:[l.Feature.APP_BACKUPS,l.Feature.BRANDING,l.Feature.APP_BUILDERS,l.Feature.VIEW_PERMISSIONS,l.Feature.PDF],[l.PlanType.PREMIUM_PLUS]:[l.Feature.APP_BACKUPS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.BUDIBASE_AI,l.Feature.PDF],[l.PlanType.PREMIUM_PLUS_TRIAL]:[l.Feature.APP_BACKUPS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.BUDIBASE_AI,l.Feature.PDF],[l.PlanType.PRO]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS,l.Feature.BRANDING],[l.PlanType.TEAM]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS,l.Feature.BRANDING],[l.PlanType.BUSINESS]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.AUDIT_LOGS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.BUDIBASE_AI,l.Feature.PDF],[l.PlanType.ENTERPRISE_BASIC]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.ENFORCEABLE_SSO,l.Feature.AUDIT_LOGS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.OFFLINE,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.SCIM,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.BUDIBASE_AI,l.Feature.PWA,l.Feature.CUSTOM_APP_SCRIPTS,l.Feature.PDF],[l.PlanType.ENTERPRISE_BASIC_TRIAL]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.ENFORCEABLE_SSO,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.SCIM,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.BUDIBASE_AI,l.Feature.PWA,l.Feature.CUSTOM_APP_SCRIPTS,l.Feature.PDF],[l.PlanType.ENTERPRISE]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.ENFORCEABLE_SSO,l.Feature.AUDIT_LOGS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.SCIM,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.BUDIBASE_AI,l.Feature.PWA,l.Feature.CUSTOM_APP_SCRIPTS,l.Feature.PDF]};function _o(e,t){let r=[];function a(n){let o=n[t];if(!o)throw new Error(`Features do not exist for planType=${t} and hosting=${e}`);return o}switch(e){case l.Hosting.SELF:r=a(RS);break;case l.Hosting.CLOUD:r=a(_S);break}return r}var Xa={};w(Xa,{UNLIMITED:()=>d,getQuotas:()=>xo});var k=require("@budibase/types");var c=et,Tp=Ae,d=-1,Hr=e=>e*1e6,xS={[k.PlanType.FREE]:{...Tp.CLOUD_FREE_LICENSE.quotas},[k.PlanType.PREMIUM]:{usage:{monthly:{...c.queries(d),...c.automations(1e3),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(1e4),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(0),...c.plugins(d),...c.customAIConfigurations(0)}},constant:{...c.automationLogRetentionDays(7),...c.appBackupRetentionDays(7)}},[k.PlanType.PREMIUM_PLUS]:{usage:{monthly:{...c.queries(d),...c.automations(5e3),...c.budibaseAICredits(Hr(2)),...c.actions(d)},static:{...c.rows(25e3),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(0),...c.plugins(d),...c.customAIConfigurations(1)}},constant:{...c.automationLogRetentionDays(30),...c.appBackupRetentionDays(30)}},[k.PlanType.PREMIUM_PLUS_TRIAL]:{usage:{monthly:{...c.queries(d),...c.automations(5e3),...c.budibaseAICredits(Hr(2)),...c.actions(d)},static:{...c.rows(25e3),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(0),...c.plugins(d),...c.customAIConfigurations(1)}},constant:{...c.automationLogRetentionDays(30),...c.appBackupRetentionDays(30)}},[k.PlanType.PRO]:{usage:{monthly:{...c.queries(d),...c.automations(1e3),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(5),...c.plugins(d),...c.customAIConfigurations(0)}},constant:{...c.automationLogRetentionDays(7),...c.appBackupRetentionDays(7)}},[k.PlanType.TEAM]:{usage:{monthly:{...c.queries(d),...c.automations(5e3),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(10),...c.plugins(d),...c.customAIConfigurations(0)}},constant:{...c.automationLogRetentionDays(30),...c.appBackupRetentionDays(90)}},[k.PlanType.BUSINESS]:{usage:{monthly:{...c.queries(d),...c.automations(1e4),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(5e4),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(50),...c.plugins(d),...c.customAIConfigurations(0)}},constant:{...c.automationLogRetentionDays(365),...c.appBackupRetentionDays(365)}},[k.PlanType.ENTERPRISE_BASIC]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(Hr(4)),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(d),...c.plugins(d),...c.customAIConfigurations(d)}},constant:{...c.automationLogRetentionDays(d),...c.appBackupRetentionDays(d)}},[k.PlanType.ENTERPRISE_BASIC_TRIAL]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(Hr(4)),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(d),...c.plugins(d),...c.customAIConfigurations(d)}},constant:{...c.automationLogRetentionDays(15),...c.appBackupRetentionDays(15)}},[k.PlanType.ENTERPRISE]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(Hr(4)),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(d),...c.plugins(d),...c.customAIConfigurations(d)}},constant:{...c.automationLogRetentionDays(d),...c.appBackupRetentionDays(d)}}},CS={[k.PlanType.FREE]:{...Tp.SELF_FREE_LICENSE.quotas},[k.PlanType.PREMIUM]:void 0,[k.PlanType.PREMIUM_PLUS]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(0),...c.plugins(d),...c.customAIConfigurations(1)}},constant:{...c.automationLogRetentionDays(30),...c.appBackupRetentionDays(30)}},[k.PlanType.PREMIUM_PLUS_TRIAL]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(0),...c.plugins(d),...c.customAIConfigurations(1)}},constant:{...c.automationLogRetentionDays(30),...c.appBackupRetentionDays(30)}},[k.PlanType.PRO]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(5),...c.plugins(d),...c.customAIConfigurations(0)}},constant:{...c.automationLogRetentionDays(7),...c.appBackupRetentionDays(7)}},[k.PlanType.TEAM]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(10),...c.plugins(d),...c.customAIConfigurations(0)}},constant:{...c.automationLogRetentionDays(30),...c.appBackupRetentionDays(90)}},[k.PlanType.BUSINESS]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(50),...c.plugins(d),...c.customAIConfigurations(0)}},constant:{...c.automationLogRetentionDays(90),...c.appBackupRetentionDays(365)}},[k.PlanType.ENTERPRISE_BASIC]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(d),...c.plugins(d),...c.customAIConfigurations(d)}},constant:{...c.automationLogRetentionDays(d),...c.appBackupRetentionDays(d)}},[k.PlanType.ENTERPRISE_BASIC_TRIAL]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(d),...c.plugins(d),...c.customAIConfigurations(d)}},constant:{...c.automationLogRetentionDays(15),...c.appBackupRetentionDays(15)}},[k.PlanType.ENTERPRISE]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(d),...c.plugins(d),...c.customAIConfigurations(d)}},constant:{...c.automationLogRetentionDays(d),...c.appBackupRetentionDays(d)}}};function xo(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(CS);break;case k.Hosting.CLOUD:r=a(xS);break}return JSON.parse(JSON.stringify(r))}var Vt={};w(Vt,{appExists:()=>OS,encoding:()=>Kt});var Ep=require("@budibase/backend-core");async function OS(e){return(await Ep.db.getAllApps({all:!0,idsOnly:!0})).includes(e)}var Kt={};w(Kt,{base64ToObject:()=>PS,objectToBase64:()=>LS});function LS(e){let t=JSON.stringify(e);return Buffer.from(t).toString("base64")}function PS(e){let t=Buffer.from(e,"base64").toString();return JSON.parse(t)}var uf=require("@budibase/types"),sr=require("@budibase/backend-core"),pf=P(Gl()),cf=P(rs());async function ix(e){await ve.save({offlineLicenseToken:e}),await Ct()}async function ux(){await ve.save({offlineLicenseToken:void 0}),await Ct()}async function lf(){return(await ve.get()).offlineLicenseToken}async function as(){let t=(await sr.installation.getInstall()).installId,r=sr.context.getTenantId(),a=await sr.events.identification.getUniqueTenantId(r);return{installId:t,tenantId:a}}async function px(){let e=await as();return Kt.objectToBase64(e)}function cx(e){return Kt.base64ToObject(e)}function df(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 ff(e){let t=await as();if(e.identifier.installId!==t.installId||e.identifier.tenantId!==t.tenantId)throw new Error("Invalid offline license")}function mf(e){let t=e.plan.type,r=uf.Hosting.SELF,a=_o(r,t),n=xo(r,t);return e.features=(0,pf.default)(e.features,a),e.quotas=(0,cf.default)(e.quotas,n),e}async function ns(){try{let e=await lf();if(e){let t=await Vr(e);return df(t),await ff(t),mf(t)}}catch(e){console.error("Error retrieving offline license",e)}}var ma={};w(ma,{deleteDevLicense:()=>gx,getOfflineLicense:()=>fx,writeDevLicenseToDisk:()=>mx});var gf=require("@budibase/backend-core"),ss=require("path"),hf=require("os"),Ot=P(require("fs"));var lx=gf.env.isTest()?".budibase-test":".budibase",os=(0,ss.join)((0,hf.tmpdir)(),lx),dx="dev_license.txt",fa=(0,ss.join)(os,dx);if(!Ot.default.existsSync(os))try{Ot.default.mkdirSync(os)}catch{}function fx(){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 mx(e){console.log(`Writing license to: ${fa}`),Ot.default.writeFileSync(fa,e,{encoding:"utf-8"})}function gx(){Ot.default.rmSync(fa,{force:!0})}var yf=require("dd-trace"),us=async()=>await yf.tracer.trace("getLicense",async e=>{if(is.env.OFFLINE_MODE)return e.addTags({offline:!0}),ns();let t=await $t();return t||(e.addTags({offlineFallback:!0}),t=ma.getOfflineLicense()),t}),ps=e=>Eo(e),cs=()=>is.env.SELF_HOSTED?Ae.SELF_FREE_LICENSE:Ae.CLOUD_FREE_LICENSE;var ds={};w(ds,{activateLicenseKey:()=>hx,deleteLicenseKey:()=>yx,getLicenseKey:()=>gn});var ls=P(require("dd-trace"));async function hx(e){await vo(e),await ve.save({licenseKey:e}),await Ct()}async function gn(){return await ls.default.trace("getLicenseKey",async e=>{let t=await ve.get();return e.addTags({licenseKey:t.licenseKey}),t.licenseKey})}async function yx(){return await ls.default.trace("deleteLicenseKey",async()=>{await ve.save({licenseKey:void 0}),await Ct()})}var Lt=require("@budibase/backend-core"),hn=P(require("dd-trace")),Af=3600,Ct=async()=>{await Sf(),await If()},bf=async(e,t)=>{let{populateLicense:r=us,populateFreeLicense:a=cs}=t||{};return await hn.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 uo(),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 hn.default.trace("populateLicense",async()=>await r(s)),n.addTags({populatedLicense:!!p}),p||(p=hn.default.trace("populateFreeLicense",()=>a(e,s)),n.addTags({populatedFreeLicense:!!p})),p.refreshedAt=new Date().toISOString(),n.addTags({refreshedAt:p.refreshedAt,features:p.features,plan:p.plan,quotas:p.quotas,expirySeconds:Af}),await i.store(s,p,Af),p)})};Lt.env.isJest()&&(bf=jest.fn());var If=bf,Sf=async()=>{let e=Lt.tenancy.getTenantId();await(await uo()).delete(e)};async function pe(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 yn(e,t){if(!await pe(e,t))throw new tt.FeatureDisabledError(`${e} is not currently enabled`,e)}async function fs(e,t){if(!await pe(e,t)){let r=e.join(", ");throw new tt.FeatureDisabledError(`${r} are not currently enabled`,r)}}function fe(e){return async(...t)=>(await yn(ue.Feature.APP_BACKUPS),e(...t))}async function ms(){return pe(ue.Feature.APP_BACKUPS)}async function gs(){return pe(ue.Feature.BRANDING)}async function wf(){return pe(ue.Feature.ENFORCEABLE_SSO)}async function bx(){return pe(ue.Feature.SYNC_AUTOMATIONS)}async function Ix(){return pe(ue.Feature.TRIGGER_AUTOMATION_RUN)}async function Pt(){return pe(ue.Feature.APP_BUILDERS)}async function An(){return pe(ue.Feature.AUDIT_LOGS)}async function hs(){return pe(ue.Feature.USER_GROUPS)}function Sx(){return pe(ue.Feature.PWA)}async function rt(){return pe(ue.Feature.EXPANDED_PUBLIC_API)}async function wx(e){if(tt.env.ENABLE_SSO_MAINTENANCE_MODE||!await wf())return!1;let r;return e?.config?r=e.config:r=await tt.configs.getSettingsConfig(),!!r.isSSOEnforced}var ys=async()=>{let e=ue.Feature.SCIM,t=await pe(e),r=await tt.configs.getSCIMConfig();if(!t||!r?.enabled)throw new tt.FeatureDisabledError(`${e} is not currently enabled`,e);return!0};async function Tx(){return pe(ue.Feature.VIEW_PERMISSIONS)}async function Ex(){return pe(ue.Feature.VIEW_READONLY_COLUMNS)}var vx={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 Rx(e){return await gs()?{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}:vx}var bs={};w(bs,{enrichAIConfig:()=>As});var Tf=require("@budibase/backend-core"),_x="budibase_ai";async function As(e){if(Tf.env.SELF_HOSTED)return e;for(let t of Object.values(e.config))if(t.provider==="BudibaseAI")return e;return e.config[_x]={provider:"BudibaseAI",active:!0,isDefault:Object.keys(e.config).every(t=>!e.config[t].isDefault),defaultModel:process.env.BUDIBASE_AI_DEFAULT_MODEL||"gpt-4o-mini",name:"Budibase AI"},e}var ze={};w(ze,{addAction:()=>Px,addApp:()=>Ux,addAutomation:()=>kx,addGroup:()=>Ss,addPlugin:()=>Ts,addRow:()=>Dx,addRows:()=>Bx,addUsers:()=>wn,bustCache:()=>go,decrement:()=>at,decrementMany:()=>ga,getCurrentUsageValues:()=>Ju,getLicensedQuota:()=>vf,getQuotaUsage:()=>Et,increment:()=>Ie,incrementBudibaseAICredits:()=>En,incrementMany:()=>qt,removeApp:()=>qx,removeGroup:()=>ws,removePlugin:()=>Es,removeRow:()=>Nx,removeRows:()=>Mx,removeUsers:()=>cr,set:()=>Is,setAllUsage:()=>yo,setAppUsageValue:()=>ho,setUsage:()=>Yu,setUsagePerApp:()=>Hu,updatePluginCount:()=>vs,updateUsage:()=>ir,usageLimitIsExceeded:()=>Lx,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 Ef({change:1,name:e,type:t,opts:r}))),qt=e=>Ut.tracer.trace("quotas.incrementMany",async()=>Ef(e)),Ef=async e=>await Ut.tracer.trace("quotas.tryIncrement",async t=>{let r=Array.isArray(e)?e:[e];t.addTags({numActions:r.length}),await ir(r.map(n=>({usageChange:n.change,name:n.name,type:n.type,opts:{dryRun:!0,suppressErrorLog:n.opts?.suppressErrorLog,id:n.opts?.id}})));let a=[];for(let n of r)await 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 ir(r.map(n=>({usageChange:n.change,name:n.name,type:n.type,opts:{dryRun:!1,valueFn:n.opts?.valueFn,suppressErrorLog:n.opts?.suppressErrorLog,id:n.opts?.id}}))),a[0]}),at=(e,t,r={})=>ir({usageChange:-1,name:e,type:t,opts:r}),ga=e=>{let t=Array.isArray(e)?e:[e];return ir(t.map(r=>({usageChange:-r.change,name:r.name,type:r.type,opts:r.opts})))},Is=async(e,t,r)=>We.setUsage(r,e,t),xx=(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]||{}:{}}},Cx=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 ft.triggerQuota(n)})}catch(n){ke.logging.logAlert("Error triggering quota",n)}},Ox=async(e,t,r,a)=>{let n=await Et(),o=e===z.QuotaUsageType.MONTHLY?n.quotaReset:void 0,s=await xx(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 h=i[f+1]||100;(!(p>=h)||p===m)&&await Cx(t,a,p,o)}}else s[m]=void 0;return s},ir=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 h of a)await Ut.tracer.trace("quotas.updateUsage.action",async I=>{I.addTags({actionName:h.name,actionType:h.type,actionUsageChange:h.usageChange});try{n=ke.context.getAppId()}catch{}if(z.APP_QUOTA_NAMES.includes(h.name)&&!n)throw new Error("App context required for quota update");try{o=await vf(z.QuotaType.USAGE,h.name,h.type),s.push(o);let{total:_,app:R,breakdown:v}=await We.getCurrentUsageValues(h.type,h.name,h.opts?.id);_+=h.usageChange,R!=null&&(R+=h.usageChange),v!=null&&(v+=h.usageChange);let U={};if(h.opts?.dryRun||(U=await Ox(h.type,h.name,_,o),m={...m,[h.name]:U}),o.value!==et.UNLIMITED&&_>o.value&&h.usageChange>0)throw new ke.UsageLimitError(`Licensed ${o.name} of ${o.value} has been exceeded`,o.name);if(_=Math.max(0,_),R&&(R=Math.max(0,R)),v&&(v=Math.max(0,v),f={...f,[h.name]:v}),!h.opts?.dryRun){let qe=h.opts?.valueFn;qe&&(_=await qe(),R=_),i={...i,[h.name]:_},p={...p,[h.name]:R}}}catch(_){throw h.opts?.suppressErrorLog||console.error(`Error updating usage quotas for ${h.name}`,_),_}});let g=a.filter(h=>!h.opts?.dryRun).map(h=>({name:h.name,type:h.type,values:{total:i[h.name],app:p[h.name],breakdown:f[h.name],triggers:m[h.name]},opts:{...h.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")},Lx=async({name:e,type:t,usageChange:r})=>{try{return await ir({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 Px=async e=>Ie(In.MonthlyQuotaName.ACTIONS,In.QuotaUsageType.MONTHLY,{fn:e});var ur=require("@budibase/types"),Rf=require("@budibase/backend-core"),_f=async()=>{let e=await Rf.db.getAllApps({dev:!0});return e?e.length:0},Ux=async(e,{appId:t}={})=>Ie(ur.StaticQuotaName.APPS,ur.QuotaUsageType.STATIC,{fn:e,valueFn:_f,id:t}),qx=async({appId:e}={})=>at(ur.StaticQuotaName.APPS,ur.QuotaUsageType.STATIC,{valueFn:_f,id:e});var Ye=require("@budibase/types"),Dx=async(e,{tableId:t}={})=>Ie(Ye.StaticQuotaName.ROWS,Ye.QuotaUsageType.STATIC,{fn:e,id:t}),Nx=async({tableId:e}={})=>at(Ye.StaticQuotaName.ROWS,Ye.QuotaUsageType.STATIC,{id:e}),Bx=async(e,t,{tableId:r}={})=>qt({change:e,name:Ye.StaticQuotaName.ROWS,type:Ye.QuotaUsageType.STATIC,opts:{fn:t,id:r}}),Mx=async(e,{tableId:t}={})=>ga({change:e,name:Ye.StaticQuotaName.ROWS,type:Ye.QuotaUsageType.STATIC,opts:{id:t}});var Sn=require("@budibase/types"),kx=async(e,{automationId:t}={})=>Ie(Sn.MonthlyQuotaName.AUTOMATIONS,Sn.QuotaUsageType.MONTHLY,{fn:e,id:t});var pr=require("@budibase/types"),Ss=async e=>Ie(pr.StaticQuotaName.USER_GROUPS,pr.QuotaUsageType.STATIC,{fn:e}),ws=async()=>at(pr.StaticQuotaName.USER_GROUPS,pr.QuotaUsageType.STATIC);var yt=require("@budibase/types"),Ts=async e=>Ie(yt.StaticQuotaName.PLUGINS,yt.QuotaUsageType.STATIC,{fn:e}),Es=async()=>at(yt.StaticQuotaName.PLUGINS,yt.QuotaUsageType.STATIC),vs=async e=>Is(yt.StaticQuotaName.PLUGINS,yt.QuotaUsageType.STATIC,e);var He=require("@budibase/types"),ha=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:ha.users.getUserCount}}];t>0&&a.push({change:t,name:He.StaticQuotaName.CREATORS,type:He.QuotaUsageType.STATIC,opts:{valueFn:ha.users.getCreatorCount}});let n=await qt(a);return await $t(),n},cr=async(e,t)=>{let r=[{change:e,name:He.StaticQuotaName.USERS,type:He.QuotaUsageType.STATIC,opts:{valueFn:ha.users.getUserCount}}];t>0&&r.push({change:t,name:He.StaticQuotaName.CREATORS,type:He.QuotaUsageType.STATIC,opts:{valueFn:ha.users.getCreatorCount}}),await ga(r),await $t()};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:()=>Wx,db:()=>xe,removeAppBuilder:()=>$x});var Aa=require("@budibase/backend-core");var j={};w(j,{addAppBuilder:()=>Cs,addUsers:()=>Rn,adjustGroupCreatorsQuotas:()=>jx,cleanupApp:()=>Qx,enrichUserRolesFromGroups:()=>Fx,fetch:()=>ya,get:()=>At,getBulk:()=>qf,getGroupBuilderAppIds:()=>Uf,getGroupRoleId:()=>Gx,remove:()=>Rs,removeAppBuilder:()=>Os,removeUsers:()=>_s,save:()=>lr,updateGroupApps:()=>xs});var x=require("@budibase/backend-core");var xf=require("@budibase/backend-core"),vn=class extends xf.HTTPError{constructor(t){super(`Group name "${t}" is unavailable`,409)}};async function Lf(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 Pf(e,t){return t?t=t.filter(r=>e.includes(r._id)):t=await M.getBulk(e,{enriched:!1}),t}async function Uf(e,t){if(!e.userGroups)return[];let r=await Pf(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 Gx(e,t,r){if(!e.userGroups)return null;let a=await Pf(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 Lf(a,t))}async function Fx(e){if(!e||!e.userGroups)return e;let t=await qf(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 Lf(t,n);o&&(e.roles[n]=o)});let a=await Uf(e,{groups:t});if(a.length&&!e.builder?.global){let n=e.builder?.apps||[];e.builder={apps:n.concat(a)}}return e}async function ya(){return await M.fetch()}async function At(e){return await M.get(e)}async function qf(e,t={enriched:!0}){return await M.getBulk(e,t)}async function Cf(e){if(await M.getByName(e))throw new vn(e)}async function Of(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 lr(e){let t=[],r=!e._id,a=0;if(delete e.users,!e._id)e._id=M.generateUserGroupID(),await Cf(e.name),t.push(x.events.group.created(e));else{let o=await M.get(e._id);if(o.name!==e.name&&await Cf(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 Of(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 Ss(n);{let o=await n();if(a>0)await wn(0,a);else if(a<0){let s=await Of(e),i=Math.abs(a)-s;i>0&&await cr(0,i)}return o}}async function Rs(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,h=i.length-g;h&&(n=()=>cr(0,h))}let o=await M.destroy(e,t);return await x.events.group.deleted(r),await ws(),await n(),o}async function Rn(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 _s(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 cr(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 xs(e,t){let r=await At(e);if(r.roles||(r.roles={}),t.appsToAdd)for(let a of t.appsToAdd)r.roles[a.appId]=a.roleId;if(t.appsToRemove)for(let a of t.appsToRemove)delete r.roles[a.appId];return await lr(r)}async function Qx(e){let t=await ya(),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 Cs(e,t){if(!await Pt())throw new Error("Feature not enabled, please check license");let r=x.db.getProdAppID(t),a=await At(e);a.builder??={apps:[]},a.builder.apps.includes(t)||(a.builder.apps.push(r),await lr(a))}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 At(e);a.builder?.apps.includes(t)&&(a.builder.apps=a.builder.apps.filter(n=>n!==r),await lr(a))}async function jx(){if(!await hs()){let e=x.tenancy.getGlobalDB(),r=(await ya()||[]).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 cr(0,f)}}}Aa.users.UserDB.init(ze,j,Me);var xe=Aa.users.UserDB;async function Wx(e,t){if(!await Pt())throw new Error("Feature not enabled, please check license");await Aa.users.addAppBuilder(e,t)}async function $x(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:()=>Bs});var Bs={};w(Bs,{logSearch:()=>eC,oldestLogDate:()=>Ff,storeLog:()=>tC});var Gf=require("@budibase/types"),xn=require("@budibase/backend-core");var _n=require("@budibase/types");var Z=require("@budibase/backend-core");var Df=require("@budibase/backend-core");async function Nf(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||Df.logging.logWarn(`Failed to backoff: ${t}`,r),o}var{SEPARATOR:ot,UNICODE_MAX:Kx,DocumentType:Bf,AutomationViewMode:Ls,ViewName:Vx,getQueryIndex:Yx}=Z.db,Hx=new Date(0).toISOString(),zx=100,Ps=async()=>Ka(_n.ConstantQuotaName.AUTOMATION_LOG_RETENTION_DAYS);function Mf(e,t,{status:r,automationId:a}={},n={}){let o=a?`${a}${ot}`:"",s=r?`${r}${ot}`:"",i;return r&&a?i=`${Ls.ALL}${ot}${s}${o}`:r?i=`${Ls.STATUS}${ot}${s}`:a?i=`${Ls.AUTOMATION}${ot}${o}`:i=`${Bf.AUTOMATION_LOG}${ot}`,{...n,descending:!0,startkey:`${i}${t}${Kx}`,endkey:`${i}${e}`}}function Jx(e,t,r){return`${Bf.AUTOMATION_LOG}${ot}${e}${ot}${r}${ot}${t}`}async function Us(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=Mf(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 qs(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=Mf(e,t,o,{include_docs:!0,limit:9+1});r?.page&&(s.startkey=r.page),n=await a.query(Yx(Vx.AUTOMATION_LOGS),s)}catch(o){if(o!=null&&(o.name==="not_found"||o.error==="not_found"))return await up(),qs(e,t,r);throw o}return Or(n,{paginate:!0,pageSize:9})}async function kf(e,t){let r=Z.context.getProdAppDB(),a=e._id,n=e.name,o=new Date().toISOString(),s=Jx(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 Ds(e,{clearing:t}={clearing:!1}){let r=Z.context.getProdAppDB();await Nf(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 Xx(){let e=await Ps();try{return await Us(Hx,e,{docs:!1,paginate:!1,limit:zx})}catch{return{data:[],hasNextPage:!1}}}async function Ns(){let e=Z.context.getProdAppDB();try{let t=await Xx();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 Ds(a,{clearing:!0})}catch(t){Z.logging.logAlert(`Failed to cleanup automation log history - Database "${e.name}"`,t)}}var Ff=Ps;async function Zx(e,t,r,a){let n,o=new Date().toISOString(),s=await Ff();return(!e||e<s)&&(e=s),r||t?n=await qs(e,o,{automationId:r,status:t,page:a}):n=await Us(e,o,{status:t,page:a,docs:!0,paginate:!0}),n}async function eC(e){return await Ns(),await Zx(e.startDate,e.status,e.automationId,e.page)}async function tC(e,t){if(!xn.db.isProdAppID(xn.context.getAppId()))return;let r=await kf(e,t);t.status===Gf.AutomationStatus.ERROR&&await Ds([r]),await Ns()}var On={};w(On,{checkPluginQuotas:()=>nC,deletePlugin:()=>aC,storePlugin:()=>rC});var $f=require("@budibase/types"),J=require("@budibase/backend-core");var Qf=P(require("fs")),jf=require("path");function Wf(e,t){return Qf.default.readFileSync((0,jf.join)(e,t),"utf8")}async function rC(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===$f.PluginType.DATASOURCE){let js=Wf(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 Ts(write)}async function aC(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 Es()}catch(r){let a=r?.message?r?.message:r;throw new Error(`Failed to delete plugin: ${a}`)}}async function nC(){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:()=>sC,fetchValues:()=>iC,isEncryptionKeyAvailable:()=>oC,isValid:()=>Yf,remove:()=>pC,update:()=>uC});var ba=require("@budibase/types"),Kf=require("@budibase/backend-core");function oC(){return!!Kf.env.ENCRYPTION_KEY}async function sC(){let e=await _t.get();return Object.keys(e.variables)}async function iC(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 Vf(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 uC(e,t){if(Yf(e))await Vf(a=>(a[e]=t,a));else throw new Error("Variable name has characters that are not allowed")}async function pC(e){await Vf(t=>(delete t[e],t))}function Yf(e){return/^[a-zA-Z0-9-_]+$/.test(e)}var bt={};w(bt,{definitions:()=>IC,download:()=>bC,fetch:()=>AC,write:()=>hC});var Pn=require("@budibase/types");var V=require("@budibase/backend-core"),Ge=require("@budibase/types");var Hf=require("memorystream"),zf=new V.sql.Sql(Ge.SqlClient.SQL_LITE);async function cC(e,t,r){let a={operation:Ge.Operation.READ,table:Wt.searchTable(),tables:{},paginate:{limit:r||9,page:t},filters:e,resource:{fields:[]},sort:{timestamp:{direction:Ge.SortOrder.DESCENDING,type:Ge.SortType.STRING}}},n=zf._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 lC(e){return`${V.DocumentType.AUDIT_LOG}${V.SEPARATOR}${e}${V.SEPARATOR}${V.utils.newid()}`}async function Jf(e){e._id||(e._id=lC(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 Ms(e,t,r){t||(t=1);let a=V.context.getAuditLogsDB();try{let n=9+1,o=await cC(e,t,n),s=Wt.searchTable(),i=zf.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 dC(),await Xu(),await Ms(e,t,{isRetry:!0});throw n}}async function dC(){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 Xf(e){let t=V.context.getAuditLogsDB(),r=new Hf,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 Hf;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"),mC=Sa.constants.MIN_VALID_DATE.toISOString(),gC=Sa.constants.MAX_VALID_DATE.toISOString();function ks(e){return(e.startDate||e.endDate)&&(e.startDate=e.startDate||mC,e.endDate=e.endDate||gC),e}async function Zf(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=ks(e),t.range={timestamp:{high:e.endDate,low:e.startDate}}),Object.keys(t).length===0&&(t.notEmpty={event:!0}),t}function Gs(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 Fs(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 em(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=Fs(r)),a}async function hC(e,t,r){if(!await An()||!me.utils.isAudited(e))return;let a=em(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 Jf(o)}async function yC(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||Gs(i.userId,"user",i.fallback)};i.appId&&(m.app=f||Gs(i.appId,"app",i.fallback)),s.push(m)}return s}async function AC(e){if(!await An())throw new Error("Audit logs not available - license required.");let t=await Zf(e);if(typeof e.bookmark=="string")throw new Error("String based bookmark not supported.");let r=await Ms(t,e.bookmark);return{hasNextPage:r.hasNextPage,bookmark:r.bookmark,data:await yC(r.rows)}}function bC(e){return e=ks(e),Xf(e)}function IC(){let e=Object.entries(Pn.AuditedEventFriendlyName).filter(r=>r[1]!=null),t={};for(let r of e)t[r[0]]=Fs(r[1]);return t}var Un={};w(Un,{applications:()=>Ks,roles:()=>Ws,users:()=>Qs});var Qs={};w(Qs,{roleCheck:()=>wC});function SC(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 wC(e,t){return await rt()||SC(e,t),e}var Ws={};w(Ws,{assign:()=>TC,unAssign:()=>EC});var wa=require("@budibase/backend-core");async function TC(e,t){if(!await rt())throw new Error("Unable to assign roles - license required.");let r=await xe.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 xe.bulkUpdate(r)}async function EC(e,t){if(!await rt())throw new Error("Unable to un-assign roles - license required.");let r=await xe.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 Ks={};w(Ks,{buildExportFn:()=>RC,buildImportFn:()=>vC});var $s=require("@budibase/backend-core");function vC(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 $s.context.doInAppContext(t.params.appId,async()=>{await e(t),t.body=void 0,t.status=204,await r()})}}function RC(e){return async(t,r)=>{await rt()||t.throw(403,"Endpoint unavailable, license required.");let{encryptPassword:a,excludeRows:n}=t.request.body;await $s.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 re=require("@budibase/backend-core"),te=require("@budibase/types");var Vs=require("@budibase/backend-core"),tm;function rm(){tm=new Vs.queue.BudibaseQueue(Vs.queue.JobQueue.APP_BACKUP,{maxStalledCount:3,jobOptions:{attempts:3,removeOnFail:!0,removeOnComplete:!0}})}function Dt(){return tm}var am=require("path"),nm=P(require("fs"));async function Ys(e,t={}){return Re.storeAppBackupMetadata(e,t)}function om(e){let t=new Date().toISOString();switch(e){case te.AppBackupStatus.COMPLETE:case te.AppBackupStatus.FAILED:return{timestamp:t,finishedAt:t};case te.AppBackupStatus.STARTED:return{timestamp:t,startedAt:t};case te.AppBackupStatus.PENDING:return{timestamp:t,createdAt:t}}}async function _C(e,t,r,a){let n=await qn(e);return await Re.storeAppBackupMetadata({...n,...om(t),contents:r,status:t,type:te.AppBackupType.BACKUP},{filename:a,docId:e})}async function xC(e,t,r){let a=await qn(e);return await Re.storeAppBackupMetadata({...a,...om(r),status:r,type:te.AppBackupType.RESTORE,trigger:te.AppBackupTrigger.MANUAL},{docId:e,docRev:t})}async function qn(e){return Re.getAppBackupMetadata(e)}async function CC(e,t){return Re.updateAppBackupMetadata(e,t)}async function OC(e){let t=await Re.getAppBackupMetadata(e);return t.filename&&await re.objectStore.deleteFile(re.objectStore.ObjectStoreBuckets.BACKUPS,t.filename),Re.deleteAppBackupMetadata(e)}async function LC(e,t){return Re.fetchAppBackups(e,t)}async function sm(e){let t=await Re.getAppBackupMetadata(e);if(!t.filename)throw new Error("Backup incomplete - cannot download.");let r=await re.objectStore.getReadStream(re.objectStore.ObjectStoreBuckets.BACKUPS,t.filename);return{metadata:t,stream:r}}async function PC(e){let{stream:t}=await sm(e),r=(0,am.join)(re.objectStore.budibaseTempDir(),re.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 UC(e,t,r={}){let a;try{a=await Ys({appId:e,trigger:t,timestamp:new Date().toISOString(),status:te.AppBackupStatus.PENDING,type:te.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 re.events.backup.appBackupTriggered(e,a.id,te.AppBackupType.BACKUP,t,r?.name),a.id}async function qC(e,t,r,a){let n=await qn(t),o;try{o=await Ys({appId:e,timestamp:new Date().toISOString(),status:te.AppBackupStatus.PENDING,type:te.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 DC(e,t,r){let a=re.db.getProdAppID(e);await re.context.doInAppContext(a,async()=>{let n=re.context.getProdAppDB();if(!await n.exists())return;let s=await n.tryGet(te.DocumentType.APP_METADATA);s&&(s.backupErrors||(s.backupErrors={}),s.backupErrors[t]||(s.backupErrors[t]=[]),s.backupErrors[t].push(r),await n.put(s),await re.cache.app.invalidateAppMetadata(s.appId,s))})}var NC={isEnabled:ms,triggerAppRestore:fe(qC),triggerAppBackup:fe(UC),getBackupDownloadStream:fe(sm),downloadAppBackup:fe(PC),fetchAppBackups:fe(LC),storeAppBackupMetadata:fe(Ys),updateBackupStatus:fe(_C),updateRestoreStatus:fe(xC),getAppBackup:fe(qn),updateAppBackup:fe(CC),deleteAppBackup:fe(OC),trackBackupError:fe(DC)},Ce=NC;var zs={};w(zs,{init:()=>Hs});var W=require("@budibase/backend-core");var Fe=require("@budibase/types");var dr=P(require("fs"));async function Hs(e){Dt().process(async t=>{let r=t.data;try{if(r.export)return console.log("Exporting app backup:",r.appId,r.export.trigger),kC(t,e);if(r.import)return console.log("Importing app backup:",r.appId,r.import.backupId),MC(t,e)}catch(a){W.logging.logAlert(`Failed to perform backup for app ID: ${r.appId}`,a)}})}async function BC(e){await W.db.getDB(e,{skip_setup:!0}).destroy()}async function im(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 Ce.updateBackupStatus(a.doc.id,p,f?.contents,f?.filename):await Ce.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,h=dr.default.createReadStream(p);await W.objectStore.streamUpload({bucket:g,filename:m,stream:h,extra:{type:"application/gzip",metadata:{name:a?.name,trigger:e,timestamp:s,appId:o}}}),await i(Fe.AppBackupStatus.COMPLETE,{filename:m,contents:f}),dr.default.existsSync(p)&&dr.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 Ce.trackBackupError(o,f,`Backup export failed: ${m}`)}}async function MC(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 Ce.updateRestoreStatus(r.docId,r.docRev,Fe.AppBackupStatus.STARTED);await im(Fe.AppBackupTrigger.RESTORING,i,a,{processing:t,createdBy:s,name:o});let g=await Ce.downloadAppBackup(n),h=Fe.AppBackupStatus.COMPLETE;try{await t.importAppFn(f,W.db.getDB(f),{file:{type:"application/gzip",path:g},key:g}),await BC(p),await new W.db.Replication({source:f,target:p}).replicate()}catch(I){W.logging.logAlert("App restore error",I),h=Fe.AppBackupStatus.FAILED;let C=I instanceof Error?I.message:String(I);await Ce.trackBackupError(a,n,`Backup restore failed: ${C}`)}finally{try{await W.db.getDB(f,{skip_setup:!0}).destroy()}catch{}}await Ce.updateRestoreStatus(r.docId,m,h),dr.default.existsSync(g)&&dr.default.rmSync(g,{force:!0})})}async function kC(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 Ce.updateBackupStatus(r.docId,Fe.AppBackupStatus.STARTED);return im(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 Ce.trackBackupError(a,r.docId,`Backup export failed: ${p}`)}})}var GC=async e=>{rm(),await Hs(e.processing)},Oe={...Ce,processing:zs,init:GC,getBackupQueue:Dt};var um=async e=>{e.backups&&await Oe.init(e.backups)};var he={};w(he,{create:()=>UM,find:()=>PM,get:()=>LM,remove:()=>DM,update:()=>qM});var OA=P(Wi()),st=require("@budibase/backend-core");var LA=require("@budibase/types");async function LM(e){let t=st.tenancy.getGlobalDB(),r=new st.db.QueryBuilder(t.name,LA.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 PM(e){return await st.users.getById(e)}async function UM(e){let t=await xe.getUserByEmail(e.email);if(t){if(t.scimInfo?.isSync)throw new st.HTTPError("User is already synched",409);e={...t,scimInfo:(0,OA.default)(t.scimInfo,e.scimInfo),password:void 0,firstName:e.firstName,lastName:e.lastName,updatedAt:e.updatedAt}}return await xe.save(e,{requirePassword:!1})}async function qM(e,t){return await xe.save(e,{requirePassword:!1,allowChangingEmail:t?.allowChangingEmail})}async function DM(e){return await xe.destroy(e)}var Ar={};w(Ar,{create:()=>NM});var PA=P(Wi());var UA=require("@budibase/backend-core");async function NM(e){let t=await bo(e.name),r;if(!t)r=(await j.save(e)).id;else{if(t.scimInfo?.isSync)throw new UA.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,PA.default)(t.scimInfo,e.scimInfo),await j.save(t)}return await j.get(r)}var Bt={};w(Bt,{logRequest:()=>BM,logResponse:()=>MM});var $i=require("@budibase/backend-core");async function BM(e){$i.logging.logWarn("SCIM request log",e)}async function MM(e){$i.logging.logWarn("SCIM response error",e)}var Ji={};w(Ji,{doInScimContext:()=>Vi,feature:()=>$,internalGroupOnly:()=>_a,licenseAuth:()=>NA,licensing:()=>qA,requireSCIM:()=>Yi,scimGroupOnly:()=>Ra,scimUserOnly:()=>va});var It=require("@budibase/backend-core");var Vn=require("@budibase/types"),kM=(e={checkUsersLimit:!0})=>async(t,r)=>{if((e.licensingCheck?e.licensingCheck:()=>!!t.user)(t)){if(It.env.SELF_HOSTED&&It.env.DEFAULT_LICENSE)return t.user.license=So,r();t.user.license=await Ve.cache.getCachedLicense(t,{populateLicense:e.populateLicense,populateFreeLicense:e.populateFreeLicense}),e.checkUsersLimit&&(It.utils.isServingApp(t)||It.utils.isServingBuilder(t)||It.utils.isServingBuilderPreview(t)||It.utils.isPublicApiRequest(t))&&await ze.usageLimitIsExceeded({name:Vn.StaticQuotaName.USERS,type:Vn.QuotaUsageType.STATIC,usageChange:0})}return r()},qA=kM;var $={};w($,{requireFeature:()=>GM,requireFeatures:()=>FM});var GM=e=>async(t,r)=>{await yn(e),await r()},FM=(...e)=>async(t,r)=>{await fs(e),await r()};var Yn=require("@budibase/backend-core");var Vi=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 Yi=async(e,t)=>{await ys(),await t()};var DA=require("@budibase/backend-core");var va=e=>Hi(DA.users.getById,e,!0),Ra=e=>Hi(M.get,e,!0),_a=e=>Hi(M.get,e,!1);function Hi(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 zi=require("dd-trace");async function NA(e,t){await zi.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"),zi.tracer.setUser({id:"anonymous",tenantId:n.tenantId}),await xa.context.doInSelfHostTenantUsingCloud(n.tenantId,async()=>{await xa.context.doInLicenseContext(n,async()=>{await t()})})})}var su={};w(su,{appBackups:()=>Eb,auditLogs:()=>mb,environmentVariables:()=>ob,groups:()=>zA,scim:()=>eI,users:()=>oI});var BA=require("@budibase/backend-core");async function MA(e){let t=e.request.body;if(t.name=t.name.trim(),delete t.roles,t._id){let a=await At(t._id);t.roles=a.roles,t.scimInfo=a.scimInfo}let r=await lr(t);e.body={_id:r.id,_rev:r.rev}}async function kA(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 Rn(t,r)),a&&(o=await _s(t,a)),e.body={added:n,removed:o}}async function GA(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 xs(t,{appsToAdd:r,appsToRemove:a})}async function FA(e){e.body={data:await ya()}}async function QA(e){let{groupId:t,rev:r}=e.params;try{await Rs(t,r),e.body={message:"Group deleted successfully"}}catch(a){e.throw(a.status,a)}}async function jA(e){try{e.body=await At(e.params.groupId)}catch(t){e.throw(t.status,t)}}async function WA(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 $A(e){let{groupId:t,appId:r}=e.params;await Cs(t,r),e.body={message:"Group app builder access updated."}}async function KA(e){let{groupId:t,appId:r}=e.params;await Os(t,r),e.body={message:"group app builder access removed."}}async function VA(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 BA.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 At(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=>xe.getUserByEmail(g)));for(let g of s){let h=m.find(I=>I?.email===g);h?(i.push({_id:h._id,email:h.email}),f.push(h._id)):p.push({email:g,reason:"User not found"})}f.length>0&&await Rn(t,f),e.body={added:i,skipped:p}}var YA=P(require("@koa/router")),ce=P(require("joi"));var Se=require("@budibase/types"),Le=require("@budibase/backend-core"),HA=new YA.default;function jM(){return Le.auth.joiValidator.body(ce.default.object({_id:ce.default.string().optional(),_rev:ce.default.string().optional(),color:ce.default.string().required(),icon:ce.default.string().required(),name:ce.default.string().trim().required().max(50),role:ce.default.string().optional(),users:ce.default.array().optional(),apps:ce.default.array().optional(),roles:ce.default.object().optional(),createdAt:ce.default.string().optional(),updatedAt:ce.default.string().optional()}).required())}HA.post("/api/global/groups",Le.auth.adminOnly,$.requireFeature(Se.Feature.USER_GROUPS),jM(),MA).get("/api/global/groups",$.requireFeature(Se.Feature.USER_GROUPS),FA).delete("/api/global/groups/:groupId/:rev",$.requireFeature(Se.Feature.USER_GROUPS),Le.auth.adminOnly,_a("groupId"),QA).get("/api/global/groups/:groupId",$.requireFeature(Se.Feature.USER_GROUPS),Le.auth.builderOrAdmin,jA).get("/api/global/groups/:groupId/users",$.requireFeature(Se.Feature.USER_GROUPS),Le.auth.builderOrAdmin,WA).post("/api/global/groups/:groupId/users",Le.auth.adminOnly,$.requireFeature(Se.Feature.USER_GROUPS),_a("groupId"),kA).post("/api/global/groups/:groupId/users/bulk",Le.auth.adminOnly,$.requireFeature(Se.Feature.USER_GROUPS),_a("groupId"),Le.auth.joiValidator.body(ce.default.object({csvContent:ce.default.string().required()}).required()),VA).post("/api/global/groups/:groupId/apps",Le.auth.builderOrAdmin,$.requireFeature(Se.Feature.USER_GROUPS),GA).post("/api/global/groups/:groupId/app/:appId/builder",Le.auth.builderOrAdmin,$.requireFeatures(Se.Feature.USER_GROUPS,Se.Feature.APP_BUILDERS),$A).delete("/api/global/groups/:groupId/app/:appId/builder",Le.auth.builderOrAdmin,$.requireFeatures(Se.Feature.USER_GROUPS,Se.Feature.APP_BUILDERS),KA);var zA=HA;var Xi=require("@budibase/types");var Zi=require("@budibase/backend-core");async function JA(e){e.body={encryptionKeyAvailable:Je.isEncryptionKeyAvailable()}}async function XA(e){e.body={variables:await Je.fetch()}}async function ZA(e){let{name:t,production:r,development:a}=e.request.body;await Je.update(t,{production:r,development:a});let n=[Xi.AppEnvironment.PRODUCTION];r!==a&&n.push(Xi.AppEnvironment.DEVELOPMENT),await Zi.events.environmentVariable.created(t,n),e.body={message:`Environment variable "${t}" created.`}}async function eb(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 tb(e){let t=e.params.varName;await Je.remove(t),await Zi.events.environmentVariable.deleted(t),e.body={message:`Environment variable "${t}" deleted.`}}var Mt=require("@budibase/backend-core"),ab=P(require("@koa/router")),Ca=P(require("joi")),nb=new ab.default;function rb(){return Mt.auth.joiValidator.body(Ca.default.object({name:Ca.default.string().optional(),production:Ca.default.string().required(),development:Ca.default.string().required()}))}nb.get("/api/env/variables/status",Mt.auth.builderOrAdmin,JA).get("/api/env/variables",Mt.auth.builderOrAdmin,XA).post("/api/env/variables",Mt.auth.builderOrAdmin,rb(),ZA).patch("/api/env/variables/:varName",Mt.auth.builderOrAdmin,rb(),eb).delete("/api/env/variables/:varName",Mt.auth.builderOrAdmin,tb);var ob=nb;var eu=require("@budibase/backend-core");async function sb(e){let t=e.request.body,r=await bt.fetch(t);await eu.events.auditLog.filtered(t),e.body=r}async function ib(e){let t=e.request.body,{stream:r}=bt.download(t);await eu.events.auditLog.downloaded(t),e.attachment(`audit-logs-${Date.now()}.log`),e.body=r}async function ub(e){e.body={events:bt.definitions()}}var cb=require("@budibase/types"),kt=require("@budibase/backend-core"),lb=P(require("@koa/router")),Pe=P(require("joi"));function pb(){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(cb.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 fb=new lb.default;fb.post("/api/global/auditlogs/search",kt.auth.adminOnly,pb(),sb).get("/api/global/auditlogs/download",kt.auth.adminOnly,kt.middleware.querystringToBody,pb(),ib).get("/api/global/auditlogs/definitions",kt.auth.adminOnly,ub);var mb=fb;var tu=require("@budibase/types");var gb=require("@budibase/backend-core");async function br(e,t){await Vt.appExists(t)||e.throw(400,`Provided app ID: ${t} - is invalid.`)}async function hb(e){let t=e.params.appId;await br(e,t);let r=e.request.body,a=e.user?._id,n=await Oe.triggerAppBackup(t,tu.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 yb(e){let t=e.params.appId;await br(e,t);let r=e.params.backupId,a=e.request.body.name,n=await Oe.triggerAppRestore(t,r,a,e.user?._id);n||e.throw(500,"Unable to start restore."),await gb.events.backup.appBackupRestored(n.metadata),e.body={restoredId:n?.restoreId,message:"Restore triggered - process starting."}}async function Ab(e){let t=e.params.appId;await br(e,t);let r=e.params.backupId;await Oe.deleteAppBackup(r),e.body={message:"Backup deleted successfully."}}async function bb(e){let t=e.params.appId;await br(e,t);let r=e.request.body;r?.trigger&&(r.trigger=r.trigger.toLowerCase(),Object.values(tu.AppBackupTrigger).includes(r.trigger)||e.throw(400,"Provided trigger is not a valid option.")),e.body=await Oe.fetchAppBackups(t,{paginate:!0,...r})}async function Ib(e){let t=e.params.appId;await br(e,t);let r=e.params.backupId,a=e.request.body;e.body=await Oe.updateAppBackup(r,a.name)}async function Sb(e){let t=e.params.appId;await br(e,t);let r=e.params.backupId,{metadata:a,stream:n}=await Oe.getBackupDownloadStream(r);e.attachment(`backup-${a.timestamp}.tar.gz`),e.body=n}var wb=P(require("@koa/router")),Gt=P(require("joi")),Hn=require("@budibase/types"),St=require("@budibase/backend-core"),Tb=new wb.default;function VM(){return St.auth.joiValidator.body(Gt.default.object({trigger:Gt.default.string().valid(...Object.values(Hn.AppBackupTrigger)),type:Gt.default.string().valid(...Object.values(Hn.AppBackupType)),startDate:Gt.default.date(),endDate:Gt.default.date(),page:Gt.default.string()}))}Tb.post("/api/apps/:appId/backups",St.auth.builderOrAdmin,hb).post("/api/apps/:appId/backups/search",St.auth.builderOrAdmin,VM(),bb).get("/api/apps/:appId/backups/:backupId/file",St.auth.builderOrAdmin,Sb).patch("/api/apps/:appId/backups/:backupId",St.auth.builderOrAdmin,Ib).delete("/api/apps/:appId/backups/:backupId",St.auth.builderOrAdmin,Ab).post("/api/apps/:appId/backups/:backupId/import",St.auth.builderOrAdmin,yb);var Eb=Tb;var Zb=P(require("@koa/router"));var zn=require("scim-patch");var Rb=require("@budibase/backend-core");function vb(e,t){let r=e.request.query[t];if(r!==void 0)return+r}var _b=async e=>{let t=vb(e,"pageSize")??20,r=vb(e,"startIndex"),a;e.request.query.filter&&(a=Y.user.userFilters(e.request.query.filter));let n=await he.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}},xb=async e=>{let{id:t}=e.params;typeof t!="string"&&e.throw(404);let r=await he.find(t);e.body=Y.user.toScimUserResponse(r)},Cb=async e=>{let t=Y.user.fromScimUser(e.request.body);try{let r=await he.create(t);e.body=Y.user.toScimUserResponse(r)}catch(r){throw r instanceof Rb.EmailUnavailableError&&e.throw(409,"Email already in use"),r}};function YM(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 Ob=async e=>{let t=await he.find(e.params.id);t||e.throw(404);let r=Y.user.toScimUserResponse(t),a=e.request.body;try{(0,zn.patchBodyValidation)(a)}catch{}if(YM(a))return ru(e);let n;try{n=(0,zn.scimPatch)(r,a.Operations)}catch{}n||e.throw(500);let o=Y.user.fromScimUser(n);await he.update(o,{allowChangingEmail:!0}),e.body=Y.user.toScimUserResponse(o)},ru=async e=>{let{id:t}=e.params;typeof t!="string"&&e.throw(404),await he.remove(t),e.status=204};var $b=P(Wb()),Kb=require("@budibase/shared-core"),Jn=require("scim-patch");var Xn=require("scim2-parse-filter");function Vb(e,t){for(let r of t.split(","))delete e[r]}var Yb=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,Xn.filter)((0,Xn.parse)(a));r=r.filter(o)}n&&r.forEach(o=>{Vb(o,n)}),e.body={schemas:["urn:ietf:params:scim:api:messages:2.0:ListResponse"],totalResults:r.length,Resources:r,startIndex:1,itemsPerPage:r.length}},Hb=async e=>{let t=Y.group.fromScimGroup(e.request.body),r=await Ar.create(t);e.body=Y.group.toScimGroupResponse(r)},zb=async e=>{let{id:t}=e.params,r=await j.get(t),a=Y.group.toScimGroupResponse(r),{excludedAttributes:n}=e.request.query;n&&Vb(a,n),e.body=a},Jb=async e=>{let{id:t}=e.params,r=await j.get(t);await j.remove(t,r._rev),e.status=204},Xb=async e=>{let{id:t}=e.params,r=await j.get(t),a=Y.group.toScimGroupResponse(r),n=e.request.body;try{(0,Jn.patchBodyValidation)(n)}catch{e.throw(400)}let{true:o,false:s}=(0,$b.default)(n.Operations,i=>i.path==="members");if(s?.length){let i=(0,Jn.scimPatch)(a,s);i||e.throw(500);let p={...Y.group.fromScimGroup(i),_rev:r._rev};await j.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 he.find(g.value));break;case"remove":case"Remove":for(let g of m)p.push(await he.find(g.value));break;case"replace":case"Replace":throw new Error("Replacing members is not allowed");default:Kb.utils.unreachable(f)}i.length&&await j.addUsers(t,i.map(f=>f._id)),p.length&&await j.removeUsers(t,p.map(f=>f._id))}e.body=Y.group.toScimGroupResponse(await j.get(t))};var Oa=require("@budibase/types"),we=new Zb.default({prefix:"/api/global/scim/v2"});we.use(Yi);we.use(Vi);we.get("/users",_b);we.get("/users/:id",va("id"),xb);we.post("/users",Cb);we.patch("/users/:id",va("id"),Ob);we.delete("/users/:id",va("id"),ru);we.get("/groups",Yb);we.post("/groups",$.requireFeature(Oa.Feature.USER_GROUPS),Hb);we.get("/groups/:id",$.requireFeature(Oa.Feature.USER_GROUPS),Ra("id"),zb);we.delete("/groups/:id",$.requireFeature(Oa.Feature.USER_GROUPS),Ra("id"),Jb);we.patch("/groups/:id",$.requireFeature(Oa.Feature.USER_GROUPS),Ra("id"),Xb);var eI=we;var aI=P(require("@koa/router"));var au=require("@budibase/backend-core");async function tI(e){let{userId:t,appId:r}=e.params,a=await nt.db.getUser(t);if(au.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 rI(e){let{userId:t,appId:r}=e.params,a=await nt.db.getUser(t);if(au.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 nu=require("@budibase/types"),ou=require("@budibase/backend-core"),nI=new aI.default;nI.post("/api/global/users/:userId/app/:appId/builder",ou.auth.builderOrAdmin,$.requireFeatures(nu.Feature.APP_BUILDERS),tI).delete("/api/global/users/:userId/app/:appId/builder",ou.auth.builderOrAdmin,$.requireFeatures(nu.Feature.APP_BUILDERS),rI);var oI=nI;var Y={};w(Y,{group:()=>uu,user:()=>iu});var iu={};w(iu,{fromScimUser:()=>Tk,toScimUserResponse:()=>Ik,userFilters:()=>Ek});var Zn=require("@budibase/types"),sI=require("scim2-parse-filter"),iI=require("@budibase/backend-core"),uI=require("@budibase/shared-core"),{unreachable:bk}=uI.utils,Ik=e=>{let{isSync:t,roles:r,...a}=e.scimInfo||{},n={...a,schemas:["urn:ietf:params:scim:schemas:core:2.0:User"],id:e._id,meta:{resourceType:"User",created:new Date(e.createdAt),lastModified:new Date(e.updatedAt)},active:e.status===Zn.UserStatus.ACTIVE};return(e.firstName||e.lastName)&&(n.name={formatted:[e.firstName,e.lastName].filter(o=>o).join(" "),familyName:e.lastName,givenName:e.firstName}),n},Sk=e=>!!e?.id;function wk(e){if(iI.utils.validEmail(e.userName))return e.userName;if(e.emails)return e.emails.find(t=>t.primary)?.value||e.emails[0]?.value}var Tk=e=>{let t=Sk(e)?e:void 0,r=wk(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:bk(e.active)}let n,o;return e.name?.givenName?(n=e.name?.givenName,o=e.name?.familyName):n=e.displayName,{tenantId:"",_id:t?.id,userId:t?.id,email:r,firstName:n,lastName:o,scimInfo:{...e,isSync:!0},roles:{},status:a?Zn.UserStatus.ACTIVE:Zn.UserStatus.INACTIVE,createdAt:t?.meta.created.getTime(),updatedAt:t?.meta.lastModified.toISOString()}},Ek=e=>{let t={equal:{}},r=(0,sI.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 uu={};w(uu,{fromScimGroup:()=>_k,toScimGroupResponse:()=>vk});var vk=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}))}),Rk=e=>!!e?.id,_k=e=>{let t=Rk(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 Pu={};w(Pu,{LLM:()=>Xe,LLMRequest:()=>K,TableGeneration:()=>Lu,agentHistoryTitleSystemPrompt:()=>Mk,agentSystemPrompt:()=>Bk,aiColumnSchemas:()=>Cu,aiTableResponseToTableSchema:()=>vu,appendAIColumns:()=>Ru,classifyText:()=>lu,cleanData:()=>du,extractFileData:()=>Uk,generateAIColumns:()=>Tu,generateCode:()=>Nk,generateCronExpression:()=>fu,generateData:()=>Eu,generateJs:()=>yu,generateSQL:()=>Dk,generateTables:()=>wu,generationStructure:()=>xu,getLLM:()=>Ua,getLLMConfig:()=>Su,getLLMOrThrow:()=>AI,normalizeContentType:()=>pu,parseResponseFormat:()=>to,sanitiseToolName:()=>xk,searchWeb:()=>hu,sentimentAnalysis:()=>gu,summarizeText:()=>eo,tableDataStructuredOutput:()=>Ou,translate:()=>mu});var La=require("@budibase/types");function xk(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 so=require("@budibase/types");var Ze=require("@budibase/backend-core"),mI=require("@budibase/types");var ro=P(require("openai"));var wt=require("@budibase/types");var pI=require("@budibase/shared-core");var Tt=P(require("dd-trace"));function cu(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||"300")}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(eo(t)))}async generateCronExpression(t){return Tt.default.trace("generateCronExpression",()=>this.prompt(fu(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 eo(cu(r,o));case wt.AIOperationEnum.CLEAN_DATA:return du(r[n]);case wt.AIOperationEnum.TRANSLATE:return mu(r[n],s);case wt.AIOperationEnum.CATEGORISE_TEXT:if(!i)throw Error("No categories provided for categorise text operation. Please provide categories.");return lu(cu(r,o),i.split(","));case wt.AIOperationEnum.SENTIMENT_ANALYSIS:return gu(r[n]);case wt.AIOperationEnum.PROMPT:return p;case wt.AIOperationEnum.SEARCH_WEB:return hu(cu(r,o));default:throw pI.utils.unreachable(a)}}async generateJs(t,r){return await Tt.default.trace("generateJs",async()=>{let{bindings:a=[],snippets:n=[]}=r||{};return await this.prompt(yu(a,n).addUserMessage(t))})}};var lI=require("@budibase/types"),Au=require("openai/helpers/zod");function to(e){if(e)return e==="text"?{type:"text"}:e==="json"?{type:"json_object"}:e}function cI(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 ro.default({apiKey:r.apiKey})}async uploadFile(r,a,n){let o=pu(n);if(lI.ImageContentTypes.includes(o.toLowerCase())){let p;if(Buffer.isBuffer(r))p=r;else{let m=[];for await(let g of r)m.push(g);p=Buffer.concat(m)}let f=p.toString("base64");return`data:${o};base64,${f}`}let s=await(0,ro.toFile)(r,a);return(await this.client.files.create({file:s,purpose:"assistants"})).id}async chatCompletion(r){let a={model:this.model,messages:r.messages,max_tokens:this.maxTokens,response_format:to(r.format)};r.tools&&r.tools.length>0&&(a.tool_choice="auto",a.tools=r.tools.map(Au.zodFunction));let n=await this.client.chat.completions.create(a),o=n.choices[0]?.message;if(o?.tool_calls){r.addMessage(o);let s=[];for(let i of o.tool_calls){let p=r.findTool(i.function.name);if(!p)throw new Error(`Tool ${i.function.name} not found in prompt tools`);let f=JSON.parse(i.function.arguments);s.push(p.handler(f).then(m=>({role:"tool",tool_call_id:i.id,content:m})).catch(m=>(console.error(`[OPENAI TOOL ERROR] Tool ${i.function.name} failed in OpenAI handler:`,m),{role:"tool",tool_call_id:i.id,content:`Error: ${m.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:cI(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:to(r.format),stream:!0};r.tools&&r.tools.length>0&&(a.tool_choice="auto",a.tools=r.tools.map(Au.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?cI(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"),dI=require("@budibase/types");var bu=require("dd-trace"),ao=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,maxTokens:this.maxTokens}).uploadFile(t,r,a)}async uploadFileSelfHost(t,r,a){let n;if(Buffer.isBuffer(t))n=t;else{let p=[];for await(let f of t)p.push(f);n=Buffer.concat(p)}let o=n.toString("base64");if(a&&dI.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 bu.tracer.trace("chatCompletionCloud",async()=>await new Ue({apiKey:ee.env.OPENAI_API_KEY,model:this.model,maxTokens:this.maxTokens}).chatCompletion(t))}async chatCompletionSelfHost(t){return await bu.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,maxTokens:this.maxTokens}).chatCompletionStream(t)}async*chatCompletionStreamSelfHost(t){try{let r=await this.chatCompletionSelfHost(t);if(r.messages.length>0){let a=r.messages[r.messages.length-1];a.content&&(yield{type:"content",content:a.content})}yield{type:"done",messages:r.messages,tokensUsed:r.tokensUsed}}catch(r){yield{type:"error",content:r.message}}}};var Pa=require("dd-trace");var Iu=P(require("@anthropic-ai/sdk"));function Ck(e){if(!e)return 0;let t=e.input_tokens;return e.output_tokens*3+t}var no=class extends Xe{constructor(r){super(r);this.client=new Iu.default({apiKey:r.apiKey})}firstTextBlock(r){for(let a of r.content)if(a.type==="text")return a.text}async 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:Ck(a.usage)}}catch(a){throw a instanceof Iu.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 gI=require("zod"),hI=require("openai/helpers/zod");var fI=require("openai"),oo=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 fI.AzureOpenAI({apiKey:t.apiKey,apiVersion:"2024-10-01-preview",baseURL:t.baseUrl})}};var yI="gpt-4o-mini",Ok={OpenAI:Ue,TogetherAI:Ue,AzureOpenAI:oo,Custom:Ue,Anthropic:no,BudibaseAI:ao};async function Lk(){return await Pa.tracer.trace("getAIConfig",async e=>{let t={type:mI.ConfigType.AI,config:{}};if(!Ze.context.isSelfHostUsingCloud()){let a=await Ze.configs.getAIConfig();a&&(t=a)}await As(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||yI,apiKey:r.apiKey,baseUrl:r.baseUrl}})}async function Pk(){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:yI,apiKey:Ze.env.OPENAI_API_KEY}})}async function Su(){return Pa.tracer.trace("getLLMConfig",async()=>await Lk()||await Pk())}async function Ua(e){return await Pa.tracer.trace("getLLM",async t=>{let{model:r,maxTokens:a}=e||{},n=await Su();if(!n){t.addTags({enabled:!1,reason:"no config found"});return}r&&(n.model=r),a&&(n.maxTokens=a);let o=Ok[n.provider];if(!o){t.addTags({enabled:!1,reason:"no provider found",provider:n.provider});return}return new o(n)})}async function AI(){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 gI.z.ZodType?this.format=(0,hI.zodResponseFormat)(t,"key"):this.format=t,this}addMessage(t){return this.messages.push(t),this}addMessages(t){return this.messages.push(...t),this}addUserMessage(t){return this.messages.push({role:"user",content:t}),this}addSystemMessage(t){return this.messages.push({role:"system",content:t}),this}static fromRequest(t){let r=new e;return t.messages&&r.addMessages(t.messages),t.format&&r.withFormat(t.format),r}};var it=require("zod");function eo(e,t){let r=`Summarize this text:
37
+ `;function Vr(e){return Ro.default.verify(e,ES,{algorithms:["RS256"]})}function vS(e,t){return Ro.default.sign(t,e,{encoding:"utf-8",algorithm:"RS256"})}var Ja={};w(Ja,{getFeatures:()=>_o});var l=require("@budibase/types");var RS={[l.PlanType.FREE]:[...Ae.SELF_FREE_LICENSE.features],[l.PlanType.PREMIUM]:void 0,[l.PlanType.PREMIUM_PLUS]:[l.Feature.APP_BACKUPS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.PDF,l.Feature.BUDIBASE_AI],[l.PlanType.PREMIUM_PLUS_TRIAL]:[l.Feature.APP_BACKUPS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.PDF,l.Feature.BUDIBASE_AI],[l.PlanType.PRO]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS],[l.PlanType.TEAM]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS],[l.PlanType.BUSINESS]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.AUDIT_LOGS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.PDF,l.Feature.BUDIBASE_AI],[l.PlanType.ENTERPRISE_BASIC]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.ENFORCEABLE_SSO,l.Feature.AUDIT_LOGS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.OFFLINE,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.SCIM,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.PWA,l.Feature.CUSTOM_APP_SCRIPTS,l.Feature.PDF,l.Feature.BUDIBASE_AI,l.Feature.RECAPTCHA],[l.PlanType.ENTERPRISE_BASIC_TRIAL]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.ENFORCEABLE_SSO,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.SCIM,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.PWA,l.Feature.CUSTOM_APP_SCRIPTS,l.Feature.PDF,l.Feature.BUDIBASE_AI,l.Feature.RECAPTCHA],[l.PlanType.ENTERPRISE]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.ENFORCEABLE_SSO,l.Feature.AUDIT_LOGS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.OFFLINE,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.SCIM,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.PWA,l.Feature.CUSTOM_APP_SCRIPTS,l.Feature.PDF,l.Feature.BUDIBASE_AI,l.Feature.RECAPTCHA]},_S={[l.PlanType.FREE]:[...Ae.CLOUD_FREE_LICENSE.features],[l.PlanType.PREMIUM]:[l.Feature.APP_BACKUPS,l.Feature.BRANDING,l.Feature.APP_BUILDERS,l.Feature.VIEW_PERMISSIONS,l.Feature.PDF],[l.PlanType.PREMIUM_PLUS]:[l.Feature.APP_BACKUPS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.BUDIBASE_AI,l.Feature.PDF],[l.PlanType.PREMIUM_PLUS_TRIAL]:[l.Feature.APP_BACKUPS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.BUDIBASE_AI,l.Feature.PDF],[l.PlanType.PRO]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS,l.Feature.BRANDING],[l.PlanType.TEAM]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS,l.Feature.BRANDING],[l.PlanType.BUSINESS]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.AUDIT_LOGS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.BUDIBASE_AI,l.Feature.PDF],[l.PlanType.ENTERPRISE_BASIC]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.ENFORCEABLE_SSO,l.Feature.AUDIT_LOGS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.OFFLINE,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.SCIM,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.BUDIBASE_AI,l.Feature.PWA,l.Feature.CUSTOM_APP_SCRIPTS,l.Feature.PDF,l.Feature.RECAPTCHA],[l.PlanType.ENTERPRISE_BASIC_TRIAL]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.ENFORCEABLE_SSO,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.SCIM,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.BUDIBASE_AI,l.Feature.PWA,l.Feature.CUSTOM_APP_SCRIPTS,l.Feature.PDF,l.Feature.RECAPTCHA],[l.PlanType.ENTERPRISE]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.ENFORCEABLE_SSO,l.Feature.AUDIT_LOGS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.SCIM,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.BUDIBASE_AI,l.Feature.PWA,l.Feature.CUSTOM_APP_SCRIPTS,l.Feature.PDF,l.Feature.RECAPTCHA]};function _o(e,t){let r=[];function a(n){let o=n[t];if(!o)throw new Error(`Features do not exist for planType=${t} and hosting=${e}`);return o}switch(e){case l.Hosting.SELF:r=a(RS);break;case l.Hosting.CLOUD:r=a(_S);break}return r}var Xa={};w(Xa,{UNLIMITED:()=>d,getQuotas:()=>xo});var k=require("@budibase/types");var c=et,Tp=Ae,d=-1,Hr=e=>e*1e6,xS={[k.PlanType.FREE]:{...Tp.CLOUD_FREE_LICENSE.quotas},[k.PlanType.PREMIUM]:{usage:{monthly:{...c.queries(d),...c.automations(1e3),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(1e4),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(0),...c.plugins(d),...c.customAIConfigurations(0)}},constant:{...c.automationLogRetentionDays(7),...c.appBackupRetentionDays(7)}},[k.PlanType.PREMIUM_PLUS]:{usage:{monthly:{...c.queries(d),...c.automations(5e3),...c.budibaseAICredits(Hr(2)),...c.actions(d)},static:{...c.rows(25e3),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(0),...c.plugins(d),...c.customAIConfigurations(1)}},constant:{...c.automationLogRetentionDays(30),...c.appBackupRetentionDays(30)}},[k.PlanType.PREMIUM_PLUS_TRIAL]:{usage:{monthly:{...c.queries(d),...c.automations(5e3),...c.budibaseAICredits(Hr(2)),...c.actions(d)},static:{...c.rows(25e3),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(0),...c.plugins(d),...c.customAIConfigurations(1)}},constant:{...c.automationLogRetentionDays(30),...c.appBackupRetentionDays(30)}},[k.PlanType.PRO]:{usage:{monthly:{...c.queries(d),...c.automations(1e3),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(5),...c.plugins(d),...c.customAIConfigurations(0)}},constant:{...c.automationLogRetentionDays(7),...c.appBackupRetentionDays(7)}},[k.PlanType.TEAM]:{usage:{monthly:{...c.queries(d),...c.automations(5e3),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(10),...c.plugins(d),...c.customAIConfigurations(0)}},constant:{...c.automationLogRetentionDays(30),...c.appBackupRetentionDays(90)}},[k.PlanType.BUSINESS]:{usage:{monthly:{...c.queries(d),...c.automations(1e4),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(5e4),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(50),...c.plugins(d),...c.customAIConfigurations(0)}},constant:{...c.automationLogRetentionDays(365),...c.appBackupRetentionDays(365)}},[k.PlanType.ENTERPRISE_BASIC]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(Hr(4)),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(d),...c.plugins(d),...c.customAIConfigurations(d)}},constant:{...c.automationLogRetentionDays(d),...c.appBackupRetentionDays(d)}},[k.PlanType.ENTERPRISE_BASIC_TRIAL]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(Hr(4)),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(d),...c.plugins(d),...c.customAIConfigurations(d)}},constant:{...c.automationLogRetentionDays(15),...c.appBackupRetentionDays(15)}},[k.PlanType.ENTERPRISE]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(Hr(4)),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(d),...c.plugins(d),...c.customAIConfigurations(d)}},constant:{...c.automationLogRetentionDays(d),...c.appBackupRetentionDays(d)}}},CS={[k.PlanType.FREE]:{...Tp.SELF_FREE_LICENSE.quotas},[k.PlanType.PREMIUM]:void 0,[k.PlanType.PREMIUM_PLUS]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(0),...c.plugins(d),...c.customAIConfigurations(1)}},constant:{...c.automationLogRetentionDays(30),...c.appBackupRetentionDays(30)}},[k.PlanType.PREMIUM_PLUS_TRIAL]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(0),...c.plugins(d),...c.customAIConfigurations(1)}},constant:{...c.automationLogRetentionDays(30),...c.appBackupRetentionDays(30)}},[k.PlanType.PRO]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(5),...c.plugins(d),...c.customAIConfigurations(0)}},constant:{...c.automationLogRetentionDays(7),...c.appBackupRetentionDays(7)}},[k.PlanType.TEAM]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(10),...c.plugins(d),...c.customAIConfigurations(0)}},constant:{...c.automationLogRetentionDays(30),...c.appBackupRetentionDays(90)}},[k.PlanType.BUSINESS]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(50),...c.plugins(d),...c.customAIConfigurations(0)}},constant:{...c.automationLogRetentionDays(90),...c.appBackupRetentionDays(365)}},[k.PlanType.ENTERPRISE_BASIC]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(d),...c.plugins(d),...c.customAIConfigurations(d)}},constant:{...c.automationLogRetentionDays(d),...c.appBackupRetentionDays(d)}},[k.PlanType.ENTERPRISE_BASIC_TRIAL]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(d),...c.plugins(d),...c.customAIConfigurations(d)}},constant:{...c.automationLogRetentionDays(15),...c.appBackupRetentionDays(15)}},[k.PlanType.ENTERPRISE]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(d),...c.plugins(d),...c.customAIConfigurations(d)}},constant:{...c.automationLogRetentionDays(d),...c.appBackupRetentionDays(d)}}};function xo(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(CS);break;case k.Hosting.CLOUD:r=a(xS);break}return JSON.parse(JSON.stringify(r))}var Vt={};w(Vt,{appExists:()=>OS,encoding:()=>Kt});var Ep=require("@budibase/backend-core");async function OS(e){return(await Ep.db.getAllApps({all:!0,idsOnly:!0})).includes(e)}var Kt={};w(Kt,{base64ToObject:()=>PS,objectToBase64:()=>LS});function LS(e){let t=JSON.stringify(e);return Buffer.from(t).toString("base64")}function PS(e){let t=Buffer.from(e,"base64").toString();return JSON.parse(t)}var uf=require("@budibase/types"),sr=require("@budibase/backend-core"),pf=P(Gl()),cf=P(rs());async function ix(e){await ve.save({offlineLicenseToken:e}),await Ct()}async function ux(){await ve.save({offlineLicenseToken:void 0}),await Ct()}async function lf(){return(await ve.get()).offlineLicenseToken}async function as(){let t=(await sr.installation.getInstall()).installId,r=sr.context.getTenantId(),a=await sr.events.identification.getUniqueTenantId(r);return{installId:t,tenantId:a}}async function px(){let e=await as();return Kt.objectToBase64(e)}function cx(e){return Kt.base64ToObject(e)}function df(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 ff(e){let t=await as();if(e.identifier.installId!==t.installId||e.identifier.tenantId!==t.tenantId)throw new Error("Invalid offline license")}function mf(e){let t=e.plan.type,r=uf.Hosting.SELF,a=_o(r,t),n=xo(r,t);return e.features=(0,pf.default)(e.features,a),e.quotas=(0,cf.default)(e.quotas,n),e}async function ns(){try{let e=await lf();if(e){let t=await Vr(e);return df(t),await ff(t),mf(t)}}catch(e){console.error("Error retrieving offline license",e)}}var ma={};w(ma,{deleteDevLicense:()=>gx,getOfflineLicense:()=>fx,writeDevLicenseToDisk:()=>mx});var gf=require("@budibase/backend-core"),ss=require("path"),hf=require("os"),Ot=P(require("fs"));var lx=gf.env.isTest()?".budibase-test":".budibase",os=(0,ss.join)((0,hf.tmpdir)(),lx),dx="dev_license.txt",fa=(0,ss.join)(os,dx);if(!Ot.default.existsSync(os))try{Ot.default.mkdirSync(os)}catch{}function fx(){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 mx(e){console.log(`Writing license to: ${fa}`),Ot.default.writeFileSync(fa,e,{encoding:"utf-8"})}function gx(){Ot.default.rmSync(fa,{force:!0})}var yf=require("dd-trace"),us=async()=>await yf.tracer.trace("getLicense",async e=>{if(is.env.OFFLINE_MODE)return e.addTags({offline:!0}),ns();let t=await $t();return t||(e.addTags({offlineFallback:!0}),t=ma.getOfflineLicense()),t}),ps=e=>Eo(e),cs=()=>is.env.SELF_HOSTED?Ae.SELF_FREE_LICENSE:Ae.CLOUD_FREE_LICENSE;var ds={};w(ds,{activateLicenseKey:()=>hx,deleteLicenseKey:()=>yx,getLicenseKey:()=>gn});var ls=P(require("dd-trace"));async function hx(e){await vo(e),await ve.save({licenseKey:e}),await Ct()}async function gn(){return await ls.default.trace("getLicenseKey",async e=>{let t=await ve.get();return e.addTags({licenseKey:t.licenseKey}),t.licenseKey})}async function yx(){return await ls.default.trace("deleteLicenseKey",async()=>{await ve.save({licenseKey:void 0}),await Ct()})}var Lt=require("@budibase/backend-core"),hn=P(require("dd-trace")),Af=3600,Ct=async()=>{await Sf(),await If()},bf=async(e,t)=>{let{populateLicense:r=us,populateFreeLicense:a=cs}=t||{};return await hn.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 uo(),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 hn.default.trace("populateLicense",async()=>await r(s)),n.addTags({populatedLicense:!!p}),p||(p=hn.default.trace("populateFreeLicense",()=>a(e,s)),n.addTags({populatedFreeLicense:!!p})),p.refreshedAt=new Date().toISOString(),n.addTags({refreshedAt:p.refreshedAt,features:p.features,plan:p.plan,quotas:p.quotas,expirySeconds:Af}),await i.store(s,p,Af),p)})};Lt.env.isJest()&&(bf=jest.fn());var If=bf,Sf=async()=>{let e=Lt.tenancy.getTenantId();await(await uo()).delete(e)};async function se(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 yn(e,t){if(!await se(e,t))throw new tt.FeatureDisabledError(`${e} is not currently enabled`,e)}async function fs(e,t){if(!await se(e,t)){let r=e.join(", ");throw new tt.FeatureDisabledError(`${r} are not currently enabled`,r)}}function fe(e){return async(...t)=>(await yn(oe.Feature.APP_BACKUPS),e(...t))}async function ms(){return se(oe.Feature.APP_BACKUPS)}async function gs(){return se(oe.Feature.BRANDING)}async function wf(){return se(oe.Feature.ENFORCEABLE_SSO)}async function bx(){return se(oe.Feature.SYNC_AUTOMATIONS)}async function Ix(){return se(oe.Feature.TRIGGER_AUTOMATION_RUN)}async function Pt(){return se(oe.Feature.APP_BUILDERS)}async function An(){return se(oe.Feature.AUDIT_LOGS)}async function hs(){return se(oe.Feature.USER_GROUPS)}function Sx(){return se(oe.Feature.PWA)}function wx(){return se(oe.Feature.RECAPTCHA)}async function rt(){return se(oe.Feature.EXPANDED_PUBLIC_API)}async function Tx(e){if(tt.env.ENABLE_SSO_MAINTENANCE_MODE||!await wf())return!1;let r;return e?.config?r=e.config:r=await tt.configs.getSettingsConfig(),!!r.isSSOEnforced}var ys=async()=>{let e=oe.Feature.SCIM,t=await se(e),r=await tt.configs.getSCIMConfig();if(!t||!r?.enabled)throw new tt.FeatureDisabledError(`${e} is not currently enabled`,e);return!0};async function Ex(){return se(oe.Feature.VIEW_PERMISSIONS)}async function vx(){return se(oe.Feature.VIEW_READONLY_COLUMNS)}var Rx={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 _x(e){return await gs()?{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}:Rx}var bs={};w(bs,{enrichAIConfig:()=>As});var Tf=require("@budibase/backend-core"),xx="budibase_ai";async function As(e){if(Tf.env.SELF_HOSTED)return e;for(let t of Object.values(e.config))if(t.provider==="BudibaseAI")return e;return e.config[xx]={provider:"BudibaseAI",active:!0,isDefault:Object.keys(e.config).every(t=>!e.config[t].isDefault),defaultModel:process.env.BUDIBASE_AI_DEFAULT_MODEL||"gpt-4o-mini",name:"Budibase AI"},e}var ze={};w(ze,{addAction:()=>Ux,addApp:()=>qx,addAutomation:()=>Gx,addGroup:()=>Ss,addPlugin:()=>Ts,addRow:()=>Nx,addRows:()=>Mx,addUsers:()=>wn,bustCache:()=>go,decrement:()=>at,decrementMany:()=>ga,getCurrentUsageValues:()=>Ju,getLicensedQuota:()=>vf,getQuotaUsage:()=>Et,increment:()=>Ie,incrementBudibaseAICredits:()=>En,incrementMany:()=>qt,removeApp:()=>Dx,removeGroup:()=>ws,removePlugin:()=>Es,removeRow:()=>Bx,removeRows:()=>kx,removeUsers:()=>cr,set:()=>Is,setAllUsage:()=>yo,setAppUsageValue:()=>ho,setUsage:()=>Yu,setUsagePerApp:()=>Hu,updatePluginCount:()=>vs,updateUsage:()=>ir,usageLimitIsExceeded:()=>Px,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 Ef({change:1,name:e,type:t,opts:r}))),qt=e=>Ut.tracer.trace("quotas.incrementMany",async()=>Ef(e)),Ef=async e=>await Ut.tracer.trace("quotas.tryIncrement",async t=>{let r=Array.isArray(e)?e:[e];t.addTags({numActions:r.length}),await ir(r.map(n=>({usageChange:n.change,name:n.name,type:n.type,opts:{dryRun:!0,suppressErrorLog:n.opts?.suppressErrorLog,id:n.opts?.id}})));let a=[];for(let n of r)await 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 ir(r.map(n=>({usageChange:n.change,name:n.name,type:n.type,opts:{dryRun:!1,valueFn:n.opts?.valueFn,suppressErrorLog:n.opts?.suppressErrorLog,id:n.opts?.id}}))),a[0]}),at=(e,t,r={})=>ir({usageChange:-1,name:e,type:t,opts:r}),ga=e=>{let t=Array.isArray(e)?e:[e];return ir(t.map(r=>({usageChange:-r.change,name:r.name,type:r.type,opts:r.opts})))},Is=async(e,t,r)=>We.setUsage(r,e,t),Cx=(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]||{}:{}}},Ox=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 ft.triggerQuota(n)})}catch(n){ke.logging.logAlert("Error triggering quota",n)}},Lx=async(e,t,r,a)=>{let n=await Et(),o=e===z.QuotaUsageType.MONTHLY?n.quotaReset:void 0,s=await Cx(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 h=i[f+1]||100;(!(p>=h)||p===m)&&await Ox(t,a,p,o)}}else s[m]=void 0;return s},ir=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 h of a)await Ut.tracer.trace("quotas.updateUsage.action",async I=>{I.addTags({actionName:h.name,actionType:h.type,actionUsageChange:h.usageChange});try{n=ke.context.getAppId()}catch{}if(z.APP_QUOTA_NAMES.includes(h.name)&&!n)throw new Error("App context required for quota update");try{o=await vf(z.QuotaType.USAGE,h.name,h.type),s.push(o);let{total:_,app:R,breakdown:v}=await We.getCurrentUsageValues(h.type,h.name,h.opts?.id);_+=h.usageChange,R!=null&&(R+=h.usageChange),v!=null&&(v+=h.usageChange);let U={};if(h.opts?.dryRun||(U=await Lx(h.type,h.name,_,o),m={...m,[h.name]:U}),o.value!==et.UNLIMITED&&_>o.value&&h.usageChange>0)throw new ke.UsageLimitError(`Licensed ${o.name} of ${o.value} has been exceeded`,o.name);if(_=Math.max(0,_),R&&(R=Math.max(0,R)),v&&(v=Math.max(0,v),f={...f,[h.name]:v}),!h.opts?.dryRun){let qe=h.opts?.valueFn;qe&&(_=await qe(),R=_),i={...i,[h.name]:_},p={...p,[h.name]:R}}}catch(_){throw h.opts?.suppressErrorLog||console.error(`Error updating usage quotas for ${h.name}`,_),_}});let g=a.filter(h=>!h.opts?.dryRun).map(h=>({name:h.name,type:h.type,values:{total:i[h.name],app:p[h.name],breakdown:f[h.name],triggers:m[h.name]},opts:{...h.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")},Px=async({name:e,type:t,usageChange:r})=>{try{return await ir({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 Ux=async e=>Ie(In.MonthlyQuotaName.ACTIONS,In.QuotaUsageType.MONTHLY,{fn:e});var ur=require("@budibase/types"),Rf=require("@budibase/backend-core"),_f=async()=>{let e=await Rf.db.getAllApps({dev:!0});return e?e.length:0},qx=async(e,{appId:t}={})=>Ie(ur.StaticQuotaName.APPS,ur.QuotaUsageType.STATIC,{fn:e,valueFn:_f,id:t}),Dx=async({appId:e}={})=>at(ur.StaticQuotaName.APPS,ur.QuotaUsageType.STATIC,{valueFn:_f,id:e});var Ye=require("@budibase/types"),Nx=async(e,{tableId:t}={})=>Ie(Ye.StaticQuotaName.ROWS,Ye.QuotaUsageType.STATIC,{fn:e,id:t}),Bx=async({tableId:e}={})=>at(Ye.StaticQuotaName.ROWS,Ye.QuotaUsageType.STATIC,{id:e}),Mx=async(e,t,{tableId:r}={})=>qt({change:e,name:Ye.StaticQuotaName.ROWS,type:Ye.QuotaUsageType.STATIC,opts:{fn:t,id:r}}),kx=async(e,{tableId:t}={})=>ga({change:e,name:Ye.StaticQuotaName.ROWS,type:Ye.QuotaUsageType.STATIC,opts:{id:t}});var Sn=require("@budibase/types"),Gx=async(e,{automationId:t}={})=>Ie(Sn.MonthlyQuotaName.AUTOMATIONS,Sn.QuotaUsageType.MONTHLY,{fn:e,id:t});var pr=require("@budibase/types"),Ss=async e=>Ie(pr.StaticQuotaName.USER_GROUPS,pr.QuotaUsageType.STATIC,{fn:e}),ws=async()=>at(pr.StaticQuotaName.USER_GROUPS,pr.QuotaUsageType.STATIC);var yt=require("@budibase/types"),Ts=async e=>Ie(yt.StaticQuotaName.PLUGINS,yt.QuotaUsageType.STATIC,{fn:e}),Es=async()=>at(yt.StaticQuotaName.PLUGINS,yt.QuotaUsageType.STATIC),vs=async e=>Is(yt.StaticQuotaName.PLUGINS,yt.QuotaUsageType.STATIC,e);var He=require("@budibase/types"),ha=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:ha.users.getUserCount}}];t>0&&a.push({change:t,name:He.StaticQuotaName.CREATORS,type:He.QuotaUsageType.STATIC,opts:{valueFn:ha.users.getCreatorCount}});let n=await qt(a);return await $t(),n},cr=async(e,t)=>{let r=[{change:e,name:He.StaticQuotaName.USERS,type:He.QuotaUsageType.STATIC,opts:{valueFn:ha.users.getUserCount}}];t>0&&r.push({change:t,name:He.StaticQuotaName.CREATORS,type:He.QuotaUsageType.STATIC,opts:{valueFn:ha.users.getCreatorCount}}),await ga(r),await $t()};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:()=>$x,db:()=>xe,removeAppBuilder:()=>Kx});var Aa=require("@budibase/backend-core");var j={};w(j,{addAppBuilder:()=>Cs,addUsers:()=>Rn,adjustGroupCreatorsQuotas:()=>Wx,cleanupApp:()=>jx,enrichUserRolesFromGroups:()=>Qx,fetch:()=>ya,get:()=>At,getBulk:()=>qf,getGroupBuilderAppIds:()=>Uf,getGroupRoleId:()=>Fx,remove:()=>Rs,removeAppBuilder:()=>Os,removeUsers:()=>_s,save:()=>lr,updateGroupApps:()=>xs});var x=require("@budibase/backend-core");var xf=require("@budibase/backend-core"),vn=class extends xf.HTTPError{constructor(t){super(`Group name "${t}" is unavailable`,409)}};async function Lf(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 Pf(e,t){return t?t=t.filter(r=>e.includes(r._id)):t=await M.getBulk(e,{enriched:!1}),t}async function Uf(e,t){if(!e.userGroups)return[];let r=await Pf(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 Fx(e,t,r){if(!e.userGroups)return null;let a=await Pf(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 Lf(a,t))}async function Qx(e){if(!e||!e.userGroups)return e;let t=await qf(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 Lf(t,n);o&&(e.roles[n]=o)});let a=await Uf(e,{groups:t});if(a.length&&!e.builder?.global){let n=e.builder?.apps||[];e.builder={apps:n.concat(a)}}return e}async function ya(){return await M.fetch()}async function At(e){return await M.get(e)}async function qf(e,t={enriched:!0}){return await M.getBulk(e,t)}async function Cf(e){if(await M.getByName(e))throw new vn(e)}async function Of(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 lr(e){let t=[],r=!e._id,a=0;if(delete e.users,!e._id)e._id=M.generateUserGroupID(),await Cf(e.name),t.push(x.events.group.created(e));else{let o=await M.get(e._id);if(o.name!==e.name&&await Cf(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 Of(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 Ss(n);{let o=await n();if(a>0)await wn(0,a);else if(a<0){let s=await Of(e),i=Math.abs(a)-s;i>0&&await cr(0,i)}return o}}async function Rs(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,h=i.length-g;h&&(n=()=>cr(0,h))}let o=await M.destroy(e,t);return await x.events.group.deleted(r),await ws(),await n(),o}async function Rn(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 _s(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 cr(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 xs(e,t){let r=await At(e);if(r.roles||(r.roles={}),t.appsToAdd)for(let a of t.appsToAdd)r.roles[a.appId]=a.roleId;if(t.appsToRemove)for(let a of t.appsToRemove)delete r.roles[a.appId];return await lr(r)}async function jx(e){let t=await ya(),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 Cs(e,t){if(!await Pt())throw new Error("Feature not enabled, please check license");let r=x.db.getProdAppID(t),a=await At(e);a.builder??={apps:[]},a.builder.apps.includes(t)||(a.builder.apps.push(r),await lr(a))}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 At(e);a.builder?.apps.includes(t)&&(a.builder.apps=a.builder.apps.filter(n=>n!==r),await lr(a))}async function Wx(){if(!await hs()){let e=x.tenancy.getGlobalDB(),r=(await ya()||[]).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 cr(0,f)}}}Aa.users.UserDB.init(ze,j,Me);var xe=Aa.users.UserDB;async function $x(e,t){if(!await Pt())throw new Error("Feature not enabled, please check license");await Aa.users.addAppBuilder(e,t)}async function Kx(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:()=>Bs});var Bs={};w(Bs,{logSearch:()=>tC,oldestLogDate:()=>Ff,storeLog:()=>rC});var Gf=require("@budibase/types"),xn=require("@budibase/backend-core");var _n=require("@budibase/types");var Z=require("@budibase/backend-core");var Df=require("@budibase/backend-core");async function Nf(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||Df.logging.logWarn(`Failed to backoff: ${t}`,r),o}var{SEPARATOR:ot,UNICODE_MAX:Vx,DocumentType:Bf,AutomationViewMode:Ls,ViewName:Yx,getQueryIndex:Hx}=Z.db,zx=new Date(0).toISOString(),Jx=100,Ps=async()=>Ka(_n.ConstantQuotaName.AUTOMATION_LOG_RETENTION_DAYS);function Mf(e,t,{status:r,automationId:a}={},n={}){let o=a?`${a}${ot}`:"",s=r?`${r}${ot}`:"",i;return r&&a?i=`${Ls.ALL}${ot}${s}${o}`:r?i=`${Ls.STATUS}${ot}${s}`:a?i=`${Ls.AUTOMATION}${ot}${o}`:i=`${Bf.AUTOMATION_LOG}${ot}`,{...n,descending:!0,startkey:`${i}${t}${Vx}`,endkey:`${i}${e}`}}function Xx(e,t,r){return`${Bf.AUTOMATION_LOG}${ot}${e}${ot}${r}${ot}${t}`}async function Us(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=Mf(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 qs(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=Mf(e,t,o,{include_docs:!0,limit:9+1});r?.page&&(s.startkey=r.page),n=await a.query(Hx(Yx.AUTOMATION_LOGS),s)}catch(o){if(o!=null&&(o.name==="not_found"||o.error==="not_found"))return await up(),qs(e,t,r);throw o}return Or(n,{paginate:!0,pageSize:9})}async function kf(e,t){let r=Z.context.getProdAppDB(),a=e._id,n=e.name,o=new Date().toISOString(),s=Xx(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 Ds(e,{clearing:t}={clearing:!1}){let r=Z.context.getProdAppDB();await Nf(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 Zx(){let e=await Ps();try{return await Us(zx,e,{docs:!1,paginate:!1,limit:Jx})}catch{return{data:[],hasNextPage:!1}}}async function Ns(){let e=Z.context.getProdAppDB();try{let t=await Zx();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 Ds(a,{clearing:!0})}catch(t){Z.logging.logAlert(`Failed to cleanup automation log history - Database "${e.name}"`,t)}}var Ff=Ps;async function eC(e,t,r,a){let n,o=new Date().toISOString(),s=await Ff();return(!e||e<s)&&(e=s),r||t?n=await qs(e,o,{automationId:r,status:t,page:a}):n=await Us(e,o,{status:t,page:a,docs:!0,paginate:!0}),n}async function tC(e){return await Ns(),await eC(e.startDate,e.status,e.automationId,e.page)}async function rC(e,t){if(!xn.db.isProdAppID(xn.context.getAppId()))return;let r=await kf(e,t);t.status===Gf.AutomationStatus.ERROR&&await Ds([r]),await Ns()}var On={};w(On,{checkPluginQuotas:()=>oC,deletePlugin:()=>nC,storePlugin:()=>aC});var $f=require("@budibase/types"),J=require("@budibase/backend-core");var Qf=P(require("fs")),jf=require("path");function Wf(e,t){return Qf.default.readFileSync((0,jf.join)(e,t),"utf8")}async function aC(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===$f.PluginType.DATASOURCE){let js=Wf(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 Ts(write)}async function nC(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 Es()}catch(r){let a=r?.message?r?.message:r;throw new Error(`Failed to delete plugin: ${a}`)}}async function oC(){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:()=>iC,fetchValues:()=>uC,isEncryptionKeyAvailable:()=>sC,isValid:()=>Yf,remove:()=>cC,update:()=>pC});var ba=require("@budibase/types"),Kf=require("@budibase/backend-core");function sC(){return!!Kf.env.ENCRYPTION_KEY}async function iC(){let e=await _t.get();return Object.keys(e.variables)}async function uC(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 Vf(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 pC(e,t){if(Yf(e))await Vf(a=>(a[e]=t,a));else throw new Error("Variable name has characters that are not allowed")}async function cC(e){await Vf(t=>(delete t[e],t))}function Yf(e){return/^[a-zA-Z0-9-_]+$/.test(e)}var bt={};w(bt,{definitions:()=>SC,download:()=>IC,fetch:()=>bC,write:()=>yC});var Pn=require("@budibase/types");var V=require("@budibase/backend-core"),Ge=require("@budibase/types");var Hf=require("memorystream"),zf=new V.sql.Sql(Ge.SqlClient.SQL_LITE);async function lC(e,t,r){let a={operation:Ge.Operation.READ,table:Wt.searchTable(),tables:{},paginate:{limit:r||9,page:t},filters:e,resource:{fields:[]},sort:{timestamp:{direction:Ge.SortOrder.DESCENDING,type:Ge.SortType.STRING}}},n=zf._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 dC(e){return`${V.DocumentType.AUDIT_LOG}${V.SEPARATOR}${e}${V.SEPARATOR}${V.utils.newid()}`}async function Jf(e){e._id||(e._id=dC(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 Ms(e,t,r){t||(t=1);let a=V.context.getAuditLogsDB();try{let n=9+1,o=await lC(e,t,n),s=Wt.searchTable(),i=zf.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 fC(),await Xu(),await Ms(e,t,{isRetry:!0});throw n}}async function fC(){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 Xf(e){let t=V.context.getAuditLogsDB(),r=new Hf,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 Hf;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"),gC=Sa.constants.MIN_VALID_DATE.toISOString(),hC=Sa.constants.MAX_VALID_DATE.toISOString();function ks(e){return(e.startDate||e.endDate)&&(e.startDate=e.startDate||gC,e.endDate=e.endDate||hC),e}async function Zf(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=ks(e),t.range={timestamp:{high:e.endDate,low:e.startDate}}),Object.keys(t).length===0&&(t.notEmpty={event:!0}),t}function Gs(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 Fs(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 em(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=Fs(r)),a}async function yC(e,t,r){if(!await An()||!me.utils.isAudited(e))return;let a=em(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 Jf(o)}async function AC(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||Gs(i.userId,"user",i.fallback)};i.appId&&(m.app=f||Gs(i.appId,"app",i.fallback)),s.push(m)}return s}async function bC(e){if(!await An())throw new Error("Audit logs not available - license required.");let t=await Zf(e);if(typeof e.bookmark=="string")throw new Error("String based bookmark not supported.");let r=await Ms(t,e.bookmark);return{hasNextPage:r.hasNextPage,bookmark:r.bookmark,data:await AC(r.rows)}}function IC(e){return e=ks(e),Xf(e)}function SC(){let e=Object.entries(Pn.AuditedEventFriendlyName).filter(r=>r[1]!=null),t={};for(let r of e)t[r[0]]=Fs(r[1]);return t}var Un={};w(Un,{applications:()=>Ks,roles:()=>Ws,users:()=>Qs});var Qs={};w(Qs,{roleCheck:()=>TC});function wC(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 TC(e,t){return await rt()||wC(e,t),e}var Ws={};w(Ws,{assign:()=>EC,unAssign:()=>vC});var wa=require("@budibase/backend-core");async function EC(e,t){if(!await rt())throw new Error("Unable to assign roles - license required.");let r=await xe.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 xe.bulkUpdate(r)}async function vC(e,t){if(!await rt())throw new Error("Unable to un-assign roles - license required.");let r=await xe.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 Ks={};w(Ks,{buildExportFn:()=>_C,buildImportFn:()=>RC});var $s=require("@budibase/backend-core");function RC(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 $s.context.doInAppContext(t.params.appId,async()=>{await e(t),t.body=void 0,t.status=204,await r()})}}function _C(e){return async(t,r)=>{await rt()||t.throw(403,"Endpoint unavailable, license required.");let{encryptPassword:a,excludeRows:n}=t.request.body;await $s.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 re=require("@budibase/backend-core"),te=require("@budibase/types");var Vs=require("@budibase/backend-core"),tm;function rm(){tm=new Vs.queue.BudibaseQueue(Vs.queue.JobQueue.APP_BACKUP,{maxStalledCount:3,jobOptions:{attempts:3,removeOnFail:!0,removeOnComplete:!0}})}function Dt(){return tm}var am=require("path"),nm=P(require("fs"));async function Ys(e,t={}){return Re.storeAppBackupMetadata(e,t)}function om(e){let t=new Date().toISOString();switch(e){case te.AppBackupStatus.COMPLETE:case te.AppBackupStatus.FAILED:return{timestamp:t,finishedAt:t};case te.AppBackupStatus.STARTED:return{timestamp:t,startedAt:t};case te.AppBackupStatus.PENDING:return{timestamp:t,createdAt:t}}}async function xC(e,t,r,a){let n=await qn(e);return await Re.storeAppBackupMetadata({...n,...om(t),contents:r,status:t,type:te.AppBackupType.BACKUP},{filename:a,docId:e})}async function CC(e,t,r){let a=await qn(e);return await Re.storeAppBackupMetadata({...a,...om(r),status:r,type:te.AppBackupType.RESTORE,trigger:te.AppBackupTrigger.MANUAL},{docId:e,docRev:t})}async function qn(e){return Re.getAppBackupMetadata(e)}async function OC(e,t){return Re.updateAppBackupMetadata(e,t)}async function LC(e){let t=await Re.getAppBackupMetadata(e);return t.filename&&await re.objectStore.deleteFile(re.objectStore.ObjectStoreBuckets.BACKUPS,t.filename),Re.deleteAppBackupMetadata(e)}async function PC(e,t){return Re.fetchAppBackups(e,t)}async function sm(e){let t=await Re.getAppBackupMetadata(e);if(!t.filename)throw new Error("Backup incomplete - cannot download.");let r=await re.objectStore.getReadStream(re.objectStore.ObjectStoreBuckets.BACKUPS,t.filename);return{metadata:t,stream:r}}async function UC(e){let{stream:t}=await sm(e),r=(0,am.join)(re.objectStore.budibaseTempDir(),re.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 qC(e,t,r={}){let a;try{a=await Ys({appId:e,trigger:t,timestamp:new Date().toISOString(),status:te.AppBackupStatus.PENDING,type:te.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 re.events.backup.appBackupTriggered(e,a.id,te.AppBackupType.BACKUP,t,r?.name),a.id}async function DC(e,t,r,a){let n=await qn(t),o;try{o=await Ys({appId:e,timestamp:new Date().toISOString(),status:te.AppBackupStatus.PENDING,type:te.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 NC(e,t,r){let a=re.db.getProdAppID(e);await re.context.doInAppContext(a,async()=>{let n=re.context.getProdAppDB();if(!await n.exists())return;let s=await n.tryGet(te.DocumentType.APP_METADATA);s&&(s.backupErrors||(s.backupErrors={}),s.backupErrors[t]||(s.backupErrors[t]=[]),s.backupErrors[t].push(r),await n.put(s),await re.cache.app.invalidateAppMetadata(s.appId,s))})}var BC={isEnabled:ms,triggerAppRestore:fe(DC),triggerAppBackup:fe(qC),getBackupDownloadStream:fe(sm),downloadAppBackup:fe(UC),fetchAppBackups:fe(PC),storeAppBackupMetadata:fe(Ys),updateBackupStatus:fe(xC),updateRestoreStatus:fe(CC),getAppBackup:fe(qn),updateAppBackup:fe(OC),deleteAppBackup:fe(LC),trackBackupError:fe(NC)},Ce=BC;var zs={};w(zs,{init:()=>Hs});var W=require("@budibase/backend-core");var Fe=require("@budibase/types");var dr=P(require("fs"));async function Hs(e){Dt().process(async t=>{let r=t.data;try{if(r.export)return console.log("Exporting app backup:",r.appId,r.export.trigger),GC(t,e);if(r.import)return console.log("Importing app backup:",r.appId,r.import.backupId),kC(t,e)}catch(a){W.logging.logAlert(`Failed to perform backup for app ID: ${r.appId}`,a)}})}async function MC(e){await W.db.getDB(e,{skip_setup:!0}).destroy()}async function im(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 Ce.updateBackupStatus(a.doc.id,p,f?.contents,f?.filename):await Ce.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,h=dr.default.createReadStream(p);await W.objectStore.streamUpload({bucket:g,filename:m,stream:h,extra:{type:"application/gzip",metadata:{name:a?.name,trigger:e,timestamp:s,appId:o}}}),await i(Fe.AppBackupStatus.COMPLETE,{filename:m,contents:f}),dr.default.existsSync(p)&&dr.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 Ce.trackBackupError(o,f,`Backup export failed: ${m}`)}}async function kC(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 Ce.updateRestoreStatus(r.docId,r.docRev,Fe.AppBackupStatus.STARTED);await im(Fe.AppBackupTrigger.RESTORING,i,a,{processing:t,createdBy:s,name:o});let g=await Ce.downloadAppBackup(n),h=Fe.AppBackupStatus.COMPLETE;try{await t.importAppFn(f,W.db.getDB(f),{file:{type:"application/gzip",path:g},key:g}),await MC(p),await new W.db.Replication({source:f,target:p}).replicate()}catch(I){W.logging.logAlert("App restore error",I),h=Fe.AppBackupStatus.FAILED;let C=I instanceof Error?I.message:String(I);await Ce.trackBackupError(a,n,`Backup restore failed: ${C}`)}finally{try{await W.db.getDB(f,{skip_setup:!0}).destroy()}catch{}}await Ce.updateRestoreStatus(r.docId,m,h),dr.default.existsSync(g)&&dr.default.rmSync(g,{force:!0})})}async function GC(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 Ce.updateBackupStatus(r.docId,Fe.AppBackupStatus.STARTED);return im(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 Ce.trackBackupError(a,r.docId,`Backup export failed: ${p}`)}})}var FC=async e=>{rm(),await Hs(e.processing)},Oe={...Ce,processing:zs,init:FC,getBackupQueue:Dt};var um=async e=>{e.backups&&await Oe.init(e.backups)};var he={};w(he,{create:()=>qM,find:()=>UM,get:()=>PM,remove:()=>NM,update:()=>DM});var OA=P(Wi()),st=require("@budibase/backend-core");var LA=require("@budibase/types");async function PM(e){let t=st.tenancy.getGlobalDB(),r=new st.db.QueryBuilder(t.name,LA.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 UM(e){return await st.users.getById(e)}async function qM(e){let t=await xe.getUserByEmail(e.email);if(t){if(t.scimInfo?.isSync)throw new st.HTTPError("User is already synched",409);e={...t,scimInfo:(0,OA.default)(t.scimInfo,e.scimInfo),password:void 0,firstName:e.firstName,lastName:e.lastName,updatedAt:e.updatedAt}}return await xe.save(e,{requirePassword:!1})}async function DM(e,t){return await xe.save(e,{requirePassword:!1,allowChangingEmail:t?.allowChangingEmail})}async function NM(e){return await xe.destroy(e)}var Ar={};w(Ar,{create:()=>BM});var PA=P(Wi());var UA=require("@budibase/backend-core");async function BM(e){let t=await bo(e.name),r;if(!t)r=(await j.save(e)).id;else{if(t.scimInfo?.isSync)throw new UA.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,PA.default)(t.scimInfo,e.scimInfo),await j.save(t)}return await j.get(r)}var Bt={};w(Bt,{logRequest:()=>MM,logResponse:()=>kM});var $i=require("@budibase/backend-core");async function MM(e){$i.logging.logWarn("SCIM request log",e)}async function kM(e){$i.logging.logWarn("SCIM response error",e)}var Ji={};w(Ji,{doInScimContext:()=>Vi,feature:()=>$,internalGroupOnly:()=>_a,licenseAuth:()=>NA,licensing:()=>qA,requireSCIM:()=>Yi,scimGroupOnly:()=>Ra,scimUserOnly:()=>va});var It=require("@budibase/backend-core");var Vn=require("@budibase/types"),GM=(e={checkUsersLimit:!0})=>async(t,r)=>{if((e.licensingCheck?e.licensingCheck:()=>!!t.user)(t)){if(It.env.SELF_HOSTED&&It.env.DEFAULT_LICENSE)return t.user.license=So,r();t.user.license=await Ve.cache.getCachedLicense(t,{populateLicense:e.populateLicense,populateFreeLicense:e.populateFreeLicense}),e.checkUsersLimit&&(It.utils.isServingApp(t)||It.utils.isServingBuilder(t)||It.utils.isServingBuilderPreview(t)||It.utils.isPublicApiRequest(t))&&await ze.usageLimitIsExceeded({name:Vn.StaticQuotaName.USERS,type:Vn.QuotaUsageType.STATIC,usageChange:0})}return r()},qA=GM;var $={};w($,{requireFeature:()=>FM,requireFeatures:()=>QM});var FM=e=>async(t,r)=>{await yn(e),await r()},QM=(...e)=>async(t,r)=>{await fs(e),await r()};var Yn=require("@budibase/backend-core");var Vi=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 Yi=async(e,t)=>{await ys(),await t()};var DA=require("@budibase/backend-core");var va=e=>Hi(DA.users.getById,e,!0),Ra=e=>Hi(M.get,e,!0),_a=e=>Hi(M.get,e,!1);function Hi(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 zi=require("dd-trace");async function NA(e,t){await zi.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"),zi.tracer.setUser({id:"anonymous",tenantId:n.tenantId}),await xa.context.doInSelfHostTenantUsingCloud(n.tenantId,async()=>{await xa.context.doInLicenseContext(n,async()=>{await t()})})})}var su={};w(su,{appBackups:()=>Eb,auditLogs:()=>mb,environmentVariables:()=>ob,groups:()=>zA,scim:()=>eI,users:()=>oI});var BA=require("@budibase/backend-core");async function MA(e){let t=e.request.body;if(t.name=t.name.trim(),delete t.roles,t._id){let a=await At(t._id);t.roles=a.roles,t.scimInfo=a.scimInfo}let r=await lr(t);e.body={_id:r.id,_rev:r.rev}}async function kA(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 Rn(t,r)),a&&(o=await _s(t,a)),e.body={added:n,removed:o}}async function GA(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 xs(t,{appsToAdd:r,appsToRemove:a})}async function FA(e){e.body={data:await ya()}}async function QA(e){let{groupId:t,rev:r}=e.params;try{await Rs(t,r),e.body={message:"Group deleted successfully"}}catch(a){e.throw(a.status,a)}}async function jA(e){try{e.body=await At(e.params.groupId)}catch(t){e.throw(t.status,t)}}async function WA(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 $A(e){let{groupId:t,appId:r}=e.params;await Cs(t,r),e.body={message:"Group app builder access updated."}}async function KA(e){let{groupId:t,appId:r}=e.params;await Os(t,r),e.body={message:"group app builder access removed."}}async function VA(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 BA.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 At(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=>xe.getUserByEmail(g)));for(let g of s){let h=m.find(I=>I?.email===g);h?(i.push({_id:h._id,email:h.email}),f.push(h._id)):p.push({email:g,reason:"User not found"})}f.length>0&&await Rn(t,f),e.body={added:i,skipped:p}}var YA=P(require("@koa/router")),ce=P(require("joi"));var Se=require("@budibase/types"),Le=require("@budibase/backend-core"),HA=new YA.default;function WM(){return Le.auth.joiValidator.body(ce.default.object({_id:ce.default.string().optional(),_rev:ce.default.string().optional(),color:ce.default.string().required(),icon:ce.default.string().required(),name:ce.default.string().trim().required().max(50),role:ce.default.string().optional(),users:ce.default.array().optional(),apps:ce.default.array().optional(),roles:ce.default.object().optional(),createdAt:ce.default.string().optional(),updatedAt:ce.default.string().optional()}).required())}HA.post("/api/global/groups",Le.auth.adminOnly,$.requireFeature(Se.Feature.USER_GROUPS),WM(),MA).get("/api/global/groups",$.requireFeature(Se.Feature.USER_GROUPS),FA).delete("/api/global/groups/:groupId/:rev",$.requireFeature(Se.Feature.USER_GROUPS),Le.auth.adminOnly,_a("groupId"),QA).get("/api/global/groups/:groupId",$.requireFeature(Se.Feature.USER_GROUPS),Le.auth.builderOrAdmin,jA).get("/api/global/groups/:groupId/users",$.requireFeature(Se.Feature.USER_GROUPS),Le.auth.builderOrAdmin,WA).post("/api/global/groups/:groupId/users",Le.auth.adminOnly,$.requireFeature(Se.Feature.USER_GROUPS),_a("groupId"),kA).post("/api/global/groups/:groupId/users/bulk",Le.auth.adminOnly,$.requireFeature(Se.Feature.USER_GROUPS),_a("groupId"),Le.auth.joiValidator.body(ce.default.object({csvContent:ce.default.string().required()}).required()),VA).post("/api/global/groups/:groupId/apps",Le.auth.builderOrAdmin,$.requireFeature(Se.Feature.USER_GROUPS),GA).post("/api/global/groups/:groupId/app/:appId/builder",Le.auth.builderOrAdmin,$.requireFeatures(Se.Feature.USER_GROUPS,Se.Feature.APP_BUILDERS),$A).delete("/api/global/groups/:groupId/app/:appId/builder",Le.auth.builderOrAdmin,$.requireFeatures(Se.Feature.USER_GROUPS,Se.Feature.APP_BUILDERS),KA);var zA=HA;var Xi=require("@budibase/types");var Zi=require("@budibase/backend-core");async function JA(e){e.body={encryptionKeyAvailable:Je.isEncryptionKeyAvailable()}}async function XA(e){e.body={variables:await Je.fetch()}}async function ZA(e){let{name:t,production:r,development:a}=e.request.body;await Je.update(t,{production:r,development:a});let n=[Xi.AppEnvironment.PRODUCTION];r!==a&&n.push(Xi.AppEnvironment.DEVELOPMENT),await Zi.events.environmentVariable.created(t,n),e.body={message:`Environment variable "${t}" created.`}}async function eb(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 tb(e){let t=e.params.varName;await Je.remove(t),await Zi.events.environmentVariable.deleted(t),e.body={message:`Environment variable "${t}" deleted.`}}var Mt=require("@budibase/backend-core"),ab=P(require("@koa/router")),Ca=P(require("joi")),nb=new ab.default;function rb(){return Mt.auth.joiValidator.body(Ca.default.object({name:Ca.default.string().optional(),production:Ca.default.string().required(),development:Ca.default.string().required()}))}nb.get("/api/env/variables/status",Mt.auth.builderOrAdmin,JA).get("/api/env/variables",Mt.auth.builderOrAdmin,XA).post("/api/env/variables",Mt.auth.builderOrAdmin,rb(),ZA).patch("/api/env/variables/:varName",Mt.auth.builderOrAdmin,rb(),eb).delete("/api/env/variables/:varName",Mt.auth.builderOrAdmin,tb);var ob=nb;var eu=require("@budibase/backend-core");async function sb(e){let t=e.request.body,r=await bt.fetch(t);await eu.events.auditLog.filtered(t),e.body=r}async function ib(e){let t=e.request.body,{stream:r}=bt.download(t);await eu.events.auditLog.downloaded(t),e.attachment(`audit-logs-${Date.now()}.log`),e.body=r}async function ub(e){e.body={events:bt.definitions()}}var cb=require("@budibase/types"),kt=require("@budibase/backend-core"),lb=P(require("@koa/router")),Pe=P(require("joi"));function pb(){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(cb.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 fb=new lb.default;fb.post("/api/global/auditlogs/search",kt.auth.adminOnly,pb(),sb).get("/api/global/auditlogs/download",kt.auth.adminOnly,kt.middleware.querystringToBody,pb(),ib).get("/api/global/auditlogs/definitions",kt.auth.adminOnly,ub);var mb=fb;var tu=require("@budibase/types");var gb=require("@budibase/backend-core");async function br(e,t){await Vt.appExists(t)||e.throw(400,`Provided app ID: ${t} - is invalid.`)}async function hb(e){let t=e.params.appId;await br(e,t);let r=e.request.body,a=e.user?._id,n=await Oe.triggerAppBackup(t,tu.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 yb(e){let t=e.params.appId;await br(e,t);let r=e.params.backupId,a=e.request.body.name,n=await Oe.triggerAppRestore(t,r,a,e.user?._id);n||e.throw(500,"Unable to start restore."),await gb.events.backup.appBackupRestored(n.metadata),e.body={restoredId:n?.restoreId,message:"Restore triggered - process starting."}}async function Ab(e){let t=e.params.appId;await br(e,t);let r=e.params.backupId;await Oe.deleteAppBackup(r),e.body={message:"Backup deleted successfully."}}async function bb(e){let t=e.params.appId;await br(e,t);let r=e.request.body;r?.trigger&&(r.trigger=r.trigger.toLowerCase(),Object.values(tu.AppBackupTrigger).includes(r.trigger)||e.throw(400,"Provided trigger is not a valid option.")),e.body=await Oe.fetchAppBackups(t,{paginate:!0,...r})}async function Ib(e){let t=e.params.appId;await br(e,t);let r=e.params.backupId,a=e.request.body;e.body=await Oe.updateAppBackup(r,a.name)}async function Sb(e){let t=e.params.appId;await br(e,t);let r=e.params.backupId,{metadata:a,stream:n}=await Oe.getBackupDownloadStream(r);e.attachment(`backup-${a.timestamp}.tar.gz`),e.body=n}var wb=P(require("@koa/router")),Gt=P(require("joi")),Hn=require("@budibase/types"),St=require("@budibase/backend-core"),Tb=new wb.default;function YM(){return St.auth.joiValidator.body(Gt.default.object({trigger:Gt.default.string().valid(...Object.values(Hn.AppBackupTrigger)),type:Gt.default.string().valid(...Object.values(Hn.AppBackupType)),startDate:Gt.default.date(),endDate:Gt.default.date(),page:Gt.default.string()}))}Tb.post("/api/apps/:appId/backups",St.auth.builderOrAdmin,hb).post("/api/apps/:appId/backups/search",St.auth.builderOrAdmin,YM(),bb).get("/api/apps/:appId/backups/:backupId/file",St.auth.builderOrAdmin,Sb).patch("/api/apps/:appId/backups/:backupId",St.auth.builderOrAdmin,Ib).delete("/api/apps/:appId/backups/:backupId",St.auth.builderOrAdmin,Ab).post("/api/apps/:appId/backups/:backupId/import",St.auth.builderOrAdmin,yb);var Eb=Tb;var Zb=P(require("@koa/router"));var zn=require("scim-patch");var Rb=require("@budibase/backend-core");function vb(e,t){let r=e.request.query[t];if(r!==void 0)return+r}var _b=async e=>{let t=vb(e,"pageSize")??20,r=vb(e,"startIndex"),a;e.request.query.filter&&(a=Y.user.userFilters(e.request.query.filter));let n=await he.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}},xb=async e=>{let{id:t}=e.params;typeof t!="string"&&e.throw(404);let r=await he.find(t);e.body=Y.user.toScimUserResponse(r)},Cb=async e=>{let t=Y.user.fromScimUser(e.request.body);try{let r=await he.create(t);e.body=Y.user.toScimUserResponse(r)}catch(r){throw r instanceof Rb.EmailUnavailableError&&e.throw(409,"Email already in use"),r}};function HM(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 Ob=async e=>{let t=await he.find(e.params.id);t||e.throw(404);let r=Y.user.toScimUserResponse(t),a=e.request.body;try{(0,zn.patchBodyValidation)(a)}catch{}if(HM(a))return ru(e);let n;try{n=(0,zn.scimPatch)(r,a.Operations)}catch{}n||e.throw(500);let o=Y.user.fromScimUser(n);await he.update(o,{allowChangingEmail:!0}),e.body=Y.user.toScimUserResponse(o)},ru=async e=>{let{id:t}=e.params;typeof t!="string"&&e.throw(404),await he.remove(t),e.status=204};var $b=P(Wb()),Kb=require("@budibase/shared-core"),Jn=require("scim-patch");var Xn=require("scim2-parse-filter");function Vb(e,t){for(let r of t.split(","))delete e[r]}var Yb=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,Xn.filter)((0,Xn.parse)(a));r=r.filter(o)}n&&r.forEach(o=>{Vb(o,n)}),e.body={schemas:["urn:ietf:params:scim:api:messages:2.0:ListResponse"],totalResults:r.length,Resources:r,startIndex:1,itemsPerPage:r.length}},Hb=async e=>{let t=Y.group.fromScimGroup(e.request.body),r=await Ar.create(t);e.body=Y.group.toScimGroupResponse(r)},zb=async e=>{let{id:t}=e.params,r=await j.get(t),a=Y.group.toScimGroupResponse(r),{excludedAttributes:n}=e.request.query;n&&Vb(a,n),e.body=a},Jb=async e=>{let{id:t}=e.params,r=await j.get(t);await j.remove(t,r._rev),e.status=204},Xb=async e=>{let{id:t}=e.params,r=await j.get(t),a=Y.group.toScimGroupResponse(r),n=e.request.body;try{(0,Jn.patchBodyValidation)(n)}catch{e.throw(400)}let{true:o,false:s}=(0,$b.default)(n.Operations,i=>i.path==="members");if(s?.length){let i=(0,Jn.scimPatch)(a,s);i||e.throw(500);let p={...Y.group.fromScimGroup(i),_rev:r._rev};await j.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 he.find(g.value));break;case"remove":case"Remove":for(let g of m)p.push(await he.find(g.value));break;case"replace":case"Replace":throw new Error("Replacing members is not allowed");default:Kb.utils.unreachable(f)}i.length&&await j.addUsers(t,i.map(f=>f._id)),p.length&&await j.removeUsers(t,p.map(f=>f._id))}e.body=Y.group.toScimGroupResponse(await j.get(t))};var Oa=require("@budibase/types"),we=new Zb.default({prefix:"/api/global/scim/v2"});we.use(Yi);we.use(Vi);we.get("/users",_b);we.get("/users/:id",va("id"),xb);we.post("/users",Cb);we.patch("/users/:id",va("id"),Ob);we.delete("/users/:id",va("id"),ru);we.get("/groups",Yb);we.post("/groups",$.requireFeature(Oa.Feature.USER_GROUPS),Hb);we.get("/groups/:id",$.requireFeature(Oa.Feature.USER_GROUPS),Ra("id"),zb);we.delete("/groups/:id",$.requireFeature(Oa.Feature.USER_GROUPS),Ra("id"),Jb);we.patch("/groups/:id",$.requireFeature(Oa.Feature.USER_GROUPS),Ra("id"),Xb);var eI=we;var aI=P(require("@koa/router"));var au=require("@budibase/backend-core");async function tI(e){let{userId:t,appId:r}=e.params,a=await nt.db.getUser(t);if(au.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 rI(e){let{userId:t,appId:r}=e.params,a=await nt.db.getUser(t);if(au.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 nu=require("@budibase/types"),ou=require("@budibase/backend-core"),nI=new aI.default;nI.post("/api/global/users/:userId/app/:appId/builder",ou.auth.builderOrAdmin,$.requireFeatures(nu.Feature.APP_BUILDERS),tI).delete("/api/global/users/:userId/app/:appId/builder",ou.auth.builderOrAdmin,$.requireFeatures(nu.Feature.APP_BUILDERS),rI);var oI=nI;var Y={};w(Y,{group:()=>uu,user:()=>iu});var iu={};w(iu,{fromScimUser:()=>Ek,toScimUserResponse:()=>Sk,userFilters:()=>vk});var Zn=require("@budibase/types"),sI=require("scim2-parse-filter"),iI=require("@budibase/backend-core"),uI=require("@budibase/shared-core"),{unreachable:Ik}=uI.utils,Sk=e=>{let{isSync:t,roles:r,...a}=e.scimInfo||{},n={...a,schemas:["urn:ietf:params:scim:schemas:core:2.0:User"],id:e._id,meta:{resourceType:"User",created:new Date(e.createdAt),lastModified:new Date(e.updatedAt)},active:e.status===Zn.UserStatus.ACTIVE};return(e.firstName||e.lastName)&&(n.name={formatted:[e.firstName,e.lastName].filter(o=>o).join(" "),familyName:e.lastName,givenName:e.firstName}),n},wk=e=>!!e?.id;function Tk(e){if(iI.utils.validEmail(e.userName))return e.userName;if(e.emails)return e.emails.find(t=>t.primary)?.value||e.emails[0]?.value}var Ek=e=>{let t=wk(e)?e:void 0,r=Tk(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:Ik(e.active)}let n,o;return e.name?.givenName?(n=e.name?.givenName,o=e.name?.familyName):n=e.displayName,{tenantId:"",_id:t?.id,userId:t?.id,email:r,firstName:n,lastName:o,scimInfo:{...e,isSync:!0},roles:{},status:a?Zn.UserStatus.ACTIVE:Zn.UserStatus.INACTIVE,createdAt:t?.meta.created.getTime(),updatedAt:t?.meta.lastModified.toISOString()}},vk=e=>{let t={equal:{}},r=(0,sI.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 uu={};w(uu,{fromScimGroup:()=>xk,toScimGroupResponse:()=>Rk});var Rk=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}))}),_k=e=>!!e?.id,xk=e=>{let t=_k(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 Pu={};w(Pu,{LLM:()=>Xe,LLMRequest:()=>K,TableGeneration:()=>Lu,agentHistoryTitleSystemPrompt:()=>kk,agentSystemPrompt:()=>Mk,aiColumnSchemas:()=>Cu,aiTableResponseToTableSchema:()=>vu,appendAIColumns:()=>Ru,classifyText:()=>lu,cleanData:()=>du,extractFileData:()=>qk,generateAIColumns:()=>Tu,generateCode:()=>Bk,generateCronExpression:()=>fu,generateData:()=>Eu,generateJs:()=>yu,generateSQL:()=>Nk,generateTables:()=>wu,generationStructure:()=>xu,getLLM:()=>Ua,getLLMConfig:()=>Su,getLLMOrThrow:()=>AI,normalizeContentType:()=>pu,parseResponseFormat:()=>to,sanitiseToolName:()=>Ck,searchWeb:()=>hu,sentimentAnalysis:()=>gu,summarizeText:()=>eo,tableDataStructuredOutput:()=>Ou,translate:()=>mu});var La=require("@budibase/types");function Ck(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 so=require("@budibase/types");var Ze=require("@budibase/backend-core"),mI=require("@budibase/types");var ro=P(require("openai"));var wt=require("@budibase/types");var pI=require("@budibase/shared-core");var Tt=P(require("dd-trace"));function cu(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||"300")}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(eo(t)))}async generateCronExpression(t){return Tt.default.trace("generateCronExpression",()=>this.prompt(fu(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 eo(cu(r,o));case wt.AIOperationEnum.CLEAN_DATA:return du(r[n]);case wt.AIOperationEnum.TRANSLATE:return mu(r[n],s);case wt.AIOperationEnum.CATEGORISE_TEXT:if(!i)throw Error("No categories provided for categorise text operation. Please provide categories.");return lu(cu(r,o),i.split(","));case wt.AIOperationEnum.SENTIMENT_ANALYSIS:return gu(r[n]);case wt.AIOperationEnum.PROMPT:return p;case wt.AIOperationEnum.SEARCH_WEB:return hu(cu(r,o));default:throw pI.utils.unreachable(a)}}async generateJs(t,r){return await Tt.default.trace("generateJs",async()=>{let{bindings:a=[],snippets:n=[]}=r||{};return await this.prompt(yu(a,n).addUserMessage(t))})}};var lI=require("@budibase/types"),Au=require("openai/helpers/zod");function to(e){if(e)return e==="text"?{type:"text"}:e==="json"?{type:"json_object"}:e}function cI(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 ro.default({apiKey:r.apiKey})}async uploadFile(r,a,n){let o=pu(n);if(lI.ImageContentTypes.includes(o.toLowerCase())){let p;if(Buffer.isBuffer(r))p=r;else{let m=[];for await(let g of r)m.push(g);p=Buffer.concat(m)}let f=p.toString("base64");return`data:${o};base64,${f}`}let s=await(0,ro.toFile)(r,a);return(await this.client.files.create({file:s,purpose:"assistants"})).id}async chatCompletion(r){let a={model:this.model,messages:r.messages,max_tokens:this.maxTokens,response_format:to(r.format)};r.tools&&r.tools.length>0&&(a.tool_choice="auto",a.tools=r.tools.map(Au.zodFunction));let n=await this.client.chat.completions.create(a),o=n.choices[0]?.message;if(o?.tool_calls){r.addMessage(o);let s=[];for(let i of o.tool_calls){let p=r.findTool(i.function.name);if(!p)throw new Error(`Tool ${i.function.name} not found in prompt tools`);let f=JSON.parse(i.function.arguments);s.push(p.handler(f).then(m=>({role:"tool",tool_call_id:i.id,content:m})).catch(m=>(console.error(`[OPENAI TOOL ERROR] Tool ${i.function.name} failed in OpenAI handler:`,m),{role:"tool",tool_call_id:i.id,content:`Error: ${m.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:cI(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:to(r.format),stream:!0};r.tools&&r.tools.length>0&&(a.tool_choice="auto",a.tools=r.tools.map(Au.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?cI(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"),dI=require("@budibase/types");var bu=require("dd-trace"),ao=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,maxTokens:this.maxTokens}).uploadFile(t,r,a)}async uploadFileSelfHost(t,r,a){let n;if(Buffer.isBuffer(t))n=t;else{let p=[];for await(let f of t)p.push(f);n=Buffer.concat(p)}let o=n.toString("base64");if(a&&dI.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 bu.tracer.trace("chatCompletionCloud",async()=>await new Ue({apiKey:ee.env.OPENAI_API_KEY,model:this.model,maxTokens:this.maxTokens}).chatCompletion(t))}async chatCompletionSelfHost(t){return await bu.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,maxTokens:this.maxTokens}).chatCompletionStream(t)}async*chatCompletionStreamSelfHost(t){try{let r=await this.chatCompletionSelfHost(t);if(r.messages.length>0){let a=r.messages[r.messages.length-1];a.content&&(yield{type:"content",content:a.content})}yield{type:"done",messages:r.messages,tokensUsed:r.tokensUsed}}catch(r){yield{type:"error",content:r.message}}}};var Pa=require("dd-trace");var Iu=P(require("@anthropic-ai/sdk"));function Ok(e){if(!e)return 0;let t=e.input_tokens;return e.output_tokens*3+t}var no=class extends Xe{constructor(r){super(r);this.client=new Iu.default({apiKey:r.apiKey})}firstTextBlock(r){for(let a of r.content)if(a.type==="text")return a.text}async 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:Ok(a.usage)}}catch(a){throw a instanceof Iu.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 gI=require("zod"),hI=require("openai/helpers/zod");var fI=require("openai"),oo=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 fI.AzureOpenAI({apiKey:t.apiKey,apiVersion:"2024-10-01-preview",baseURL:t.baseUrl})}};var yI="gpt-4o-mini",Lk={OpenAI:Ue,TogetherAI:Ue,AzureOpenAI:oo,Custom:Ue,Anthropic:no,BudibaseAI:ao};async function Pk(){return await Pa.tracer.trace("getAIConfig",async e=>{let t={type:mI.ConfigType.AI,config:{}};if(!Ze.context.isSelfHostUsingCloud()){let a=await Ze.configs.getAIConfig();a&&(t=a)}await As(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||yI,apiKey:r.apiKey,baseUrl:r.baseUrl}})}async function Uk(){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:yI,apiKey:Ze.env.OPENAI_API_KEY}})}async function Su(){return Pa.tracer.trace("getLLMConfig",async()=>await Pk()||await Uk())}async function Ua(e){return await Pa.tracer.trace("getLLM",async t=>{let{model:r,maxTokens:a}=e||{},n=await Su();if(!n){t.addTags({enabled:!1,reason:"no config found"});return}r&&(n.model=r),a&&(n.maxTokens=a);let o=Lk[n.provider];if(!o){t.addTags({enabled:!1,reason:"no provider found",provider:n.provider});return}return new o(n)})}async function AI(){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 gI.z.ZodType?this.format=(0,hI.zodResponseFormat)(t,"key"):this.format=t,this}addMessage(t){return this.messages.push(t),this}addMessages(t){return this.messages.push(...t),this}addUserMessage(t){return this.messages.push({role:"user",content:t}),this}addSystemMessage(t){return this.messages.push({role:"system",content:t}),this}static fromRequest(t){let r=new e;return t.messages&&r.addMessages(t.messages),t.format&&r.withFormat(t.format),r}};var it=require("zod");function eo(e,t){let r=`Summarize this text:
39
39
  ${e}`,a="";if(t)switch(t){case so.SummariseLength.SHORT:a="In 1-2 concise sentences, ";break;case so.SummariseLength.MEDIUM:a="In 2-3 paragraphs, ";break;case so.SummariseLength.LONG:a="In multiple detailed paragraphs, ";break}return new K().addUserMessage(`${a}${r}.
40
- Only return the summary.`)}function Uk(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(`
40
+ Only return the summary.`)}function qk(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
 
42
42
  `),n=t.startsWith("data:")?[{type:"image_url",image_url:{url:t}},{type:"text",text:r}]:[{type:"text",text:`${r}
43
43
 
44
- File ID: ${t}`}],o=qk(e),s=it.z.object({data:it.z.array(o)});return new K().addMessages([{role:"user",content:n}]).withFormat(s)}function qk(e){let t={};for(let[r,a]of Object.entries(e))if(typeof a=="string")switch(a.toLowerCase()){case"string":t[r]=it.z.string();break;case"number":t[r]=it.z.number();break;case"boolean":t[r]=it.z.boolean();break;default:t[r]=it.z.string()}else t[r]=it.z.string();return it.z.object(t)}function lu(e,t){return new K().addUserMessage(`Return the category of this text: "${e}". Based on these categories: ${t.join(", ")}. Only return the category. Do not add any extra punctuation or fix spelling mistakes. It should exactly match one of the categories. `)}function du(e){return new K().addUserMessage(`Clean the following string: "${e}". Remove any spelling mistakes or data issues. Only return the cleaned string itself and nothing else.`)}function Dk(e,t){return new K().addUserMessage(`Given the table schema:
44
+ File ID: ${t}`}],o=Dk(e),s=it.z.object({data:it.z.array(o)});return new K().addMessages([{role:"user",content:n}]).withFormat(s)}function Dk(e){let t={};for(let[r,a]of Object.entries(e))if(typeof a=="string")switch(a.toLowerCase()){case"string":t[r]=it.z.string();break;case"number":t[r]=it.z.number();break;case"boolean":t[r]=it.z.boolean();break;default:t[r]=it.z.string()}else t[r]=it.z.string();return it.z.object(t)}function lu(e,t){return new K().addUserMessage(`Return the category of this text: "${e}". Based on these categories: ${t.join(", ")}. Only return the category. Do not add any extra punctuation or fix spelling mistakes. It should exactly match one of the categories. `)}function du(e){return new K().addUserMessage(`Clean the following string: "${e}". Remove any spelling mistakes or data issues. Only return the cleaned string itself and nothing else.`)}function Nk(e,t){return new K().addUserMessage(`Given the table schema:
45
45
  ${t}
46
46
 
47
47
  Generate a SQL query for the following request:
48
48
  ${e}.
49
- Only provide the SQL.`)}function Nk(e){return new K().addUserMessage(`Generate JavaScript code for the following request:
49
+ Only provide the SQL.`)}function Bk(e){return new K().addUserMessage(`Generate JavaScript code for the following request:
50
50
  ${e}.
51
51
  Only provide the JS and nothing else.`)}function fu(e){return new K().addUserMessage(`Generate a node-cron compatible expression based on the following prompt. Return only the cron expression (without backticks), and if not possible return only 'Error generating cron' with a short explanation:
52
52
  ${e}`)}function mu(e,t){return new K().addUserMessage(`Translate the following text: "${e}" into ${t}. Only return the translation.`)}function gu(e){return new K().addUserMessage(`Return the sentiment of this text: "${e}". Only return the sentiment.`)}function hu(e){return new K().addUserMessage(`Search the web for the following: "${e}". Only return the top results.`)}function yu(e,t){let r="You do not have access to any bindings in this request.";e&&e.length>0&&(r=`The bindings you have access to are:
@@ -155,7 +155,7 @@ You may specify foreignColumnName, but do not create that field manually.
155
155
  `;return new K().addSystemMessage(e)}function Tu(){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 Eu(){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 Bk(e){return`You are a helpful support agent who uses workflows to resolve user issues efficiently.
158
+ `;return new K().addSystemMessage(e)}function Mk(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 Mk(){return`You will be provided with a set of history, a conversation between a user and an AI. Using this
173
+ \`\`\``}function kk(){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"),SI=require("@budibase/shared-core");var ut=require("@budibase/types"),bI=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===ut.FieldType.LINK){if(!r.includes(s.relationshipId)){let i={[ut.RelationshipType.MANY_TO_ONE]:ut.RelationshipType.ONE_TO_MANY,[ut.RelationshipType.ONE_TO_MANY]:ut.RelationshipType.MANY_TO_ONE,[ut.RelationshipType.MANY_TO_MANY]:ut.RelationshipType.MANY_TO_MANY},{reverseFieldName:p,relationshipId: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:bI.docIds.generateTableID(),name:a.name,primaryDisplay:a.primaryDisplay,schema:n})}return t}function Ru(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"),le=A.z.object({name:A.z.string().describe("A human readable name for the field. It MUST be alpha-numeric and capitalised.")}),_u=le.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.")}),kk=A.z.array(A.z.union([le.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()}),_u.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."),_u.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."),_u.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."),le.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"),le.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")}),le.extend({type:A.z.literal(T.FieldType.FORMULA),formula:A.z.string().describe(`
175
+ less than five words.`}var qa=require("@budibase/backend-core"),SI=require("@budibase/shared-core");var ut=require("@budibase/types"),bI=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===ut.FieldType.LINK){if(!r.includes(s.relationshipId)){let i={[ut.RelationshipType.MANY_TO_ONE]:ut.RelationshipType.ONE_TO_MANY,[ut.RelationshipType.ONE_TO_MANY]:ut.RelationshipType.MANY_TO_ONE,[ut.RelationshipType.MANY_TO_MANY]:ut.RelationshipType.MANY_TO_MANY},{reverseFieldName:p,relationshipId: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:bI.docIds.generateTableID(),name:a.name,primaryDisplay:a.primaryDisplay,schema:n})}return t}function Ru(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"),le=A.z.object({name:A.z.string().describe("A human readable name for the field. It MUST be alpha-numeric and capitalised.")}),_u=le.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.")}),Gk=A.z.array(A.z.union([le.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()}),_u.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."),_u.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."),_u.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."),le.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"),le.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")}),le.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"),le.extend({type:A.z.literal(T.FieldType.DATETIME),ignoreTimezones:A.z.boolean()}).describe("A datetime field, storing date and time"),le.extend({type:A.z.literal(T.FieldType.DATETIME),ignoreTimezones:A.z.boolean(),timeOnly:A.z.literal(!0)}).describe("A time only field"),le.extend({type:A.z.literal(T.FieldType.DATETIME),ignoreTimezones:A.z.boolean(),dateOnly:A.z.literal(!0)}).describe("A date only field"),le.extend({type:A.z.literal(T.FieldType.ATTACHMENT_SINGLE),subtype:A.z.literal(T.AttachmentSubType.IMAGE)}).describe("Single image column"),le.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."),le.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."),le.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.")])),xu=A.z.object({tables:A.z.array(A.z.object({name:A.z.string(),schema:kk,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 Cu(e){let t=A.z.object({});for(let r of e){let a=Object.values(r.schema),n=[le.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."),le.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(le.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"),II=require("@budibase/shared-core"),D=require("@budibase/types");function Ou(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 II.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"),le.extend({type:A.z.literal(T.FieldType.DATETIME),ignoreTimezones:A.z.boolean()}).describe("A datetime field, storing date and time"),le.extend({type:A.z.literal(T.FieldType.DATETIME),ignoreTimezones:A.z.boolean(),timeOnly:A.z.literal(!0)}).describe("A time only field"),le.extend({type:A.z.literal(T.FieldType.DATETIME),ignoreTimezones:A.z.boolean(),dateOnly:A.z.literal(!0)}).describe("A date only field"),le.extend({type:A.z.literal(T.FieldType.ATTACHMENT_SINGLE),subtype:A.z.literal(T.AttachmentSubType.IMAGE)}).describe("Single image column"),le.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."),le.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."),le.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.")])),xu=A.z.object({tables:A.z.array(A.z.object({name:A.z.string(),schema:Gk,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 Cu(e){let t=A.z.object({});for(let r of e){let a=Object.values(r.schema),n=[le.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."),le.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(le.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"),II=require("@budibase/shared-core"),D=require("@budibase/types");function Ou(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 II.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.
@@ -11,6 +11,7 @@ export declare function isAppBuildersEnabled(): Promise<boolean>;
11
11
  export declare function isAuditLogsEnabled(): Promise<boolean>;
12
12
  export declare function isUserGroupsEnabled(): Promise<boolean>;
13
13
  export declare function isPWAEnabled(): Promise<boolean>;
14
+ export declare function isRecaptchaEnabled(): Promise<boolean>;
14
15
  export declare function isExpandedPublicApiEnabled(): Promise<boolean>;
15
16
  export declare function isSSOEnforced(opts?: {
16
17
  config: SettingsInnerConfig;
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "dist"
5
5
  ],
6
6
  "license": "UNLICENSED",
7
- "version": "3.13.27",
7
+ "version": "3.13.28",
8
8
  "description": "Budibase Pro (Backend)",
9
9
  "main": "dist/index.js",
10
10
  "types": "dist/index.d.ts",
@@ -73,5 +73,5 @@
73
73
  }
74
74
  }
75
75
  },
76
- "gitHead": "1e3a986059e06e95f7625d55720be7a609e1fff1"
76
+ "gitHead": "de8a462d540b26a2040f4c8059d0a2395234c628"
77
77
  }