@budibase/pro 3.13.8 → 3.13.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/controllers/global/groups.d.ts +2 -2
- package/dist/index.js +28 -28
- package/package.json +2 -2
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { UserCtx, Ctx, SearchGroupRequest, SearchGroupResponse, SearchUserGroupResponse } from "@budibase/types";
|
|
1
|
+
import { UserCtx, Ctx, SearchGroupRequest, SearchGroupResponse, SearchUserGroupResponse, UpdateGroupAppRequest, UpdateGroupAppResponse } from "@budibase/types";
|
|
2
2
|
export declare function save(ctx: UserCtx): Promise<void>;
|
|
3
3
|
export declare function updateGroupUsers(ctx: UserCtx): Promise<void>;
|
|
4
|
-
export declare function updateGroupApps(ctx: UserCtx): Promise<void>;
|
|
4
|
+
export declare function updateGroupApps(ctx: UserCtx<UpdateGroupAppRequest, UpdateGroupAppResponse>): Promise<void>;
|
|
5
5
|
export declare function fetch(ctx: Ctx<SearchGroupRequest, SearchGroupResponse>): Promise<void>;
|
|
6
6
|
export declare function destroy(ctx: UserCtx): Promise<void>;
|
|
7
7
|
/**
|
package/dist/index.js
CHANGED
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
"use strict";var xI=Object.create;var qa=Object.defineProperty;var LI=Object.getOwnPropertyDescriptor;var OI=Object.getOwnPropertyNames;var CI=Object.getPrototypeOf,PI=Object.prototype.hasOwnProperty;var u=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),w=(e,t)=>{for(var r in t)qa(e,r,{get:t[r],enumerable:!0})},Gu=(e,t,r,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of OI(t))!PI.call(e,n)&&n!==r&&qa(e,n,{get:()=>t[n],enumerable:!(a=LI(t,n))||a.enumerable});return e};var P=(e,t,r)=>(r=e!=null?xI(CI(e)):{},Gu(t||!e||!e.__esModule?qa(r,"default",{value:e,enumerable:!0}):r,e)),UI=e=>Gu(qa({},"__esModule",{value:!0}),e);var Ja=u((Xk,vp)=>{"use strict";function OS(e,t){for(var r=-1,a=t.length,n=e.length;++r<a;)e[n+r]=t[r];return e}vp.exports=OS});var _o=u((Zk,Ep)=>{"use strict";var CS=typeof global=="object"&&global&&global.Object===Object&&global;Ep.exports=CS});var oe=u((e0,Rp)=>{"use strict";var PS=_o(),US=typeof self=="object"&&self&&self.Object===Object&&self,qS=PS||US||Function("return this")();Rp.exports=qS});var _t=u((t0,_p)=>{"use strict";var DS=oe(),NS=DS.Symbol;_p.exports=NS});var Cp=u((r0,Op)=>{"use strict";var xp=_t(),Lp=Object.prototype,BS=Lp.hasOwnProperty,MS=Lp.toString,Hr=xp?xp.toStringTag:void 0;function GS(e){var t=BS.call(e,Hr),r=e[Hr];try{e[Hr]=void 0;var a=!0}catch{}var n=MS.call(e);return a&&(t?e[Hr]=r:delete e[Hr]),n}Op.exports=GS});var Up=u((a0,Pp)=>{"use strict";var kS=Object.prototype,FS=kS.toString;function QS(e){return FS.call(e)}Pp.exports=QS});var mt=u((n0,Np)=>{"use strict";var qp=_t(),jS=Cp(),WS=Up(),$S="[object Null]",KS="[object Undefined]",Dp=qp?qp.toStringTag:void 0;function VS(e){return e==null?e===void 0?KS:$S:Dp&&Dp in Object(e)?jS(e):WS(e)}Np.exports=VS});var he=u((o0,Bp)=>{"use strict";function YS(e){return e!=null&&typeof e=="object"}Bp.exports=YS});var Gp=u((s0,Mp)=>{"use strict";var HS=mt(),zS=he(),JS="[object Arguments]";function XS(e){return zS(e)&&HS(e)==JS}Mp.exports=XS});var zr=u((i0,Qp)=>{"use strict";var kp=Gp(),ZS=he(),Fp=Object.prototype,ew=Fp.hasOwnProperty,tw=Fp.propertyIsEnumerable,rw=kp(function(){return arguments}())?kp:function(e){return ZS(e)&&ew.call(e,"callee")&&!tw.call(e,"callee")};Qp.exports=rw});var re=u((u0,jp)=>{"use strict";var aw=Array.isArray;jp.exports=aw});var Vp=u((p0,Kp)=>{"use strict";var Wp=_t(),nw=zr(),ow=re(),$p=Wp?Wp.isConcatSpreadable:void 0;function sw(e){return ow(e)||nw(e)||!!($p&&e&&e[$p])}Kp.exports=sw});var xo=u((c0,Hp)=>{"use strict";var iw=Ja(),uw=Vp();function Yp(e,t,r,a,n){var o=-1,s=e.length;for(r||(r=uw),n||(n=[]);++o<s;){var i=e[o];t>0&&r(i)?t>1?Yp(i,t-1,r,a,n):iw(n,i):a||(n[n.length]=i)}return n}Hp.exports=Yp});var Jr=u((l0,zp)=>{"use strict";function pw(e){return e}zp.exports=pw});var Xa=u((d0,Jp)=>{"use strict";function cw(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)}Jp.exports=cw});var Lo=u((f0,Zp)=>{"use strict";var lw=Xa(),Xp=Math.max;function dw(e,t,r){return t=Xp(t===void 0?e.length-1:t,0),function(){for(var a=arguments,n=-1,o=Xp(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),lw(e,this,i)}}Zp.exports=dw});var tc=u((m0,ec)=>{"use strict";function fw(e){return function(){return e}}ec.exports=fw});var Ee=u((g0,rc)=>{"use strict";function mw(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}rc.exports=mw});var Xr=u((h0,ac)=>{"use strict";var gw=mt(),hw=Ee(),yw="[object AsyncFunction]",Aw="[object Function]",bw="[object GeneratorFunction]",Iw="[object Proxy]";function Sw(e){if(!hw(e))return!1;var t=gw(e);return t==Aw||t==bw||t==yw||t==Iw}ac.exports=Sw});var oc=u((y0,nc)=>{"use strict";var ww=oe(),Tw=ww["__core-js_shared__"];nc.exports=Tw});var uc=u((A0,ic)=>{"use strict";var Oo=oc(),sc=function(){var e=/[^.]+$/.exec(Oo&&Oo.keys&&Oo.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function vw(e){return!!sc&&sc in e}ic.exports=vw});var Co=u((b0,pc)=>{"use strict";var Ew=Function.prototype,Rw=Ew.toString;function _w(e){if(e!=null){try{return Rw.call(e)}catch{}try{return e+""}catch{}}return""}pc.exports=_w});var lc=u((I0,cc)=>{"use strict";var xw=Xr(),Lw=uc(),Ow=Ee(),Cw=Co(),Pw=/[\\^$.*+?()[\]{}|]/g,Uw=/^\[object .+?Constructor\]$/,qw=Function.prototype,Dw=Object.prototype,Nw=qw.toString,Bw=Dw.hasOwnProperty,Mw=RegExp("^"+Nw.call(Bw).replace(Pw,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function Gw(e){if(!Ow(e)||Lw(e))return!1;var t=xw(e)?Mw:Uw;return t.test(Cw(e))}cc.exports=Gw});var fc=u((S0,dc)=>{"use strict";function kw(e,t){return e?.[t]}dc.exports=kw});var gt=u((w0,mc)=>{"use strict";var Fw=lc(),Qw=fc();function jw(e,t){var r=Qw(e,t);return Fw(r)?r:void 0}mc.exports=jw});var Po=u((T0,gc)=>{"use strict";var Ww=gt(),$w=function(){try{var e=Ww(Object,"defineProperty");return e({},"",{}),e}catch{}}();gc.exports=$w});var Ac=u((v0,yc)=>{"use strict";var Kw=tc(),hc=Po(),Vw=Jr(),Yw=hc?function(e,t){return hc(e,"toString",{configurable:!0,enumerable:!1,value:Kw(t),writable:!0})}:Vw;yc.exports=Yw});var Uo=u((E0,bc)=>{"use strict";var Hw=800,zw=16,Jw=Date.now;function Xw(e){var t=0,r=0;return function(){var a=Jw(),n=zw-(a-r);if(r=a,n>0){if(++t>=Hw)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}bc.exports=Xw});var Za=u((R0,Ic)=>{"use strict";var Zw=Ac(),eT=Uo(),tT=eT(Zw);Ic.exports=tT});var qo=u((_0,Sc)=>{"use strict";var rT=Jr(),aT=Lo(),nT=Za();function oT(e,t){return nT(aT(e,t,rT),e+"")}Sc.exports=oT});var Zr=u((x0,wc)=>{"use strict";var sT=gt(),iT=sT(Object,"create");wc.exports=iT});var Ec=u((L0,vc)=>{"use strict";var Tc=Zr();function uT(){this.__data__=Tc?Tc(null):{},this.size=0}vc.exports=uT});var _c=u((O0,Rc)=>{"use strict";function pT(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}Rc.exports=pT});var Lc=u((C0,xc)=>{"use strict";var cT=Zr(),lT="__lodash_hash_undefined__",dT=Object.prototype,fT=dT.hasOwnProperty;function mT(e){var t=this.__data__;if(cT){var r=t[e];return r===lT?void 0:r}return fT.call(t,e)?t[e]:void 0}xc.exports=mT});var Cc=u((P0,Oc)=>{"use strict";var gT=Zr(),hT=Object.prototype,yT=hT.hasOwnProperty;function AT(e){var t=this.__data__;return gT?t[e]!==void 0:yT.call(t,e)}Oc.exports=AT});var Uc=u((U0,Pc)=>{"use strict";var bT=Zr(),IT="__lodash_hash_undefined__";function ST(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=bT&&t===void 0?IT:t,this}Pc.exports=ST});var Dc=u((q0,qc)=>{"use strict";var wT=Ec(),TT=_c(),vT=Lc(),ET=Cc(),RT=Uc();function Vt(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var a=e[t];this.set(a[0],a[1])}}Vt.prototype.clear=wT;Vt.prototype.delete=TT;Vt.prototype.get=vT;Vt.prototype.has=ET;Vt.prototype.set=RT;qc.exports=Vt});var Bc=u((D0,Nc)=>{"use strict";function _T(){this.__data__=[],this.size=0}Nc.exports=_T});var Yt=u((N0,Mc)=>{"use strict";function xT(e,t){return e===t||e!==e&&t!==t}Mc.exports=xT});var ea=u((B0,Gc)=>{"use strict";var LT=Yt();function OT(e,t){for(var r=e.length;r--;)if(LT(e[r][0],t))return r;return-1}Gc.exports=OT});var Fc=u((M0,kc)=>{"use strict";var CT=ea(),PT=Array.prototype,UT=PT.splice;function qT(e){var t=this.__data__,r=CT(t,e);if(r<0)return!1;var a=t.length-1;return r==a?t.pop():UT.call(t,r,1),--this.size,!0}kc.exports=qT});var jc=u((G0,Qc)=>{"use strict";var DT=ea();function NT(e){var t=this.__data__,r=DT(t,e);return r<0?void 0:t[r][1]}Qc.exports=NT});var $c=u((k0,Wc)=>{"use strict";var BT=ea();function MT(e){return BT(this.__data__,e)>-1}Wc.exports=MT});var Vc=u((F0,Kc)=>{"use strict";var GT=ea();function kT(e,t){var r=this.__data__,a=GT(r,e);return a<0?(++this.size,r.push([e,t])):r[a][1]=t,this}Kc.exports=kT});var ta=u((Q0,Yc)=>{"use strict";var FT=Bc(),QT=Fc(),jT=jc(),WT=$c(),$T=Vc();function Ht(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var a=e[t];this.set(a[0],a[1])}}Ht.prototype.clear=FT;Ht.prototype.delete=QT;Ht.prototype.get=jT;Ht.prototype.has=WT;Ht.prototype.set=$T;Yc.exports=Ht});var en=u((j0,Hc)=>{"use strict";var KT=gt(),VT=oe(),YT=KT(VT,"Map");Hc.exports=YT});var Xc=u((W0,Jc)=>{"use strict";var zc=Dc(),HT=ta(),zT=en();function JT(){this.size=0,this.__data__={hash:new zc,map:new(zT||HT),string:new zc}}Jc.exports=JT});var el=u(($0,Zc)=>{"use strict";function XT(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}Zc.exports=XT});var ra=u((K0,tl)=>{"use strict";var ZT=el();function ev(e,t){var r=e.__data__;return ZT(t)?r[typeof t=="string"?"string":"hash"]:r.map}tl.exports=ev});var al=u((V0,rl)=>{"use strict";var tv=ra();function rv(e){var t=tv(this,e).delete(e);return this.size-=t?1:0,t}rl.exports=rv});var ol=u((Y0,nl)=>{"use strict";var av=ra();function nv(e){return av(this,e).get(e)}nl.exports=nv});var il=u((H0,sl)=>{"use strict";var ov=ra();function sv(e){return ov(this,e).has(e)}sl.exports=sv});var pl=u((z0,ul)=>{"use strict";var iv=ra();function uv(e,t){var r=iv(this,e),a=r.size;return r.set(e,t),this.size+=r.size==a?0:1,this}ul.exports=uv});var tn=u((J0,cl)=>{"use strict";var pv=Xc(),cv=al(),lv=ol(),dv=il(),fv=pl();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=pv;zt.prototype.delete=cv;zt.prototype.get=lv;zt.prototype.has=dv;zt.prototype.set=fv;cl.exports=zt});var dl=u((X0,ll)=>{"use strict";var mv="__lodash_hash_undefined__";function gv(e){return this.__data__.set(e,mv),this}ll.exports=gv});var ml=u((Z0,fl)=>{"use strict";function hv(e){return this.__data__.has(e)}fl.exports=hv});var Do=u((eF,gl)=>{"use strict";var yv=tn(),Av=dl(),bv=ml();function rn(e){var t=-1,r=e==null?0:e.length;for(this.__data__=new yv;++t<r;)this.add(e[t])}rn.prototype.add=rn.prototype.push=Av;rn.prototype.has=bv;gl.exports=rn});var yl=u((tF,hl)=>{"use strict";function Iv(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=Iv});var bl=u((rF,Al)=>{"use strict";function Sv(e){return e!==e}Al.exports=Sv});var Sl=u((aF,Il)=>{"use strict";function wv(e,t,r){for(var a=r-1,n=e.length;++a<n;)if(e[a]===t)return a;return-1}Il.exports=wv});var Tl=u((nF,wl)=>{"use strict";var Tv=yl(),vv=bl(),Ev=Sl();function Rv(e,t,r){return t===t?Ev(e,t,r):Tv(e,vv,r)}wl.exports=Rv});var No=u((oF,vl)=>{"use strict";var _v=Tl();function xv(e,t){var r=e==null?0:e.length;return!!r&&_v(e,t,0)>-1}vl.exports=xv});var Rl=u((sF,El)=>{"use strict";function Lv(e,t,r){for(var a=-1,n=e==null?0:e.length;++a<n;)if(r(t,e[a]))return!0;return!1}El.exports=Lv});var Bo=u((iF,_l)=>{"use strict";function Ov(e,t){return e.has(t)}_l.exports=Ov});var Mo=u((uF,xl)=>{"use strict";var Cv=gt(),Pv=oe(),Uv=Cv(Pv,"Set");xl.exports=Uv});var Go=u((pF,Ll)=>{"use strict";function qv(){}Ll.exports=qv});var an=u((cF,Ol)=>{"use strict";function Dv(e){var t=-1,r=Array(e.size);return e.forEach(function(a){r[++t]=a}),r}Ol.exports=Dv});var Pl=u((lF,Cl)=>{"use strict";var ko=Mo(),Nv=Go(),Bv=an(),Mv=1/0,Gv=ko&&1/Bv(new ko([,-0]))[1]==Mv?function(e){return new ko(e)}:Nv;Cl.exports=Gv});var ql=u((dF,Ul)=>{"use strict";var kv=Do(),Fv=No(),Qv=Rl(),jv=Bo(),Wv=Pl(),$v=an(),Kv=200;function Vv(e,t,r){var a=-1,n=Fv,o=e.length,s=!0,i=[],p=i;if(r)s=!1,n=Qv;else if(o>=Kv){var m=t?null:Wv(e);if(m)return $v(m);s=!1,n=jv,p=new kv}else p=t?[]:i;e:for(;++a<o;){var f=e[a],h=t?t(f):f;if(f=r||f!==0?f:0,s&&h===h){for(var g=p.length;g--;)if(p[g]===h)continue e;t&&p.push(h),i.push(f)}else n(p,h,r)||(p!==i&&p.push(h),i.push(f))}return i}Ul.exports=Vv});var nn=u((fF,Dl)=>{"use strict";var Yv=9007199254740991;function Hv(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=Yv}Dl.exports=Hv});var Jt=u((mF,Nl)=>{"use strict";var zv=Xr(),Jv=nn();function Xv(e){return e!=null&&Jv(e.length)&&!zv(e)}Nl.exports=Xv});var Fo=u((gF,Bl)=>{"use strict";var Zv=Jt(),eE=he();function tE(e){return eE(e)&&Zv(e)}Bl.exports=tE});var Gl=u((hF,Ml)=>{"use strict";var rE=xo(),aE=qo(),nE=ql(),oE=Fo(),sE=aE(function(e){return nE(rE(e,1,oE,!0))});Ml.exports=sE});var Fl=u((yF,kl)=>{"use strict";var iE=ta();function uE(){this.__data__=new iE,this.size=0}kl.exports=uE});var jl=u((AF,Ql)=>{"use strict";function pE(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r}Ql.exports=pE});var $l=u((bF,Wl)=>{"use strict";function cE(e){return this.__data__.get(e)}Wl.exports=cE});var Vl=u((IF,Kl)=>{"use strict";function lE(e){return this.__data__.has(e)}Kl.exports=lE});var Hl=u((SF,Yl)=>{"use strict";var dE=ta(),fE=en(),mE=tn(),gE=200;function hE(e,t){var r=this.__data__;if(r instanceof dE){var a=r.__data__;if(!fE||a.length<gE-1)return a.push([e,t]),this.size=++r.size,this;r=this.__data__=new mE(a)}return r.set(e,t),this.size=r.size,this}Yl.exports=hE});var aa=u((wF,zl)=>{"use strict";var yE=ta(),AE=Fl(),bE=jl(),IE=$l(),SE=Vl(),wE=Hl();function Xt(e){var t=this.__data__=new yE(e);this.size=t.size}Xt.prototype.clear=AE;Xt.prototype.delete=bE;Xt.prototype.get=IE;Xt.prototype.has=SE;Xt.prototype.set=wE;zl.exports=Xt});var na=u((TF,Xl)=>{"use strict";var Jl=Po();function TE(e,t,r){t=="__proto__"&&Jl?Jl(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}Xl.exports=TE});var Qo=u((vF,Zl)=>{"use strict";var vE=na(),EE=Yt();function RE(e,t,r){(r!==void 0&&!EE(e[t],r)||r===void 0&&!(t in e))&&vE(e,t,r)}Zl.exports=RE});var td=u((EF,ed)=>{"use strict";function _E(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}}ed.exports=_E});var jo=u((RF,rd)=>{"use strict";var xE=td(),LE=xE();rd.exports=LE});var Wo=u((oa,Zt)=>{"use strict";var OE=oe(),sd=typeof oa=="object"&&oa&&!oa.nodeType&&oa,ad=sd&&typeof Zt=="object"&&Zt&&!Zt.nodeType&&Zt,CE=ad&&ad.exports===sd,nd=CE?OE.Buffer:void 0,od=nd?nd.allocUnsafe:void 0;function PE(e,t){if(t)return e.slice();var r=e.length,a=od?od(r):new e.constructor(r);return e.copy(a),a}Zt.exports=PE});var $o=u((_F,id)=>{"use strict";var UE=oe(),qE=UE.Uint8Array;id.exports=qE});var on=u((xF,pd)=>{"use strict";var ud=$o();function DE(e){var t=new e.constructor(e.byteLength);return new ud(t).set(new ud(e)),t}pd.exports=DE});var Ko=u((LF,cd)=>{"use strict";var NE=on();function BE(e,t){var r=t?NE(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.length)}cd.exports=BE});var er=u((OF,ld)=>{"use strict";function ME(e,t){var r=-1,a=e.length;for(t||(t=Array(a));++r<a;)t[r]=e[r];return t}ld.exports=ME});var sa=u((CF,fd)=>{"use strict";var GE=Ee(),dd=Object.create,kE=function(){function e(){}return function(t){if(!GE(t))return{};if(dd)return dd(t);e.prototype=t;var r=new e;return e.prototype=void 0,r}}();fd.exports=kE});var Vo=u((PF,md)=>{"use strict";function FE(e,t){return function(r){return e(t(r))}}md.exports=FE});var sn=u((UF,gd)=>{"use strict";var QE=Vo(),jE=QE(Object.getPrototypeOf,Object);gd.exports=jE});var un=u((qF,hd)=>{"use strict";var WE=Object.prototype;function $E(e){var t=e&&e.constructor,r=typeof t=="function"&&t.prototype||WE;return e===r}hd.exports=$E});var Yo=u((DF,yd)=>{"use strict";var KE=sa(),VE=sn(),YE=un();function HE(e){return typeof e.constructor=="function"&&!YE(e)?KE(VE(e)):{}}yd.exports=HE});var bd=u((NF,Ad)=>{"use strict";function zE(){return!1}Ad.exports=zE});var ua=u((ia,tr)=>{"use strict";var JE=oe(),XE=bd(),wd=typeof ia=="object"&&ia&&!ia.nodeType&&ia,Id=wd&&typeof tr=="object"&&tr&&!tr.nodeType&&tr,ZE=Id&&Id.exports===wd,Sd=ZE?JE.Buffer:void 0,eR=Sd?Sd.isBuffer:void 0,tR=eR||XE;tr.exports=tR});var Ho=u((BF,vd)=>{"use strict";var rR=mt(),aR=sn(),nR=he(),oR="[object Object]",sR=Function.prototype,iR=Object.prototype,Td=sR.toString,uR=iR.hasOwnProperty,pR=Td.call(Object);function cR(e){if(!nR(e)||rR(e)!=oR)return!1;var t=aR(e);if(t===null)return!0;var r=uR.call(t,"constructor")&&t.constructor;return typeof r=="function"&&r instanceof r&&Td.call(r)==pR}vd.exports=cR});var Rd=u((MF,Ed)=>{"use strict";var lR=mt(),dR=nn(),fR=he(),mR="[object Arguments]",gR="[object Array]",hR="[object Boolean]",yR="[object Date]",AR="[object Error]",bR="[object Function]",IR="[object Map]",SR="[object Number]",wR="[object Object]",TR="[object RegExp]",vR="[object Set]",ER="[object String]",RR="[object WeakMap]",_R="[object ArrayBuffer]",xR="[object DataView]",LR="[object Float32Array]",OR="[object Float64Array]",CR="[object Int8Array]",PR="[object Int16Array]",UR="[object Int32Array]",qR="[object Uint8Array]",DR="[object Uint8ClampedArray]",NR="[object Uint16Array]",BR="[object Uint32Array]",B={};B[LR]=B[OR]=B[CR]=B[PR]=B[UR]=B[qR]=B[DR]=B[NR]=B[BR]=!0;B[mR]=B[gR]=B[_R]=B[hR]=B[xR]=B[yR]=B[AR]=B[bR]=B[IR]=B[SR]=B[wR]=B[TR]=B[vR]=B[ER]=B[RR]=!1;function MR(e){return fR(e)&&dR(e.length)&&!!B[lR(e)]}Ed.exports=MR});var pn=u((GF,_d)=>{"use strict";function GR(e){return function(t){return e(t)}}_d.exports=GR});var cn=u((pa,rr)=>{"use strict";var kR=_o(),xd=typeof pa=="object"&&pa&&!pa.nodeType&&pa,ca=xd&&typeof rr=="object"&&rr&&!rr.nodeType&&rr,FR=ca&&ca.exports===xd,zo=FR&&kR.process,QR=function(){try{var e=ca&&ca.require&&ca.require("util").types;return e||zo&&zo.binding&&zo.binding("util")}catch{}}();rr.exports=QR});var ln=u((kF,Cd)=>{"use strict";var jR=Rd(),WR=pn(),Ld=cn(),Od=Ld&&Ld.isTypedArray,$R=Od?WR(Od):jR;Cd.exports=$R});var Jo=u((FF,Pd)=>{"use strict";function KR(e,t){if(!(t==="constructor"&&typeof e[t]=="function")&&t!="__proto__")return e[t]}Pd.exports=KR});var Xo=u((QF,Ud)=>{"use strict";var VR=na(),YR=Yt(),HR=Object.prototype,zR=HR.hasOwnProperty;function JR(e,t,r){var a=e[t];(!(zR.call(e,t)&&YR(a,r))||r===void 0&&!(t in e))&&VR(e,t,r)}Ud.exports=JR});var ar=u((jF,qd)=>{"use strict";var XR=Xo(),ZR=na();function e_(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?ZR(r,i,p):XR(r,i,p)}return r}qd.exports=e_});var Nd=u((WF,Dd)=>{"use strict";function t_(e,t){for(var r=-1,a=Array(e);++r<e;)a[r]=t(r);return a}Dd.exports=t_});var la=u(($F,Bd)=>{"use strict";var r_=9007199254740991,a_=/^(?:0|[1-9]\d*)$/;function n_(e,t){var r=typeof e;return t=t??r_,!!t&&(r=="number"||r!="symbol"&&a_.test(e))&&e>-1&&e%1==0&&e<t}Bd.exports=n_});var Zo=u((KF,Md)=>{"use strict";var o_=Nd(),s_=zr(),i_=re(),u_=ua(),p_=la(),c_=ln(),l_=Object.prototype,d_=l_.hasOwnProperty;function f_(e,t){var r=i_(e),a=!r&&s_(e),n=!r&&!a&&u_(e),o=!r&&!a&&!n&&c_(e),s=r||a||n||o,i=s?o_(e.length,String):[],p=i.length;for(var m in e)(t||d_.call(e,m))&&!(s&&(m=="length"||n&&(m=="offset"||m=="parent")||o&&(m=="buffer"||m=="byteLength"||m=="byteOffset")||p_(m,p)))&&i.push(m);return i}Md.exports=f_});var kd=u((VF,Gd)=>{"use strict";function m_(e){var t=[];if(e!=null)for(var r in Object(e))t.push(r);return t}Gd.exports=m_});var Qd=u((YF,Fd)=>{"use strict";var g_=Ee(),h_=un(),y_=kd(),A_=Object.prototype,b_=A_.hasOwnProperty;function I_(e){if(!g_(e))return y_(e);var t=h_(e),r=[];for(var a in e)a=="constructor"&&(t||!b_.call(e,a))||r.push(a);return r}Fd.exports=I_});var nr=u((HF,jd)=>{"use strict";var S_=Zo(),w_=Qd(),T_=Jt();function v_(e){return T_(e)?S_(e,!0):w_(e)}jd.exports=v_});var $d=u((zF,Wd)=>{"use strict";var E_=ar(),R_=nr();function __(e){return E_(e,R_(e))}Wd.exports=__});var Jd=u((JF,zd)=>{"use strict";var Kd=Qo(),x_=Wo(),L_=Ko(),O_=er(),C_=Yo(),Vd=zr(),Yd=re(),P_=Fo(),U_=ua(),q_=Xr(),D_=Ee(),N_=Ho(),B_=ln(),Hd=Jo(),M_=$d();function G_(e,t,r,a,n,o,s){var i=Hd(e,r),p=Hd(t,r),m=s.get(p);if(m){Kd(e,r,m);return}var f=o?o(i,p,r+"",e,t,s):void 0,h=f===void 0;if(h){var g=Yd(p),S=!g&&U_(p),O=!g&&!S&&B_(p);f=p,g||S||O?Yd(i)?f=i:P_(i)?f=O_(i):S?(h=!1,f=x_(p,!0)):O?(h=!1,f=L_(p,!0)):f=[]:N_(p)||Vd(p)?(f=i,Vd(i)?f=M_(i):(!D_(i)||q_(i))&&(f=C_(p))):h=!1}h&&(s.set(p,f),n(f,p,a,o,s),s.delete(p)),Kd(e,r,f)}zd.exports=G_});var ef=u((XF,Zd)=>{"use strict";var k_=aa(),F_=Qo(),Q_=jo(),j_=Jd(),W_=Ee(),$_=nr(),K_=Jo();function Xd(e,t,r,a,n){e!==t&&Q_(t,function(o,s){if(n||(n=new k_),W_(o))j_(e,t,s,r,Xd,a,n);else{var i=a?a(K_(e,s),o,s+"",e,t,n):void 0;i===void 0&&(i=o),F_(e,s,i)}},$_)}Zd.exports=Xd});var rf=u((ZF,tf)=>{"use strict";var V_=Yt(),Y_=Jt(),H_=la(),z_=Ee();function J_(e,t,r){if(!z_(r))return!1;var a=typeof t;return(a=="number"?Y_(r)&&H_(t,r.length):a=="string"&&t in r)?V_(r[t],e):!1}tf.exports=J_});var nf=u((e1,af)=>{"use strict";var X_=qo(),Z_=rf();function ex(e){return X_(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&&Z_(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})}af.exports=ex});var es=u((t1,of)=>{"use strict";var tx=ef(),rx=nf(),ax=rx(function(e,t,r){tx(e,t,r)});of.exports=ax});var um=u(de=>{"use strict";de.aliasToReal={each:"forEach",eachRight:"forEachRight",entries:"toPairs",entriesIn:"toPairsIn",extend:"assignIn",extendAll:"assignInAll",extendAllWith:"assignInAllWith",extendWith:"assignInWith",first:"head",conforms:"conformsTo",matches:"isMatch",property:"get",__:"placeholder",F:"stubFalse",T:"stubTrue",all:"every",allPass:"overEvery",always:"constant",any:"some",anyPass:"overSome",apply:"spread",assoc:"set",assocPath:"set",complement:"negate",compose:"flowRight",contains:"includes",dissoc:"unset",dissocPath:"unset",dropLast:"dropRight",dropLastWhile:"dropRightWhile",equals:"isEqual",identical:"eq",indexBy:"keyBy",init:"initial",invertObj:"invert",juxt:"over",omitAll:"omit",nAry:"ary",path:"get",pathEq:"matchesProperty",pathOr:"getOr",paths:"at",pickAll:"pick",pipe:"flow",pluck:"map",prop:"get",propEq:"matchesProperty",propOr:"getOr",props:"at",symmetricDifference:"xor",symmetricDifferenceBy:"xorBy",symmetricDifferenceWith:"xorWith",takeLast:"takeRight",takeLastWhile:"takeRightWhile",unapply:"rest",unnest:"flatten",useWith:"overArgs",where:"conformsTo",whereEq:"isMatch",zipObj:"zipObject"};de.aryMethod={1:["assignAll","assignInAll","attempt","castArray","ceil","create","curry","curryRight","defaultsAll","defaultsDeepAll","floor","flow","flowRight","fromPairs","invert","iteratee","memoize","method","mergeAll","methodOf","mixin","nthArg","over","overEvery","overSome","rest","reverse","round","runInContext","spread","template","trim","trimEnd","trimStart","uniqueId","words","zipAll"],2:["add","after","ary","assign","assignAllWith","assignIn","assignInAllWith","at","before","bind","bindAll","bindKey","chunk","cloneDeepWith","cloneWith","concat","conformsTo","countBy","curryN","curryRightN","debounce","defaults","defaultsDeep","defaultTo","delay","difference","divide","drop","dropRight","dropRightWhile","dropWhile","endsWith","eq","every","filter","find","findIndex","findKey","findLast","findLastIndex","findLastKey","flatMap","flatMapDeep","flattenDepth","forEach","forEachRight","forIn","forInRight","forOwn","forOwnRight","get","groupBy","gt","gte","has","hasIn","includes","indexOf","intersection","invertBy","invoke","invokeMap","isEqual","isMatch","join","keyBy","lastIndexOf","lt","lte","map","mapKeys","mapValues","matchesProperty","maxBy","meanBy","merge","mergeAllWith","minBy","multiply","nth","omit","omitBy","overArgs","pad","padEnd","padStart","parseInt","partial","partialRight","partition","pick","pickBy","propertyOf","pull","pullAll","pullAt","random","range","rangeRight","rearg","reject","remove","repeat","restFrom","result","sampleSize","some","sortBy","sortedIndex","sortedIndexOf","sortedLastIndex","sortedLastIndexOf","sortedUniqBy","split","spreadFrom","startsWith","subtract","sumBy","take","takeRight","takeRightWhile","takeWhile","tap","throttle","thru","times","trimChars","trimCharsEnd","trimCharsStart","truncate","union","uniqBy","uniqWith","unset","unzipWith","without","wrap","xor","zip","zipObject","zipObjectDeep"],3:["assignInWith","assignWith","clamp","differenceBy","differenceWith","findFrom","findIndexFrom","findLastFrom","findLastIndexFrom","getOr","includesFrom","indexOfFrom","inRange","intersectionBy","intersectionWith","invokeArgs","invokeArgsMap","isEqualWith","isMatchWith","flatMapDepth","lastIndexOfFrom","mergeWith","orderBy","padChars","padCharsEnd","padCharsStart","pullAllBy","pullAllWith","rangeStep","rangeStepRight","reduce","reduceRight","replace","set","slice","sortedIndexBy","sortedLastIndexBy","transform","unionBy","unionWith","update","xorBy","xorWith","zipWith"],4:["fill","setWith","updateWith"]};de.aryRearg={2:[1,0],3:[2,0,1],4:[3,2,0,1]};de.iterateeAry={dropRightWhile:1,dropWhile:1,every:1,filter:1,find:1,findFrom:1,findIndex:1,findIndexFrom:1,findKey:1,findLast:1,findLastFrom:1,findLastIndex:1,findLastIndexFrom:1,findLastKey:1,flatMap:1,flatMapDeep:1,flatMapDepth:1,forEach:1,forEachRight:1,forIn:1,forInRight:1,forOwn:1,forOwnRight:1,map:1,mapKeys:1,mapValues:1,partition:1,reduce:2,reduceRight:2,reject:1,remove:1,some:1,takeRightWhile:1,takeWhile:1,times:1,transform:2};de.iterateeRearg={mapKeys:[1],reduceRight:[1,0]};de.methodRearg={assignInAllWith:[1,0],assignInWith:[1,2,0],assignAllWith:[1,0],assignWith:[1,2,0],differenceBy:[1,2,0],differenceWith:[1,2,0],getOr:[2,1,0],intersectionBy:[1,2,0],intersectionWith:[1,2,0],isEqualWith:[1,2,0],isMatchWith:[2,1,0],mergeAllWith:[1,0],mergeWith:[1,2,0],padChars:[2,1,0],padCharsEnd:[2,1,0],padCharsStart:[2,1,0],pullAllBy:[2,1,0],pullAllWith:[2,1,0],rangeStep:[1,2,0],rangeStepRight:[1,2,0],setWith:[3,1,2,0],sortedIndexBy:[2,1,0],sortedLastIndexBy:[2,1,0],unionBy:[1,2,0],unionWith:[1,2,0],updateWith:[3,1,2,0],xorBy:[1,2,0],xorWith:[1,2,0],zipWith:[1,2,0]};de.methodSpread={assignAll:{start:0},assignAllWith:{start:0},assignInAll:{start:0},assignInAllWith:{start:0},defaultsAll:{start:0},defaultsDeepAll:{start:0},invokeArgs:{start:2},invokeArgsMap:{start:2},mergeAll:{start:0},mergeAllWith:{start:0},partial:{start:1},partialRight:{start:1},without:{start:1},zipAll:{start:0}};de.mutate={array:{fill:!0,pull:!0,pullAll:!0,pullAllBy:!0,pullAllWith:!0,pullAt:!0,remove:!0,reverse:!0},object:{assign:!0,assignAll:!0,assignAllWith:!0,assignIn:!0,assignInAll:!0,assignInAllWith:!0,assignInWith:!0,assignWith:!0,defaults:!0,defaultsAll:!0,defaultsDeep:!0,defaultsDeepAll:!0,merge:!0,mergeAll:!0,mergeAllWith:!0,mergeWith:!0},set:{set:!0,setWith:!0,unset:!0,update:!0,updateWith:!0}};de.realToAlias=function(){var e=Object.prototype.hasOwnProperty,t=de.aliasToReal,r={};for(var a in t){var n=t[a];e.call(r,n)?r[n].push(a):r[n]=[a]}return r}();de.remap={assignAll:"assign",assignAllWith:"assignWith",assignInAll:"assignIn",assignInAllWith:"assignInWith",curryN:"curry",curryRightN:"curryRight",defaultsAll:"defaults",defaultsDeepAll:"defaultsDeep",findFrom:"find",findIndexFrom:"findIndex",findLastFrom:"findLast",findLastIndexFrom:"findLastIndex",getOr:"get",includesFrom:"includes",indexOfFrom:"indexOf",invokeArgs:"invoke",invokeArgsMap:"invokeMap",lastIndexOfFrom:"lastIndexOf",mergeAll:"merge",mergeAllWith:"mergeWith",padChars:"pad",padCharsEnd:"padEnd",padCharsStart:"padStart",propertyOf:"get",rangeStep:"range",rangeStepRight:"rangeRight",restFrom:"rest",spreadFrom:"spread",trimChars:"trim",trimCharsEnd:"trimEnd",trimCharsStart:"trimStart",zipAll:"zip"};de.skipFixed={castArray:!0,flow:!0,flowRight:!0,iteratee:!0,mixin:!0,rearg:!0,runInContext:!0};de.skipRearg={add:!0,assign:!0,assignIn:!0,bind:!0,bindKey:!0,concat:!0,difference:!0,divide:!0,eq:!0,gt:!0,gte:!0,isEqual:!0,lt:!0,lte:!0,matchesProperty:!0,merge:!0,multiply:!0,overArgs:!0,partial:!0,partialRight:!0,propertyOf:!0,random:!0,range:!0,rangeRight:!0,subtract:!0,zip:!0,zipObject:!0,zipObjectDeep:!0}});var zs=u((Ej,pm)=>{"use strict";pm.exports={}});var fm=u((Rj,dm)=>{"use strict";var X=um(),BL=zs(),cm=Array.prototype.push;function ML(e,t){return t==2?function(r,a){return e.apply(void 0,arguments)}:function(r){return e.apply(void 0,arguments)}}function Js(e,t){return t==2?function(r,a){return e(r,a)}:function(r){return e(r)}}function lm(e){for(var t=e?e.length:0,r=Array(t);t--;)r[t]=e[t];return r}function GL(e){return function(t){return e({},t)}}function kL(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&&cm.apply(s,o),t!=a&&cm.apply(s,n.slice(t+1)),e.apply(this,s)}}function Xs(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 Zs(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:BL,p="curry"in a&&a.curry,m="fixed"in a&&a.fixed,f="rearg"in a&&a.rearg,h=n?r.runInContext():void 0,g=n?r:{ary:e.ary,assign:e.assign,clone:e.clone,curry:e.curry,forEach:e.forEach,isArray:e.isArray,isError:e.isError,isFunction:e.isFunction,isWeakMap:e.isWeakMap,iteratee:e.iteratee,keys:e.keys,rearg:e.rearg,toInteger:e.toInteger,toPath:e.toPath},S=g.ary,O=g.assign,_=g.clone,R=g.curry,E=g.forEach,U=g.isArray,Oe=g.isError,Se=g.isFunction,pt=g.isWeakMap,kt=g.keys,Ir=g.rearg,Sr=g.toInteger,bI=g.toPath,Pu=kt(X.aryMethod),II={castArray:function(I){return function(){var y=arguments[0];return U(y)?I(lm(y)):I.apply(void 0,arguments)}},iteratee:function(I){return function(){var y=arguments[0],b=arguments[1],v=I(y,b),L=v.length;return s.cap&&typeof b=="number"?(b=b>2?b-2:1,L&&L<=b?v:Js(v,b)):v}},mixin:function(I){return function(y){var b=this;if(!Se(b))return I(b,Object(y));var v=[];return E(kt(y),function(L){Se(y[L])&&v.push([L,b.prototype[L]])}),I(b,Object(y)),E(v,function(L){var ae=L[1];Se(ae)?b.prototype[L[0]]=ae:delete b.prototype[L[0]]}),b}},nthArg:function(I){return function(y){var b=y<0?1:Sr(y)+1;return R(I(y),b)}},rearg:function(I){return function(y,b){var v=b?b.length:0;return R(I(y,b),v)}},runInContext:function(I){return function(y){return Zs(e,I(y),a)}}};function SI(I,y){if(s.cap){var b=X.iterateeRearg[I];if(b)return RI(y,b);var v=!n&&X.iterateeAry[I];if(v)return EI(y,v)}return y}function wI(I,y,b){return p||s.curry&&b>1?R(y,b):y}function Uu(I,y,b){if(s.fixed&&(m||!X.skipFixed[I])){var v=X.methodSpread[I],L=v&&v.start;return L===void 0?S(y,b):kL(y,L)}return y}function qu(I,y,b){return s.rearg&&b>1&&(f||!X.skipRearg[I])?Ir(y,X.methodRearg[I]||X.aryRearg[b]):y}function TI(I,y){y=bI(y);for(var b=-1,v=y.length,L=v-1,ae=_(Object(I)),Me=ae;Me!=null&&++b<v;){var we=y[b],Ge=Me[we];Ge!=null&&!(Se(Ge)||Oe(Ge)||pt(Ge))&&(Me[we]=_(b==L?Ge:Object(Ge))),Me=Me[we]}return ae}function vI(I){return me.runInContext.convert(I)(void 0)}function Du(I,y){var b=X.aliasToReal[I]||I,v=X.remap[b]||b,L=a;return function(ae){var Me=n?h:g,we=n?h[v]:y,Ge=O(O({},L),ae);return Zs(Me,b,we,Ge)}}function EI(I,y){return Nu(I,function(b){return typeof b=="function"?Js(b,y):b})}function RI(I,y){return Nu(I,function(b){var v=y.length;return ML(Ir(Js(b,v),y),v)})}function Nu(I,y){return function(){var b=arguments.length;if(!b)return I();for(var v=Array(b);b--;)v[b]=arguments[b];var L=s.rearg?0:b-1;return v[L]=y(v[L]),I.apply(void 0,v)}}function Bu(I,y,b){var v,L=X.aliasToReal[I]||I,ae=y,Me=II[L];return Me?ae=Me(y):s.immutable&&(X.mutate.array[L]?ae=Xs(y,lm):X.mutate.object[L]?ae=Xs(y,GL(y)):X.mutate.set[L]&&(ae=Xs(y,TI))),E(Pu,function(we){return E(X.aryMethod[we],function(Ge){if(L==Ge){var Mu=X.methodSpread[L],_I=Mu&&Mu.afterRearg;return v=_I?Uu(L,qu(L,ae,we),we):qu(L,Uu(L,ae,we),we),v=SI(L,v),v=wI(L,v,we),!1}}),!v}),v||(v=ae),v==y&&(v=p?R(v,1):function(){return y.apply(this,arguments)}),v.convert=Du(L,y),v.placeholder=y.placeholder=b,v}if(!o)return Bu(t,r,i);var me=r,wr=[];return E(Pu,function(I){E(X.aryMethod[I],function(y){var b=me[X.remap[y]||y];b&&wr.push([y,Bu(y,b,me)])})}),E(kt(me),function(I){var y=me[I];if(typeof y=="function"){for(var b=wr.length;b--;)if(wr[b][0]==I)return;y.convert=Du(I,y),wr.push([I,y])}}),E(wr,function(I){me[I[0]]=I[1]}),me.convert=vI,me.placeholder=me,E(kt(me),function(I){E(X.realToAlias[I]||[],function(y){me[y]=me[I]})}),me}dm.exports=Zs});var ei=u((_j,mm)=>{"use strict";var FL=gt(),QL=oe(),jL=FL(QL,"WeakMap");mm.exports=jL});var ti=u((xj,hm)=>{"use strict";var gm=ei(),WL=gm&&new gm;hm.exports=WL});var ri=u((Lj,Am)=>{"use strict";var $L=Jr(),ym=ti(),KL=ym?function(e,t){return ym.set(e,t),e}:$L;Am.exports=KL});var wa=u((Oj,bm)=>{"use strict";var VL=sa(),YL=Ee();function HL(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=VL(e.prototype),a=e.apply(r,t);return YL(a)?a:r}}bm.exports=HL});var Sm=u((Cj,Im)=>{"use strict";var zL=wa(),JL=oe(),XL=1;function ZL(e,t,r){var a=t&XL,n=zL(e);function o(){var s=this&&this!==JL&&this instanceof o?n:e;return s.apply(a?r:this,arguments)}return o}Im.exports=ZL});var ai=u((Pj,wm)=>{"use strict";var eO=Math.max;function tO(e,t,r,a){for(var n=-1,o=e.length,s=r.length,i=-1,p=t.length,m=eO(o-s,0),f=Array(p+m),h=!a;++i<p;)f[i]=t[i];for(;++n<s;)(h||n<o)&&(f[r[n]]=e[n]);for(;m--;)f[i++]=e[n++];return f}wm.exports=tO});var ni=u((Uj,Tm)=>{"use strict";var rO=Math.max;function aO(e,t,r,a){for(var n=-1,o=e.length,s=-1,i=r.length,p=-1,m=t.length,f=rO(o-i,0),h=Array(f+m),g=!a;++n<f;)h[n]=e[n];for(var S=n;++p<m;)h[S+p]=t[p];for(;++s<i;)(g||n<o)&&(h[S+r[s]]=e[n++]);return h}Tm.exports=aO});var Em=u((qj,vm)=>{"use strict";function nO(e,t){for(var r=e.length,a=0;r--;)e[r]===t&&++a;return a}vm.exports=nO});var Pn=u((Dj,Rm)=>{"use strict";function oO(){}Rm.exports=oO});var qn=u((Nj,_m)=>{"use strict";var sO=sa(),iO=Pn(),uO=4294967295;function Un(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=uO,this.__views__=[]}Un.prototype=sO(iO.prototype);Un.prototype.constructor=Un;_m.exports=Un});var oi=u((Bj,Lm)=>{"use strict";var xm=ti(),pO=Go(),cO=xm?function(e){return xm.get(e)}:pO;Lm.exports=cO});var Cm=u((Mj,Om)=>{"use strict";var lO={};Om.exports=lO});var qm=u((Gj,Um)=>{"use strict";var Pm=Cm(),dO=Object.prototype,fO=dO.hasOwnProperty;function mO(e){for(var t=e.name+"",r=Pm[t],a=fO.call(Pm,t)?r.length:0;a--;){var n=r[a],o=n.func;if(o==null||o==e)return n.name}return t}Um.exports=mO});var si=u((kj,Dm)=>{"use strict";var gO=sa(),hO=Pn();function Dn(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=void 0}Dn.prototype=gO(hO.prototype);Dn.prototype.constructor=Dn;Dm.exports=Dn});var Bm=u((Fj,Nm)=>{"use strict";var yO=qn(),AO=si(),bO=er();function IO(e){if(e instanceof yO)return e.clone();var t=new AO(e.__wrapped__,e.__chain__);return t.__actions__=bO(e.__actions__),t.__index__=e.__index__,t.__values__=e.__values__,t}Nm.exports=IO});var km=u((Qj,Gm)=>{"use strict";var SO=qn(),Mm=si(),wO=Pn(),TO=re(),vO=he(),EO=Bm(),RO=Object.prototype,_O=RO.hasOwnProperty;function Nn(e){if(vO(e)&&!TO(e)&&!(e instanceof SO)){if(e instanceof Mm)return e;if(_O.call(e,"__wrapped__"))return EO(e)}return new Mm(e)}Nn.prototype=wO.prototype;Nn.prototype.constructor=Nn;Gm.exports=Nn});var Qm=u((jj,Fm)=>{"use strict";var xO=qn(),LO=oi(),OO=qm(),CO=km();function PO(e){var t=OO(e),r=CO[t];if(typeof r!="function"||!(t in xO.prototype))return!1;if(e===r)return!0;var a=LO(r);return!!a&&e===a[0]}Fm.exports=PO});var ii=u((Wj,jm)=>{"use strict";var UO=ri(),qO=Uo(),DO=qO(UO);jm.exports=DO});var $m=u(($j,Wm)=>{"use strict";var NO=/\{\n\/\* \[wrapped with (.+)\] \*/,BO=/,? & /;function MO(e){var t=e.match(NO);return t?t[1].split(BO):[]}Wm.exports=MO});var Vm=u((Kj,Km)=>{"use strict";var GO=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/;function kO(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(GO,`{
|
|
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})},ku=(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)):{},ku(t||!e||!e.__esModule?Da(r,"default",{value:e,enumerable:!0}):r,e)),qI=e=>ku(Da({},"__esModule",{value:!0}),e);var Xa=u((Zk,Ep)=>{"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}Ep.exports=CS});var xo=u((e0,Rp)=>{"use strict";var PS=typeof global=="object"&&global&&global.Object===Object&&global;Rp.exports=PS});var oe=u((t0,_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((r0,xp)=>{"use strict";var NS=oe(),BS=NS.Symbol;xp.exports=BS});var Pp=u((a0,Cp)=>{"use strict";var Op=_t(),Lp=Object.prototype,MS=Lp.hasOwnProperty,GS=Lp.toString,zr=Op?Op.toStringTag:void 0;function kS(e){var t=MS.call(e,zr),r=e[zr];try{e[zr]=void 0;var a=!0}catch{}var n=GS.call(e);return a&&(t?e[zr]=r:delete e[zr]),n}Cp.exports=kS});var qp=u((n0,Up)=>{"use strict";var FS=Object.prototype,QS=FS.toString;function jS(e){return QS.call(e)}Up.exports=jS});var mt=u((o0,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 ye=u((s0,Mp)=>{"use strict";function HS(e){return e!=null&&typeof e=="object"}Mp.exports=HS});var kp=u((i0,Gp)=>{"use strict";var zS=mt(),JS=ye(),XS="[object Arguments]";function ZS(e){return JS(e)&&zS(e)==XS}Gp.exports=ZS});var Jr=u((u0,jp)=>{"use strict";var Fp=kp(),ew=ye(),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 re=u((p0,Wp)=>{"use strict";var nw=Array.isArray;Wp.exports=nw});var Yp=u((c0,Vp)=>{"use strict";var $p=_t(),ow=Jr(),sw=re(),Kp=$p?$p.isConcatSpreadable:void 0;function iw(e){return sw(e)||ow(e)||!!(Kp&&e&&e[Kp])}Vp.exports=iw});var Oo=u((l0,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((d0,Jp)=>{"use strict";function cw(e){return e}Jp.exports=cw});var Za=u((f0,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((m0,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((g0,tc)=>{"use strict";function mw(e){return function(){return e}}tc.exports=mw});var Ee=u((y0,ac)=>{"use strict";function gw(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}ac.exports=gw});var Zr=u((h0,nc)=>{"use strict";var yw=mt(),hw=Ee(),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((A0,oc)=>{"use strict";var Tw=oe(),vw=Tw["__core-js_shared__"];oc.exports=vw});var pc=u((b0,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 Ew(e){return!!ic&&ic in e}uc.exports=Ew});var Po=u((I0,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((S0,lc)=>{"use strict";var Ow=Zr(),Lw=pc(),Cw=Ee(),Pw=Po(),Uw=/[\\^$.*+?()[\]{}|]/g,qw=/^\[object .+?Constructor\]$/,Dw=Function.prototype,Nw=Object.prototype,Bw=Dw.toString,Mw=Nw.hasOwnProperty,Gw=RegExp("^"+Bw.call(Mw).replace(Uw,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function kw(e){if(!Cw(e)||Lw(e))return!1;var t=Ow(e)?Gw:qw;return t.test(Pw(e))}lc.exports=kw});var mc=u((w0,fc)=>{"use strict";function Fw(e,t){return e?.[t]}fc.exports=Fw});var gt=u((T0,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((E0,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((R0,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((_0,Sc)=>{"use strict";var eT=bc(),tT=qo(),rT=tT(eT);Sc.exports=rT});var Do=u((x0,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((O0,Tc)=>{"use strict";var iT=gt(),uT=iT(Object,"create");Tc.exports=uT});var Rc=u((L0,Ec)=>{"use strict";var vc=ea();function pT(){this.__data__=vc?vc(null):{},this.size=0}Ec.exports=pT});var xc=u((C0,_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((P0,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((U0,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((q0,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((D0,Dc)=>{"use strict";var TT=Rc(),vT=xc(),ET=Lc(),RT=Pc(),_T=qc();function Vt(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var a=e[t];this.set(a[0],a[1])}}Vt.prototype.clear=TT;Vt.prototype.delete=vT;Vt.prototype.get=ET;Vt.prototype.has=RT;Vt.prototype.set=_T;Dc.exports=Vt});var Mc=u((N0,Bc)=>{"use strict";function xT(){this.__data__=[],this.size=0}Bc.exports=xT});var Yt=u((B0,Gc)=>{"use strict";function OT(e,t){return e===t||e!==e&&t!==t}Gc.exports=OT});var ta=u((M0,kc)=>{"use strict";var LT=Yt();function CT(e,t){for(var r=e.length;r--;)if(LT(e[r][0],t))return r;return-1}kc.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((k0,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((F0,$c)=>{"use strict";var MT=ta();function GT(e){return MT(this.__data__,e)>-1}$c.exports=GT});var Yc=u((Q0,Vc)=>{"use strict";var kT=ta();function FT(e,t){var r=this.__data__,a=kT(r,e);return a<0?(++this.size,r.push([e,t])):r[a][1]=t,this}Vc.exports=FT});var ra=u((j0,Hc)=>{"use strict";var QT=Mc(),jT=Qc(),WT=Wc(),$T=Kc(),KT=Yc();function Ht(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var a=e[t];this.set(a[0],a[1])}}Ht.prototype.clear=QT;Ht.prototype.delete=jT;Ht.prototype.get=WT;Ht.prototype.has=$T;Ht.prototype.set=KT;Hc.exports=Ht});var tn=u((W0,zc)=>{"use strict";var VT=gt(),YT=oe(),HT=VT(YT,"Map");zc.exports=HT});var Zc=u(($0,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((K0,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((V0,rl)=>{"use strict";var ev=tl();function tv(e,t){var r=e.__data__;return ev(t)?r[typeof t=="string"?"string":"hash"]:r.map}rl.exports=tv});var nl=u((Y0,al)=>{"use strict";var rv=aa();function av(e){var t=rv(this,e).delete(e);return this.size-=t?1:0,t}al.exports=av});var sl=u((H0,ol)=>{"use strict";var nv=aa();function ov(e){return nv(this,e).get(e)}ol.exports=ov});var ul=u((z0,il)=>{"use strict";var sv=aa();function iv(e){return sv(this,e).has(e)}il.exports=iv});var cl=u((J0,pl)=>{"use strict";var uv=aa();function pv(e,t){var r=uv(this,e),a=r.size;return r.set(e,t),this.size+=r.size==a?0:1,this}pl.exports=pv});var rn=u((X0,ll)=>{"use strict";var cv=Zc(),lv=nl(),dv=sl(),fv=ul(),mv=cl();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=cv;zt.prototype.delete=lv;zt.prototype.get=dv;zt.prototype.has=fv;zt.prototype.set=mv;ll.exports=zt});var fl=u((Z0,dl)=>{"use strict";var gv="__lodash_hash_undefined__";function yv(e){return this.__data__.set(e,gv),this}dl.exports=yv});var gl=u((eF,ml)=>{"use strict";function hv(e){return this.__data__.has(e)}ml.exports=hv});var No=u((tF,yl)=>{"use strict";var Av=rn(),bv=fl(),Iv=gl();function an(e){var t=-1,r=e==null?0:e.length;for(this.__data__=new Av;++t<r;)this.add(e[t])}an.prototype.add=an.prototype.push=bv;an.prototype.has=Iv;yl.exports=an});var Al=u((rF,hl)=>{"use strict";function Sv(e,t,r,a){for(var n=e.length,o=r+(a?1:-1);a?o--:++o<n;)if(t(e[o],o,e))return o;return-1}hl.exports=Sv});var Il=u((aF,bl)=>{"use strict";function wv(e){return e!==e}bl.exports=wv});var wl=u((nF,Sl)=>{"use strict";function Tv(e,t,r){for(var a=r-1,n=e.length;++a<n;)if(e[a]===t)return a;return-1}Sl.exports=Tv});var vl=u((oF,Tl)=>{"use strict";var vv=Al(),Ev=Il(),Rv=wl();function _v(e,t,r){return t===t?Rv(e,t,r):vv(e,Ev,r)}Tl.exports=_v});var Bo=u((sF,El)=>{"use strict";var xv=vl();function Ov(e,t){var r=e==null?0:e.length;return!!r&&xv(e,t,0)>-1}El.exports=Ov});var _l=u((iF,Rl)=>{"use strict";function Lv(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=Lv});var Mo=u((uF,xl)=>{"use strict";function Cv(e,t){return e.has(t)}xl.exports=Cv});var Go=u((pF,Ol)=>{"use strict";var Pv=gt(),Uv=oe(),qv=Pv(Uv,"Set");Ol.exports=qv});var ko=u((cF,Ll)=>{"use strict";function Dv(){}Ll.exports=Dv});var nn=u((lF,Cl)=>{"use strict";function Nv(e){var t=-1,r=Array(e.size);return e.forEach(function(a){r[++t]=a}),r}Cl.exports=Nv});var Ul=u((dF,Pl)=>{"use strict";var Fo=Go(),Bv=ko(),Mv=nn(),Gv=1/0,kv=Fo&&1/Mv(new Fo([,-0]))[1]==Gv?function(e){return new Fo(e)}:Bv;Pl.exports=kv});var Dl=u((fF,ql)=>{"use strict";var Fv=No(),Qv=Bo(),jv=_l(),Wv=Mo(),$v=Ul(),Kv=nn(),Vv=200;function Yv(e,t,r){var a=-1,n=Qv,o=e.length,s=!0,i=[],p=i;if(r)s=!1,n=jv;else if(o>=Vv){var f=t?null:$v(e);if(f)return Kv(f);s=!1,n=Wv,p=new Fv}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=Yv});var on=u((mF,Nl)=>{"use strict";var Hv=9007199254740991;function zv(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=Hv}Nl.exports=zv});var Jt=u((gF,Bl)=>{"use strict";var Jv=Zr(),Xv=on();function Zv(e){return e!=null&&Xv(e.length)&&!Jv(e)}Bl.exports=Zv});var Qo=u((yF,Ml)=>{"use strict";var eE=Jt(),tE=ye();function rE(e){return tE(e)&&eE(e)}Ml.exports=rE});var kl=u((hF,Gl)=>{"use strict";var aE=Oo(),nE=Do(),oE=Dl(),sE=Qo(),iE=nE(function(e){return oE(aE(e,1,sE,!0))});Gl.exports=iE});var Ql=u((AF,Fl)=>{"use strict";var uE=ra();function pE(){this.__data__=new uE,this.size=0}Fl.exports=pE});var Wl=u((bF,jl)=>{"use strict";function cE(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r}jl.exports=cE});var Kl=u((IF,$l)=>{"use strict";function lE(e){return this.__data__.get(e)}$l.exports=lE});var Yl=u((SF,Vl)=>{"use strict";function dE(e){return this.__data__.has(e)}Vl.exports=dE});var zl=u((wF,Hl)=>{"use strict";var fE=ra(),mE=tn(),gE=rn(),yE=200;function hE(e,t){var r=this.__data__;if(r instanceof fE){var a=r.__data__;if(!mE||a.length<yE-1)return a.push([e,t]),this.size=++r.size,this;r=this.__data__=new gE(a)}return r.set(e,t),this.size=r.size,this}Hl.exports=hE});var na=u((TF,Jl)=>{"use strict";var AE=ra(),bE=Ql(),IE=Wl(),SE=Kl(),wE=Yl(),TE=zl();function Xt(e){var t=this.__data__=new AE(e);this.size=t.size}Xt.prototype.clear=bE;Xt.prototype.delete=IE;Xt.prototype.get=SE;Xt.prototype.has=wE;Xt.prototype.set=TE;Jl.exports=Xt});var oa=u((vF,Zl)=>{"use strict";var Xl=Uo();function vE(e,t,r){t=="__proto__"&&Xl?Xl(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}Zl.exports=vE});var jo=u((EF,ed)=>{"use strict";var EE=oa(),RE=Yt();function _E(e,t,r){(r!==void 0&&!RE(e[t],r)||r===void 0&&!(t in e))&&EE(e,t,r)}ed.exports=_E});var rd=u((RF,td)=>{"use strict";function xE(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=xE});var Wo=u((_F,ad)=>{"use strict";var OE=rd(),LE=OE();ad.exports=LE});var $o=u((sa,Zt)=>{"use strict";var CE=oe(),id=typeof sa=="object"&&sa&&!sa.nodeType&&sa,nd=id&&typeof Zt=="object"&&Zt&&!Zt.nodeType&&Zt,PE=nd&&nd.exports===id,od=PE?CE.Buffer:void 0,sd=od?od.allocUnsafe:void 0;function UE(e,t){if(t)return e.slice();var r=e.length,a=sd?sd(r):new e.constructor(r);return e.copy(a),a}Zt.exports=UE});var Ko=u((xF,ud)=>{"use strict";var qE=oe(),DE=qE.Uint8Array;ud.exports=DE});var sn=u((OF,cd)=>{"use strict";var pd=Ko();function NE(e){var t=new e.constructor(e.byteLength);return new pd(t).set(new pd(e)),t}cd.exports=NE});var Vo=u((LF,ld)=>{"use strict";var BE=sn();function ME(e,t){var r=t?BE(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.length)}ld.exports=ME});var er=u((CF,dd)=>{"use strict";function GE(e,t){var r=-1,a=e.length;for(t||(t=Array(a));++r<a;)t[r]=e[r];return t}dd.exports=GE});var ia=u((PF,md)=>{"use strict";var kE=Ee(),fd=Object.create,FE=function(){function e(){}return function(t){if(!kE(t))return{};if(fd)return fd(t);e.prototype=t;var r=new e;return e.prototype=void 0,r}}();md.exports=FE});var Yo=u((UF,gd)=>{"use strict";function QE(e,t){return function(r){return e(t(r))}}gd.exports=QE});var un=u((qF,yd)=>{"use strict";var jE=Yo(),WE=jE(Object.getPrototypeOf,Object);yd.exports=WE});var pn=u((DF,hd)=>{"use strict";var $E=Object.prototype;function KE(e){var t=e&&e.constructor,r=typeof t=="function"&&t.prototype||$E;return e===r}hd.exports=KE});var Ho=u((NF,Ad)=>{"use strict";var VE=ia(),YE=un(),HE=pn();function zE(e){return typeof e.constructor=="function"&&!HE(e)?VE(YE(e)):{}}Ad.exports=zE});var Id=u((BF,bd)=>{"use strict";function JE(){return!1}bd.exports=JE});var pa=u((ua,tr)=>{"use strict";var XE=oe(),ZE=Id(),Td=typeof ua=="object"&&ua&&!ua.nodeType&&ua,Sd=Td&&typeof tr=="object"&&tr&&!tr.nodeType&&tr,eR=Sd&&Sd.exports===Td,wd=eR?XE.Buffer:void 0,tR=wd?wd.isBuffer:void 0,rR=tR||ZE;tr.exports=rR});var zo=u((MF,Ed)=>{"use strict";var aR=mt(),nR=un(),oR=ye(),sR="[object Object]",iR=Function.prototype,uR=Object.prototype,vd=iR.toString,pR=uR.hasOwnProperty,cR=vd.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&&vd.call(r)==cR}Ed.exports=lR});var _d=u((GF,Rd)=>{"use strict";var dR=mt(),fR=on(),mR=ye(),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]",vR="[object RegExp]",ER="[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[vR]=B[ER]=B[RR]=B[_R]=!1;function GR(e){return mR(e)&&fR(e.length)&&!!B[dR(e)]}Rd.exports=GR});var cn=u((kF,xd)=>{"use strict";function kR(e){return function(t){return e(t)}}xd.exports=kR});var ln=u((ca,rr)=>{"use strict";var FR=xo(),Od=typeof ca=="object"&&ca&&!ca.nodeType&&ca,la=Od&&typeof rr=="object"&&rr&&!rr.nodeType&&rr,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{}}();rr.exports=jR});var dn=u((FF,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((QF,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((jF,qd)=>{"use strict";var YR=oa(),HR=Yt(),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 ar=u((WF,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(($F,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((KF,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((VF,Gd)=>{"use strict";var s_=Bd(),i_=Jr(),u_=re(),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}Gd.exports=m_});var Fd=u((YF,kd)=>{"use strict";function g_(e){var t=[];if(e!=null)for(var r in Object(e))t.push(r);return t}kd.exports=g_});var jd=u((HF,Qd)=>{"use strict";var y_=Ee(),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 nr=u((zF,Wd)=>{"use strict";var w_=es(),T_=jd(),v_=Jt();function E_(e){return v_(e)?w_(e,!0):T_(e)}Wd.exports=E_});var Kd=u((JF,$d)=>{"use strict";var R_=ar(),__=nr();function x_(e){return R_(e,__(e))}$d.exports=x_});var Xd=u((XF,Jd)=>{"use strict";var Vd=jo(),O_=$o(),L_=Vo(),C_=er(),P_=Ho(),Yd=Jr(),Hd=re(),U_=Qo(),q_=pa(),D_=Zr(),N_=Ee(),B_=zo(),M_=dn(),zd=Xo(),G_=Kd();function k_(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),L=!g&&!I&&M_(p);m=p,g||I||L?Hd(i)?m=i:U_(i)?m=C_(i):I?(y=!1,m=O_(p,!0)):L?(y=!1,m=L_(p,!0)):m=[]:B_(p)||Yd(p)?(m=i,Yd(i)?m=G_(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=k_});var tf=u((ZF,ef)=>{"use strict";var F_=na(),Q_=jo(),j_=Wo(),W_=Xd(),$_=Ee(),K_=nr(),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((e1,rf)=>{"use strict";var Y_=Yt(),H_=Jt(),z_=da(),J_=Ee();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((t1,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((r1,sf)=>{"use strict";var rx=tf(),ax=of(),nx=ax(function(e,t,r){rx(e,t,r)});sf.exports=nx});var pm=u(de=>{"use strict";de.aliasToReal={each:"forEach",eachRight:"forEachRight",entries:"toPairs",entriesIn:"toPairsIn",extend:"assignIn",extendAll:"assignInAll",extendAllWith:"assignInAllWith",extendWith:"assignInWith",first:"head",conforms:"conformsTo",matches:"isMatch",property:"get",__:"placeholder",F:"stubFalse",T:"stubTrue",all:"every",allPass:"overEvery",always:"constant",any:"some",anyPass:"overSome",apply:"spread",assoc:"set",assocPath:"set",complement:"negate",compose:"flowRight",contains:"includes",dissoc:"unset",dissocPath:"unset",dropLast:"dropRight",dropLastWhile:"dropRightWhile",equals:"isEqual",identical:"eq",indexBy:"keyBy",init:"initial",invertObj:"invert",juxt:"over",omitAll:"omit",nAry:"ary",path:"get",pathEq:"matchesProperty",pathOr:"getOr",paths:"at",pickAll:"pick",pipe:"flow",pluck:"map",prop:"get",propEq:"matchesProperty",propOr:"getOr",props:"at",symmetricDifference:"xor",symmetricDifferenceBy:"xorBy",symmetricDifferenceWith:"xorWith",takeLast:"takeRight",takeLastWhile:"takeRightWhile",unapply:"rest",unnest:"flatten",useWith:"overArgs",where:"conformsTo",whereEq:"isMatch",zipObj:"zipObject"};de.aryMethod={1:["assignAll","assignInAll","attempt","castArray","ceil","create","curry","curryRight","defaultsAll","defaultsDeepAll","floor","flow","flowRight","fromPairs","invert","iteratee","memoize","method","mergeAll","methodOf","mixin","nthArg","over","overEvery","overSome","rest","reverse","round","runInContext","spread","template","trim","trimEnd","trimStart","uniqueId","words","zipAll"],2:["add","after","ary","assign","assignAllWith","assignIn","assignInAllWith","at","before","bind","bindAll","bindKey","chunk","cloneDeepWith","cloneWith","concat","conformsTo","countBy","curryN","curryRightN","debounce","defaults","defaultsDeep","defaultTo","delay","difference","divide","drop","dropRight","dropRightWhile","dropWhile","endsWith","eq","every","filter","find","findIndex","findKey","findLast","findLastIndex","findLastKey","flatMap","flatMapDeep","flattenDepth","forEach","forEachRight","forIn","forInRight","forOwn","forOwnRight","get","groupBy","gt","gte","has","hasIn","includes","indexOf","intersection","invertBy","invoke","invokeMap","isEqual","isMatch","join","keyBy","lastIndexOf","lt","lte","map","mapKeys","mapValues","matchesProperty","maxBy","meanBy","merge","mergeAllWith","minBy","multiply","nth","omit","omitBy","overArgs","pad","padEnd","padStart","parseInt","partial","partialRight","partition","pick","pickBy","propertyOf","pull","pullAll","pullAt","random","range","rangeRight","rearg","reject","remove","repeat","restFrom","result","sampleSize","some","sortBy","sortedIndex","sortedIndexOf","sortedLastIndex","sortedLastIndexOf","sortedUniqBy","split","spreadFrom","startsWith","subtract","sumBy","take","takeRight","takeRightWhile","takeWhile","tap","throttle","thru","times","trimChars","trimCharsEnd","trimCharsStart","truncate","union","uniqBy","uniqWith","unset","unzipWith","without","wrap","xor","zip","zipObject","zipObjectDeep"],3:["assignInWith","assignWith","clamp","differenceBy","differenceWith","findFrom","findIndexFrom","findLastFrom","findLastIndexFrom","getOr","includesFrom","indexOfFrom","inRange","intersectionBy","intersectionWith","invokeArgs","invokeArgsMap","isEqualWith","isMatchWith","flatMapDepth","lastIndexOfFrom","mergeWith","orderBy","padChars","padCharsEnd","padCharsStart","pullAllBy","pullAllWith","rangeStep","rangeStepRight","reduce","reduceRight","replace","set","slice","sortedIndexBy","sortedLastIndexBy","transform","unionBy","unionWith","update","xorBy","xorWith","zipWith"],4:["fill","setWith","updateWith"]};de.aryRearg={2:[1,0],3:[2,0,1],4:[3,2,0,1]};de.iterateeAry={dropRightWhile:1,dropWhile:1,every:1,filter:1,find:1,findFrom:1,findIndex:1,findIndexFrom:1,findKey:1,findLast:1,findLastFrom:1,findLastIndex:1,findLastIndexFrom:1,findLastKey:1,flatMap:1,flatMapDeep:1,flatMapDepth:1,forEach:1,forEachRight:1,forIn:1,forInRight:1,forOwn:1,forOwnRight:1,map:1,mapKeys:1,mapValues:1,partition:1,reduce:2,reduceRight:2,reject:1,remove:1,some:1,takeRightWhile:1,takeWhile:1,times:1,transform:2};de.iterateeRearg={mapKeys:[1],reduceRight:[1,0]};de.methodRearg={assignInAllWith:[1,0],assignInWith:[1,2,0],assignAllWith:[1,0],assignWith:[1,2,0],differenceBy:[1,2,0],differenceWith:[1,2,0],getOr:[2,1,0],intersectionBy:[1,2,0],intersectionWith:[1,2,0],isEqualWith:[1,2,0],isMatchWith:[2,1,0],mergeAllWith:[1,0],mergeWith:[1,2,0],padChars:[2,1,0],padCharsEnd:[2,1,0],padCharsStart:[2,1,0],pullAllBy:[2,1,0],pullAllWith:[2,1,0],rangeStep:[1,2,0],rangeStepRight:[1,2,0],setWith:[3,1,2,0],sortedIndexBy:[2,1,0],sortedLastIndexBy:[2,1,0],unionBy:[1,2,0],unionWith:[1,2,0],updateWith:[3,1,2,0],xorBy:[1,2,0],xorWith:[1,2,0],zipWith:[1,2,0]};de.methodSpread={assignAll:{start:0},assignAllWith:{start:0},assignInAll:{start:0},assignInAllWith:{start:0},defaultsAll:{start:0},defaultsDeepAll:{start:0},invokeArgs:{start:2},invokeArgsMap:{start:2},mergeAll:{start:0},mergeAllWith:{start:0},partial:{start:1},partialRight:{start:1},without:{start:1},zipAll:{start:0}};de.mutate={array:{fill:!0,pull:!0,pullAll:!0,pullAllBy:!0,pullAllWith:!0,pullAt:!0,remove:!0,reverse:!0},object:{assign:!0,assignAll:!0,assignAllWith:!0,assignIn:!0,assignInAll:!0,assignInAllWith:!0,assignInWith:!0,assignWith:!0,defaults:!0,defaultsAll:!0,defaultsDeep:!0,defaultsDeepAll:!0,merge:!0,mergeAll:!0,mergeAllWith:!0,mergeWith:!0},set:{set:!0,setWith:!0,unset:!0,update:!0,updateWith:!0}};de.realToAlias=function(){var e=Object.prototype.hasOwnProperty,t=de.aliasToReal,r={};for(var a in t){var n=t[a];e.call(r,n)?r[n].push(a):r[n]=[a]}return r}();de.remap={assignAll:"assign",assignAllWith:"assignWith",assignInAll:"assignIn",assignInAllWith:"assignInWith",curryN:"curry",curryRightN:"curryRight",defaultsAll:"defaults",defaultsDeepAll:"defaultsDeep",findFrom:"find",findIndexFrom:"findIndex",findLastFrom:"findLast",findLastIndexFrom:"findLastIndex",getOr:"get",includesFrom:"includes",indexOfFrom:"indexOf",invokeArgs:"invoke",invokeArgsMap:"invokeMap",lastIndexOfFrom:"lastIndexOf",mergeAll:"merge",mergeAllWith:"mergeWith",padChars:"pad",padCharsEnd:"padEnd",padCharsStart:"padStart",propertyOf:"get",rangeStep:"range",rangeStepRight:"rangeRight",restFrom:"rest",spreadFrom:"spread",trimChars:"trim",trimCharsEnd:"trimEnd",trimCharsStart:"trimStart",zipAll:"zip"};de.skipFixed={castArray:!0,flow:!0,flowRight:!0,iteratee:!0,mixin:!0,rearg:!0,runInContext:!0};de.skipRearg={add:!0,assign:!0,assignIn:!0,bind:!0,bindKey:!0,concat:!0,difference:!0,divide:!0,eq:!0,gt:!0,gte:!0,isEqual:!0,lt:!0,lte:!0,matchesProperty:!0,merge:!0,multiply:!0,overArgs:!0,partial:!0,partialRight:!0,propertyOf:!0,random:!0,range:!0,rangeRight:!0,subtract:!0,zip:!0,zipObject:!0,zipObjectDeep:!0}});var Js=u((Rj,cm)=>{"use strict";cm.exports={}});var mm=u((_j,fm)=>{"use strict";var X=pm(),MO=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 kO(e){return function(t){return e({},t)}}function FO(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:MO,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,L=g.assign,_=g.clone,R=g.curry,E=g.forEach,U=g.isArray,Le=g.isError,Se=g.isFunction,pt=g.isWeakMap,kt=g.keys,Ir=g.rearg,Sr=g.toInteger,II=g.toPath,Uu=kt(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],v=S(h,b),O=v.length;return s.cap&&typeof b=="number"?(b=b>2?b-2:1,O&&O<=b?v:Xs(v,b)):v}},mixin:function(S){return function(h){var b=this;if(!Se(b))return S(b,Object(h));var v=[];return E(kt(h),function(O){Se(h[O])&&v.push([O,b.prototype[O]])}),S(b,Object(h)),E(v,function(O){var ae=O[1];Se(ae)?b.prototype[O[0]]=ae:delete b.prototype[O[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 v=b?b.length:0;return R(S(h,b),v)}},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 v=!n&&X.iterateeAry[S];if(v)return RI(h,v)}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 v=X.methodSpread[S],O=v&&v.start;return O===void 0?I(h,b):FO(h,O)}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 vI(S,h){h=II(h);for(var b=-1,v=h.length,O=v-1,ae=_(Object(S)),Me=ae;Me!=null&&++b<v;){var we=h[b],Ge=Me[we];Ge!=null&&!(Se(Ge)||Le(Ge)||pt(Ge))&&(Me[we]=_(b==O?Ge:Object(Ge))),Me=Me[we]}return ae}function EI(S){return me.runInContext.convert(S)(void 0)}function Nu(S,h){var b=X.aliasToReal[S]||S,v=X.remap[b]||b,O=a;return function(ae){var Me=n?y:g,we=n?y[v]:h,Ge=L(L({},O),ae);return ei(Me,b,we,Ge)}}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 v=h.length;return GO(Ir(Xs(b,v),h),v)})}function Bu(S,h){return function(){var b=arguments.length;if(!b)return S();for(var v=Array(b);b--;)v[b]=arguments[b];var O=s.rearg?0:b-1;return v[O]=h(v[O]),S.apply(void 0,v)}}function Mu(S,h,b){var v,O=X.aliasToReal[S]||S,ae=h,Me=SI[O];return Me?ae=Me(h):s.immutable&&(X.mutate.array[O]?ae=Zs(h,dm):X.mutate.object[O]?ae=Zs(h,kO(h)):X.mutate.set[O]&&(ae=Zs(h,vI))),E(Uu,function(we){return E(X.aryMethod[we],function(Ge){if(O==Ge){var Gu=X.methodSpread[O],xI=Gu&&Gu.afterRearg;return v=xI?qu(O,Du(O,ae,we),we):Du(O,qu(O,ae,we),we),v=wI(O,v),v=TI(O,v,we),!1}}),!v}),v||(v=ae),v==h&&(v=p?R(v,1):function(){return h.apply(this,arguments)}),v.convert=Nu(O,h),v.placeholder=h.placeholder=b,v}if(!o)return Mu(t,r,i);var me=r,wr=[];return E(Uu,function(S){E(X.aryMethod[S],function(h){var b=me[X.remap[h]||h];b&&wr.push([h,Mu(h,b,me)])})}),E(kt(me),function(S){var h=me[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])}}),E(wr,function(S){me[S[0]]=S[1]}),me.convert=EI,me.placeholder=me,E(kt(me),function(S){E(X.realToAlias[S]||[],function(h){me[h]=me[S]})}),me}fm.exports=ei});var ti=u((xj,gm)=>{"use strict";var QO=gt(),jO=oe(),WO=QO(jO,"WeakMap");gm.exports=WO});var ri=u((Oj,hm)=>{"use strict";var ym=ti(),$O=ym&&new ym;hm.exports=$O});var ai=u((Lj,bm)=>{"use strict";var KO=Xr(),Am=ri(),VO=Am?function(e,t){return Am.set(e,t),e}:KO;bm.exports=VO});var Ta=u((Cj,Im)=>{"use strict";var YO=ia(),HO=Ee();function zO(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=YO(e.prototype),a=e.apply(r,t);return HO(a)?a:r}}Im.exports=zO});var wm=u((Pj,Sm)=>{"use strict";var JO=Ta(),XO=oe(),ZO=1;function eL(e,t,r){var a=t&ZO,n=JO(e);function o(){var s=this&&this!==XO&&this instanceof o?n:e;return s.apply(a?r:this,arguments)}return o}Sm.exports=eL});var ni=u((Uj,Tm)=>{"use strict";var tL=Math.max;function rL(e,t,r,a){for(var n=-1,o=e.length,s=r.length,i=-1,p=t.length,f=tL(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=rL});var oi=u((qj,vm)=>{"use strict";var aL=Math.max;function nL(e,t,r,a){for(var n=-1,o=e.length,s=-1,i=r.length,p=-1,f=t.length,m=aL(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}vm.exports=nL});var Rm=u((Dj,Em)=>{"use strict";function oL(e,t){for(var r=e.length,a=0;r--;)e[r]===t&&++a;return a}Em.exports=oL});var Un=u((Nj,_m)=>{"use strict";function sL(){}_m.exports=sL});var Dn=u((Bj,xm)=>{"use strict";var iL=ia(),uL=Un(),pL=4294967295;function qn(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=pL,this.__views__=[]}qn.prototype=iL(uL.prototype);qn.prototype.constructor=qn;xm.exports=qn});var si=u((Mj,Lm)=>{"use strict";var Om=ri(),cL=ko(),lL=Om?function(e){return Om.get(e)}:cL;Lm.exports=lL});var Pm=u((Gj,Cm)=>{"use strict";var dL={};Cm.exports=dL});var Dm=u((kj,qm)=>{"use strict";var Um=Pm(),fL=Object.prototype,mL=fL.hasOwnProperty;function gL(e){for(var t=e.name+"",r=Um[t],a=mL.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=gL});var ii=u((Fj,Nm)=>{"use strict";var yL=ia(),hL=Un();function Nn(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=void 0}Nn.prototype=yL(hL.prototype);Nn.prototype.constructor=Nn;Nm.exports=Nn});var Mm=u((Qj,Bm)=>{"use strict";var AL=Dn(),bL=ii(),IL=er();function SL(e){if(e instanceof AL)return e.clone();var t=new bL(e.__wrapped__,e.__chain__);return t.__actions__=IL(e.__actions__),t.__index__=e.__index__,t.__values__=e.__values__,t}Bm.exports=SL});var Fm=u((jj,km)=>{"use strict";var wL=Dn(),Gm=ii(),TL=Un(),vL=re(),EL=ye(),RL=Mm(),_L=Object.prototype,xL=_L.hasOwnProperty;function Bn(e){if(EL(e)&&!vL(e)&&!(e instanceof wL)){if(e instanceof Gm)return e;if(xL.call(e,"__wrapped__"))return RL(e)}return new Gm(e)}Bn.prototype=TL.prototype;Bn.prototype.constructor=Bn;km.exports=Bn});var jm=u((Wj,Qm)=>{"use strict";var OL=Dn(),LL=si(),CL=Dm(),PL=Fm();function UL(e){var t=CL(e),r=PL[t];if(typeof r!="function"||!(t in OL.prototype))return!1;if(e===r)return!0;var a=LL(r);return!!a&&e===a[0]}Qm.exports=UL});var ui=u(($j,Wm)=>{"use strict";var qL=ai(),DL=qo(),NL=DL(qL);Wm.exports=NL});var Km=u((Kj,$m)=>{"use strict";var BL=/\{\n\/\* \[wrapped with (.+)\] \*/,ML=/,? & /;function GL(e){var t=e.match(BL);return t?t[1].split(ML):[]}$m.exports=GL});var Ym=u((Vj,Vm)=>{"use strict";var kL=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/;function FL(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(kL,`{
|
|
2
2
|
/* [wrapped with `+t+`] */
|
|
3
|
-
`)}Km.exports=kO});var Bn=u((Vj,Ym)=>{"use strict";function FO(e,t){for(var r=-1,a=e==null?0:e.length;++r<a&&t(e[r],r,e)!==!1;);return e}Ym.exports=FO});var zm=u((Yj,Hm)=>{"use strict";var QO=Bn(),jO=No(),WO=1,$O=2,KO=8,VO=16,YO=32,HO=64,zO=128,JO=256,XO=512,ZO=[["ary",zO],["bind",WO],["bindKey",$O],["curry",KO],["curryRight",VO],["flip",XO],["partial",YO],["partialRight",HO],["rearg",JO]];function eC(e,t){return QO(ZO,function(r){var a="_."+r[0];t&r[1]&&!jO(e,a)&&e.push(a)}),e.sort()}Hm.exports=eC});var ui=u((Hj,Jm)=>{"use strict";var tC=$m(),rC=Vm(),aC=Za(),nC=zm();function oC(e,t,r){var a=t+"";return aC(e,rC(a,nC(tC(a),r)))}Jm.exports=oC});var pi=u((zj,eg)=>{"use strict";var sC=Qm(),iC=ii(),uC=ui(),pC=1,cC=2,lC=4,dC=8,Xm=32,Zm=64;function fC(e,t,r,a,n,o,s,i,p,m){var f=t&dC,h=f?s:void 0,g=f?void 0:s,S=f?o:void 0,O=f?void 0:o;t|=f?Xm:Zm,t&=~(f?Zm:Xm),t&lC||(t&=~(pC|cC));var _=[e,t,n,S,h,O,g,i,p,m],R=r.apply(void 0,_);return sC(e)&&iC(R,_),R.placeholder=a,uC(R,e,t)}eg.exports=fC});var ci=u((Jj,tg)=>{"use strict";function mC(e){var t=e;return t.placeholder}tg.exports=mC});var ag=u((Xj,rg)=>{"use strict";var gC=er(),hC=la(),yC=Math.min;function AC(e,t){for(var r=e.length,a=yC(t.length,r),n=gC(e);a--;){var o=t[a];e[a]=hC(o,r)?n[o]:void 0}return e}rg.exports=AC});var Mn=u((Zj,og)=>{"use strict";var ng="__lodash_placeholder__";function bC(e,t){for(var r=-1,a=e.length,n=0,o=[];++r<a;){var s=e[r];(s===t||s===ng)&&(e[r]=ng,o[n++]=r)}return o}og.exports=bC});var li=u((eW,ug)=>{"use strict";var IC=ai(),SC=ni(),wC=Em(),sg=wa(),TC=pi(),vC=ci(),EC=ag(),RC=Mn(),_C=oe(),xC=1,LC=2,OC=8,CC=16,PC=128,UC=512;function ig(e,t,r,a,n,o,s,i,p,m){var f=t&PC,h=t&xC,g=t&LC,S=t&(OC|CC),O=t&UC,_=g?void 0:sg(e);function R(){for(var E=arguments.length,U=Array(E),Oe=E;Oe--;)U[Oe]=arguments[Oe];if(S)var Se=vC(R),pt=wC(U,Se);if(a&&(U=IC(U,a,n,S)),o&&(U=SC(U,o,s,S)),E-=pt,S&&E<m){var kt=RC(U,Se);return TC(e,t,ig,R.placeholder,r,U,kt,i,p,m-E)}var Ir=h?r:this,Sr=g?Ir[e]:e;return E=U.length,i?U=EC(U,i):O&&E>1&&U.reverse(),f&&p<E&&(U.length=p),this&&this!==_C&&this instanceof R&&(Sr=_||sg(Sr)),Sr.apply(Ir,U)}return R}ug.exports=ig});var cg=u((tW,pg)=>{"use strict";var qC=Xa(),DC=wa(),NC=li(),BC=pi(),MC=ci(),GC=Mn(),kC=oe();function FC(e,t,r){var a=DC(e);function n(){for(var o=arguments.length,s=Array(o),i=o,p=MC(n);i--;)s[i]=arguments[i];var m=o<3&&s[0]!==p&&s[o-1]!==p?[]:GC(s,p);if(o-=m.length,o<r)return BC(e,t,NC,n.placeholder,void 0,s,m,void 0,void 0,r-o);var f=this&&this!==kC&&this instanceof n?a:e;return qC(f,this,s)}return n}pg.exports=FC});var dg=u((rW,lg)=>{"use strict";var QC=Xa(),jC=wa(),WC=oe(),$C=1;function KC(e,t,r,a){var n=t&$C,o=jC(e);function s(){for(var i=-1,p=arguments.length,m=-1,f=a.length,h=Array(f+p),g=this&&this!==WC&&this instanceof s?o:e;++m<f;)h[m]=a[m];for(;p--;)h[m++]=arguments[++i];return QC(g,n?r:this,h)}return s}lg.exports=KC});var Ag=u((aW,yg)=>{"use strict";var VC=ai(),YC=ni(),fg=Mn(),mg="__lodash_placeholder__",di=1,HC=2,zC=4,gg=8,Ta=128,hg=256,JC=Math.min;function XC(e,t){var r=e[1],a=t[1],n=r|a,o=n<(di|HC|Ta),s=a==Ta&&r==gg||a==Ta&&r==hg&&e[7].length<=t[8]||a==(Ta|hg)&&t[7].length<=t[8]&&r==gg;if(!(o||s))return e;a&di&&(e[2]=t[2],n|=r&di?0:zC);var i=t[3];if(i){var p=e[3];e[3]=p?VC(p,i,t[4]):i,e[4]=p?fg(e[3],mg):t[4]}return i=t[5],i&&(p=e[5],e[5]=p?YC(p,i,t[6]):i,e[6]=p?fg(e[5],mg):t[6]),i=t[7],i&&(e[7]=i),a&Ta&&(e[8]=e[8]==null?t[8]:JC(e[8],t[8])),e[9]==null&&(e[9]=t[9]),e[0]=t[0],e[1]=n,e}yg.exports=XC});var Ig=u((nW,bg)=>{"use strict";var ZC=/\s/;function eP(e){for(var t=e.length;t--&&ZC.test(e.charAt(t)););return t}bg.exports=eP});var wg=u((oW,Sg)=>{"use strict";var tP=Ig(),rP=/^\s+/;function aP(e){return e&&e.slice(0,tP(e)+1).replace(rP,"")}Sg.exports=aP});var fr=u((sW,Tg)=>{"use strict";var nP=mt(),oP=he(),sP="[object Symbol]";function iP(e){return typeof e=="symbol"||oP(e)&&nP(e)==sP}Tg.exports=iP});var _g=u((iW,Rg)=>{"use strict";var uP=wg(),vg=Ee(),pP=fr(),Eg=0/0,cP=/^[-+]0x[0-9a-f]+$/i,lP=/^0b[01]+$/i,dP=/^0o[0-7]+$/i,fP=parseInt;function mP(e){if(typeof e=="number")return e;if(pP(e))return Eg;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=uP(e);var r=lP.test(e);return r||dP.test(e)?fP(e.slice(2),r?2:8):cP.test(e)?Eg:+e}Rg.exports=mP});var Og=u((uW,Lg)=>{"use strict";var gP=_g(),xg=1/0,hP=17976931348623157e292;function yP(e){if(!e)return e===0?e:0;if(e=gP(e),e===xg||e===-xg){var t=e<0?-1:1;return t*hP}return e===e?e:0}Lg.exports=yP});var fi=u((pW,Cg)=>{"use strict";var AP=Og();function bP(e){var t=AP(e),r=t%1;return t===t?r?t-r:t:0}Cg.exports=bP});var Gn=u((cW,Ng)=>{"use strict";var IP=ri(),SP=Sm(),wP=cg(),TP=li(),vP=dg(),EP=oi(),RP=Ag(),_P=ii(),xP=ui(),Pg=fi(),LP="Expected a function",Ug=1,OP=2,mi=8,gi=16,hi=32,qg=64,Dg=Math.max;function CP(e,t,r,a,n,o,s,i){var p=t&OP;if(!p&&typeof e!="function")throw new TypeError(LP);var m=a?a.length:0;if(m||(t&=~(hi|qg),a=n=void 0),s=s===void 0?s:Dg(Pg(s),0),i=i===void 0?i:Pg(i),m-=n?n.length:0,t&qg){var f=a,h=n;a=n=void 0}var g=p?void 0:EP(e),S=[e,t,r,a,n,f,h,o,s,i];if(g&&RP(S,g),e=S[0],t=S[1],r=S[2],a=S[3],n=S[4],i=S[9]=S[9]===void 0?p?0:e.length:Dg(S[9]-m,0),!i&&t&(mi|gi)&&(t&=~(mi|gi)),!t||t==Ug)var O=SP(e,t,r);else t==mi||t==gi?O=wP(e,t,i):(t==hi||t==(Ug|hi))&&!n.length?O=vP(e,t,r,a):O=TP.apply(void 0,S);var _=g?IP:_P;return xP(_(O,S),e,t)}Ng.exports=CP});var Mg=u((lW,Bg)=>{"use strict";var PP=Gn(),UP=128;function qP(e,t,r){return t=r?void 0:t,t=e&&t==null?e.length:t,PP(e,UP,void 0,void 0,void 0,void 0,t)}Bg.exports=qP});var kg=u((dW,Gg)=>{"use strict";var DP=Vo(),NP=DP(Object.keys,Object);Gg.exports=NP});var yi=u((fW,Fg)=>{"use strict";var BP=un(),MP=kg(),GP=Object.prototype,kP=GP.hasOwnProperty;function FP(e){if(!BP(e))return MP(e);var t=[];for(var r in Object(e))kP.call(e,r)&&r!="constructor"&&t.push(r);return t}Fg.exports=FP});var mr=u((mW,Qg)=>{"use strict";var QP=Zo(),jP=yi(),WP=Jt();function $P(e){return WP(e)?QP(e):jP(e)}Qg.exports=$P});var Ai=u((gW,jg)=>{"use strict";var KP=ar(),VP=mr();function YP(e,t){return e&&KP(t,VP(t),e)}jg.exports=YP});var $g=u((hW,Wg)=>{"use strict";var HP=ar(),zP=nr();function JP(e,t){return e&&HP(t,zP(t),e)}Wg.exports=JP});var Vg=u((yW,Kg)=>{"use strict";function XP(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}Kg.exports=XP});var bi=u((AW,Yg)=>{"use strict";function ZP(){return[]}Yg.exports=ZP});var kn=u((bW,zg)=>{"use strict";var eU=Vg(),tU=bi(),rU=Object.prototype,aU=rU.propertyIsEnumerable,Hg=Object.getOwnPropertySymbols,nU=Hg?function(e){return e==null?[]:(e=Object(e),eU(Hg(e),function(t){return aU.call(e,t)}))}:tU;zg.exports=nU});var Xg=u((IW,Jg)=>{"use strict";var oU=ar(),sU=kn();function iU(e,t){return oU(e,sU(e),t)}Jg.exports=iU});var Ii=u((SW,Zg)=>{"use strict";var uU=Ja(),pU=sn(),cU=kn(),lU=bi(),dU=Object.getOwnPropertySymbols,fU=dU?function(e){for(var t=[];e;)uU(t,cU(e)),e=pU(e);return t}:lU;Zg.exports=fU});var th=u((wW,eh)=>{"use strict";var mU=ar(),gU=Ii();function hU(e,t){return mU(e,gU(e),t)}eh.exports=hU});var Si=u((TW,rh)=>{"use strict";var yU=Ja(),AU=re();function bU(e,t,r){var a=t(e);return AU(e)?a:yU(a,r(e))}rh.exports=bU});var wi=u((vW,ah)=>{"use strict";var IU=Si(),SU=kn(),wU=mr();function TU(e){return IU(e,wU,SU)}ah.exports=TU});var oh=u((EW,nh)=>{"use strict";var vU=Si(),EU=Ii(),RU=nr();function _U(e){return vU(e,RU,EU)}nh.exports=_U});var ih=u((RW,sh)=>{"use strict";var xU=gt(),LU=oe(),OU=xU(LU,"DataView");sh.exports=OU});var ph=u((_W,uh)=>{"use strict";var CU=gt(),PU=oe(),UU=CU(PU,"Promise");uh.exports=UU});var hr=u((xW,hh)=>{"use strict";var Ti=ih(),vi=en(),Ei=ph(),Ri=Mo(),_i=ei(),gh=mt(),gr=Co(),ch="[object Map]",qU="[object Object]",lh="[object Promise]",dh="[object Set]",fh="[object WeakMap]",mh="[object DataView]",DU=gr(Ti),NU=gr(vi),BU=gr(Ei),MU=gr(Ri),GU=gr(_i),Dt=gh;(Ti&&Dt(new Ti(new ArrayBuffer(1)))!=mh||vi&&Dt(new vi)!=ch||Ei&&Dt(Ei.resolve())!=lh||Ri&&Dt(new Ri)!=dh||_i&&Dt(new _i)!=fh)&&(Dt=function(e){var t=gh(e),r=t==qU?e.constructor:void 0,a=r?gr(r):"";if(a)switch(a){case DU:return mh;case NU:return ch;case BU:return lh;case MU:return dh;case GU:return fh}return t});hh.exports=Dt});var Ah=u((LW,yh)=>{"use strict";var kU=Object.prototype,FU=kU.hasOwnProperty;function QU(e){var t=e.length,r=new e.constructor(t);return t&&typeof e[0]=="string"&&FU.call(e,"index")&&(r.index=e.index,r.input=e.input),r}yh.exports=QU});var Ih=u((OW,bh)=>{"use strict";var jU=on();function WU(e,t){var r=t?jU(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.byteLength)}bh.exports=WU});var wh=u((CW,Sh)=>{"use strict";var $U=/\w*$/;function KU(e){var t=new e.constructor(e.source,$U.exec(e));return t.lastIndex=e.lastIndex,t}Sh.exports=KU});var _h=u((PW,Rh)=>{"use strict";var Th=_t(),vh=Th?Th.prototype:void 0,Eh=vh?vh.valueOf:void 0;function VU(e){return Eh?Object(Eh.call(e)):{}}Rh.exports=VU});var Lh=u((UW,xh)=>{"use strict";var YU=on(),HU=Ih(),zU=wh(),JU=_h(),XU=Ko(),ZU="[object Boolean]",eq="[object Date]",tq="[object Map]",rq="[object Number]",aq="[object RegExp]",nq="[object Set]",oq="[object String]",sq="[object Symbol]",iq="[object ArrayBuffer]",uq="[object DataView]",pq="[object Float32Array]",cq="[object Float64Array]",lq="[object Int8Array]",dq="[object Int16Array]",fq="[object Int32Array]",mq="[object Uint8Array]",gq="[object Uint8ClampedArray]",hq="[object Uint16Array]",yq="[object Uint32Array]";function Aq(e,t,r){var a=e.constructor;switch(t){case iq:return YU(e);case ZU:case eq:return new a(+e);case uq:return HU(e,r);case pq:case cq:case lq:case dq:case fq:case mq:case gq:case hq:case yq:return XU(e,r);case tq:return new a;case rq:case oq:return new a(e);case aq:return zU(e);case nq:return new a;case sq:return JU(e)}}xh.exports=Aq});var Ch=u((qW,Oh)=>{"use strict";var bq=hr(),Iq=he(),Sq="[object Map]";function wq(e){return Iq(e)&&bq(e)==Sq}Oh.exports=wq});var Dh=u((DW,qh)=>{"use strict";var Tq=Ch(),vq=pn(),Ph=cn(),Uh=Ph&&Ph.isMap,Eq=Uh?vq(Uh):Tq;qh.exports=Eq});var Bh=u((NW,Nh)=>{"use strict";var Rq=hr(),_q=he(),xq="[object Set]";function Lq(e){return _q(e)&&Rq(e)==xq}Nh.exports=Lq});var Fh=u((BW,kh)=>{"use strict";var Oq=Bh(),Cq=pn(),Mh=cn(),Gh=Mh&&Mh.isSet,Pq=Gh?Cq(Gh):Oq;kh.exports=Pq});var xi=u((MW,$h)=>{"use strict";var Uq=aa(),qq=Bn(),Dq=Xo(),Nq=Ai(),Bq=$g(),Mq=Wo(),Gq=er(),kq=Xg(),Fq=th(),Qq=wi(),jq=oh(),Wq=hr(),$q=Ah(),Kq=Lh(),Vq=Yo(),Yq=re(),Hq=ua(),zq=Dh(),Jq=Ee(),Xq=Fh(),Zq=mr(),eD=nr(),tD=1,rD=2,aD=4,Qh="[object Arguments]",nD="[object Array]",oD="[object Boolean]",sD="[object Date]",iD="[object Error]",jh="[object Function]",uD="[object GeneratorFunction]",pD="[object Map]",cD="[object Number]",Wh="[object Object]",lD="[object RegExp]",dD="[object Set]",fD="[object String]",mD="[object Symbol]",gD="[object WeakMap]",hD="[object ArrayBuffer]",yD="[object DataView]",AD="[object Float32Array]",bD="[object Float64Array]",ID="[object Int8Array]",SD="[object Int16Array]",wD="[object Int32Array]",TD="[object Uint8Array]",vD="[object Uint8ClampedArray]",ED="[object Uint16Array]",RD="[object Uint32Array]",D={};D[Qh]=D[nD]=D[hD]=D[yD]=D[oD]=D[sD]=D[AD]=D[bD]=D[ID]=D[SD]=D[wD]=D[pD]=D[cD]=D[Wh]=D[lD]=D[dD]=D[fD]=D[mD]=D[TD]=D[vD]=D[ED]=D[RD]=!0;D[iD]=D[jh]=D[gD]=!1;function Fn(e,t,r,a,n,o){var s,i=t&tD,p=t&rD,m=t&aD;if(r&&(s=n?r(e,a,n,o):r(e)),s!==void 0)return s;if(!Jq(e))return e;var f=Yq(e);if(f){if(s=$q(e),!i)return Gq(e,s)}else{var h=Wq(e),g=h==jh||h==uD;if(Hq(e))return Mq(e,i);if(h==Wh||h==Qh||g&&!n){if(s=p||g?{}:Vq(e),!i)return p?Fq(e,Bq(s,e)):kq(e,Nq(s,e))}else{if(!D[h])return n?e:{};s=Kq(e,h,i)}}o||(o=new Uq);var S=o.get(e);if(S)return S;o.set(e,s),Xq(e)?e.forEach(function(R){s.add(Fn(R,t,r,R,e,o))}):zq(e)&&e.forEach(function(R,E){s.set(E,Fn(R,t,r,E,e,o))});var O=m?p?jq:Qq:p?eD:Zq,_=f?void 0:O(e);return qq(_||e,function(R,E){_&&(E=R,R=e[E]),Dq(s,E,Fn(R,t,r,E,e,o))}),s}$h.exports=Fn});var Vh=u((GW,Kh)=>{"use strict";var _D=xi(),xD=4;function LD(e){return _D(e,xD)}Kh.exports=LD});var Hh=u((kW,Yh)=>{"use strict";var OD=Gn(),CD=8;function Li(e,t,r){t=r?void 0:t;var a=OD(e,CD,void 0,void 0,void 0,void 0,void 0,t);return a.placeholder=Li.placeholder,a}Li.placeholder={};Yh.exports=Li});var Jh=u((FW,zh)=>{"use strict";var PD=mt(),UD=he(),qD=Ho(),DD="[object DOMException]",ND="[object Error]";function BD(e){if(!UD(e))return!1;var t=PD(e);return t==ND||t==DD||typeof e.message=="string"&&typeof e.name=="string"&&!qD(e)}zh.exports=BD});var Zh=u((QW,Xh)=>{"use strict";var MD=hr(),GD=he(),kD="[object WeakMap]";function FD(e){return GD(e)&&MD(e)==kD}Xh.exports=FD});var ty=u((jW,ey)=>{"use strict";function QD(e,t){for(var r=-1,a=e==null?0:e.length;++r<a;)if(t(e[r],r,e))return!0;return!1}ey.exports=QD});var Oi=u((WW,ry)=>{"use strict";var jD=Do(),WD=ty(),$D=Bo(),KD=1,VD=2;function YD(e,t,r,a,n,o){var s=r&KD,i=e.length,p=t.length;if(i!=p&&!(s&&p>i))return!1;var m=o.get(e),f=o.get(t);if(m&&f)return m==t&&f==e;var h=-1,g=!0,S=r&VD?new jD:void 0;for(o.set(e,t),o.set(t,e);++h<i;){var O=e[h],_=t[h];if(a)var R=s?a(_,O,h,t,e,o):a(O,_,h,e,t,o);if(R!==void 0){if(R)continue;g=!1;break}if(S){if(!WD(t,function(E,U){if(!$D(S,U)&&(O===E||n(O,E,r,a,o)))return S.push(U)})){g=!1;break}}else if(!(O===_||n(O,_,r,a,o))){g=!1;break}}return o.delete(e),o.delete(t),g}ry.exports=YD});var ny=u(($W,ay)=>{"use strict";function HD(e){var t=-1,r=Array(e.size);return e.forEach(function(a,n){r[++t]=[n,a]}),r}ay.exports=HD});var py=u((KW,uy)=>{"use strict";var oy=_t(),sy=$o(),zD=Yt(),JD=Oi(),XD=ny(),ZD=an(),eN=1,tN=2,rN="[object Boolean]",aN="[object Date]",nN="[object Error]",oN="[object Map]",sN="[object Number]",iN="[object RegExp]",uN="[object Set]",pN="[object String]",cN="[object Symbol]",lN="[object ArrayBuffer]",dN="[object DataView]",iy=oy?oy.prototype:void 0,Ci=iy?iy.valueOf:void 0;function fN(e,t,r,a,n,o,s){switch(r){case dN:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case lN:return!(e.byteLength!=t.byteLength||!o(new sy(e),new sy(t)));case rN:case aN:case sN:return zD(+e,+t);case nN:return e.name==t.name&&e.message==t.message;case iN:case pN:return e==t+"";case oN:var i=XD;case uN:var p=a&eN;if(i||(i=ZD),e.size!=t.size&&!p)return!1;var m=s.get(e);if(m)return m==t;a|=tN,s.set(e,t);var f=JD(i(e),i(t),a,n,o,s);return s.delete(e),f;case cN:if(Ci)return Ci.call(e)==Ci.call(t)}return!1}uy.exports=fN});var dy=u((VW,ly)=>{"use strict";var cy=wi(),mN=1,gN=Object.prototype,hN=gN.hasOwnProperty;function yN(e,t,r,a,n,o){var s=r&mN,i=cy(e),p=i.length,m=cy(t),f=m.length;if(p!=f&&!s)return!1;for(var h=p;h--;){var g=i[h];if(!(s?g in t:hN.call(t,g)))return!1}var S=o.get(e),O=o.get(t);if(S&&O)return S==t&&O==e;var _=!0;o.set(e,t),o.set(t,e);for(var R=s;++h<p;){g=i[h];var E=e[g],U=t[g];if(a)var Oe=s?a(U,E,g,t,e,o):a(E,U,g,e,t,o);if(!(Oe===void 0?E===U||n(E,U,r,a,o):Oe)){_=!1;break}R||(R=g=="constructor")}if(_&&!R){var Se=e.constructor,pt=t.constructor;Se!=pt&&"constructor"in e&&"constructor"in t&&!(typeof Se=="function"&&Se instanceof Se&&typeof pt=="function"&&pt instanceof pt)&&(_=!1)}return o.delete(e),o.delete(t),_}ly.exports=yN});var Iy=u((YW,by)=>{"use strict";var Pi=aa(),AN=Oi(),bN=py(),IN=dy(),fy=hr(),my=re(),gy=ua(),SN=ln(),wN=1,hy="[object Arguments]",yy="[object Array]",Qn="[object Object]",TN=Object.prototype,Ay=TN.hasOwnProperty;function vN(e,t,r,a,n,o){var s=my(e),i=my(t),p=s?yy:fy(e),m=i?yy:fy(t);p=p==hy?Qn:p,m=m==hy?Qn:m;var f=p==Qn,h=m==Qn,g=p==m;if(g&&gy(e)){if(!gy(t))return!1;s=!0,f=!1}if(g&&!f)return o||(o=new Pi),s||SN(e)?AN(e,t,r,a,n,o):bN(e,t,p,r,a,n,o);if(!(r&wN)){var S=f&&Ay.call(e,"__wrapped__"),O=h&&Ay.call(t,"__wrapped__");if(S||O){var _=S?e.value():e,R=O?t.value():t;return o||(o=new Pi),n(_,R,r,a,o)}}return g?(o||(o=new Pi),IN(e,t,r,a,n,o)):!1}by.exports=vN});var Ui=u((HW,Ty)=>{"use strict";var EN=Iy(),Sy=he();function wy(e,t,r,a,n){return e===t?!0:e==null||t==null||!Sy(e)&&!Sy(t)?e!==e&&t!==t:EN(e,t,r,a,wy,n)}Ty.exports=wy});var Ey=u((zW,vy)=>{"use strict";var RN=aa(),_N=Ui(),xN=1,LN=2;function ON(e,t,r,a){var n=r.length,o=n,s=!a;if(e==null)return!o;for(e=Object(e);n--;){var i=r[n];if(s&&i[2]?i[1]!==e[i[0]]:!(i[0]in e))return!1}for(;++n<o;){i=r[n];var p=i[0],m=e[p],f=i[1];if(s&&i[2]){if(m===void 0&&!(p in e))return!1}else{var h=new RN;if(a)var g=a(m,f,p,e,t,h);if(!(g===void 0?_N(f,m,xN|LN,a,h):g))return!1}}return!0}vy.exports=ON});var qi=u((JW,Ry)=>{"use strict";var CN=Ee();function PN(e){return e===e&&!CN(e)}Ry.exports=PN});var xy=u((XW,_y)=>{"use strict";var UN=qi(),qN=mr();function DN(e){for(var t=qN(e),r=t.length;r--;){var a=t[r],n=e[a];t[r]=[a,n,UN(n)]}return t}_y.exports=DN});var Di=u((ZW,Ly)=>{"use strict";function NN(e,t){return function(r){return r==null?!1:r[e]===t&&(t!==void 0||e in Object(r))}}Ly.exports=NN});var Cy=u((e$,Oy)=>{"use strict";var BN=Ey(),MN=xy(),GN=Di();function kN(e){var t=MN(e);return t.length==1&&t[0][2]?GN(t[0][0],t[0][1]):function(r){return r===e||BN(r,e,t)}}Oy.exports=kN});var jn=u((t$,Py)=>{"use strict";var FN=re(),QN=fr(),jN=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,WN=/^\w*$/;function $N(e,t){if(FN(e))return!1;var r=typeof e;return r=="number"||r=="symbol"||r=="boolean"||e==null||QN(e)?!0:WN.test(e)||!jN.test(e)||t!=null&&e in Object(t)}Py.exports=$N});var Dy=u((r$,qy)=>{"use strict";var Uy=tn(),KN="Expected a function";function Ni(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(KN);var r=function(){var a=arguments,n=t?t.apply(this,a):a[0],o=r.cache;if(o.has(n))return o.get(n);var s=e.apply(this,a);return r.cache=o.set(n,s)||o,s};return r.cache=new(Ni.Cache||Uy),r}Ni.Cache=Uy;qy.exports=Ni});var By=u((a$,Ny)=>{"use strict";var VN=Dy(),YN=500;function HN(e){var t=VN(e,function(a){return r.size===YN&&r.clear(),a}),r=t.cache;return t}Ny.exports=HN});var Bi=u((n$,My)=>{"use strict";var zN=By(),JN=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,XN=/\\(\\)?/g,ZN=zN(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(JN,function(r,a,n,o){t.push(n?o.replace(XN,"$1"):a||r)}),t});My.exports=ZN});var Mi=u((o$,Gy)=>{"use strict";function eB(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=eB});var $y=u((s$,Wy)=>{"use strict";var ky=_t(),tB=Mi(),rB=re(),aB=fr(),nB=1/0,Fy=ky?ky.prototype:void 0,Qy=Fy?Fy.toString:void 0;function jy(e){if(typeof e=="string")return e;if(rB(e))return tB(e,jy)+"";if(aB(e))return Qy?Qy.call(e):"";var t=e+"";return t=="0"&&1/e==-nB?"-0":t}Wy.exports=jy});var Gi=u((i$,Ky)=>{"use strict";var oB=$y();function sB(e){return e==null?"":oB(e)}Ky.exports=sB});var ki=u((u$,Vy)=>{"use strict";var iB=re(),uB=jn(),pB=Bi(),cB=Gi();function lB(e,t){return iB(e)?e:uB(e,t)?[e]:pB(cB(e))}Vy.exports=lB});var yr=u((p$,Yy)=>{"use strict";var dB=fr(),fB=1/0;function mB(e){if(typeof e=="string"||dB(e))return e;var t=e+"";return t=="0"&&1/e==-fB?"-0":t}Yy.exports=mB});var Fi=u((c$,Hy)=>{"use strict";var gB=ki(),hB=yr();function yB(e,t){t=gB(t,e);for(var r=0,a=t.length;e!=null&&r<a;)e=e[hB(t[r++])];return r&&r==a?e:void 0}Hy.exports=yB});var Jy=u((l$,zy)=>{"use strict";var AB=Fi();function bB(e,t,r){var a=e==null?void 0:AB(e,t);return a===void 0?r:a}zy.exports=bB});var Zy=u((d$,Xy)=>{"use strict";function IB(e,t){return e!=null&&t in Object(e)}Xy.exports=IB});var tA=u((f$,eA)=>{"use strict";var SB=ki(),wB=zr(),TB=re(),vB=la(),EB=nn(),RB=yr();function _B(e,t,r){t=SB(t,e);for(var a=-1,n=t.length,o=!1;++a<n;){var s=RB(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&&EB(n)&&vB(s,n)&&(TB(e)||wB(e)))}eA.exports=_B});var aA=u((m$,rA)=>{"use strict";var xB=Zy(),LB=tA();function OB(e,t){return e!=null&&LB(e,t,xB)}rA.exports=OB});var oA=u((g$,nA)=>{"use strict";var CB=Ui(),PB=Jy(),UB=aA(),qB=jn(),DB=qi(),NB=Di(),BB=yr(),MB=1,GB=2;function kB(e,t){return qB(e)&&DB(t)?NB(BB(e),t):function(r){var a=PB(r,e);return a===void 0&&a===t?UB(r,e):CB(t,a,MB|GB)}}nA.exports=kB});var iA=u((h$,sA)=>{"use strict";function FB(e){return function(t){return t?.[e]}}sA.exports=FB});var pA=u((y$,uA)=>{"use strict";var QB=Fi();function jB(e){return function(t){return QB(t,e)}}uA.exports=jB});var lA=u((A$,cA)=>{"use strict";var WB=iA(),$B=pA(),KB=jn(),VB=yr();function YB(e){return KB(e)?WB(VB(e)):$B(e)}cA.exports=YB});var Qi=u((b$,dA)=>{"use strict";var HB=Cy(),zB=oA(),JB=Jr(),XB=re(),ZB=lA();function eM(e){return typeof e=="function"?e:e==null?JB:typeof e=="object"?XB(e)?zB(e[0],e[1]):HB(e):ZB(e)}dA.exports=eM});var mA=u((I$,fA)=>{"use strict";var tM=xi(),rM=Qi(),aM=1;function nM(e){return rM(typeof e=="function"?e:tM(e,aM))}fA.exports=nM});var hA=u((S$,gA)=>{"use strict";var oM=xo();function sM(e){var t=e==null?0:e.length;return t?oM(e,1):[]}gA.exports=sM});var AA=u((w$,yA)=>{"use strict";var iM=hA(),uM=Lo(),pM=Za();function cM(e){return pM(uM(e,void 0,iM),e+"")}yA.exports=cM});var IA=u((T$,bA)=>{"use strict";var lM=Gn(),dM=AA(),fM=256,mM=dM(function(e,t){return lM(e,fM,void 0,void 0,void 0,t)});bA.exports=mM});var wA=u((v$,SA)=>{"use strict";var gM=Mi(),hM=er(),yM=re(),AM=fr(),bM=Bi(),IM=yr(),SM=Gi();function wM(e){return yM(e)?gM(e,IM):AM(e)?[e]:hM(bM(SM(e)))}SA.exports=wM});var vA=u((E$,TA)=>{"use strict";TA.exports={ary:Mg(),assign:Ai(),clone:Vh(),curry:Hh(),forEach:Bn(),isArray:re(),isError:Jh(),isFunction:Xr(),isWeakMap:Zh(),iteratee:mA(),keys:yi(),rearg:IA(),toInteger:fi(),toPath:wA()}});var RA=u((R$,EA)=>{"use strict";var TM=fm(),vM=vA();function EM(e,t,r){return TM(vM,e,t,r)}EA.exports=EM});var ji=u((_$,xA)=>{"use strict";var RM=RA(),_A=RM("merge",es());_A.placeholder=zs();xA.exports=_A});var Lb=u((bK,xb)=>{"use strict";function KM(e,t,r,a){for(var n=-1,o=e==null?0:e.length;++n<o;){var s=e[n];t(a,s,r(s),e)}return a}xb.exports=KM});var Cb=u((IK,Ob)=>{"use strict";var VM=jo(),YM=mr();function HM(e,t){return e&&VM(e,t,YM)}Ob.exports=HM});var Ub=u((SK,Pb)=>{"use strict";var zM=Jt();function JM(e,t){return function(r,a){if(r==null)return r;if(!zM(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}}Pb.exports=JM});var Db=u((wK,qb)=>{"use strict";var XM=Cb(),ZM=Ub(),eG=ZM(XM);qb.exports=eG});var Bb=u((TK,Nb)=>{"use strict";var tG=Db();function rG(e,t,r,a){return tG(e,function(n,o,s){t(a,n,r(n),s)}),a}Nb.exports=rG});var Gb=u((vK,Mb)=>{"use strict";var aG=Lb(),nG=Bb(),oG=Qi(),sG=re();function iG(e,t){return function(r,a){var n=sG(r)?aG:nG,o=t?t():{};return n(r,e,oG(a,2),o)}}Mb.exports=iG});var Fb=u((EK,kb)=>{"use strict";var uG=na(),pG=Gb(),cG=Object.prototype,lG=cG.hasOwnProperty,dG=pG(function(e,t,r){lG.call(e,r)?e[r].push(t):uG(e,r,[t])});kb.exports=dG});var NG={};w(NG,{Method:()=>oo,ai:()=>Cu,api:()=>ou,auditLogs:()=>At,automations:()=>Rn,backups:()=>Re,branding:()=>yn,constants:()=>Wr,environmentVariables:()=>Ye,features:()=>qe,groups:()=>j,init:()=>im,licensing:()=>je,logger:()=>Nt,mappers:()=>V,middleware:()=>zi,plugins:()=>_n,publicApi:()=>On,quotas:()=>Ke,scimGroups:()=>Ar,scimUsers:()=>fe,sdk:()=>$i,users:()=>at,utils:()=>Kt});module.exports=UI(NG);var oo=(o=>(o.POST="POST",o.GET="GET",o.PATCH="PATCH",o.DELETE="DELETE",o.PUT="PUT",o))(oo||{});var $i={};w($i,{ai:()=>ys,auditLogs:()=>At,automations:()=>Rn,backups:()=>Re,branding:()=>yn,environmentVariables:()=>Ye,features:()=>qe,groups:()=>j,init:()=>im,licensing:()=>je,logger:()=>Nt,plugins:()=>_n,publicApi:()=>On,quotas:()=>Ke,scimGroups:()=>Ar,scimUsers:()=>fe,users:()=>at,utils:()=>Kt});var yn={};w(yn,{getBrandingConfig:()=>Tx});var qe={};w(qe,{checkBackups:()=>ye,checkFeature:()=>gn,checkFeatures:()=>ls,checkSCIM:()=>gs,isAppBuildersEnabled:()=>Ct,isAuditLogsEnabled:()=>hn,isBackupsEnabled:()=>ds,isBrandingEnabled:()=>fs,isEnforceableSSO:()=>Sf,isExpandedPublicApiEnabled:()=>tt,isPWAEnabled:()=>Ax,isSSOEnforced:()=>bx,isSyncAutomationsEnabled:()=>hx,isTriggerAutomationRunEnabled:()=>yx,isUserGroupsEnabled:()=>ms,isViewPermissionEnabled:()=>Ix,isViewReadonlyColumnsEnabled:()=>Sx});var se=require("@budibase/types"),et=require("@budibase/backend-core");var je={};w(je,{cache:()=>Pe,client:()=>ft,features:()=>Ha,getFreeLicense:()=>us,getLicense:()=>ss,getLicenseFromKey:()=>is,keys:()=>cs,offline:()=>dn,quotas:()=>za});var Pe={};w(Pe,{getCachedLicense:()=>bf,invalidate:()=>If,refresh:()=>xt});var Da=require("@budibase/backend-core"),Tr,qI=async()=>{Tr=await Da.RedisClient.init(Da.redis.utils.Databases.LICENSES)},DI=async()=>{Tr&&await Tr.finish()};process.on("exit",async()=>{await DI()});var so=async()=>(Tr||await qI(),Tr);var ft={};w(ft,{activateLicenseKey:()=>To,getLicense:()=>Wt,getLicenseFromKey:()=>wo,triggerQuota:()=>IS});var ku=P(require("node-fetch"));var Fu=require("@budibase/backend-core"),io=require("dd-trace"),Qu=require("dd-trace/ext/formats"),uo=class{constructor(t){this.apiCall=t=>async(r="",a={})=>await io.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";Fu.logging.correlation.setHeader(o),io.tracer.inject(n,Qu.HTTP_HEADERS,o);let i={method:t,body:s?JSON.stringify(a.body):a.body,headers:o,credentials:"include"};return(0,ku.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}},po=uo;var Ka=require("@budibase/types"),C=require("@budibase/backend-core");var ke={};w(ke,{bustCache:()=>fo,getCurrentUsageValues:()=>zu,getQuotaUsage:()=>Tt,setAllUsage:()=>go,setAppUsageValue:()=>mo,setUsage:()=>Vu,setUsagePerApp:()=>Yu,utils:()=>_r});var ne=require("@budibase/types"),ce=require("@budibase/backend-core");var _r={};w(_r,{generateBaseQuotaUsage:()=>Ba,generateNewMonthlyQuotas:()=>Rr,generateNewQuotaUsage:()=>lo,getBreakdownName:()=>Ga,getCurrentMonthString:()=>ct,getQuotaDocId:()=>Er,setCurrentMonth:()=>Ma,setQuotaReset:()=>co});var Y=require("@budibase/types"),vr=require("@budibase/backend-core"),Na=require("@budibase/shared-core"),Er=()=>vr.context.isSelfHostUsingCloud()?`quota_usage_${vr.context.getTenantId()}`:vr.db.StaticDatabases.GLOBAL.docs.usageQuota,ju=()=>{let e=new Date;return new Date(e.getFullYear(),e.getMonth()+1,1).toISOString()},co=e=>{e.quotaReset=ju()},ct=()=>{let e=new Date,t=e.getMonth()+1,r=e.getFullYear();return`${t}-${r}`},Ba=()=>({usageQuota:{[Y.StaticQuotaName.APPS]:0,[Y.StaticQuotaName.ROWS]:0,[Y.StaticQuotaName.PLUGINS]:0,[Y.StaticQuotaName.USERS]:0,[Y.StaticQuotaName.CREATORS]:0,[Y.StaticQuotaName.USER_GROUPS]:0,[Y.StaticQuotaName.AI_CUSTOM_CONFIGS]:0,triggers:{}},monthly:{[ct()]:Rr()}}),lo=()=>{let e={_id:Er(),quotaReset:ju(),...Ba(),apps:{}};return Ma(e),e},Rr=()=>({[Y.MonthlyQuotaName.QUERIES]:0,[Y.MonthlyQuotaName.AUTOMATIONS]:0,[Y.MonthlyQuotaName.BUDIBASE_AI_CREDITS]:0,[Y.MonthlyQuotaName.ACTIONS]:0,triggers:{}}),Ma=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 Y.MonthlyQuotaName.AUTOMATIONS:return Y.BreakdownQuotaName.AUTOMATIONS;case Y.MonthlyQuotaName.QUERIES:return(0,Na.isTableIdOrExternalTableId)(t)?Y.BreakdownQuotaName.ROW_QUERIES:(0,Na.isDatasourceOrDatasourcePlusId)(t)?Y.BreakdownQuotaName.DATASOURCE_QUERIES:void 0}};var Wu=ce.Duration.fromSeconds(60).toMs(),{Writethrough:$u}=ce.cache.writethrough;function BI(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 ka=()=>ce.tenancy.isSelfHostUsingCloud()?new $u(ce.tenancy.getSelfHostCloudDB(),Wu):new $u(ce.tenancy.getGlobalDB(),Wu);async function fo(e=0){let r=ka(),a=Er(),n=await r.tryGet(a);n&&n._rev&&await r.remove(a,n._rev).catch(async o=>{if(e<1)return await fo(e+1);throw o})}var Tt=async()=>{let e=ka(),t=await e.tryGet(Er());if(!t){t=lo();let{rev:r}=await e.put(t);t._rev=r}return Ma(t),co(t),BI(t)},Vu=async(e,t,r)=>go({name:t,type:r,values:{total:e}}),Yu=async(e,t,r)=>{let a=ka(),n=await Tt(),o=Object.values(e).reduce((i,p)=>i+p,0);for(let[i,p]of Object.entries(e))n=Hu(n,t,r,{total:o,app:p},{appId:i});let s=await a.put(n);return n._rev=s.rev,n},MI=(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},mo=(e,t,r,a={},n)=>{let o;try{o=ce.db.getProdAppID(a?.appId||ce.context.getAppId())}catch{}if(!o||!n.app||!ne.APP_QUOTA_NAMES.includes(t))return e;e.apps?.[o]||(e.apps={...e.apps,[o]:Ba()});let s=e.apps[o];switch(r){case ne.QuotaUsageType.STATIC:s.usageQuota[t]=n.app;break;case ne.QuotaUsageType.MONTHLY:{let i=ct(),p=t,m=s.monthly[i];m||(s.monthly[i]=Rr(),m=s.monthly[i]),m[p]=n.app,ne.BREAKDOWN_QUOTA_NAMES.includes(p)&&a?.id&&(m=MI(m,p,a.id,n));break}}return e},Ku=(e,t,r,a)=>{if(!ne.APP_QUOTA_NAMES.includes(r))return{};let n;try{n=ce.db.getProdAppID(ce.context.getAppId())}catch{}if(!n||!e.apps||!e.apps[n])return{app:0};let o=e.apps[n];switch(t){case ne.QuotaUsageType.STATIC:if(o.usageQuota?.[r])return{app:o.usageQuota[r]};break;case ne.QuotaUsageType.MONTHLY:{let s=ct(),i=r;if(!o.monthly?.[s]?.[i])break;let p=o.monthly[s],m=p[i],f,h=Ga(i,a);return h&&a&&p.breakdown?.[h]&&(f=p.breakdown[h]?.values[a]),{app:m,breakdown:f||0}}}return{app:0}},GI=(e,t,r)=>{t.usageQuota.triggers||(t.usageQuota.triggers={}),r&&(t.usageQuota.triggers[e]=r)},kI=(e,t,r,a)=>{r.monthly[t].triggers||(r.monthly[t].triggers={}),a&&(r.monthly[t].triggers[e]=a)},Hu=(e,t,r,a,n={})=>{if(r===ne.QuotaUsageType.STATIC)t=t,e.usageQuota[t]=a.total,GI(t,e,a.triggers);else if(r===ne.QuotaUsageType.MONTHLY){t=t;let o=ct();e.monthly[o][t]=a.total,kI(t,o,e,a.triggers)}else throw new Error(`Invalid usage type: ${r}`);return mo(e,t,r,n,a)},go=async e=>{let t=Array.isArray(e)?e:[e],r=ka(),a=await Tt();for(let o of t)a=Hu(a,o.name,o.type,o.values,o.opts);let n=await r.put(a,0);return a._rev=n.rev,a},zu=async(e,t,r)=>{let a=await Tt(),n=0,o={};switch(e){case ne.QuotaUsageType.STATIC:if(a.usageQuota[t]){let s=t;n=a.usageQuota[s],o=Ku(a,e,t,r)}break;case ne.QuotaUsageType.MONTHLY:{let s=ct(),i=t;a.monthly[s][i]&&(n=a.monthly[s][i],o=Ku(a,e,t,r));break}default:throw new Error(`Invalid usage type: ${e}`)}return ne.APP_QUOTA_NAMES.includes(t)&&!(o.app||o.breakdown)&&(o.app=o.app||0,o.breakdown=o.breakdown||0),{total:n,app:o.app,breakdown:o.breakdown}};var Te={};w(Te,{destroy:()=>jI,get:()=>ho,save:()=>QI});var lt=require("@budibase/backend-core"),FI=()=>({_id:lt.StaticDatabases.GLOBAL.docs.licenseInfo}),QI=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 FI();throw t}},jI=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:()=>tS,destroy:()=>rS,fetch:()=>JI,generateUserGroupID:()=>HI,get:()=>XI,getBulk:()=>ZI,getByName:()=>yo,getGroupUsers:()=>Qa,getGroupUsersParams:()=>tp,getUserGroupsParams:()=>ep,save:()=>eS});var N=require("@budibase/backend-core");var Ce=require("@budibase/types"),Ft=require("@budibase/backend-core");async function Ju(){let e=Ft.sql.designDoc.base("type");e.sql.tables={[Ce.AUDIT_LOG_TYPE]:{fields:{appId:Ce.SQLiteType.TEXT,event:Ce.SQLiteType.TEXT,userId:Ce.SQLiteType.TEXT,timestamp:Ce.SQLiteType.TEXT,metadata:Ce.SQLiteType.TEXT,name:Ce.SQLiteType.TEXT,type:Ce.SQLiteType.TEXT,fallback:Ce.SQLiteType.TEXT}}};let t=Ft.context.getAuditLogsDB(),r;try{r=await t.get(Ft.SQLITE_DESIGN_DOC_ID),r={...r,...e}}catch(a){if(a.status===404)r=e;else throw a}await t.put(r)}var Fa=require("@budibase/backend-core"),{ViewName:WI,SEPARATOR:$I,DocumentType:KI,createView:VI}=Fa.db,YI=KI.USER+$I;async function Xu(){let e=Fa.tenancy.getGlobalDB(),t=`function(doc) {
|
|
4
|
-
if (doc._id.startsWith("${
|
|
3
|
+
`)}Vm.exports=FL});var Mn=u((Yj,Hm)=>{"use strict";function QL(e,t){for(var r=-1,a=e==null?0:e.length;++r<a&&t(e[r],r,e)!==!1;);return e}Hm.exports=QL});var Jm=u((Hj,zm)=>{"use strict";var jL=Mn(),WL=Bo(),$L=1,KL=2,VL=8,YL=16,HL=32,zL=64,JL=128,XL=256,ZL=512,eC=[["ary",JL],["bind",$L],["bindKey",KL],["curry",VL],["curryRight",YL],["flip",ZL],["partial",HL],["partialRight",zL],["rearg",XL]];function tC(e,t){return jL(eC,function(r){var a="_."+r[0];t&r[1]&&!WL(e,a)&&e.push(a)}),e.sort()}zm.exports=tC});var pi=u((zj,Xm)=>{"use strict";var rC=Km(),aC=Ym(),nC=en(),oC=Jm();function sC(e,t,r){var a=t+"";return nC(e,aC(a,oC(rC(a),r)))}Xm.exports=sC});var ci=u((Jj,tg)=>{"use strict";var iC=jm(),uC=ui(),pC=pi(),cC=1,lC=2,dC=4,fC=8,Zm=32,eg=64;function mC(e,t,r,a,n,o,s,i,p,f){var m=t&fC,y=m?s:void 0,g=m?void 0:s,I=m?o:void 0,L=m?void 0:o;t|=m?Zm:eg,t&=~(m?eg:Zm),t&dC||(t&=~(cC|lC));var _=[e,t,n,I,y,L,g,i,p,f],R=r.apply(void 0,_);return iC(e)&&uC(R,_),R.placeholder=a,pC(R,e,t)}tg.exports=mC});var li=u((Xj,rg)=>{"use strict";function gC(e){var t=e;return t.placeholder}rg.exports=gC});var ng=u((Zj,ag)=>{"use strict";var yC=er(),hC=da(),AC=Math.min;function bC(e,t){for(var r=e.length,a=AC(t.length,r),n=yC(e);a--;){var o=t[a];e[a]=hC(o,r)?n[o]:void 0}return e}ag.exports=bC});var Gn=u((eW,sg)=>{"use strict";var og="__lodash_placeholder__";function IC(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=IC});var di=u((tW,pg)=>{"use strict";var SC=ni(),wC=oi(),TC=Rm(),ig=Ta(),vC=ci(),EC=li(),RC=ng(),_C=Gn(),xC=oe(),OC=1,LC=2,CC=8,PC=16,UC=128,qC=512;function ug(e,t,r,a,n,o,s,i,p,f){var m=t&UC,y=t&OC,g=t&LC,I=t&(CC|PC),L=t&qC,_=g?void 0:ig(e);function R(){for(var E=arguments.length,U=Array(E),Le=E;Le--;)U[Le]=arguments[Le];if(I)var Se=EC(R),pt=TC(U,Se);if(a&&(U=SC(U,a,n,I)),o&&(U=wC(U,o,s,I)),E-=pt,I&&E<f){var kt=_C(U,Se);return vC(e,t,ug,R.placeholder,r,U,kt,i,p,f-E)}var Ir=y?r:this,Sr=g?Ir[e]:e;return E=U.length,i?U=RC(U,i):L&&E>1&&U.reverse(),m&&p<E&&(U.length=p),this&&this!==xC&&this instanceof R&&(Sr=_||ig(Sr)),Sr.apply(Ir,U)}return R}pg.exports=ug});var lg=u((rW,cg)=>{"use strict";var DC=Za(),NC=Ta(),BC=di(),MC=ci(),GC=li(),kC=Gn(),FC=oe();function QC(e,t,r){var a=NC(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?[]:kC(s,p);if(o-=f.length,o<r)return MC(e,t,BC,n.placeholder,void 0,s,f,void 0,void 0,r-o);var m=this&&this!==FC&&this instanceof n?a:e;return DC(m,this,s)}return n}cg.exports=QC});var fg=u((aW,dg)=>{"use strict";var jC=Za(),WC=Ta(),$C=oe(),KC=1;function VC(e,t,r,a){var n=t&KC,o=WC(e);function s(){for(var i=-1,p=arguments.length,f=-1,m=a.length,y=Array(m+p),g=this&&this!==$C&&this instanceof s?o:e;++f<m;)y[f]=a[f];for(;p--;)y[f++]=arguments[++i];return jC(g,n?r:this,y)}return s}dg.exports=VC});var bg=u((nW,Ag)=>{"use strict";var YC=ni(),HC=oi(),mg=Gn(),gg="__lodash_placeholder__",fi=1,zC=2,JC=4,yg=8,va=128,hg=256,XC=Math.min;function ZC(e,t){var r=e[1],a=t[1],n=r|a,o=n<(fi|zC|va),s=a==va&&r==yg||a==va&&r==hg&&e[7].length<=t[8]||a==(va|hg)&&t[7].length<=t[8]&&r==yg;if(!(o||s))return e;a&fi&&(e[2]=t[2],n|=r&fi?0:JC);var i=t[3];if(i){var p=e[3];e[3]=p?YC(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?HC(p,i,t[6]):i,e[6]=p?mg(e[5],gg):t[6]),i=t[7],i&&(e[7]=i),a&va&&(e[8]=e[8]==null?t[8]:XC(e[8],t[8])),e[9]==null&&(e[9]=t[9]),e[0]=t[0],e[1]=n,e}Ag.exports=ZC});var Sg=u((oW,Ig)=>{"use strict";var eP=/\s/;function tP(e){for(var t=e.length;t--&&eP.test(e.charAt(t)););return t}Ig.exports=tP});var Tg=u((sW,wg)=>{"use strict";var rP=Sg(),aP=/^\s+/;function nP(e){return e&&e.slice(0,rP(e)+1).replace(aP,"")}wg.exports=nP});var fr=u((iW,vg)=>{"use strict";var oP=mt(),sP=ye(),iP="[object Symbol]";function uP(e){return typeof e=="symbol"||sP(e)&&oP(e)==iP}vg.exports=uP});var xg=u((uW,_g)=>{"use strict";var pP=Tg(),Eg=Ee(),cP=fr(),Rg=0/0,lP=/^[-+]0x[0-9a-f]+$/i,dP=/^0b[01]+$/i,fP=/^0o[0-7]+$/i,mP=parseInt;function gP(e){if(typeof e=="number")return e;if(cP(e))return Rg;if(Eg(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=Eg(t)?t+"":t}if(typeof e!="string")return e===0?e:+e;e=pP(e);var r=dP.test(e);return r||fP.test(e)?mP(e.slice(2),r?2:8):lP.test(e)?Rg:+e}_g.exports=gP});var Cg=u((pW,Lg)=>{"use strict";var yP=xg(),Og=1/0,hP=17976931348623157e292;function AP(e){if(!e)return e===0?e:0;if(e=yP(e),e===Og||e===-Og){var t=e<0?-1:1;return t*hP}return e===e?e:0}Lg.exports=AP});var mi=u((cW,Pg)=>{"use strict";var bP=Cg();function IP(e){var t=bP(e),r=t%1;return t===t?r?t-r:t:0}Pg.exports=IP});var kn=u((lW,Bg)=>{"use strict";var SP=ai(),wP=wm(),TP=lg(),vP=di(),EP=fg(),RP=si(),_P=bg(),xP=ui(),OP=pi(),Ug=mi(),LP="Expected a function",qg=1,CP=2,gi=8,yi=16,hi=32,Dg=64,Ng=Math.max;function PP(e,t,r,a,n,o,s,i){var p=t&CP;if(!p&&typeof e!="function")throw new TypeError(LP);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:RP(e),I=[e,t,r,a,n,m,y,o,s,i];if(g&&_P(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 L=wP(e,t,r);else t==gi||t==yi?L=TP(e,t,i):(t==hi||t==(qg|hi))&&!n.length?L=EP(e,t,r,a):L=vP.apply(void 0,I);var _=g?SP:xP;return OP(_(L,I),e,t)}Bg.exports=PP});var Gg=u((dW,Mg)=>{"use strict";var UP=kn(),qP=128;function DP(e,t,r){return t=r?void 0:t,t=e&&t==null?e.length:t,UP(e,qP,void 0,void 0,void 0,void 0,t)}Mg.exports=DP});var Fg=u((fW,kg)=>{"use strict";var NP=Yo(),BP=NP(Object.keys,Object);kg.exports=BP});var Ai=u((mW,Qg)=>{"use strict";var MP=pn(),GP=Fg(),kP=Object.prototype,FP=kP.hasOwnProperty;function QP(e){if(!MP(e))return GP(e);var t=[];for(var r in Object(e))FP.call(e,r)&&r!="constructor"&&t.push(r);return t}Qg.exports=QP});var mr=u((gW,jg)=>{"use strict";var jP=es(),WP=Ai(),$P=Jt();function KP(e){return $P(e)?jP(e):WP(e)}jg.exports=KP});var bi=u((yW,Wg)=>{"use strict";var VP=ar(),YP=mr();function HP(e,t){return e&&VP(t,YP(t),e)}Wg.exports=HP});var Kg=u((hW,$g)=>{"use strict";var zP=ar(),JP=nr();function XP(e,t){return e&&zP(t,JP(t),e)}$g.exports=XP});var Yg=u((AW,Vg)=>{"use strict";function ZP(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=ZP});var Ii=u((bW,Hg)=>{"use strict";function eU(){return[]}Hg.exports=eU});var Fn=u((IW,Jg)=>{"use strict";var tU=Yg(),rU=Ii(),aU=Object.prototype,nU=aU.propertyIsEnumerable,zg=Object.getOwnPropertySymbols,oU=zg?function(e){return e==null?[]:(e=Object(e),tU(zg(e),function(t){return nU.call(e,t)}))}:rU;Jg.exports=oU});var Zg=u((SW,Xg)=>{"use strict";var sU=ar(),iU=Fn();function uU(e,t){return sU(e,iU(e),t)}Xg.exports=uU});var Si=u((wW,ey)=>{"use strict";var pU=Xa(),cU=un(),lU=Fn(),dU=Ii(),fU=Object.getOwnPropertySymbols,mU=fU?function(e){for(var t=[];e;)pU(t,lU(e)),e=cU(e);return t}:dU;ey.exports=mU});var ry=u((TW,ty)=>{"use strict";var gU=ar(),yU=Si();function hU(e,t){return gU(e,yU(e),t)}ty.exports=hU});var wi=u((vW,ay)=>{"use strict";var AU=Xa(),bU=re();function IU(e,t,r){var a=t(e);return bU(e)?a:AU(a,r(e))}ay.exports=IU});var Ti=u((EW,ny)=>{"use strict";var SU=wi(),wU=Fn(),TU=mr();function vU(e){return SU(e,TU,wU)}ny.exports=vU});var sy=u((RW,oy)=>{"use strict";var EU=wi(),RU=Si(),_U=nr();function xU(e){return EU(e,_U,RU)}oy.exports=xU});var uy=u((_W,iy)=>{"use strict";var OU=gt(),LU=oe(),CU=OU(LU,"DataView");iy.exports=CU});var cy=u((xW,py)=>{"use strict";var PU=gt(),UU=oe(),qU=PU(UU,"Promise");py.exports=qU});var yr=u((OW,hy)=>{"use strict";var vi=uy(),Ei=tn(),Ri=cy(),_i=Go(),xi=ti(),yy=mt(),gr=Po(),ly="[object Map]",DU="[object Object]",dy="[object Promise]",fy="[object Set]",my="[object WeakMap]",gy="[object DataView]",NU=gr(vi),BU=gr(Ei),MU=gr(Ri),GU=gr(_i),kU=gr(xi),Dt=yy;(vi&&Dt(new vi(new ArrayBuffer(1)))!=gy||Ei&&Dt(new Ei)!=ly||Ri&&Dt(Ri.resolve())!=dy||_i&&Dt(new _i)!=fy||xi&&Dt(new xi)!=my)&&(Dt=function(e){var t=yy(e),r=t==DU?e.constructor:void 0,a=r?gr(r):"";if(a)switch(a){case NU:return gy;case BU:return ly;case MU:return dy;case GU:return fy;case kU:return my}return t});hy.exports=Dt});var by=u((LW,Ay)=>{"use strict";var FU=Object.prototype,QU=FU.hasOwnProperty;function jU(e){var t=e.length,r=new e.constructor(t);return t&&typeof e[0]=="string"&&QU.call(e,"index")&&(r.index=e.index,r.input=e.input),r}Ay.exports=jU});var Sy=u((CW,Iy)=>{"use strict";var WU=sn();function $U(e,t){var r=t?WU(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.byteLength)}Iy.exports=$U});var Ty=u((PW,wy)=>{"use strict";var KU=/\w*$/;function VU(e){var t=new e.constructor(e.source,KU.exec(e));return t.lastIndex=e.lastIndex,t}wy.exports=VU});var xy=u((UW,_y)=>{"use strict";var vy=_t(),Ey=vy?vy.prototype:void 0,Ry=Ey?Ey.valueOf:void 0;function YU(e){return Ry?Object(Ry.call(e)):{}}_y.exports=YU});var Ly=u((qW,Oy)=>{"use strict";var HU=sn(),zU=Sy(),JU=Ty(),XU=xy(),ZU=Vo(),eq="[object Boolean]",tq="[object Date]",rq="[object Map]",aq="[object Number]",nq="[object RegExp]",oq="[object Set]",sq="[object String]",iq="[object Symbol]",uq="[object ArrayBuffer]",pq="[object DataView]",cq="[object Float32Array]",lq="[object Float64Array]",dq="[object Int8Array]",fq="[object Int16Array]",mq="[object Int32Array]",gq="[object Uint8Array]",yq="[object Uint8ClampedArray]",hq="[object Uint16Array]",Aq="[object Uint32Array]";function bq(e,t,r){var a=e.constructor;switch(t){case uq:return HU(e);case eq:case tq:return new a(+e);case pq:return zU(e,r);case cq:case lq:case dq:case fq:case mq:case gq:case yq:case hq:case Aq:return ZU(e,r);case rq:return new a;case aq:case sq:return new a(e);case nq:return JU(e);case oq:return new a;case iq:return XU(e)}}Oy.exports=bq});var Py=u((DW,Cy)=>{"use strict";var Iq=yr(),Sq=ye(),wq="[object Map]";function Tq(e){return Sq(e)&&Iq(e)==wq}Cy.exports=Tq});var Ny=u((NW,Dy)=>{"use strict";var vq=Py(),Eq=cn(),Uy=ln(),qy=Uy&&Uy.isMap,Rq=qy?Eq(qy):vq;Dy.exports=Rq});var My=u((BW,By)=>{"use strict";var _q=yr(),xq=ye(),Oq="[object Set]";function Lq(e){return xq(e)&&_q(e)==Oq}By.exports=Lq});var Qy=u((MW,Fy)=>{"use strict";var Cq=My(),Pq=cn(),Gy=ln(),ky=Gy&&Gy.isSet,Uq=ky?Pq(ky):Cq;Fy.exports=Uq});var Oi=u((GW,Ky)=>{"use strict";var qq=na(),Dq=Mn(),Nq=Zo(),Bq=bi(),Mq=Kg(),Gq=$o(),kq=er(),Fq=Zg(),Qq=ry(),jq=Ti(),Wq=sy(),$q=yr(),Kq=by(),Vq=Ly(),Yq=Ho(),Hq=re(),zq=pa(),Jq=Ny(),Xq=Ee(),Zq=Qy(),eD=mr(),tD=nr(),rD=1,aD=2,nD=4,jy="[object Arguments]",oD="[object Array]",sD="[object Boolean]",iD="[object Date]",uD="[object Error]",Wy="[object Function]",pD="[object GeneratorFunction]",cD="[object Map]",lD="[object Number]",$y="[object Object]",dD="[object RegExp]",fD="[object Set]",mD="[object String]",gD="[object Symbol]",yD="[object WeakMap]",hD="[object ArrayBuffer]",AD="[object DataView]",bD="[object Float32Array]",ID="[object Float64Array]",SD="[object Int8Array]",wD="[object Int16Array]",TD="[object Int32Array]",vD="[object Uint8Array]",ED="[object Uint8ClampedArray]",RD="[object Uint16Array]",_D="[object Uint32Array]",N={};N[jy]=N[oD]=N[hD]=N[AD]=N[sD]=N[iD]=N[bD]=N[ID]=N[SD]=N[wD]=N[TD]=N[cD]=N[lD]=N[$y]=N[dD]=N[fD]=N[mD]=N[gD]=N[vD]=N[ED]=N[RD]=N[_D]=!0;N[uD]=N[Wy]=N[yD]=!1;function Qn(e,t,r,a,n,o){var s,i=t&rD,p=t&aD,f=t&nD;if(r&&(s=n?r(e,a,n,o):r(e)),s!==void 0)return s;if(!Xq(e))return e;var m=Hq(e);if(m){if(s=Kq(e),!i)return kq(e,s)}else{var y=$q(e),g=y==Wy||y==pD;if(zq(e))return Gq(e,i);if(y==$y||y==jy||g&&!n){if(s=p||g?{}:Yq(e),!i)return p?Qq(e,Mq(s,e)):Fq(e,Bq(s,e))}else{if(!N[y])return n?e:{};s=Vq(e,y,i)}}o||(o=new qq);var I=o.get(e);if(I)return I;o.set(e,s),Zq(e)?e.forEach(function(R){s.add(Qn(R,t,r,R,e,o))}):Jq(e)&&e.forEach(function(R,E){s.set(E,Qn(R,t,r,E,e,o))});var L=f?p?Wq:jq:p?tD:eD,_=m?void 0:L(e);return Dq(_||e,function(R,E){_&&(E=R,R=e[E]),Nq(s,E,Qn(R,t,r,E,e,o))}),s}Ky.exports=Qn});var Yy=u((kW,Vy)=>{"use strict";var xD=Oi(),OD=4;function LD(e){return xD(e,OD)}Vy.exports=LD});var zy=u((FW,Hy)=>{"use strict";var CD=kn(),PD=8;function Li(e,t,r){t=r?void 0:t;var a=CD(e,PD,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((QW,Jy)=>{"use strict";var UD=mt(),qD=ye(),DD=zo(),ND="[object DOMException]",BD="[object Error]";function MD(e){if(!qD(e))return!1;var t=UD(e);return t==BD||t==ND||typeof e.message=="string"&&typeof e.name=="string"&&!DD(e)}Jy.exports=MD});var eh=u((jW,Zy)=>{"use strict";var GD=yr(),kD=ye(),FD="[object WeakMap]";function QD(e){return kD(e)&&GD(e)==FD}Zy.exports=QD});var rh=u((WW,th)=>{"use strict";function jD(e,t){for(var r=-1,a=e==null?0:e.length;++r<a;)if(t(e[r],r,e))return!0;return!1}th.exports=jD});var Ci=u(($W,ah)=>{"use strict";var WD=No(),$D=rh(),KD=Mo(),VD=1,YD=2;function HD(e,t,r,a,n,o){var s=r&VD,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&YD?new WD:void 0;for(o.set(e,t),o.set(t,e);++y<i;){var L=e[y],_=t[y];if(a)var R=s?a(_,L,y,t,e,o):a(L,_,y,e,t,o);if(R!==void 0){if(R)continue;g=!1;break}if(I){if(!$D(t,function(E,U){if(!KD(I,U)&&(L===E||n(L,E,r,a,o)))return I.push(U)})){g=!1;break}}else if(!(L===_||n(L,_,r,a,o))){g=!1;break}}return o.delete(e),o.delete(t),g}ah.exports=HD});var oh=u((KW,nh)=>{"use strict";function zD(e){var t=-1,r=Array(e.size);return e.forEach(function(a,n){r[++t]=[n,a]}),r}nh.exports=zD});var ch=u((VW,ph)=>{"use strict";var sh=_t(),ih=Ko(),JD=Yt(),XD=Ci(),ZD=oh(),eN=nn(),tN=1,rN=2,aN="[object Boolean]",nN="[object Date]",oN="[object Error]",sN="[object Map]",iN="[object Number]",uN="[object RegExp]",pN="[object Set]",cN="[object String]",lN="[object Symbol]",dN="[object ArrayBuffer]",fN="[object DataView]",uh=sh?sh.prototype:void 0,Pi=uh?uh.valueOf:void 0;function mN(e,t,r,a,n,o,s){switch(r){case fN:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case dN:return!(e.byteLength!=t.byteLength||!o(new ih(e),new ih(t)));case aN:case nN:case iN:return JD(+e,+t);case oN:return e.name==t.name&&e.message==t.message;case uN:case cN:return e==t+"";case sN:var i=ZD;case pN:var p=a&tN;if(i||(i=eN),e.size!=t.size&&!p)return!1;var f=s.get(e);if(f)return f==t;a|=rN,s.set(e,t);var m=XD(i(e),i(t),a,n,o,s);return s.delete(e),m;case lN:if(Pi)return Pi.call(e)==Pi.call(t)}return!1}ph.exports=mN});var fh=u((YW,dh)=>{"use strict";var lh=Ti(),gN=1,yN=Object.prototype,hN=yN.hasOwnProperty;function AN(e,t,r,a,n,o){var s=r&gN,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:hN.call(t,g)))return!1}var I=o.get(e),L=o.get(t);if(I&&L)return I==t&&L==e;var _=!0;o.set(e,t),o.set(t,e);for(var R=s;++y<p;){g=i[y];var E=e[g],U=t[g];if(a)var Le=s?a(U,E,g,t,e,o):a(E,U,g,e,t,o);if(!(Le===void 0?E===U||n(E,U,r,a,o):Le)){_=!1;break}R||(R=g=="constructor")}if(_&&!R){var Se=e.constructor,pt=t.constructor;Se!=pt&&"constructor"in e&&"constructor"in t&&!(typeof Se=="function"&&Se instanceof Se&&typeof pt=="function"&&pt instanceof pt)&&(_=!1)}return o.delete(e),o.delete(t),_}dh.exports=AN});var Sh=u((HW,Ih)=>{"use strict";var Ui=na(),bN=Ci(),IN=ch(),SN=fh(),mh=yr(),gh=re(),yh=pa(),wN=dn(),TN=1,hh="[object Arguments]",Ah="[object Array]",jn="[object Object]",vN=Object.prototype,bh=vN.hasOwnProperty;function EN(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||wN(e)?bN(e,t,r,a,n,o):IN(e,t,p,r,a,n,o);if(!(r&TN)){var I=m&&bh.call(e,"__wrapped__"),L=y&&bh.call(t,"__wrapped__");if(I||L){var _=I?e.value():e,R=L?t.value():t;return o||(o=new Ui),n(_,R,r,a,o)}}return g?(o||(o=new Ui),SN(e,t,r,a,n,o)):!1}Ih.exports=EN});var qi=u((zW,vh)=>{"use strict";var RN=Sh(),wh=ye();function Th(e,t,r,a,n){return e===t?!0:e==null||t==null||!wh(e)&&!wh(t)?e!==e&&t!==t:RN(e,t,r,a,Th,n)}vh.exports=Th});var Rh=u((JW,Eh)=>{"use strict";var _N=na(),xN=qi(),ON=1,LN=2;function CN(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 _N;if(a)var g=a(f,m,p,e,t,y);if(!(g===void 0?xN(m,f,ON|LN,a,y):g))return!1}}return!0}Eh.exports=CN});var Di=u((XW,_h)=>{"use strict";var PN=Ee();function UN(e){return e===e&&!PN(e)}_h.exports=UN});var Oh=u((ZW,xh)=>{"use strict";var qN=Di(),DN=mr();function NN(e){for(var t=DN(e),r=t.length;r--;){var a=t[r],n=e[a];t[r]=[a,n,qN(n)]}return t}xh.exports=NN});var Ni=u((e$,Lh)=>{"use strict";function BN(e,t){return function(r){return r==null?!1:r[e]===t&&(t!==void 0||e in Object(r))}}Lh.exports=BN});var Ph=u((t$,Ch)=>{"use strict";var MN=Rh(),GN=Oh(),kN=Ni();function FN(e){var t=GN(e);return t.length==1&&t[0][2]?kN(t[0][0],t[0][1]):function(r){return r===e||MN(r,e,t)}}Ch.exports=FN});var Wn=u((r$,Uh)=>{"use strict";var QN=re(),jN=fr(),WN=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,$N=/^\w*$/;function KN(e,t){if(QN(e))return!1;var r=typeof e;return r=="number"||r=="symbol"||r=="boolean"||e==null||jN(e)?!0:$N.test(e)||!WN.test(e)||t!=null&&e in Object(t)}Uh.exports=KN});var Nh=u((a$,Dh)=>{"use strict";var qh=rn(),VN="Expected a function";function Bi(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(VN);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((n$,Bh)=>{"use strict";var YN=Nh(),HN=500;function zN(e){var t=YN(e,function(a){return r.size===HN&&r.clear(),a}),r=t.cache;return t}Bh.exports=zN});var Mi=u((o$,Gh)=>{"use strict";var JN=Mh(),XN=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,ZN=/\\(\\)?/g,eB=JN(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(XN,function(r,a,n,o){t.push(n?o.replace(ZN,"$1"):a||r)}),t});Gh.exports=eB});var Gi=u((s$,kh)=>{"use strict";function tB(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}kh.exports=tB});var Kh=u((i$,$h)=>{"use strict";var Fh=_t(),rB=Gi(),aB=re(),nB=fr(),oB=1/0,Qh=Fh?Fh.prototype:void 0,jh=Qh?Qh.toString:void 0;function Wh(e){if(typeof e=="string")return e;if(aB(e))return rB(e,Wh)+"";if(nB(e))return jh?jh.call(e):"";var t=e+"";return t=="0"&&1/e==-oB?"-0":t}$h.exports=Wh});var ki=u((u$,Vh)=>{"use strict";var sB=Kh();function iB(e){return e==null?"":sB(e)}Vh.exports=iB});var Fi=u((p$,Yh)=>{"use strict";var uB=re(),pB=Wn(),cB=Mi(),lB=ki();function dB(e,t){return uB(e)?e:pB(e,t)?[e]:cB(lB(e))}Yh.exports=dB});var hr=u((c$,Hh)=>{"use strict";var fB=fr(),mB=1/0;function gB(e){if(typeof e=="string"||fB(e))return e;var t=e+"";return t=="0"&&1/e==-mB?"-0":t}Hh.exports=gB});var Qi=u((l$,zh)=>{"use strict";var yB=Fi(),hB=hr();function AB(e,t){t=yB(t,e);for(var r=0,a=t.length;e!=null&&r<a;)e=e[hB(t[r++])];return r&&r==a?e:void 0}zh.exports=AB});var Xh=u((d$,Jh)=>{"use strict";var bB=Qi();function IB(e,t,r){var a=e==null?void 0:bB(e,t);return a===void 0?r:a}Jh.exports=IB});var eA=u((f$,Zh)=>{"use strict";function SB(e,t){return e!=null&&t in Object(e)}Zh.exports=SB});var rA=u((m$,tA)=>{"use strict";var wB=Fi(),TB=Jr(),vB=re(),EB=da(),RB=on(),_B=hr();function xB(e,t,r){t=wB(t,e);for(var a=-1,n=t.length,o=!1;++a<n;){var s=_B(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&&RB(n)&&EB(s,n)&&(vB(e)||TB(e)))}tA.exports=xB});var nA=u((g$,aA)=>{"use strict";var OB=eA(),LB=rA();function CB(e,t){return e!=null&&LB(e,t,OB)}aA.exports=CB});var sA=u((y$,oA)=>{"use strict";var PB=qi(),UB=Xh(),qB=nA(),DB=Wn(),NB=Di(),BB=Ni(),MB=hr(),GB=1,kB=2;function FB(e,t){return DB(e)&&NB(t)?BB(MB(e),t):function(r){var a=UB(r,e);return a===void 0&&a===t?qB(r,e):PB(t,a,GB|kB)}}oA.exports=FB});var uA=u((h$,iA)=>{"use strict";function QB(e){return function(t){return t?.[e]}}iA.exports=QB});var cA=u((A$,pA)=>{"use strict";var jB=Qi();function WB(e){return function(t){return jB(t,e)}}pA.exports=WB});var dA=u((b$,lA)=>{"use strict";var $B=uA(),KB=cA(),VB=Wn(),YB=hr();function HB(e){return VB(e)?$B(YB(e)):KB(e)}lA.exports=HB});var ji=u((I$,fA)=>{"use strict";var zB=Ph(),JB=sA(),XB=Xr(),ZB=re(),eM=dA();function tM(e){return typeof e=="function"?e:e==null?XB:typeof e=="object"?ZB(e)?JB(e[0],e[1]):zB(e):eM(e)}fA.exports=tM});var gA=u((S$,mA)=>{"use strict";var rM=Oi(),aM=ji(),nM=1;function oM(e){return aM(typeof e=="function"?e:rM(e,nM))}mA.exports=oM});var hA=u((w$,yA)=>{"use strict";var sM=Oo();function iM(e){var t=e==null?0:e.length;return t?sM(e,1):[]}yA.exports=iM});var bA=u((T$,AA)=>{"use strict";var uM=hA(),pM=Lo(),cM=en();function lM(e){return cM(pM(e,void 0,uM),e+"")}AA.exports=lM});var SA=u((v$,IA)=>{"use strict";var dM=kn(),fM=bA(),mM=256,gM=fM(function(e,t){return dM(e,mM,void 0,void 0,void 0,t)});IA.exports=gM});var TA=u((E$,wA)=>{"use strict";var yM=Gi(),hM=er(),AM=re(),bM=fr(),IM=Mi(),SM=hr(),wM=ki();function TM(e){return AM(e)?yM(e,SM):bM(e)?[e]:hM(IM(wM(e)))}wA.exports=TM});var EA=u((R$,vA)=>{"use strict";vA.exports={ary:Gg(),assign:bi(),clone:Yy(),curry:zy(),forEach:Mn(),isArray:re(),isError:Xy(),isFunction:Zr(),isWeakMap:eh(),iteratee:gA(),keys:Ai(),rearg:SA(),toInteger:mi(),toPath:TA()}});var _A=u((_$,RA)=>{"use strict";var vM=mm(),EM=EA();function RM(e,t,r){return vM(EM,e,t,r)}RA.exports=RM});var Wi=u((x$,OA)=>{"use strict";var _M=_A(),xA=_M("merge",ts());xA.placeholder=Js();OA.exports=xA});var Lb=u((IK,Ob)=>{"use strict";function VM(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=VM});var Pb=u((SK,Cb)=>{"use strict";var YM=Wo(),HM=mr();function zM(e,t){return e&&YM(e,t,HM)}Cb.exports=zM});var qb=u((wK,Ub)=>{"use strict";var JM=Jt();function XM(e,t){return function(r,a){if(r==null)return r;if(!JM(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=XM});var Nb=u((TK,Db)=>{"use strict";var ZM=Pb(),eG=qb(),tG=eG(ZM);Db.exports=tG});var Mb=u((vK,Bb)=>{"use strict";var rG=Nb();function aG(e,t,r,a){return rG(e,function(n,o,s){t(a,n,r(n),s)}),a}Bb.exports=aG});var kb=u((EK,Gb)=>{"use strict";var nG=Lb(),oG=Mb(),sG=ji(),iG=re();function uG(e,t){return function(r,a){var n=iG(r)?nG:oG,o=t?t():{};return n(r,e,sG(a,2),o)}}Gb.exports=uG});var Qb=u((RK,Fb)=>{"use strict";var pG=oa(),cG=kb(),lG=Object.prototype,dG=lG.hasOwnProperty,fG=cG(function(e,t,r){dG.call(e,r)?e[r].push(t):pG(e,r,[t])});Fb.exports=fG});var BG={};w(BG,{Method:()=>so,ai:()=>Pu,api:()=>su,auditLogs:()=>At,automations:()=>_n,backups:()=>Re,branding:()=>An,constants:()=>$r,environmentVariables:()=>Ye,features:()=>qe,groups:()=>j,init:()=>um,licensing:()=>je,logger:()=>Nt,mappers:()=>Y,middleware:()=>Ji,plugins:()=>xn,publicApi:()=>Cn,quotas:()=>Ke,scimGroups:()=>Ar,scimUsers:()=>fe,sdk:()=>Ki,users:()=>at,utils:()=>Kt});module.exports=qI(BG);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:()=>Re,branding:()=>An,environmentVariables:()=>Ye,features:()=>qe,groups:()=>j,init:()=>um,licensing:()=>je,logger:()=>Nt,plugins:()=>xn,publicApi:()=>Cn,quotas:()=>Ke,scimGroups:()=>Ar,scimUsers:()=>fe,users:()=>at,utils:()=>Kt});var An={};w(An,{getBrandingConfig:()=>vx});var qe={};w(qe,{checkBackups:()=>he,checkFeature:()=>yn,checkFeatures:()=>ds,checkSCIM:()=>ys,isAppBuildersEnabled:()=>Ct,isAuditLogsEnabled:()=>hn,isBackupsEnabled:()=>fs,isBrandingEnabled:()=>ms,isEnforceableSSO:()=>wf,isExpandedPublicApiEnabled:()=>tt,isPWAEnabled:()=>bx,isSSOEnforced:()=>Ix,isSyncAutomationsEnabled:()=>hx,isTriggerAutomationRunEnabled:()=>Ax,isUserGroupsEnabled:()=>gs,isViewPermissionEnabled:()=>Sx,isViewReadonlyColumnsEnabled:()=>wx});var se=require("@budibase/types"),et=require("@budibase/backend-core");var je={};w(je,{cache:()=>Pe,client:()=>ft,features:()=>za,getFreeLicense:()=>ps,getLicense:()=>is,getLicenseFromKey:()=>us,keys:()=>ls,offline:()=>fn,quotas:()=>Ja});var Pe={};w(Pe,{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:()=>vo,getLicense:()=>Wt,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 ke={};w(ke,{bustCache:()=>mo,getCurrentUsageValues:()=>Ju,getQuotaUsage:()=>Tt,setAllUsage:()=>yo,setAppUsageValue:()=>go,setUsage:()=>Yu,setUsagePerApp:()=>Hu,utils:()=>_r});var ne=require("@budibase/types"),ce=require("@budibase/backend-core");var _r={};w(_r,{generateBaseQuotaUsage:()=>Ma,generateNewMonthlyQuotas:()=>Rr,generateNewQuotaUsage:()=>fo,getBreakdownName:()=>ka,getCurrentMonthString:()=>ct,getQuotaDocId:()=>Er,setCurrentMonth:()=>Ga,setQuotaReset:()=>lo});var H=require("@budibase/types"),vr=require("@budibase/backend-core"),Ba=require("@budibase/shared-core"),Er=()=>vr.context.isSelfHostUsingCloud()?`quota_usage_${vr.context.getTenantId()}`:vr.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:Er(),quotaReset:Wu(),...Ma(),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]},ka=(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=ce.Duration.fromSeconds(60).toMs(),{Writethrough:Ku}=ce.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=()=>ce.tenancy.isSelfHostUsingCloud()?new Ku(ce.tenancy.getSelfHostCloudDB(),$u):new Ku(ce.tenancy.getGlobalDB(),$u);async function mo(e=0){let r=Fa(),a=Er(),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(Er());if(!t){t=fo();let{rev:r}=await e.put(t);t._rev=r}return Ga(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},GI=(e,t,r,a)=>{let n=ka(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=ce.db.getProdAppID(a?.appId||ce.context.getAppId())}catch{}if(!o||!n.app||!ne.APP_QUOTA_NAMES.includes(t))return e;e.apps?.[o]||(e.apps={...e.apps,[o]:Ma()});let s=e.apps[o];switch(r){case ne.QuotaUsageType.STATIC:s.usageQuota[t]=n.app;break;case ne.QuotaUsageType.MONTHLY:{let i=ct(),p=t,f=s.monthly[i];f||(s.monthly[i]=Rr(),f=s.monthly[i]),f[p]=n.app,ne.BREAKDOWN_QUOTA_NAMES.includes(p)&&a?.id&&(f=GI(f,p,a.id,n));break}}return e},Vu=(e,t,r,a)=>{if(!ne.APP_QUOTA_NAMES.includes(r))return{};let n;try{n=ce.db.getProdAppID(ce.context.getAppId())}catch{}if(!n||!e.apps||!e.apps[n])return{app:0};let o=e.apps[n];switch(t){case ne.QuotaUsageType.STATIC:if(o.usageQuota?.[r])return{app:o.usageQuota[r]};break;case ne.QuotaUsageType.MONTHLY:{let s=ct(),i=r;if(!o.monthly?.[s]?.[i])break;let p=o.monthly[s],f=p[i],m,y=ka(i,a);return y&&a&&p.breakdown?.[y]&&(m=p.breakdown[y]?.values[a]),{app:f,breakdown:m||0}}}return{app:0}},kI=(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===ne.QuotaUsageType.STATIC)t=t,e.usageQuota[t]=a.total,kI(t,e,a.triggers);else if(r===ne.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 ne.QuotaUsageType.STATIC:if(a.usageQuota[t]){let s=t;n=a.usageQuota[s],o=Vu(a,e,t,r)}break;case ne.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 ne.APP_QUOTA_NAMES.includes(t)&&!(o.app||o.breakdown)&&(o.app=o.app||0,o.breakdown=o.breakdown||0),{total:n,app:o.app,breakdown:o.breakdown}};var Te={};w(Te,{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 Ce=require("@budibase/types"),Ft=require("@budibase/backend-core");async function Xu(){let e=Ft.sql.designDoc.base("type");e.sql.tables={[Ce.AUDIT_LOG_TYPE]:{fields:{appId:Ce.SQLiteType.TEXT,event:Ce.SQLiteType.TEXT,userId:Ce.SQLiteType.TEXT,timestamp:Ce.SQLiteType.TEXT,metadata:Ce.SQLiteType.TEXT,name:Ce.SQLiteType.TEXT,type:Ce.SQLiteType.TEXT,fallback:Ce.SQLiteType.TEXT}}};let t=Ft.context.getAuditLogsDB(),r;try{r=await t.get(Ft.SQLITE_DESIGN_DOC_ID),r={...r,...e}}catch(a){if(a.status===404)r=e;else throw a}await t.put(r)}var 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)) {
|
|
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
|
|
11
|
-
if (doc._id.startsWith("${
|
|
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 Qt=require("@budibase/backend-core"),{ViewName:op,AutomationViewMode:bo,SEPARATOR:Fe,DocumentType:sp,createView:ip}=Qt.db,nS=sp.AUTOMATION_LOG+Fe,np=sp.APP_BACKUP+Fe;async function up(){let e=Qt.context.getProdAppDB(),t=`function(doc) {
|
|
11
|
+
if (doc._id.startsWith("${nS}")) {
|
|
12
12
|
let autoId = doc.automationId + "${Fe}"
|
|
13
13
|
let status = doc.status + "${Fe}"
|
|
14
|
-
let autoKey = "${
|
|
15
|
-
let statusKey = "${
|
|
16
|
-
let allKey = "${
|
|
14
|
+
let autoKey = "${bo.AUTOMATION}${Fe}" + autoId + doc.createdAt
|
|
15
|
+
let statusKey = "${bo.STATUS}${Fe}" + status + doc.createdAt
|
|
16
|
+
let allKey = "${bo.ALL}${Fe}" + status + autoId + doc.createdAt
|
|
17
17
|
emit(statusKey)
|
|
18
18
|
emit(autoKey)
|
|
19
19
|
emit(allKey)
|
|
20
20
|
}
|
|
21
|
-
}`;await
|
|
22
|
-
if (doc._id.startsWith("${
|
|
21
|
+
}`;await ip(e,t,op.AUTOMATION_LOGS)}async function pp(){let e=Qt.tenancy.getGlobalDB(),t=`function(doc) {
|
|
22
|
+
if (doc._id.startsWith("${np}") && doc.type && doc.trigger) {
|
|
23
23
|
let full = doc.appId + "${Fe}"
|
|
24
24
|
full += doc.trigger.toLowerCase() + "${Fe}"
|
|
25
25
|
full += doc.type.toLowerCase() + "${Fe}"
|
|
26
|
-
emit("${
|
|
26
|
+
emit("${np}" + full + doc.timestamp)
|
|
27
27
|
}
|
|
28
|
-
}`;await
|
|
28
|
+
}`;await ip(e,t,op.APP_BACKUP_BY_TRIGGER)}var fp=require("@budibase/types");var $r={};w($r,{GENERIC_PAGE_SIZE:()=>Qe,auditLogs:()=>jt,licenses:()=>ge,quotas:()=>Ze,versions:()=>Wr});var ge={};w(ge,{CLOUD_FREE_LICENSE:()=>sS,SELF_FREE_LICENSE:()=>Io,UNLIMITED:()=>F,UNLIMITED_LICENSE:()=>iS});var dt=require("@budibase/types");var Ze={};w(Ze,{UNLIMITED:()=>oS,actions:()=>kr,appBackupRetentionDays:()=>Qr,apps:()=>Pr,automationLogRetentionDays:()=>Fr,automations:()=>Mr,budibaseAICredits:()=>Gr,creators:()=>qr,customAIConfigurations:()=>jr,plugins:()=>Nr,queries:()=>Br,rows:()=>Cr,userGroups:()=>Dr,users:()=>Ur});var te=require("@budibase/types"),oS=-1,Cr=e=>({[te.StaticQuotaName.ROWS]:{name:"Rows",value:e,triggers:[90,100]}}),Pr=e=>({[te.StaticQuotaName.APPS]:{name:"Apps",value:e,triggers:[100]}}),Ur=e=>({[te.StaticQuotaName.USERS]:{name:"Users",value:e,triggers:[80,100]}}),qr=e=>({[te.StaticQuotaName.CREATORS]:{name:"Creators",value:e,triggers:[]}}),Dr=e=>({[te.StaticQuotaName.USER_GROUPS]:{name:"User Groups",value:e,triggers:[80,100]}}),Nr=e=>({[te.StaticQuotaName.PLUGINS]:{name:"Plugins",value:e,triggers:[90,100]}}),Br=e=>({[te.MonthlyQuotaName.QUERIES]:{name:"Queries",value:e,triggers:[]}}),Mr=e=>({[te.MonthlyQuotaName.AUTOMATIONS]:{name:"Automations",value:e,triggers:[80,90,100]}}),Gr=e=>({[te.MonthlyQuotaName.BUDIBASE_AI_CREDITS]:{name:"Budibase AI Credits",value:e,triggers:[80,90,100]}}),kr=e=>({[te.MonthlyQuotaName.ACTIONS]:{name:"Actions",value:e,triggers:[80,90,100]}}),Fr=e=>({[te.ConstantQuotaName.AUTOMATION_LOG_RETENTION_DAYS]:{name:"Automation Logs",value:e,triggers:[]}}),Qr=e=>({[te.ConstantQuotaName.APP_BACKUPS_RETENTION_DAYS]:{name:"App Backups",value:e,triggers:[]}}),jr=e=>({[te.StaticQuotaName.AI_CUSTOM_CONFIGS]:{name:"Custom AI Configuration",value:e,triggers:[]}});var F=-1,sS={features:[],quotas:{usage:{monthly:{...Br(F),...Mr(200),...Gr(5e4),...kr(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),...Gr(5e4),...kr(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),...Gr(F),...kr(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 vt=require("@budibase/backend-core"),Wa=P(require("fs")),cp=P(require("path")),uS=()=>{if(vt.env.isDev()){let e="dev-version.txt",t=cp.default.join(vt.objectStore.budibaseTempDir(),e);if(Wa.default.existsSync(t))return Wa.default.readFileSync(t,"utf8");{let r=vt.utils.newid();return Wa.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 jt={};w(jt,{searchTable:()=>pS});var Et=require("@budibase/types"),dp=require("@budibase/backend-core");function pS(){return{type:"table",sourceType:Et.TableSourceType.INTERNAL,name:Et.AUDIT_LOG_TYPE,sourceId:dp.SQS_DATASOURCE_INTERNAL,primary:["_id"],schema:{metadata:{name:"metadata",type:Et.FieldType.JSON},fallback:{name:"fallback",type:Et.FieldType.JSON}}}}var Qe=9;var cS=new Date(864e13).toISOString(),lS=1e3*60*60*24;async function $a(e){let r=(await Pe.getCachedLicense()).quotas?.[fp.QuotaType.CONSTANT]?.[e]?.value||0;return r===ge.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 Ue=require("@budibase/backend-core"),bp=P(require("lru-cache")),AS=1e3,Ap=new bp.default({max:AS});function Ka(){return Ue.StaticDatabases.GLOBAL.docs.environmentVariables}function Ip(e){return`${Ue.tenancy.getTenantId()}/${Ka()}/${e||""}`}async function bS(){let e=Ka(),t=Ue.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(Ue.encryption.decrypt(r.variables,Ue.encryption.SecretOption.ENCRYPTION))}:s={_id:e,variables:{}},Ap.set(n,s),s}async function IS(e){let t=Ka();return await Ue.tenancy.getGlobalDB().put({_id:e._id||t,_rev:e._rev||void 0,variables:Ue.encryption.encrypt(JSON.stringify(e.variables),Ue.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 Te.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 ke.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 ke.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 Wt=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}`)}}),vo=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 Eo=P(require("jsonwebtoken")),wS=`-----BEGIN PUBLIC KEY-----
|
|
29
29
|
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvz3jePLCFBXZ19c8Dpkv
|
|
30
30
|
XtSgOhKFOcvQdo/LV0KJRUzQWDPWuO4ILtBtnqhjtIzZH4CH0qCYBet5L6Qr4CM1
|
|
31
31
|
l2HXiAD1Q2rlHNW9wDaYyKb1F5f+v4RyqCAyzlkwRdksmkLeECTboojNnmRCrE3C
|
|
@@ -34,28 +34,28 @@ l2HXiAD1Q2rlHNW9wDaYyKb1F5f+v4RyqCAyzlkwRdksmkLeECTboojNnmRCrE3C
|
|
|
34
34
|
d/o3ZWE1TTj1zYwlCLN5qRKr3hU8nC3xEYNEbkB9SfTRaOq9Q7P8WmfLkoCPm3pR
|
|
35
35
|
mwIDAQAB
|
|
36
36
|
-----END PUBLIC KEY-----
|
|
37
|
-
`;function Kr(e){return vo.default.verify(e,SS,{algorithms:["RS256"]})}function wS(e,t){return vo.default.sign(t,e,{encoding:"utf-8",algorithm:"RS256"})}var Ha={};w(Ha,{getFeatures:()=>Eo});var l=require("@budibase/types");var TS={[l.PlanType.FREE]:[...ge.SELF_FREE_LICENSE.features],[l.PlanType.PREMIUM]:void 0,[l.PlanType.PREMIUM_PLUS]:[l.Feature.APP_BACKUPS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.PDF,l.Feature.BUDIBASE_AI],[l.PlanType.PREMIUM_PLUS_TRIAL]:[l.Feature.APP_BACKUPS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.PDF,l.Feature.BUDIBASE_AI],[l.PlanType.PRO]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS],[l.PlanType.TEAM]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS],[l.PlanType.BUSINESS]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.AUDIT_LOGS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.PDF,l.Feature.BUDIBASE_AI],[l.PlanType.ENTERPRISE_BASIC]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.ENFORCEABLE_SSO,l.Feature.AUDIT_LOGS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.OFFLINE,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.SCIM,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.PWA,l.Feature.CUSTOM_APP_SCRIPTS,l.Feature.PDF,l.Feature.BUDIBASE_AI],[l.PlanType.ENTERPRISE_BASIC_TRIAL]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.ENFORCEABLE_SSO,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.SCIM,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.PWA,l.Feature.CUSTOM_APP_SCRIPTS,l.Feature.PDF,l.Feature.BUDIBASE_AI],[l.PlanType.ENTERPRISE]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.ENFORCEABLE_SSO,l.Feature.AUDIT_LOGS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.OFFLINE,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.SCIM,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.PWA,l.Feature.CUSTOM_APP_SCRIPTS,l.Feature.PDF,l.Feature.BUDIBASE_AI]},vS={[l.PlanType.FREE]:[...ge.CLOUD_FREE_LICENSE.features],[l.PlanType.PREMIUM]:[l.Feature.APP_BACKUPS,l.Feature.BRANDING,l.Feature.APP_BUILDERS,l.Feature.VIEW_PERMISSIONS,l.Feature.PDF],[l.PlanType.PREMIUM_PLUS]:[l.Feature.APP_BACKUPS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.BUDIBASE_AI,l.Feature.PDF],[l.PlanType.PREMIUM_PLUS_TRIAL]:[l.Feature.APP_BACKUPS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.BUDIBASE_AI,l.Feature.PDF],[l.PlanType.PRO]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS,l.Feature.BRANDING],[l.PlanType.TEAM]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS,l.Feature.BRANDING],[l.PlanType.BUSINESS]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.AUDIT_LOGS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.BUDIBASE_AI,l.Feature.PDF],[l.PlanType.ENTERPRISE_BASIC]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.ENFORCEABLE_SSO,l.Feature.AUDIT_LOGS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.OFFLINE,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.SCIM,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.BUDIBASE_AI,l.Feature.PWA,l.Feature.CUSTOM_APP_SCRIPTS,l.Feature.PDF],[l.PlanType.ENTERPRISE_BASIC_TRIAL]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.ENFORCEABLE_SSO,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.SCIM,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.BUDIBASE_AI,l.Feature.PWA,l.Feature.CUSTOM_APP_SCRIPTS,l.Feature.PDF],[l.PlanType.ENTERPRISE]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.ENFORCEABLE_SSO,l.Feature.AUDIT_LOGS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.SCIM,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.BUDIBASE_AI,l.Feature.PWA,l.Feature.CUSTOM_APP_SCRIPTS,l.Feature.PDF]};function Eo(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(TS);break;case l.Hosting.CLOUD:r=a(vS);break}return r}var za={};w(za,{UNLIMITED:()=>d,getQuotas:()=>Ro});var G=require("@budibase/types");var c=Ze,wp=ge,d=-1,Yr=e=>e*1e6,ES={[G.PlanType.FREE]:{...wp.CLOUD_FREE_LICENSE.quotas},[G.PlanType.PREMIUM]:{usage:{monthly:{...c.queries(d),...c.automations(1e3),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(1e4),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(0),...c.plugins(d),...c.customAIConfigurations(0)}},constant:{...c.automationLogRetentionDays(7),...c.appBackupRetentionDays(7)}},[G.PlanType.PREMIUM_PLUS]:{usage:{monthly:{...c.queries(d),...c.automations(5e3),...c.budibaseAICredits(Yr(2)),...c.actions(d)},static:{...c.rows(25e3),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(0),...c.plugins(d),...c.customAIConfigurations(1)}},constant:{...c.automationLogRetentionDays(30),...c.appBackupRetentionDays(30)}},[G.PlanType.PREMIUM_PLUS_TRIAL]:{usage:{monthly:{...c.queries(d),...c.automations(5e3),...c.budibaseAICredits(Yr(2)),...c.actions(d)},static:{...c.rows(25e3),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(0),...c.plugins(d),...c.customAIConfigurations(1)}},constant:{...c.automationLogRetentionDays(30),...c.appBackupRetentionDays(30)}},[G.PlanType.PRO]:{usage:{monthly:{...c.queries(d),...c.automations(1e3),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(5),...c.plugins(d),...c.customAIConfigurations(0)}},constant:{...c.automationLogRetentionDays(7),...c.appBackupRetentionDays(7)}},[G.PlanType.TEAM]:{usage:{monthly:{...c.queries(d),...c.automations(5e3),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(10),...c.plugins(d),...c.customAIConfigurations(0)}},constant:{...c.automationLogRetentionDays(30),...c.appBackupRetentionDays(90)}},[G.PlanType.BUSINESS]:{usage:{monthly:{...c.queries(d),...c.automations(1e4),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(5e4),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(50),...c.plugins(d),...c.customAIConfigurations(0)}},constant:{...c.automationLogRetentionDays(365),...c.appBackupRetentionDays(365)}},[G.PlanType.ENTERPRISE_BASIC]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(Yr(4)),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(d),...c.plugins(d),...c.customAIConfigurations(d)}},constant:{...c.automationLogRetentionDays(d),...c.appBackupRetentionDays(d)}},[G.PlanType.ENTERPRISE_BASIC_TRIAL]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(Yr(4)),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(d),...c.plugins(d),...c.customAIConfigurations(d)}},constant:{...c.automationLogRetentionDays(15),...c.appBackupRetentionDays(15)}},[G.PlanType.ENTERPRISE]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(Yr(4)),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(d),...c.plugins(d),...c.customAIConfigurations(d)}},constant:{...c.automationLogRetentionDays(d),...c.appBackupRetentionDays(d)}}},RS={[G.PlanType.FREE]:{...wp.SELF_FREE_LICENSE.quotas},[G.PlanType.PREMIUM]:void 0,[G.PlanType.PREMIUM_PLUS]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(0),...c.plugins(d),...c.customAIConfigurations(1)}},constant:{...c.automationLogRetentionDays(30),...c.appBackupRetentionDays(30)}},[G.PlanType.PREMIUM_PLUS_TRIAL]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(0),...c.plugins(d),...c.customAIConfigurations(1)}},constant:{...c.automationLogRetentionDays(30),...c.appBackupRetentionDays(30)}},[G.PlanType.PRO]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(5),...c.plugins(d),...c.customAIConfigurations(0)}},constant:{...c.automationLogRetentionDays(7),...c.appBackupRetentionDays(7)}},[G.PlanType.TEAM]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(10),...c.plugins(d),...c.customAIConfigurations(0)}},constant:{...c.automationLogRetentionDays(30),...c.appBackupRetentionDays(90)}},[G.PlanType.BUSINESS]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(50),...c.plugins(d),...c.customAIConfigurations(0)}},constant:{...c.automationLogRetentionDays(90),...c.appBackupRetentionDays(365)}},[G.PlanType.ENTERPRISE_BASIC]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(d),...c.plugins(d),...c.customAIConfigurations(d)}},constant:{...c.automationLogRetentionDays(d),...c.appBackupRetentionDays(d)}},[G.PlanType.ENTERPRISE_BASIC_TRIAL]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(d),...c.plugins(d),...c.customAIConfigurations(d)}},constant:{...c.automationLogRetentionDays(15),...c.appBackupRetentionDays(15)}},[G.PlanType.ENTERPRISE]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(d),...c.plugins(d),...c.customAIConfigurations(d)}},constant:{...c.automationLogRetentionDays(d),...c.appBackupRetentionDays(d)}}};function Ro(e,t){let r;function a(n){let o=n[t];if(!o)throw new Error(`Quotas do not exist for planType=${t} and hosting=${e}`);return o}switch(e){case G.Hosting.SELF:r=a(RS);break;case G.Hosting.CLOUD:r=a(ES);break}return JSON.parse(JSON.stringify(r))}var Kt={};w(Kt,{appExists:()=>_S,encoding:()=>$t});var Tp=require("@budibase/backend-core");async function _S(e){return(await Tp.db.getAllApps({all:!0,idsOnly:!0})).includes(e)}var $t={};w($t,{base64ToObject:()=>LS,objectToBase64:()=>xS});function xS(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 sf=require("@budibase/types"),or=require("@budibase/backend-core"),uf=P(Gl()),pf=P(es());async function nx(e){await Te.save({offlineLicenseToken:e}),await xt()}async function ox(){await Te.save({offlineLicenseToken:void 0}),await xt()}async function cf(){return(await Te.get()).offlineLicenseToken}async function ts(){let t=(await or.installation.getInstall()).installId,r=or.context.getTenantId(),a=await or.events.identification.getUniqueTenantId(r);return{installId:t,tenantId:a}}async function sx(){let e=await ts();return $t.objectToBase64(e)}function ix(e){return $t.base64ToObject(e)}function lf(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 df(e){let t=await ts();if(e.identifier.installId!==t.installId||e.identifier.tenantId!==t.tenantId)throw new Error("Invalid offline license")}function ff(e){let t=e.plan.type,r=sf.Hosting.SELF,a=Eo(r,t),n=Ro(r,t);return e.features=(0,uf.default)(e.features,a),e.quotas=(0,pf.default)(e.quotas,n),e}async function rs(){try{let e=await cf();if(e){let t=await Kr(e);return lf(t),await df(t),ff(t)}}catch(e){console.error("Error retrieving offline license",e)}}var fa={};w(fa,{deleteDevLicense:()=>dx,getOfflineLicense:()=>cx,writeDevLicenseToDisk:()=>lx});var mf=require("@budibase/backend-core"),ns=require("path"),gf=require("os"),Lt=P(require("fs"));var ux=mf.env.isTest()?".budibase-test":".budibase",as=(0,ns.join)((0,gf.tmpdir)(),ux),px="dev_license.txt",da=(0,ns.join)(as,px);if(!Lt.default.existsSync(as))try{Lt.default.mkdirSync(as)}catch{}function cx(){try{if(Lt.default.existsSync(da)){let e=Lt.default.readFileSync(da,{encoding:"utf-8"});return Kr(e)}}catch(e){console.error("Error retrieving offline license from disk",e)}}function lx(e){console.log(`Writing license to: ${da}`),Lt.default.writeFileSync(da,e,{encoding:"utf-8"})}function dx(){Lt.default.rmSync(da,{force:!0})}var hf=require("dd-trace"),ss=async()=>await hf.tracer.trace("getLicense",async e=>{if(os.env.OFFLINE_MODE)return e.addTags({offline:!0}),rs();let t=await Wt();return t||(e.addTags({offlineFallback:!0}),t=fa.getOfflineLicense()),t}),is=e=>wo(e),us=()=>os.env.SELF_HOSTED?ge.SELF_FREE_LICENSE:ge.CLOUD_FREE_LICENSE;var cs={};w(cs,{activateLicenseKey:()=>fx,deleteLicenseKey:()=>mx,getLicenseKey:()=>fn});var ps=P(require("dd-trace"));async function fx(e){await To(e),await Te.save({licenseKey:e}),await xt()}async function fn(){return await ps.default.trace("getLicenseKey",async e=>{let t=await Te.get();return e.addTags({licenseKey:t.licenseKey}),t.licenseKey})}async function mx(){return await ps.default.trace("deleteLicenseKey",async()=>{await Te.save({licenseKey:void 0}),await xt()})}var Ot=require("@budibase/backend-core"),mn=P(require("dd-trace")),yf=3600,xt=async()=>{await If(),await bf()},Af=async(e,t)=>{let{populateLicense:r=ss,populateFreeLicense:a=us}=t||{};return await mn.default.trace("getCachedLicense",async n=>{let o=Ot.context.getLicense();if(o)return n.addTags({foundInContext:!0,features:o.features,plan:o.plan,quotas:o.quotas}),o;let s=Ot.tenancy.getTenantId(),i=await so(),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 mn.default.trace("populateLicense",async()=>await r(s)),n.addTags({populatedLicense:!!p}),p||(p=mn.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:yf}),await i.store(s,p,yf),p)})};Ot.env.isJest()&&(Af=jest.fn());var bf=Af,If=async()=>{let e=Ot.tenancy.getTenantId();await(await so()).delete(e)};async function ie(e,t){Array.isArray(e)||(e=[e]),t||(t=await Pe.getCachedLicense());for(let r of e)if(!t?.features.includes(r))return!1;return!0}async function gn(e,t){if(!await ie(e,t))throw new et.FeatureDisabledError(`${e} is not currently enabled`,e)}async function ls(e,t){if(!await ie(e,t)){let r=e.join(", ");throw new et.FeatureDisabledError(`${r} are not currently enabled`,r)}}function ye(e){return async(...t)=>(await gn(se.Feature.APP_BACKUPS),e(...t))}async function ds(){return ie(se.Feature.APP_BACKUPS)}async function fs(){return ie(se.Feature.BRANDING)}async function Sf(){return ie(se.Feature.ENFORCEABLE_SSO)}async function hx(){return ie(se.Feature.SYNC_AUTOMATIONS)}async function yx(){return ie(se.Feature.TRIGGER_AUTOMATION_RUN)}async function Ct(){return ie(se.Feature.APP_BUILDERS)}async function hn(){return ie(se.Feature.AUDIT_LOGS)}async function ms(){return ie(se.Feature.USER_GROUPS)}function Ax(){return ie(se.Feature.PWA)}async function tt(){return ie(se.Feature.EXPANDED_PUBLIC_API)}async function bx(e){if(et.env.ENABLE_SSO_MAINTENANCE_MODE||!await Sf())return!1;let r;return e?.config?r=e.config:r=await et.configs.getSettingsConfig(),!!r.isSSOEnforced}var gs=async()=>{let e=se.Feature.SCIM,t=await ie(e),r=await et.configs.getSCIMConfig();if(!t||!r?.enabled)throw new et.FeatureDisabledError(`${e} is not currently enabled`,e);return!0};async function Ix(){return ie(se.Feature.VIEW_PERMISSIONS)}async function Sx(){return ie(se.Feature.VIEW_READONLY_COLUMNS)}var wx={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 Tx(e){return await fs()?{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}:wx}var ys={};w(ys,{enrichAIConfig:()=>hs});var wf=require("@budibase/backend-core"),vx="budibase_ai";async function hs(e){if(wf.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 Ke={};w(Ke,{addAction:()=>Lx,addApp:()=>Ox,addAutomation:()=>Nx,addGroup:()=>bs,addPlugin:()=>Ss,addRow:()=>Px,addRows:()=>qx,addUsers:()=>In,bustCache:()=>fo,decrement:()=>rt,decrementMany:()=>ma,getCurrentUsageValues:()=>zu,getLicensedQuota:()=>vf,getQuotaUsage:()=>Tt,increment:()=>Ae,incrementBudibaseAICredits:()=>wn,incrementMany:()=>Pt,removeApp:()=>Cx,removeGroup:()=>Is,removePlugin:()=>ws,removeRow:()=>Ux,removeRows:()=>Dx,removeUsers:()=>cr,set:()=>As,setAllUsage:()=>go,setAppUsageValue:()=>mo,setUsage:()=>Vu,setUsagePerApp:()=>Yu,updatePluginCount:()=>Ts,updateUsage:()=>ir,usageLimitIsExceeded:()=>xx,utils:()=>_r});var An=require("@budibase/types");var H=require("@budibase/types");var De=require("@budibase/backend-core");var sr=require("dd-trace"),Ae=(e,t,r)=>Tf({change:1,name:e,type:t,opts:r}),Pt=e=>sr.tracer.trace("quotas.incrementMany",async()=>Tf(e)),Tf=async e=>await sr.tracer.trace("quotas.tryIncrement",async t=>{let r=Array.isArray(e)?e:[e];t.addTags({numActions:r.length}),await ir(r.map(n=>({usageChange:n.change,name:n.name,type:n.type,opts:{dryRun:!0,suppressErrorLog:n.opts?.suppressErrorLog,id:n.opts?.id}})));let a=[];for(let n of r)await sr.tracer.trace("quotas.incrementMany.fn",async o=>{o.addTags({actionName:n.name,actionType:n.type,actionChange:n.change});let s=n.opts?.fn;s&&a.push(await s())});return await ir(r.map(n=>({usageChange:n.change,name:n.name,type:n.type,opts:{dryRun:!1,valueFn:n.opts?.valueFn,suppressErrorLog:n.opts?.suppressErrorLog,id:n.opts?.id}}))),a[0]}),rt=(e,t,r={})=>ir({usageChange:-1,name:e,type:t,opts:r}),ma=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})))},As=async(e,t,r)=>ke.setUsage(r,e,t),Ex=(e,t,r)=>{if(e==H.QuotaUsageType.STATIC){let a=r.usageQuota.triggers;return a?a[t]||{}:{}}else{let a=ke.utils.getCurrentMonthString(),n=r.monthly[a].triggers;return n?n[t]||{}:{}}},Rx=async(e,t,r,a)=>{try{await De.locks.doWithLock({type:H.LockType.TRY_ONCE,name:H.LockName.TRIGGER_QUOTA,resource:e,ttl:1e4},async()=>{let n={percentage:r,name:t.name};a&&(n.resetDate=a),await ft.triggerQuota(n)})}catch(n){De.logging.logAlert("Error triggering quota",n)}},_x=async(e,t,r,a)=>{let n=await Tt(),o=e===H.QuotaUsageType.MONTHLY?n.quotaReset:void 0,s=await Ex(e,t,n),i=a.triggers,p=r/a.value*100;p>100&&(p=100);for(let[m,f]of i.entries())if(p>=f&&a.value!==Ze.UNLIMITED){if(!s[f]){s[f]=new Date().toISOString();let g=i[m+1]||100;(!(p>=g)||p===f)&&await Rx(t,a,p,o)}}else s[f]=void 0;return s},ir=async e=>{await sr.tracer.trace("quotas.updateUsage",async t=>{let r=De.tenancy.getTenantId(),a=Array.isArray(e)?e:[e];t.addTags({numActions:a.length,tenantId:r});let n,o,s=[],i={},p={},m={},f={};for(let g of a)await sr.tracer.trace("quotas.updateUsage.action",async S=>{S.addTags({actionName:g.name,actionType:g.type,actionUsageChange:g.usageChange});try{n=De.context.getAppId()}catch{}if(H.APP_QUOTA_NAMES.includes(g.name)&&!n)throw new Error("App context required for quota update");try{o=await vf(H.QuotaType.USAGE,g.name,g.type),s.push(o);let{total:_,app:R,breakdown:E}=await ke.getCurrentUsageValues(g.type,g.name,g.opts?.id);_+=g.usageChange,R!=null&&(R+=g.usageChange),E!=null&&(E+=g.usageChange);let U={};if(g.opts?.dryRun||(U=await _x(g.type,g.name,_,o),f={...f,[g.name]:U}),o.value!==Ze.UNLIMITED&&_>o.value&&g.usageChange>0)throw new De.UsageLimitError(`Licensed ${o.name} of ${o.value} has been exceeded`,o.name);if(_=Math.max(0,_),R&&(R=Math.max(0,R)),E&&(E=Math.max(0,E),m={...m,[g.name]:E}),!g.opts?.dryRun){let Oe=g.opts?.valueFn;Oe&&(_=await Oe(),R=_),i={...i,[g.name]:_},p={...p,[g.name]:R}}}catch(_){throw g.opts?.suppressErrorLog||console.error(`Error updating usage quotas for ${g.name}`,_),_}});let h=a.filter(g=>!g.opts?.dryRun).map(g=>({name:g.name,type:g.type,values:{total:i[g.name],app:p[g.name],breakdown:m[g.name],triggers:f[g.name]},opts:{...g.opts,tenantId:r}}));h.length>0&&await ke.setAllUsage(h)})},vf=async(e,t,r)=>{let a=await Pe.getCachedLicense();if(!a){let n=De.tenancy.getTenantId();throw new Error("License not found for tenant id "+n)}if(r&&(0,H.isStaticQuota)(e,r,t))return a.quotas[e][r][t];if(r&&(0,H.isMonthlyQuota)(e,r,t))return a.quotas[e][r][t];if((0,H.isConstantQuota)(e,t))return a.quotas[e][t];throw new Error("Invalid quota type")},xx=async(e,t)=>{try{return await ir({usageChange:1,name:e,type:t,opts:{dryRun:!0}}),!1}catch(r){if(r.code===H.ErrorCode.USAGE_LIMIT_EXCEEDED)return!0;throw r}};var Lx=async e=>Ae(An.MonthlyQuotaName.ACTIONS,An.QuotaUsageType.MONTHLY,{fn:e});var ur=require("@budibase/types"),Ef=require("@budibase/backend-core"),Rf=async()=>{let e=await Ef.db.getAllApps({dev:!0});return e?e.length:0},Ox=async(e,{appId:t}={})=>Ae(ur.StaticQuotaName.APPS,ur.QuotaUsageType.STATIC,{fn:e,valueFn:Rf,id:t}),Cx=async({appId:e}={})=>rt(ur.StaticQuotaName.APPS,ur.QuotaUsageType.STATIC,{valueFn:Rf,id:e});var We=require("@budibase/types"),Px=async(e,{tableId:t}={})=>Ae(We.StaticQuotaName.ROWS,We.QuotaUsageType.STATIC,{fn:e,id:t}),Ux=async({tableId:e}={})=>rt(We.StaticQuotaName.ROWS,We.QuotaUsageType.STATIC,{id:e}),qx=async(e,t,{tableId:r}={})=>Pt({change:e,name:We.StaticQuotaName.ROWS,type:We.QuotaUsageType.STATIC,opts:{fn:t,id:r}}),Dx=async(e,{tableId:t}={})=>ma({change:e,name:We.StaticQuotaName.ROWS,type:We.QuotaUsageType.STATIC,opts:{id:t}});var bn=require("@budibase/types"),Nx=async(e,{automationId:t}={})=>Ae(bn.MonthlyQuotaName.AUTOMATIONS,bn.QuotaUsageType.MONTHLY,{fn:e,id:t});var pr=require("@budibase/types"),bs=async e=>Ae(pr.StaticQuotaName.USER_GROUPS,pr.QuotaUsageType.STATIC,{fn:e}),Is=async()=>rt(pr.StaticQuotaName.USER_GROUPS,pr.QuotaUsageType.STATIC);var yt=require("@budibase/types"),Ss=async e=>Ae(yt.StaticQuotaName.PLUGINS,yt.QuotaUsageType.STATIC,{fn:e}),ws=async()=>rt(yt.StaticQuotaName.PLUGINS,yt.QuotaUsageType.STATIC),Ts=async e=>As(yt.StaticQuotaName.PLUGINS,yt.QuotaUsageType.STATIC,e);var $e=require("@budibase/types"),ga=require("@budibase/backend-core");var In=async(e,t,r)=>{let a=[{change:e,name:$e.StaticQuotaName.USERS,type:$e.QuotaUsageType.STATIC,opts:{fn:r,valueFn:ga.users.getUserCount}}];t>0&&a.push({change:t,name:$e.StaticQuotaName.CREATORS,type:$e.QuotaUsageType.STATIC,opts:{valueFn:ga.users.getCreatorCount}});let n=await Pt(a);return await Wt(),n},cr=async(e,t)=>{let r=[{change:e,name:$e.StaticQuotaName.USERS,type:$e.QuotaUsageType.STATIC,opts:{valueFn:ga.users.getUserCount}}];t>0&&r.push({change:t,name:$e.StaticQuotaName.CREATORS,type:$e.QuotaUsageType.STATIC,opts:{valueFn:ga.users.getCreatorCount}}),await ma(r),await Wt()};var Sn=require("@budibase/types"),wn=async e=>Pt({change:e,name:Sn.MonthlyQuotaName.BUDIBASE_AI_CREDITS,type:Sn.QuotaUsageType.MONTHLY});var at={};w(at,{addAppBuilder:()=>Fx,db:()=>Ve,removeAppBuilder:()=>Qx});var ya=require("@budibase/backend-core");var j={};w(j,{addAppBuilder:()=>xs,addUsers:()=>Es,adjustGroupCreatorsQuotas:()=>kx,cleanupApp:()=>Gx,enrichUserRolesFromGroups:()=>Mx,fetch:()=>ha,get:()=>Ut,getBulk:()=>Uf,getGroupBuilderAppIds:()=>Pf,getGroupRoleId:()=>Bx,remove:()=>vs,removeAppBuilder:()=>Ls,removeUsers:()=>Rs,save:()=>lr,updateGroupApps:()=>_s});var x=require("@budibase/backend-core");var _f=require("@budibase/backend-core"),Tn=class extends _f.HTTPError{constructor(t){super(`Group name "${t}" is unavailable`,409)}};async function Of(e,t){try{let r=[];for(let i of e)if(i.roles){let p=i.roles[x.db.getProdAppID(t)];p&&r.push(p)}let a=await Promise.all(r.map(async i=>({[i]:await x.roles.roleToNumber(i)}))),n,o,s={};a.forEach(i=>{let[p,m]=Object.entries(i)[0];s[p]={roleId:p,roleNum:m}});for(let{roleId:i,roleNum:p}of Object.values(s))(o===void 0||p>o)&&(o=p,n=i);return n}catch(r){throw x.logging.logAlert(`Error finding higest role for ${e.length} on app ${t}`,r),r}}async function Cf(e,t){return t?t=t.filter(r=>e.includes(r._id)):t=await M.getBulk(e,{enriched:!1}),t}async function Pf(e,t){if(!e.userGroups)return[];let r=await Cf(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 Bx(e,t,r){if(!e.userGroups)return null;let a=await Cf(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 Of(a,t))}async function Mx(e){if(!e||!e.userGroups)return e;let t=await Uf(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 Of(t,n);o&&(e.roles[n]=o)});let a=await Pf(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 Ut(e){return await M.get(e)}async function Uf(e,t={enriched:!0}){return await M.getBulk(e,t)}async function xf(e){if(await M.getByName(e))throw new Tn(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 xf(e.name),t.push(x.events.group.created(e));else{let o=await M.get(e._id);if(o.name!==e.name&&await xf(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 bs(n);{let o=await n();if(a>0)await In(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),m=(await Promise.all(i.map(S=>s.get(S._id)))).map(S=>({...S,userGroups:S.userGroups.filter(O=>O!==e)})),h=(await x.userUtils.creatorsInList(m)).filter(S=>S).length,g=i.length-h;g&&(n=()=>cr(0,g))}let o=await M.destroy(e,t);return await x.events.group.deleted(r),await Is(),await n(),o}async function Es(e,t){let r=await M.get(e),a=await x.users.bulkGetGlobalUsersById(t),n=[];for(let p of a)p.userGroups||(p.userGroups=[]),p.userGroups.includes(e)||n.push(p);if(!n.length)return n;let o=n.map(p=>({...p,userGroups:[...p?.userGroups||[],e]}));if(await x.users.bulkUpdateGlobalUsers(o),Object.values(r.roles||{}).includes("CREATOR")){let m=(await x.userUtils.creatorsInList(n)).filter(h=>h).length,f=n.length-m;f&&await In(0,f)}let i=[];for(let p of t)i.push(x.cache.user.invalidateUser(p));return await Promise.all(i),await x.events.group.usersAdded(o.length,r),o}async function Rs(e,t){let r=await M.get(e),a=await x.users.bulkGetGlobalUsersById(t),n=[];for(let i of a){if(!i.userGroups||!i.userGroups.includes(e))continue;let p=i.userGroups.indexOf(e);i.userGroups.splice(p,1),n.push(i)}if(await x.users.bulkUpdateGlobalUsers(n),Object.values(r.roles||{}).includes("CREATOR")){let p=(await x.userUtils.creatorsInList(n)).filter(f=>f).length,m=n.length-p;m&&await cr(0,m)}let s=[];for(let i of t)s.push(x.cache.user.invalidateUser(i));return await Promise.all(s),n.length&&await x.events.group.usersDeleted(n.length,r),n}async function _s(e,t){let r=await Ut(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 xs(e,t){if(!await Ct())throw new Error("Feature not enabled, please check license");let r=x.db.getProdAppID(t),a=await Ut(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 Ut(e);a.builder?.apps.includes(t)&&(a.builder.apps=a.builder.apps.filter(n=>n!==r),await lr(a))}async function kx(){if(!await ms()){let e=x.tenancy.getGlobalDB(),r=(await ha()||[]).filter(a=>Object.values(a?.roles||{}).includes("CREATOR"));for(let a of r){let n=await M.getGroupUsers(a._id),s=(await Promise.all(n.map(f=>e.get(f._id)))).map(f=>({...f,userGroups:f.userGroups.filter(h=>h!==a._id)})),p=(await x.userUtils.creatorsInList(s)).filter(f=>f).length,m=n.length-p;await M.save({...a,roles:{}}),m&&await cr(0,m)}}}ya.users.UserDB.init(Ke,j,qe);var Ve=ya.users.UserDB;async function Fx(e,t){if(!await Ct())throw new Error("Feature not enabled, please check license");await ya.users.addAppBuilder(e,t)}async function Qx(e,t){if(!await Ct())throw new Error("Feature not enabled, please check license");await ya.users.removeAppBuilder(e,t)}var Rn={};w(Rn,{logs:()=>Ns});var Ns={};w(Ns,{logSearch:()=>Jx,oldestLogDate:()=>kf,storeLog:()=>Xx});var Gf=require("@budibase/types"),En=require("@budibase/backend-core");var vn=require("@budibase/types");var Z=require("@budibase/backend-core");var qf=require("@budibase/backend-core");async function Df(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||qf.logging.logWarn(`Failed to backoff: ${t}`,r),o}var{SEPARATOR:nt,UNICODE_MAX:jx,DocumentType:Nf,AutomationViewMode:Os,ViewName:Wx,getQueryIndex:$x}=Z.db,Kx=new Date(0).toISOString(),Vx=100,Cs=async()=>Wa(vn.ConstantQuotaName.AUTOMATION_LOG_RETENTION_DAYS);function Bf(e,t,{status:r,automationId:a}={},n={}){let o=a?`${a}${nt}`:"",s=r?`${r}${nt}`:"",i;return r&&a?i=`${Os.ALL}${nt}${s}${o}`:r?i=`${Os.STATUS}${nt}${s}`:a?i=`${Os.AUTOMATION}${nt}${o}`:i=`${Nf.AUTOMATION_LOG}${nt}`,{...n,descending:!0,startkey:`${i}${t}${jx}`,endkey:`${i}${e}`}}function Yx(e,t,r){return`${Nf.AUTOMATION_LOG}${nt}${e}${nt}${r}${nt}${t}`}async function Ps(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=Bf(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 Us(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=Bf(e,t,o,{include_docs:!0,limit:9+1});r?.page&&(s.startkey=r.page),n=await a.query($x(Wx.AUTOMATION_LOGS),s)}catch(o){if(o!=null&&(o.name==="not_found"||o.error==="not_found"))return await ip(),Us(e,t,r);throw o}return Lr(n,{paginate:!0,pageSize:9})}async function Mf(e,t){let r=Z.context.getProdAppDB(),a=e._id,n=e.name,o=new Date().toISOString(),s=Yx(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 qs(e,{clearing:t}={clearing:!1}){let r=Z.context.getProdAppDB();await Df(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 Hx(){let e=await Cs();try{return await Ps(Kx,e,{docs:!1,paginate:!1,limit:Vx})}catch{return{data:[],hasNextPage:!1}}}async function Ds(){let e=Z.context.getProdAppDB();try{let t=await Hx();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 qs(a,{clearing:!0})}catch(t){Z.logging.logAlert(`Failed to cleanup automation log history - Database "${e.name}"`,t)}}var kf=Cs;async function zx(e,t,r,a){let n,o=new Date().toISOString(),s=await kf();return(!e||e<s)&&(e=s),r||t?n=await Us(e,o,{automationId:r,status:t,page:a}):n=await Ps(e,o,{status:t,page:a,docs:!0,paginate:!0}),n}async function Jx(e){return await Ds(),await zx(e.startDate,e.status,e.automationId,e.page)}async function Xx(e,t){if(!En.db.isProdAppID(En.context.getAppId()))return;let r=await Mf(e,t);t.status===Gf.AutomationStatus.ERROR&&await qs([r]),await Ds()}var _n={};w(_n,{checkPluginQuotas:()=>tL,deletePlugin:()=>eL,storePlugin:()=>Zx});var Wf=require("@budibase/types"),z=require("@budibase/backend-core");var Ff=P(require("fs")),Qf=require("path");function jf(e,t){return Ff.default.readFileSync((0,Qf.join)(e,t),"utf8")}async function Zx(metadata,directory,source){let db=z.tenancy.getGlobalDB(),version=metadata.package.version,name=metadata.package.name,description=metadata.package.description,hash=metadata.schema.hash,bucketPath=z.objectStore.getPluginS3Dir(name),files=await z.objectStore.uploadDirectory(z.objectStore.ObjectStoreBuckets.PLUGINS,directory,bucketPath),jsFile=files.find(e=>e.name.endsWith(".js")),iconFile=files.find(e=>e.name.endsWith(".svg"));if(!jsFile)throw new Error("Plugin missing .js file.");if(metadata.schema.type===Wf.PluginType.DATASOURCE){let js=jf(directory,jsFile.name);try{eval(js)}catch(e){let t=e?.message?e.message:JSON.stringify(e);throw new Error(`JS invalid: ${t}`)}}let iconFileName=iconFile?iconFile.name:null,pluginId=z.db.generatePluginID(name),rev;try{rev=(await db.get(pluginId))._rev}catch(e){rev=void 0}let doc={_id:pluginId,_rev:rev,...metadata,name,version,hash,description,source};iconFileName&&(doc.iconFileName=iconFileName),source&&(doc={...doc,source});let write=async()=>{let e=await db.put(doc);return await z.events.plugin.imported(doc),{...doc,_rev:e.rev}};return rev?await write():await Ss(write)}async function eL(e){let t=z.tenancy.getGlobalDB();try{let r=await t.get(e),a=z.objectStore.getPluginS3Dir(r.name);await z.objectStore.deleteFolder(z.objectStore.ObjectStoreBuckets.PLUGINS,a),await t.remove(e,r._rev),await z.events.plugin.deleted(r),await ws()}catch(r){let a=r?.message?r?.message:r;throw new Error(`Failed to delete plugin: ${a}`)}}async function tL(){let e=z.tenancy.getGlobalDB();try{let r=(await e.allDocs(z.db.getPluginParams())).rows.length;console.log(`Syncing plugin count: ${r}`),await Ts(r)}catch(t){z.logging.logAlert("Unable to retrieve plugins for quota check",t)}}var Ye={};w(Ye,{fetch:()=>aL,fetchValues:()=>nL,isEncryptionKeyAvailable:()=>rL,isValid:()=>Vf,remove:()=>sL,update:()=>oL});var Aa=require("@budibase/types"),$f=require("@budibase/backend-core");function rL(){return!!$f.env.ENCRYPTION_KEY}async function aL(){let e=await Rt.get();return Object.keys(e.variables)}async function nL(e){let r=(await Rt.get()).variables,a={};for(let[n,o]of Object.entries(r))switch(e){case Aa.AppEnvironment.DEVELOPMENT:a[n]=o.development;break;case Aa.AppEnvironment.PRODUCTION:default:a[n]=o.production;break}return a}async function Kf(e){if(!(await je.cache.getCachedLicense()).features.includes(Aa.Feature.ENVIRONMENT_VARIABLES))throw new Error("User does not have access to environment variables feature.");let r=await Rt.get();r.variables=e(r.variables),await Rt.update(r)}async function oL(e,t){if(Vf(e))await Kf(a=>(a[e]=t,a));else throw new Error("Variable name has characters that are not allowed")}async function sL(e){await Kf(t=>(delete t[e],t))}function Vf(e){return/^[a-zA-Z0-9-_]+$/.test(e)}var At={};w(At,{definitions:()=>yL,download:()=>hL,fetch:()=>gL,write:()=>fL});var Ln=require("@budibase/types");var K=require("@budibase/backend-core"),Ne=require("@budibase/types");var Yf=require("memorystream"),Hf=new K.sql.Sql(Ne.SqlClient.SQL_LITE);async function iL(e,t,r){let a={operation:Ne.Operation.READ,table:jt.searchTable(),tables:{},paginate:{limit:r||9,page:t},filters:e,resource:{fields:[]},sort:{timestamp:{direction:Ne.SortOrder.DESCENDING,type:Ne.SortType.STRING}}},n=Hf._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 uL(e){return`${K.DocumentType.AUDIT_LOG}${K.SEPARATOR}${e}${K.SEPARATOR}${K.utils.newid()}`}async function zf(e){e._id||(e._id=uL(e.timestamp)),e.type||(e.type=Ne.AUDIT_LOG_TYPE);try{let r=await K.context.getAuditLogsDB().put(e);return{...e,_rev:r.rev}}catch(t){K.logging.logAlert("Failed to write audit log",t)}}async function Bs(e,t,r){t||(t=1);let a=K.context.getAuditLogsDB();try{let n=9+1,o=await iL(e,t,n),s=jt.searchTable(),i=Hf.convertJsonStringColumns(s,await a.sql(o.sql,o.bindings)),p;i.length>n&&(p=i.pop());let m={rows:i,hasNextPage:!!p};return m.hasNextPage&&(m.bookmark=t+1),m}catch(n){if(n.status===404&&!r?.isRetry)return await pL(),await Ju(),await Bs(e,t,{isRetry:!0});throw n}}async function pL(){let e=K.context.getAuditLogsDB(),r=(await e.allDocs(K.db.getDocParams(K.DocumentType.AUDIT_LOG,null,{include_docs:!0}))).rows.map(a=>a.doc).filter(a=>a&&!a.type).map(a=>({...a,type:Ne.AUDIT_LOG_TYPE}));await e.bulkDocs(r)}function Jf(e){let t=K.context.getAuditLogsDB(),r=new Yf,a=t.dump(r,{filter:o=>{let s=o;if(!s._id?.startsWith(K.DocumentType.AUDIT_LOG))return!1;let i=!0,p=(m,f)=>{!m||m.length===0||(i=!!(i&&f&&m.includes(f)))};if(p(e.userIds,s.userId),p(e.appIds,s.appId),p(e.events,s.event),(e.startDate||e.endDate)&&(i=i&&s.timestamp>=e.startDate&&s.timestamp<=e.endDate),e.fullSearch){let m=JSON.stringify(o);i=i&&m.includes(e.fullSearch)}return i}}),n=new Yf;return r.on("data",o=>{let s=JSON.parse(Buffer.from(o).toString());if(Array.isArray(s.docs)){let i="";for(let p of s.docs)i+=JSON.stringify(p)+`
|
|
38
|
-
`;n.write(i)}}),r.on("end",()=>{n.end()}),{promise:a,stream:n}}var le=require("@budibase/backend-core");var xn=require("@budibase/types"),ba=require("@budibase/string-templates"),Ia=require("@budibase/backend-core"),lL=Ia.constants.MIN_VALID_DATE.toISOString(),dL=Ia.constants.MAX_VALID_DATE.toISOString();function Ms(e){return(e.startDate||e.endDate)&&(e.startDate=e.startDate||lL,e.endDate=e.endDate||dL),e}async function Xf(e){Array.isArray(e.appIds)&&(e.appIds=e.appIds.map(a=>Ia.db.getProdAppID(a)));let t={};function r(a,n){n?.length&&(t.oneOf={...t.oneOf,[a]:n})}return r("userId",e.userIds),r("appId",e.appIds),r("event",e.events),e.fullSearch&&(t.fuzzyOr=!0,t.fuzzy={name:e.fullSearch,fallback:e.fullSearch}),(e.startDate||e.endDate)&&(e=Ms(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:xn.AuditLogResourceStatus.DELETED};switch(t){case"app":a.name=r?.appName;break;case"user":a.email=r?.email;break}return a}function ks(e){let t=(0,ba.findHBSBlocks)(e);for(let r of t){let a=` "${r}"`;e=e.replace(e.includes(a)?a:` ${r}`,""),e=(0,ba.processStringSync)(e,{})}return e}function Zf(e,t){let r=xn.AuditedEventFriendlyName[e];if(!r)throw new Error("No friendly name found.");let a=(0,ba.processStringSync)(r,t);return a.includes('""')&&(a=ks(r)),a}async function fL(e,t,r){if(!await hn()||!le.utils.isAudited(e))return;let a=Zf(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=le.db.getProdAppID(r.appId);let i=await le.cache.app.getAppMetadata(r.appId);"name"in i&&(s.appName=i.name)}if(r?.userId){let i=await le.users.getById(r?.userId);s.email=i.email}}catch(i){le.logging.logAlert("Failed to retrieve fallback information for audit log",i)}return o.fallback=s,await zf(o)}async function mL(e){let t=e.map(i=>i.userId),a=e.filter(i=>i.appId).map(i=>le.db.getDevAppID(i.appId)),n=await le.users.bulkGetGlobalUsersById([...new Set(t)],{cleanup:!0}),o=await le.db.getAppsByIDs([...new Set(a)]),s=[];for(let i of e){let p=n.find(h=>h?._id===i.userId),m=o.find(h=>le.db.isSameAppID(h?.appId,i.appId)),f={event:i.event,timestamp:i.timestamp,name:i.name,metadata:i.metadata,user:p||Gs(i.userId,"user",i.fallback)};i.appId&&(f.app=m||Gs(i.appId,"app",i.fallback)),s.push(f)}return s}async function gL(e){if(!await hn())throw new Error("Audit logs not available - license required.");let t=await Xf(e);if(typeof e.bookmark=="string")throw new Error("String based bookmark not supported.");let r=await Bs(t,e.bookmark);return{hasNextPage:r.hasNextPage,bookmark:r.bookmark,data:await mL(r.rows)}}function hL(e){return e=Ms(e),Jf(e)}function yL(){let e=Object.entries(Ln.AuditedEventFriendlyName).filter(r=>r[1]!=null),t={};for(let r of e)t[r[0]]=ks(r[1]);return t}var On={};w(On,{applications:()=>$s,roles:()=>Qs,users:()=>Fs});var Fs={};w(Fs,{roleCheck:()=>bL});function AL(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 bL(e,t){return await tt()||AL(e,t),e}var Qs={};w(Qs,{assign:()=>IL,unAssign:()=>SL});var Sa=require("@budibase/backend-core");async function IL(e,t){if(!await tt())throw new Error("Unable to assign roles - license required.");let r=await Ve.bulkGet(e);for(let a of r){if(t.role&&t.role.roleId){let n=Sa.db.getProdAppID(t.role.appId);a.roles[n]=t.role.roleId}if(t.appBuilder){let n=Sa.db.getProdAppID(t.appBuilder.appId),o=a.builder?.apps||[];a.builder={apps:o.concat([n])}}t.builder&&(a.builder={global:!0}),t.admin&&(a.admin={global:!0}),a.roles}await Ve.bulkUpdate(r)}async function SL(e,t){if(!await tt())throw new Error("Unable to un-assign roles - license required.");let r=await Ve.bulkGet(e);for(let a of r){if(t.role){let n=Sa.db.getProdAppID(t.role?.appId);a.roles[n]===t.role.roleId&&delete a.roles[n]}if(t.appBuilder&&a.builder?.apps){let n=Sa.db.getProdAppID(t.appBuilder.appId);a.builder.apps=a.builder.apps.filter(o=>o!==n)}t.builder&&a.builder&&delete a.builder,t.admin&&a.admin&&delete a.admin}}var $s={};w($s,{buildExportFn:()=>TL,buildImportFn:()=>wL});var Ws=require("@budibase/backend-core");function wL(e){return async(t,r)=>{await tt()||t.throw(403,"Endpoint unavailable, license required."),t.request.files?.appExport||t.throw(400,"Must provide app export file for import."),await Ws.context.doInAppContext(t.params.appId,async()=>{await e(t),t.body=void 0,t.status=204,await r()})}}function TL(e){return async(t,r)=>{await tt()||t.throw(403,"Endpoint unavailable, license required.");let{encryptPassword:a,excludeRows:n}=t.request.body;await Ws.context.doInAppContext(t.params.appId,async()=>{t.request.body={encryptPassword:a,excludeRows:n},t.query.appId=t.params.appId,await e(t),await r()})}}var He=require("@budibase/backend-core"),ue=require("@budibase/types");var Ks=require("@budibase/backend-core"),em;function tm(){em=new Ks.queue.BudibaseQueue(Ks.queue.JobQueue.APP_BACKUP,{maxStalledCount:3,jobOptions:{attempts:3,removeOnFail:!0,removeOnComplete:!0}})}function qt(){return em}var rm=require("path"),am=P(require("fs"));async function Vs(e,t={}){return ve.storeAppBackupMetadata(e,t)}function nm(e){let t=new Date().toISOString();switch(e){case ue.AppBackupStatus.COMPLETE:case ue.AppBackupStatus.FAILED:return{timestamp:t,finishedAt:t};case ue.AppBackupStatus.STARTED:return{timestamp:t,startedAt:t};case ue.AppBackupStatus.PENDING:return{timestamp:t,createdAt:t}}}async function vL(e,t,r,a){let n=await Cn(e);return await ve.storeAppBackupMetadata({...n,...nm(t),contents:r,status:t,type:ue.AppBackupType.BACKUP},{filename:a,docId:e})}async function EL(e,t,r){let a=await Cn(e);return await ve.storeAppBackupMetadata({...a,...nm(r),status:r,type:ue.AppBackupType.RESTORE,trigger:ue.AppBackupTrigger.MANUAL},{docId:e,docRev:t})}async function Cn(e){return ve.getAppBackupMetadata(e)}async function RL(e,t){return ve.updateAppBackupMetadata(e,t)}async function _L(e){let t=await ve.getAppBackupMetadata(e);return t.filename&&await He.objectStore.deleteFile(He.objectStore.ObjectStoreBuckets.BACKUPS,t.filename),ve.deleteAppBackupMetadata(e)}async function xL(e,t){return ve.fetchAppBackups(e,t)}async function om(e){let t=await ve.getAppBackupMetadata(e);if(!t.filename)throw new Error("Backup incomplete - cannot download.");let r=await He.objectStore.getReadStream(He.objectStore.ObjectStoreBuckets.BACKUPS,t.filename);return{metadata:t,stream:r}}async function LL(e){let{stream:t}=await om(e),r=(0,rm.join)(He.objectStore.budibaseTempDir(),He.utils.newid()),a=am.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 OL(e,t,r={}){let a;try{a=await Vs({appId:e,trigger:t,timestamp:new Date().toISOString(),status:ue.AppBackupStatus.PENDING,type:ue.AppBackupType.BACKUP,...r})}catch(n){if(n.status===409)return;throw n}return await qt().add({docId:a.id,docRev:a.rev,appId:e,export:{trigger:t,...r}}),await He.events.backup.appBackupTriggered(e,a.id,ue.AppBackupType.BACKUP,t,r?.name),a.id}async function CL(e,t,r,a){let n=await Cn(t),o;try{o=await Vs({appId:e,timestamp:new Date().toISOString(),status:ue.AppBackupStatus.PENDING,type:ue.AppBackupType.RESTORE,createdBy:a})}catch(s){if(s?.status===409)return;throw s}return await qt().add({appId:e,docId:o.id,docRev:o.rev,import:{nameForBackup:r,backupId:t,createdBy:a}}),{restoreId:o.id,metadata:n}}var PL={isEnabled:ds,triggerAppRestore:ye(CL),triggerAppBackup:ye(OL),getBackupDownloadStream:ye(om),downloadAppBackup:ye(LL),fetchAppBackups:ye(xL),storeAppBackupMetadata:ye(Vs),updateBackupStatus:ye(vL),updateRestoreStatus:ye(EL),getAppBackup:ye(Cn),updateAppBackup:ye(RL),deleteAppBackup:ye(_L)},ot=PL;var Hs={};w(Hs,{init:()=>Ys});var J=require("@budibase/backend-core");var Be=require("@budibase/types");var dr=P(require("fs"));async function Ys(e){qt().process(async t=>{let r=t.data;try{if(r.export)return DL(t,e);if(r.import)return qL(t,e)}catch(a){J.logging.logAlert(`Failed to perform backup for app ID: ${r.appId}`,a)}})}async function UL(e){await J.db.getDB(e,{skip_setup:!0}).destroy()}async function sm(e,t,r,a){let n=J.db.getDevAppID(r),o=J.db.getProdAppID(r),s=new Date().toISOString(),i=async(p,m)=>{a?.doc?await ot.updateBackupStatus(a.doc.id,p,m?.contents,m?.filename):await ot.storeAppBackupMetadata({appId:o,timestamp:s,trigger:e,status:p,name:a?.name,type:Be.AppBackupType.BACKUP,contents:m?.contents,createdBy:a?.createdBy},{filename:m?.filename})};try{let p=await a.processing.exportAppFn(n,{tar:!0}),m=await a.processing.statsFn(n),f=`${o}/backup-${s}.tar.gz`,h=J.objectStore.ObjectStoreBuckets.BACKUPS,g=dr.default.createReadStream(p);await J.objectStore.streamUpload({bucket:h,filename:f,stream:g,extra:{type:"application/gzip",metadata:{name:a?.name,trigger:e,timestamp:s,appId:o}}}),await i(Be.AppBackupStatus.COMPLETE,{filename:f,contents:m}),dr.default.existsSync(p)&&dr.default.rmSync(p)}catch(p){J.logging.logAlert("App backup error",p),await i(Be.AppBackupStatus.FAILED)}}async function qL(e,t){let r=e.data,a=r.appId,n=r.import.backupId,o=r.import.nameForBackup,s=r.import.createdBy,i=J.tenancy.getTenantIDFromAppID(a);return J.tenancy.doInTenant(i,async()=>{let p=J.db.getDevAppID(a),{rev:m}=await ot.updateRestoreStatus(r.docId,r.docRev,Be.AppBackupStatus.STARTED);await sm(Be.AppBackupTrigger.RESTORING,i,a,{processing:t,createdBy:s,name:o});let f=await ot.downloadAppBackup(n);await UL(p);let h=Be.AppBackupStatus.COMPLETE;try{await t.importAppFn(p,J.db.getDB(p),{file:{type:"application/gzip",path:f},key:f})}catch(g){J.logging.logAlert("App restore error",g),h=Be.AppBackupStatus.FAILED}await ot.updateRestoreStatus(r.docId,m,h),dr.default.existsSync(f)&&dr.default.rmSync(f,{force:!0})})}async function DL(e,t){let r=e.data,a=r.appId,n=r.export.trigger,o=r.export.name,s=J.tenancy.getTenantIDFromAppID(a);await J.tenancy.doInTenant(s,async()=>{try{let{rev:i}=await ot.updateBackupStatus(r.docId,Be.AppBackupStatus.STARTED);return sm(n,s,a,{processing:t,doc:{id:r.docId,rev:i},name:o})}catch(i){J.logging.logAlert("App backup error",i)}})}var NL=async e=>{tm(),await Ys(e.processing)},Re={...ot,processing:Hs,init:NL,getBackupQueue:qt};var im=async e=>{e.backups&&await Re.init(e.backups)};var fe={};w(fe,{create:()=>LM,find:()=>xM,get:()=>_M,remove:()=>CM,update:()=>OM});var LA=P(ji()),st=require("@budibase/backend-core");var OA=require("@budibase/types");async function _M(e){let t=st.tenancy.getGlobalDB(),r=new st.db.QueryBuilder(t.name,OA.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 xM(e){return await st.users.getById(e)}async function LM(e){let t=await Ve.getUserByEmail(e.email);if(t){if(t.scimInfo?.isSync)throw new st.HTTPError("User is already synched",409);e={...t,scimInfo:(0,LA.default)(t.scimInfo,e.scimInfo),password:void 0,firstName:e.firstName,lastName:e.lastName,updatedAt:e.updatedAt}}return await Ve.save(e,{requirePassword:!1})}async function OM(e,t){return await Ve.save(e,{requirePassword:!1,allowChangingEmail:t?.allowChangingEmail})}async function CM(e){return await Ve.destroy(e)}var Ar={};w(Ar,{create:()=>PM});var CA=P(ji());var PA=require("@budibase/backend-core");async function PM(e){let t=await yo(e.name),r;if(!t)r=(await j.save(e)).id;else{if(t.scimInfo?.isSync)throw new PA.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,CA.default)(t.scimInfo,e.scimInfo),await j.save(t)}return await j.get(r)}var Nt={};w(Nt,{logRequest:()=>UM,logResponse:()=>qM});var Wi=require("@budibase/backend-core");async function UM(e){Wi.logging.logWarn("SCIM request log",e)}async function qM(e){Wi.logging.logWarn("SCIM response error",e)}var zi={};w(zi,{doInScimContext:()=>Ki,feature:()=>W,internalGroupOnly:()=>Kn,licenseAuth:()=>DA,licensing:()=>UA,requireSCIM:()=>Vi,scimGroupOnly:()=>Ea,scimUserOnly:()=>va});var bt=require("@budibase/backend-core");var Wn=require("@budibase/types"),DM=(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=bo,r();t.user.license=await je.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 Ke.usageLimitIsExceeded(Wn.StaticQuotaName.USERS,Wn.QuotaUsageType.STATIC)}return r()},UA=DM;var W={};w(W,{requireFeature:()=>NM,requireFeatures:()=>BM});var NM=e=>async(t,r)=>{await gn(e),await r()},BM=(...e)=>async(t,r)=>{await ls(e),await r()};var $n=require("@budibase/backend-core");var Ki=async(e,t)=>($n.env.DISABLE_SCIM_CALLS||await Nt.logRequest({...e.request.toJSON(),body:e.request.body}),await $n.context.doInScimContext(async()=>{let r=await t();return await Nt.logResponse({...e.response.toJSON(),body:e.response.body}),r}));var Vi=async(e,t)=>{await gs(),await t()};var qA=require("@budibase/backend-core");var va=e=>Yi(qA.users.getById,e,!0),Ea=e=>Yi(M.get,e,!0),Kn=e=>Yi(M.get,e,!1);function Yi(e,t,r){return async(a,n)=>{let o=a.params[t];return typeof o!="string"&&a.throw(404),!!(await e(o)).scimInfo?.isSync!==r&&a.throw(404),n()}}var Ra=require("@budibase/backend-core");var Hi=require("dd-trace");async function DA(e,t){await Hi.tracer.trace("licenseAuth",async r=>{let a=e.request.headers[Ra.constants.Header.LICENSE_KEY];Array.isArray(a)&&(a=a[0]),r.addTags({licenseKey:a}),a||e.throw(403,"License key not provided");let n=await is(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"),Hi.tracer.setUser({id:"anonymous",tenantId:n.tenantId}),await Ra.context.doInSelfHostTenantUsingCloud(n.tenantId,async()=>{await Ra.context.doInLicenseContext(n,async()=>{await t()})})})}var ou={};w(ou,{appBackups:()=>Sb,auditLogs:()=>cb,environmentVariables:()=>rb,groups:()=>VA,scim:()=>Jb,users:()=>rI});async function NA(e){let t=e.request.body;if(t.name=t.name.trim(),delete t.roles,t._id){let a=await Ut(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 BA(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 Es(t,r)),a&&(o=await Rs(t,a)),e.body={added:n,removed:o}}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 objects, with appId and roleId to add or remove"),e.body=await _s(t,{appsToAdd:r,appsToRemove:a})}async function GA(e){e.body={data:await ha()}}async function kA(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 FA(e){try{e.body=await Ut(e.params.groupId)}catch(t){e.throw(t.status,t)}}async function QA(e){let{pageSize:t=10,bookmark:r,emailSearch:a}=e.request.query,n=e.params.groupId,o={limit:t+1},s=await Qa(n,{...o,emailSearch:a,bookmark:r}),i=a?s[t]?.email:s[t]?._id,p=!!i;e.body={users:s.slice(0,t),bookmark:i,hasNextPage:p}}async function jA(e){let{groupId:t,appId:r}=e.params;await xs(t,r),e.body={message:"Group app builder access updated."}}async function WA(e){let{groupId:t,appId:r}=e.params;await Ls(t,r),e.body={message:"group app builder access removed."}}var $A=P(require("@koa/router")),be=P(require("joi"));var _e=require("@budibase/types"),ze=require("@budibase/backend-core"),KA=new $A.default;function GM(){return ze.auth.joiValidator.body(be.default.object({_id:be.default.string().optional(),_rev:be.default.string().optional(),color:be.default.string().required(),icon:be.default.string().required(),name:be.default.string().trim().required().max(50),role:be.default.string().optional(),users:be.default.array().optional(),apps:be.default.array().optional(),roles:be.default.object().optional(),createdAt:be.default.string().optional(),updatedAt:be.default.string().optional()}).required())}KA.post("/api/global/groups",ze.auth.adminOnly,W.requireFeature(_e.Feature.USER_GROUPS),GM(),NA).get("/api/global/groups",W.requireFeature(_e.Feature.USER_GROUPS),GA).delete("/api/global/groups/:groupId/:rev",W.requireFeature(_e.Feature.USER_GROUPS),ze.auth.adminOnly,Kn("groupId"),kA).get("/api/global/groups/:groupId",W.requireFeature(_e.Feature.USER_GROUPS),ze.auth.builderOrAdmin,FA).get("/api/global/groups/:groupId/users",W.requireFeature(_e.Feature.USER_GROUPS),ze.auth.builderOrAdmin,QA).post("/api/global/groups/:groupId/users",ze.auth.adminOnly,W.requireFeature(_e.Feature.USER_GROUPS),Kn("groupId"),BA).post("/api/global/groups/:groupId/apps",ze.auth.builderOrAdmin,W.requireFeature(_e.Feature.USER_GROUPS),MA).post("/api/global/groups/:groupId/app/:appId/builder",ze.auth.builderOrAdmin,W.requireFeatures(_e.Feature.USER_GROUPS,_e.Feature.APP_BUILDERS),jA).delete("/api/global/groups/:groupId/app/:appId/builder",ze.auth.builderOrAdmin,W.requireFeatures(_e.Feature.USER_GROUPS,_e.Feature.APP_BUILDERS),WA);var VA=KA;var Ji=require("@budibase/types");var Xi=require("@budibase/backend-core");async function YA(e){e.body={encryptionKeyAvailable:Ye.isEncryptionKeyAvailable()}}async function HA(e){e.body={variables:await Ye.fetch()}}async function zA(e){let{name:t,production:r,development:a}=e.request.body;await Ye.update(t,{production:r,development:a});let n=[Ji.AppEnvironment.PRODUCTION];r!==a&&n.push(Ji.AppEnvironment.DEVELOPMENT),await Xi.events.environmentVariable.created(t,n),e.body={message:`Environment variable "${t}" created.`}}async function JA(e){let{production:t,development:r}=e.request.body,a=e.params.varName;await Ye.update(a,{production:t,development:r}),e.body={message:`Environment variable "${a}" updated.`}}async function XA(e){let t=e.params.varName;await Ye.remove(t),await Xi.events.environmentVariable.deleted(t),e.body={message:`Environment variable "${t}" deleted.`}}var Bt=require("@budibase/backend-core"),eb=P(require("@koa/router")),_a=P(require("joi")),tb=new eb.default;function ZA(){return Bt.auth.joiValidator.body(_a.default.object({name:_a.default.string().optional(),production:_a.default.string().required(),development:_a.default.string().required()}))}tb.get("/api/env/variables/status",Bt.auth.builderOrAdmin,YA).get("/api/env/variables",Bt.auth.builderOrAdmin,HA).post("/api/env/variables",Bt.auth.builderOrAdmin,ZA(),zA).patch("/api/env/variables/:varName",Bt.auth.builderOrAdmin,ZA(),JA).delete("/api/env/variables/:varName",Bt.auth.builderOrAdmin,XA);var rb=tb;var Zi=require("@budibase/backend-core");async function ab(e){let t=e.request.body,r=await At.fetch(t);await Zi.events.auditLog.filtered(t),e.body=r}async function nb(e){let t=e.request.body,{stream:r}=At.download(t);await Zi.events.auditLog.downloaded(t),e.attachment(`audit-logs-${Date.now()}.log`),e.body=r}async function ob(e){e.body={events:At.definitions()}}var ib=require("@budibase/types"),Mt=require("@budibase/backend-core"),ub=P(require("@koa/router")),xe=P(require("joi"));function sb(){return Mt.auth.joiValidator.body(xe.default.object({userIds:xe.default.array().items(xe.default.string()).optional(),appIds:xe.default.array().items(xe.default.string()).optional(),events:xe.default.array().items(xe.default.string().valid(...Object.values(ib.Event))).optional(),startDate:xe.default.string().optional().allow(""),endDate:xe.default.string().optional().allow(""),fullSearch:xe.default.string().optional().allow(""),bookmark:xe.default.number()}))}var pb=new ub.default;pb.post("/api/global/auditlogs/search",Mt.auth.adminOnly,sb(),ab).get("/api/global/auditlogs/download",Mt.auth.adminOnly,Mt.middleware.querystringToBody,sb(),nb).get("/api/global/auditlogs/definitions",Mt.auth.adminOnly,ob);var cb=pb;var eu=require("@budibase/types");var lb=require("@budibase/backend-core");async function br(e,t){await Kt.appExists(t)||e.throw(400,`Provided app ID: ${t} - is invalid.`)}async function fb(e){let t=e.params.appId;await br(e,t);let r=e.request.body,a=e.user?._id,n=await Re.triggerAppBackup(t,eu.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 mb(e){let t=e.params.appId;await br(e,t);let r=e.params.backupId,a=e.request.body.name,n=await Re.triggerAppRestore(t,r,a,e.user?._id);n||e.throw(500,"Unable to start restore."),await lb.events.backup.appBackupRestored(n.metadata),e.body={restoredId:n?.restoreId,message:"Restore triggered - process starting."}}async function gb(e){let t=e.params.appId;await br(e,t);let r=e.params.backupId;await Re.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(eu.AppBackupTrigger).includes(r.trigger)||e.throw(400,"Provided trigger is not a valid option.")),e.body=await Re.fetchAppBackups(t,{paginate:!0,...r})}async function yb(e){let t=e.params.appId;await br(e,t);let r=e.params.backupId,a=e.request.body;e.body=await Re.updateAppBackup(r,a.name)}async function Ab(e){let t=e.params.appId;await br(e,t);let r=e.params.backupId,{metadata:a,stream:n}=await Re.getBackupDownloadStream(r);e.attachment(`backup-${a.timestamp}.tar.gz`),e.body=n}var bb=P(require("@koa/router")),Gt=P(require("joi")),Vn=require("@budibase/types"),It=require("@budibase/backend-core"),Ib=new bb.default;function jM(){return It.auth.joiValidator.body(Gt.default.object({trigger:Gt.default.string().valid(...Object.values(Vn.AppBackupTrigger)),type:Gt.default.string().valid(...Object.values(Vn.AppBackupType)),startDate:Gt.default.date(),endDate:Gt.default.date(),page:Gt.default.string()}))}Ib.post("/api/apps/:appId/backups",It.auth.builderOrAdmin,fb).post("/api/apps/:appId/backups/search",It.auth.builderOrAdmin,jM(),hb).get("/api/apps/:appId/backups/:backupId/file",It.auth.builderOrAdmin,Ab).patch("/api/apps/:appId/backups/:backupId",It.auth.builderOrAdmin,yb).delete("/api/apps/:appId/backups/:backupId",It.auth.builderOrAdmin,gb).post("/api/apps/:appId/backups/:backupId/import",It.auth.builderOrAdmin,mb);var Sb=Ib;var zb=P(require("@koa/router"));var Yn=require("scim-patch");var Tb=require("@budibase/backend-core");function wb(e,t){let r=e.request.query[t];if(r!==void 0)return+r}var vb=async e=>{let t=wb(e,"pageSize")??20,r=wb(e,"startIndex"),a;e.request.query.filter&&(a=V.user.userFilters(e.request.query.filter));let n=await fe.get({pageSize:t,skip:r,filters:a});e.body={schemas:["urn:ietf:params:scim:api:messages:2.0:ListResponse"],totalResults:n.total,Resources:n.users.map(V.user.toScimUserResponse),startIndex:(r||0)+1,itemsPerPage:t}},Eb=async e=>{let{id:t}=e.params;typeof t!="string"&&e.throw(404);let r=await fe.find(t);e.body=V.user.toScimUserResponse(r)},Rb=async e=>{let t=V.user.fromScimUser(e.request.body);try{let r=await fe.create(t);e.body=V.user.toScimUserResponse(r)}catch(r){throw r instanceof Tb.EmailUnavailableError&&e.throw(409,"Email already in use"),r}};function WM(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 _b=async e=>{let t=await fe.find(e.params.id);t||e.throw(404);let r=V.user.toScimUserResponse(t),a=e.request.body;try{(0,Yn.patchBodyValidation)(a)}catch{}if(WM(a))return tu(e);let n;try{n=(0,Yn.scimPatch)(r,a.Operations)}catch{}n||e.throw(500);let o=V.user.fromScimUser(n);await fe.update(o,{allowChangingEmail:!0}),e.body=V.user.toScimUserResponse(o)},tu=async e=>{let{id:t}=e.params;typeof t!="string"&&e.throw(404),await fe.remove(t),e.status=204};var Qb=P(Fb()),jb=require("@budibase/shared-core"),Hn=require("scim-patch");var zn=require("scim2-parse-filter");function Wb(e,t){for(let r of t.split(","))delete e[r]}var $b=async e=>{let r=(await j.fetch()).filter(o=>o.scimInfo?.isSync).map(V.group.toScimGroupResponse),{filter:a,excludedAttributes:n}=e.request.query;if(a){let o=(0,zn.filter)((0,zn.parse)(a));r=r.filter(o)}n&&r.forEach(o=>{Wb(o,n)}),e.body={schemas:["urn:ietf:params:scim:api:messages:2.0:ListResponse"],totalResults:r.length,Resources:r,startIndex:1,itemsPerPage:r.length}},Kb=async e=>{let t=V.group.fromScimGroup(e.request.body),r=await Ar.create(t);e.body=V.group.toScimGroupResponse(r)},Vb=async e=>{let{id:t}=e.params,r=await j.get(t),a=V.group.toScimGroupResponse(r),{excludedAttributes:n}=e.request.query;n&&Wb(a,n),e.body=a},Yb=async e=>{let{id:t}=e.params,r=await j.get(t);await j.remove(t,r._rev),e.status=204},Hb=async e=>{let{id:t}=e.params,r=await j.get(t),a=V.group.toScimGroupResponse(r),n=e.request.body;try{(0,Hn.patchBodyValidation)(n)}catch{e.throw(400)}let{true:o,false:s}=(0,Qb.default)(n.Operations,i=>i.path==="members");if(s?.length){let i=(0,Hn.scimPatch)(a,s);i||e.throw(500);let p={...V.group.fromScimGroup(i),_rev:r._rev};await j.save(p)}if(o?.length){let i=[],p=[];for(let{op:m,value:f}of o)switch(m){case"add":case"Add":for(let h of f)i.push(await fe.find(h.value));break;case"remove":case"Remove":for(let h of f)p.push(await fe.find(h.value));break;case"replace":case"Replace":throw new Error("Replacing members is not allowed");default:jb.utils.unreachable(m)}i.length&&await j.addUsers(t,i.map(m=>m._id)),p.length&&await j.removeUsers(t,p.map(m=>m._id))}e.body=V.group.toScimGroupResponse(await j.get(t))};var xa=require("@budibase/types"),Ie=new zb.default({prefix:"/api/global/scim/v2"});Ie.use(Vi);Ie.use(Ki);Ie.get("/users",vb);Ie.get("/users/:id",va("id"),Eb);Ie.post("/users",Rb);Ie.patch("/users/:id",va("id"),_b);Ie.delete("/users/:id",va("id"),tu);Ie.get("/groups",$b);Ie.post("/groups",W.requireFeature(xa.Feature.USER_GROUPS),Kb);Ie.get("/groups/:id",W.requireFeature(xa.Feature.USER_GROUPS),Ea("id"),Vb);Ie.delete("/groups/:id",W.requireFeature(xa.Feature.USER_GROUPS),Ea("id"),Yb);Ie.patch("/groups/:id",W.requireFeature(xa.Feature.USER_GROUPS),Ea("id"),Hb);var Jb=Ie;var eI=P(require("@koa/router"));var ru=require("@budibase/backend-core");async function Xb(e){let{userId:t,appId:r}=e.params,a=await at.db.getUser(t);if(ru.users.isGlobalBuilder(a)){e.body={message:"User already admin - no permissions updated."};return}await at.addAppBuilder(a,r),e.body={message:`User "${a.email}" app builder access updated.`}}async function Zb(e){let{userId:t,appId:r}=e.params,a=await at.db.getUser(t);if(ru.users.isGlobalBuilder(a)){e.body={message:"User already admin - no permissions removed."};return}await at.removeAppBuilder(a,r),e.body={message:`User "${a.email}" app builder access removed.`}}var au=require("@budibase/types"),nu=require("@budibase/backend-core"),tI=new eI.default;tI.post("/api/global/users/:userId/app/:appId/builder",nu.auth.builderOrAdmin,W.requireFeatures(au.Feature.APP_BUILDERS),Xb).delete("/api/global/users/:userId/app/:appId/builder",nu.auth.builderOrAdmin,W.requireFeatures(au.Feature.APP_BUILDERS),Zb);var rI=tI;var V={};w(V,{group:()=>iu,user:()=>su});var su={};w(su,{fromScimUser:()=>bG,toScimUserResponse:()=>hG,userFilters:()=>IG});var Jn=require("@budibase/types"),aI=require("scim2-parse-filter"),nI=require("@budibase/backend-core"),oI=require("@budibase/shared-core"),{unreachable:gG}=oI.utils,hG=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===Jn.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},yG=e=>!!e?.id;function AG(e){if(nI.utils.validEmail(e.userName))return e.userName;if(e.emails)return e.emails.find(t=>t.primary)?.value||e.emails[0]?.value}var bG=e=>{let t=yG(e)?e:void 0,r=AG(e);if(!r)throw new Error("Email is required");let a;switch(e.active){case"True":case"true":case!0:a=!0;break;case"False":case"false":case!1:a=!1;break;default:gG(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?Jn.UserStatus.ACTIVE:Jn.UserStatus.INACTIVE,createdAt:t?.meta.created.getTime(),updatedAt:t?.meta.lastModified.toISOString()}},IG=e=>{let t={equal:{}},r=(0,aI.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 iu={};w(iu,{fromScimGroup:()=>TG,toScimGroupResponse:()=>SG});var SG=e=>({schemas:["urn:ietf:params:scim:schemas:core:2.0:Group"],id:e._id,externalId:e.scimInfo.externalId,meta:{resourceType:"Group",created:new Date(e.createdAt),lastModified:new Date(e.updatedAt)},displayName:e.name,members:e.users?.map(t=>({value:t._id}))}),wG=e=>!!e?.id,TG=e=>{let t=wG(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 Cu={};w(Cu,{LLM:()=>Je,LLMRequest:()=>$,TableGeneration:()=>Ou,agentHistoryTitleSystemPrompt:()=>qG,agentSystemPrompt:()=>UG,aiColumnSchemas:()=>xu,aiTableResponseToTableSchema:()=>vu,appendAIColumns:()=>Eu,classifyText:()=>cu,cleanData:()=>lu,extractFileData:()=>LG,generateAIColumns:()=>wu,generateCode:()=>PG,generateCronExpression:()=>du,generateData:()=>Tu,generateJs:()=>hu,generateSQL:()=>CG,generateTables:()=>Su,generationStructure:()=>_u,getLLM:()=>Ca,getLLMConfig:()=>Iu,getLLMOrThrow:()=>gI,normalizeContentType:()=>uu,parseResponseFormat:()=>Zn,sanitiseToolName:()=>vG,searchWeb:()=>gu,sentimentAnalysis:()=>mu,summarizeText:()=>Xn,tableDataStructuredOutput:()=>Lu,translate:()=>fu});var La=require("@budibase/types");function vG(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 uu(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 no=require("@budibase/types");var Xe=require("@budibase/backend-core"),lI=require("@budibase/types");var eo=P(require("openai"));var St=require("@budibase/types");var sI=require("@budibase/shared-core");var wt=P(require("dd-trace"));function pu(e,t){return t.map(r=>e[r]).join(" ")}var Je=class{constructor({model:t,apiKey:r,maxTokens:a}){this._model=t,this._apiKey=r,this._maxTokens=a??parseInt(process.env.BUDIBASE_AI_MAX_PROMPT_TOKENS||"300")}get model(){return this._model}get apiKey(){return this._apiKey}get maxTokens(){return this._maxTokens}async prompt(t){return await wt.default.trace("prompt",async()=>{let r=typeof t=="string"?new $().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(Xn(t)))}async generateCronExpression(t){return wt.default.trace("generateCronExpression",()=>this.prompt(du(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 Xn(pu(r,o));case St.AIOperationEnum.CLEAN_DATA:return lu(r[n]);case St.AIOperationEnum.TRANSLATE:return fu(r[n],s);case St.AIOperationEnum.CATEGORISE_TEXT:if(!i)throw Error("No categories provided for categorise text operation. Please provide categories.");return cu(pu(r,o),i.split(","));case St.AIOperationEnum.SENTIMENT_ANALYSIS:return mu(r[n]);case St.AIOperationEnum.PROMPT:return p;case St.AIOperationEnum.SEARCH_WEB:return gu(pu(r,o));default:throw sI.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 uI=require("@budibase/types"),yu=require("openai/helpers/zod");function Zn(e){if(e)return e==="text"?{type:"text"}:e==="json"?{type:"json_object"}:e}function iI(e){if(!e)return 0;let t=e.prompt_tokens;return e.completion_tokens*3+t}var Le=class extends Je{constructor(r){super(r);this.client=this.getClient(r)}getClient(r){if(!r.apiKey)throw new Error("No OpenAI API key found");return new eo.default({apiKey:r.apiKey})}async uploadFile(r,a,n){let o=uu(n);if(uI.ImageContentTypes.includes(o.toLowerCase())){let p;if(Buffer.isBuffer(r))p=r;else{let f=[];for await(let h of r)f.push(h);p=Buffer.concat(f)}let m=p.toString("base64");return`data:${o};base64,${m}`}let s=await(0,eo.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:Zn(r.format)};r.tools&&r.tools.length>0&&(a.tool_choice="auto",a.tools=r.tools.map(yu.zodFunction));let n=await this.client.chat.completions.create(a),o=n.choices[0]?.message;if(o?.tool_calls){r.addMessage(o);let s=[];for(let i of o.tool_calls){let p=r.findTool(i.function.name);if(!p)throw new Error(`Tool ${i.function.name} not found in prompt tools`);let m=JSON.parse(i.function.arguments);s.push(p.handler(m).then(f=>({role:"tool",tool_call_id:i.id,content:f})).catch(f=>(console.error(`[OPENAI TOOL ERROR] Tool ${i.function.name} failed in OpenAI handler:`,f),{role:"tool",tool_call_id:i.id,content:`Error: ${f.message}`})))}return r.addMessages(await Promise.all(s)),this.chatCompletion(r)}else{if(o?.content)return{messages:[...r.messages,{role:o.role,content:o.content}],tokensUsed:iI(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:Zn(r.format),stream:!0};r.tools&&r.tools.length>0&&(a.tool_choice="auto",a.tools=r.tools.map(yu.zodFunction));try{let n=await this.client.chat.completions.create(a),o=null,s="",i=null;for await(let m of n){let f=m.choices[0]?.delta;if(f){if(f.content&&(s+=f.content,yield{type:"content",content:f.content}),f.tool_calls&&f.tool_calls.length>0){let h=f.tool_calls[0];h.id?(o={id:h.id,name:h.function?.name||"",arguments:h.function?.arguments||""},yield{type:"tool_call_start",toolCall:{id:o.id,name:o.name,arguments:o.arguments}}):o&&h.function?.arguments&&(o.arguments+=h.function.arguments,yield{type:"tool_call_start",toolCall:{id:o.id,name:o.name,arguments:o.arguments}})}m.usage&&(i=m.usage)}}let p=i?iI(i):0;if(o){r.addMessage({role:"assistant",content:"",tool_calls:[{id:o.id,type:"function",function:{name:o.name,arguments:o.arguments}}]});let m=r.findTool(o.name);if(m)try{let f=JSON.parse(o.arguments),h=await m.handler(f);yield{type:"tool_call_result",toolResult:{id:o.id,result:h}},r.addMessage({role:"tool",tool_call_id:o.id,content:h}),yield*this.chatCompletionStream(r);return}catch(f){yield{type:"tool_call_result",toolResult:{id:o.id,result:`Error: ${f.message}`,error:f.message}},r.addMessage({role:"tool",tool_call_id:o.id,content:`Error: ${f.message}`}),yield*this.chatCompletionStream(r);return}else{let f=`Tool '${o.name}' not found`;yield{type:"tool_call_result",toolResult:{id:o.id,result:f,error:f}},r.addMessage({role:"tool",tool_call_id:o.id,content:f}),yield*this.chatCompletionStream(r);return}}s&&r.addMessage({role:"assistant",content:s}),yield{type:"done",messages:r.messages,tokensUsed:p}}catch(n){yield{type:"error",content:n.message}}}};var ee=require("@budibase/backend-core"),pI=require("@budibase/types");var Au=require("dd-trace"),to=class extends Je{async prompt(t){let r=await super.prompt(t);return r.tokensUsed&&await wn(r.tokensUsed),r}async chat(t){let r=await super.chat(t);return r.tokensUsed&&await wn(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 Le({apiKey:ee.env.OPENAI_API_KEY,model:this.model,maxTokens:this.maxTokens}).uploadFile(t,r,a)}async uploadFileSelfHost(t,r,a){let n;if(Buffer.isBuffer(t))n=t;else{let p=[];for await(let m of t)p.push(m);n=Buffer.concat(p)}let o=n.toString("base64");if(a&&pI.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 fn();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 Au.tracer.trace("chatCompletionCloud",async()=>await new Le({apiKey:ee.env.OPENAI_API_KEY,model:this.model,maxTokens:this.maxTokens}).chatCompletion(t))}async chatCompletionSelfHost(t){return await Au.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 fn();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 Le({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 Oa=require("dd-trace");var bu=P(require("@anthropic-ai/sdk"));function EG(e){if(!e)return 0;let t=e.input_tokens;return e.output_tokens*3+t}var ro=class extends Je{constructor(r){super(r);this.client=new bu.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:EG(a.usage)}}catch(a){throw a instanceof bu.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 dI=require("zod"),fI=require("openai/helpers/zod");var cI=require("openai"),ao=class extends Le{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 cI.AzureOpenAI({apiKey:t.apiKey,apiVersion:"2024-10-01-preview",baseURL:t.baseUrl})}};var mI="gpt-4o-mini",RG={OpenAI:Le,TogetherAI:Le,AzureOpenAI:ao,Custom:Le,Anthropic:ro,BudibaseAI:to};async function _G(){return await Oa.tracer.trace("getAIConfig",async e=>{let t={type:lI.ConfigType.AI,config:{}};if(!Xe.context.isSelfHostUsingCloud()){let a=await Xe.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||mI,apiKey:r.apiKey,baseUrl:r.baseUrl}})}async function xG(){return Oa.tracer.trace("getSelfHostOpenAIKeyConfig",e=>{if(!Xe.env.SELF_HOSTED){e.addTags({enabled:!1,reason:"not self host"});return}if(!Xe.env.OPENAI_API_KEY){e.addTags({enabled:!1,reason:"no OPENAI_API_KEY"});return}return e.addTags({enabled:!0}),{provider:"OpenAI",model:mI,apiKey:Xe.env.OPENAI_API_KEY}})}async function Iu(){return Oa.tracer.trace("getLLMConfig",async()=>await _G()||await xG())}async function Ca(e){return await Oa.tracer.trace("getLLM",async t=>{let{model:r,maxTokens:a}=e||{},n=await Iu();if(!n){t.addTags({enabled:!1,reason:"no config found"});return}r&&(n.model=r),a&&(n.maxTokens=a);let o=RG[n.provider];if(!o){t.addTags({enabled:!1,reason:"no provider found",provider:n.provider});return}return new o(n)})}async function gI(){let e=await Ca();if(!e)throw new Xe.HTTPError("No available LLM configurations",500);return e}var $=class e{constructor(){this.messages=[];this.tools=[]}addTool(t){return this.tools.push(t),this}addTools(t){return this.tools.push(...t),this}findTool(t){return this.tools.find(r=>r.name===t)}withFormat(t){return t instanceof dI.z.ZodType?this.format=(0,fI.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 Xn(e,t){let r=`Summarize this text:
|
|
39
|
-
${e}`,a="";if(t)switch(t){case
|
|
37
|
+
`;function Vr(e){return Eo.default.verify(e,wS,{algorithms:["RS256"]})}function TS(e,t){return Eo.default.sign(t,e,{encoding:"utf-8",algorithm:"RS256"})}var za={};w(za,{getFeatures:()=>Ro});var l=require("@budibase/types");var vS={[l.PlanType.FREE]:[...ge.SELF_FREE_LICENSE.features],[l.PlanType.PREMIUM]:void 0,[l.PlanType.PREMIUM_PLUS]:[l.Feature.APP_BACKUPS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.PDF,l.Feature.BUDIBASE_AI],[l.PlanType.PREMIUM_PLUS_TRIAL]:[l.Feature.APP_BACKUPS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.PDF,l.Feature.BUDIBASE_AI],[l.PlanType.PRO]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS],[l.PlanType.TEAM]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS],[l.PlanType.BUSINESS]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.AUDIT_LOGS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.PDF,l.Feature.BUDIBASE_AI],[l.PlanType.ENTERPRISE_BASIC]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.ENFORCEABLE_SSO,l.Feature.AUDIT_LOGS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.OFFLINE,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.SCIM,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.PWA,l.Feature.CUSTOM_APP_SCRIPTS,l.Feature.PDF,l.Feature.BUDIBASE_AI],[l.PlanType.ENTERPRISE_BASIC_TRIAL]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.ENFORCEABLE_SSO,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.SCIM,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.PWA,l.Feature.CUSTOM_APP_SCRIPTS,l.Feature.PDF,l.Feature.BUDIBASE_AI],[l.PlanType.ENTERPRISE]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.ENFORCEABLE_SSO,l.Feature.AUDIT_LOGS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.OFFLINE,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.SCIM,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.PWA,l.Feature.CUSTOM_APP_SCRIPTS,l.Feature.PDF,l.Feature.BUDIBASE_AI]},ES={[l.PlanType.FREE]:[...ge.CLOUD_FREE_LICENSE.features],[l.PlanType.PREMIUM]:[l.Feature.APP_BACKUPS,l.Feature.BRANDING,l.Feature.APP_BUILDERS,l.Feature.VIEW_PERMISSIONS,l.Feature.PDF],[l.PlanType.PREMIUM_PLUS]:[l.Feature.APP_BACKUPS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.BUDIBASE_AI,l.Feature.PDF],[l.PlanType.PREMIUM_PLUS_TRIAL]:[l.Feature.APP_BACKUPS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.BUDIBASE_AI,l.Feature.PDF],[l.PlanType.PRO]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS,l.Feature.BRANDING],[l.PlanType.TEAM]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS,l.Feature.BRANDING],[l.PlanType.BUSINESS]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.AUDIT_LOGS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.BUDIBASE_AI,l.Feature.PDF],[l.PlanType.ENTERPRISE_BASIC]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.ENFORCEABLE_SSO,l.Feature.AUDIT_LOGS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.OFFLINE,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.SCIM,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.BUDIBASE_AI,l.Feature.PWA,l.Feature.CUSTOM_APP_SCRIPTS,l.Feature.PDF],[l.PlanType.ENTERPRISE_BASIC_TRIAL]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.ENFORCEABLE_SSO,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.SCIM,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.BUDIBASE_AI,l.Feature.PWA,l.Feature.CUSTOM_APP_SCRIPTS,l.Feature.PDF],[l.PlanType.ENTERPRISE]:[l.Feature.USER_GROUPS,l.Feature.APP_BACKUPS,l.Feature.ENVIRONMENT_VARIABLES,l.Feature.ENFORCEABLE_SSO,l.Feature.AUDIT_LOGS,l.Feature.BRANDING,l.Feature.SYNC_AUTOMATIONS,l.Feature.APP_BUILDERS,l.Feature.EXPANDED_PUBLIC_API,l.Feature.VIEW_PERMISSIONS,l.Feature.TRIGGER_AUTOMATION_RUN,l.Feature.SCIM,l.Feature.VIEW_READONLY_COLUMNS,l.Feature.AI_CUSTOM_CONFIGS,l.Feature.BUDIBASE_AI,l.Feature.PWA,l.Feature.CUSTOM_APP_SCRIPTS,l.Feature.PDF]};function 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(vS);break;case l.Hosting.CLOUD:r=a(ES);break}return r}var Ja={};w(Ja,{UNLIMITED:()=>d,getQuotas:()=>_o});var G=require("@budibase/types");var c=Ze,Tp=ge,d=-1,Hr=e=>e*1e6,RS={[G.PlanType.FREE]:{...Tp.CLOUD_FREE_LICENSE.quotas},[G.PlanType.PREMIUM]:{usage:{monthly:{...c.queries(d),...c.automations(1e3),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(1e4),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(0),...c.plugins(d),...c.customAIConfigurations(0)}},constant:{...c.automationLogRetentionDays(7),...c.appBackupRetentionDays(7)}},[G.PlanType.PREMIUM_PLUS]:{usage:{monthly:{...c.queries(d),...c.automations(5e3),...c.budibaseAICredits(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)}},[G.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)}},[G.PlanType.PRO]:{usage:{monthly:{...c.queries(d),...c.automations(1e3),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(5),...c.plugins(d),...c.customAIConfigurations(0)}},constant:{...c.automationLogRetentionDays(7),...c.appBackupRetentionDays(7)}},[G.PlanType.TEAM]:{usage:{monthly:{...c.queries(d),...c.automations(5e3),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(10),...c.plugins(d),...c.customAIConfigurations(0)}},constant:{...c.automationLogRetentionDays(30),...c.appBackupRetentionDays(90)}},[G.PlanType.BUSINESS]:{usage:{monthly:{...c.queries(d),...c.automations(1e4),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(5e4),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(50),...c.plugins(d),...c.customAIConfigurations(0)}},constant:{...c.automationLogRetentionDays(365),...c.appBackupRetentionDays(365)}},[G.PlanType.ENTERPRISE_BASIC]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(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)}},[G.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)}},[G.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={[G.PlanType.FREE]:{...Tp.SELF_FREE_LICENSE.quotas},[G.PlanType.PREMIUM]:void 0,[G.PlanType.PREMIUM_PLUS]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(0),...c.plugins(d),...c.customAIConfigurations(1)}},constant:{...c.automationLogRetentionDays(30),...c.appBackupRetentionDays(30)}},[G.PlanType.PREMIUM_PLUS_TRIAL]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(0),...c.plugins(d),...c.customAIConfigurations(1)}},constant:{...c.automationLogRetentionDays(30),...c.appBackupRetentionDays(30)}},[G.PlanType.PRO]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(5),...c.plugins(d),...c.customAIConfigurations(0)}},constant:{...c.automationLogRetentionDays(7),...c.appBackupRetentionDays(7)}},[G.PlanType.TEAM]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(10),...c.plugins(d),...c.customAIConfigurations(0)}},constant:{...c.automationLogRetentionDays(30),...c.appBackupRetentionDays(90)}},[G.PlanType.BUSINESS]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(50),...c.plugins(d),...c.customAIConfigurations(0)}},constant:{...c.automationLogRetentionDays(90),...c.appBackupRetentionDays(365)}},[G.PlanType.ENTERPRISE_BASIC]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(d),...c.plugins(d),...c.customAIConfigurations(d)}},constant:{...c.automationLogRetentionDays(d),...c.appBackupRetentionDays(d)}},[G.PlanType.ENTERPRISE_BASIC_TRIAL]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(d),...c.plugins(d),...c.customAIConfigurations(d)}},constant:{...c.automationLogRetentionDays(15),...c.appBackupRetentionDays(15)}},[G.PlanType.ENTERPRISE]:{usage:{monthly:{...c.queries(d),...c.automations(d),...c.budibaseAICredits(0),...c.actions(d)},static:{...c.rows(d),...c.apps(d),...c.users(d),...c.creators(d),...c.userGroups(d),...c.plugins(d),...c.customAIConfigurations(d)}},constant:{...c.automationLogRetentionDays(d),...c.appBackupRetentionDays(d)}}};function _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 G.Hosting.SELF:r=a(_S);break;case G.Hosting.CLOUD:r=a(RS);break}return JSON.parse(JSON.stringify(r))}var Kt={};w(Kt,{appExists:()=>xS,encoding:()=>$t});var vp=require("@budibase/backend-core");async function xS(e){return(await vp.db.getAllApps({all:!0,idsOnly:!0})).includes(e)}var $t={};w($t,{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"),or=require("@budibase/backend-core"),pf=P(kl()),cf=P(ts());async function ox(e){await Te.save({offlineLicenseToken:e}),await xt()}async function sx(){await Te.save({offlineLicenseToken:void 0}),await xt()}async function lf(){return(await Te.get()).offlineLicenseToken}async function rs(){let t=(await or.installation.getInstall()).installId,r=or.context.getTenantId(),a=await or.events.identification.getUniqueTenantId(r);return{installId:t,tenantId:a}}async function ix(){let e=await rs();return $t.objectToBase64(e)}function ux(e){return $t.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 Wt();return t||(e.addTags({offlineFallback:!0}),t=ma.getOfflineLicense()),t}),us=e=>To(e),ps=()=>ss.env.SELF_HOSTED?ge.SELF_FREE_LICENSE:ge.CLOUD_FREE_LICENSE;var ls={};w(ls,{activateLicenseKey:()=>mx,deleteLicenseKey:()=>gx,getLicenseKey:()=>mn});var cs=P(require("dd-trace"));async function mx(e){await vo(e),await Te.save({licenseKey:e}),await xt()}async function mn(){return await cs.default.trace("getLicenseKey",async e=>{let t=await Te.get();return e.addTags({licenseKey:t.licenseKey}),t.licenseKey})}async function gx(){return await cs.default.trace("deleteLicenseKey",async()=>{await Te.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 ie(e,t){Array.isArray(e)||(e=[e]),t||(t=await Pe.getCachedLicense());for(let r of e)if(!t?.features.includes(r))return!1;return!0}async function yn(e,t){if(!await ie(e,t))throw new et.FeatureDisabledError(`${e} is not currently enabled`,e)}async function ds(e,t){if(!await ie(e,t)){let r=e.join(", ");throw new et.FeatureDisabledError(`${r} are not currently enabled`,r)}}function he(e){return async(...t)=>(await yn(se.Feature.APP_BACKUPS),e(...t))}async function fs(){return ie(se.Feature.APP_BACKUPS)}async function ms(){return ie(se.Feature.BRANDING)}async function wf(){return ie(se.Feature.ENFORCEABLE_SSO)}async function hx(){return ie(se.Feature.SYNC_AUTOMATIONS)}async function Ax(){return ie(se.Feature.TRIGGER_AUTOMATION_RUN)}async function Ct(){return ie(se.Feature.APP_BUILDERS)}async function hn(){return ie(se.Feature.AUDIT_LOGS)}async function gs(){return ie(se.Feature.USER_GROUPS)}function bx(){return ie(se.Feature.PWA)}async function tt(){return ie(se.Feature.EXPANDED_PUBLIC_API)}async function Ix(e){if(et.env.ENABLE_SSO_MAINTENANCE_MODE||!await wf())return!1;let r;return e?.config?r=e.config:r=await et.configs.getSettingsConfig(),!!r.isSSOEnforced}var ys=async()=>{let e=se.Feature.SCIM,t=await ie(e),r=await et.configs.getSCIMConfig();if(!t||!r?.enabled)throw new et.FeatureDisabledError(`${e} is not currently enabled`,e);return!0};async function Sx(){return ie(se.Feature.VIEW_PERMISSIONS)}async function wx(){return ie(se.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 vx(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"),Ex="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[Ex]={provider:"BudibaseAI",active:!0,isDefault:Object.keys(e.config).every(t=>!e.config[t].isDefault),defaultModel:process.env.BUDIBASE_AI_DEFAULT_MODEL||"gpt-4o-mini",name:"Budibase AI"},e}var Ke={};w(Ke,{addAction:()=>Lx,addApp:()=>Cx,addAutomation:()=>Bx,addGroup:()=>Is,addPlugin:()=>ws,addRow:()=>Ux,addRows:()=>Dx,addUsers:()=>Sn,bustCache:()=>mo,decrement:()=>rt,decrementMany:()=>ga,getCurrentUsageValues:()=>Ju,getLicensedQuota:()=>Ef,getQuotaUsage:()=>Tt,increment:()=>Ae,incrementBudibaseAICredits:()=>Tn,incrementMany:()=>Pt,removeApp:()=>Px,removeGroup:()=>Ss,removePlugin:()=>Ts,removeRow:()=>qx,removeRows:()=>Nx,removeUsers:()=>cr,set:()=>bs,setAllUsage:()=>yo,setAppUsageValue:()=>go,setUsage:()=>Yu,setUsagePerApp:()=>Hu,updatePluginCount:()=>vs,updateUsage:()=>ir,usageLimitIsExceeded:()=>Ox,utils:()=>_r});var bn=require("@budibase/types");var z=require("@budibase/types");var De=require("@budibase/backend-core");var sr=require("dd-trace"),Ae=(e,t,r)=>vf({change:1,name:e,type:t,opts:r}),Pt=e=>sr.tracer.trace("quotas.incrementMany",async()=>vf(e)),vf=async e=>await sr.tracer.trace("quotas.tryIncrement",async t=>{let r=Array.isArray(e)?e:[e];t.addTags({numActions:r.length}),await ir(r.map(n=>({usageChange:n.change,name:n.name,type:n.type,opts:{dryRun:!0,suppressErrorLog:n.opts?.suppressErrorLog,id:n.opts?.id}})));let a=[];for(let n of r)await sr.tracer.trace("quotas.incrementMany.fn",async o=>{o.addTags({actionName:n.name,actionType:n.type,actionChange:n.change});let s=n.opts?.fn;s&&a.push(await s())});return await ir(r.map(n=>({usageChange:n.change,name:n.name,type:n.type,opts:{dryRun:!1,valueFn:n.opts?.valueFn,suppressErrorLog:n.opts?.suppressErrorLog,id:n.opts?.id}}))),a[0]}),rt=(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)=>ke.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=ke.utils.getCurrentMonthString(),n=r.monthly[a].triggers;return n?n[t]||{}:{}}},_x=async(e,t,r,a)=>{try{await De.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){De.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!==Ze.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 sr.tracer.trace("quotas.updateUsage",async t=>{let r=De.tenancy.getTenantId(),a=Array.isArray(e)?e:[e];t.addTags({numActions:a.length,tenantId:r});let n,o,s=[],i={},p={},f={},m={};for(let g of a)await sr.tracer.trace("quotas.updateUsage.action",async I=>{I.addTags({actionName:g.name,actionType:g.type,actionUsageChange:g.usageChange});try{n=De.context.getAppId()}catch{}if(z.APP_QUOTA_NAMES.includes(g.name)&&!n)throw new Error("App context required for quota update");try{o=await Ef(z.QuotaType.USAGE,g.name,g.type),s.push(o);let{total:_,app:R,breakdown:E}=await ke.getCurrentUsageValues(g.type,g.name,g.opts?.id);_+=g.usageChange,R!=null&&(R+=g.usageChange),E!=null&&(E+=g.usageChange);let U={};if(g.opts?.dryRun||(U=await xx(g.type,g.name,_,o),m={...m,[g.name]:U}),o.value!==Ze.UNLIMITED&&_>o.value&&g.usageChange>0)throw new De.UsageLimitError(`Licensed ${o.name} of ${o.value} has been exceeded`,o.name);if(_=Math.max(0,_),R&&(R=Math.max(0,R)),E&&(E=Math.max(0,E),f={...f,[g.name]:E}),!g.opts?.dryRun){let Le=g.opts?.valueFn;Le&&(_=await Le(),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 ke.setAllUsage(y)})},Ef=async(e,t,r)=>{let a=await Pe.getCachedLicense();if(!a){let n=De.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=>Ae(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}={})=>Ae(ur.StaticQuotaName.APPS,ur.QuotaUsageType.STATIC,{fn:e,valueFn:_f,id:t}),Px=async({appId:e}={})=>rt(ur.StaticQuotaName.APPS,ur.QuotaUsageType.STATIC,{valueFn:_f,id:e});var We=require("@budibase/types"),Ux=async(e,{tableId:t}={})=>Ae(We.StaticQuotaName.ROWS,We.QuotaUsageType.STATIC,{fn:e,id:t}),qx=async({tableId:e}={})=>rt(We.StaticQuotaName.ROWS,We.QuotaUsageType.STATIC,{id:e}),Dx=async(e,t,{tableId:r}={})=>Pt({change:e,name:We.StaticQuotaName.ROWS,type:We.QuotaUsageType.STATIC,opts:{fn:t,id:r}}),Nx=async(e,{tableId:t}={})=>ga({change:e,name:We.StaticQuotaName.ROWS,type:We.QuotaUsageType.STATIC,opts:{id:t}});var In=require("@budibase/types"),Bx=async(e,{automationId:t}={})=>Ae(In.MonthlyQuotaName.AUTOMATIONS,In.QuotaUsageType.MONTHLY,{fn:e,id:t});var pr=require("@budibase/types"),Is=async e=>Ae(pr.StaticQuotaName.USER_GROUPS,pr.QuotaUsageType.STATIC,{fn:e}),Ss=async()=>rt(pr.StaticQuotaName.USER_GROUPS,pr.QuotaUsageType.STATIC);var ht=require("@budibase/types"),ws=async e=>Ae(ht.StaticQuotaName.PLUGINS,ht.QuotaUsageType.STATIC,{fn:e}),Ts=async()=>rt(ht.StaticQuotaName.PLUGINS,ht.QuotaUsageType.STATIC),vs=async e=>bs(ht.StaticQuotaName.PLUGINS,ht.QuotaUsageType.STATIC,e);var $e=require("@budibase/types"),ya=require("@budibase/backend-core");var Sn=async(e,t,r)=>{let a=[{change:e,name:$e.StaticQuotaName.USERS,type:$e.QuotaUsageType.STATIC,opts:{fn:r,valueFn:ya.users.getUserCount}}];t>0&&a.push({change:t,name:$e.StaticQuotaName.CREATORS,type:$e.QuotaUsageType.STATIC,opts:{valueFn:ya.users.getCreatorCount}});let n=await Pt(a);return await Wt(),n},cr=async(e,t)=>{let r=[{change:e,name:$e.StaticQuotaName.USERS,type:$e.QuotaUsageType.STATIC,opts:{valueFn:ya.users.getUserCount}}];t>0&&r.push({change:t,name:$e.StaticQuotaName.CREATORS,type:$e.QuotaUsageType.STATIC,opts:{valueFn:ya.users.getCreatorCount}}),await ga(r),await Wt()};var wn=require("@budibase/types"),Tn=async e=>Pt({change:e,name:wn.MonthlyQuotaName.BUDIBASE_AI_CREDITS,type:wn.QuotaUsageType.MONTHLY});var at={};w(at,{addAppBuilder:()=>Qx,db:()=>Ve,removeAppBuilder:()=>jx});var Aa=require("@budibase/backend-core");var j={};w(j,{addAppBuilder:()=>Os,addUsers:()=>Rs,adjustGroupCreatorsQuotas:()=>Fx,cleanupApp:()=>kx,enrichUserRolesFromGroups:()=>Gx,fetch:()=>ha,get:()=>Ut,getBulk:()=>qf,getGroupBuilderAppIds:()=>Uf,getGroupRoleId:()=>Mx,remove:()=>Es,removeAppBuilder:()=>Ls,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 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 Gx(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 Ut(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 vn(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 Es(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(L=>L!==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 Ut(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 kx(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 Ut(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 Ut(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(Ke,j,qe);var Ve=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 kf=require("@budibase/types"),Rn=require("@budibase/backend-core");var En=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:nt,UNICODE_MAX:Wx,DocumentType:Bf,AutomationViewMode:Cs,ViewName:$x,getQueryIndex:Kx}=Z.db,Vx=new Date(0).toISOString(),Yx=100,Ps=async()=>$a(En.ConstantQuotaName.AUTOMATION_LOG_RETENTION_DAYS);function Mf(e,t,{status:r,automationId:a}={},n={}){let o=a?`${a}${nt}`:"",s=r?`${r}${nt}`:"",i;return r&&a?i=`${Cs.ALL}${nt}${s}${o}`:r?i=`${Cs.STATUS}${nt}${s}`:a?i=`${Cs.AUTOMATION}${nt}${o}`:i=`${Bf.AUTOMATION_LOG}${nt}`,{...n,descending:!0,startkey:`${i}${t}${Wx}`,endkey:`${i}${e}`}}function Hx(e,t,r){return`${Bf.AUTOMATION_LOG}${nt}${e}${nt}${r}${nt}${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 Gf(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]===En.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 Gf(e,t);t.status===kf.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 vs(r)}catch(t){J.logging.logAlert("Unable to retrieve plugins for quota check",t)}}var Ye={};w(Ye,{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 je.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"),Ne=require("@budibase/types");var Hf=require("memorystream"),zf=new V.sql.Sql(Ne.SqlClient.SQL_LITE);async function uO(e,t,r){let a={operation:Ne.Operation.READ,table:jt.searchTable(),tables:{},paginate:{limit:r||9,page:t},filters:e,resource:{fields:[]},sort:{timestamp:{direction:Ne.SortOrder.DESCENDING,type:Ne.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=Ne.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=jt.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:Ne.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 le=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 Gs(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=Gs(e),t.range={timestamp:{high:e.endDate,low:e.startDate}}),Object.keys(t).length===0&&(t.notEmpty={event:!0}),t}function ks(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()||!le.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=le.db.getProdAppID(r.appId);let i=await le.cache.app.getAppMetadata(r.appId);"name"in i&&(s.appName=i.name)}if(r?.userId){let i=await le.users.getById(r?.userId);s.email=i.email}}catch(i){le.logging.logAlert("Failed to retrieve fallback information for audit log",i)}return o.fallback=s,await Jf(o)}async function gO(e){let t=e.map(i=>i.userId),a=e.filter(i=>i.appId).map(i=>le.db.getDevAppID(i.appId)),n=await le.users.bulkGetGlobalUsersById([...new Set(t)],{cleanup:!0}),o=await le.db.getAppsByIDs([...new Set(a)]),s=[];for(let i of e){let p=n.find(y=>y?._id===i.userId),f=o.find(y=>le.db.isSameAppID(y?.appId,i.appId)),m={event:i.event,timestamp:i.timestamp,name:i.name,metadata:i.metadata,user:p||ks(i.userId,"user",i.fallback)};i.appId&&(m.app=f||ks(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=Gs(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 tt()||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 tt())throw new Error("Unable to assign roles - license required.");let r=await Ve.bulkGet(e);for(let a of r){if(t.role&&t.role.roleId){let n=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 Ve.bulkUpdate(r)}async function wO(e,t){if(!await tt())throw new Error("Unable to un-assign roles - license required.");let r=await Ve.bulkGet(e);for(let a of r){if(t.role){let n=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:()=>vO,buildImportFn:()=>TO});var $s=require("@budibase/backend-core");function TO(e){return async(t,r)=>{await tt()||t.throw(403,"Endpoint unavailable, license required."),t.request.files?.appExport||t.throw(400,"Must provide app export file for import."),await $s.context.doInAppContext(t.params.appId,async()=>{await e(t),t.body=void 0,t.status=204,await r()})}}function vO(e){return async(t,r)=>{await tt()||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 He=require("@budibase/backend-core"),ue=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 qt(){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 ue.AppBackupStatus.COMPLETE:case ue.AppBackupStatus.FAILED:return{timestamp:t,finishedAt:t};case ue.AppBackupStatus.STARTED:return{timestamp:t,startedAt:t};case ue.AppBackupStatus.PENDING:return{timestamp:t,createdAt:t}}}async function EO(e,t,r,a){let n=await Pn(e);return await ve.storeAppBackupMetadata({...n,...om(t),contents:r,status:t,type:ue.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:ue.AppBackupType.RESTORE,trigger:ue.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 He.objectStore.deleteFile(He.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 He.objectStore.getReadStream(He.objectStore.ObjectStoreBuckets.BACKUPS,t.filename);return{metadata:t,stream:r}}async function LO(e){let{stream:t}=await sm(e),r=(0,am.join)(He.objectStore.budibaseTempDir(),He.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:ue.AppBackupStatus.PENDING,type:ue.AppBackupType.BACKUP,...r})}catch(n){if(n.status===409)return;throw n}return await qt().add({docId:a.id,docRev:a.rev,appId:e,export:{trigger:t,...r}}),await He.events.backup.appBackupTriggered(e,a.id,ue.AppBackupType.BACKUP,t,r?.name),a.id}async function PO(e,t,r,a){let n=await Pn(t),o;try{o=await Ys({appId:e,timestamp:new Date().toISOString(),status:ue.AppBackupStatus.PENDING,type:ue.AppBackupType.RESTORE,createdBy:a})}catch(s){if(s?.status===409)return;throw s}return await qt().add({appId:e,docId:o.id,docRev:o.rev,import:{nameForBackup:r,backupId:t,createdBy:a}}),{restoreId:o.id,metadata:n}}var UO={isEnabled:fs,triggerAppRestore:he(PO),triggerAppBackup:he(CO),getBackupDownloadStream:he(sm),downloadAppBackup:he(LO),fetchAppBackups:he(OO),storeAppBackupMetadata:he(Ys),updateBackupStatus:he(EO),updateRestoreStatus:he(RO),getAppBackup:he(Pn),updateAppBackup:he(_O),deleteAppBackup:he(xO)},ot=UO;var zs={};w(zs,{init:()=>Hs});var W=require("@budibase/backend-core");var Be=require("@budibase/types");var dr=P(require("fs"));async function Hs(e){qt().process(async t=>{let r=t.data;try{if(r.export)return console.log("Exporting app backup:",r.appId,r.export.trigger),NO(t,e);if(r.import)return console.log("Importing app backup:",r.appId,r.import.backupId),DO(t,e)}catch(a){W.logging.logAlert(`Failed to perform backup for app ID: ${r.appId}`,a)}})}async function qO(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 ot.updateBackupStatus(a.doc.id,p,f?.contents,f?.filename):await ot.storeAppBackupMetadata({appId:o,timestamp:s,trigger:e,status:p,name:a?.name,type:Be.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(Be.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(Be.AppBackupStatus.FAILED)}}async function DO(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 ot.updateRestoreStatus(r.docId,r.docRev,Be.AppBackupStatus.STARTED);await im(Be.AppBackupTrigger.RESTORING,i,a,{processing:t,createdBy:s,name:o});let y=await ot.downloadAppBackup(n),g=Be.AppBackupStatus.COMPLETE;try{await t.importAppFn(f,W.db.getDB(f),{file:{type:"application/gzip",path:y},key:y}),await qO(p),await new W.db.Replication({source:f,target:p}).replicate()}catch(I){W.logging.logAlert("App restore error",I),g=Be.AppBackupStatus.FAILED}finally{try{await W.db.getDB(f,{skip_setup:!0}).destroy()}catch{}}await ot.updateRestoreStatus(r.docId,m,g),dr.default.existsSync(y)&&dr.default.rmSync(y,{force:!0})})}async function NO(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 ot.updateBackupStatus(r.docId,Be.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)}})}var BO=async e=>{rm(),await Hs(e.processing)},Re={...ot,processing:zs,init:BO,getBackupQueue:qt};var um=async e=>{e.backups&&await Re.init(e.backups)};var fe={};w(fe,{create:()=>LM,find:()=>OM,get:()=>xM,remove:()=>PM,update:()=>CM});var LA=P(Wi()),st=require("@budibase/backend-core");var CA=require("@budibase/types");async function xM(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 OM(e){return await st.users.getById(e)}async function LM(e){let t=await Ve.getUserByEmail(e.email);if(t){if(t.scimInfo?.isSync)throw new st.HTTPError("User is already synched",409);e={...t,scimInfo:(0,LA.default)(t.scimInfo,e.scimInfo),password:void 0,firstName:e.firstName,lastName:e.lastName,updatedAt:e.updatedAt}}return await Ve.save(e,{requirePassword:!1})}async function CM(e,t){return await Ve.save(e,{requirePassword:!1,allowChangingEmail:t?.allowChangingEmail})}async function PM(e){return await Ve.destroy(e)}var Ar={};w(Ar,{create:()=>UM});var PA=P(Wi());var UA=require("@budibase/backend-core");async function UM(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 Nt={};w(Nt,{logRequest:()=>qM,logResponse:()=>DM});var $i=require("@budibase/backend-core");async function qM(e){$i.logging.logWarn("SCIM request log",e)}async function DM(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:()=>Ea});var bt=require("@budibase/backend-core");var $n=require("@budibase/types"),NM=(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 je.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 Ke.usageLimitIsExceeded($n.StaticQuotaName.USERS,$n.QuotaUsageType.STATIC)}return r()},qA=NM;var $={};w($,{requireFeature:()=>BM,requireFeatures:()=>MM});var BM=e=>async(t,r)=>{await yn(e),await r()},MM=(...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 Nt.logRequest({...e.request.toJSON(),body:e.request.body}),await Kn.context.doInScimContext(async()=>{let r=await t();return await Nt.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 Ea=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 Ut(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 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 kA(e){e.body={data:await ha()}}async function FA(e){let{groupId:t,rev:r}=e.params;try{await Es(t,r),e.body={message:"Group deleted successfully"}}catch(a){e.throw(a.status,a)}}async function QA(e){try{e.body=await Ut(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")),be=P(require("joi"));var _e=require("@budibase/types"),ze=require("@budibase/backend-core"),VA=new KA.default;function kM(){return ze.auth.joiValidator.body(be.default.object({_id:be.default.string().optional(),_rev:be.default.string().optional(),color:be.default.string().required(),icon:be.default.string().required(),name:be.default.string().trim().required().max(50),role:be.default.string().optional(),users:be.default.array().optional(),apps:be.default.array().optional(),roles:be.default.object().optional(),createdAt:be.default.string().optional(),updatedAt:be.default.string().optional()}).required())}VA.post("/api/global/groups",ze.auth.adminOnly,$.requireFeature(_e.Feature.USER_GROUPS),kM(),BA).get("/api/global/groups",$.requireFeature(_e.Feature.USER_GROUPS),kA).delete("/api/global/groups/:groupId/:rev",$.requireFeature(_e.Feature.USER_GROUPS),ze.auth.adminOnly,Vn("groupId"),FA).get("/api/global/groups/:groupId",$.requireFeature(_e.Feature.USER_GROUPS),ze.auth.builderOrAdmin,QA).get("/api/global/groups/:groupId/users",$.requireFeature(_e.Feature.USER_GROUPS),ze.auth.builderOrAdmin,jA).post("/api/global/groups/:groupId/users",ze.auth.adminOnly,$.requireFeature(_e.Feature.USER_GROUPS),Vn("groupId"),MA).post("/api/global/groups/:groupId/apps",ze.auth.builderOrAdmin,$.requireFeature(_e.Feature.USER_GROUPS),GA).post("/api/global/groups/:groupId/app/:appId/builder",ze.auth.builderOrAdmin,$.requireFeatures(_e.Feature.USER_GROUPS,_e.Feature.APP_BUILDERS),WA).delete("/api/global/groups/:groupId/app/:appId/builder",ze.auth.builderOrAdmin,$.requireFeatures(_e.Feature.USER_GROUPS,_e.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:Ye.isEncryptionKeyAvailable()}}async function zA(e){e.body={variables:await Ye.fetch()}}async function JA(e){let{name:t,production:r,development:a}=e.request.body;await Ye.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 Ye.update(a,{production:t,development:r}),e.body={message:`Environment variable "${a}" updated.`}}async function ZA(e){let t=e.params.varName;await Ye.remove(t),await Zi.events.environmentVariable.deleted(t),e.body={message:`Environment variable "${t}" deleted.`}}var Bt=require("@budibase/backend-core"),tb=P(require("@koa/router")),xa=P(require("joi")),rb=new tb.default;function eb(){return Bt.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",Bt.auth.builderOrAdmin,HA).get("/api/env/variables",Bt.auth.builderOrAdmin,zA).post("/api/env/variables",Bt.auth.builderOrAdmin,eb(),JA).patch("/api/env/variables/:varName",Bt.auth.builderOrAdmin,eb(),XA).delete("/api/env/variables/:varName",Bt.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"),Mt=require("@budibase/backend-core"),pb=P(require("@koa/router")),xe=P(require("joi"));function ib(){return Mt.auth.joiValidator.body(xe.default.object({userIds:xe.default.array().items(xe.default.string()).optional(),appIds:xe.default.array().items(xe.default.string()).optional(),events:xe.default.array().items(xe.default.string().valid(...Object.values(ub.Event))).optional(),startDate:xe.default.string().optional().allow(""),endDate:xe.default.string().optional().allow(""),fullSearch:xe.default.string().optional().allow(""),bookmark:xe.default.number()}))}var cb=new pb.default;cb.post("/api/global/auditlogs/search",Mt.auth.adminOnly,ib(),nb).get("/api/global/auditlogs/download",Mt.auth.adminOnly,Mt.middleware.querystringToBody,ib(),ob).get("/api/global/auditlogs/definitions",Mt.auth.adminOnly,sb);var lb=cb;var tu=require("@budibase/types");var fb=require("@budibase/backend-core");async function br(e,t){await Kt.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 Re.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 Re.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 Re.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 Re.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 Re.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 Re.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 WM(){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,WM(),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 vb=require("@budibase/backend-core");function Tb(e,t){let r=e.request.query[t];if(r!==void 0)return+r}var Eb=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 fe.get({pageSize:t,skip:r,filters:a});e.body={schemas:["urn:ietf:params:scim:api:messages:2.0:ListResponse"],totalResults:n.total,Resources:n.users.map(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 fe.find(t);e.body=Y.user.toScimUserResponse(r)},_b=async e=>{let t=Y.user.fromScimUser(e.request.body);try{let r=await fe.create(t);e.body=Y.user.toScimUserResponse(r)}catch(r){throw r instanceof vb.EmailUnavailableError&&e.throw(409,"Email already in use"),r}};function $M(e){let t=e.Operations.find(r=>(r.op==="Replace"||r.op==="replace")&&r.path==="active");return t?t.value===!1||t.value?.toLowerCase?.()==="false":!1}var xb=async e=>{let t=await fe.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($M(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 fe.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 fe.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 fe.find(y.value));break;case"remove":case"Remove":for(let y of m)p.push(await fe.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"),Ie=new Jb.default({prefix:"/api/global/scim/v2"});Ie.use(Yi);Ie.use(Vi);Ie.get("/users",Eb);Ie.get("/users/:id",Ea("id"),Rb);Ie.post("/users",_b);Ie.patch("/users/:id",Ea("id"),xb);Ie.delete("/users/:id",Ea("id"),ru);Ie.get("/groups",Kb);Ie.post("/groups",$.requireFeature(Oa.Feature.USER_GROUPS),Vb);Ie.get("/groups/:id",$.requireFeature(Oa.Feature.USER_GROUPS),Ra("id"),Yb);Ie.delete("/groups/:id",$.requireFeature(Oa.Feature.USER_GROUPS),Ra("id"),Hb);Ie.patch("/groups/:id",$.requireFeature(Oa.Feature.USER_GROUPS),Ra("id"),zb);var Xb=Ie;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 at.db.getUser(t);if(au.users.isGlobalBuilder(a)){e.body={message:"User already admin - no permissions updated."};return}await at.addAppBuilder(a,r),e.body={message:`User "${a.email}" app builder access updated.`}}async function eI(e){let{userId:t,appId:r}=e.params,a=await at.db.getUser(t);if(au.users.isGlobalBuilder(a)){e.body={message:"User already admin - no permissions removed."};return}await at.removeAppBuilder(a,r),e.body={message:`User "${a.email}" app builder access removed.`}}var 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:()=>IG,toScimUserResponse:()=>hG,userFilters:()=>SG});var Xn=require("@budibase/types"),nI=require("scim2-parse-filter"),oI=require("@budibase/backend-core"),sI=require("@budibase/shared-core"),{unreachable:yG}=sI.utils,hG=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},AG=e=>!!e?.id;function bG(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 IG=e=>{let t=AG(e)?e:void 0,r=bG(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:yG(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()}},SG=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:()=>vG,toScimGroupResponse:()=>wG});var wG=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}))}),TG=e=>!!e?.id,vG=e=>{let t=TG(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:()=>Je,LLMRequest:()=>K,TableGeneration:()=>Cu,agentHistoryTitleSystemPrompt:()=>DG,agentSystemPrompt:()=>qG,aiColumnSchemas:()=>Ou,aiTableResponseToTableSchema:()=>Eu,appendAIColumns:()=>Ru,classifyText:()=>lu,cleanData:()=>du,extractFileData:()=>LG,generateAIColumns:()=>Tu,generateCode:()=>UG,generateCronExpression:()=>fu,generateData:()=>vu,generateJs:()=>hu,generateSQL:()=>PG,generateTables:()=>wu,generationStructure:()=>xu,getLLM:()=>Pa,getLLMConfig:()=>Su,getLLMOrThrow:()=>yI,normalizeContentType:()=>pu,parseResponseFormat:()=>eo,sanitiseToolName:()=>EG,searchWeb:()=>yu,sentimentAnalysis:()=>gu,summarizeText:()=>Zn,tableDataStructuredOutput:()=>Lu,translate:()=>mu});var La=require("@budibase/types");function EG(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 Xe=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 Je=class{constructor({model:t,apiKey:r,maxTokens:a}){this._model=t,this._apiKey=r,this._maxTokens=a??parseInt(process.env.BUDIBASE_AI_MAX_PROMPT_TOKENS||"300")}get model(){return this._model}get apiKey(){return this._apiKey}get maxTokens(){return this._maxTokens}async prompt(t){return await 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 Oe=class extends Je{constructor(r){super(r);this.client=this.getClient(r)}getClient(r){if(!r.apiKey)throw new Error("No OpenAI API key found");return new 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 Je{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 Oe({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 Oe({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 Oe({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 RG(e){if(!e)return 0;let t=e.input_tokens;return e.output_tokens*3+t}var ao=class extends Je{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:RG(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 Oe{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",_G={OpenAI:Oe,TogetherAI:Oe,AzureOpenAI:no,Custom:Oe,Anthropic:ao,BudibaseAI:ro};async function xG(){return await Ca.tracer.trace("getAIConfig",async e=>{let t={type:dI.ConfigType.AI,config:{}};if(!Xe.context.isSelfHostUsingCloud()){let a=await Xe.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 OG(){return Ca.tracer.trace("getSelfHostOpenAIKeyConfig",e=>{if(!Xe.env.SELF_HOSTED){e.addTags({enabled:!1,reason:"not self host"});return}if(!Xe.env.OPENAI_API_KEY){e.addTags({enabled:!1,reason:"no OPENAI_API_KEY"});return}return e.addTags({enabled:!0}),{provider:"OpenAI",model:gI,apiKey:Xe.env.OPENAI_API_KEY}})}async function Su(){return Ca.tracer.trace("getLLMConfig",async()=>await xG()||await OG())}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=_G[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 Xe.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
40
|
Only return the summary.`)}function LG(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=
|
|
44
|
+
File ID: ${t}`}],o=CG(e),s=it.z.object({data:it.z.array(o)});return new K().addMessages([{role:"user",content:n}]).withFormat(s)}function CG(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 PG(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
|
|
49
|
+
Only provide the SQL.`)}function UG(e){return new K().addUserMessage(`Generate JavaScript code for the following request:
|
|
50
50
|
${e}.
|
|
51
|
-
Only provide the JS and nothing else.`)}function
|
|
52
|
-
${e}`)}function
|
|
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:
|
|
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:
|
|
56
56
|
|
|
57
57
|
${t.map(({name:n,code:o})=>{let s=o.replace(/^\s*return /g,"");return`- snippets.${n} = ${s.trim()}`}).join(`
|
|
58
|
-
`)}`),new
|
|
58
|
+
`)}`),new K().addSystemMessage(`
|
|
59
59
|
You are a helpful expert in writing JavaScript. A user is asking you for help
|
|
60
60
|
writing some JavaScript for their application.
|
|
61
61
|
|
|
@@ -144,7 +144,7 @@ a variable, it will be provided to you as a binding.
|
|
|
144
144
|
|
|
145
145
|
${a}
|
|
146
146
|
|
|
147
|
-
${r}`)}function
|
|
147
|
+
${r}`)}function wu(){let e=`
|
|
148
148
|
You are generating Budibase table schemas from user prompts.
|
|
149
149
|
Always return at least 2 tables, and define only one side of relationships using a link field.
|
|
150
150
|
Exclude id, created_at, and updated_at (Budibase adds them).
|
|
@@ -152,10 +152,10 @@ Include a variety of column types: text, dropdown, date, number.
|
|
|
152
152
|
Add at least one formula column, one attachment, and one multi-attachment column across the tables.
|
|
153
153
|
Budibase handles reverse relationships and many-to-many links \u2014 never define join tables or reverse fields.
|
|
154
154
|
You may specify foreignColumnName, but do not create that field manually.
|
|
155
|
-
`;return new
|
|
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 vu(){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
|
|
158
|
+
`;return new K().addSystemMessage(e)}function qG(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
|
|
173
|
+
\`\`\``}function DG(){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
|
|
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 Eu(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"),pe=A.z.object({name:A.z.string().describe("A human readable name for the field. It MUST be alpha-numeric and capitalised.")}),_u=pe.extend({type:A.z.literal(T.FieldType.LINK),tableId:A.z.string().describe("This must match one of the generated table names"),reverseFieldName:A.z.string().describe("Only the *name* of the field that will appear in the foreign table. Budibase creates this automatically. Do not define the column yourself."),relationshipId:A.z.string().describe("The ID of the relationship. It must be used in pairs, paring many-to-ones and one-to-manys, or many-to-manys with each other.")}),NG=A.z.array(A.z.union([pe.extend({type:A.z.enum([T.FieldType.STRING,T.FieldType.NUMBER,T.FieldType.BOOLEAN,T.FieldType.LONGFORM]),constraints:A.z.object({presence:A.z.boolean()}).optional()}),_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."),pe.extend({type:A.z.literal(T.FieldType.OPTIONS),constraints:A.z.object({inclusion:A.z.array(A.z.string()).describe("The options for the field"),presence:A.z.boolean()})}).describe("A single option from closed set of options"),pe.extend({type:A.z.literal(T.FieldType.ARRAY),constraints:A.z.object({inclusion:A.z.array(A.z.string()).describe("The options for the field"),presence:A.z.boolean(),type:A.z.literal(T.JsonFieldSubType.ARRAY)}).describe("Multiple selected options from closed set of options")}),pe.extend({type:A.z.literal(T.FieldType.FORMULA),formula:A.z.string().describe(`
|
|
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"),pe.extend({type:A.z.literal(T.FieldType.DATETIME),ignoreTimezones:A.z.boolean()}).describe("A datetime field, storing date and time"),pe.extend({type:A.z.literal(T.FieldType.DATETIME),ignoreTimezones:A.z.boolean(),timeOnly:A.z.literal(!0)}).describe("A time only field"),pe.extend({type:A.z.literal(T.FieldType.DATETIME),ignoreTimezones:A.z.boolean(),dateOnly:A.z.literal(!0)}).describe("A date only field"),pe.extend({type:A.z.literal(T.FieldType.ATTACHMENT_SINGLE),subtype:A.z.literal(T.AttachmentSubType.IMAGE)}).describe("Single image column"),pe.extend({type:A.z.literal(T.FieldType.ATTACHMENT_SINGLE)}).describe("Single attachment column. It stores a single document: pdf, word, etc. Use an appropriate name for the column, like 'Invoice', 'Document', etc."),pe.extend({type:A.z.literal(T.FieldType.ATTACHMENTS),subtype:A.z.literal(T.AttachmentSubType.IMAGE)}).describe("Multiple images column. Use an appropiate name for the columns, like 'Gallery', 'Photos', etc."),pe.extend({type:A.z.literal(T.FieldType.ATTACHMENTS)}).describe("Multiple attachments column. It might hold different kind of documents mixed up: pdf, txt, etc. Use an appropiate name for the columns, like 'Invoices', 'Documents', 'Attachments', etc.")])),
|
|
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"),pe.extend({type:A.z.literal(T.FieldType.DATETIME),ignoreTimezones:A.z.boolean()}).describe("A datetime field, storing date and time"),pe.extend({type:A.z.literal(T.FieldType.DATETIME),ignoreTimezones:A.z.boolean(),timeOnly:A.z.literal(!0)}).describe("A time only field"),pe.extend({type:A.z.literal(T.FieldType.DATETIME),ignoreTimezones:A.z.boolean(),dateOnly:A.z.literal(!0)}).describe("A date only field"),pe.extend({type:A.z.literal(T.FieldType.ATTACHMENT_SINGLE),subtype:A.z.literal(T.AttachmentSubType.IMAGE)}).describe("Single image column"),pe.extend({type:A.z.literal(T.FieldType.ATTACHMENT_SINGLE)}).describe("Single attachment column. It stores a single document: pdf, word, etc. Use an appropriate name for the column, like 'Invoice', 'Document', etc."),pe.extend({type:A.z.literal(T.FieldType.ATTACHMENTS),subtype:A.z.literal(T.AttachmentSubType.IMAGE)}).describe("Multiple images column. Use an appropiate name for the columns, like 'Gallery', 'Photos', etc."),pe.extend({type:A.z.literal(T.FieldType.ATTACHMENTS)}).describe("Multiple attachments column. It might hold different kind of documents mixed up: pdf, txt, etc. Use an appropiate name for the columns, like 'Invoices', 'Documents', 'Attachments', etc.")])),xu=A.z.object({tables:A.z.array(A.z.object({name:A.z.string(),schema:NG,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=[pe.extend({type:A.z.literal(T.FieldType.AI),operation:A.z.literal(T.AIOperationEnum.TRANSLATE),column:A.z.enum(a.filter(o=>[T.FieldType.STRING,T.FieldType.LONGFORM].includes(o.type)).map(o=>o.name)).describe("The columns to translate"),language:A.z.string()}).describe("This column will be autogenerated via AI to translate one column. Use it for reasonable cases, like translating descriptions or similar."),pe.extend({type:A.z.literal(T.FieldType.AI),operation:A.z.literal(T.AIOperationEnum.CATEGORISE_TEXT),columns:A.z.array(A.z.enum(a.filter(o=>[T.FieldType.STRING,T.FieldType.LONGFORM,T.FieldType.BOOLEAN,T.FieldType.NUMBER,T.FieldType.DATETIME].includes(o.type)).map(o=>o.name))).describe("The columns to be used as context"),categories:A.z.string().describe("CSV list of categories")}).describe("This column will be autogenerated via AI to categorise a row based on one or many columns.")];a.some(o=>o.type===T.FieldType.LONGFORM)&&n.push(pe.extend({type:A.z.literal(T.FieldType.AI),operation:A.z.literal(T.AIOperationEnum.SUMMARISE_TEXT),columns:A.z.array(A.z.enum(a.filter(o=>[T.FieldType.STRING,T.FieldType.LONGFORM].includes(o.type)).map(o=>o.name))).describe("Columns, from the current table, to be passed in the context. Use at least one.")}).describe("This column will be autogenerated via AI to summarise one or many columns.")),t=t.extend({[r.name]:A.z.array(A.z.union(n))})}return t}var k=require("zod"),AI=require("@budibase/shared-core"),D=require("@budibase/types");function Lu(e){let t=k.z.object({});for(let r of e){let a={_id:k.z.string().describe("Unique ID for the row")},n=k.z.union([k.z.literal("https://picsum.photos/600/600").describe("For profile pictures and similar"),k.z.literal("https://picsum.photos/1920/1080").describe("For anything else")]),o=k.z.object({fileName:k.z.string(),extension:k.z.enum([".pdf",".txt"]),content:k.z.string().describe("Random content for the file")});for(let s of Object.values(r.schema)){let{type:i}=s;switch(i){case D.FieldType.STRING:case D.FieldType.LONGFORM:a[s.name]=k.z.string();break;case D.FieldType.NUMBER:case D.FieldType.BIGINT:a[s.name]=k.z.number();break;case D.FieldType.BOOLEAN:a[s.name]=k.z.boolean();break;case D.FieldType.DATETIME:a[s.name]=k.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]=k.z.array(n):a[s.name]=k.z.array(o),a[s.name]=a[s.name].describe("Between 2 and 5 items.");break;case D.FieldType.OPTIONS:a[s.name]=k.z.enum(s.constraints.inclusion);break;case D.FieldType.LINK:{let p=k.z.string().describe(`Match one of the _ids created for table "${s.tableId}"`);s.relationshipType===D.RelationshipType.ONE_TO_MANY?a[s.name]=k.z.array(p).describe("Array with a single item"):s.relationshipType===D.RelationshipType.MANY_TO_MANY&&(a[s.name]=k.z.array(p).describe("Array with a one or many items. You can repeat the same ids between rows"))}break;case D.FieldType.ARRAY:a[s.name]=k.z.array(k.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]:k.z.array(k.z.object(a))}).describe(`Each table should include at least a few items (min 3, max 18). The number of items should not be evenly distributed. Instead, follow natural relationships and usage patterns based on the tables nature. For example:
|
|
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
|
|
184
|
-
"${t}"`).withFormat(
|
|
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 Eu(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(vu().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});
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"dist"
|
|
5
5
|
],
|
|
6
6
|
"license": "UNLICENSED",
|
|
7
|
-
"version": "3.13.
|
|
7
|
+
"version": "3.13.9",
|
|
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": "
|
|
76
|
+
"gitHead": "30a44240184250ea133efd48416ad2a33ee16d60"
|
|
77
77
|
}
|