@budibase/pro 3.13.18 → 3.13.20

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